cpp-d1064d
[cross.git] / i686-linux-gnu-4.7 / usr / include / x86_64-linux-gnu / bits / types / siginfo_t.h
1 #ifndef __siginfo_t_defined
2 #define __siginfo_t_defined 1
3
4 #include <bits/wordsize.h>
5 #include <bits/types.h>
6 #include <bits/types/__sigval_t.h>
7
8 #define __SI_MAX_SIZE   128
9 #if __WORDSIZE == 64
10 # define __SI_PAD_SIZE  ((__SI_MAX_SIZE / sizeof (int)) - 4)
11 #else
12 # define __SI_PAD_SIZE  ((__SI_MAX_SIZE / sizeof (int)) - 3)
13 #endif
14
15 /* Some fields of siginfo_t have architecture-specific variations.  */
16 #include <bits/siginfo-arch.h>
17 #ifndef __SI_ALIGNMENT
18 # define __SI_ALIGNMENT         /* nothing */
19 #endif
20 #ifndef __SI_BAND_TYPE
21 # define __SI_BAND_TYPE         long int
22 #endif
23 #ifndef __SI_CLOCK_T
24 # define __SI_CLOCK_T           __clock_t
25 #endif
26 #ifndef __SI_ERRNO_THEN_CODE
27 # define __SI_ERRNO_THEN_CODE   1
28 #endif
29 #ifndef __SI_HAVE_SIGSYS
30 # define __SI_HAVE_SIGSYS       1
31 #endif
32 #ifndef __SI_SIGFAULT_ADDL
33 # define __SI_SIGFAULT_ADDL     /* nothing */
34 #endif
35
36 typedef struct
37   {
38     int si_signo;               /* Signal number.  */
39 #if __SI_ERRNO_THEN_CODE
40     int si_errno;               /* If non-zero, an errno value associated with
41                                    this signal, as defined in <errno.h>.  */
42     int si_code;                /* Signal code.  */
43 #else
44     int si_code;
45     int si_errno;
46 #endif
47 #if __WORDSIZE == 64
48     int __pad0;                 /* Explicit padding.  */
49 #endif
50
51     union
52       {
53         int _pad[__SI_PAD_SIZE];
54
55          /* kill().  */
56         struct
57           {
58             __pid_t si_pid;     /* Sending process ID.  */
59             __uid_t si_uid;     /* Real user ID of sending process.  */
60           } _kill;
61
62         /* POSIX.1b timers.  */
63         struct
64           {
65             int si_tid;         /* Timer ID.  */
66             int si_overrun;     /* Overrun count.  */
67             __sigval_t si_sigval;       /* Signal value.  */
68           } _timer;
69
70         /* POSIX.1b signals.  */
71         struct
72           {
73             __pid_t si_pid;     /* Sending process ID.  */
74             __uid_t si_uid;     /* Real user ID of sending process.  */
75             __sigval_t si_sigval;       /* Signal value.  */
76           } _rt;
77
78         /* SIGCHLD.  */
79         struct
80           {
81             __pid_t si_pid;     /* Which child.  */
82             __uid_t si_uid;     /* Real user ID of sending process.  */
83             int si_status;      /* Exit value or signal.  */
84             __SI_CLOCK_T si_utime;
85             __SI_CLOCK_T si_stime;
86           } _sigchld;
87
88         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
89         struct
90           {
91             void *si_addr;          /* Faulting insn/memory ref.  */
92             __SI_SIGFAULT_ADDL
93             short int si_addr_lsb;  /* Valid LSB of the reported address.  */
94             union
95               {
96                 /* used when si_code=SEGV_BNDERR */
97                 struct
98                   {
99                     void *_lower;
100                     void *_upper;
101                   } _addr_bnd;
102                 /* used when si_code=SEGV_PKUERR */
103                 __uint32_t _pkey;
104               } _bounds;
105           } _sigfault;
106
107         /* SIGPOLL.  */
108         struct
109           {
110             __SI_BAND_TYPE si_band;     /* Band event for SIGPOLL.  */
111             int si_fd;
112           } _sigpoll;
113
114         /* SIGSYS.  */
115 #if __SI_HAVE_SIGSYS
116         struct
117           {
118             void *_call_addr;   /* Calling user insn.  */
119             int _syscall;       /* Triggering system call number.  */
120             unsigned int _arch; /* AUDIT_ARCH_* of syscall.  */
121           } _sigsys;
122 #endif
123       } _sifields;
124   } siginfo_t __SI_ALIGNMENT;
125
126
127 /* X/Open requires some more fields with fixed names.  */
128 #define si_pid          _sifields._kill.si_pid
129 #define si_uid          _sifields._kill.si_uid
130 #define si_timerid      _sifields._timer.si_tid
131 #define si_overrun      _sifields._timer.si_overrun
132 #define si_status       _sifields._sigchld.si_status
133 #define si_utime        _sifields._sigchld.si_utime
134 #define si_stime        _sifields._sigchld.si_stime
135 #define si_value        _sifields._rt.si_sigval
136 #define si_int          _sifields._rt.si_sigval.sival_int
137 #define si_ptr          _sifields._rt.si_sigval.sival_ptr
138 #define si_addr         _sifields._sigfault.si_addr
139 #define si_addr_lsb     _sifields._sigfault.si_addr_lsb
140 #define si_lower        _sifields._sigfault._bounds._addr_bnd._lower
141 #define si_upper        _sifields._sigfault._bounds._addr_bnd._upper
142 #define si_pkey         _sifields._sigfault._bounds._pkey
143 #define si_band         _sifields._sigpoll.si_band
144 #define si_fd           _sifields._sigpoll.si_fd
145 #if __SI_HAVE_SIGSYS
146 # define si_call_addr   _sifields._sigsys._call_addr
147 # define si_syscall     _sifields._sigsys._syscall
148 # define si_arch        _sifields._sigsys._arch
149 #endif
150
151 #endif