case trap_PendingInterrupt:
case trap_Halt:
+ case trap_SingleStepAround:
+ case trap_SingleStepBefore:
/* only needed to skip the Code */
break;
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
/*
(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));