X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fruntime%2Fx86-arch.c;h=5063c986d34e135620e765b6b6aed235f921a068;hb=dc5e3163fe667e2629c7769aa8cf2e501eeeefa6;hp=7ec436b561da937f0b1827da577d443905df58f0;hpb=81cfdf526490d642c73602ebac9bcacb8af644e1;p=sbcl.git diff --git a/src/runtime/x86-arch.c b/src/runtime/x86-arch.c index 7ec436b..5063c98 100644 --- a/src/runtime/x86-arch.c +++ b/src/runtime/x86-arch.c @@ -23,6 +23,7 @@ #include "interrupt.h" #include "interr.h" #include "breakpoint.h" +#include "monitor.h" #define BREAKPOINT_INST 0xcc /* INT3 */ @@ -84,7 +85,7 @@ void arch_skip_instruction(os_context_t *context) break; case trap_Breakpoint: /* not tested */ - case trap_FunctionEndBreakpoint: /* not tested */ + case trap_FunEndBreakpoint: /* not tested */ break; case trap_PendingInterrupt: @@ -216,6 +217,16 @@ 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 */ +#ifdef LISP_FEATURE_LINUX + os_restore_fp_control(context); +#endif + /* On entry %eip points just after the INT3 byte and aims at the * 'kind' value (eg trap_Cerror). For error-trap and Cerror-trap a * number of bytes will follow, the first is the length of the byte @@ -248,10 +259,10 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) handle_breakpoint(signal, info, context); break; - case trap_FunctionEndBreakpoint: + case trap_FunEndBreakpoint: (char*)(*os_context_pc_addr(context)) -= 1; *os_context_pc_addr(context) = - (int)handle_function_end_breakpoint(signal, info, context); + (int)handle_fun_end_breakpoint(signal, info, context); break; default: