summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-11-23 14:35:25 -0500
committerRich Felker <dalias@aerifal.cx>2012-11-23 14:35:25 -0500
commitc72fc23843906e2571e817a62c94cee15648b7dc (patch)
tree539517daf0b9e34cba766a89d9775722456f5c41
parentac562aa1ef4012f617583f474a8d8e5c972ed6ee (diff)
downloadmusl-c72fc23843906e2571e817a62c94cee15648b7dc.tar.gz
musl-c72fc23843906e2571e817a62c94cee15648b7dc.tar.bz2
musl-c72fc23843906e2571e817a62c94cee15648b7dc.tar.xz
musl-c72fc23843906e2571e817a62c94cee15648b7dc.zip
sigcontext/mcontext cleanup for arch-specific bits
with these changes, the members/types of mcontext_t and related stuff should closely match the glibc definitions. unlike glibc, however, the definitions here avoid using typedefs as much as possible and work directly with the underlying types, to minimize namespace pollution from signal.h in the default (_BSD_SOURCE) profile. this is a first step in improving compatibility with applications which poke at context/register information -- mainly debuggers, trace utilities, etc. additional definitions in ucontext.h and other headers may be needed later. if feature test macros are used to request a conforming namespace, mcontext_t is replaced with an opaque structure of the equivalent size and alignment; conforming programs cannot examine its contents anyway.
-rw-r--r--arch/arm/bits/signal.h26
-rw-r--r--arch/i386/bits/signal.h48
-rw-r--r--arch/microblaze/bits/signal.h30
-rw-r--r--arch/mips/bits/signal.h22
-rw-r--r--arch/x86_64/bits/signal.h49
5 files changed, 94 insertions, 81 deletions
diff --git a/arch/arm/bits/signal.h b/arch/arm/bits/signal.h
index 9323b112..190b1d63 100644
--- a/arch/arm/bits/signal.h
+++ b/arch/arm/bits/signal.h
@@ -1,9 +1,21 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef struct sigcontext
+{
+ unsigned long trap_no, error_code, oldmask;
+ unsigned long arm_r0, arm_r1, arm_r2, arm_r3;
+ unsigned long arm_r4, arm_r5, arm_r6, arm_r7;
+ unsigned long arm_r8, arm_r9, arm_r10, arm_fp;
+ unsigned long arm_ip, arm_sp, arm_lr, arm_pc;
+ unsigned long arm_cpsr, fault_address;
+} mcontext_t;
+#else
typedef struct {
unsigned long __regs[21];
} mcontext_t;
+#endif
typedef struct __ucontext {
unsigned long uc_flags;
@@ -11,7 +23,7 @@ typedef struct __ucontext {
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
- unsigned long uc_regspace[128];
+ unsigned long long uc_regspace[64];
} ucontext_t;
#define SA_NOCLDSTOP 1
@@ -23,18 +35,6 @@ typedef struct __ucontext {
#define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
-#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct sigcontext
-{
- unsigned long trap_no, error_code, oldmask;
- unsigned long arm_r0, arm_r1, arm_r2, arm_r3;
- unsigned long arm_r4, arm_r5, arm_r6, arm_r7;
- unsigned long arm_r8, arm_r9, arm_r10, arm_fp;
- unsigned long arm_ip, arm_sp, arm_lr, arm_pc;
- unsigned long arm_cpsr, fault_address;
-};
-#endif
-
#endif
#define SIGHUP 1
diff --git a/arch/i386/bits/signal.h b/arch/i386/bits/signal.h
index 498dd1cc..3caadea2 100644
--- a/arch/i386/bits/signal.h
+++ b/arch/i386/bits/signal.h
@@ -1,17 +1,34 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct __fpstate {
- unsigned long __x[7];
- unsigned char __y[80];
- unsigned long __z;
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+struct _fpstate {
+ unsigned long cw, sw, tag, ipoff, cssel, dataoff, datasel;
+ struct {
+ unsigned short significand[4], exponent;
+ } _st[8];
+ unsigned long status;
};
-
+struct sigcontext {
+ unsigned short gs, __gsh, fs, __fsh, es, __esh, ds, __dsh;
+ unsigned long edi, esi, ebp, esp, ebx, edx, ecx, eax;
+ unsigned long trapno, err, eip;
+ unsigned short cs, __csh;
+ unsigned long eflags, esp_at_signal;
+ unsigned short ss, __ssh;
+ struct _fpstate *fpstate;
+ unsigned long oldmask, cr2;
+};
+typedef struct {
+ unsigned gregs[19];
+ struct _fpstate *fpregs;
+ unsigned long oldmask, cr2;
+} mcontext_t;
+#else
typedef struct {
- unsigned long __gregs[19];
- void *__fpregs;
- unsigned long __oldmask, __cr2;
+ unsigned __space[22];
} mcontext_t;
+#endif
typedef struct __ucontext {
unsigned long uc_flags;
@@ -19,7 +36,7 @@ typedef struct __ucontext {
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
- struct __fpstate __fpregs_mem;
+ unsigned long __fpregs_mem[28];
} ucontext_t;
#define SA_NOCLDSTOP 1
@@ -31,19 +48,6 @@ typedef struct __ucontext {
#define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
-#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct sigcontext {
- unsigned short gs, __gsh, fs, __fsh, es, __esh, ds, __dsh;
- unsigned long edi, esi, ebp, esp, ebx, edx, ecx, eax;
- unsigned long trapno, err, eip;
- unsigned short cs, __csh;
- unsigned long eflags, esp_at_signal;
- unsigned short ss, __ssh;
- struct __fpstate *fpstate;
- unsigned long oldmask, cr2;
-};
-#endif
-
#endif
#define SIGHUP 1
diff --git a/arch/microblaze/bits/signal.h b/arch/microblaze/bits/signal.h
index c1aaa9cb..bb60d0dd 100644
--- a/arch/microblaze/bits/signal.h
+++ b/arch/microblaze/bits/signal.h
@@ -1,9 +1,24 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef struct sigcontext
+{
+ struct {
+ unsigned long r0, r1, r2, r3, r4, r5, r6, r7;
+ unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
+ unsigned long r16, r17, r18, r19, r20, r21, r22, r23;
+ unsigned long r24, r25, r26, r27, r28, r29, r30, r31;
+ unsigned long pc, msr, ear, esr, fsr;
+ int pt_mode;
+ } regs;
+ unsigned long oldmask;
+} mcontext_t;
+#else
typedef struct {
unsigned long __regs[39];
} mcontext_t;
+#endif
typedef struct __ucontext {
unsigned long uc_flags;
@@ -22,21 +37,6 @@ typedef struct __ucontext {
#define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
-#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct sigcontext
-{
- struct {
- unsigned long r0, r1, r2, r3, r4, r5, r6, r7;
- unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
- unsigned long r16, r17, r18, r19, r20, r21, r22, r23;
- unsigned long r24, r25, r26, r27, r28, r29, r30, r31;
- unsigned long pc, msr, ear, esr, fsr;
- int pt_mode;
- } regs;
- unsigned long oldmask;
-};
-#endif
-
#endif
#define SIGHUP 1
diff --git a/arch/mips/bits/signal.h b/arch/mips/bits/signal.h
index 9e1384ff..9b4861d3 100644
--- a/arch/mips/bits/signal.h
+++ b/arch/mips/bits/signal.h
@@ -1,6 +1,16 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef struct sigcontext
+{
+ unsigned sc_regmask, sc_status;
+ unsigned long long sc_pc, sc_regs[32], sc_fpregs[32];
+ unsigned sc_ownedfp, sc_fpc_csr, sc_fpc_eir, sc_used_math, sc_dsp;
+ unsigned long long sc_mdhi, sc_mdlo;
+ unsigned long sc_hi1, sc_lo1, sc_hi2, sc_lo2, sc_hi3, sc_lo3;
+} mcontext_t;
+#else
typedef struct {
unsigned __mc1[2];
unsigned long long __mc2[65];
@@ -8,6 +18,7 @@ typedef struct {
unsigned long long __mc4[2];
unsigned __mc5[6];
} mcontext_t;
+#endif
typedef struct __ucontext {
unsigned long uc_flags;
@@ -34,17 +45,6 @@ typedef struct __ucontext {
#define SIG_UNBLOCK 2
#define SIG_SETMASK 3
-#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct sigcontext
-{
- unsigned sc_regmask, sc_status;
- unsigned long long sc_pc, sc_regs[32], sc_fpregs[32];
- unsigned sc_ownedfp, sc_fpc_csr, sc_fpc_eir, sc_used_math, sc_dsp;
- unsigned long long sc_mdhi, sc_mdlo;
- unsigned long sc_hi1, sc_lo1, sc_hi2, sc_lo2, sc_hi3, sc_lo3;
-};
-#endif
-
#endif
#define SIGHUP 1
diff --git a/arch/x86_64/bits/signal.h b/arch/x86_64/bits/signal.h
index d1de2dff..38f3bc42 100644
--- a/arch/x86_64/bits/signal.h
+++ b/arch/x86_64/bits/signal.h
@@ -1,17 +1,37 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct __fpstate {
- unsigned long __x[4];
- unsigned char __y[384];
- unsigned long __z[12];
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+struct _fpstate {
+ unsigned short cwd, swd, ftw, fop;
+ unsigned long long rip, rdp;
+ unsigned mxcsr, mxcr_mask;
+ struct {
+ unsigned short significand[4], exponent, padding[3];
+ } _st[8];
+ struct {
+ unsigned element[4];
+ } _xmm[16];
+ unsigned padding[24];
};
-
-typedef struct {
- unsigned long __gregs[23];
- void *__fpregs;
+struct sigcontext {
+ unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
+ unsigned long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags;
+ unsigned short cs, gs, fs, __pad0;
+ unsigned long err, trapno, oldmask, cr2;
+ struct _fpstate *fpstate;
unsigned long __reserved1[8];
+};
+typedef struct {
+ unsigned long long gregs[23];
+ struct _fpstate *fpregs;
+ unsigned long long __reserved1[8];
+} mcontext_t;
+#else
+typedef struct {
+ unsigned long __space[32];
} mcontext_t;
+#endif
typedef struct __ucontext {
unsigned long uc_flags;
@@ -19,7 +39,7 @@ typedef struct __ucontext {
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
- struct __fpstate __fpregs_mem;
+ unsigned long __fpregs_mem[64];
} ucontext_t;
#define SA_NOCLDSTOP 1
@@ -31,17 +51,6 @@ typedef struct __ucontext {
#define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
-#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct sigcontext {
- unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
- unsigned long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags;
- unsigned short cs, gs, fs, __pad0;
- unsigned long err, trapno, oldmask, cr2;
- struct __fpstate *fpstate;
- unsigned long __reserved1[8];
-};
-#endif
-
#endif
#define SIGHUP 1