X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-sigcontext.h;h=03247cf02a68d33381c602bbfb89d4a9527e4f2d;hb=62dda654985c6b4286660878479bf989fcef0467;hp=09e2a34bbd9abe84e60bcdb000b58714cdbd43fb;hpb=771a6684de1292eeb16149f1aac7593b7f08bd9d;p=mono.git diff --git a/mono/utils/mono-sigcontext.h b/mono/utils/mono-sigcontext.h index 09e2a34bbd9..03247cf02a6 100644 --- a/mono/utils/mono-sigcontext.h +++ b/mono/utils/mono-sigcontext.h @@ -2,17 +2,28 @@ #define __MONO_MONO_SIGCONTEXT_H__ #include +#if defined(PLATFORM_ANDROID) +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_SIGNAL_H +#include +#endif -#if defined(__i386__) +#if defined(TARGET_X86) -#if defined(__FreeBSD__) || defined(__APPLE__) +#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__DragonFly__) #include #endif #if defined(__APPLE__) #include #endif -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__DragonFly__) #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_eax) #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_ebx) #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_ecx) @@ -23,7 +34,7 @@ #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_edi) #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_eip) #elif defined(__APPLE__) -# if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 +# if defined (TARGET_IOS) || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__eax) #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__ebx) #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__ecx) @@ -55,16 +66,81 @@ #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_EDI]) #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_EIP]) #elif defined(__OpenBSD__) - #define UCONTEXT_REG_EAX(ctx) ((ctx)->sc_eax) - #define UCONTEXT_REG_EBX(ctx) ((ctx)->sc_ebx) - #define UCONTEXT_REG_ECX(ctx) ((ctx)->sc_ecx) - #define UCONTEXT_REG_EDX(ctx) ((ctx)->sc_edx) - #define UCONTEXT_REG_EBP(ctx) ((ctx)->sc_ebp) - #define UCONTEXT_REG_ESP(ctx) ((ctx)->sc_esp) - #define UCONTEXT_REG_ESI(ctx) ((ctx)->sc_esi) - #define UCONTEXT_REG_EDI(ctx) ((ctx)->sc_edi) - #define UCONTEXT_REG_EIP(ctx) ((ctx)->sc_eip) + #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->sc_eax) + #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->sc_ebx) + #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->sc_ecx) + #define UCONTEXT_REG_EDX(ctx) (((ucontext_t*)(ctx))->sc_edx) + #define UCONTEXT_REG_EBP(ctx) (((ucontext_t*)(ctx))->sc_ebp) + #define UCONTEXT_REG_ESP(ctx) (((ucontext_t*)(ctx))->sc_esp) + #define UCONTEXT_REG_ESI(ctx) (((ucontext_t*)(ctx))->sc_esi) + #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->sc_edi) + #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->sc_eip) +#elif defined(PLATFORM_SOLARIS) + #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [EAX]) + #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [EBX]) + #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [ECX]) + #define UCONTEXT_REG_EDX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [EDX]) + #define UCONTEXT_REG_EBP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [EBP]) + #define UCONTEXT_REG_ESP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [ESP]) + #define UCONTEXT_REG_ESI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [ESI]) + #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [EDI]) + #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [EIP]) #else + +#if defined(TARGET_ANDROID) +/* No ucontext.h as of NDK v6b */ +typedef int greg_t; +#define NGREG 19 +typedef greg_t gregset_t [NGREG]; +enum +{ + REG_GS = 0, +# define REG_GS REG_GS + REG_FS, +# define REG_FS REG_FS + REG_ES, +# define REG_ES REG_ES + REG_DS, +# define REG_DS REG_DS + REG_EDI, +# define REG_EDI REG_EDI + REG_ESI, +# define REG_ESI REG_ESI + REG_EBP, +# define REG_EBP REG_EBP + REG_ESP, +# define REG_ESP REG_ESP + REG_EBX, +# define REG_EBX REG_EBX + REG_EDX, +# define REG_EDX REG_EDX + REG_ECX, +# define REG_ECX REG_ECX + REG_EAX, +# define REG_EAX REG_EAX + REG_TRAPNO, +# define REG_TRAPNO REG_TRAPNO + REG_ERR, +# define REG_ERR REG_ERR + REG_EIP, +# define REG_EIP REG_EIP +}; + +typedef struct { + gregset_t gregs; + /* Many missing fields */ +} mcontext_t; + +typedef struct ucontext { + unsigned long int uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + /* Many missing fields */ +} ucontext_t; + +#endif + #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EAX]) #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EBX]) #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_ECX]) @@ -76,7 +152,11 @@ #define UCONTEXT_REG_EIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EIP]) #endif -#elif defined(__x86_64__) +#elif defined(TARGET_AMD64) + +#if defined(__FreeBSD__) +#include +#endif #if defined(__APPLE__) #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__rax) @@ -88,27 +168,65 @@ #define UCONTEXT_REG_RSI(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__rsi) #define UCONTEXT_REG_RDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__rdi) #define UCONTEXT_REG_RIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__rip) + #define UCONTEXT_REG_R8(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r8) + #define UCONTEXT_REG_R9(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r9) + #define UCONTEXT_REG_R10(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r10) + #define UCONTEXT_REG_R11(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r11) #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r12) #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r13) #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r14) #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r15) #elif defined(__FreeBSD__) -#define UCONTEXT_GREGS(ctx) ((guint64*)&(((ucontext_t*)(ctx))->uc_mcontext)) + #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rax) + #define UCONTEXT_REG_RBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rbx) + #define UCONTEXT_REG_RCX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rcx) + #define UCONTEXT_REG_RDX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rdx) + #define UCONTEXT_REG_RBP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rbp) + #define UCONTEXT_REG_RSP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rsp) + #define UCONTEXT_REG_RSI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rsi) + #define UCONTEXT_REG_RDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rdi) + #define UCONTEXT_REG_RIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_rip) + #define UCONTEXT_REG_R8(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r8) + #define UCONTEXT_REG_R9(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r9) + #define UCONTEXT_REG_R10(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r10) + #define UCONTEXT_REG_R11(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r11) + #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r12) + #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r13) + #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r14) + #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r15) +#elif defined(__NetBSD__) + #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RAX]) + #define UCONTEXT_REG_RBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RBX]) + #define UCONTEXT_REG_RCX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RCX]) + #define UCONTEXT_REG_RDX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RDX]) + #define UCONTEXT_REG_RBP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RBP]) + #define UCONTEXT_REG_RSP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RSP]) + #define UCONTEXT_REG_RSI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RSI]) + #define UCONTEXT_REG_RDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RDI]) + #define UCONTEXT_REG_RIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RIP]) + #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R12]) + #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R13]) + #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R14]) + #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R15]) #elif defined(__OpenBSD__) /* OpenBSD/amd64 has no gregs array, ucontext_t == sigcontext */ - #define UCONTEXT_REG_RAX(ctx) ((ctx)->sc_rax) - #define UCONTEXT_REG_RBX(ctx) ((ctx)->sc_rbx) - #define UCONTEXT_REG_RCX(ctx) ((ctx)->sc_rcx) - #define UCONTEXT_REG_RDX(ctx) ((ctx)->sc_rdx) - #define UCONTEXT_REG_RBP(ctx) ((ctx)->sc_rbp) - #define UCONTEXT_REG_RSP(ctx) ((ctx)->sc_rsp) - #define UCONTEXT_REG_RSI(ctx) ((ctx)->sc_rsi) - #define UCONTEXT_REG_RDI(ctx) ((ctx)->sc_rdi) - #define UCONTEXT_REG_RIP(ctx) ((ctx)->sc_rip) - #define UCONTEXT_REG_R12(ctx) ((ctx)->sc_r12) - #define UCONTEXT_REG_R13(ctx) ((ctx)->sc_r13) - #define UCONTEXT_REG_R14(ctx) ((ctx)->sc_r14) - #define UCONTEXT_REG_R15(ctx) ((ctx)->sc_r15) + #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->sc_rax) + #define UCONTEXT_REG_RBX(ctx) (((ucontext_t*)(ctx))->sc_rbx) + #define UCONTEXT_REG_RCX(ctx) (((ucontext_t*)(ctx))->sc_rcx) + #define UCONTEXT_REG_RDX(ctx) (((ucontext_t*)(ctx))->sc_rdx) + #define UCONTEXT_REG_RBP(ctx) (((ucontext_t*)(ctx))->sc_rbp) + #define UCONTEXT_REG_RSP(ctx) (((ucontext_t*)(ctx))->sc_rsp) + #define UCONTEXT_REG_RSI(ctx) (((ucontext_t*)(ctx))->sc_rsi) + #define UCONTEXT_REG_RDI(ctx) (((ucontext_t*)(ctx))->sc_rdi) + #define UCONTEXT_REG_RIP(ctx) (((ucontext_t*)(ctx))->sc_rip) + #define UCONTEXT_REG_R8(ctx) (((ucontext_t*)(ctx))->sc_r8) + #define UCONTEXT_REG_R9(ctx) (((ucontext_t*)(ctx))->sc_r9) + #define UCONTEXT_REG_R10(ctx) (((ucontext_t*)(ctx))->sc_r10) + #define UCONTEXT_REG_R11(ctx) (((ucontext_t*)(ctx))->sc_r11) + #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->sc_r12) + #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->sc_r13) + #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->sc_r14) + #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->sc_r15) #else #define UCONTEXT_GREGS(ctx) ((guint64*)&(((ucontext_t*)(ctx))->uc_mcontext.gregs)) #endif @@ -123,6 +241,10 @@ #define UCONTEXT_REG_RSI(ctx) (UCONTEXT_GREGS ((ctx)) [REG_RSI]) #define UCONTEXT_REG_RDI(ctx) (UCONTEXT_GREGS ((ctx)) [REG_RDI]) #define UCONTEXT_REG_RIP(ctx) (UCONTEXT_GREGS ((ctx)) [REG_RIP]) +#define UCONTEXT_REG_R8(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R8]) +#define UCONTEXT_REG_R9(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R9]) +#define UCONTEXT_REG_R10(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R10]) +#define UCONTEXT_REG_R11(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R11]) #define UCONTEXT_REG_R12(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R12]) #define UCONTEXT_REG_R13(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R13]) #define UCONTEXT_REG_R14(ctx) (UCONTEXT_GREGS ((ctx)) [REG_R14]) @@ -179,6 +301,116 @@ #define UCONTEXT_REG_LNK(ctx) ((ctx)->uc_mcontext.mc_lr) #endif +#elif defined(TARGET_ARM) +#if defined(__APPLE__) + typedef ucontext_t arm_ucontext; + + #define UCONTEXT_REG_PC(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__pc) + #define UCONTEXT_REG_SP(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__sp) + #define UCONTEXT_REG_LR(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__lr) + #define UCONTEXT_REG_R0(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[0]) + #define UCONTEXT_REG_R1(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[1]) + #define UCONTEXT_REG_R2(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[2]) + #define UCONTEXT_REG_R3(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[3]) + #define UCONTEXT_REG_R4(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[4]) + #define UCONTEXT_REG_R5(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[5]) + #define UCONTEXT_REG_R6(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[6]) + #define UCONTEXT_REG_R7(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[7]) + #define UCONTEXT_REG_R8(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[8]) + #define UCONTEXT_REG_R9(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[9]) + #define UCONTEXT_REG_R10(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[10]) + #define UCONTEXT_REG_R11(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[11]) + #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__r[12]) + #define UCONTEXT_REG_CPSR(ctx) (((ucontext_t*)(ctx))->uc_mcontext->__ss.__cpsr) + #define UCONTEXT_REG_VFPREGS(ctx) (double*)(((ucontext_t*)(ctx))->uc_mcontext->__fs.__r) +#elif defined(__linux__) + typedef struct arm_ucontext { + unsigned long uc_flags; + struct arm_ucontext *uc_link; + struct { + void *p; + int flags; + size_t size; + } sstack_data; + struct sigcontext sig_ctx; + /* some 2.6.x kernel has fp data here after a few other fields + * we don't use them for now... + */ + } arm_ucontext; + #define UCONTEXT_REG_PC(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_pc) + #define UCONTEXT_REG_SP(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_sp) + #define UCONTEXT_REG_LR(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_lr) + #define UCONTEXT_REG_R0(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r0) + #define UCONTEXT_REG_R1(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r1) + #define UCONTEXT_REG_R2(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r2) + #define UCONTEXT_REG_R3(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r3) + #define UCONTEXT_REG_R4(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r4) + #define UCONTEXT_REG_R5(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r5) + #define UCONTEXT_REG_R6(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r6) + #define UCONTEXT_REG_R7(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r7) + #define UCONTEXT_REG_R8(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r8) + #define UCONTEXT_REG_R9(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r9) + #define UCONTEXT_REG_R10(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_r10) + #define UCONTEXT_REG_R11(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_fp) + #define UCONTEXT_REG_R12(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_ip) + #define UCONTEXT_REG_CPSR(ctx) (((arm_ucontext*)(ctx))->sig_ctx.arm_cpsr) +#endif +#elif defined(__mips__) + +# if HAVE_UCONTEXT_H +# include +# endif + +/* No ucontext.h */ +#if defined(TARGET_ANDROID) + +#define NGREG 32 +#define NFPREG 32 + +typedef unsigned long gregset_t[NGREG]; + +typedef struct fpregset { + union { + double fp_dregs[NFPREG]; + struct { + float _fp_fregs; + unsigned int _fp_pad; + } fp_fregs[NFPREG]; + } fp_r; +} fpregset_t; + +typedef struct + { + unsigned int regmask; + unsigned int status; + unsigned long pc; + gregset_t gregs; + fpregset_t fpregs; + /* missing fields follow */ +} mcontext_t; + +typedef struct ucontext + { + unsigned long int uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + /* missing fields follow */ + } ucontext_t; + +#endif + +# define UCONTEXT_GREGS(ctx) (((ucontext_t *)(ctx))->uc_mcontext.gregs) +# define UCONTEXT_FPREGS(ctx) (((ucontext_t *)(ctx))->uc_mcontext.fpregs.fp_r.fp_dregs) +# define UCONTEXT_REG_PC(ctx) (((ucontext_t *)(ctx))->uc_mcontext.pc) + +#elif defined(__s390x__) + +# if HAVE_UCONTEXT_H +# include +# endif + +# define UCONTEXT_GREGS(ctx) (((ucontext_t *)(ctx))->uc_mcontext.gregs) #endif #endif