cpp-d1064d
[cross.git] / i686-linux-gnu-4.7 / usr / include / x86_64-linux-gnu / bits / types / siginfo_t.h
diff --git a/i686-linux-gnu-4.7/usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h b/i686-linux-gnu-4.7/usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h
new file mode 100644 (file)
index 0000000..43c4e00
--- /dev/null
@@ -0,0 +1,151 @@
+#ifndef __siginfo_t_defined
+#define __siginfo_t_defined 1
+
+#include <bits/wordsize.h>
+#include <bits/types.h>
+#include <bits/types/__sigval_t.h>
+
+#define __SI_MAX_SIZE  128
+#if __WORDSIZE == 64
+# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
+#else
+# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
+#endif
+
+/* Some fields of siginfo_t have architecture-specific variations.  */
+#include <bits/siginfo-arch.h>
+#ifndef __SI_ALIGNMENT
+# define __SI_ALIGNMENT                /* nothing */
+#endif
+#ifndef __SI_BAND_TYPE
+# define __SI_BAND_TYPE                long int
+#endif
+#ifndef __SI_CLOCK_T
+# define __SI_CLOCK_T          __clock_t
+#endif
+#ifndef __SI_ERRNO_THEN_CODE
+# define __SI_ERRNO_THEN_CODE  1
+#endif
+#ifndef __SI_HAVE_SIGSYS
+# define __SI_HAVE_SIGSYS      1
+#endif
+#ifndef __SI_SIGFAULT_ADDL
+# define __SI_SIGFAULT_ADDL    /* nothing */
+#endif
+
+typedef struct
+  {
+    int si_signo;              /* Signal number.  */
+#if __SI_ERRNO_THEN_CODE
+    int si_errno;              /* If non-zero, an errno value associated with
+                                  this signal, as defined in <errno.h>.  */
+    int si_code;               /* Signal code.  */
+#else
+    int si_code;
+    int si_errno;
+#endif
+#if __WORDSIZE == 64
+    int __pad0;                        /* Explicit padding.  */
+#endif
+
+    union
+      {
+       int _pad[__SI_PAD_SIZE];
+
+        /* kill().  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+         } _kill;
+
+       /* POSIX.1b timers.  */
+       struct
+         {
+           int si_tid;         /* Timer ID.  */
+           int si_overrun;     /* Overrun count.  */
+           __sigval_t si_sigval;       /* Signal value.  */
+         } _timer;
+
+       /* POSIX.1b signals.  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           __sigval_t si_sigval;       /* Signal value.  */
+         } _rt;
+
+       /* SIGCHLD.  */
+       struct
+         {
+           __pid_t si_pid;     /* Which child.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           int si_status;      /* Exit value or signal.  */
+           __SI_CLOCK_T si_utime;
+           __SI_CLOCK_T si_stime;
+         } _sigchld;
+
+       /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
+       struct
+         {
+           void *si_addr;          /* Faulting insn/memory ref.  */
+           __SI_SIGFAULT_ADDL
+           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_t _pkey;
+             } _bounds;
+         } _sigfault;
+
+       /* SIGPOLL.  */
+       struct
+         {
+           __SI_BAND_TYPE si_band;     /* Band event for SIGPOLL.  */
+           int si_fd;
+         } _sigpoll;
+
+       /* SIGSYS.  */
+#if __SI_HAVE_SIGSYS
+       struct
+         {
+           void *_call_addr;   /* Calling user insn.  */
+           int _syscall;       /* Triggering system call number.  */
+           unsigned int _arch; /* AUDIT_ARCH_* of syscall.  */
+         } _sigsys;
+#endif
+      } _sifields;
+  } siginfo_t __SI_ALIGNMENT;
+
+
+/* X/Open requires some more fields with fixed names.  */
+#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
+#if __SI_HAVE_SIGSYS
+# define si_call_addr  _sifields._sigsys._call_addr
+# define si_syscall    _sifields._sigsys._syscall
+# define si_arch       _sifields._sigsys._arch
+#endif
+
+#endif