[movitz-cvs] CVS update: movitz/losp/muerte/scavenge.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Thu Jan 27 09:01:28 UTC 2005


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv23073

Modified Files:
	scavenge.lisp 
Log Message:
Fixed the situation when an interrupt occures inside dynamic-jump-next.

Date: Thu Jan 27 01:01:27 2005
Author: ffjeld

Index: movitz/losp/muerte/scavenge.lisp
diff -u movitz/losp/muerte/scavenge.lisp:1.42 movitz/losp/muerte/scavenge.lisp:1.43
--- movitz/losp/muerte/scavenge.lisp:1.42	Wed Jan 26 23:46:49 2005
+++ movitz/losp/muerte/scavenge.lisp	Thu Jan 27 01:01:27 2005
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Mon Mar 29 14:54:08 2004
 ;;;;                
-;;;; $Id: scavenge.lisp,v 1.42 2005/01/27 07:46:49 ffjeld Exp $
+;;;; $Id: scavenge.lisp,v 1.43 2005/01/27 09:01:27 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -199,9 +199,16 @@
      ((match-funobj esi location))
      ((not (typep casf-funobj 'function))
       (break "Unknown funobj/frame-type: ~S" casf-funobj))
+     ((location-in-object-p (%run-time-context-slot 'dynamic-jump-next) location)
+      (%run-time-context-slot 'dynamic-jump-next))
      ((when searchp
 	(%find-code-vector location)))
-     (t (error "Unable to decode EIP #x~X funobj ~S." location casf-funobj)))))
+     (t (with-simple-restart (continue "Try to perform a code-vector-search.")
+	  (error "Unable to decode EIP #x~X funobj ~S, ESI ~S."
+		 (* 4 location) casf-funobj esi))
+	(or (%find-code-vector location)
+	    (error "Code-vector-search for EIP #x~X also failed."
+		   (* 4 location)))))))
 
 (defun map-stack-value (function value frame)
   (if (not (typep value 'pointer))
@@ -305,7 +312,6 @@
 			       (eq x1-tag 3) ; 3 or 7?
 			       (and (oddp x1-location) (eq x1-tag 2))) ; 6?
 			   (location-in-object-p casf-code-vector x1-location))
-		  (warn "X1: ~S ~S" x1-location x1-tag)
 		  (let* ((old-x1-code-vector
 			  (scavenge-find-code-vector (stack-frame-ref nil next-eip-index 0 :location)
 						     casf-funobj interrupted-esi t)))




More information about the Movitz-cvs mailing list