0.7.5.13:
[sbcl.git] / src / runtime / x86-arch.c
index 7ec436b..5063c98 100644 (file)
@@ -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: