Răsfoiți Sursa

make powerpc signal.h namespace-clean for posix/isoc

also handle the non-GNUC case where alignment attribute is not available
by simply omitting it. this will not cause problems except for
inclusion of mcontex_t/ucontext_t in application-defined structures,
since the natural alignment of the uc_mcontext member relative to the
start of ucontext_t is already correct. and shame on whoever designed
this for making it impossible to satisfy the ABI requirements without
GNUC extensions.
Rich Felker 12 ani în urmă
părinte
comite
57a0b82441
1 a modificat fișierele cu 32 adăugiri și 19 ștergeri
  1. 32 19
      arch/powerpc/bits/signal.h

+ 32 - 19
arch/powerpc/bits/signal.h

@@ -1,6 +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)
+
+struct sigcontext
+{
+	unsigned long _unused[4];
+	int signal;
+	unsigned long handler;
+	unsigned long oldmask;
+	void *regs;
+	gregset_t gp_regs;
+	fpregset_t fp_regs;
+	vrregset_t *v_regs;
+	long vmx_reserve[33+33+32+1]; /* 33=34 for ppc64 */
+};
+
 typedef unsigned long gregset_t[48];
 
 typedef struct {
@@ -19,9 +34,25 @@ typedef struct {
 typedef struct {
 	gregset_t gregs;
 	fpregset_t fpregs;
-	vrregset_t vrregs __attribute__((__aligned__(16)));
+	vrregset_t vrregs
+#ifdef __GNUC__
+	__attribute__((__aligned__(16)))
+#endif
+	;
 } mcontext_t;
 
+#else
+
+typedef struct {
+	long __regs[48+68+4*32+4]
+#ifdef __GNUC__
+	__attribute__((__aligned__(16)))
+#endif
+	;
+} mcontext_t;
+
+#endif
+
 typedef struct __ucontext {
 	unsigned long uc_flags;
 	struct __ucontext *uc_link;
@@ -47,24 +78,6 @@ typedef struct __ucontext {
 #define SA_RESETHAND  0x80000000U
 #define SA_RESTORER   0x04000000U
 
-#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-
-struct sigcontext
-{
-	unsigned long _unused[4];
-	int signal;
-	unsigned long handler;
-	unsigned long oldmask;
-	void *regs; /* originally struct pt_regs _user *regs,
-			pt_regs is defined in arch/powerpc/include/asm/ptrace.h */
-	gregset_t gp_regs;
-	fpregset_t fp_regs;
-	vrregset_t *v_regs;
-	long vmx_reserve[33+33+32+1]; /* 33=34 for ppc64 */
-};
-#define NSIG      64
-#endif
-
 #endif
 
 #define SIGHUP    1