summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorLisa Hsu <hsul@eecs.umich.edu>2004-03-05 08:16:33 -0500
committerLisa Hsu <hsul@eecs.umich.edu>2004-03-05 08:16:33 -0500
commit34576de15a3c8f8a50437e5d95b1402722cf9e2b (patch)
treea96fdfa1d9fbf735026da44c262a04b54854f2cf /sim
parentd9689c58d3fe1ffc674815093c1f0af118d28f58 (diff)
downloadgem5-34576de15a3c8f8a50437e5d95b1402722cf9e2b.tar.xz
changes that affect post checkpoint runs.
cpu/exec_context.cc: you can't delete an element of an array that you newed. oops. kern/tru64/tru64_events.cc: changes to reflect .ini changes, and also b/c es_intr and ipintr can happen at ANY point, even within a current calling path being tracked. sim/system.cc: can't delete an element of a newed array. must new them separately. --HG-- extra : convert_revision : 21573327b7b7f20bf9a3fcfb5854526433e17e17
Diffstat (limited to 'sim')
-rw-r--r--sim/system.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/sim/system.cc b/sim/system.cc
index 951739462..43f43baec 100644
--- a/sim/system.cc
+++ b/sim/system.cc
@@ -164,26 +164,31 @@ System::unserialize(Checkpoint *cp, const std::string &section)
int numCtxs;
UNSERIALIZE_SCALAR(numCtxs);
- SWContext *ctxs = new SWContext[numCtxs];
+ SWContext *ctx;
Addr addr;
int size;
for(int i = 0; i < numCtxs; ++i) {
+ ctx = new SWContext;
paramIn(cp, section, csprintf("Addr[%d]",i), addr);
- paramIn(cp, section, csprintf("calls[%d]",i), ctxs[i].calls);
+ paramIn(cp, section, csprintf("calls[%d]",i), ctx->calls);
paramIn(cp, section, csprintf("stacksize[%d]",i), size);
- fnCall *call = new fnCall[size];
+
+ vector<fnCall *> calls;
+ fnCall *call;
for (int j = 0; j < size; ++j) {
+ call = new fnCall;
paramIn(cp, section, csprintf("ctx[%d].stackpos[%d]",i,j),
- call[j].name);
- call[j].myBin = getBin(call[j].name);
+ call->name);
+ call->myBin = getBin(call->name);
+ calls.push_back(call);
}
for (int j=size-1; j>=0; --j) {
- ctxs[i].callStack.push(&(call[j]));
+ ctx->callStack.push(calls[j]);
}
- addContext(addr, &(ctxs[i]));
+ addContext(addr, ctx);
}
}
}