diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-11-21 13:36:01 -0500 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-11-21 13:36:01 -0500 | 
| commit | 57a0b82441e8d03a93965e2a373588721374ed78 (patch) | |
| tree | ae44f418e9294e787fcbccaa3e3abf50aefe2468 /arch/powerpc/bits/signal.h | |
| parent | 7bdf11c2c611a5d8a5171c188461ff267fd555b6 (diff) | |
| download | musl-57a0b82441e8d03a93965e2a373588721374ed78.tar.gz | |
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.
Diffstat (limited to 'arch/powerpc/bits/signal.h')
| -rw-r--r-- | arch/powerpc/bits/signal.h | 51 | 
1 files changed, 32 insertions, 19 deletions
| diff --git a/arch/powerpc/bits/signal.h b/arch/powerpc/bits/signal.h index c304450b..a5c311ba 100644 --- a/arch/powerpc/bits/signal.h +++ b/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 | 
