X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fbsd-os.c;h=f9cf70c8b92ca088847f2d21a3647e4980d40c48;hb=4fcb3af93227cd8c35aba48f6e18834753c9e0f6;hp=0b2a338d5709fe2702cffdeacbd075e993a5b475;hpb=844e8597d7ca9fda207ab2358ee027db86f6c120;p=sbcl.git diff --git a/src/runtime/bsd-os.c b/src/runtime/bsd-os.c index 0b2a338..f9cf70c 100644 --- a/src/runtime/bsd-os.c +++ b/src/runtime/bsd-os.c @@ -79,6 +79,8 @@ int *os_context_pc_addr(os_context_t *context) return CONTEXT_ADDR_FROM_STEM(pc); #elif defined __NetBSD__ return CONTEXT_ADDR_FROM_STEM(EIP); +#elif defined(LISP_FEATURE_DARWIN) && defined(LISP_FEATURE_X86) + return CONTEXT_ADDR_FROM_STEM(eip); #elif defined LISP_FEATURE_DARWIN return &context->uc_mcontext->ss.srr0; #else @@ -92,9 +94,9 @@ os_context_sigmask_addr(os_context_t *context) /* (Unlike most of the other context fields that we access, the * signal mask field is a field of the basic, outermost context * struct itself both in FreeBSD 4.0 and in OpenBSD 2.6.) */ -#if defined __FreeBSD__ || __NetBSD__ || defined LISP_FEATURE_DARWIN +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(LISP_FEATURE_DARWIN) return &context->uc_sigmask; -#elif defined __OpenBSD__ +#elif defined (__OpenBSD__) return &context->sc_mask; #else #error unsupported BSD variant @@ -192,6 +194,13 @@ memory_fault_handler(int signal, siginfo_t *siginfo, void *void_context) os_context_t *context = arch_os_get_context(&void_context); void *fault_addr = arch_get_bad_addr(signal, siginfo, context); +#if defined(MEMORY_FAULT_DEBUG) + fprintf(stderr, "Memory fault at: %p, PC: %x\n", fault_addr, *os_context_pc_addr(context)); +#if defined(ARCH_HAS_STACK_POINTER) + fprintf(stderr, "Stack pointer: %x\n", *os_context_sp_addr(context)); +#endif +#endif + if (!gencgc_handle_wp_violation(fault_addr)) if(!handle_guard_page_triggered(context,fault_addr)) { #ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK