X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-arch.c;h=b9b5250db7e4f73ddbcc015aa271ad25c5a0b01e;hb=95591ed483dbb8c0846c129953acac1554f28809;hp=d6150dd5f5094f8c4a192c1a640400b3db7672bd;hpb=127fd3d2fb843c6bb7ad0763e143d81877e760e8;p=sbcl.git diff --git a/src/runtime/x86-arch.c b/src/runtime/x86-arch.c index d6150dd..b9b5250 100644 --- a/src/runtime/x86-arch.c +++ b/src/runtime/x86-arch.c @@ -24,6 +24,7 @@ #include "interr.h" #include "breakpoint.h" #include "thread.h" +#include "pseudo-atomic.h" #include "genesis/static-symbols.h" #include "genesis/symbol.h" @@ -258,9 +259,8 @@ arch_handle_single_step_trap(os_context_t *context, int trap) #ifndef LISP_FEATURE_WIN32 void -sigtrap_handler(int signal, siginfo_t *info, void *void_context) +sigtrap_handler(int signal, siginfo_t *info, os_context_t *context) { - os_context_t *context = (os_context_t*)void_context; unsigned int trap; if (single_stepping && (signal==SIGTRAP)) { @@ -273,16 +273,6 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) current_control_stack_pointer = (lispobj *)*os_context_sp_addr(context); - /* FIXME: CMUCL puts the float control restoration code here. - Thus, it seems to me that single-stepping won't restore the - float control. Since SBCL currently doesn't support - single-stepping (as far as I can tell) this is somewhat moot, - but it might be worth either moving this code up or deleting - the single-stepping code entirely. -- CSR, 2002-07-15 */ -#if defined(LISP_FEATURE_LINUX) || defined(RESTORE_FP_CONTROL_FROM_CONTEXT) - os_restore_fp_control(context); -#endif - #ifdef LISP_FEATURE_SUNOS /* For some reason the breakpoints that :ENCAPSULATE NIL tracing sets up * cause a trace trap (i.e. processor single-stepping trap) on the following @@ -303,16 +293,14 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) } void -sigill_handler(int signal, siginfo_t *siginfo, void *void_context) { - os_context_t *context = (os_context_t*)void_context; - +sigill_handler(int signal, siginfo_t *siginfo, os_context_t *context) { /* Triggering SIGTRAP using int3 is unreliable on OS X/x86, so * we need to use illegal instructions for traps. */ #if defined(LISP_FEATURE_DARWIN) && !defined(LISP_FEATURE_MACH_EXCEPTION_HANDLER) if (*((unsigned short *)*os_context_pc_addr(context)) == 0x0b0f) { *os_context_pc_addr(context) += 2; - return sigtrap_handler(signal, siginfo, void_context); + return sigtrap_handler(signal, siginfo, context); } #endif fake_foreign_function_call(context);