diff --git a/lisp/arch.h b/lisp/arch.h
index e613ec68dfa63152b63ef3f05762a06cbb23c459..975e4ace48529516e111049293e43c2351e77ccc 100644
--- a/lisp/arch.h
+++ b/lisp/arch.h
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/arch.h,v 1.4 1994/10/27 17:13:54 ram Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/arch.h,v 1.5 2000/10/27 19:25:54 dtc Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -30,4 +30,7 @@ extern lispobj funcall2(lispobj function, lispobj arg0, lispobj arg1);
 extern lispobj funcall3(lispobj function, lispobj arg0, lispobj arg1,
 			lispobj arg2);
 
+extern void fpu_save(void *);
+extern void fpu_restore(void *);
+
 #endif /* __ARCH_H__ */
diff --git a/lisp/backtrace.c b/lisp/backtrace.c
index 5eaf11c5ce2f4f274408780158ea4d8a019a912d..eaa791b77b18cbd734e77964c08c9da1c34a7bf6 100644
--- a/lisp/backtrace.c
+++ b/lisp/backtrace.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/backtrace.c,v 1.4 1994/10/25 17:31:52 ram Exp $
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/backtrace.c,v 1.5 2000/10/27 19:25:54 dtc Exp $
  *
  * Simple backtrace facility.  More or less from Rob's lisp version.
  */
@@ -245,9 +245,7 @@ backtrace(int nframes)
 
 #else
 
-void
-backtrace(nframes)
-int nframes;
+void backtrace(int nframes)
 {
     printf("Can't backtrace on this hardware platform.\n");
 }
diff --git a/lisp/breakpoint.c b/lisp/breakpoint.c
index 48d6ed7bbb277c6c35cf7bfffe9a22dde59be520..49c5eb101e1ec384e122c188f29f136bfdc47015 100644
--- a/lisp/breakpoint.c
+++ b/lisp/breakpoint.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/breakpoint.c,v 1.11 2000/09/05 08:51:51 dtc Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/breakpoint.c,v 1.12 2000/10/27 19:25:54 dtc Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -19,6 +19,9 @@
 #include "globals.h"
 #include "alloc.h"
 #include "breakpoint.h"
+#if defined GENCGC
+#include "gencgc.h"
+#endif
 
 #define REAL_LRA_SLOT 0
 #ifndef i386
@@ -82,12 +85,12 @@ static lispobj find_code(struct sigcontext *scp)
 #ifdef i386
 static lispobj find_code(struct sigcontext *scp)
 {
-  lispobj codeptr = component_ptr_from_pc(SC_PC(scp));
+  lispobj *codeptr = component_ptr_from_pc(SC_PC(scp));
 
   if (codeptr == NULL)
     return NIL;
   else
-    return codeptr + type_OtherPointer;
+    return (lispobj) codeptr | type_OtherPointer;
 }
 #endif
 
diff --git a/lisp/gencgc.c b/lisp/gencgc.c
index 18b2d37c96c538991b4198d2d82a608cd2076ecc..09bcc72cffa85fc521db93e99579722584f33b81 100644
--- a/lisp/gencgc.c
+++ b/lisp/gencgc.c
@@ -7,20 +7,21 @@
  *
  * Douglas Crosher, 1996, 1997, 1998, 1999.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.23 2000/10/24 13:32:31 dtc Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.24 2000/10/27 19:25:55 dtc Exp $
  *
  */
 
 #include <stdio.h>
 #include <signal.h>
 #include "lisp.h"
+#include "arch.h"
 #include "internals.h"
 #include "os.h"
 #include "globals.h"
 #include "interrupt.h"
 #include "validate.h"
 #include "lispregs.h"
-
+#include "interr.h"
 #include "gencgc.h"
 
 #define gc_abort() lose("GC invariant lost!  File \"%s\", line %d\n", \
@@ -4194,7 +4195,7 @@ static lispobj* search_static_space(lispobj *pointer)
  * Faster version for searching the dynamic space. This will work even
  * if the object is in a current allocation region.
  */
-lispobj* search_dynamic_space(lispobj *pointer)
+lispobj *search_dynamic_space(lispobj *pointer)
 {
   int  page_index = find_page_index(pointer);
   lispobj *start;
@@ -5810,7 +5811,7 @@ static void	garbage_collect_generation(int generation, int raise)
 	   (lispobj *) SymbolValue(BINDING_STACK_POINTER) - binding_stack);
 
   /*
-   * Scavenge the scavenge_hooks in case this refers to a hooks added
+   * Scavenge the scavenge_hooks in case this refers to a hook added
    * in a prior generation GC. From here on the scavenger_hook will
    * only be updated with hooks already scavenged so this only needs
    * doing here.
@@ -5979,7 +5980,7 @@ void	collect_garbage(unsigned last_gen)
   if (gencgc_verbose > 1)
     print_generation_stats(0);
 
-  scavenger_hooks = (struct scavenger_hook *) NIL;
+  scavenger_hooks = NIL;
 
   do {
     /* Collect the generation */
diff --git a/lisp/gencgc.h b/lisp/gencgc.h
index de8db5dce765d2d655caaa918a61cec3019aa8e8..0e8e32796fc84f717800f303a69c0c4635574c64 100644
--- a/lisp/gencgc.h
+++ b/lisp/gencgc.h
@@ -7,7 +7,7 @@
  *
  * Douglas Crosher, 1996, 1997.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.h,v 1.5 2000/10/24 13:32:32 dtc Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.h,v 1.6 2000/10/27 19:25:55 dtc Exp $
  *
  */
 
@@ -152,8 +152,11 @@ extern struct alloc_region  unboxed_region;
 void  gencgc_pickup_dynamic(void);
 
 void sniff_code_object(struct code *code, unsigned displacement);
-
+lispobj *search_dynamic_space(lispobj *pointer);
 void update_x86_dynamic_space_free_pointer(void);
+
+lispobj * component_ptr_from_pc(lispobj *pc);
+
 void gc_alloc_update_page_tables(int unboxed,
 				 struct alloc_region *alloc_region);
 #endif _GENCGC_H_
diff --git a/lisp/lisp.c b/lisp/lisp.c
index f581f2656c17537495346216723bfe47528f4653..6efb0d40b069ee3178d1599d8497daeaa528b3e5 100644
--- a/lisp/lisp.c
+++ b/lisp/lisp.c
@@ -1,7 +1,7 @@
 /*
  * main() entry point for a stand alone lisp image.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lisp.c,v 1.21 2000/10/24 17:45:57 dtc Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lisp.c,v 1.22 2000/10/27 19:25:55 dtc Exp $
  *
  */
 
@@ -25,6 +25,7 @@
 #include "gc.h"
 #include "monitor.h"
 #include "validate.h"
+#include "interr.h"
 #if defined GENCGC
 #include "gencgc.h"
 #endif
diff --git a/lisp/monitor.c b/lisp/monitor.c
index 479d1a47eab42d948b93ba4fbb194295350580eb..d41182caf71b95c6a497b6659afaf3d082b7a0e3 100644
--- a/lisp/monitor.c
+++ b/lisp/monitor.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/monitor.c,v 1.11 1999/02/22 11:41:10 dtc Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/monitor.c,v 1.12 2000/10/27 19:25:55 dtc Exp $ */
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -22,6 +22,9 @@
 #include "gc.h"
 #include "search.h"
 #include "purify.h"
+#if defined GENCGC
+#include "gencgc.h"
+#endif
 
 extern boolean isatty(int fd);
 
diff --git a/lisp/purify.c b/lisp/purify.c
index a518e05c6bfba79e592ba359b14421594c32f4f9..3c26c759585c5491993a62f095c293bea42bbea1 100644
--- a/lisp/purify.c
+++ b/lisp/purify.c
@@ -10,7 +10,7 @@
    and x86/GENCGC stack scavenging, by Douglas Crosher, 1996, 1997,
    1998.
 
-   $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/purify.c,v 1.19 2000/10/24 13:32:32 dtc Exp $ 
+   $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/purify.c,v 1.20 2000/10/27 19:25:55 dtc Exp $ 
 
    */
 #include <stdio.h>
@@ -18,6 +18,7 @@
 #include <stdlib.h>
 
 #include "lisp.h"
+#include "arch.h"
 #include "os.h"
 #include "internals.h"
 #include "globals.h"
@@ -414,28 +415,34 @@ lispobj *valid_stack_ra_locations[MAX_STACK_RETURN_ADDRESSES];
 lispobj *valid_stack_ra_code_objects[MAX_STACK_RETURN_ADDRESSES];
 unsigned int num_valid_stack_ra_locations;
 
-/* Identify valid stack slots. */
-static void
-setup_i386_stack_scav(lispobj *lowaddr, lispobj *base)
+/*
+ * Identify valid stack slots.
+ */
+
+static void  setup_i386_stack_scav(lispobj *lowaddr, lispobj *base)
 {
   lispobj *sp = lowaddr;
+
   num_valid_stack_locations = 0;  
   num_valid_stack_ra_locations = 0;  
+
   for (sp = lowaddr; sp < base; sp++) {
     lispobj thing = *sp;
     lispobj* start_addr;
     /* Find the object start address */
-    if ((start_addr = search_dynamic_space((void *)thing)) != NULL) {
-      /* Need to allow raw pointers into Code objects for return
-	 addresses. This will also pickup pointers to functions in code
-	 objects. */
+    if ((start_addr = search_dynamic_space((void *) thing)) != NULL) {
+      /*
+       * Need to allow raw pointers into Code objects for return
+       * addresses. This will also pickup pointers to functions in code
+       * objects.
+       */
       if (TypeOf(*start_addr) == type_CodeHeader) {
 	gc_assert(num_valid_stack_ra_locations < MAX_STACK_RETURN_ADDRESSES);
 	valid_stack_ra_locations[num_valid_stack_ra_locations] = sp;
 	valid_stack_ra_code_objects[num_valid_stack_ra_locations++] =
-	  (lispobj *)((int)start_addr + type_OtherPointer);
+	  (lispobj *) ((int) start_addr + type_OtherPointer);
       } else {
-	if (valid_dynamic_space_pointer((void *)thing, start_addr)) {
+	if (valid_dynamic_space_pointer((void *) thing, start_addr)) {
 	  gc_assert(num_valid_stack_locations < MAX_STACK_POINTERS);
 	  valid_stack_locations[num_valid_stack_locations++] = sp;
 	}
@@ -450,8 +457,7 @@ setup_i386_stack_scav(lispobj *lowaddr, lispobj *base)
   }
 }
 
-static void
-pscav_i386_stack(void)
+static void pscav_i386_stack(void)
 {
   int i;
 
@@ -462,14 +468,14 @@ pscav_i386_stack(void)
     lispobj code_obj = valid_stack_ra_code_objects[i];
     pscav(&code_obj, 1, FALSE);
     if (pointer_filter_verbose)
-      fprintf(stderr,"*C moved RA %x to %x; for code object %x to %x\n",
+      fprintf(stderr, "*C moved RA %x to %x; for code object %x to %x\n",
 	      *valid_stack_ra_locations[i],
-	      (int)(*valid_stack_ra_locations[i])
-	      - ((int)valid_stack_ra_code_objects[i] - (int)code_obj),
+	      (int) (*valid_stack_ra_locations[i])
+	      - ((int) valid_stack_ra_code_objects[i] - (int)code_obj),
 	      valid_stack_ra_code_objects[i], code_obj);
     *valid_stack_ra_locations[i] = 
-      (lispobj *)((int)(*valid_stack_ra_locations[i])
-		  - ((int)valid_stack_ra_code_objects[i] - (int)code_obj));
+      (lispobj *)((int) (*valid_stack_ra_locations[i])
+		  - ((int) valid_stack_ra_code_objects[i] - (int) code_obj));
   }
 }
 #endif
@@ -1137,7 +1143,7 @@ static struct scavenger_hook *scavenger_hooks=NIL;
 
 static int pscav_scavenger_hook(struct scavenger_hook *scav_hook)
 {
-  lispobj *old_value = scav_hook->value;
+  lispobj old_value = scav_hook->value;
 
   /* Scavenge the value */
   pscav((lispobj *)scav_hook+1, 1, FALSE);
diff --git a/lisp/runprog.c b/lisp/runprog.c
index dc75713933fe3468bc77259e57080a5133379d01..274bf90e7db1d2b44e9f95c9e7672bceaa6c4dcf 100644
--- a/lisp/runprog.c
+++ b/lisp/runprog.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/runprog.c,v 1.2 1994/10/25 00:12:10 ram Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/runprog.c,v 1.3 2000/10/27 19:25:56 dtc Exp $
  *
  * Support for run-program.
  *
@@ -8,7 +8,7 @@
 #include <sys/file.h>
 #include <sys/fcntl.h>
 #include <sys/ioctl.h>
-#ifdef SVR4
+#if defined(SVR4) || defined(__linux__)
 #include <unistd.h>
 #endif
 
@@ -24,7 +24,7 @@ int spawn(char *program, char *argv[], char *envp[], char *pty_name,
     /* Put us in our own process group. */
 #if defined(hpux)
     setsid();
-#elif defined(SVR4)
+#elif defined(SVR4) || defined(__linux__)
     setpgrp();
 #else
     setpgrp(0, getpid());
diff --git a/lisp/save.c b/lisp/save.c
index b407d35d78dca3cb124c12dc325ffb99477bd54e..1bdf22a56fff0ce07fe8a674a570cf9ad4bec899 100644
--- a/lisp/save.c
+++ b/lisp/save.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/save.c,v 1.6 1997/11/25 17:59:14 dtc Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/save.c,v 1.7 2000/10/27 19:25:56 dtc Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -20,6 +20,7 @@
 #include "save.h"
 #include "lispregs.h"
 #include "validate.h"
+#include "dynbind.h"
 
 #ifdef GENCGC
 #include "gencgc.h"
@@ -72,7 +73,7 @@ static void output_space(FILE *file, int id, lispobj *addr, lispobj *end)
     data = write_bytes(file, (char *)addr, bytes);
 
     putw(data, file);
-    putw((os_vm_address_t)((long)addr / CORE_PAGESIZE), file);
+    putw((long) addr / CORE_PAGESIZE, file);
     putw((bytes + CORE_PAGESIZE - 1) / CORE_PAGESIZE, file);
 }
 
diff --git a/lisp/validate.c b/lisp/validate.c
index 582c3cee8a0cc4b1c116334223bf522dfa72635e..f2f09dd08edcb40eb155144ce141e5c3dc8d3b13 100644
--- a/lisp/validate.c
+++ b/lisp/validate.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/validate.c,v 1.7 2000/10/24 13:32:32 dtc Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/validate.c,v 1.8 2000/10/27 19:25:56 dtc Exp $
  *
  * Memory Validation
  */
@@ -63,9 +63,9 @@ void validate(void)
 
 	current_dynamic_space = dynamic_0_space;
 
+#ifndef GENCGC
 	/* Dynamic-1 Space */
 	dynamic_1_space = (lispobj *) DYNAMIC_1_SPACE_START;
-#ifndef GENCGC
  	ensure_space(dynamic_1_space, dynamic_space_size);
 #endif
 
diff --git a/lisp/x86-arch.c b/lisp/x86-arch.c
index 97258867ae452bdb881cdf767e0691bcfe21b10d..a8945413f2724284c6fc0be6db18c5a12fe7e44d 100644
--- a/lisp/x86-arch.c
+++ b/lisp/x86-arch.c
@@ -1,6 +1,6 @@
 /* x86-arch.c -*- Mode: C; comment-column: 40 -*-
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-arch.c,v 1.13 2000/10/21 12:42:46 dtc Exp $ 
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-arch.c,v 1.14 2000/10/27 19:25:56 dtc Exp $ 
  *
  */
 
@@ -55,7 +55,7 @@ void arch_skip_instruction(struct sigcontext *context)
       vlen = *(char*) context->sc_pc++;
       /* Skip lisp error arg data bytes */
       while(vlen-- > 0) 
-	(char*) context->sc_pc++;
+	((char*) context->sc_pc)++;
       break;
 
     case trap_Breakpoint:
@@ -291,8 +291,6 @@ void  sigtrap_handler(HANDLER_ARGS)
 
 #define FIXNUM_VALUE(lispobj) (((int) lispobj) >> 2)
 
-extern void first_handler();
-
 void arch_install_interrupt_handlers()
 {
     interrupt_install_low_level_handler(SIGILL, sigtrap_handler);