X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-arch.c;h=9b51cc096223d3b876f4f962e9b299b36ddbe8a9;hb=f10dce4be24d44e1db0fb3d5b1d3689d6caa062a;hp=96d3bcd72e6f4ebefd46510977e15763ee37b16d;hpb=be9eb6c67b5f43a095c3de17bea945c309d662e4;p=sbcl.git diff --git a/src/runtime/x86-arch.c b/src/runtime/x86-arch.c index 96d3bcd..9b51cc0 100644 --- a/src/runtime/x86-arch.c +++ b/src/runtime/x86-arch.c @@ -24,6 +24,10 @@ #include "interr.h" #include "breakpoint.h" #include "monitor.h" +#include "thread.h" + +#include "genesis/static-symbols.h" +#include "genesis/symbol.h" #define BREAKPOINT_INST 0xcc /* INT3 */ @@ -112,13 +116,14 @@ arch_internal_error_arguments(os_context_t *context) boolean arch_pseudo_atomic_atomic(os_context_t *context) { - return SymbolValue(PSEUDO_ATOMIC_ATOMIC); + return SymbolValue(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)); + SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(1), + arch_os_get_current_thread()); } /* @@ -217,6 +222,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 @@ -303,6 +318,7 @@ call_into_lisp(lispobj fun, lispobj *args, int nargs); * could be in registers depending on what the compiler likes. So we * copy the args into a portable vector and let the assembly language * call-in function figure it out. */ + lispobj funcall0(lispobj function) {