X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fppc-arch.c;h=ac6b3d9aacb32a6bc0094fb5d8d927a2f512b642;hb=8bb8f286dbacf1792a26de693c795d268516672c;hp=6554971439713a39da33ce2700f998a5c1a1dd3d;hpb=3a0f3612dc2bbf3e4e8e7395bcbbf8cd1791b963;p=sbcl.git diff --git a/src/runtime/ppc-arch.c b/src/runtime/ppc-arch.c index 6554971..ac6b3d9 100644 --- a/src/runtime/ppc-arch.c +++ b/src/runtime/ppc-arch.c @@ -27,6 +27,7 @@ Caveat callers. */ +#if defined (LISP_FEATURE_DARWIN) || defined(LISP_FEATURE_LINUX) #ifndef PT_DAR #define PT_DAR 41 #endif @@ -34,6 +35,7 @@ #ifndef PT_DSISR #define PT_DSISR 42 #endif +#endif void arch_init() { } @@ -44,7 +46,11 @@ arch_get_bad_addr(int sig, siginfo_t *code, os_context_t *context) unsigned long pc = (unsigned long)(*os_context_pc_addr(context)); os_vm_address_t addr; +#if defined(LISP_FEATURE_NETBSD) + addr = (os_vm_address_t) (code->si_addr); +#else addr = (os_vm_address_t) (*os_context_register_addr(context,PT_DAR)); +#endif return addr; } @@ -432,6 +438,16 @@ sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context) sizeof(unsigned int)); break; + case trap_SingleStepAround: + case trap_SingleStepBefore: + { + int register_offset = code >> 5 & 0x1f; + + handle_single_step_trap(context, trap, register_offset); + + arch_skip_instruction(context); + break; + } default: interrupt_handle_now(signal, code, context); break;