modernc.org/cc@v1.0.1/v2/headers/linux_arm/usr/include/arm-linux-gnueabihf/bits/siginfo.h (about) 1 /* siginfo_t, sigevent and constants. Linux version. 2 Copyright (C) 1997-2016 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <http://www.gnu.org/licenses/>. */ 18 19 #if !defined _SIGNAL_H && !defined __need_siginfo_t \ 20 && !defined __need_sigevent_t 21 #error "Never include this file directly. Use <signal.h> instead" 22 #endif 23 24 #include <bits/wordsize.h> 25 26 #if (!defined __have_sigval_t \ 27 && (defined _SIGNAL_H || defined __need_siginfo_t \ 28 || defined __need_sigevent_t)) 29 #define __have_sigval_t 1 30 31 /* Type for data associated with a signal. */ 32 typedef union sigval { 33 int sival_int; 34 void *sival_ptr; 35 } sigval_t; 36 #endif 37 38 #if (!defined __have_siginfo_t \ 39 && (defined _SIGNAL_H || defined __need_siginfo_t)) 40 #define __have_siginfo_t 1 41 42 #define __SI_MAX_SIZE 128 43 #if __WORDSIZE == 64 44 #define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) 45 #else 46 #define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) 47 #endif 48 49 typedef struct { 50 int si_signo; /* Signal number. */ 51 int si_errno; /* If non-zero, an errno value associated with 52 this signal, as defined in <errno.h>. */ 53 int si_code; /* Signal code. */ 54 55 union { 56 int _pad[__SI_PAD_SIZE]; 57 58 /* kill(). */ 59 struct { 60 __pid_t si_pid; /* Sending process ID. */ 61 __uid_t si_uid; /* Real user ID of sending process. */ 62 } _kill; 63 64 /* POSIX.1b timers. */ 65 struct { 66 int si_tid; /* Timer ID. */ 67 int si_overrun; /* Overrun count. */ 68 sigval_t si_sigval; /* Signal value. */ 69 } _timer; 70 71 /* POSIX.1b signals. */ 72 struct { 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 __pid_t si_pid; /* Which child. */ 81 __uid_t si_uid; /* Real user ID of sending process. */ 82 int si_status; /* Exit value or signal. */ 83 __clock_t si_utime; 84 __clock_t si_stime; 85 } _sigchld; 86 87 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ 88 struct { 89 void *si_addr; /* Faulting insn/memory ref. */ 90 short int si_addr_lsb; /* Valid LSB of the reported address. */ 91 } _sigfault; 92 93 /* SIGPOLL. */ 94 struct { 95 long int si_band; /* Band event for SIGPOLL. */ 96 int si_fd; 97 } _sigpoll; 98 99 /* SIGSYS. */ 100 struct { 101 void *_call_addr; /* Calling user insn. */ 102 int _syscall; /* Triggering system call number. */ 103 unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ 104 } _sigsys; 105 } _sifields; 106 } siginfo_t; 107 108 /* X/Open requires some more fields with fixed names. */ 109 #define si_pid _sifields._kill.si_pid 110 #define si_uid _sifields._kill.si_uid 111 #define si_timerid _sifields._timer.si_tid 112 #define si_overrun _sifields._timer.si_overrun 113 #define si_status _sifields._sigchld.si_status 114 #define si_utime _sifields._sigchld.si_utime 115 #define si_stime _sifields._sigchld.si_stime 116 #define si_value _sifields._rt.si_sigval 117 #define si_int _sifields._rt.si_sigval.sival_int 118 #define si_ptr _sifields._rt.si_sigval.sival_ptr 119 #define si_addr _sifields._sigfault.si_addr 120 #define si_addr_lsb _sifields._sigfault.si_addr_lsb 121 #define si_band _sifields._sigpoll.si_band 122 #define si_fd _sifields._sigpoll.si_fd 123 #define si_call_addr _sifields._sigsys._call_addr 124 #define si_syscall _sifields._sigsys._syscall 125 #define si_arch _sifields._sigsys._arch 126 127 /* Values for `si_code'. Positive values are reserved for kernel-generated 128 signals. */ 129 enum { 130 SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ 131 #define SI_ASYNCNL SI_ASYNCNL 132 SI_TKILL = -6, /* Sent by tkill. */ 133 #define SI_TKILL SI_TKILL 134 SI_SIGIO, /* Sent by queued SIGIO. */ 135 #define SI_SIGIO SI_SIGIO 136 SI_ASYNCIO, /* Sent by AIO completion. */ 137 #define SI_ASYNCIO SI_ASYNCIO 138 SI_MESGQ, /* Sent by real time mesq state change. */ 139 #define SI_MESGQ SI_MESGQ 140 SI_TIMER, /* Sent by timer expiration. */ 141 #define SI_TIMER SI_TIMER 142 SI_QUEUE, /* Sent by sigqueue. */ 143 #define SI_QUEUE SI_QUEUE 144 SI_USER, /* Sent by kill, sigsend. */ 145 #define SI_USER SI_USER 146 SI_KERNEL = 0x80 /* Send by kernel. */ 147 #define SI_KERNEL SI_KERNEL 148 }; 149 150 #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 151 /* `si_code' values for SIGILL signal. */ 152 enum { 153 ILL_ILLOPC = 1, /* Illegal opcode. */ 154 #define ILL_ILLOPC ILL_ILLOPC 155 ILL_ILLOPN, /* Illegal operand. */ 156 #define ILL_ILLOPN ILL_ILLOPN 157 ILL_ILLADR, /* Illegal addressing mode. */ 158 #define ILL_ILLADR ILL_ILLADR 159 ILL_ILLTRP, /* Illegal trap. */ 160 #define ILL_ILLTRP ILL_ILLTRP 161 ILL_PRVOPC, /* Privileged opcode. */ 162 #define ILL_PRVOPC ILL_PRVOPC 163 ILL_PRVREG, /* Privileged register. */ 164 #define ILL_PRVREG ILL_PRVREG 165 ILL_COPROC, /* Coprocessor error. */ 166 #define ILL_COPROC ILL_COPROC 167 ILL_BADSTK /* Internal stack error. */ 168 #define ILL_BADSTK ILL_BADSTK 169 }; 170 171 /* `si_code' values for SIGFPE signal. */ 172 enum { 173 FPE_INTDIV = 1, /* Integer divide by zero. */ 174 #define FPE_INTDIV FPE_INTDIV 175 FPE_INTOVF, /* Integer overflow. */ 176 #define FPE_INTOVF FPE_INTOVF 177 FPE_FLTDIV, /* Floating point divide by zero. */ 178 #define FPE_FLTDIV FPE_FLTDIV 179 FPE_FLTOVF, /* Floating point overflow. */ 180 #define FPE_FLTOVF FPE_FLTOVF 181 FPE_FLTUND, /* Floating point underflow. */ 182 #define FPE_FLTUND FPE_FLTUND 183 FPE_FLTRES, /* Floating point inexact result. */ 184 #define FPE_FLTRES FPE_FLTRES 185 FPE_FLTINV, /* Floating point invalid operation. */ 186 #define FPE_FLTINV FPE_FLTINV 187 FPE_FLTSUB /* Subscript out of range. */ 188 #define FPE_FLTSUB FPE_FLTSUB 189 }; 190 191 /* `si_code' values for SIGSEGV signal. */ 192 enum { 193 SEGV_MAPERR = 1, /* Address not mapped to object. */ 194 #define SEGV_MAPERR SEGV_MAPERR 195 SEGV_ACCERR /* Invalid permissions for mapped object. */ 196 #define SEGV_ACCERR SEGV_ACCERR 197 }; 198 199 /* `si_code' values for SIGBUS signal. */ 200 enum { 201 BUS_ADRALN = 1, /* Invalid address alignment. */ 202 #define BUS_ADRALN BUS_ADRALN 203 BUS_ADRERR, /* Non-existant physical address. */ 204 #define BUS_ADRERR BUS_ADRERR 205 BUS_OBJERR, /* Object specific hardware error. */ 206 #define BUS_OBJERR BUS_OBJERR 207 BUS_MCEERR_AR, /* Hardware memory error: action required. */ 208 #define BUS_MCEERR_AR BUS_MCEERR_AR 209 BUS_MCEERR_AO /* Hardware memory error: action optional. */ 210 #define BUS_MCEERR_AO BUS_MCEERR_AO 211 }; 212 #endif 213 214 #ifdef __USE_XOPEN_EXTENDED 215 /* `si_code' values for SIGTRAP signal. */ 216 enum { 217 TRAP_BRKPT = 1, /* Process breakpoint. */ 218 #define TRAP_BRKPT TRAP_BRKPT 219 TRAP_TRACE /* Process trace trap. */ 220 #define TRAP_TRACE TRAP_TRACE 221 }; 222 #endif 223 224 #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 225 /* `si_code' values for SIGCHLD signal. */ 226 enum { 227 CLD_EXITED = 1, /* Child has exited. */ 228 #define CLD_EXITED CLD_EXITED 229 CLD_KILLED, /* Child was killed. */ 230 #define CLD_KILLED CLD_KILLED 231 CLD_DUMPED, /* Child terminated abnormally. */ 232 #define CLD_DUMPED CLD_DUMPED 233 CLD_TRAPPED, /* Traced child has trapped. */ 234 #define CLD_TRAPPED CLD_TRAPPED 235 CLD_STOPPED, /* Child has stopped. */ 236 #define CLD_STOPPED CLD_STOPPED 237 CLD_CONTINUED /* Stopped child has continued. */ 238 #define CLD_CONTINUED CLD_CONTINUED 239 }; 240 241 /* `si_code' values for SIGPOLL signal. */ 242 enum { 243 POLL_IN = 1, /* Data input available. */ 244 #define POLL_IN POLL_IN 245 POLL_OUT, /* Output buffers available. */ 246 #define POLL_OUT POLL_OUT 247 POLL_MSG, /* Input message available. */ 248 #define POLL_MSG POLL_MSG 249 POLL_ERR, /* I/O error. */ 250 #define POLL_ERR POLL_ERR 251 POLL_PRI, /* High priority input available. */ 252 #define POLL_PRI POLL_PRI 253 POLL_HUP /* Device disconnected. */ 254 #define POLL_HUP POLL_HUP 255 }; 256 #endif 257 258 #undef __need_siginfo_t 259 #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ 260 261 #if (defined _SIGNAL_H || defined __need_sigevent_t) \ 262 && !defined __have_sigevent_t 263 #define __have_sigevent_t 1 264 265 /* Structure to transport application-defined values with signals. */ 266 #define __SIGEV_MAX_SIZE 64 267 #if __WORDSIZE == 64 268 #define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) 269 #else 270 #define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) 271 #endif 272 273 /* Forward declaration. */ 274 #ifndef __have_pthread_attr_t 275 typedef union pthread_attr_t pthread_attr_t; 276 #define __have_pthread_attr_t 1 277 #endif 278 279 typedef struct sigevent { 280 sigval_t sigev_value; 281 int sigev_signo; 282 int sigev_notify; 283 284 union { 285 int _pad[__SIGEV_PAD_SIZE]; 286 287 /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the 288 thread to receive the signal. */ 289 __pid_t _tid; 290 291 struct { 292 void (*_function) (sigval_t); /* Function to start. */ 293 pthread_attr_t *_attribute; /* Thread attributes. */ 294 } _sigev_thread; 295 } _sigev_un; 296 } sigevent_t; 297 298 /* POSIX names to access some of the members. */ 299 #define sigev_notify_function _sigev_un._sigev_thread._function 300 #define sigev_notify_attributes _sigev_un._sigev_thread._attribute 301 302 /* `sigev_notify' values. */ 303 enum { 304 SIGEV_SIGNAL = 0, /* Notify via signal. */ 305 #define SIGEV_SIGNAL SIGEV_SIGNAL 306 SIGEV_NONE, /* Other notification: meaningless. */ 307 #define SIGEV_NONE SIGEV_NONE 308 SIGEV_THREAD, /* Deliver via thread creation. */ 309 #define SIGEV_THREAD SIGEV_THREAD 310 311 SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ 312 #define SIGEV_THREAD_ID SIGEV_THREAD_ID 313 }; 314 315 #endif /* have _SIGNAL_H. */