0.7.7.19:
[sbcl.git] / src / compiler / target-disassem.lisp
index 0a6fa38..453edf1 100644 (file)
@@ -44,8 +44,9 @@
   (sort insts #'> :key #'specializer-rank))
 
 (defun specialization-error (insts)
-  (error "~@<internal disassembler error: ~2I~_Instructions either aren't related or conflict in some way: ~4I~_~S~:>"
-        insts))
+  (bug
+   "~@<Instructions either aren't related or conflict in some way: ~4I~_~S~:>"
+   insts))
 
 ;;; Given a list of instructions INSTS, Sees if one of these instructions is a
 ;;; more general form of all the others, in which case they are put into its
              (seg-virtual-location seg)
              (seg-code seg)))))
 \f
-;;; All state during disassembly. We store some seemingly redundant
-;;; information so that we can allow garbage collect during disassembly and
-;;; not get tripped up by a code block being moved...
-(defstruct (disassem-state (:conc-name dstate-)
-                          (:constructor %make-dstate)
-                          (:copier nil))
-  ;; offset of current pos in segment
-  (cur-offs 0 :type offset)            
-  ;; offset of next position
-  (next-offs 0 :type offset)           
-  ;; a sap pointing to our segment
-  (segment-sap (missing-arg) :type sb!sys:system-area-pointer)
-  ;; the current segment                                       
-  (segment nil :type (or null segment))        
-  ;; what to align to in most cases
-  (alignment sb!vm:n-word-bytes :type alignment) 
-  (byte-order :little-endian
-             :type (member :big-endian :little-endian))
-  ;; for user code to hang stuff off of
-  (properties nil :type list)
-  (filtered-values (make-array max-filtered-value-index)
-                  :type filtered-value-vector)
-  ;; used for prettifying printing
-  (addr-print-len nil :type (or null (integer 0 20)))
-  (argument-column 0 :type column)
-  ;; to make output look nicer
-  (output-state :beginning             
-               :type (member :beginning
-                             :block-boundary
-                             nil))
-
-  ;; alist of (address . label-number)
-  (labels nil :type list)              
-  ;; same as LABELS slot data, but in a different form
-  (label-hash (make-hash-table) :type hash-table)
-  ;; list of function
-  (fun-hooks nil :type list)           
-
-  ;; alist of (address . label-number), popped as it's used
-  (cur-labels nil :type list)
-  ;; OFFS-HOOKs, popped as they're used
-  (cur-offs-hooks nil :type list)      
-
-  ;; for the current location
-  (notes nil :type list)
-
-  ;; currently active source variables
-  (current-valid-locations nil :type (or null (vector bit))))
-(def!method print-object ((dstate disassem-state) stream)
-  (print-unreadable-object (dstate stream :type t)
-    (format stream
-           "+~W~@[ in ~S~]"
-           (dstate-cur-offs dstate)
-           (dstate-segment dstate))))
-
-;;; Return the absolute address of the current instruction in DSTATE.
-(defun dstate-cur-addr (dstate)
-  (the address (+ (seg-virtual-location (dstate-segment dstate))
-                 (dstate-cur-offs dstate))))
-
-;;; Return the absolute address of the next instruction in DSTATE.
-(defun dstate-next-addr (dstate)
-  (the address (+ (seg-virtual-location (dstate-segment dstate))
-                 (dstate-next-offs dstate))))
-\f
 ;;;; function ops
 
 (defun fun-self (fun)
   (setf (dstate-cur-offs dstate) 0)
   (setf (dstate-cur-labels dstate) (dstate-labels dstate)))
 
-(defun do-offs-hooks (before-address stream dstate)
+(defun call-offs-hooks (before-address stream dstate)
   (declare (type (or null stream) stream)
           (type disassem-state dstate))
   (let ((cur-offs (dstate-cur-offs dstate)))
          (unless (= (dstate-next-offs dstate) cur-offs)
            (return)))))))
 
-(defun do-fun-hooks (chunk stream dstate)
+(defun call-fun-hooks (chunk stream dstate)
   (let ((hooks (dstate-fun-hooks dstate))
        (cur-offs (dstate-cur-offs dstate)))
     (setf (dstate-next-offs dstate) cur-offs)
 
       (setf (dstate-next-offs dstate) (dstate-cur-offs dstate))
 
-      (do-offs-hooks t stream dstate)
+      (call-offs-hooks t stream dstate)
       (unless (or prefix-p (null stream))
        (print-current-address stream dstate))
-      (do-offs-hooks nil stream dstate)
+      (call-offs-hooks nil stream dstate)
 
       (unless (> (dstate-next-offs dstate) (dstate-cur-offs dstate))
        (sb!sys:without-gcing
                (sap-ref-dchunk (dstate-segment-sap dstate)
                                (dstate-cur-offs dstate)
                                (dstate-byte-order dstate))))
-          (let ((fun-prefix-p (do-fun-hooks chunk stream dstate)))
+          (let ((fun-prefix-p (call-fun-hooks chunk stream dstate)))
             (if (> (dstate-next-offs dstate) (dstate-cur-offs dstate))
                 (setf prefix-p fun-prefix-p)
                 (let ((inst (find-inst chunk ispace)))