[movitz-cvs] CVS update: movitz/losp/muerte/interrupt.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Tue Jan 4 16:54:17 UTC 2005
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv1793
Modified Files:
interrupt.lisp
Log Message:
Fixing dynamic control transfers, primarily to handle the
stack-allocated funobjs, but there seems to be a number of (other)
bugs here too. It's not quite working yet, though.
Date: Tue Jan 4 17:54:17 2005
Author: ffjeld
Index: movitz/losp/muerte/interrupt.lisp
diff -u movitz/losp/muerte/interrupt.lisp:1.33 movitz/losp/muerte/interrupt.lisp:1.34
--- movitz/losp/muerte/interrupt.lisp:1.33 Tue Nov 23 17:05:59 2004
+++ movitz/losp/muerte/interrupt.lisp Tue Jan 4 17:54:16 2005
@@ -1,6 +1,6 @@
;;;;------------------------------------------------------------------
;;;;
-;;;; Copyright (C) 2003-2004,
+;;;; Copyright (C) 2003-2005,
;;;; Department of Computer Science, University of Tromso, Norway.
;;;;
;;;; For distribution policy, see the accompanying file COPYING.
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Wed Apr 7 01:50:03 2004
;;;;
-;;;; $Id: interrupt.lisp,v 1.33 2004/11/23 16:05:59 ffjeld Exp $
+;;;; $Id: interrupt.lisp,v 1.34 2005/01/04 16:54:16 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -25,6 +25,7 @@
:ebp
:funobj
:edi
+ :dynamic-env
:atomically-continuation
:raw-scratch0
:ecx :eax :edx :ebx :esi
@@ -78,6 +79,8 @@
(let ((ebp (dit-frame-ref stack dit-frame :ebp))
(esp (dit-frame-esp stack dit-frame)))
(cond
+ ((null ebp) ; special mode
+ (stack-frame-ref stack (dit-frame-ref stack dit-frame :dynamic-env) 0))
((< esp ebp)
ebp)
((> esp ebp)
@@ -118,6 +121,7 @@
(:pushl 0) ; 0 'funobj' means default-interrupt-trampoline frame
(:pushl :edi) ;
(:movl ':nil-value :edi) ; We want NIL!
+ (:locally (:pushl (:edi (:edi-offset dynamic-env))))
(:locally (:pushl (:edi (:edi-offset atomically-continuation))))
(:locally (:pushl (:edi (:edi-offset raw-scratch0))))
,@(loop for reg in (sort (copy-list '(:eax :ebx :ecx :edx :esi))
@@ -206,6 +210,12 @@
;; Interrupted code was non-atomical, the normal case.
normal-return
+ (:movl (:ebp ,(dit-frame-offset :dynamic-env)) :ecx)
+ (:locally (:cmpl :ecx (:edi (:edi-offset dynamic-env))))
+ (:jne '(:sub-program ()
+ ;; This would mean the interrupt handled failed to reset dynamic-env.
+ (:int 63)))
+ ;; (:locally (:movl :ecx (:edi (:edi-offset dynamic-env))))
(:movl (:ebp ,(dit-frame-offset :raw-scratch0)) :ecx)
(:locally (:movl :ecx (:edi (:edi-offset raw-scratch0))))
(:movl (:ebp ,(dit-frame-offset :scratch1)) :eax)
More information about the Movitz-cvs
mailing list