[movitz-cvs] CVS update: movitz/losp/muerte/scavenge.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Wed Feb 2 07:50:59 UTC 2005
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv19141
Modified Files:
scavenge.lisp
Log Message:
Fixed a number of stack-scavenging bugs.
Date: Wed Feb 2 08:50:57 2005
Author: ffjeld
Index: movitz/losp/muerte/scavenge.lisp
diff -u movitz/losp/muerte/scavenge.lisp:1.45 movitz/losp/muerte/scavenge.lisp:1.46
--- movitz/losp/muerte/scavenge.lisp:1.45 Mon Jan 31 18:54:03 2005
+++ movitz/losp/muerte/scavenge.lisp Wed Feb 2 08:50:57 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.45 2005/01/31 17:54:03 ffjeld Exp $
+;;;; $Id: scavenge.lisp,v 1.46 2005/02/02 07:50:57 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -175,7 +175,7 @@
(when (location-in-object-p code-vector location)
(return code-vector))))))
-(defun scavenge-find-code-vector (location casf-funobj esi &optional primitive-function-p)
+(defun scavenge-find-code-vector (location casf-funobj esi &optional primitive-function-p edx)
(flet ((match-funobj (funobj location)
(cond
((not (typep funobj 'function))
@@ -203,7 +203,9 @@
((match-funobj esi location))
(t (break "DIT returns outside DIT??")))))
((match-funobj casf-funobj location))
- ((match-funobj esi location))
+ ((match-funobj esi location))
+ ((match-funobj edx location)
+ (break "Trampoline/EDX situation?"))
((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)
@@ -302,7 +304,7 @@
0 interrupted-esi
nil))
(new-code-vector (map-stack-instruction-pointer function eip-index old-code-vector)))
- ;;
+ ;; (when atomically (we should be more clever about the stack..))
(multiple-value-bind (x0-location x0-tag)
(stack-frame-ref nil next-frame-bottom 0 :signed-byte30+2)
(cond
@@ -316,7 +318,9 @@
(symbol-value 'ret-trampoline)))
(let* ((old-x0-code-vector
(scavenge-find-code-vector (stack-frame-ref nil next-eip-index 0 :location)
- casf-funobj interrupted-esi t)))
+ casf-funobj interrupted-esi t
+ (unless secondary-register-mode-p
+ (dit-frame-ref nil dit-frame :edx)))))
(map-stack-instruction-pointer function next-eip-index old-x0-code-vector))
(setf next-eip-index next-frame-bottom
next-frame-bottom (1+ next-frame-bottom)))
@@ -328,7 +332,10 @@
(location-in-object-p casf-code-vector x1-location))
(let* ((old-x1-code-vector
(scavenge-find-code-vector (stack-frame-ref nil next-eip-index 0 :location)
- casf-funobj interrupted-esi t)))
+ casf-funobj
+ (unless secondary-register-mode-p
+ interrupted-esi)
+ t)))
(map-stack-instruction-pointer function next-eip-index old-x1-code-vector))
(setf next-eip-index (+ 1 next-frame-bottom)
next-frame-bottom (+ 2 next-frame-bottom)))))))
More information about the Movitz-cvs
mailing list