diff --git a/bootfiles/18e/boot17.lisp b/bootfiles/18e/boot17.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..ceccb47c4a796db3ddef3e0ee99bdb816f4d7523
--- /dev/null
+++ b/bootfiles/18e/boot17.lisp
@@ -0,0 +1,3 @@
+;; Boot file for adding *runtime-features*
+(in-package :sys)
+(defvar *runtime-features* nil)
\ No newline at end of file
diff --git a/code/foreign-linkage.lisp b/code/foreign-linkage.lisp
index c763e1f3c6a1a87c0eb60d444a880755c0b0b227..3b655af22e28f114d57827bb1f5fcd44dd914943 100644
--- a/code/foreign-linkage.lisp
+++ b/code/foreign-linkage.lisp
@@ -1,5 +1,7 @@
 (in-package "LISP")
 
+(sys:register-lisp-runtime-feature :linkage-table)
+
 ;;; This gets created by genesis and lives in the static area.
 (defvar *linkage-table-data*)
 
diff --git a/code/gc.lisp b/code/gc.lisp
index a4e13c0fda15cd995338cd70ad3e5e2d8d7254f1..23c404d930209c237b0b1e501a99ffaed7a90635 100644
--- a/code/gc.lisp
+++ b/code/gc.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/gc.lisp,v 1.36 2003/08/05 11:00:49 emarsden Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/gc.lisp,v 1.37 2003/09/25 02:40:12 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -25,6 +25,9 @@
 (in-package "LISP")
 (export '(room))
 
+#+gencgc
+(sys:register-lisp-runtime-feature :gencgc)
+
 
 ;;;; DYNAMIC-USAGE and friends.
 
diff --git a/code/hash-new.lisp b/code/hash-new.lisp
index c0363581c3285b62cbdf67bd45e1a77a4686f26b..d5d42348ecb5153e0b80059e80953bce82298202 100644
--- a/code/hash-new.lisp
+++ b/code/hash-new.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/hash-new.lisp,v 1.26 2003/07/15 19:47:16 gerd Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/hash-new.lisp,v 1.27 2003/09/25 02:40:12 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -28,6 +28,8 @@
 
 (in-package :lisp)
 
+(register-lisp-runtime-feature :hash-new)
+
 
 ;;;; The hash-table structures.
 
diff --git a/code/lispinit.lisp b/code/lispinit.lisp
index 14cb558d99f6227634d8a1b23dff114810da12f0..e584f98e0283a42920a4f4e786c067aaba80d547 100644
--- a/code/lispinit.lisp
+++ b/code/lispinit.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/lispinit.lisp,v 1.71 2003/09/12 20:06:05 toy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/lispinit.lisp,v 1.72 2003/09/25 02:40:12 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -19,14 +19,25 @@
 (export '(most-positive-fixnum most-negative-fixnum sleep
 	  ++ +++ ** *** // ///))
 
+(defvar *features* '(:common :common-lisp :ansi-cl :ieee-floating-point :cmu)
+  "Holds a list of symbols that describe features provided by the
+   implementation.")
+
+
 (in-package :system)
-(export '(compiler-version scrub-control-stack))
+(export '(compiler-version scrub-control-stack *runtime-features*))
+
+(defvar *runtime-features* nil
+  "Features affecting the runtime")
 
 (in-package :extensions)
 (export '(quit *prompt*))
 
 (in-package :lisp)
 
+#+stack-checking
+(sys:register-lisp-runtime-feature :stack-checking)
+
 ;;; Make the error system enable interrupts.
 
 (defconstant most-positive-fixnum #.vm:target-most-positive-fixnum
diff --git a/code/misc.lisp b/code/misc.lisp
index ece7231aca9936ef2ae70bb6374476dfc91fa20f..e81bc42e8a8153ce8ce1028d4bebb229b36e59d7 100644
--- a/code/misc.lisp
+++ b/code/misc.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/misc.lisp,v 1.31 2003/04/11 15:28:11 emarsden Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/misc.lisp,v 1.32 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -112,10 +112,18 @@
   string)
 
 
+#+nil
 (defvar *features* '(:common :common-lisp :ansi-cl :ieee-floating-point :cmu)
   "Holds a list of symbols that describe features provided by the
    implementation.")
 
+;;; Register various Lisp features
+#+i486
+(sys:register-lisp-runtime-feature :i486)
+
+#+pentium
+(sys:register-lisp-runtime-feature :pentium)
+
 (defun featurep (x)
   "If X is an atom, see if it is present in *FEATURES*.  Also
   handle arbitrary combinations of atoms using NOT, AND, OR."
diff --git a/code/multi-proc.lisp b/code/multi-proc.lisp
index 4b8c6a072a1ca61fca19eb8a54a7ae856ddcc247..a569fb256d7c56c155666e1b9a74d18498359aa0 100644
--- a/code/multi-proc.lisp
+++ b/code/multi-proc.lisp
@@ -5,7 +5,7 @@
 ;;; the Public domain, and is provided 'as is'.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/multi-proc.lisp,v 1.41 2002/12/12 19:09:45 moore Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/multi-proc.lisp,v 1.42 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -14,6 +14,8 @@
 
 (in-package "MULTIPROCESSING")
 
+(sys:register-lisp-runtime-feature :mp)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Handle the binding stack.
 
diff --git a/code/package.lisp b/code/package.lisp
index 92e77b86f8ea4dee294be091e212b9f3f7c93ed0..3f52aa668421ec55b89b6e3c523724ca4b04abd4 100644
--- a/code/package.lisp
+++ b/code/package.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/package.lisp,v 1.71 2003/08/08 11:32:52 emarsden Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/package.lisp,v 1.72 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -36,6 +36,9 @@
 
 (in-package "LISP")
 
+#+relative-package-names
+(sys:register-lisp-feature :relative-package-names)
+
 (defvar *default-package-use-list* '("COMMON-LISP")
   "The list of packages to use by default of no :USE argument is supplied
    to MAKE-PACKAGE or other package creation forms.")
diff --git a/code/rand-mt19937.lisp b/code/rand-mt19937.lisp
index 460914509a1988be9e7a434aea6e97dafd326b21..9ecc04a2b276cfe7285b92f639c0a514eef6023a 100644
--- a/code/rand-mt19937.lisp
+++ b/code/rand-mt19937.lisp
@@ -6,7 +6,7 @@
 ;;; placed in the Public domain, and is provided 'as is'.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/rand-mt19937.lisp,v 1.11 2003/03/06 09:31:06 emarsden Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/rand-mt19937.lisp,v 1.12 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -26,6 +26,8 @@
 (in-package "KERNEL")
 (export '(%random-single-float %random-double-float random-chunk init-random-state))
 
+(sys:register-lisp-feature :random-mt19937)
+
 
 ;;;; Random state hackery:
 
diff --git a/code/sysmacs.lisp b/code/sysmacs.lisp
index 75fcb21ff7b2265a3923d8b386cb141bfbee5be9..b69b52fff4e742773f654415789669602014883b 100644
--- a/code/sysmacs.lisp
+++ b/code/sysmacs.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/sysmacs.lisp,v 1.27 2003/07/20 11:11:46 gerd Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/sysmacs.lisp,v 1.28 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -14,11 +14,24 @@
 (in-package "LISP")
 
 (in-package "SYSTEM")
-(export '(without-gcing without-hemlock))
+(export '(without-gcing without-hemlock
+	  register-lisp-feature register-lisp-runtime-feature))
+
+(defmacro register-lisp-feature (feature)
+  "Register the feature as having influenced the CMUCL build process."
+  `(pushnew ',feature *features*))
+
+(defmacro register-lisp-runtime-feature (feature)
+  "Register the feature as having influenced the CMUCL build process,
+and also the CMUCL C runtime."
+   `(progn
+     (pushnew ',feature *features*)
+     (pushnew ',feature sys::*runtime-features*)))
 
 (in-package "LISP")
 
 
+
 ;;; WITH-ARRAY-DATA  --  Interface
 ;;;
 ;;;    Checks to see if the array is simple and the start and end are in
diff --git a/compiler/generic/new-genesis.lisp b/compiler/generic/new-genesis.lisp
index b45de98399df2a4ebedeb87598f79b7ade66115f..5e869947528e7b2aaf92f1a51dde7998fc8e357c 100644
--- a/compiler/generic/new-genesis.lisp
+++ b/compiler/generic/new-genesis.lisp
@@ -4,7 +4,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/new-genesis.lisp,v 1.58 2003/08/20 16:53:59 gerd Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/new-genesis.lisp,v 1.59 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -2306,8 +2306,8 @@
 		   (if symbol (vm:static-symbol-offset symbol) 0)))))
   ;;
   ;; Write out features.
-  (format t "~%/* Features when built. */~2%")
-  (dolist (feature (c:backend-features c:*backend*))
+  (format t "~%/* Runtime features when built. */~2%")
+  (dolist (feature sys:*runtime-features*)
     (format t "#define FEATURE_~a 1~%"
 	    (nsubstitute #\_ #\-
 			 (remove-if #'(lambda (char)
diff --git a/compiler/srctran.lisp b/compiler/srctran.lisp
index e393fe4edca7575ede4c29cbbd58ec70f985e48b..7a4b81130db8014576b1e94dd8752ff581638077 100644
--- a/compiler/srctran.lisp
+++ b/compiler/srctran.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/srctran.lisp,v 1.135 2003/09/24 22:38:10 toy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/srctran.lisp,v 1.136 2003/09/25 02:40:13 toy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -20,6 +20,9 @@
 ;;;
 (in-package "C")
 
+#+conservative-float-type
+(sys:register-lisp-feature :conservative-float-type)
+
 ;;; Source transform for Not, Null  --  Internal
 ;;;
 ;;;    Convert into an IF so that IF optimizations will eliminate redundant