From 4ac29cb60d52a15a16db9e733c687f56b74fa787 Mon Sep 17 00:00:00 2001
From: Raymond Toy <toy.raymond@gmail.com>
Date: Sat, 22 Oct 2011 08:37:26 -0700
Subject: [PATCH] Bump version to 20c, add bootstrap file.

A normal build can be done using boot-20c.lisp.
---
 bootfiles/20b/boot-20c.lisp | 68 +++++++++++++++++++++++++++++++++++++
 compiler/byte-comp.lisp     | 14 ++++++--
 2 files changed, 79 insertions(+), 3 deletions(-)
 create mode 100644 bootfiles/20b/boot-20c.lisp

diff --git a/bootfiles/20b/boot-20c.lisp b/bootfiles/20b/boot-20c.lisp
new file mode 100644
index 000000000..cc5447221
--- /dev/null
+++ b/bootfiles/20b/boot-20c.lisp
@@ -0,0 +1,68 @@
+;;;;
+;;;; Boot file for changing the fasl file version numbers to 20c.
+;;;;
+
+(in-package :c)
+
+(setf lisp::*enable-package-locked-errors* nil)
+
+;;;
+;;; Note that BYTE-FASL-FILE-VERSION is a constant.
+;;;
+;;; (Be sure to change BYTE-FASL-FILE-VERSION in
+;;; compiler/byte-comp.lisp to the correct value too!)
+;;;
+#-cmu20c
+(setf (symbol-value 'byte-fasl-file-version)       #x20c)
+#-cmu20c
+(setf (backend-fasl-file-version *target-backend*) #x20c)
+
+;;;
+;;; Don't check fasl versions in the compiling Lisp because we'll
+;;; load files compiled with the new version numbers.
+;;;
+#-cmu20c
+(setq lisp::*skip-fasl-file-version-check* t)
+
+;;;
+;;; This is here because BYTE-FASL-FILE-VERSION is constant-folded in
+;;; OPEN-FASL-FILE.  To make the new version number take effect, we
+;;; have to redefine the function.
+;;;
+#-cmu20c
+(defun open-fasl-file (name where &optional byte-p)
+  (declare (type pathname name))
+  (let* ((stream (open name :direction :output
+			    :if-exists :new-version
+			    :element-type '(unsigned-byte 8)
+			    :class 'binary-text-stream))
+	 (res (make-fasl-file :stream stream)))
+    (multiple-value-bind
+	(version f-vers f-imp)
+	(if byte-p
+	    (values "Byte code"
+		    byte-fasl-file-version
+		    (backend-byte-fasl-file-implementation *backend*))
+	    (values (backend-version *backend*)
+		    (backend-fasl-file-version *backend*)
+		    (backend-fasl-file-implementation *backend*)))
+      (format stream
+	      "FASL FILE output from ~A.~@
+	       Compiled ~A on ~A~@
+	       Compiler ~A, Lisp ~A~@
+	       Targeted for ~A, FASL version ~X~%"
+	      where
+	      (ext:format-universal-time nil (get-universal-time))
+	      (machine-instance) compiler-version
+	      (lisp-implementation-version)
+	      version f-vers)
+      ;;
+      ;; Terminate header.
+      (dump-byte 255 res)
+      ;;
+      ;; Specify code format.
+      (dump-fop 'lisp::fop-long-code-format res)
+      (dump-byte f-imp res)
+      (dump-unsigned-32 f-vers res))
+    res))
+
diff --git a/compiler/byte-comp.lisp b/compiler/byte-comp.lisp
index 3f04bdd24..ad1616208 100644
--- a/compiler/byte-comp.lisp
+++ b/compiler/byte-comp.lisp
@@ -34,12 +34,20 @@
 
 ;;;; Fasl file format:
 
-(defconstant byte-fasl-file-version #x20b)
+;; The fasl file version should be a series of hex digits in the range
+;; 0-9 followed by a single hex digit in the range a-f.  Then the
+;; version looks like a decimal number followed by a minor release
+;; letter of a to f.
+(defconstant byte-fasl-file-version #x20c)
 
 (let* ((version-string (format nil "~X" byte-fasl-file-version)))
-  (sys:register-lisp-feature (intern (concatenate 'string "CMU" version-string) :keyword))
+  ;; Add :cmu<n> to *features*
+  (sys:register-lisp-feature (intern (concatenate 'string "CMU" version-string)
+				     :keyword))
+  ;; Same as above, except drop the trailing a-f character.
   (sys:register-lisp-feature (intern (concatenate 'string "CMU"
-						  (subseq version-string 0 (1- (length version-string))))
+						  (subseq version-string 0
+							  (1- (length version-string))))
 				     :keyword)))
 
 (defun backend-byte-fasl-file-type (backend)
-- 
GitLab