about summary refs log tree commit diff
path: root/arch/arm
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 /arch/arm
parentac562aa1ef4012f617583f474a8d8e5c972ed6ee (diff)
downloadmusl-c72fc23843906e2571e817a62c94cee15648b7dc.tar.gz
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.
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/bits/signal.h26
1 files changed, 13 insertions, 13 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