0.pre7.92:
[sbcl.git] / src / code / load.lisp
index de45d75..caa2706 100644 (file)
@@ -57,7 +57,7 @@
       ((>= cnt n) res)))
 
 ;;; Like Fast-Read-U-Integer, but the size may be determined at run time.
-(defmacro fast-read-variable-u-integer (n)
+(defmacro fast-read-var-u-integer (n)
   (let ((n-pos (gensym))
        (n-res (gensym))
        (n-cnt (gensym)))
        (flet ((check-version (variant possible-implementation needed-version)
                 (when (string= possible-implementation implementation)
                   (unless (= version needed-version)
-                    (error "~@<~S is in ~A fasl file format version ~D, ~
+                    (error "~@<~S is in ~A fasl file format version ~W, ~
                              but this version of SBCL uses ~
-                             format version ~D.~:@>"
+                             format version ~W.~:@>"
                            stream
                            variant
                            version
          (or (check-version "native code"
                             +backend-fasl-file-implementation+
                             +fasl-file-version+)
-             (check-version "byte code"
-                            (backend-byte-fasl-file-implementation)
-                            +fasl-file-version+)
              (error "~S was compiled for implementation ~A, but this is a ~A."
                     stream
                     implementation
   ;; don't. (CMU CL did, but implemented it in a non-ANSI way, and I
   ;; just disabled that instead of rewriting it.) -- WHN 20000131
   (declare (ignore print))
-
-  ;; FIXME: In sbcl-0.6.12.8 the OpenBSD implementation of FILE-LENGTH
-  ;; broke because changed handling of Unix stat(2) stuff couldn't
-  ;; deal with OpenBSD's 64-bit size slot. Once that's fixed, this
-  ;; code can be restored.
-  #!-openbsd
   (when (zerop (file-length stream))
     (error "attempt to load an empty FASL file:~%  ~S" (namestring stream)))
-
   (do-load-verbose stream verbose)
   (let* ((*fasl-input-stream* stream)
         (*current-fop-table* (or (pop *free-fop-tables*) (make-array 1000)))
       (fill *fop-stack* nil :end *fop-stack-pointer-on-entry*)
       (fill *current-fop-table* nil)))
   t)
+
+;;; This is used in in target-load and also genesis, using
+;;; *COLD-FOREIGN-SYMBOL-TABLE*. All the speculative prefix-adding
+;;; code for foreign symbol lookup should be here.
+(defun find-foreign-symbol-in-table (name table)
+  (let ((prefixes
+         #!+(or linux freebsd) #("" "ldso_stub__")
+        #!+openbsd #("" "_")))    
+    (some (lambda (prefix)
+           (gethash (concatenate 'string prefix name)
+                    table
+                    nil))
+         prefixes)))
+
 \f
 ;;;; stuff for debugging/tuning by collecting statistics on FOPs (?)