1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-23 07:12:12 -07:00
Copied from Perforce
 Change: 195057
This commit is contained in:
Gareth Rees 2018-09-13 16:47:51 +01:00
parent 3f0dd10bdd
commit 0c8dc0dac5
7 changed files with 331 additions and 328 deletions

View file

@ -149,7 +149,7 @@ int main(int argc, char *argv[])
EVENT_ANY_FIELDS(EVENT_FIELD)
#undef EVENT_FIELD
puts("')\nHeaderDesc.__doc__ = '''");
#define EVENT_FIELD(TYPE, NAME, DOC) printf(" %s -- %s\n", #NAME, DOC);
#define EVENT_FIELD(TYPE, NAME, DOC) printf("%s -- %s\n", #NAME, DOC);
EVENT_ANY_FIELDS(EVENT_FIELD)
#undef EVENT_FIELD
puts("'''");
@ -169,6 +169,29 @@ int main(int argc, char *argv[])
PAD_TO(sizeof(EventAnyStruct));
puts("'");
puts("\n# Mapping from access mode to its name.");
puts("ACCESS_MODE = {");
printf(" %u: \"READ\",\n", (unsigned)AccessREAD);
printf(" %u: \"WRITE\",\n", (unsigned)AccessWRITE);
printf(" %u: \"READ/WRITE\",\n",
(unsigned)BS_UNION(AccessREAD, AccessWRITE));
puts("}");
puts("\n# Mapping from rank to its name.");
puts("RANK = {");
#define X(RANK) printf(" %u: \"%s\",\n", (unsigned)Rank ## RANK, #RANK);
RANK_LIST(X)
#undef X
puts("}");
puts("\n# Mapping from trace start reason to its short decription.");
puts("TRACE_START_WHY = {");
#define X(WHY, SHORT, LONG) \
printf(" %u: \"%s\",\n", (unsigned)TraceStartWhy ## WHY, SHORT);
TRACE_START_WHY_LIST(X)
#undef X
puts("}");
return 0;
}

View file

@ -379,7 +379,7 @@ extern RefSet ScanStateSummary(ScanState ss);
extern Bool TraceIdCheck(TraceId id);
extern Bool TraceSetCheck(TraceSet ts);
extern Bool TraceCheck(Trace trace);
extern Res TraceCreate(Trace *traceReturn, Arena arena, int why);
extern Res TraceCreate(Trace *traceReturn, Arena arena, TraceStartWhy why);
extern void TraceDestroyInit(Trace trace);
extern void TraceDestroyFinished(Trace trace);
@ -395,13 +395,13 @@ extern Rank TraceRankForAccess(Arena arena, Seg seg);
extern void TraceSegAccess(Arena arena, Seg seg, AccessSet mode);
extern void TraceAdvance(Trace trace);
extern Res TraceStartCollectAll(Trace *traceReturn, Arena arena, int why);
extern Res TraceStartCollectAll(Trace *traceReturn, Arena arena, TraceStartWhy why);
extern Res TraceDescribe(Trace trace, mps_lib_FILE *stream, Count depth);
/* traceanc.c -- Trace Ancillary */
extern Bool TraceStartMessageCheck(TraceStartMessage message);
extern const char *TraceStartWhyToString(int why);
extern const char *TraceStartWhyToString(TraceStartWhy why);
extern void TracePostStartMessage(Trace trace);
extern Bool TraceMessageCheck(TraceMessage message); /* trace end */
extern void TracePostMessage(Trace trace); /* trace end */
@ -545,8 +545,8 @@ extern void ArenaPark(Globals globals);
extern void ArenaPostmortem(Globals globals);
extern void ArenaExposeRemember(Globals globals, Bool remember);
extern void ArenaRestoreProtection(Globals globals);
extern Res ArenaStartCollect(Globals globals, int why);
extern Res ArenaCollect(Globals globals, int why);
extern Res ArenaStartCollect(Globals globals, TraceStartWhy why);
extern Res ArenaCollect(Globals globals, TraceStartWhy why);
extern Bool ArenaBusy(Arena arena);
extern Bool ArenaHasAddr(Arena arena, Addr addr);
extern void ArenaChunkInsert(Arena arena, Chunk chunk);

View file

@ -443,7 +443,7 @@ typedef struct TraceStruct {
Sig sig; /* <design/sig/> */
TraceId ti; /* index into TraceSets */
Arena arena; /* owning arena */
int why; /* why the trace began */
TraceStartWhy why; /* why the trace began */
ZoneSet white; /* zones in the white set */
ZoneSet mayMove; /* zones containing possibly moving objs */
TraceState state; /* current state of trace */

View file

@ -60,6 +60,7 @@ typedef Size Epoch; /* design.mps.ld */
typedef unsigned TraceId; /* <design/trace/> */
typedef unsigned TraceSet; /* <design/trace/> */
typedef unsigned TraceState; /* <design/trace/> */
typedef unsigned TraceStartWhy;
typedef unsigned AccessSet; /* <design/type/#access-set> */
typedef unsigned Attr; /* <design/type/#attr> */
typedef int RootVar; /* <design/type/#rootvar> */
@ -298,13 +299,14 @@ enum {
/* These definitions must match <code/mps.h#rank>. */
/* This is checked by <code/mpsi.c#check>. */
#define RANK_LIST(X) X(AMBIG) X(EXACT) X(FINAL) X(WEAK)
enum {
RankMIN = 0,
RankAMBIG = 0,
RankEXACT = 1,
RankFINAL = 2,
RankWEAK = 3,
RankLIMIT
#define X(RANK) Rank ## RANK,
RANK_LIST(X)
#undef X
RankLIMIT,
RankMIN = 0
};
@ -356,16 +358,29 @@ enum {
/* TODO: A better way for MPS extensions to extend the list of reasons
instead of the catch-all TraceStartWhyEXTENSION. */
#define TRACE_START_WHY_LIST(X) \
X(CHAIN_GEN0CAP, "gen 0 capacity", \
"Generation 0 of a chain has reached capacity: start a minor " \
"collection.") \
X(DYNAMICCRITERION, "dynamic criterion", \
"Need to start full collection now, or there won't be enough " \
"memory (ArenaAvail) to complete it.") \
X(OPPORTUNISM, "opportunism", \
"Opportunism: client predicts plenty of idle time, so start full " \
"collection.") \
X(CLIENTFULL_INCREMENTAL, "full incremental", \
"Client requests: start incremental full collection now.") \
X(CLIENTFULL_BLOCK, "full", \
"Client requests: immediate full collection.") \
X(WALK, "walk", "Walking all live objects.") \
X(EXTENSION, "extension", \
"Extension: an MPS extension started the trace.")
enum {
TraceStartWhyBASE = 1, /* not a reason, the base of the enum. */
TraceStartWhyCHAIN_GEN0CAP = TraceStartWhyBASE, /* start minor */
TraceStartWhyDYNAMICCRITERION, /* start full */
TraceStartWhyOPPORTUNISM, /* start full */
TraceStartWhyCLIENTFULL_INCREMENTAL, /* start full */
TraceStartWhyCLIENTFULL_BLOCK, /* do full */
TraceStartWhyWALK, /* walking references -- see walk.c */
TraceStartWhyEXTENSION, /* MPS extension using traces */
TraceStartWhyLIMIT /* not a reason, the limit of the enum. */
#define X(WHY, SHORT, LONG) TraceStartWhy ## WHY,
TRACE_START_WHY_LIST(X)
#undef X
TraceStartWhyLIMIT
};

View file

@ -648,7 +648,7 @@ static void traceCreatePoolGen(GenDesc gen)
}
}
Res TraceCreate(Trace *traceReturn, Arena arena, int why)
Res TraceCreate(Trace *traceReturn, Arena arena, TraceStartWhy why)
{
TraceId ti;
Trace trace;
@ -1723,7 +1723,7 @@ void TraceAdvance(Trace trace)
* "why" is a TraceStartWhy* enum member that specifies why the
* collection is starting. */
Res TraceStartCollectAll(Trace *traceReturn, Arena arena, int why)
Res TraceStartCollectAll(Trace *traceReturn, Arena arena, TraceStartWhy why)
{
Trace trace = NULL;
Res res;

View file

@ -141,42 +141,21 @@ static void traceStartMessageInit(Arena arena, TraceStartMessage tsMessage)
* why a trace started.
*/
const char *TraceStartWhyToString(int why)
const char *TraceStartWhyToString(TraceStartWhy why)
{
const char *r;
switch(why) {
case TraceStartWhyCHAIN_GEN0CAP:
r = "Generation 0 of a chain has reached capacity:"
" start a minor collection.";
break;
case TraceStartWhyDYNAMICCRITERION:
r = "Need to start full collection now, or there won't be enough"
" memory (ArenaAvail) to complete it.";
break;
case TraceStartWhyOPPORTUNISM:
r = "Opportunism: client predicts plenty of idle time,"
" so start full collection.";
break;
case TraceStartWhyCLIENTFULL_INCREMENTAL:
r = "Client requests: start incremental full collection now.";
break;
case TraceStartWhyCLIENTFULL_BLOCK:
r = "Client requests: immediate full collection.";
break;
case TraceStartWhyWALK:
r = "Walking all live objects.";
break;
case TraceStartWhyEXTENSION:
r = "Extension: an MPS extension started the trace.";
break;
switch (why) {
#define X(WHY, SHORT, LONG) case TraceStartWhy ## WHY: r = (LONG); break;
TRACE_START_WHY_LIST(X)
#undef X
default:
NOTREACHED;
r = "Unknown reason (internal error).";
break;
}
/* Should fit in buffer without truncation; see .whybuf.len */
/* Must fit in buffer without truncation; see .whybuf.len */
AVER(StringLength(r) < TRACE_START_MESSAGE_WHYBUF_LEN);
return r;
@ -193,14 +172,13 @@ const char *TraceStartWhyToString(int why)
* necessary.
*/
static void traceStartWhyToTextBuffer(char *s, size_t len, int why)
static void traceStartWhyToTextBuffer(char *s, size_t len, TraceStartWhy why)
{
const char *r;
size_t i;
AVER(s);
/* len can be anything, including 0. */
AVER(TraceStartWhyBASE <= why);
AVER(why < TraceStartWhyLIMIT);
r = TraceStartWhyToString(why);
@ -654,7 +632,7 @@ void ArenaPostmortem(Globals globals)
/* ArenaStartCollect -- start a collection of everything in the
* arena; leave unclamped. */
Res ArenaStartCollect(Globals globals, int why)
Res ArenaStartCollect(Globals globals, TraceStartWhy why)
{
Arena arena;
Res res;
@ -677,7 +655,7 @@ failStart:
/* ArenaCollect -- collect everything in arena; leave parked */
Res ArenaCollect(Globals globals, int why)
Res ArenaCollect(Globals globals, TraceStartWhy why)
{
Res res;

File diff suppressed because it is too large Load diff