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:
parent
7bdf11c2c6
commit
57a0b82441
1 changed files with 32 additions and 19 deletions
|
|
@ -1,6 +1,21 @@
|
||||||
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
||||||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_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 unsigned long gregset_t[48];
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
@ -19,9 +34,25 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gregset_t gregs;
|
gregset_t gregs;
|
||||||
fpregset_t fpregs;
|
fpregset_t fpregs;
|
||||||
vrregset_t vrregs __attribute__((__aligned__(16)));
|
vrregset_t vrregs
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__attribute__((__aligned__(16)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
} mcontext_t;
|
} mcontext_t;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
long __regs[48+68+4*32+4]
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__attribute__((__aligned__(16)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
} mcontext_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct __ucontext {
|
typedef struct __ucontext {
|
||||||
unsigned long uc_flags;
|
unsigned long uc_flags;
|
||||||
struct __ucontext *uc_link;
|
struct __ucontext *uc_link;
|
||||||
|
|
@ -47,24 +78,6 @@ typedef struct __ucontext {
|
||||||
#define SA_RESETHAND 0x80000000U
|
#define SA_RESETHAND 0x80000000U
|
||||||
#define SA_RESTORER 0x04000000U
|
#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
|
#endif
|
||||||
|
|
||||||
#define SIGHUP 1
|
#define SIGHUP 1
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue