diff --git a/src/DebugServer/Gdb/AvrGdb/AvrGdbRsp.cpp b/src/DebugServer/Gdb/AvrGdb/AvrGdbRsp.cpp index a925544d..096a43ad 100644 --- a/src/DebugServer/Gdb/AvrGdb/AvrGdbRsp.cpp +++ b/src/DebugServer/Gdb/AvrGdb/AvrGdbRsp.cpp @@ -29,13 +29,6 @@ namespace Bloom::DebugServer::Gdb::AvrGdb this->gdbTargetDescriptor = TargetDescriptor( this->targetControllerService.getTargetDescriptor() ); - - if (!this->debugServerConfig.breakpointCachingEnabled) { - Logger::warning( - "Breakpoint caching has been disabled - this could result in excessive wear of the AVR target's" - " flash memory" - ); - } } std::unique_ptr AvrGdbRsp::resolveCommandPacket( diff --git a/src/DebugServer/Gdb/CommandPackets/CommandPacket.hpp b/src/DebugServer/Gdb/CommandPackets/CommandPacket.hpp index f7bbc8da..5c17448e 100644 --- a/src/DebugServer/Gdb/CommandPackets/CommandPacket.hpp +++ b/src/DebugServer/Gdb/CommandPackets/CommandPacket.hpp @@ -40,10 +40,6 @@ namespace Bloom::DebugServer::Gdb::CommandPackets : Packet(rawPacket) {} - virtual bool requiresBreakpointFlush() const { - return false; - } - /** * Should handle the command for the current active debug session. * diff --git a/src/DebugServer/Gdb/CommandPackets/ContinueExecution.hpp b/src/DebugServer/Gdb/CommandPackets/ContinueExecution.hpp index de29fbe0..0253392f 100644 --- a/src/DebugServer/Gdb/CommandPackets/ContinueExecution.hpp +++ b/src/DebugServer/Gdb/CommandPackets/ContinueExecution.hpp @@ -28,10 +28,6 @@ namespace Bloom::DebugServer::Gdb::CommandPackets explicit ContinueExecution(const RawPacket& rawPacket); - bool requiresBreakpointFlush() const override { - return true; - } - void handle( DebugSession& debugSession, Services::TargetControllerService& targetControllerService diff --git a/src/DebugServer/Gdb/CommandPackets/Detach.hpp b/src/DebugServer/Gdb/CommandPackets/Detach.hpp index b80a709e..8289e159 100644 --- a/src/DebugServer/Gdb/CommandPackets/Detach.hpp +++ b/src/DebugServer/Gdb/CommandPackets/Detach.hpp @@ -9,10 +9,6 @@ namespace Bloom::DebugServer::Gdb::CommandPackets public: explicit Detach(const RawPacket& rawPacket); - bool requiresBreakpointFlush() const override { - return true; - } - void handle( DebugSession& debugSession, Services::TargetControllerService& targetControllerService diff --git a/src/DebugServer/Gdb/CommandPackets/RemoveBreakpoint.cpp b/src/DebugServer/Gdb/CommandPackets/RemoveBreakpoint.cpp index 350f4e17..199f333d 100644 --- a/src/DebugServer/Gdb/CommandPackets/RemoveBreakpoint.cpp +++ b/src/DebugServer/Gdb/CommandPackets/RemoveBreakpoint.cpp @@ -54,13 +54,6 @@ namespace Bloom::DebugServer::Gdb::CommandPackets Logger::debug("Handling RemoveBreakpoint packet"); try { - if (debugSession.serverConfig.breakpointCachingEnabled) { - debugSession.breakpointAddressesPendingRemoval.insert(this->address); - debugSession.connection.writePacket(OkResponsePacket()); - - return; - } - Logger::debug("Removing breakpoint at address " + std::to_string(this->address)); targetControllerService.removeBreakpoint(TargetBreakpoint(this->address)); diff --git a/src/DebugServer/Gdb/CommandPackets/SetBreakpoint.cpp b/src/DebugServer/Gdb/CommandPackets/SetBreakpoint.cpp index 240951da..0cce9b63 100644 --- a/src/DebugServer/Gdb/CommandPackets/SetBreakpoint.cpp +++ b/src/DebugServer/Gdb/CommandPackets/SetBreakpoint.cpp @@ -54,18 +54,8 @@ namespace Bloom::DebugServer::Gdb::CommandPackets Logger::debug("Handling SetBreakpoint packet"); try { - if ( - !debugSession.serverConfig.breakpointCachingEnabled - || !debugSession.breakpointAddresses.contains(this->address) - ) { - targetControllerService.setBreakpoint(TargetBreakpoint(this->address)); - } - - if (debugSession.serverConfig.breakpointCachingEnabled) { - debugSession.breakpointAddresses.insert(this->address); - debugSession.breakpointAddressesPendingRemoval.erase(this->address); - } + targetControllerService.setBreakpoint(TargetBreakpoint(this->address)); debugSession.connection.writePacket(OkResponsePacket()); } catch (const Exception& exception) { diff --git a/src/DebugServer/Gdb/CommandPackets/StepExecution.hpp b/src/DebugServer/Gdb/CommandPackets/StepExecution.hpp index 01e45dcc..a433fe36 100644 --- a/src/DebugServer/Gdb/CommandPackets/StepExecution.hpp +++ b/src/DebugServer/Gdb/CommandPackets/StepExecution.hpp @@ -23,10 +23,6 @@ namespace Bloom::DebugServer::Gdb::CommandPackets explicit StepExecution(const RawPacket& rawPacket); - bool requiresBreakpointFlush() const override { - return false; - } - void handle( DebugSession& debugSession, Services::TargetControllerService& targetControllerService diff --git a/src/DebugServer/Gdb/DebugSession.hpp b/src/DebugServer/Gdb/DebugSession.hpp index 68316249..715efda1 100644 --- a/src/DebugServer/Gdb/DebugSession.hpp +++ b/src/DebugServer/Gdb/DebugSession.hpp @@ -2,7 +2,6 @@ #include #include -#include #include "TargetDescriptor.hpp" #include "GdbDebugServerConfig.hpp" @@ -38,13 +37,6 @@ namespace Bloom::DebugServer::Gdb */ const GdbDebugServerConfig& serverConfig; - /** - * Internal bookkeeping of breakpoints managed by GDB. These will both remain empty if the user has disabled - * breakpoint caching. - */ - std::unordered_set breakpointAddresses; - std::unordered_set breakpointAddressesPendingRemoval; - /** * When the GDB client is waiting for the target to halt, this is set to true so we know when to notify the * client. diff --git a/src/DebugServer/Gdb/GdbDebugServerConfig.cpp b/src/DebugServer/Gdb/GdbDebugServerConfig.cpp index 5e50ca8d..14d839ee 100644 --- a/src/DebugServer/Gdb/GdbDebugServerConfig.cpp +++ b/src/DebugServer/Gdb/GdbDebugServerConfig.cpp @@ -30,17 +30,5 @@ namespace Bloom::DebugServer::Gdb ); } } - - if (debugServerConfig.debugServerNode["enableBreakpointCaching"]) { - if (YamlUtilities::isCastable(debugServerConfig.debugServerNode["enableBreakpointCaching"])) { - this->breakpointCachingEnabled = debugServerConfig.debugServerNode["enableBreakpointCaching"].as(); - - } else { - Logger::error( - "Invalid GDB debug server config parameter ('enableBreakpointCaching') provided - value must be " - "castable to a boolean. The parameter will be ignored." - ); - } - } } } diff --git a/src/DebugServer/Gdb/GdbDebugServerConfig.hpp b/src/DebugServer/Gdb/GdbDebugServerConfig.hpp index b1d9c750..babde8ca 100644 --- a/src/DebugServer/Gdb/GdbDebugServerConfig.hpp +++ b/src/DebugServer/Gdb/GdbDebugServerConfig.hpp @@ -24,19 +24,6 @@ namespace Bloom::DebugServer::Gdb */ std::string listeningAddress = "127.0.0.1"; - /** - * GDB tends to remove all breakpoints when target execution stops, and then installs them again, just before - * resuming target execution. This can result in excessive wearing of the target's program memory, as well as - * a negative impact on performance. - * - * When breakpoint caching is enabled, Bloom's GDB server will perform internal bookkeeping of the breakpoints - * installed and removed via GDB. Then, just before resuming target execution, it will only apply the necessary - * changes to the target, avoiding the excessive wear and IO. - * - * This param is optional, and is enabled by default. - */ - bool breakpointCachingEnabled = true; - explicit GdbDebugServerConfig(const DebugServerConfig& debugServerConfig); }; } diff --git a/src/DebugServer/Gdb/GdbRspDebugServer.cpp b/src/DebugServer/Gdb/GdbRspDebugServer.cpp index 28561a6b..eb4ba5c1 100644 --- a/src/DebugServer/Gdb/GdbRspDebugServer.cpp +++ b/src/DebugServer/Gdb/GdbRspDebugServer.cpp @@ -184,10 +184,6 @@ namespace Bloom::DebugServer::Gdb const auto commandPacket = this->waitForCommandPacket(); if (commandPacket) { - if (this->debugServerConfig.breakpointCachingEnabled && commandPacket->requiresBreakpointFlush()) { - this->flushBreakpointRemovals(); - } - commandPacket->handle(this->activeDebugSession.value(), this->targetControllerService); } @@ -372,28 +368,4 @@ namespace Bloom::DebugServer::Gdb return; } } - - void GdbRspDebugServer::flushBreakpointRemovals() { - Logger::debug( - "Removing " + std::to_string(this->activeDebugSession->breakpointAddressesPendingRemoval.size()) - + " breakpoint(s)" - ); - - for (const auto& breakpointAddress : this->activeDebugSession->breakpointAddressesPendingRemoval) { - try { - Logger::debug("Removing breakpoint at address " + std::to_string(breakpointAddress)); - - this->targetControllerService.removeBreakpoint(Targets::TargetBreakpoint(breakpointAddress)); - this->activeDebugSession->breakpointAddresses.erase(breakpointAddress); - - } catch (const Exception& exception) { - Logger::error( - "Failed to remove breakpoint at address " + std::to_string(breakpointAddress) + " from target - " - + exception.getMessage() - ); - } - } - - this->activeDebugSession->breakpointAddressesPendingRemoval.clear(); - } } diff --git a/src/DebugServer/Gdb/GdbRspDebugServer.hpp b/src/DebugServer/Gdb/GdbRspDebugServer.hpp index 30709845..983ad0b4 100644 --- a/src/DebugServer/Gdb/GdbRspDebugServer.hpp +++ b/src/DebugServer/Gdb/GdbRspDebugServer.hpp @@ -197,10 +197,5 @@ namespace Bloom::DebugServer::Gdb * a "stop reply" packet to the client once the target execution stops. */ void onTargetExecutionStopped(const Events::TargetExecutionStopped&); - - /** - * Actions any pending breakpoint removals. - */ - void flushBreakpointRemovals(); }; }