diff --git a/code/debug-int.lisp b/code/debug-int.lisp
index b96f547f2e9e7cea5c8ac31b7bf3aa38cc4415b5..0cd0210f90e6c71d193f7ed514d7ce59af70bba5 100644
--- a/code/debug-int.lisp
+++ b/code/debug-int.lisp
@@ -944,14 +944,23 @@
 ;;; want, and the current frame contains the pc at which we will continue
 ;;; executing upon returning to that previous frame.
 ;;;
+;;; Note: Sometimes LRA is actually a fixnum.  This happens when lisp calls
+;;; into C.  In this case, the code object is stored on the stack after the
+;;; LRA, and the LRA is the word offset.
+;;; 
 (defun compute-calling-frame (caller lra up-frame)
   (declare (type system-area-pointer caller))
   (when (cstack-pointer-valid-p caller)
     (multiple-value-bind
 	(code pc-offset escaped)
 	(if lra
-	    (let ((word-offset (get-header-data lra))
-		  (code (lra-code-header lra)))
+	    (multiple-value-bind
+		(word-offset code)
+		(if (fixnump lra)
+		    (let ((fp (frame-pointer up-frame)))
+		      (values lra
+			      (stack-ref fp (1+ vm::lra-save-offset))))
+		    (values (get-header-data lra) (lra-code-header lra)))
 	      (if code
 		  (values code
 			  (* (1+ (- word-offset (get-header-data code)))