From dbd8d943f628b6fb2d3e68d3c5a2568ade8db692 Mon Sep 17 00:00:00 2001 From: rtoy <rtoy> Date: Fri, 5 Sep 2008 22:03:12 +0000 Subject: [PATCH] compiler/ppc/parms.lisp: compiler/sparc/parms.lisp: o Add lisp::*gc-inhibit* to list of static symbols. (No cross-compile needed because we used one of the spare static symbols. Full cycle of builds needed to progate the changes.) lisp/breakpoint.c: o Disable GC when calling HANDLE-BREAKPOINT. This is a temporary workaround to the issue where a GC occurring during HANDLE-BREAKPOINT can cause a segfault during tracing. GC moves the code object and/or bogus lra such that we don't know where we should return to. --- compiler/ppc/parms.lisp | 5 +++-- compiler/sparc/parms.lisp | 5 +++-- lisp/breakpoint.c | 19 ++++++++++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/compiler/ppc/parms.lisp b/compiler/ppc/parms.lisp index 3431ac9c1..e8e81e72e 100644 --- a/compiler/ppc/parms.lisp +++ b/compiler/ppc/parms.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ppc/parms.lisp,v 1.16 2006/12/02 15:22:36 rtoy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ppc/parms.lisp,v 1.17 2008/09/05 22:03:12 rtoy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -270,9 +270,10 @@ :key-and-value :key-or-value + lisp::*gc-inhibit* + ;; Spare symbols. Rename these when you need to add some static ;; symbols and don't want to do a cross-compile. - spare-9 spare-8 spare-7 spare-6 diff --git a/compiler/sparc/parms.lisp b/compiler/sparc/parms.lisp index 9e883d903..875666ea0 100644 --- a/compiler/sparc/parms.lisp +++ b/compiler/sparc/parms.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/parms.lisp,v 1.54 2008/04/15 14:33:25 rtoy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/parms.lisp,v 1.55 2008/09/05 22:03:12 rtoy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -329,10 +329,11 @@ :key-and-value :key-or-value + lisp::*gc-inhibit* + ;; Some spare static symbols. Useful for adding another static ;; symbol without having to do a cross-compile. Just rename one ;; of these to the desired name. - spare-9 spare-8 spare-7 spare-6 diff --git a/lisp/breakpoint.c b/lisp/breakpoint.c index 01b4345f5..d742b9807 100644 --- a/lisp/breakpoint.c +++ b/lisp/breakpoint.c @@ -1,6 +1,6 @@ /* - $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/breakpoint.c,v 1.23 2008/09/05 13:12:03 rtoy Exp $ + $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/breakpoint.c,v 1.24 2008/09/05 22:03:12 rtoy Exp $ This code was written as part of the CMU Common Lisp project at Carnegie Mellon University, and has been placed in the public domain. @@ -326,8 +326,6 @@ handle_function_end_breakpoint(int signal, int subcode, os_context_t * scp) #endif } - funcall3(SymbolFunction(HANDLE_BREAKPOINT), offset, code, alloc_sap(scp)); - /* * Breakpoint handling done, so get the real LRA where we're * supposed to return to so we can return there. @@ -342,6 +340,21 @@ handle_function_end_breakpoint(int signal, int subcode, os_context_t * scp) if (codeptr->constants[KNOWN_RETURN_P_SLOT] == NIL) SC_REG(scp, reg_CODE) = lra; #endif + + { + lispobj saved_gc_inhibit; + +#ifdef GC_INHIBIT + saved_gc_inhibit = SymbolValue(GC_INHIBIT); + SetSymbolValue(GC_INHIBIT, T); +#endif + funcall3(SymbolFunction(HANDLE_BREAKPOINT), offset, code, alloc_sap(scp)); + +#ifdef GC_INHIBIT + SetSymbolValue(GC_INHIBIT, saved_gc_inhibit); +#endif + } + undo_fake_foreign_function_call(scp); return (void *) (lra - type_OtherPointer + sizeof(lispobj)); } -- GitLab