X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-load.lisp;h=05d1e95ef285985070bcdd42294fd72993794bcd;hb=15d6e7c9a2c3234f95dfe278046fa2fee1b0c007;hp=d5720530f7d97cab94f2d5e382ed26a8230596b9;hpb=27295fde2701d198fa80b9f5ac94e3cc5888512c;p=sbcl.git diff --git a/src/code/target-load.lisp b/src/code/target-load.lisp index d572053..05d1e95 100644 --- a/src/code/target-load.lisp +++ b/src/code/target-load.lisp @@ -42,6 +42,16 @@ ;;;; LOAD itself +(define-condition fasl-header-missing (invalid-fasl) + ((fhsss :reader invalid-fasl-fhsss :initarg :fhsss)) + (:report + (lambda (condition stream) + (format stream "~@" + (invalid-fasl-stream condition) + (invalid-fasl-expected condition) + (invalid-fasl-fhsss condition))))) + ;;; a helper function for LOAD: Load the stuff in a file when we have ;;; the name. (defun internal-load (pathname truename if-does-not-exist verbose print @@ -82,8 +92,10 @@ :binary)) (t (when (string= (pathname-type truename) *fasl-file-type*) - (error "File has a fasl file type, but no fasl file header:~% ~S" - (namestring truename))) + (error 'fasl-header-missing + :stream (namestring truename) + :fhsss first-line + :expected fhsss)) (internal-load pathname truename if-does-not-exist verbose print :source)))))))) @@ -153,9 +165,7 @@ #!+sb-doc "Load the file given by FILESPEC into the Lisp environment, returning T on success." - (unless (eq external-format :default) - (error "Non-:DEFAULT EXTERNAL-FORMAT values are not supported.")) - + (declare (ignore external-format)) (let ((*load-depth* (1+ *load-depth*)) ;; KLUDGE: I can't find in the ANSI spec where it says that ;; DECLAIM/PROCLAIM of optimization policy should have file @@ -251,7 +261,7 @@ tto) (format t " loading to the dynamic space~%")) - (let ((code (%primitive sb!c:allocate-dynamic-code-object + (let ((code (%primitive sb!c:allocate-code-object box-num code-length)) (index (+ sb!vm:code-trace-table-offset-slot box-num))) @@ -273,26 +283,10 @@ ;;;; linkage fixups -;;; how we learn about assembler routines and foreign symbols at startup +;;; how we learn about assembler routines at startup (defvar *!initial-assembler-routines*) -(defvar *!initial-foreign-symbols*) + (defun !loader-cold-init () + (/show0 "/!loader-cold-init") (dolist (routine *!initial-assembler-routines*) - (setf (gethash (car routine) *assembler-routines*) (cdr routine))) - (dolist (symbol *!initial-foreign-symbols*) - (setf (gethash (car symbol) *static-foreign-symbols*) (cdr symbol)))) - -(declaim (ftype (function (string) sb!vm:word) - foreign-symbol-address-as-integer)) - - -;;; SB!SYS:GET-DYNAMIC-FOREIGN-SYMBOL-ADDRESS is in foreign.lisp, on -;;; platforms that have dynamic loading -(defun foreign-symbol-address-as-integer (foreign-symbol) - (or (find-foreign-symbol-in-table foreign-symbol *static-foreign-symbols*) - (sb!sys:get-dynamic-foreign-symbol-address foreign-symbol) - (error "unknown foreign symbol: ~S" foreign-symbol))) - -(defun foreign-symbol-address (symbol) - (int-sap (foreign-symbol-address-as-integer - (sb!vm:extern-alien-name symbol)))) + (setf (gethash (car routine) *assembler-routines*) (cdr routine))))