From acc96fd6d1e9946de9521fd05d782579f8a04ddc Mon Sep 17 00:00:00 2001 From: Nav Date: Sat, 30 Apr 2022 22:45:46 +0100 Subject: [PATCH] Replaced RemoveBreakpointOnTarget event with TC command --- .../Events/BreakpointRemovedOnTarget.hpp | 23 -------------- src/EventManager/Events/Event.hpp | 2 -- src/EventManager/Events/Events.hpp | 2 -- .../Events/RemoveBreakpointOnTarget.hpp | 29 ------------------ .../Commands/CommandTypes.hpp | 1 + .../Commands/RemoveBreakpoint.hpp | 30 +++++++++++++++++++ .../TargetControllerComponent.cpp | 26 ++++++---------- .../TargetControllerComponent.hpp | 10 ++----- .../TargetControllerConsole.cpp | 10 ++++--- 9 files changed, 48 insertions(+), 85 deletions(-) delete mode 100644 src/EventManager/Events/BreakpointRemovedOnTarget.hpp delete mode 100644 src/EventManager/Events/RemoveBreakpointOnTarget.hpp create mode 100644 src/TargetController/Commands/RemoveBreakpoint.hpp diff --git a/src/EventManager/Events/BreakpointRemovedOnTarget.hpp b/src/EventManager/Events/BreakpointRemovedOnTarget.hpp deleted file mode 100644 index 52908d9d..00000000 --- a/src/EventManager/Events/BreakpointRemovedOnTarget.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include - -#include "Event.hpp" - -namespace Bloom::Events -{ - class BreakpointRemovedOnTarget: public Event - { - public: - static constexpr EventType type = EventType::BREAKPOINT_REMOVED_ON_TARGET; - static inline const std::string name = "BreakpointRemovedOnTarget"; - - [[nodiscard]] EventType getType() const override { - return BreakpointRemovedOnTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return BreakpointRemovedOnTarget::name; - } - }; -} diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp index 2c841e81..1caa4524 100644 --- a/src/EventManager/Events/Event.hpp +++ b/src/EventManager/Events/Event.hpp @@ -29,8 +29,6 @@ namespace Bloom::Events TARGET_EXECUTION_RESUMED, TARGET_EXECUTION_STOPPED, MEMORY_WRITTEN_TO_TARGET, - REMOVE_BREAKPOINT_ON_TARGET, - BREAKPOINT_REMOVED_ON_TARGET, SET_PROGRAM_COUNTER_ON_TARGET, PROGRAM_COUNTER_SET_ON_TARGET, EXTRACT_TARGET_DESCRIPTOR, diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp index 788b751b..5d41d233 100644 --- a/src/EventManager/Events/Events.hpp +++ b/src/EventManager/Events/Events.hpp @@ -16,8 +16,6 @@ #include "TargetExecutionResumed.hpp" #include "TargetExecutionStopped.hpp" #include "MemoryWrittenToTarget.hpp" -#include "RemoveBreakpointOnTarget.hpp" -#include "BreakpointRemovedOnTarget.hpp" #include "SetProgramCounterOnTarget.hpp" #include "ProgramCounterSetOnTarget.hpp" #include "ExtractTargetDescriptor.hpp" diff --git a/src/EventManager/Events/RemoveBreakpointOnTarget.hpp b/src/EventManager/Events/RemoveBreakpointOnTarget.hpp deleted file mode 100644 index 949f1194..00000000 --- a/src/EventManager/Events/RemoveBreakpointOnTarget.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include -#include - -#include "Event.hpp" -#include "BreakpointRemovedOnTarget.hpp" -#include "src/Targets/TargetBreakpoint.hpp" - -namespace Bloom::Events -{ - class RemoveBreakpointOnTarget: public Event - { - public: - using TargetControllerResponseType = BreakpointRemovedOnTarget; - - static constexpr EventType type = EventType::REMOVE_BREAKPOINT_ON_TARGET; - static inline const std::string name = "RemoveBreakpointOnTarget"; - Targets::TargetBreakpoint breakpoint; - - [[nodiscard]] EventType getType() const override { - return RemoveBreakpointOnTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return RemoveBreakpointOnTarget::name; - } - }; -} diff --git a/src/TargetController/Commands/CommandTypes.hpp b/src/TargetController/Commands/CommandTypes.hpp index 0036b44b..cde70f19 100644 --- a/src/TargetController/Commands/CommandTypes.hpp +++ b/src/TargetController/Commands/CommandTypes.hpp @@ -18,5 +18,6 @@ namespace Bloom::TargetController::Commands STEP_TARGET_EXECUTION, WRITE_TARGET_MEMORY, SET_BREAKPOINT, + REMOVE_BREAKPOINT, }; } diff --git a/src/TargetController/Commands/RemoveBreakpoint.hpp b/src/TargetController/Commands/RemoveBreakpoint.hpp new file mode 100644 index 00000000..94e4ddf1 --- /dev/null +++ b/src/TargetController/Commands/RemoveBreakpoint.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "Command.hpp" + +#include "src/Targets/TargetBreakpoint.hpp" + +namespace Bloom::TargetController::Commands +{ + class RemoveBreakpoint: public Command + { + public: + static constexpr CommandType type = CommandType::REMOVE_BREAKPOINT; + static inline const std::string name = "RemoveBreakpoint"; + + Targets::TargetBreakpoint breakpoint; + + RemoveBreakpoint() = default; + explicit RemoveBreakpoint(const Targets::TargetBreakpoint& breakpoint) + : breakpoint(breakpoint) + {}; + + [[nodiscard]] CommandType getType() const override { + return RemoveBreakpoint::type; + } + + [[nodiscard]] bool requiresStoppedTargetState() const override { + return true; + } + }; +} diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index a59d413b..91862589 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -32,6 +32,7 @@ namespace Bloom::TargetController using Commands::WriteTargetMemory; using Commands::StepTargetExecution; using Commands::SetBreakpoint; + using Commands::RemoveBreakpoint; using Responses::Response; using Responses::TargetRegistersRead; @@ -395,10 +396,10 @@ namespace Bloom::TargetController this->deregisterCommandHandler(WriteTargetMemory::type); this->deregisterCommandHandler(StepTargetExecution::type); this->deregisterCommandHandler(SetBreakpoint::type); + this->deregisterCommandHandler(RemoveBreakpoint::type); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); - this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); @@ -460,6 +461,10 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::handleSetBreakpoint, this, std::placeholders::_1) ); + this->registerCommandHandler( + std::bind(&TargetControllerComponent::handleRemoveBreakpoint, this, std::placeholders::_1) + ); + this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onDebugSessionFinishedEvent, this, std::placeholders::_1) ); @@ -468,10 +473,6 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::onExtractTargetDescriptor, this, std::placeholders::_1) ); - this->eventListener->registerCallbackForEventType( - std::bind(&TargetControllerComponent::onRemoveBreakpointEvent, this, std::placeholders::_1) - ); - this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onSetProgramCounterEvent, this, std::placeholders::_1) ); @@ -865,18 +866,9 @@ namespace Bloom::TargetController return std::make_unique(); } - void TargetControllerComponent::onRemoveBreakpointEvent(const Events::RemoveBreakpointOnTarget& event) { - try { - this->target->removeBreakpoint(event.breakpoint.address); - auto breakpointRemovedEvent = std::make_shared(); - breakpointRemovedEvent->correlationId = event.id; - - EventManager::triggerEvent(breakpointRemovedEvent); - - } catch (const TargetOperationFailure& exception) { - Logger::error("Failed to remove breakpoint on target - " + exception.getMessage()); - this->emitErrorEvent(event.id, exception.getMessage()); - } + std::unique_ptr TargetControllerComponent::handleRemoveBreakpoint(RemoveBreakpoint& command) { + this->target->removeBreakpoint(command.breakpoint.address); + return std::make_unique(); } void TargetControllerComponent::onSetProgramCounterEvent(const Events::SetProgramCounterOnTarget& event) { diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index beaf43ad..6f3b809f 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -28,6 +28,7 @@ #include "Commands/WriteTargetMemory.hpp" #include "Commands/StepTargetExecution.hpp" #include "Commands/SetBreakpoint.hpp" +#include "Commands/RemoveBreakpoint.hpp" // Responses #include "Responses/Response.hpp" @@ -308,14 +309,7 @@ namespace Bloom::TargetController std::unique_ptr handleWriteTargetMemory(Commands::WriteTargetMemory& command); std::unique_ptr handleStepTargetExecution(Commands::StepTargetExecution& command); std::unique_ptr handleSetBreakpoint(Commands::SetBreakpoint& command); - - /** - * Will attempt to remove a breakpoint at the specified address, on the target. On success, the - * BreakpointRemovedOnTarget event is emitted. - * - * @param event - */ - void onRemoveBreakpointEvent(const Events::RemoveBreakpointOnTarget& event); + std::unique_ptr handleRemoveBreakpoint(Commands::RemoveBreakpoint& command); /** * Will update the program counter value on the target. On success, a ProgramCounterSetOnTarget event is diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index a0c638e7..fd8d7e9d 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -15,6 +15,7 @@ #include "Commands/WriteTargetMemory.hpp" #include "Commands/StepTargetExecution.hpp" #include "Commands/SetBreakpoint.hpp" +#include "Commands/RemoveBreakpoint.hpp" #include "src/Logger/Logger.hpp" @@ -34,6 +35,7 @@ namespace Bloom::TargetController using Commands::WriteTargetMemory; using Commands::StepTargetExecution; using Commands::SetBreakpoint; + using Commands::RemoveBreakpoint; TargetControllerConsole::TargetControllerConsole(EventListener& eventListener) : eventListener(eventListener) @@ -148,10 +150,10 @@ namespace Bloom::TargetController } void TargetControllerConsole::removeBreakpoint(TargetBreakpoint breakpoint) { - auto event = std::make_shared(); - event->breakpoint = breakpoint; - - this->triggerTargetControllerEventAndWaitForResponse(event); + this->commandManager.sendCommandAndWaitForResponse( + std::make_unique(breakpoint), + this->defaultTimeout + ); } Targets::TargetPinStateMappingType TargetControllerConsole::getPinStates(int variantId) {