diff --git a/src/base/remote_gdb.hh b/src/base/remote_gdb.hh --- a/src/base/remote_gdb.hh +++ b/src/base/remote_gdb.hh @@ -217,6 +217,8 @@ PCEventQueue *getPcEventQueue(); protected: + virtual bool checkBpLen(size_t len); + class HardBreakpoint : public PCEvent { private: # Node ID 87cda70be35de21ce58722240c8dcb335e85becc # Parent 140bd3e1bbc738e6f871224adb08deb47e4b50b0 diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc --- a/src/base/remote_gdb.cc +++ b/src/base/remote_gdb.cc @@ -534,6 +534,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) @@ -553,7 +559,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); @@ -562,7 +568,7 @@ bool BaseRemoteGDB::removeSoftBreak(Addr addr, size_t len) { - if (len != sizeof(MachInst)) + if (!checkBpLen(len)) panic("invalid length\n"); return removeHardBreak(addr, len); @@ -571,7 +577,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); @@ -588,7 +594,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);