X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdebug-int.lisp;h=6a7692a5b9421ee997aae19e95bb4df48c67058d;hb=9943ee511c2e114876b2c6f52876984ad7087354;hp=2dfd05d95f612e47bca5c21f410a786750ab9907;hpb=b66385e2031fc2cac17dd129df0af400beb48a22;p=sbcl.git diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp index 2dfd05d..6a7692a 100644 --- a/src/code/debug-int.lisp +++ b/src/code/debug-int.lisp @@ -3332,16 +3332,21 @@ register." ;; If there was not enough debug information available, there's no ;; sense in signaling the condition. (when step-info - (let ((*step-frame* (frame-down (top-frame)))) - ;; KLUDGE: Use the first non-foreign frame as the - ;; *STACK-TOP-HINT*. Getting the frame from the signal context - ;; would be cleaner, but SIGNAL-CONTEXT-FRAME doesn't seem - ;; seem to work very well currently. - (loop while *step-frame* - for dfun = (frame-debug-fun *step-frame*) - do (when (typep dfun 'compiled-debug-fun) - (return)) - do (setf *step-frame* (frame-down *step-frame*))) + (let ((*step-frame* + #+(or x86 x86-64) + (signal-context-frame (sb!alien::alien-sap context)) + #-(or x86 x86-64) + ;; KLUDGE: Use the first non-foreign frame as the + ;; *STACK-TOP-HINT*. Getting the frame from the signal + ;; context as on x86 would be cleaner, but + ;; SIGNAL-CONTEXT-FRAME doesn't seem seem to work at all + ;; on non-x86. + (loop with frame = (frame-down (top-frame)) + while frame + for dfun = (frame-debug-fun *step-frame*) + do (when (typep dfun 'compiled-debug-fun) + (return frame)) + do (setf *step-frame* (frame-down *step-frame*))))) (sb!impl::step-form step-info ;; We could theoretically store information in ;; the debug-info about to determine the