From 28a0e5a165842bb3e5bed144cc5b64437810e4fb Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Sun, 17 Jan 2016 18:27:46 -0800 Subject: sim: don't ignore SIG_TRAP By ignoring SIG_TRAP, using --debug-break when not connected to a debugger becomes a no-op. Apparently this was intended to be a feature, though the rationale is not clear. If we don't ignore SIG_TRAP, then using --debug-break when not connected to a debugger causes the simulation process to terminate at tick N. This is occasionally useful, e.g., if you just want to collect a trace for a specific window of execution then you can combine this with --debug-start to do exactly that. In addition to not ignoring the signal, this patch also updates the --debug-break help message and deletes a handful of unprotected calls to Debug::breakpoint() that relied on the prior behavior. --- src/arch/alpha/ev5.cc | 5 ----- src/dev/net/ns_gige.cc | 3 --- src/dev/net/sinic.cc | 1 - src/python/m5/main.py | 9 +++++---- src/sim/init_signals.cc | 3 --- 5 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/arch/alpha/ev5.cc b/src/arch/alpha/ev5.cc index d45786a83..1e8231b66 100644 --- a/src/arch/alpha/ev5.cc +++ b/src/arch/alpha/ev5.cc @@ -271,11 +271,6 @@ ISA::setIpr(int idx, uint64_t val, ThreadContext *tc) break; case IPR_IPLR: -#ifdef DEBUG - if (break_ipl != -1 && break_ipl == (int)(val & 0x1f)) - Debug::breakpoint(); -#endif - // only write least significant five bits - interrupt level ipr[idx] = val & 0x1f; if (tc->getKernelStats()) diff --git a/src/dev/net/ns_gige.cc b/src/dev/net/ns_gige.cc index a1dc23b50..3bf048972 100644 --- a/src/dev/net/ns_gige.cc +++ b/src/dev/net/ns_gige.cc @@ -951,7 +951,6 @@ NSGigE::cpuIntrPost(Tick when) intrTick = when; if (intrTick < curTick()) { - Debug::breakpoint(); intrTick = curTick(); } @@ -1725,7 +1724,6 @@ NSGigE::txKick() tcp->sum(cksum(tcp)); txTcpChecksums++; } else { - Debug::breakpoint(); warn_once("TCPPKT set, but not UDP!\n"); } } @@ -1735,7 +1733,6 @@ NSGigE::txKick() ip->sum(cksum(ip)); txIpChecksums++; } else { - Debug::breakpoint(); warn_once("IPPKT set, but not UDP!\n"); } } diff --git a/src/dev/net/sinic.cc b/src/dev/net/sinic.cc index d0adb1016..fc75c9ebe 100644 --- a/src/dev/net/sinic.cc +++ b/src/dev/net/sinic.cc @@ -527,7 +527,6 @@ Base::cpuIntrPost(Tick when) intrTick = when; if (intrTick < curTick()) { - Debug::breakpoint(); intrTick = curTick(); } diff --git a/src/python/m5/main.py b/src/python/m5/main.py index 09bf7e92b..4adf6e26b 100644 --- a/src/python/m5/main.py +++ b/src/python/m5/main.py @@ -94,14 +94,15 @@ def parse_options(): # Debugging options group("Debugging Options") - option("--debug-break", metavar="TIME[,TIME]", action='append', split=',', - help="Tick to create a breakpoint") + option("--debug-break", metavar="TICK[,TICK]", action='append', split=',', + help="Create breakpoint(s) at TICK(s) " \ + "(kills process if no debugger attached)") option("--debug-help", action='store_true', help="Print help on debug flags") option("--debug-flags", metavar="FLAG[,FLAG]", action='append', split=',', help="Sets the flags for debug output (-FLAG disables a flag)") - option("--debug-start", metavar="TIME", type='int', - help="Start debug output at TIME (must be in ticks)") + option("--debug-start", metavar="TICK", type='int', + help="Start debug output at TICK (must be in ticks)") option("--debug-file", metavar="FILE", default="cout", help="Sets the output file for debug [Default: %default]") option("--debug-ignore", metavar="EXPR", action='append', split=':', diff --git a/src/sim/init_signals.cc b/src/sim/init_signals.cc index 6fe196a67..81dba189b 100644 --- a/src/sim/init_signals.cc +++ b/src/sim/init_signals.cc @@ -178,9 +178,6 @@ initSignals() // ignore them signal(SIGFPE, SIG_IGN); - // We use SIGTRAP sometimes for debugging - signal(SIGTRAP, SIG_IGN); - // Dump intermediate stats installSignalHandler(SIGUSR1, dumpStatsHandler); -- cgit v1.2.3