diff --git a/compiler/generic/new-genesis.lisp b/compiler/generic/new-genesis.lisp
index f20a3a808ac8377d13157f0f626c61f506bb4cdb..311dabbd2258125e7504839be2c253beb6c4f5cd 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.46 2002/04/07 00:14:13 pmai Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/new-genesis.lisp,v 1.47 2002/08/23 17:01:00 pmai Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -2143,6 +2143,7 @@
 (defun emit-c-header-aux ()
   (format t "/*~% * Machine generated header file.  Do not edit.~% */~2%")
   (format t "#ifndef _INTERNALS_H_~%#define _INTERNALS_H_~2%")
+  ;; Write out various constants
   (let ((constants nil))
     (do-external-symbols (symbol (find-package "VM"))
       (when (constantp symbol)
@@ -2187,14 +2188,25 @@
 	  (terpri)
 	  (setf prev-priority (second const)))
 	(format t "#define ~A ~D~@[  /* ~A */~]~%"
-		(first const) (third const) (fourth const))))
-    (terpri)
-    (format t "#define ERRORS { \\~%")
-    (loop
-      for info across (c:backend-internal-errors c:*backend*)
-      do (format t "    ~S, \\~%" (cdr info)))
-    (format t "    NULL \\~%}~%")
-    (terpri))
+		(first const) (third const) (fourth const)))))
+
+  ;; Write out internal error codes and error descriptions
+  (terpri)
+  (loop for (error-name . rest) across (c:backend-internal-errors c:*backend*)
+        for error-code from 0
+	when error-name
+        do
+        (format t "#define ~A ~D~%"
+	        (substitute #\_ #\- (symbol-name error-name))
+		error-code))
+  (terpri)
+  (format t "#define ERRORS { \\~%")
+  (loop for info across (c:backend-internal-errors c:*backend*)
+        do (format t "    ~S, \\~%" (cdr info)))
+  (format t "    NULL \\~%}~%")
+
+  ;; Write out primitive object layouts
+  (terpri)
   (let ((structs (sort (copy-list vm:*primitive-objects*) #'string<
 		       :key #'(lambda (obj)
 				(symbol-name
@@ -2228,6 +2240,8 @@
 		    (- (* (vm:slot-offset slot) vm:word-bytes) lowtag)))
 	  (terpri))))
     (format t "#endif /* LANGUAGE_ASSEMBLY */~2%"))
+
+  ;; Write out static symbols
   (dolist (symbol (cons nil vm:static-symbols))
     (format t "#define ~A LISPOBJ(0x~X)~%"
 	    (nsubstitute #\_ #\-
diff --git a/lisp/alpha-assem.S b/lisp/alpha-assem.S
index dcd559665c65f99ca6b8a74f60a0835718887083..8427bf96a314165bfb28ef5f1cd2c55d9c2a98dc 100644
--- a/lisp/alpha-assem.S
+++ b/lisp/alpha-assem.S
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/alpha-assem.S,v 1.8 1999/02/20 15:54:43 pw Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/alpha-assem.S,v 1.9 2002/08/23 17:01:00 pmai Exp $ */
 #ifndef	__linux__
 #include <machine/regdef.h>
 #include <machine/pal.h>
@@ -232,10 +232,13 @@ start_of_tramps:
 undefined_tramp = /* ### undefined_tramp_offset-call_into_lisp_LRA*/ 0x140+call_into_lisp_LRA_page
 undefined_tramp_offset:
         call_pal PAL_gentrap
-	.long    10
+	.long    trap_Error
+	/* Number of argument bytes */
         .byte    4
-        .byte    23
+        .byte    UNDEFINED_SYMBOL_ERROR
+	/* Escape to create 16bit BE number from following two values */
         .byte    254
+	/* SC_OFFSET(sc_DescriptorReg,reg_FDEFN) */
         .byte    (0xe0 + sc_DescriptorReg)
         .byte    2
         .align 2
diff --git a/lisp/hppa-assem.S b/lisp/hppa-assem.S
index 8ea05b7e10903709c0be22b4f4d809a7190be765..bc753725c8dcbb7a87a13cbdf4dd45baedf3d5ad 100644
--- a/lisp/hppa-assem.S
+++ b/lisp/hppa-assem.S
@@ -303,9 +303,13 @@ closure_tramp
 	.EXPORT undefined_tramp
 undefined_tramp
 	break	trap_Error,0
+        /* Number of argument bytes */
         .byte	4
-        .byte	23
+        .byte	UNDEFINED_SYMBOL_ERROR
+        /* Escape to create 16bit BE number from following two values */
         .byte	254
+        /* SC_OFFSET(sc_DescriptorReg,reg_LEXENV) */
+	/* Shouldn't this be reg_FDEFN, instead? */
         .byte	(0x40 + sc_DescriptorReg)
         .byte	1
 	.align	4
diff --git a/lisp/hppa-assem.s b/lisp/hppa-assem.s
index 74b8c50b50dbeadd0e8b5f063e40a5dbccab07ee..f021720de01ae278188937be3929409e92ab17cb 100644
--- a/lisp/hppa-assem.s
+++ b/lisp/hppa-assem.s
@@ -258,11 +258,15 @@ closure_tramp
 	.EXPORT undefined_tramp
 undefined_tramp
 	break	trap_Error,0
-        .byte    4
-        .byte    23
-        .byte    254
-        .byte    (0x40 + sc_DescriptorReg)
-        .byte    1
+        /* Number of argument bytes */
+        .byte	4
+        .byte	UNDEFINED_SYMBOL_ERROR
+        /* Escape to create 16bit BE number from following two values */
+        .byte	254
+        /* SC_OFFSET(sc_DescriptorReg,reg_LEXENV) */
+	/* Shouldn't this be reg_FDEFN, instead? */
+        .byte	(0x40 + sc_DescriptorReg)
+        .byte	1
 	.align	4
 
 
diff --git a/lisp/lispregs.h b/lisp/lispregs.h
index 5a912967918e0e1f972ac3442ad134dc77f5a68a..a9a69733956a500f86d0193fd5d1bd6c99c67f85 100644
--- a/lisp/lispregs.h
+++ b/lisp/lispregs.h
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lispregs.h,v 1.3 1994/07/05 16:10:38 hallgren Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lispregs.h,v 1.4 2002/08/23 17:01:01 pmai Exp $ */
 
 #if defined(mips) || defined(irix)
 #include "mips-lispregs.h"
@@ -24,6 +24,9 @@
 #include "alpha-lispregs.h"
 #endif
 
+/* This matches the  definition of sc-offset in code/debug-info.lisp */
+#define SC_OFFSET(sc,offset) (((offset) << 5) | (sc))
+
 #ifndef LANGUAGE_ASSEMBLY
 extern char *lisp_register_names[];
 #endif
diff --git a/lisp/mips-assem.S b/lisp/mips-assem.S
index a91139e5e3ba26e02c2defa2e521c9226cf1c5f6..7b18409e9d658328d2dd191642b9e243cca8cced 100644
--- a/lisp/mips-assem.S
+++ b/lisp/mips-assem.S
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/mips-assem.S,v 1.8 1998/03/10 20:39:50 dtc Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/mips-assem.S,v 1.9 2002/08/23 17:01:02 pmai Rel $ */
 #ifdef mach
 #include <machine/regdef.h>
 #else
@@ -273,16 +273,19 @@ start_of_tramps:
         .globl  undefined_tramp
         .ent    undefined_tramp
 undefined_tramp:
-        break   10
+        break   trap_Error
 #ifdef irix
         break 11
         break 11
 #else
-        .byte    4
-        .byte    23
-        .byte    254
-        .byte    (0xc0 + sc_DescriptorReg)
-        .byte    1
+        /* Number of argument bytes */
+        .byte   4
+        .byte   UNDEFINED_SYMBOL_ERROR
+        /* Escape to create 16bit BE number from following two values */
+        .byte   254
+        /* SC_OFFSET(sc_DescriptorReg,reg_FDEFN) */
+        .byte   (0xc0 + sc_DescriptorReg)
+        .byte   1
         .align 2
 #endif
         .end    undefined_tramp
diff --git a/lisp/sparc-assem.S b/lisp/sparc-assem.S
index 6fed8b0723f596b769f78d60e7afc1cf04c5e703..9636ed8fd8bcf241be67ec6e98b400a1da386445 100644
--- a/lisp/sparc-assem.S
+++ b/lisp/sparc-assem.S
@@ -244,13 +244,14 @@ _undefined_tramp:
 
 	b	1f
         unimp   trap_Cerror
-	.byte	4
-#ifdef type_LongFloat
-        .byte   24
-#else
-	.byte	23
-#endif
-	.byte	254, sc_DescriptorReg, 3
+        /* Number of argument bytes */
+        .byte	4
+        .byte	UNDEFINED_SYMBOL_ERROR
+        /* Escape to create 16bit BE number from following two values */
+        .byte	254
+        /* SC_OFFSET(sc_DescriptorReg,reg_FDEFN) */
+	.byte	sc_DescriptorReg
+	.byte	3
 	.align	4
 1:
 	ld	[reg_FDEFN+FDEFN_RAW_ADDR_OFFSET], reg_CODE
diff --git a/lisp/x86-assem.S b/lisp/x86-assem.S
index 8833b4ece5cf24e28c7073c6ec83c1fbe30f0068..5df5517fc744d9a10ed05c68b505f10809c20aef 100644
--- a/lisp/x86-assem.S
+++ b/lisp/x86-assem.S
@@ -1,6 +1,6 @@
 ### x86-assem.S -*- Mode: Asm; -*-
 /**
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-assem.S,v 1.20 2002/01/28 20:17:12 pmai Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-assem.S,v 1.21 2002/08/23 17:01:02 pmai Exp $
  *
  * Authors:	Paul F. Werkowski <pw@snoopy.mv.com>
  *		Douglas T. Crosher
@@ -16,6 +16,7 @@
 	
 #define LANGUAGE_ASSEMBLY
 #include "internals.h"
+#include "lispregs.h"
 
 #if defined __FreeBSD__
 #include <osreldate.h>
@@ -268,13 +269,11 @@ GNAME(fpu_restore):
 GNAME(undefined_tramp):
 	int3
 	.byte	trap_Error
+        /* Number of argument bytes */
         .byte   2
-#ifdef type_LongFloat
-        .byte   24
-#else
-        .byte   23
-#endif
-        .byte   sc_DescriptorReg # EAX in the Descriptor-reg SC.
+	.byte	UNDEFINED_SYMBOL_ERROR
+        /* SC_OFFSET(sc_DescriptorReg,reg_EAX) */
+        .byte   SC_OFFSET(sc_DescriptorReg,0)
 	ret
 	.size	GNAME(undefined_tramp), .-GNAME(undefined_tramp)