aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorDavid Jones2003-11-19 14:15:49 +0000
committerDavid Jones2003-11-19 14:15:49 +0000
commit2a4b2d0bb7a6a7db9f8015b6a1e0e71a66f0eb1f (patch)
treee1f79ba9e948bfd95cbf80a963579af2204b4183 /mps/code
parentae2ecc91b4107e8c56859e8bfec1da92c21eb563 (diff)
downloademacs-2a4b2d0bb7a6a7db9f8015b6a1e0e71a66f0eb1f.tar.gz
emacs-2a4b2d0bb7a6a7db9f8015b6a1e0e71a66f0eb1f.zip
Mps: now uses correct test for remembering / restoring
SegSummary. Copied from Perforce Change: 64983 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/expt825.c9
-rw-r--r--mps/code/mpm.h2
-rw-r--r--mps/code/trace.c3
3 files changed, 13 insertions, 1 deletions
diff --git a/mps/code/expt825.c b/mps/code/expt825.c
index 458e0c0870f..db4b4325faa 100644
--- a/mps/code/expt825.c
+++ b/mps/code/expt825.c
@@ -6,6 +6,15 @@
6 * 6 *
7 * DESIGN 7 * DESIGN
8 * 8 *
9 * Just a copy of finaltest.c with the following modifcations:
10 * maxtreeDEPTH is 2 rather than 12. This makes the test run and fail
11 * much more quickly.
12 *
13 * After trees have been created and finalized, call
14 * mps_arena_unsafe_expose_remember_protection / restore. If the bug
15 * is present then this sequence will fail.
16 *
17 *
9 * DEPENDENCIES 18 * DEPENDENCIES
10 * 19 *
11 * This test uses the dylan object format, but the reliance on this 20 * This test uses the dylan object format, but the reliance on this
diff --git a/mps/code/mpm.h b/mps/code/mpm.h
index 54ed5f755c5..efd02ca8287 100644
--- a/mps/code/mpm.h
+++ b/mps/code/mpm.h
@@ -610,6 +610,8 @@ extern void SegClassMixInNoSplitMerge(SegClass class);
610#define SEG_SUPERCLASS(className) \ 610#define SEG_SUPERCLASS(className) \
611 ((SegClass)SUPERCLASS(className)) 611 ((SegClass)SUPERCLASS(className))
612 612
613#define ClassOfSeg(seg) ((seg)->class)
614
613extern Size SegSize(Seg seg); 615extern Size SegSize(Seg seg);
614extern Addr (SegBase)(Seg seg); 616extern Addr (SegBase)(Seg seg);
615extern Addr (SegLimit)(Seg seg); 617extern Addr (SegLimit)(Seg seg);
diff --git a/mps/code/trace.c b/mps/code/trace.c
index 07723fc0bf5..edd7714562f 100644
--- a/mps/code/trace.c
+++ b/mps/code/trace.c
@@ -1761,7 +1761,7 @@ void ArenaExposeRemember(Globals globals, int remember)
1761 1761
1762 do { 1762 do {
1763 base = SegBase(seg); 1763 base = SegBase(seg);
1764 if((SegPool(seg)->class->attr & AttrSCAN) != 0) { 1764 if(IsSubclassPoly(ClassOfSeg(seg), GCSegClassGet())) {
1765 if(remember) { 1765 if(remember) {
1766 RefSet summary; 1766 RefSet summary;
1767 1767
@@ -1805,6 +1805,7 @@ void ArenaRestoreProtection(Globals globals)
1805 } 1805 }
1806 b = SegOfAddr(&seg, arena, block->the[i].base); 1806 b = SegOfAddr(&seg, arena, block->the[i].base);
1807 if(b && SegBase(seg) == block->the[i].base) { 1807 if(b && SegBase(seg) == block->the[i].base) {
1808 AVER(IsSubclassPoly(ClassOfSeg(seg), GCSegClassGet()));
1808 SegSetSummary(seg, block->the[i].summary); 1809 SegSetSummary(seg, block->the[i].summary);
1809 } else { 1810 } else {
1810 /* Either seg has gone or moved, both of which are 1811 /* Either seg has gone or moved, both of which are