File: siginfo_t.h

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,245,028 kB
  • sloc: cpp: 7,619,726; ansic: 1,434,018; asm: 1,058,748; python: 252,740; f90: 94,671; objc: 70,685; lisp: 42,813; pascal: 18,401; sh: 8,601; ml: 5,111; perl: 4,720; makefile: 3,675; awk: 3,523; javascript: 2,409; xml: 892; fortran: 770
file content (109 lines) | stat: -rw-r--r-- 3,329 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//===-- Definition of siginfo_t type --------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_TYPES_SIGINFO_T_H
#define LLVM_LIBC_TYPES_SIGINFO_T_H

#include "clock_t.h"
#include "pid_t.h"
#include "uid_t.h"
#include "union_sigval.h"

#define SI_MAX_SIZE 128

typedef struct {
  int si_signo; /* Signal number.  */
  int si_errno; /* If non-zero, an errno value associated with
                   this signal, as defined in <errno.h>.  */
  int si_code;  /* Signal code.  */
  union {
    int _si_pad[SI_MAX_SIZE / sizeof(int)];

    /* kill() */
    struct {
      pid_t si_pid; /* sender's pid */
      uid_t si_uid; /* sender's uid */
    } _kill;

    /* POSIX.1b timers */
    struct {
      int si_tid;             /* timer id */
      int _overrun;           /* overrun count */
      union sigval si_sigval; /* same as below */
    } _timer;

    /* POSIX.1b signals */
    struct {
      pid_t si_pid; /* sender's pid */
      uid_t si_uid; /* sender's uid */
      union sigval si_sigval;
    } _rt;

    /* SIGCHLD */
    struct {
      pid_t si_pid;  /* which child */
      uid_t si_uid;  /* sender's uid */
      int si_status; /* exit code */
      clock_t si_utime;
      clock_t si_stime;
    } _sigchld;

    /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */
    struct {
      void *si_addr;         /* faulting insn/memory ref. */
      short int si_addr_lsb; /* Valid LSB of the reported address.  */
      union {
        /* used when si_code=SEGV_BNDERR */
        struct {
          void *_lower;
          void *_upper;
        } _addr_bnd;
        /* used when si_code=SEGV_PKUERR */
        __UINT32_TYPE__ _pkey;
      } _bounds;
    } _sigfault;

    /* SIGPOLL */
    struct {
      long int si_band; /* POLL_IN, POLL_OUT, POLL_MSG */
      int si_fd;
    } _sigpoll;

    /* SIGSYS */
    struct {
      void *_call_addr;   /* calling user insn */
      int _syscall;       /* triggering system call number */
      unsigned int _arch; /* AUDIT_ARCH_* of syscall */
    } _sigsys;
  } _sifields;
} siginfo_t;

#undef SI_MAX_SIZE

#define si_pid _sifields._kill.si_pid
#define si_uid _sifields._kill.si_uid
#define si_timerid _sifields._timer.si_tid
#define si_overrun _sifields._timer.si_overrun
#define si_status _sifields._sigchld.si_status
#define si_utime _sifields._sigchld.si_utime
#define si_stime _sifields._sigchld.si_stime
#define si_value _sifields._rt.si_sigval
#define si_int _sifields._rt.si_sigval.sival_int
#define si_ptr _sifields._rt.si_sigval.sival_ptr
#define si_addr _sifields._sigfault.si_addr
#define si_addr_lsb _sifields._sigfault.si_addr_lsb
#define si_lower _sifields._sigfault._bounds._addr_bnd._lower
#define si_upper _sifields._sigfault._bounds._addr_bnd._upper
#define si_pkey _sifields._sigfault._bounds._pkey
#define si_band _sifields._sigpoll.si_band
#define si_fd _sifields._sigpoll.si_fd
#define si_call_addr _sifields._sigsys._call_addr
#define si_syscall _sifields._sigsys._syscall
#define si_arch _sifields._sigsys._arch

#endif // LLVM_LIBC_TYPES_SIGINFO_T_H