changeset 5962812f80fe in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=5962812f80fe
description:
        sim: Make it possible to override the breakpoint length check.

        The check which makes sure the length of the breakpoint being written 
is the
        same as a MachInst is only correct on fixed instruction width ISAs. 
Instead of
        incorrectly applying that check to all ISAs, this change makes that the
        default check and lets ISA specific GDB classes override it.

diffstat:

 src/base/remote_gdb.cc |  14 ++++++++++----
 src/base/remote_gdb.hh |   2 ++
 2 files changed, 12 insertions(+), 4 deletions(-)

diffs (64 lines):

diff -r 145c436a3854 -r 5962812f80fe src/base/remote_gdb.cc
--- a/src/base/remote_gdb.cc    Wed Dec 03 03:11:00 2014 -0800
+++ b/src/base/remote_gdb.cc    Wed Dec 03 03:27:19 2014 -0800
@@ -520,6 +520,12 @@
     return &system->pcEventQueue;
 }
 
+bool
+BaseRemoteGDB::checkBpLen(size_t len)
+{
+    return len == sizeof(MachInst);
+}
+
 BaseRemoteGDB::HardBreakpoint::HardBreakpoint(BaseRemoteGDB *_gdb, Addr pc)
     : PCEvent(_gdb->getPcEventQueue(), "HardBreakpoint Event", pc),
       gdb(_gdb), refcount(0)
@@ -539,7 +545,7 @@
 bool
 BaseRemoteGDB::insertSoftBreak(Addr addr, size_t len)
 {
-    if (len != sizeof(TheISA::MachInst))
+    if (!checkBpLen(len))
         panic("invalid length\n");
 
     return insertHardBreak(addr, len);
@@ -548,7 +554,7 @@
 bool
 BaseRemoteGDB::removeSoftBreak(Addr addr, size_t len)
 {
-    if (len != sizeof(MachInst))
+    if (!checkBpLen(len))
         panic("invalid length\n");
 
     return removeHardBreak(addr, len);
@@ -557,7 +563,7 @@
 bool
 BaseRemoteGDB::insertHardBreak(Addr addr, size_t len)
 {
-    if (len != sizeof(MachInst))
+    if (!checkBpLen(len))
         panic("invalid length\n");
 
     DPRINTF(GDBMisc, "inserting hardware breakpoint at %#x\n", addr);
@@ -574,7 +580,7 @@
 bool
 BaseRemoteGDB::removeHardBreak(Addr addr, size_t len)
 {
-    if (len != sizeof(MachInst))
+    if (!checkBpLen(len))
         panic("invalid length\n");
 
     DPRINTF(GDBMisc, "removing hardware breakpoint at %#x\n", addr);
diff -r 145c436a3854 -r 5962812f80fe src/base/remote_gdb.hh
--- a/src/base/remote_gdb.hh    Wed Dec 03 03:11:00 2014 -0800
+++ b/src/base/remote_gdb.hh    Wed Dec 03 03:27:19 2014 -0800
@@ -192,6 +192,8 @@
     PCEventQueue *getPcEventQueue();
 
   protected:
+    virtual bool checkBpLen(size_t len);
+
     class HardBreakpoint : public PCEvent
     {
       private:
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to