#elif !defined(__GLIBC__) && defined(__i386__)
// x86 version for Android.
-struct _libc_fpreg {
- uint16_t significand[4];
- uint16_t exponent;
-};
-
-struct _libc_fpstate {
- uint64_t cw;
- uint64_t sw;
- uint64_t tag;
- uint64_t ipoff;
- uint64_t cssel;
- uint64_t dataoff;
- uint64_t datasel;
- struct _libc_fpreg _st[8];
- uint64_t status;
+struct sigcontext {
+ uint32_t gregs[19];
+ void* fpregs;
+ uint32_t oldmask;
+ uint32_t cr2;
};
-typedef struct _libc_fpstate *fpregset_t;
-
-typedef struct mcontext {
- int32_t gregs[19];
- fpregset_t fpregs;
- int64_t oldmask;
- int64_t cr2;
-} mcontext_t;
-
-typedef uint64_t __sigset_t;
-
+typedef uint32_t __sigset_t;
+typedef struct sigcontext mcontext_t;
typedef struct ucontext {
- uint64_t uc_flags;
- struct ucontext *uc_link;
+ uint32_t uc_flags;
+ struct ucontext* uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
__sigset_t uc_sigmask;
- struct _libc_fpstate __fpregs_mem;
} ucontext_t;
-
enum { REG_EBP = 6, REG_ESP = 7, REG_EIP = 14 };
#endif