X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Ftarget-core.lisp;h=c07f5e55ec934490faa776ece0a1991e6ae30ef3;hb=672b2f6cb751566526c7f3bb3de6b7d8424760e2;hp=5023124c9b2a9b4b4d8f01fe6656992fb3da7e06;hpb=338732358d49ab202fe55c3581294597d63aec6b;p=sbcl.git diff --git a/src/compiler/generic/target-core.lisp b/src/compiler/generic/target-core.lisp index 5023124..c07f5e5 100644 --- a/src/compiler/generic/target-core.lisp +++ b/src/compiler/generic/target-core.lisp @@ -30,6 +30,7 @@ (setf (%simple-fun-name res) (entry-info-name entry-info)) (setf (%simple-fun-arglist res) (entry-info-arguments entry-info)) (setf (%simple-fun-type res) (entry-info-type entry-info)) + (setf (%simple-fun-xrefs res) (entry-info-xref entry-info)) (note-fun entry-info res object)))) @@ -37,44 +38,44 @@ ;;; vector and node info. (defun make-core-component (component segment length trace-table fixup-notes object) (declare (type component component) - (type sb!assem:segment segment) - (type index length) - (list trace-table fixup-notes) - (type core-object object)) + (type sb!assem:segment segment) + (type index length) + (list trace-table fixup-notes) + (type core-object object)) (without-gcing (let* ((2comp (component-info component)) - (constants (ir2-component-constants 2comp)) - (trace-table (pack-trace-table trace-table)) - (trace-table-len (length trace-table)) - (trace-table-bits (* trace-table-len tt-bits-per-entry)) - (total-length (+ length - (ceiling trace-table-bits sb!vm:n-byte-bits))) - (box-num (- (length constants) sb!vm:code-trace-table-offset-slot)) - (code-obj - (%primitive allocate-code-object box-num total-length)) - (fill-ptr (code-instructions code-obj))) + (constants (ir2-component-constants 2comp)) + (trace-table (pack-trace-table trace-table)) + (trace-table-len (length trace-table)) + (trace-table-bits (* trace-table-len tt-bits-per-entry)) + (total-length (+ length + (ceiling trace-table-bits sb!vm:n-byte-bits))) + (box-num (- (length constants) sb!vm:code-trace-table-offset-slot)) + (code-obj + (%primitive allocate-code-object box-num total-length)) + (fill-ptr (code-instructions code-obj))) (declare (type index box-num total-length)) (sb!assem:on-segment-contents-vectorly segment (lambda (v) - (declare (type (simple-array sb!assem:assembly-unit 1) v)) - (copy-byte-vector-to-system-area v fill-ptr) - (setf fill-ptr (sap+ fill-ptr (length v))))) + (declare (type (simple-array sb!assem:assembly-unit 1) v)) + (copy-byte-vector-to-system-area v fill-ptr) + (setf fill-ptr (sap+ fill-ptr (length v))))) (do-core-fixups code-obj fixup-notes) (dolist (entry (ir2-component-entries 2comp)) - (make-fun-entry entry code-obj object)) + (make-fun-entry entry code-obj object)) (sb!vm:sanctify-for-execution code-obj) (let ((info (debug-info-for-component component))) - (push info (core-object-debug-info object)) - (setf (%code-debug-info code-obj) info)) + (push info (core-object-debug-info object)) + (setf (%code-debug-info code-obj) info)) (setf (code-header-ref code-obj sb!vm:code-trace-table-offset-slot) - length) + length) ;; KLUDGE: the "old" COPY-TO-SYSTEM-AREA automagically worked if ;; somebody changed the number of bytes in a trace table entry. ;; This version is a bit more fragile; if only there were some way @@ -88,18 +89,18 @@ (copy-ub16-to-system-area trace-table 0 fill-ptr 0 trace-table-len) (do ((index sb!vm:code-constants-offset (1+ index))) - ((>= index (length constants))) - (let ((const (aref constants index))) - (etypecase const - (null) - (constant - (setf (code-header-ref code-obj index) - (constant-value const))) - (list - (ecase (car const) - (:entry - (reference-core-fun code-obj index (cdr const) object)) - (:fdefinition - (setf (code-header-ref code-obj index) - (fdefinition-object (cdr const) t)))))))))) + ((>= index (length constants))) + (let ((const (aref constants index))) + (etypecase const + (null) + (constant + (setf (code-header-ref code-obj index) + (constant-value const))) + (list + (ecase (car const) + (:entry + (reference-core-fun code-obj index (cdr const) object)) + (:fdefinition + (setf (code-header-ref code-obj index) + (fdefinition-object (cdr const) t)))))))))) (values))