]> granicus.if.org Git - musl/commitdiff
fixup mcontext stuff to expost gregset_t/fpregset_t as appropriate
authorRich Felker <dalias@aerifal.cx>
Mon, 26 Nov 2012 04:04:23 +0000 (23:04 -0500)
committerRich Felker <dalias@aerifal.cx>
Mon, 26 Nov 2012 04:04:23 +0000 (23:04 -0500)
arch/arm/bits/signal.h
arch/i386/bits/signal.h
arch/microblaze/bits/signal.h
arch/mips/bits/signal.h
arch/powerpc/bits/signal.h
arch/x86_64/bits/signal.h
include/signal.h
include/ucontext.h

index 190b1d635ab79a5bbb11396e3c1b41aacff987ac..fd36bc782337ec4969d2fa4b6bb5736db01e6b2b 100644 (file)
@@ -2,6 +2,7 @@
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef int greg_t, gregset_t[18];
 typedef struct sigcontext
 {
        unsigned long trap_no, error_code, oldmask;
index 3caadea2bfd2593649005a88d25387aa264ad2e6..29455aec34fe525ca351f88b1ee3916bccdddb51 100644 (file)
@@ -2,13 +2,14 @@
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct _fpstate {
+typedef int greg_t, gregset_t[19];
+typedef struct _fpstate {
        unsigned long cw, sw, tag, ipoff, cssel, dataoff, datasel;
        struct {
                unsigned short significand[4], exponent;
        } _st[8];
        unsigned long status;
-};
+} *fpregset_t;
 struct sigcontext {
        unsigned short gs, __gsh, fs, __fsh, es, __esh, ds, __dsh;
        unsigned long edi, esi, ebp, esp, ebx, edx, ecx, eax;
@@ -20,8 +21,8 @@ struct sigcontext {
        unsigned long oldmask, cr2;
 };
 typedef struct {
-       unsigned gregs[19];
-       struct _fpstate *fpregs;
+       gregset_t gregs;
+       fpregset_t fpregs;
        unsigned long oldmask, cr2;
 } mcontext_t;
 #else
index bb60d0ddcd77efc8ebe4b381dd0a3b3e1ee0b289..94aafd0f02a7b6877ac78c0384f36366c3e57485 100644 (file)
@@ -2,6 +2,7 @@
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef unsigned long greg_t, gregset_t[38];
 typedef struct sigcontext
 {
        struct {
index 9b4861d3bc9eb7f8618650d9298b14842a4ae9a2..857d3c07e20cf35269c53914ba75076d9c29d88a 100644 (file)
@@ -2,13 +2,31 @@
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-typedef struct sigcontext
+typedef unsigned long long greg_t, gregset_t[32];
+typedef struct {
+       union {
+               double fp_dregs[32];
+               struct {
+                       float _fp_fregs;
+                       unsigned _fp_pad;
+               } fp_fregs[32];
+       } fp_r;
+} fpregset_t;
+struct sigcontext
 {
        unsigned sc_regmask, sc_status;
        unsigned long long sc_pc, sc_regs[32], sc_fpregs[32];
        unsigned sc_ownedfp, sc_fpc_csr, sc_fpc_eir, sc_used_math, sc_dsp;
        unsigned long long sc_mdhi, sc_mdlo;
        unsigned long sc_hi1, sc_lo1, sc_hi2, sc_lo2, sc_hi3, sc_lo3;
+};
+typedef struct
+{
+       unsigned regmask, status;
+       unsigned long long pc, regs[32], fpregs[32];
+       unsigned ownedfp, fpc_csr, fpc_eir, used_math, dsp;
+       unsigned long long mdhi, mdlo;
+       unsigned long hi1, lo1, hi2, lo2, hi3, lo3;
 } mcontext_t;
 #else
 typedef struct {
index 7ee38fbaaf93b83d2b2067ee1439904ee3f157d3..81012d5b7ea8badadfeec7f7906bf00304c3786e 100644 (file)
@@ -3,7 +3,7 @@
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 
-typedef unsigned long gregset_t[48];
+typedef unsigned long greg_t, gregset_t[48];
 
 typedef struct {
        double fpregs[32];
index 38f3bc42ad947b22228b59b25dabfb2c725972e0..9043aeafdef77f38a73b4b30ab83ee765be2b2c6 100644 (file)
@@ -2,7 +2,8 @@
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-struct _fpstate {
+typedef long long greg_t, gregset_t[23];
+typedef struct _fpstate {
        unsigned short cwd, swd, ftw, fop;
        unsigned long long rip, rdp;
        unsigned mxcsr, mxcr_mask;
@@ -13,7 +14,7 @@ struct _fpstate {
                unsigned element[4];
        } _xmm[16];
        unsigned padding[24];
-};
+} *fpregset_t;
 struct sigcontext {
        unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
        unsigned long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags;
@@ -23,8 +24,8 @@ struct sigcontext {
        unsigned long __reserved1[8];
 };
 typedef struct {
-       unsigned long long gregs[23];
-       struct _fpstate *fpregs;
+       gregset_t gregs;
+       fpregset_t fpregs;
        unsigned long long __reserved1[8];
 } mcontext_t;
 #else
index bef8ae048ea3ec9b3f546c6a00d8ad9f0cbc589e..860f7428b56200be95f63ea83d4f1b63eaccc72c 100644 (file)
@@ -13,6 +13,7 @@ extern "C" {
 
 #ifdef _GNU_SOURCE
 #define __siginfo siginfo
+#define __ucontext ucontext
 #endif
 
 #define __NEED_size_t
index 28d04ea88a109a156d03e1ffcb71b0179ab5169d..3bb776ed6a86969a530a558ff81506cfc7ccbb4b 100644 (file)
@@ -8,8 +8,8 @@ extern "C" {
 
 #include <signal.h>
 
-#ifdef _GNU_SOURCE
-#define ucontext __ucontext
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define NGREG (sizeof(gregset_t)/sizeof(greg_t))
 #endif
 
 struct __ucontext;