-
- switch (code) {
- case trap_Halt:
- fake_foreign_function_call(context);
- lose("%%primitive halt called; the party is over.\n");
-
- case trap_PendingInterrupt:
- arch_skip_instruction(context);
- interrupt_handle_pending(context);
- break;
-
- case trap_Error:
- case trap_Cerror:
- interrupt_internal_error(signal, info, context, code == trap_Cerror);
- break;
-
- case trap_Breakpoint:
- handle_breakpoint(signal, info, context);
- break;
-
- case trap_FunEndBreakpoint:
- *os_context_pc_addr(context)
- = (os_context_register_t)(unsigned int)
- handle_fun_end_breakpoint(signal, info, context);
- break;
-
- case trap_AfterBreakpoint:
- arch_install_breakpoint(skipped_break_addr);
- arch_remove_breakpoint((unsigned int *)os_context_pc(context),
- displaced_after_inst);
- *os_context_sigmask_addr(context) = orig_sigmask;
- break;
-
- case 0x10:
- /* Clear the pseudo-atomic flag */
- *os_context_register_addr(context, reg_NL4) &= ~(-1LL<<31);
+ /* FIXME: WTF is this magic number? Needs to become a #define
+ * and go into handle_trap. */
+ if (code==0x10) {
+ arch_clear_pseudo_atomic_interrupted(context);