From f3adfa322a0cfd5964540712e560de2650623b08 Mon Sep 17 00:00:00 2001 From: Richard Kistruck Date: Wed, 25 Mar 2009 17:43:33 +0000 Subject: [PATCH] Mps br/movalot zumr.c: explicitly manually check that colleciton caused object to move, because ra (access stale unmanaged ref) does not seem to cause a fault on xci3gc. Copied from Perforce Change: 167644 ServerID: perforce.ravenbrook.com --- mps/code/zumr.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mps/code/zumr.c b/mps/code/zumr.c index e85d802cc9d..17ef7854083 100644 --- a/mps/code/zumr.c +++ b/mps/code/zumr.c @@ -95,7 +95,7 @@ static void *myunmanaged[10]; static void testscriptC(mps_arena_t arena, mps_ap_t ap, mps_root_t root_stackreg) { mps_word_t v; - enum {thingSig = 0x00007770 >> 2}; + enum {thingSig = 0x00ccccc0 >> 2}; printf(" U1()\n"); die(make_dylan_vector(&v, ap, 1), "make_dylan_vector"); @@ -103,6 +103,7 @@ static void testscriptC(mps_arena_t arena, mps_ap_t ap, mps_root_t root_stackreg myroot[0] = (void*)v; printf("myroot[0] = %p\n", myroot[0]); Insist(DYLAN_VECTOR_SLOT(myroot[0], 0) = DYLAN_INT(thingSig)); + v = 0; /* Ru */ myunmanaged[0] = myroot[0]; @@ -110,7 +111,11 @@ static void testscriptC(mps_arena_t arena, mps_ap_t ap, mps_root_t root_stackreg Insist(DYLAN_VECTOR_SLOT(myunmanaged[0], 0) = DYLAN_INT(thingSig)); /* Flip */ + printf("fill this page with junk, so should be only junk, so unmapped by GC.\n"); + die(make_dylan_vector(&v, ap, 10000), "make_dylan_vector"); v = 0; + + printf("flip.\n"); mps_root_destroy(root_stackreg); mps_arena_collect(arena); @@ -118,7 +123,12 @@ static void testscriptC(mps_arena_t arena, mps_ap_t ap, mps_root_t root_stackreg printf("myroot[0] = %p\n", myroot[0]); printf("myunmanaged[0] = %p\n", myunmanaged[0]); Insist(DYLAN_VECTOR_SLOT(myroot[0], 0) = DYLAN_INT(thingSig)); - Insist(DYLAN_VECTOR_SLOT(myunmanaged[0], 0) = DYLAN_INT(thingSig)); + + /* Check */ + if(myunmanaged[0] != myroot[0]) { + printf("Move detected.\n"); + exit(1); + } }