#include <signal.h>
#endif
-#if defined(__i386__)
+#if defined(TARGET_X86)
#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__DragonFly__)
#include <ucontext.h>
#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)
#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 <ucontext.h>
#define UCONTEXT_REG_LNK(ctx) ((ctx)->uc_mcontext.mc_lr)
#endif
-#elif defined(__arm__)
+#elif defined(TARGET_ARM)
#if defined(__APPLE__)
typedef ucontext_t arm_ucontext;
#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;
#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 <ucontext.h>
+# 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