[movitz-cvs] CVS movitz

ffjeld ffjeld at common-lisp.net
Sun Feb 24 12:13:06 UTC 2008


Update of /project/movitz/cvsroot/movitz
In directory clnet:/tmp/cvs-serv3033

Modified Files:
	image.lisp 
Log Message:
Add disassembly comments.


--- /project/movitz/cvsroot/movitz/image.lisp	2008/02/23 22:34:14	1.115
+++ /project/movitz/cvsroot/movitz/image.lisp	2008/02/24 12:13:06	1.116
@@ -9,7 +9,7 @@
 ;;;; Created at:    Sun Oct 22 00:22:43 2000
 ;;;; Distribution:  See the accompanying file COPYING.
 ;;;;                
-;;;; $Id: image.lisp,v 1.115 2008/02/23 22:34:14 ffjeld Exp $
+;;;; $Id: image.lisp,v 1.116 2008/02/24 12:13:06 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1244,6 +1244,79 @@
     (when (= offset (bt:slot-offset 'movitz-run-time-context slot-name))
       (return slot-name))))
 
+#-ia-x86
+(defun comment-instruction (instruction funobj pc)
+  "Return a list of strings that comments on INSTRUCTION."
+  (declare (ignore pc))
+  (loop for operand in (asm:instruction-operands instruction)
+     when (and (typep operand 'asm:indirect-operand)
+	       (member :edi operand)
+	       (run-time-context-find-slot (asm:indirect-operand-offset operand))
+	       (not (member (asm:instruction-operator instruction)
+			    '(:leal :lea))))
+     collect (format nil "<Global slot ~A>" 
+		     (run-time-context-find-slot (asm:indirect-operand-offset operand)))
+;;      when (and (typep operand 'ia-x86::operand-indirect-register)
+;; 	       (eq 'ia-x86::edi (ia-x86::operand-register operand))
+;; 	       (typep instruction 'ia-x86-instr::lea)
+;; 	       (or (not (ia-x86::operand-register2 operand))
+;; 		   (eq 'ia-x86::edi (ia-x86::operand-register2 operand))))
+;;      collect (let ((x (+ (* (ia-x86::operand-scale operand)
+;; 			    (image-nil-word *image*))
+;; 			 (ia-x86::operand-offset operand)
+;; 			 (ecase (ia-x86::operand-register2 operand)
+;; 			   (ia-x86::edi (image-nil-word *image*))
+;; 			   ((nil) 0)))))
+;; 	       (case (ldb (byte 3 0) x)
+;; 		 (#.(tag :character)
+;; 		    (format nil "Immediate ~D (char ~S)"
+;; 			    x (code-char (ldb (byte 8 8) x))))
+;; 		 (#.(mapcar 'tag +fixnum-tags+)
+;; 		    (format nil "Immediate ~D (fixnum ~D #x~X)"
+;; 			    x
+;; 			    (truncate x +movitz-fixnum-factor+)
+;; 			    (truncate x +movitz-fixnum-factor+)))
+;; 		 (t (format nil "Immediate ~D" x))))
+     when (and funobj
+	       (typep operand 'asm:indirect-operand)
+	       (member :esi operand)
+	       (<= 12 (asm:indirect-operand-offset operand)))
+     collect (format nil "~A"
+		     (nth (truncate (- (+ (asm:indirect-operand-offset operand)
+					  (if (member :edi operand)
+					      (image-nil-word *image*)
+					      0))
+				       (slot-offset 'movitz-funobj 'constant0))
+				    4)
+			  (movitz-funobj-const-list funobj)))
+;;      when (and funobj
+;; 	       (typep operand 'ia-x86::operand-indirect-register)
+;; 	       (eq 'ia-x86::esi (ia-x86::operand-register2 operand))
+;; 	       (eq 'ia-x86::edi (ia-x86::operand-register operand))
+;; 	       (<= 12 (ia-x86::operand-offset operand)))
+;;      collect (format nil "~A" (nth (truncate (- (+ (ia-x86::operand-offset operand)
+;; 						   (* (ia-x86::operand-scale operand)
+;; 						      (image-nil-word *image*)))
+;; 						(slot-offset 'movitz-funobj 'constant0))
+;; 					     4)
+;; 				   (movitz-funobj-const-list funobj)))
+;;      when (typep operand 'ia-x86::operand-rel-pointer)
+;;      collect (let* ((x (+ pc
+;; 			  (imagpart (ia-x86::instruction-original-datum instruction))
+;; 			  (length (ia-x86:instruction-prefixes instruction))
+;; 			  (ia-x86::operand-offset operand)))
+;; 		    (label (and funobj (car (find x (movitz-funobj-symtab funobj) :key #'cdr)))))
+;; 	       (if label
+;; 		   (format nil "branch to ~S at ~D" label x)
+;; 		   (format nil "branch to ~D" x)))
+     when (and (typep operand '(and integer asm:immediate-operand))
+	       (<= #x100 operand #x10000)
+	       (= (tag :character) (mod operand 256)))
+     collect (format nil "#\\~C" (code-char (truncate operand 256)))
+     when (and (typep operand '(and integer asm:immediate-operand))
+	       (zerop (mod operand +movitz-fixnum-factor+)))
+     collect (format nil "#x~X" (truncate operand +movitz-fixnum-factor+))))
+
 #+ia-x86
 (defun comment-instruction (instruction funobj pc)
   "Return a list of strings that comments on INSTRUCTION."
@@ -1396,7 +1469,7 @@
 		 when (let ((x (find pc (movitz-funobj-symtab funobj) :key #'cdr)))
 			(when x (list pc (list (format nil "  ~A" (car x))) "" nil)))
 		 collect it
-		 collect (list pc data instruction nil)
+		 collect (list pc data instruction (comment-instruction instruction funobj pc))
 		 do (incf pc (length data))))))
   (when recursive
     (let ((*recursive-disassemble-remember-funobjs*
@@ -1479,7 +1552,7 @@
 	       collect (list pc
 			     data
 			     instruction
-			     nil #+ignore (comment-instruction instruction nil pc))
+			     (comment-instruction instruction nil pc))
 	       do (incf pc (length data))))
     (values)))
 




More information about the Movitz-cvs mailing list