gencgc: More precise conservatism for pointers to boxed pages.
[sbcl.git] / src / compiler / fixup.lisp
index d789bbf..2e98849 100644 (file)
 
 (in-package "SB!C")
 
-(file-comment
-  "$Header$")
-
-;;; FIXUP -- A fixup of some kind.
+;;; a fixup of some kind
 (defstruct (fixup
-           (:constructor make-fixup (name flavor &optional offset)))
-  ;; The name and flavor of the fixup. The assembler makes no assumptions
-  ;; about the contents of these fields; their semantics are imposed by the
-  ;; dumper.
+            (:constructor make-fixup (name flavor &optional offset))
+            (:copier nil))
+  ;; the name and flavor of the fixup. The assembler makes no
+  ;; assumptions about the contents of these fields; their semantics
+  ;; are imposed by the dumper.
   name
   flavor
-  ;; OFFSET is an optional offset from whatever external label this fixup
-  ;; refers to. Or in the case of the :CODE-OBJECT flavor of fixups on the :X86
-  ;; architecture, NAME is always NIL, so this fixup doesn't refer to an
-  ;; external label, and OFFSET is an offset from the beginning of the
-  ;; current code block.
+  ;; OFFSET is an optional offset from whatever external label this
+  ;; fixup refers to. Or in the case of the :CODE-OBJECT flavor of
+  ;; fixups on the :X86 architecture, NAME is always NIL, so this
+  ;; fixup doesn't refer to an external label, and OFFSET is an offset
+  ;; from the beginning of the current code block.
   offset)
 
-;;; were done with another flavor
-
-(def!method print-object ((fixup fixup) stream)
-  (print-unreadable-object (fixup stream :type t)
-    (format stream
-           ":FLAVOR ~S :NAME ~S :OFFSET ~S"
-           (fixup-flavor fixup)
-           (fixup-name fixup)
-           (fixup-offset fixup))))
+(defstruct (fixup-note
+             (:constructor make-fixup-note (kind fixup position))
+             (:copier nil))
+  kind
+  fixup
+  position)
 
-;;; KLUDGE: Despite its name, this is not a list of FIXUP objects, but rather a
-;;; list of `(,KIND ,FIXUP ,POSN). Perhaps this non-mnemonicity could be
-;;; reduced by naming what's currently a FIXUP structure a FIXUP-REQUEST, and
-;;; then renaming *FIXUPS* to *NOTED-FIXUPS*.-- WHN 19990905
-(defvar *fixups*)
+(defvar *fixup-notes*)
 
 ;;; Setting this variable lets you see what's going on as items are
 ;;; being pushed onto *FIXUPS*.
 ;;; they find themselves trying to deal with a fixup.
 (defun note-fixup (segment kind fixup)
   (sb!assem:emit-back-patch segment
-                           0
-                           (lambda (segment posn)
-                             (declare (ignore segment))
-                             ;; Why use EMIT-BACK-PATCH to cause this PUSH to
-                             ;; be done later, instead of just doing it now?
-                             ;; I'm not sure. Perhaps there's some concern
-                             ;; that POSN isn't known accurately now? Perhaps
-                             ;; there's a desire for all fixing up to go
-                             ;; through EMIT-BACK-PATCH whether it needs to or
-                             ;; not? -- WHN 19990905
-                             (push (list kind fixup posn) *fixups*)))
+                            0
+                            (lambda (segment posn)
+                              (declare (ignore segment))
+                              ;; Why use EMIT-BACK-PATCH to cause this PUSH to
+                              ;; be done later, instead of just doing it now?
+                              ;; I'm not sure. Perhaps there's some concern
+                              ;; that POSN isn't known accurately now? Perhaps
+                              ;; there's a desire for all fixing up to go
+                              ;; through EMIT-BACK-PATCH whether it needs to or
+                              ;; not? -- WHN 19990905
+                              #!+sb-show
+                              (when *show-fixups-being-pushed-p*
+                                (/show "PUSHING FIXUP" kind fixup posn))
+                              (push (make-fixup-note kind fixup posn) *fixup-notes*)))
   (values))