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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Wed Jan 26 13:46:15 UTC 2005


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

Modified Files:
	scavenge.lisp 
Log Message:
In scavenge-find-code-vector, fixed the situation when the DIT shared
an inclomplete stack-frame with the handler.

Date: Wed Jan 26 05:46:14 2005
Author: ffjeld

Index: movitz/losp/muerte/scavenge.lisp
diff -u movitz/losp/muerte/scavenge.lisp:1.40 movitz/losp/muerte/scavenge.lisp:1.41
--- movitz/losp/muerte/scavenge.lisp:1.40	Tue Jan 25 05:56:18 2005
+++ movitz/losp/muerte/scavenge.lisp	Wed Jan 26 05:46:14 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.40 2005/01/25 13:56:18 ffjeld Exp $
+;;;; $Id: scavenge.lisp,v 1.41 2005/01/26 13:46:14 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -168,23 +168,11 @@
 	     (+ start-frame 1)
 	     map-region))
 
-;;;(defun map-code-vector-slot (function stack slot casf-funobj)
-;;;  (let ((casf-code-vector (if (eq 0 casf-funobj)
-;;;			      (symbol-value 'default-interrupt-trampoline)
-;;;			    (funobj-code-vector casf-funobj)))
-;;;	(eip-location (stack-frame-ref stack slot 0 :location)))
-;;;    (cond
-;;;     ((location-in-object-p casf-code-vector eip-location)
-;;;      (let ((new (funcall function casf-code-vector nil)))
-;;;	(when (not (eq new casf-code-vector))
-;;;	  ;; Perform some pointer arithmetics..
-;;;	  (let ((offset (- (stack-frame-ref stack slot 0 :unsigned-byte32)
-;;;			   (%object-lispval casf-code-vector))))
-;;;	    (break "Code-vector for ~S moved, offset is ~D." casf-code-vector offset))))))))
-
 (defun scavenge-find-code-vector (location casf-funobj esi &optional searchp)
   (flet ((match-funobj (funobj location)
 	   (cond
+	    ((not (typep funobj 'function))
+	     nil)
 	    ((let ((x (funobj-code-vector casf-funobj)))
 	       (and (location-in-object-p x location) x)))
 	    ((let ((x (funobj-code-vector%1op casf-funobj)))
@@ -202,12 +190,13 @@
     (cond
      ((eq 0 casf-funobj)
       (let ((dit-code-vector (symbol-value 'default-interrupt-trampoline)))
-	(if (location-in-object-p dit-code-vector location)
-	    dit-code-vector
-	  (break "DIT returns outside DIT??"))))
-     ((and (typep esi 'function)
-	   (match-funobj esi location)))
+	(cond
+	 ((location-in-object-p dit-code-vector location)
+	  dit-code-vector)
+	 ((match-funobj esi))
+	 (t (break "DIT returns outside DIT??")))))
      ((match-funobj casf-funobj location))
+     ((match-funobj esi location))
      ((not (typep casf-funobj 'function))
       (break "Unknown funobj/frame-type: ~S" casf-funobj))
      ((when searchp
@@ -275,6 +264,7 @@
 	     (= 0 (ldb (byte 2 0) atomically)))
 	;; Interrupt occurred inside an (non-pf) atomically, so none of the
 	;; GC-root registers are active.
+	#+ignore
 	(setf (dit-frame-ref nil dit-frame :eax) nil
 	      (dit-frame-ref nil dit-frame :ebx) nil
 	      (dit-frame-ref nil dit-frame :edx) nil




More information about the Movitz-cvs mailing list