diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2004-06-21 22:42:16 -0700 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2004-06-21 22:42:16 -0700 |
commit | c1e58b6bf6b353f9355aafd8ed2cb86e6d00e32a (patch) | |
tree | e692c51f0b454d53034aad7cc63c605468dd7830 | |
parent | 800445f4b814d2c6acc92c68d8fc7dee0bf4f8ae (diff) | |
download | gem5-c1e58b6bf6b353f9355aafd8ed2cb86e6d00e32a.tar.xz |
Handle SIGABRT a little more nicely.
base/misc.cc:
Don't dump trace in panic(), SIGABRT handler will do it now.
sim/main.cc:
Add SIGABRT handler that prints curTick and dumps buffered trace (if any).
This doesn't work as well as I would like since the buffered trace records
often contain stale references to stack-resident temporary std::string objects.
Someday we'll have to put in a fix for that.
--HG--
extra : convert_revision : 67576efbf5c10e63e255fc9a9ec520326fd3567b
-rw-r--r-- | base/misc.cc | 5 | ||||
-rw-r--r-- | sim/main.cc | 13 |
2 files changed, 13 insertions, 5 deletions
diff --git a/base/misc.cc b/base/misc.cc index 5caf96d40..1304fb128 100644 --- a/base/misc.cc +++ b/base/misc.cc @@ -61,11 +61,6 @@ __panic(const string &format, cp::ArgList &args, const char *func, delete &args; -#if TRACING_ON - // dump trace buffer, if there is one - Trace::theLog.dump(cerr); -#endif - abort(); } diff --git a/sim/main.cc b/sim/main.cc index 032a05668..c990d830b 100644 --- a/sim/main.cc +++ b/sim/main.cc @@ -90,6 +90,18 @@ exitNowHandler(int sigtype) async_exit = true; } +/// Abort signal handler. +void +abortHandler(int sigtype) +{ + cerr << "Program aborted at cycle " << curTick << endl; + +#if TRACING_ON + // dump trace buffer, if there is one + Trace::theLog.dump(cerr); +#endif +} + /// Simulator executable name const char *myProgName = ""; @@ -232,6 +244,7 @@ main(int argc, char **argv) signal(SIGUSR1, dumpStatsHandler); // dump intermediate stats signal(SIGUSR2, dumprstStatsHandler); // dump and reset stats signal(SIGINT, exitNowHandler); // dump final stats and exit + signal(SIGABRT, abortHandler); sayHello(cerr); |