Index: /branches/x8664-call/ccl/lisp-kernel/x86-gc.c
===================================================================
--- /branches/x8664-call/ccl/lisp-kernel/x86-gc.c	(revision 6314)
+++ /branches/x8664-call/ccl/lisp-kernel/x86-gc.c	(revision 6315)
@@ -1467,6 +1467,8 @@
 mark_xp(ExceptionInformation *xp)
 {
-  natural *regs = (natural *) xpGPRvector(xp);
-
+  natural *regs = (natural *) xpGPRvector(xp), dnode;
+  LispObj rip;
+    
+  
 
   mark_root(regs[Iarg_z]);
@@ -1482,6 +1484,17 @@
   mark_root(regs[Itemp1]);
   mark_root(regs[Itemp2]);
-  /* If the IP isn't pointing into a marked function,
-     we're in big trouble.  Check for that here ? */
+  /* If the RIP isn't pointing into a marked function,
+     we can -maybe- recover from that if it's tagged as
+     a TRA. */
+  rip = regs[Iip];
+  dnode = gc_area_dnode(rip);
+  if ((dnode < GCndnodes_in_area) &&
+      (! ref_bit(GCmarkbits,dnode))) {
+    if (tag_of(rip) == tag_tra) {
+      mark_root(rip);
+    } else {
+      Bug(NULL, "Can't find function for rip 0x%16lx",rip);
+    }
+  }
 }
 
