From 1e91a9e0899f6c1bc4f1458ed74210d0e953f83b Mon Sep 17 00:00:00 2001 From: Frode Solheim Date: Wed, 16 Sep 2015 20:48:50 +0200 Subject: [PATCH] JIT: Invalid access handling for OS X / 32-bit --- jit/exception_handler.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/jit/exception_handler.cpp b/jit/exception_handler.cpp index ecff5eda..0bf6c706 100644 --- a/jit/exception_handler.cpp +++ b/jit/exception_handler.cpp @@ -81,6 +81,20 @@ typedef void *CONTEXT_T; #define CONTEXT_ESI(context) (((struct ucontext *) context)->uc_mcontext.gregs[REG_ESI]) #define CONTEXT_EDI(context) (((struct ucontext *) context)->uc_mcontext.gregs[REG_EDI]) +#elif defined(__DARWIN_UNIX03) && defined(_STRUCT_X86_EXCEPTION_STATE32) + +typedef void *CONTEXT_T; +#define HAVE_CONTEXT_T 1 +#define CONTEXT_EIP(context) (*((unsigned long *) &((ucontext_t *) context)->uc_mcontext->__ss.__eip)) +#define CONTEXT_EAX(context) (((ucontext_t *) context)->uc_mcontext->__ss.__eax) +#define CONTEXT_ECX(context) (((ucontext_t *) context)->uc_mcontext->__ss.__ecx) +#define CONTEXT_EDX(context) (((ucontext_t *) context)->uc_mcontext->__ss.__edx) +#define CONTEXT_EBX(context) (((ucontext_t *) context)->uc_mcontext->__ss.__ebx) +#define CONTEXT_ESP(context) (*((unsigned long *) &((ucontext_t *) context)->uc_mcontext->__ss.__esp)) +#define CONTEXT_EBP(context) (((ucontext_t *) context)->uc_mcontext->__ss.__ebp) +#define CONTEXT_ESI(context) (((ucontext_t *) context)->uc_mcontext->__ss.__esi) +#define CONTEXT_EDI(context) (((ucontext_t *) context)->uc_mcontext->__ss.__edi) + #endif #if defined(CPU_x86_64) @@ -460,6 +474,9 @@ static void install_exception_handler(void) sigemptyset (&act.sa_mask); act.sa_flags = SA_SIGINFO; sigaction(SIGSEGV, &act, NULL); +#ifdef MACOSX + sigaction(SIGBUS, &act, NULL); +#endif #else write_log (_T("JIT: No segfault handler installed\n")); #endif -- 2.47.3