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.
This commit is contained in:
Rich Felker 2012-11-21 13:36:01 -05:00
parent 7bdf11c2c6
commit 57a0b82441
1 changed files with 32 additions and 19 deletions

View File

@ -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