sim: don't ignore SIG_TRAP
authorSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 18 Jan 2016 02:27:46 +0000 (18:27 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 18 Jan 2016 02:27:46 +0000 (18:27 -0800)
By ignoring SIG_TRAP, using --debug-break <N> 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 <N> 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
src/dev/net/ns_gige.cc
src/dev/net/sinic.cc
src/python/m5/main.py
src/sim/init_signals.cc

index d45786a8362b907183fae6fb983742cb72629620..1e8231b66344939442e65eebb360cfbce60fd192 100644 (file)
@@ -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())
index a1dc23b509ffbacc0404bd6dffd34472ba60c74c..3bf0489725b708bf703d3d546f8279bf546c54da 100644 (file)
@@ -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");
                         }
                     }
index d0adb10169671fd09994b647ae7e4bdc7a5254a7..fc75c9ebeed6735ae3a47de273ce43d6317c8137 100644 (file)
@@ -527,7 +527,6 @@ Base::cpuIntrPost(Tick when)
 
     intrTick = when;
     if (intrTick < curTick()) {
-        Debug::breakpoint();
         intrTick = curTick();
     }
 
index 09bf7e92ba86666958602544e6de723a1aebb36e..4adf6e26bf1174c5d6f30e1bdf21de5a3354090a 100644 (file)
@@ -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=':',
index 6fe196a6781a7c18ef31901ec8cba0236a238ce4..81dba189b0ac34f6df53e46b921cbb944a402d0a 100644 (file)
@@ -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);