From: Christophe Rhodes Date: Thu, 25 Jul 2002 17:41:31 +0000 (+0000) Subject: 0.7.6.7: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=16edbb10b8e4b4973e3ba55d917e33cf57ab3815;p=sbcl.git 0.7.6.7: Fix up the SPARC fixups, *sigh* ... not only did my previous fix not run, it didn't compile, as SIMPLE_FUN_CODE_OFFSET isn't defined in C, only in assembler. ... rewrite code address determination in two stages, and save the fun object itself to go into reg_CODE on the SPARC ... [ keen observers will note that this is all terribly confusing. ] --- diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index c5e70aa..08771dc 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -524,28 +524,28 @@ boolean handle_control_stack_guard_triggered(os_context_t *context,void *addr) * it won't go back to what it was doing ... */ if(addr>=CONTROL_STACK_GUARD_PAGE && addr<(CONTROL_STACK_GUARD_PAGE+os_vm_page_size)) { - void *function; + void *fun; + void *code; + /* we hit the end of the control stack. disable protection * temporarily so the error handler has some headroom */ protect_control_stack_guard_page(0); - function= - &(((struct simple_fun *) - native_pointer(SymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR))) - ->code); + fun = native_pointer(SymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR)); + code = &(((struct simple_fun *) fun)->code); /* Build a stack frame showing `interrupted' so that the * user's backtrace makes (as much) sense (as usual) */ build_fake_control_stack_frames(context); /* signal handler will "return" to this error-causing function */ - *os_context_pc_addr(context) = function; + *os_context_pc_addr(context) = code; #ifdef LISP_FEATURE_X86 - /* this much of the calling convention is common to all - non-x86 ports */ *os_context_register_addr(context,reg_ECX) = 0; #else + /* this much of the calling convention is common to all + non-x86 ports */ *os_context_register_addr(context,reg_NARGS) = 0; - *os_context_register_addr(context,reg_LIP) = function; + *os_context_register_addr(context,reg_LIP) = code; *os_context_register_addr(context,reg_CFP) = current_control_frame_pointer; #endif @@ -562,9 +562,9 @@ boolean handle_control_stack_guard_triggered(os_context_t *context,void *addr) (INST MOVE CODE-TN FUNCTION) in compiler/sparc/call.lisp is changed, then this bit can - probably go away. -- CSR, 2002-07-24 */ + probably go away. -- CSR, 2002-07-24 */ *os_context_register_addr(context,reg_CODE) = - function - SIMPLE_FUN_CODE_OFFSET; + fun + FUN_POINTER_LOWTAG; #endif return 1; } diff --git a/version.lisp-expr b/version.lisp-expr index 66065ee..a650219 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; for internal versions, especially for internal versions off the ;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.7.6.6" +"0.7.6.7"