Changeset 8064


Ignore:
Timestamp:
Jan 15, 2008, 2:35:55 AM (12 years ago)
Author:
rme
Message:

Fix up function self-reference values.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/xdump/xfasload.lisp

    r7287 r8064  
    16591659    (setq *xload-loading-file-source-file* path)))
    16601660
     1661;;; Use the offsets in the self-reference table to replace the :self
     1662;;; in (movl ($ :self) (% fn)) wih the function's actual address.
     1663;;; (x8632 only)
     1664(defun xload-fixup-self-references (addr)
     1665  (let* ((imm-word-count (xload-u16-at-address
     1666                          (+ addr *xload-target-misc-data-offset*))))
     1667    (do* ((i (- imm-word-count 2) (1- i))
     1668          (offset (xload-%fullword-ref addr i) (xload-%fullword-ref addr i)))
     1669         ((zerop offset))
     1670      (setf (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1671                                    addr
     1672                                    offset
     1673                                    0))
     1674                                 (ldb (byte 8 0) addr)
     1675            (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1676                                    addr
     1677                                    offset
     1678                                    1))
     1679                                 (ldb (byte 8 8) addr)
     1680            (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1681                                    addr
     1682                                    offset
     1683                                    2))
     1684                                 (ldb (byte 8 16) addr)
     1685            (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1686                                    addr
     1687                                    offset
     1688                                    3))
     1689                                 (ldb (byte 8 24) addr)))))
     1690     
    16611691(defxloadfaslop $fasl-clfun (s)
    16621692  (let* ((size-in-elements (%fasl-read-count s))
     
    16751705        (%fasl-read-n-bytes s v (+ o *xload-target-misc-data-offset*)
    16761706                            (ash size-of-code *xload-target-fixnumshift*))
     1707        (target-arch-case
     1708         (:x8632 (xload-fixup-self-references vector)))
    16771709        (do* ((numconst (- size-in-elements size-of-code))
    16781710              (i 0 (1+ i))
Note: See TracChangeset for help on using the changeset viewer.