fix siginfo_t for mips
authorSzabolcs Nagy <nsz@port70.net>
Wed, 27 Jan 2016 00:54:25 +0000 (00:54 +0000)
committerRich Felker <dalias@aerifal.cx>
Wed, 27 Jan 2016 03:31:21 +0000 (22:31 -0500)
si_errno and si_code are swapped in mips siginfo_t compared to other
archs and some si_code values are different.  This fix is required
for POSIX timers to work.

based on patch by Dmitry Ivanov.

arch/mips/bits/signal.h
include/signal.h

index 818e0a7b306789899c3163a273e5e13730fd8a5b..889f77e88e24e1149a969ca193ede85a686a59c5 100644 (file)
@@ -73,6 +73,15 @@ typedef struct __ucontext {
 #define SIG_UNBLOCK   2
 #define SIG_SETMASK   3
 
+#undef SI_ASYNCIO
+#undef SI_MESGQ
+#undef SI_TIMER
+#define SI_ASYNCIO (-2)
+#define SI_MESGQ (-4)
+#define SI_TIMER (-3)
+
+#define __SI_SWAP_ERRNO_CODE
+
 #endif
 
 #define SIGHUP    1
index 8df725d9c9e0747edad50e9550e5b7d4a6aa99b1..c6323c613ddfcd75729d8664684e565cf5308161 100644 (file)
@@ -94,7 +94,11 @@ union sigval {
 };
 
 typedef struct {
+#ifdef __SI_SWAP_ERRNO_CODE
+       int si_signo, si_code, si_errno;
+#else
        int si_signo, si_errno, si_code;
+#endif
        union {
                char __pad[128 - 2*sizeof(int) - sizeof(long)];
                struct {