From 9e29c3b19a3b23e4fb9dbb4ded554c1f303cdeb5 Mon Sep 17 00:00:00 2001 From: Nav Date: Sat, 7 Aug 2021 18:09:12 +0100 Subject: [PATCH] Removed target register descriptor ID --- src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp | 15 ++++++++++++--- src/Targets/Microchip/AVR/AVR8/Avr8.cpp | 5 ++--- src/Targets/TargetRegister.hpp | 5 +---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp b/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp index dec9fa1e..59fbe111 100644 --- a/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp +++ b/src/DebugServers/GdbRsp/AvrGdbRsp/AvrGdbRsp.cpp @@ -27,11 +27,20 @@ void AvrGdbRsp::loadRegisterNumberToDescriptorMapping() { throw Exception("Unexpected general purpose register count"); } + auto& gpRegisterDescriptors = registerDescriptorsByType.at(TargetRegisterType::GENERAL_PURPOSE_REGISTER); - for (const auto& gpRegisterDescriptor : gpRegisterDescriptors) { + 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++) { this->registerNumberToDescriptorMapping.insert(std::pair( - static_cast(gpRegisterDescriptor.id.value()), - gpRegisterDescriptor + static_cast(descriptorIndex), + gpRegisterDescriptors[descriptorIndex] )); } diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp index 728c9130..558a8bbb 100644 --- a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp @@ -58,11 +58,10 @@ void Avr8::loadTargetRegisterDescriptors() { * All AVR8 targets possess 32 general purpose CPU registers. These are not described in the TDF, so we * construct the descriptors for them here. */ + auto gpRegisterStartAddress = this->targetParameters->gpRegisterStartAddress.value_or(0); for (std::uint8_t i = 0; i <= 31; i++) { auto generalPurposeRegisterDescriptor = TargetRegisterDescriptor(); - generalPurposeRegisterDescriptor.id = i; - generalPurposeRegisterDescriptor.startAddress = - this->targetParameters->gpRegisterStartAddress.value_or(0) + i; + generalPurposeRegisterDescriptor.startAddress = gpRegisterStartAddress + i; generalPurposeRegisterDescriptor.size = 1; generalPurposeRegisterDescriptor.type = TargetRegisterType::GENERAL_PURPOSE_REGISTER; generalPurposeRegisterDescriptor.name = "R" + std::to_string(i); diff --git a/src/Targets/TargetRegister.hpp b/src/Targets/TargetRegister.hpp index 01fd2266..aa809cd8 100644 --- a/src/Targets/TargetRegister.hpp +++ b/src/Targets/TargetRegister.hpp @@ -26,17 +26,15 @@ namespace Bloom::Targets std::uint32_t size = 0; TargetRegisterType type = TargetRegisterType::OTHER; - std::optional id; std::optional name = ""; std::optional groupName; std::optional description; TargetRegisterDescriptor() = default; explicit TargetRegisterDescriptor(TargetRegisterType type): type(type) {}; - TargetRegisterDescriptor(std::size_t id, TargetRegisterType type): id(id), type(type) {}; bool operator == (const TargetRegisterDescriptor& other) const { - return this->id == other.id && this->type == other.type; + return this->startAddress.value_or(0) == other.startAddress.value_or(0) && this->type == other.type; } }; @@ -53,7 +51,6 @@ namespace Bloom::Targets } }; - using TargetRegisterMap = std::map; using TargetRegisters = std::vector; using TargetRegisterDescriptors = std::vector; }