diff mbox

Update siginfo constants from Linux kernel (bug 21286)

Message ID alpine.DEB.2.21.1808301557410.4027@digraph.polyomino.org.uk
State Committed
Commit 89983cb37c9319806a551e8fe9f3a11ff8f973e1
Headers show

Commit Message

Joseph Myers Aug. 30, 2018, 3:58 p.m. UTC
As of Linux 4.17, siginfo headers in the Linux kernel have been
largely unified across architectures (so various constants are defined
with common values in include/uapi/asm-generic/siginfo.h even if not
all architectures can generate those particular constants).

This patch makes glibc reflect that unification and the current set of
constants in that header as of Linux 4.18.  Various constants are
added to bits/siginfo-consts.h (under the same feature test macro
conditions as the other constants with the same prefix), and removed
from the ia64 bits/siginfo-consts-arch.h where they were previously
there - this is not limited to constants added by the unification.
Nothing is done about macros that are defined in
include/uapi/asm-generic/siginfo.h with names with leading '__' (some
of those are ia64-specific ones that remain in the ia64
bits/siginfo-consts-arch.h without the leading '__' there).

A consequence of these changes is that TRAP_HWBKPT becomes available
on AArch64 and all other architectures as requested in bug 21286.

Tested for x86_64; tested with build-many-glibcs.py for ia64.

2018-08-30  Joseph Myers  <joseph@codesourcery.com>

	[BZ #21286]
	* sysdeps/unix/sysv/linux/bits/siginfo-consts.h (SI_DETHREAD): New
	constant.
	[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (ILL_BADIADDR): Likewise.
	[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (FPE_FLTUNK): Likewise.
	[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (FPE_CONDTRAP): Likewise.
	[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (SEGV_ACCADI): Likewise.
	[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (SEGV_ADIDERR): Likewise.
	[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8] (SEGV_ADIPERR): Likewise.
	[__USE_XOPEN_EXTENDED] (TRAP_BRANCH): Likewise.
	[__USE_XOPEN_EXTENDED] (TRAP_HWBKPT): Likewise.
	[__USE_XOPEN_EXTENDED] (TRAP_UNK): Likweise.
	* sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
	(ILL_BADIADDR): Remove constant.
	(TRAP_BRANCH): Likewise.
	(TRAP_HWBKPT): Likewise.

Comments

Joseph Myers Sept. 3, 2018, 1:03 p.m. UTC | #1
Ping.  This patch 
<https://sourceware.org/ml/libc-alpha/2018-08/msg00617.html> is pending 
review.
Joseph Myers Sept. 10, 2018, 12:39 p.m. UTC | #2
Ping^2.  This patch 
<https://sourceware.org/ml/libc-alpha/2018-08/msg00617.html> is still 
pending review.
Joseph Myers Sept. 17, 2018, 11:59 a.m. UTC | #3
Ping^3.  This patch 
<https://sourceware.org/ml/libc-alpha/2018-08/msg00617.html> is still 
pending review.
Dmitry V. Levin Sept. 17, 2018, 12:28 p.m. UTC | #4
On Thu, Aug 30, 2018 at 03:58:28PM +0000, Joseph Myers wrote:
> As of Linux 4.17, siginfo headers in the Linux kernel have been
> largely unified across architectures (so various constants are defined
> with common values in include/uapi/asm-generic/siginfo.h even if not
> all architectures can generate those particular constants).
> 
> This patch makes glibc reflect that unification and the current set of
> constants in that header as of Linux 4.18.  Various constants are
> added to bits/siginfo-consts.h (under the same feature test macro
> conditions as the other constants with the same prefix), and removed
> from the ia64 bits/siginfo-consts-arch.h where they were previously
> there - this is not limited to constants added by the unification.
> Nothing is done about macros that are defined in
> include/uapi/asm-generic/siginfo.h with names with leading '__' (some
> of those are ia64-specific ones that remain in the ia64
> bits/siginfo-consts-arch.h without the leading '__' there).
> 
> A consequence of these changes is that TRAP_HWBKPT becomes available
> on AArch64 and all other architectures as requested in bug 21286.
> 
> Tested for x86_64; tested with build-many-glibcs.py for ia64.

I've verified that new constants match those defined in Linux kernel headers.
diff mbox

Patch

diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-consts.h b/sysdeps/unix/sysv/linux/bits/siginfo-consts.h
index 193bd9c471..d69d27d922 100644
--- a/sysdeps/unix/sysv/linux/bits/siginfo-consts.h
+++ b/sysdeps/unix/sysv/linux/bits/siginfo-consts.h
@@ -35,7 +35,9 @@ 
 enum
 {
   SI_ASYNCNL = -60,		/* Sent by asynch name lookup completion.  */
-  SI_TKILL = -6,		/* Sent by tkill.  */
+  SI_DETHREAD = -7,		/* Sent by execve killing subsidiary
+				   threads.  */
+  SI_TKILL,			/* Sent by tkill.  */
   SI_SIGIO,			/* Sent by queued SIGIO. */
 #if __SI_ASYNCIO_AFTER_SIGIO
   SI_ASYNCIO,			/* Sent by AIO completion.  */
@@ -51,6 +53,7 @@  enum
   SI_KERNEL = 0x80		/* Send by kernel.  */
 
 #define SI_ASYNCNL	SI_ASYNCNL
+#define SI_DETHREAD	SI_DETHREAD
 #define SI_TKILL	SI_TKILL
 #define SI_SIGIO	SI_SIGIO
 #define SI_ASYNCIO	SI_ASYNCIO
@@ -81,8 +84,10 @@  enum
 #  define ILL_PRVREG	ILL_PRVREG
   ILL_COPROC,			/* Coprocessor error.  */
 #  define ILL_COPROC	ILL_COPROC
-  ILL_BADSTK			/* Internal stack error.  */
+  ILL_BADSTK,			/* Internal stack error.  */
 #  define ILL_BADSTK	ILL_BADSTK
+  ILL_BADIADDR			/* Unimplemented instruction address.  */
+#  define ILL_BADIADDR ILL_BADIADDR
 };
 
 /* `si_code' values for SIGFPE signal.  */
@@ -102,8 +107,12 @@  enum
 #  define FPE_FLTRES	FPE_FLTRES
   FPE_FLTINV,			/* Floating point invalid operation.  */
 #  define FPE_FLTINV	FPE_FLTINV
-  FPE_FLTSUB			/* Subscript out of range.  */
+  FPE_FLTSUB,			/* Subscript out of range.  */
 #  define FPE_FLTSUB	FPE_FLTSUB
+  FPE_FLTUNK = 14,		/* Undiagnosed floating-point exception.  */
+#  define FPE_FLTUNK	FPE_FLTUNK
+  FPE_CONDTRAP			/* Trap on condition.  */
+#  define FPE_CONDTRAP	FPE_CONDTRAP
 };
 
 /* `si_code' values for SIGSEGV signal.  */
@@ -115,8 +124,14 @@  enum
 #  define SEGV_ACCERR	SEGV_ACCERR
   SEGV_BNDERR,			/* Bounds checking failure.  */
 #  define SEGV_BNDERR	SEGV_BNDERR
-  SEGV_PKUERR			/* Protection key checking failure.  */
+  SEGV_PKUERR,			/* Protection key checking failure.  */
 #  define SEGV_PKUERR	SEGV_PKUERR
+  SEGV_ACCADI,			/* ADI not enabled for mapped object.  */
+#  define SEGV_ACCADI	SEGV_ACCADI
+  SEGV_ADIDERR,			/* Disrupting MCD error.  */
+#  define SEGV_ADIDERR	SEGV_ADIDERR
+  SEGV_ADIPERR			/* Precise MCD exception.  */
+#  define SEGV_ADIPERR	SEGV_ADIPERR
 };
 
 /* `si_code' values for SIGBUS signal.  */
@@ -141,8 +156,14 @@  enum
 {
   TRAP_BRKPT = 1,		/* Process breakpoint.  */
 #  define TRAP_BRKPT	TRAP_BRKPT
-  TRAP_TRACE			/* Process trace trap.  */
+  TRAP_TRACE,			/* Process trace trap.  */
 #  define TRAP_TRACE	TRAP_TRACE
+  TRAP_BRANCH,			/* Process taken branch trap.  */
+#  define TRAP_BRANCH	TRAP_BRANCH
+  TRAP_HWBKPT,			/* Hardware breakpoint/watchpoint.  */
+#  define TRAP_HWBKPT	TRAP_HWBKPT
+  TRAP_UNK			/* Undiagnosed trap.  */
+#  define TRAP_UNK	TRAP_UNK
 };
 # endif
 
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
index 4c5c4da516..5ef8af4ac7 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
@@ -5,9 +5,7 @@ 
 /* `si_code' values for SIGILL signal.  */
 enum
 {
-  ILL_BADIADDR = ILL_BADSTK + 1, /* Unimplemented instruction address. */
-#define ILL_BADIADDR ILL_BADIADDR
-  ILL_BREAK
+  ILL_BREAK = ILL_BADIADDR + 1
 #define ILL_BREAK ILL_BREAK
 };
 
@@ -33,13 +31,4 @@  enum
 #define SEGV_PSTKOVF SEGV_PSTKOVF
 };
 
-/* `si_code' values for SIGTRAP signal.  */
-enum
-{
-  TRAP_BRANCH = TRAP_TRACE + 1,
-#define TRAP_BRANCH TRAP_BRANCH
-  TRAP_HWBKPT
-#define TRAP_HWBKPT TRAP_HWBKPT
-};
-
 #endif