about summary refs log tree commit diff
path: root/REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
committerZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
commit5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch)
tree4470480d904b65cf14ca524f96f79eca818c3eaf /REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
parent199fc19d3aaaf57944ef036e15904febe877fc93 (diff)
downloadglibc-zack/build-layout-experiment.tar.gz
glibc-zack/build-layout-experiment.tar.xz
glibc-zack/build-layout-experiment.zip
Prepare for radical source tree reorganization. zack/build-layout-experiment
All top-level files and directories are moved into a temporary storage
directory, REORG.TODO, except for files that will certainly still
exist in their current form at top level when we're done (COPYING,
COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which
are moved to the new directory OldChangeLogs, instead), and the
generated file INSTALL (which is just deleted; in the new order, there
will be no generated files checked into version control).
Diffstat (limited to 'REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h')
-rw-r--r--REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h b/REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
new file mode 100644
index 0000000000..bed69148f9
--- /dev/null
+++ b/REORG.TODO/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
@@ -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
+	  {
+	    long int 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