buildrootschalter/package/uclibc/0.9.33.2/uclibc-0056-MIPS-set-_NSIG-to-128-not-129.-This-matches-glibc.patch
James Hogan 54ba2704b0 uclibc: add patches to fix MIPS __SIGRTMAX and SIG127
Add two uClibc 0.9.33.2 patches which fix issues relating to high signal
number handling on MIPS.

The first patch (0056) fixes _NSIG (and as a result __SIGRTMAX) to match
glibc. This fixes GDB on MIPS with uClibc, which cannot handle
__SIGRTMAX == 128 and emits the error:
GDB bug: target.c (gdb_signal_from_host): unrecognized real-time signal
This patch is from uClibc commit 2da958760f79 (MIPS: set _NSIG to
128, not 129. This matches glibc.) and applies without conflicts.

The second patch (0057) fixes the wait status macros to correctly
interpret status 0x007f on MIPS (other arches don't have signal 127).
This patch is from uClibc commit 4a96b9486871 (bits/waitstatus.h:
correctly interpret status 0x007f on MIPS) and applies without
conflicts.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-06-09 11:27:04 +02:00

44 lines
1.7 KiB
Diff

From 2da958760f798224065508431787e3a83b7fe2ae Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Fri, 28 Jun 2013 21:59:54 +0200
Subject: [PATCH-0.9.33] MIPS: set _NSIG to 128, not 129. This matches glibc.
Prompted by lkml discussion of a MIPS bug where sending
signal 128 was found to be able to crash the machine :/
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
libc/sysdeps/linux/mips/bits/signum.h | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/libc/sysdeps/linux/mips/bits/signum.h b/libc/sysdeps/linux/mips/bits/signum.h
index cf9b834..e83250e 100644
--- a/libc/sysdeps/linux/mips/bits/signum.h
+++ b/libc/sysdeps/linux/mips/bits/signum.h
@@ -53,7 +53,20 @@
#define SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
#define SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */
-/* Biggest signal number + 1 (including real-time signals). */
-#define _NSIG 129
+/* MIPS is special by having 128 signals.
+ * All (?) other architectures have at most 64 signals.
+ * Having 128 signals is problematic because signal nos are 1-based
+ * and last signal number is then 128.
+ * This plays havoc with WIFSIGNALED and WCOREDUMP in waitpid status word,
+ * when process dies from signal 128.
+ * Linux kernel 3.9 accepts signal 128, with awful results :/
+ * It is being fixed.
+ *
+ * glibc (accidentally?) papers over this issue by declaring _NSIG to be 128,
+ * not 129 (despite claiming that _NSIG is "biggest signal number + 1"
+ * in the comment above that definition). We follow suit.
+ * Note that this results in __SIGRTMAX == 127. It is intended.
+ */
+#define _NSIG 128
#endif /* <signal.h> included. */
--
1.8.1.2