1.0.0.26:
[sbcl.git] / src / runtime / x86-64-arch.c
index b45dcd5..6d7046c 100644 (file)
@@ -100,6 +100,8 @@ void arch_skip_instruction(os_context_t *context)
 
         case trap_PendingInterrupt:
         case trap_Halt:
+        case trap_SingleStepAround:
+        case trap_SingleStepBefore:
             /* only needed to skip the Code */
             break;
 
@@ -122,21 +124,21 @@ arch_internal_error_arguments(os_context_t *context)
 boolean
 arch_pseudo_atomic_atomic(os_context_t *context)
 {
-    return SymbolValue(PSEUDO_ATOMIC_ATOMIC,arch_os_get_current_thread());
+    return get_pseudo_atomic_atomic(arch_os_get_current_thread());
 }
 
 void
 arch_set_pseudo_atomic_interrupted(os_context_t *context)
 {
-    SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(1),
-                   arch_os_get_current_thread());
+    struct thread *thread = arch_os_get_current_thread();
+    set_pseudo_atomic_interrupted(thread);
 }
 
 void
 arch_clear_pseudo_atomic_interrupted(os_context_t *context)
 {
-    SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(0),
-                   arch_os_get_current_thread());
+    struct thread *thread = arch_os_get_current_thread();
+    clear_pseudo_atomic_interrupted(thread);
 }
 \f
 /*
@@ -256,6 +258,14 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context)
             (unsigned long)handle_fun_end_breakpoint(signal, info, context);
         break;
 
+    case trap_SingleStepAround:
+    case trap_SingleStepBefore:
+        arch_skip_instruction(context);
+        /* On x86-64 the fdefn / function is always in RAX, so we pass
+         * 0 as the register_offset. */
+        handle_single_step_trap(context, trap, 0);
+        break;
+
     default:
         FSHOW((stderr,"/[C--trap default %d %d %x]\n",
                signal, code, context));