Changeset 10075


Ignore:
Timestamp:
Jul 18, 2008, 4:29:16 AM (11 years ago)
Author:
rme
Message:

xload-target-consp: on certain weird platforms, NIL shares a tag with
cons cells, so we have to special-case it.

xload-fixup-self-references: new (x8632-only) function; use it when
xfasloading clfuns for x8632 targets.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/xdump/xfasload.lisp

    r9879 r10075  
    164164
    165165(defun xload-target-consp (addr)
    166   (= *xload-target-fulltag-cons* (logand addr *xload-target-fulltagmask*)))
     166  (and (= *xload-target-fulltag-cons* (logand addr *xload-target-fulltagmask*))
     167       (not (= addr *xload-target-nil*))))
    167168
    168169
     
    16671668    (setq *xload-loading-file-source-file* path)))
    16681669
     1670;;; Use the offsets in the self-reference table to replace the :self
     1671;;; in (movl ($ :self) (% fn)) wih the function's actual address.
     1672;;; (x8632 only)
     1673(defun xload-fixup-self-references (addr)
     1674  (let* ((imm-word-count (xload-u16-at-address
     1675                          (+ addr *xload-target-misc-data-offset*))))
     1676    (do* ((i (- imm-word-count 2) (1- i))
     1677          (offset (xload-%fullword-ref addr i) (xload-%fullword-ref addr i)))
     1678         ((zerop offset))
     1679      (setf (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1680                                    addr
     1681                                    offset
     1682                                    0))
     1683                                 (ldb (byte 8 0) addr)
     1684            (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1685                                    addr
     1686                                    offset
     1687                                    1))
     1688                                 (ldb (byte 8 8) addr)
     1689            (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1690                                    addr
     1691                                    offset
     1692                                    2))
     1693                                 (ldb (byte 8 16) addr)
     1694            (xload-u8-at-address (+ *xload-target-misc-header-offset*
     1695                                    addr
     1696                                    offset
     1697                                    3))
     1698                                 (ldb (byte 8 24) addr)))))
     1699     
    16691700(defxloadfaslop $fasl-clfun (s)
    16701701  (let* ((size-in-elements (%fasl-read-count s))
     
    16831714        (%fasl-read-n-bytes s v (+ o *xload-target-misc-data-offset*)
    16841715                            (ash size-of-code *xload-target-fixnumshift*))
     1716        (target-arch-case
     1717         (:x8632 (xload-fixup-self-references vector)))
    16851718        (do* ((numconst (- size-in-elements size-of-code))
    16861719              (i 0 (1+ i))
Note: See TracChangeset for help on using the changeset viewer.