(defun fixup-code-object (code offset fixup kind)
(declare (type index offset))
(flet ((add-fixup (code offset)
- ;; Although this could check for and ignore fixups for code
- ;; objects in the read-only and static spaces, this should
- ;; only be the case when *enable-dynamic-space-code* is
- ;; True.
- (when sb!impl::*enable-dynamic-space-code*
- (incf *num-fixups*)
- (let ((fixups (code-header-ref code code-constants-offset)))
- (cond ((typep fixups '(simple-array (unsigned-byte 32) (*)))
- (let ((new-fixups
- (adjust-array fixups (1+ (length fixups))
- :element-type '(unsigned-byte 32))))
- (setf (aref new-fixups (length fixups)) offset)
- (setf (code-header-ref code code-constants-offset)
- new-fixups)))
- (t
- (unless (or (eq (get-type fixups)
- sb!vm:unbound-marker-type)
- (zerop fixups))
- (format t "** Init. code FU = ~S~%" fixups)) ; FIXME
+ ;; (We check for and ignore fixups for code objects in the
+ ;; read-only and static spaces. (In the old CMU CL code
+ ;; this check was conditional on *ENABLE-DYNAMIC-SPACE-CODE*,
+ ;; but in SBCL relocatable dynamic space code is always in
+ ;; use, so we always do the check.)
+ (incf *num-fixups*)
+ (let ((fixups (code-header-ref code code-constants-offset)))
+ (cond ((typep fixups '(simple-array (unsigned-byte 32) (*)))
+ (let ((new-fixups
+ (adjust-array fixups (1+ (length fixups))
+ :element-type '(unsigned-byte 32))))
+ (setf (aref new-fixups (length fixups)) offset)
(setf (code-header-ref code code-constants-offset)
- (make-specializable-array
- 1
- :element-type '(unsigned-byte 32)
- :initial-element offset))))))))
+ new-fixups)))
+ (t
+ (unless (or (eq (get-type fixups)
+ sb!vm:unbound-marker-type)
+ (zerop fixups))
+ (format t "** Init. code FU = ~S~%" fixups)) ; FIXME
+ (setf (code-header-ref code code-constants-offset)
+ (make-specializable-array
+ 1
+ :element-type '(unsigned-byte 32)
+ :initial-element offset)))))))
(sb!sys:without-gcing
(let* ((sap (truly-the system-area-pointer
(sb!kernel:code-instructions code)))
(defun context-pc (context)
(declare (type (alien (* os-context-t)) context))
- (int-sap (deref (context-pc-addr context))))
+ (let ((addr (context-pc-addr context)))
+ (declare (type (alien (* unsigned-int)) addr))
+ (int-sap (deref addr))))
(def-alien-routine ("os_context_register_addr" context-register-addr)
(* unsigned-int)
(context (* os-context-t))
(index int))
-;;; FIXME: Should this and CONTEXT-PC be INLINE to reduce consing?
-;;; (Are they used in anything time-critical, or just the debugger?)
(defun context-register (context index)
(declare (type (alien (* os-context-t)) context))
- (deref (context-register-addr context index)))
+ (let ((addr (context-register-addr context index)))
+ (declare (type (alien (* unsigned-int)) addr))
+ (deref addr)))
(defun %set-context-register (context index new)
-(declare (type (alien (* os-context-t)) context))
-(setf (deref (context-register-addr context index))
- new))
+ (declare (type (alien (* os-context-t)) context))
+ (let ((addr (context-register-addr context index)))
+ (declare (type (alien (* unsigned-int)) addr))
+ (setf (deref addr) new)))
-;;; Like CONTEXT-REGISTER, but returns the value of a float register.
-;;; FORMAT is the type of float to return.
+;;; This is like CONTEXT-REGISTER, but returns the value of a float
+;;; register. FORMAT is the type of float to return.
;;;
;;; As of sbcl-0.6.7, there is no working code which calls this code,
;;; so it's stubbed out. Someday, in order to make the debugger work
;; POSIXness and (at the Lisp level) opaque signal contexts,
;; this is stubified. It needs to be rewritten as an
;; alien function.
+ (declare (ignore context)) ; stub!
(warn "stub CONTEXT-FLOATING-POINT-MODES")
;; old code for Linux:
(/hexstr context)
(let ((pc (context-pc context)))
(declare (type system-area-pointer pc))
+ (/show0 "got PC")
;; using INT3 the pc is .. INT3 <here> code length bytes...
(let* ((length (sap-ref-8 pc 1))
(vector (make-array length :element-type '(unsigned-byte 8))))
(defvar *fp-constant-1s0*)
(defvar *fp-constant-0d0*)
(defvar *fp-constant-1d0*)
-;;; The long-float constants.
+;;; the long-float constants
(defvar *fp-constant-0l0*)
(defvar *fp-constant-1l0*)
(defvar *fp-constant-pi*)
(defvar *fp-constant-lg2*)
(defvar *fp-constant-ln2*)
-;;; Enable/disable scavenging of the read-only space.
-(defvar *scavenge-read-only-space* nil)
-;;; FIXME: should be *SCAVENGE-READ-ONLY-SPACE-P*
-
-;;; The current alien stack pointer; saved/restored for non-local exits.
+;;; the current alien stack pointer; saved/restored for non-local exits
(defvar *alien-stack*)
(defun sb!kernel::%instance-set-conditional (object slot test-value new-value)
;;; Support for the MT19937 random number generator. The update
;;; function is implemented as an assembly routine. This definition is
-;;; transformed to a call to the assembly routine allowing its use in byte
-;;; compiled code.
+;;; transformed to a call to the assembly routine allowing its use in
+;;; byte compiled code.
(defun random-mt19937 (state)
(declare (type (simple-array (unsigned-byte 32) (627)) state))
(random-mt19937 state))