From: Alastair B. <lis...@us...> - 2010-06-06 19:51:27
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv15362/src/code Modified Files: debug-int.lisp Log Message: 1.0.39.7: Make TRACE :ENCAPSULATE NIL work on PPC. * SIGNAL-CONTEXT-FRAME (debug-int.lisp) was passing a bogus parameter to COMPUTE-CALLING-FRAME on non-x86oids, causing an unknown immediate object to be constructed. Fixed, and KLUDGEd to still work on x86oids. * fun_end_breakpoint_guts (ppc-assem.S) wasn't implemented at all, just stubbed out to provide the symbols that the core looks for when compiling MAKE-BOGUS-LRA (debug-int.lisp). * The implementation of fun_end_breakpoint_guts on non-PPC is sparsely explained at best. Addressed in the new PPC version. * The usual implementation of fun_end_breakpoint_guts leaves setting the LRA header data to MAKE-BOGUS-LRA but this is done after attempting to create the LRA object, which fails on GENCGC systems due to the sanity checking of the pointer. On PPC, this is addressed by setting the LRA header data by dead reckoning in ppc-assem.S. * In MAKE-BOGUS-LRA, don't bother setting the LRA header data if it is known to already be correct. Index: debug-int.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/debug-int.lisp,v retrieving revision 1.134 retrieving revision 1.135 diff -u -d -r1.134 -r1.135 --- debug-int.lisp 6 Jun 2010 19:43:30 -0000 1.134 +++ debug-int.lisp 6 Jun 2010 19:51:18 -0000 1.135 @@ -3018,7 +3018,11 @@ (sb!alien:sap-alien signal-context (* os-context-t)))) (cfp (int-sap (sb!vm:context-register scp sb!vm::cfp-offset)))) (compute-calling-frame cfp - (sb!vm:context-pc scp) + ;; KLUDGE: This argument is ignored on + ;; x86oids in this scenario, but is + ;; declared to be a SAP. + #!+(or x86 x86-64) (sb!vm:context-pc scp) + #!-(or x86 x86-64) nil nil))) (defun handle-fun-end-breakpoint (offset component context) @@ -3115,11 +3119,20 @@ #!-(or x86 x86-64) (let ((new-lra (make-lisp-obj (+ (sap-int dst-start) sb!vm:other-pointer-lowtag)))) - (set-header-data - new-lra - (logandc2 (+ sb!vm:code-constants-offset bogus-lra-constants 1) - 1)) - (sb!vm:sanctify-for-execution code-object) + #!-(or gencgc ppc) + (progn + ;; Set the offset from the LRA to the enclosing component. + ;; This does not need to be done on GENCGC targets, as the + ;; pointer validation done in MAKE-LISP-OBJ requires that it + ;; already have been set before we get here. It does not + ;; need to be done on CHENEYGC PPC as it's easier to use the + ;; same fun_end_breakpoint_guts on both, including the LRA + ;; header. + (set-header-data + new-lra + (logandc2 (+ sb!vm:code-constants-offset bogus-lra-constants 1) + 1)) + (sb!vm:sanctify-for-execution code-object)) (values new-lra code-object (sap- trap-loc src-start)))))) ;;;; miscellaneous |