Index: /branches/x8664-call/ccl/lisp-kernel/x86-gc.c
===================================================================
--- /branches/x8664-call/ccl/lisp-kernel/x86-gc.c	(revision 6326)
+++ /branches/x8664-call/ccl/lisp-kernel/x86-gc.c	(revision 6327)
@@ -101,14 +101,16 @@
     */
     {
-      int disp = ((int *)n)[-1];
+      int disp = 0;
       LispObj m = n;
 
-      if (disp > 0) {
-        n = m - disp;
-      }
-      if ((disp <= 0) ||
+      if ((*((unsigned short *)n) == RECOVER_FN_FROM_RIP_WORD0) &&
+          (*((unsigned char *)(n+2)) == RECOVER_FN_FROM_RIP_BYTE2)) {
+        disp = (*(int *) (n+3));
+        n = RECOVER_FN_FROM_RIP_LENGTH+m+disp;
+      }
+      if ((disp == 0) ||
           (fulltag_of(n) != fulltag_function) ||
           (heap_area_containing((BytePtr)ptr_from_lispobj(n)) != a)) {
-        Bug(NULL, "TRA at 0x%lx has bad displacement ~d\n", n, disp);
+        Bug(NULL, "TRA at 0x%lx has bad displacement %d\n", n, disp);
       }
     }
