about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/bits/types/siginfo_t.h')
-rw-r--r--sysdeps/unix/sysv/linux/bits/types/siginfo_t.h83
1 files changed, 32 insertions, 51 deletions
diff --git a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
index 33766d1813..2d5fbdaf30 100644
--- a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
+++ b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
@@ -52,38 +52,33 @@ typedef struct
       {
 	int _pad[__SI_PAD_SIZE];
 
-	 /* kill().  */
+	 /* Signals sent by kill or sigqueue.  si_sigval is only valid for
+	    sigqueue.  */
 	struct
 	  {
 	    __pid_t si_pid;	/* Sending process ID.  */
 	    __uid_t si_uid;	/* Real user ID of sending process.  */
-	  } _kill;
+	    __sigval_t si_value;	/* Signal value.  */
+	  };
 
-	/* POSIX.1b timers.  */
+	/* POSIX.1b timers.  'si_sigval' (above) is also valid.  */
 	struct
 	  {
-	    int si_tid;		/* Timer ID.  */
+	    int si_timerid;	/* Timer ID.  */
 	    int si_overrun;	/* Overrun count.  */
 	    __sigval_t si_sigval;	/* Signal value.  */
-	  } _timer;
+	  };
 
-	/* POSIX.1b signals.  */
+	/* SIGCHLD.  The first two fields overlay the si_pid and si_uid
+	   fields above.  */
 	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.  */
+	    __pid_t __sigchld_si_pid;	/* Which child.	 */
+	    __uid_t __sigchld_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
@@ -96,56 +91,42 @@ typedef struct
 		/* used when si_code=SEGV_BNDERR */
 		struct
 		  {
-		    void *_lower;
-		    void *_upper;
-		  } _addr_bnd;
+		    void *si_lower;
+		    void *si_upper;
+		  };
 		/* used when si_code=SEGV_PKUERR */
-		__uint32_t _pkey;
-	      } _bounds;
-	  } _sigfault;
+		__uint32_t si_pkey;
+	      };
+	  };
 
 	/* 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;
+	    void *si_call_addr;	  /* Calling user insn.  */
+	    int si_syscall;	  /* Triggering system call number.  */
+	    unsigned int si_arch; /* AUDIT_ARCH_* of syscall.  */
+	  };
 #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
+/* These field aliases are not in POSIX, and are preserved for
+   backward compatibility only.  They may be removed in a future
+   release.  */
+#ifdef __USE_MISC
+#define si_int		si_value.sival_int \
+  __glibc_macro_warning("si_int is deprecated, use si_value.sival_int instead")
+#define si_ptr		si_value.sival_ptr \
+  __glibc_macro_warning("si_ptr is deprecated, use si_value.sival_ptr instead")
 #endif
 
 #endif