summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Johnson <Dylan.Johnson@ARM.com>2015-09-02 13:34:19 -0500
committerDylan Johnson <Dylan.Johnson@ARM.com>2015-09-02 13:34:19 -0500
commit71b1c6ce762260d023a799cc861ac6bfc8483c1e (patch)
tree1035209c3e3f05e7cfa1166a93d5379bf5170bd4
parent17dbb49294e06ce3c486648da899973100c633f1 (diff)
downloadgem5-71b1c6ce762260d023a799cc861ac6bfc8483c1e.tar.xz
sim: Add ability to break at specific kernel function
Adds a GDB callable function that sets a breakpoint at the beginning of a kernel function.
-rw-r--r--src/sim/debug.cc10
-rw-r--r--src/sim/debug.hh7
2 files changed, 17 insertions, 0 deletions
diff --git a/src/sim/debug.cc b/src/sim/debug.cc
index dd504778c..b3d73eff7 100644
--- a/src/sim/debug.cc
+++ b/src/sim/debug.cc
@@ -38,6 +38,8 @@
#include "sim/global_event.hh"
#include "sim/sim_events.hh"
#include "sim/sim_exit.hh"
+#include "cpu/pc_event.hh"
+#include "sim/system.hh"
using namespace std;
@@ -87,6 +89,14 @@ schedBreak(Tick when)
warn("need to stop all queues");
}
+void
+breakAtKernelFunction(const char* funcName)
+{
+ System* curSystem = System::systemList[0];
+ curSystem->addKernelFuncEvent<BreakPCEvent>(funcName,
+ "GDB scheduled break", true);
+}
+
///
/// Function to cause the simulator to take a checkpoint from the debugger
///
diff --git a/src/sim/debug.hh b/src/sim/debug.hh
index fc9f0f55e..0d324698d 100644
--- a/src/sim/debug.hh
+++ b/src/sim/debug.hh
@@ -44,6 +44,13 @@
*/
void schedBreak(Tick when);
+/**
+ * Cause the simulator to execute a breakpoint when
+ * the given kernel function is reached
+ * @param funcName the name of the kernel function at which to break
+ */
+void breakAtKernelFunction(const char* funcName);
+
/** Cause the simulator to return to python to create a checkpoint
* @param when the cycle to break
*/