diff --git a/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp b/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp index 59fbe111..6457333d 100644 --- a/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp +++ b/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp @@ -27,36 +27,31 @@ void AvrGdbRsp::loadRegisterNumberToDescriptorMapping() { throw Exception("Unexpected general purpose register count"); } - auto& gpRegisterDescriptors = registerDescriptorsByType.at(TargetRegisterType::GENERAL_PURPOSE_REGISTER); - std::sort( - gpRegisterDescriptors.begin(), - gpRegisterDescriptors.end(), - [](const TargetRegisterDescriptor& descriptorA, const TargetRegisterDescriptor& descriptorB) { - return descriptorA.startAddress.value() < descriptorB.startAddress.value(); - } - ); - for (std::size_t descriptorIndex = 0; descriptorIndex < gpRegisterDescriptors.size(); descriptorIndex++) { + std::size_t descriptorIndex = 0; + for (auto& descriptor : gpRegisterDescriptors) { this->registerNumberToDescriptorMapping.insert(std::pair( static_cast(descriptorIndex), - gpRegisterDescriptors[descriptorIndex] + descriptor )); + + descriptorIndex++; } this->registerNumberToDescriptorMapping.insert(std::pair( static_cast(32), - registerDescriptorsByType.at(TargetRegisterType::STATUS_REGISTER).front() + *(registerDescriptorsByType.at(TargetRegisterType::STATUS_REGISTER).begin()) )); this->registerNumberToDescriptorMapping.insert(std::pair( static_cast(33), - registerDescriptorsByType.at(TargetRegisterType::STACK_POINTER).front() + *(registerDescriptorsByType.at(TargetRegisterType::STACK_POINTER).begin()) )); this->registerNumberToDescriptorMapping.insert(std::pair( static_cast(34), - registerDescriptorsByType.at(TargetRegisterType::PROGRAM_COUNTER).front() + *(registerDescriptorsByType.at(TargetRegisterType::PROGRAM_COUNTER).begin()) )); } diff --git a/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp b/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp index c2b4ed00..52f6094e 100644 --- a/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp +++ b/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp @@ -268,12 +268,12 @@ void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadRegisters& packet) { if (packet.registerNumber.has_value()) { Logger::debug("Reading register number: " + std::to_string(packet.registerNumber.value())); - descriptors.push_back(this->getRegisterDescriptorFromNumber(packet.registerNumber.value())); + descriptors.insert(this->getRegisterDescriptorFromNumber(packet.registerNumber.value())); } else { // Read all descriptors for (auto& descriptor : registerNumberToDescriptorMapping.getMap()) { - descriptors.push_back(descriptor.second); + descriptors.insert(descriptor.second); } } diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp index 558a8bbb..f9c43017 100644 --- a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp @@ -67,7 +67,7 @@ void Avr8::loadTargetRegisterDescriptors() { generalPurposeRegisterDescriptor.name = "R" + std::to_string(i); generalPurposeRegisterDescriptor.groupName = "General Purpose CPU Registers"; - this->targetRegisterDescriptorsByType[generalPurposeRegisterDescriptor.type].emplace_back( + this->targetRegisterDescriptorsByType[generalPurposeRegisterDescriptor.type].insert( generalPurposeRegisterDescriptor ); } @@ -101,13 +101,13 @@ void Avr8::loadTargetRegisterDescriptors() { programCounterRegisterDescriptor.groupName = "CPU"; programCounterRegisterDescriptor.description = "Program Counter"; - this->targetRegisterDescriptorsByType[stackPointerRegisterDescriptor.type].emplace_back( + this->targetRegisterDescriptorsByType[stackPointerRegisterDescriptor.type].insert( stackPointerRegisterDescriptor ); - this->targetRegisterDescriptorsByType[statusRegisterDescriptor.type].emplace_back( + this->targetRegisterDescriptorsByType[statusRegisterDescriptor.type].insert( statusRegisterDescriptor ); - this->targetRegisterDescriptorsByType[programCounterRegisterDescriptor.type].emplace_back( + this->targetRegisterDescriptorsByType[programCounterRegisterDescriptor.type].insert( programCounterRegisterDescriptor ); } diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.hpp b/src/Targets/Microchip/AVR/AVR8/Avr8.hpp index 16910fd2..9709382b 100644 --- a/src/Targets/Microchip/AVR/AVR8/Avr8.hpp +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.hpp @@ -29,7 +29,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit std::optional targetParameters; std::map padDescriptorsByName; std::map targetVariantsById; - std::map> targetRegisterDescriptorsByType; + std::map targetRegisterDescriptorsByType; /** * Resolves the appropriate TDF for the AVR8 target and populates this->targetDescriptionFile. diff --git a/src/Targets/TargetDescriptor.hpp b/src/Targets/TargetDescriptor.hpp index 34a690b1..99f71bf4 100644 --- a/src/Targets/TargetDescriptor.hpp +++ b/src/Targets/TargetDescriptor.hpp @@ -15,7 +15,7 @@ namespace Bloom::Targets std::string name; std::string id; std::uint32_t ramSize; - std::map> registerDescriptorsByType; + std::map registerDescriptorsByType; std::vector variants; }; } diff --git a/src/Targets/TargetRegister.hpp b/src/Targets/TargetRegister.hpp index 805518c1..c11224cf 100644 --- a/src/Targets/TargetRegister.hpp +++ b/src/Targets/TargetRegister.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include "TargetMemory.hpp" @@ -76,7 +77,7 @@ namespace Bloom::Targets }; using TargetRegisters = std::vector; - using TargetRegisterDescriptors = std::vector; + using TargetRegisterDescriptors = std::set; } namespace std