From a3fb98af2e047ed39a1f89fc13bdaa0d607ce63a Mon Sep 17 00:00:00 2001 From: Richard Kistruck Date: Wed, 21 Mar 2007 17:35:45 +0000 Subject: [PATCH] Mps branch unfixed-summary: better segdescribe: all segs: say "buffer: NULL" if it is (rather than saying nothing) AMC: correct SEG_SUPERCLASS, so we see GCSeg fields, and say if there's a nailboard. Copied from Perforce Change: 161973 ServerID: perforce.ravenbrook.com --- mps/code/poolamc.c | 15 +++++++++++++-- mps/code/seg.c | 16 +++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/mps/code/poolamc.c b/mps/code/poolamc.c index df0716571cb..67cf3eff7f5 100644 --- a/mps/code/poolamc.c +++ b/mps/code/poolamc.c @@ -26,6 +26,7 @@ typedef struct amcGenStruct *amcGen; /* forward declarations */ +static Bool amcSegHasNailboard(Seg seg); static Bool AMCCheck(AMC amc); static Res AMCFix(Pool pool, ScanState ss, Seg seg, Ref *refIO); static Res AMCHeaderFix(Pool pool, ScanState ss, Seg seg, Ref *refIO); @@ -160,7 +161,7 @@ static Res AMCSegDescribe(Seg seg, mps_lib_FILE *stream) if (!CHECKT(amcSeg, amcseg)) return ResFAIL; /* Describe the superclass fields first via next-method call */ - super = SEG_SUPERCLASS(GCSegClass); + super = SEG_SUPERCLASS(amcSegClass); res = super->describe(seg, stream); if (res != ResOK) return res; @@ -179,10 +180,20 @@ static Res AMCSegDescribe(Seg seg, mps_lib_FILE *stream) res = WriteF(stream, "AMC seg $P [$A,$A){\n", (WriteFP)seg, (WriteFA)base, (WriteFA)limit, - " Map\n", NULL); if (res != ResOK) return res; + if (amcSegHasNailboard(seg)) { + res = WriteF(stream, " Boarded\n", NULL); + /* @@@@ should have AMCNailboardDescribe() */ + } else { + res = WriteF(stream, " Mobile or Stuck\n", NULL); + } + if (res != ResOK) return res; + + res = WriteF(stream, " Map\n", NULL); + if (res != ResOK) return res; + for(i = base; i < limit; i = AddrAdd(i, row)) { Addr j; char c; diff --git a/mps/code/seg.c b/mps/code/seg.c index 9f6b485d5c0..e8a2b376b57 100644 --- a/mps/code/seg.c +++ b/mps/code/seg.c @@ -1569,14 +1569,20 @@ static Res gcSegDescribe(Seg seg, mps_lib_FILE *stream) res = super->describe(seg, stream); if (res != ResOK) return res; - if (gcseg->buffer != NULL) { - res = BufferDescribe(gcseg->buffer, stream); - if (res != ResOK) return res; - } res = WriteF(stream, " summary $W\n", (WriteFW)gcseg->summary, NULL); - return res; + if (res != ResOK) return res; + + if (gcseg->buffer == NULL) { + res = WriteF(stream, " buffer: NULL\n", NULL); + } + else { + res = BufferDescribe(gcseg->buffer, stream); + } + if (res != ResOK) return res; + + return ResOK; }