Index: /branches/ia32/compiler/X86/X8632/x8632-arch.lisp
===================================================================
--- /branches/ia32/compiler/X86/X8632/x8632-arch.lisp	(revision 7961)
+++ /branches/ia32/compiler/X86/X8632/x8632-arch.lisp	(revision 7962)
@@ -170,4 +170,6 @@
 (defx86reg xfn temp1)
 
+(defx86reg next-method-context temp0)
+
 ;;; This follows the ppc32 scheme pretty closely.
 
@@ -489,4 +491,19 @@
 (define-fixedsized-object value-cell
   value)
+
+(define-storage-layout lisp-frame 0
+  backptr
+  return-address
+  xtra)
+
+(define-storage-layout xcf 0            ;"exception callback frame"
+  backptr
+  return-address                        ; always 0
+  nominal-function
+  relative-pc
+  containing-object
+  xp
+  ra0
+  )
 
 ;;; The kernel uses these (rather generically named) structures
@@ -534,4 +551,9 @@
   node-regs-mask			; bit set means corresponding reg contains node
   linear
+  ;; save0 *must* be aligned on a 16-byte boundary!
+  save0					;spill area for node registers
+  save1					; (caller saved)
+  save2					; probably saved/restored in
+  save3					; callout/trap handlers
   save-ebp                              ; lisp frame ptr for foreign code
   lisp-mxcsr
@@ -1148,3 +1170,19 @@
       ,@body)))
 
+;;; When found at a tagged return address, the instruction
+;;; (movl ($ imm32) (% fn))
+;;; lets the runtime easily map a return address to the containing
+;;; function.
+;;;
+;;; The notation ($ :self) is used in the assembler to mean "a 32-bit
+;;; immediate whose offset will be remembered in a table at the end of
+;;; the function object."
+;;;
+;;; Before the function is made executable (or when the GC moves the
+;;; function), these :self immediates are filled in with the actual
+;;; address of the function.
+
+(defconstant recover-fn-opcode-byte #b10111111) ;when %fn is %edi
+(defconstant recover-fn-address-offset 1)
+
 (provide "X8632-ARCH")
