Index: /branches/working-0711/ccl/lisp-kernel/gc-common.c
===================================================================
--- /branches/working-0711/ccl/lisp-kernel/gc-common.c	(revision 13277)
+++ /branches/working-0711/ccl/lisp-kernel/gc-common.c	(revision 13278)
@@ -1222,4 +1222,8 @@
       */
       LispObj this = lisp_global(WEAKVLL); /* all populations as of last gc */
+      LispObj *tenured_low = (LispObj *)tenured_area->low;
+      natural tenured_dnodes = area_dnode(GCarealow, tenured_low);
+      bitvector refbits = tenured_area->refbits;
+
       while (this) {
         LispObj *base = ptr_from_lispobj(this);
@@ -1229,4 +1233,9 @@
           base[1] = GCweakvll;
           GCweakvll = ptr_to_lispobj(base);
+          /* Since will be doing weak processing, don't treat the data as root */
+          dnode = area_dnode(&base[3], tenured_low);
+          if (dnode < tenured_dnodes) {
+            clr_bit(refbits, dnode);
+          }
         }
         else {
@@ -1379,4 +1388,21 @@
     reap_gcable_ptrs();
 
+    /* Restore population data refbits for forwarding */
+    if (GCn_ephemeral_dnodes) {
+      LispObj *tenured_low = (LispObj *)tenured_area->low;
+      natural tenured_dnodes = area_dnode(GCarealow, tenured_low);
+      bitvector refbits = tenured_area->refbits;
+      LispObj this = lisp_global(WEAKVLL);
+
+      while (this) {
+        LispObj *base = ptr_from_lispobj(this);
+        natural dnode = area_dnode(&base[3], tenured_low);
+        if ((dnode < tenured_dnodes) && (base[3] >= GCarealow)) {
+          set_bit(refbits, dnode);
+        }
+        this = base[1];
+      }
+    }
+
     GCrelocptr = global_reloctab;
     GCfirstunmarked = calculate_relocation();
Index: /branches/working-0711/ccl/lisp-kernel/x86-gc.c
===================================================================
--- /branches/working-0711/ccl/lisp-kernel/x86-gc.c	(revision 13277)
+++ /branches/working-0711/ccl/lisp-kernel/x86-gc.c	(revision 13278)
@@ -1205,5 +1205,5 @@
         ref_dnode = area_dnode(start, base);
         if (!ref_bit(refbits, ref_dnode)) {
-          Bug(NULL, "Missing memoization in doublenode at 0x%08X", start);
+          Bug(NULL, "Missing memoization in doublenode at 0x" LISP "\n", start);
           set_bit(refbits, ref_dnode);
         }
