X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Fx86-arch.c;h=aaad2a1589aae24f75440ccd87ae62e3cca7dec3;hb=6973177fbe23d007655345c1fe2e0d6a5e397aa5;hp=406030fc3f67b4f3bb4948e6ed225e0a289f0545;hpb=a530bbe337109d898d5b4a001fc8f1afa3b5dc39;p=sbcl.git diff --git a/src/runtime/x86-arch.c b/src/runtime/x86-arch.c index 406030f..aaad2a1 100644 --- a/src/runtime/x86-arch.c +++ b/src/runtime/x86-arch.c @@ -9,10 +9,6 @@ * files for more information. */ -/* - * $Header$ - */ - #include #include "runtime.h" @@ -148,8 +144,8 @@ arch_remove_breakpoint(void *pc, unsigned long orig_inst) /* When single stepping, single_stepping holds the original instruction * PC location. */ -unsigned int *single_stepping=NULL; -#ifndef __linux__ +unsigned int *single_stepping = NULL; +#ifdef CANNOT_GET_TO_SINGLE_STEP_FLAG unsigned int single_step_save1; unsigned int single_step_save2; unsigned int single_step_save3; @@ -164,9 +160,7 @@ arch_do_displaced_inst(os_context_t *context, unsigned long orig_inst) *((char *)pc) = orig_inst & 0xff; *((char *)pc + 1) = (orig_inst & 0xff00) >> 8; -#ifdef __linux__ - *context_eflags_addr(context) |= 0x100; -#else +#ifdef CANNOT_GET_TO_SINGLE_STEP_FLAG /* Install helper instructions for the single step: * pushf; or [esp],0x100; popf. */ single_step_save1 = *(pc-3); @@ -175,11 +169,13 @@ arch_do_displaced_inst(os_context_t *context, unsigned long orig_inst) *(pc-3) = 0x9c909090; *(pc-2) = 0x00240c81; *(pc-1) = 0x9d000001; +#else + *context_eflags_addr(context) |= 0x100; #endif single_stepping = (unsigned int*)pc; -#ifndef __linux__ +#ifdef CANNOT_GET_TO_SINGLE_STEP_FLAG *os_context_pc_addr(context) = (char *)pc - 9; #endif } @@ -191,13 +187,11 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) os_context_t *context = (os_context_t*)void_context; unsigned int trap; - SHOW("entering sigtrap_handler(..)"); /* REMOVEME */ - if (single_stepping && (signal==SIGTRAP)) { /* fprintf(stderr,"* single step trap %x\n", single_stepping); */ -#ifndef __linux__ +#ifdef CANNOT_GET_TO_SINGLE_STEP_FLAG /* Un-install single step helper instructions. */ *(single_stepping-3) = single_step_save1; *(single_stepping-2) = single_step_save2; @@ -221,7 +215,7 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) /* This is just for info in case the monitor wants to print an * approximation. */ current_control_stack_pointer = - (lispobj*)*os_context_sp_addr(context); + (lispobj *)*os_context_sp_addr(context); /* 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 @@ -241,7 +235,6 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) * here, and restore it after we do our thing, but there * seems to be no point in doing that, since we're just * going to lose(..) anyway. */ - SHOW("in trap_Halt case of sigtrap_handler(..)"); /* REMOVEME */ fake_foreign_function_call(context); lose("%%primitive halt called; the party is over."); @@ -268,7 +261,6 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) interrupt_handle_now(signal, info, context); break; } - SHOW("leaving sigtrap_handler(..)"); /* REMOVEME */ } void