0.9.0.25:
[sbcl.git] / src / code / ppc-vm.lisp
index a9297a6..79ddf31 100644 (file)
@@ -2,9 +2,6 @@
 ;;;
 (in-package "SB!VM")
 
-(defvar *number-of-signals* 64)
-(defvar *bits-per-word* 32)
-
 (define-alien-type os-context-t (struct os-context-t-struct))
 
 \f
   (declare (type (alien (* os-context-t)) context))
   (deref (context-register-addr context index)))
 
+(define-alien-routine ("os_context_lr_addr" context-lr-addr) (* unsigned-long)
+  (context (* os-context-t)))
+
+(defun context-lr (context)
+  (declare (type (alien (* os-context-t)) context))
+  (int-sap (deref (context-lr-addr context))))
+
 (defun %set-context-register (context index new)
 (declare (type (alien (* os-context-t)) context))
 (setf (deref (context-register-addr context index))
 
 ;;; Given a signal context, return the floating point modes word in
 ;;; the same format as returned by FLOATING-POINT-MODES.
+;;;
+;;; FIXME: surely this must be accessible somewhere under Darwin?
+#!-darwin
 (define-alien-routine ("os_context_fp_control" context-floating-point-modes)
     (sb!alien:unsigned 32)
   (context (* os-context-t)))
     (declare (type system-area-pointer pc)
             (type (unsigned-byte 8) length)
             (type (simple-array (unsigned-byte 8) (*)) vector))
-    (copy-from-system-area pc (* sb!vm:n-byte-bits 5)
-                          vector (* sb!vm:n-word-bits
-                                    sb!vm:vector-data-offset)
-                          (* length sb!vm:n-byte-bits))
+    (copy-ub8-from-system-area pc 5 vector 0 length)
     (let* ((index 0)
           (error-number (sb!c:read-var-integer vector index)))
       (collect ((sc-offsets))