X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdebug-int.lisp;h=4b6be6d4d3c74e3ad3142fa3919d933eda48f4e0;hb=1dc38285834db2d374a156a4f68b19096341deb3;hp=26ca084d8705506910499dae842fad1a71eaac5e;hpb=77bf768d096845986af71ca5055c94c4abd626ed;p=sbcl.git diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp index 26ca084..4b6be6d 100644 --- a/src/code/debug-int.lisp +++ b/src/code/debug-int.lisp @@ -674,6 +674,11 @@ ((not (frame-p frame))) (setf (frame-number frame) number))) +(defun find-saved-frame-down (fp up-frame) + (multiple-value-bind (saved-fp saved-pc) (sb!c:find-saved-fp-and-pc fp) + (when saved-fp + (compute-calling-frame (descriptor-sap saved-fp) saved-pc up-frame)))) + ;;; Return the frame immediately below FRAME on the stack; or when ;;; FRAME is the bottom of the stack, return NIL. (defun frame-down (frame) @@ -703,8 +708,9 @@ (when (control-stack-pointer-valid-p fp) #!+(or x86 x86-64) (multiple-value-bind (ok ra ofp) (x86-call-context fp) - (and ok - (compute-calling-frame ofp ra frame))) + (if ok + (compute-calling-frame ofp ra frame) + (find-saved-frame-down fp frame))) #!-(or x86 x86-64) (compute-calling-frame #!-alpha