#pragma once #include #include #include #include "TargetMemory.hpp" namespace Targets { enum class TargetBreakCause: std::uint8_t { BREAKPOINT, UNKNOWN, }; struct TargetBreakpoint { enum class Type: std::uint8_t { HARDWARE, SOFTWARE, }; /** * Byte address of the breakpoint. */ TargetMemoryAddress address = 0; Type type = Type::SOFTWARE; TargetBreakpoint() = default; explicit TargetBreakpoint(TargetMemoryAddress address, Type type = Type::SOFTWARE) : address(address) , type(type) {}; }; struct BreakpointResources { std::optional maximumHardwareBreakpoints; std::optional maximumSoftwareBreakpoints; std::uint16_t reservedHardwareBreakpoints; BreakpointResources( std::optional maximumHardwareBreakpoints, std::optional maximumSoftwareBreakpoints, std::uint16_t reservedHardwareBreakpoints ) : maximumHardwareBreakpoints(maximumHardwareBreakpoints) , maximumSoftwareBreakpoints(maximumSoftwareBreakpoints) , reservedHardwareBreakpoints(reservedHardwareBreakpoints) { assert( !this->maximumHardwareBreakpoints.has_value() || this->maximumHardwareBreakpoints >= this->reservedHardwareBreakpoints ); } }; }