From: Thiemo Seufer Date: Sun, 19 Aug 2007 23:34:37 +0000 (+0000) Subject: 1.0.8.35: Fix MIPS foreign_function_call_active handling. X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=66de8065bc761501b5dccef3de86125a167175db;p=sbcl.git 1.0.8.35: Fix MIPS foreign_function_call_active handling. --- diff --git a/src/runtime/mips-arch.c b/src/runtime/mips-arch.c index 490d5dc..ad7d833 100644 --- a/src/runtime/mips-arch.c +++ b/src/runtime/mips-arch.c @@ -264,18 +264,7 @@ arch_internal_error_arguments(os_context_t *context) boolean arch_pseudo_atomic_atomic(os_context_t *context) { - /* FIXME: this foreign_function_call_active test is dubious at - * best. If a foreign call is made in a pseudo atomic section - * (?) or more likely a pseudo atomic section is in a foreign - * call then an interrupt is executed immediately. Maybe it - * has to do with C code not maintaining pseudo atomic - * properly. MG - 2005-08-10 - * - * The foreign_function_call_active used to live at each call-site - * to arch_pseudo_atomic_atomic, but this seems clearer. - * --NS 2007-05-15 */ - return (!foreign_function_call_active) - && os_context_register(context, reg_ALLOC) & 1; + return os_context_register(context, reg_ALLOC) & 1; } void diff --git a/src/runtime/mips-assem.S b/src/runtime/mips-assem.S index b44b4bc..885d162 100644 --- a/src/runtime/mips-assem.S +++ b/src/runtime/mips-assem.S @@ -192,14 +192,14 @@ lra: .word RETURN_PC_HEADER_WIDETAG /* Nested lisp -> C calls may have clobbered gp. */ lw gp, framesize-16(sp) + /* Mark us as in C land. */ + sw reg_CSP, foreign_function_call_active + /* Set the pseudo-atomic flag. */ li reg_NL4, 0 addu reg_ALLOC, 1 .set reorder - /* Mark us as in C land. */ - sw reg_CSP, foreign_function_call_active - /* Save LISP state. */ subu reg_NL0, reg_ALLOC, 1 sw reg_NL0, dynamic_space_free_pointer @@ -262,15 +262,15 @@ lra: .word RETURN_PC_HEADER_WIDETAG move reg_CFP, reg_CSP addu reg_CSP, reg_CFP, 32 + /* Mark us as in C land. */ + sw reg_CSP, foreign_function_call_active + /* Set the pseudo-atomic flag. */ .set noreorder li reg_NL4, 0 addu reg_ALLOC, 1 .set reorder - /* Mark us as in C land. */ - sw reg_CSP, foreign_function_call_active - /* Convert the return address to an offset and save it on the stack. */ subu reg_NFP, reg_LIP, reg_CODE addu reg_NFP, OTHER_POINTER_LOWTAG diff --git a/version.lisp-expr b/version.lisp-expr index 118b440..525d12d 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.8.34" +"1.0.8.35"