diff options
author | Lisa Hsu <hsul@eecs.umich.edu> | 2004-03-05 08:16:33 -0500 |
---|---|---|
committer | Lisa Hsu <hsul@eecs.umich.edu> | 2004-03-05 08:16:33 -0500 |
commit | 34576de15a3c8f8a50437e5d95b1402722cf9e2b (patch) | |
tree | a96fdfa1d9fbf735026da44c262a04b54854f2cf /sim/system.cc | |
parent | d9689c58d3fe1ffc674815093c1f0af118d28f58 (diff) | |
download | gem5-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/system.cc')
-rw-r--r-- | sim/system.cc | 19 |
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 §ion) 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); } } } |