From 24062ef934ba3f4796aba86759bdb9cd66f06aec Mon Sep 17 00:00:00 2001 From: Nav Date: Sun, 5 Jun 2022 22:42:10 +0100 Subject: [PATCH] Included register descriptors in the TargetInfoMachine GDB command response --- .../Gdb/CommandPackets/TargetInfoMachine.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/DebugServer/Gdb/CommandPackets/TargetInfoMachine.cpp b/src/DebugServer/Gdb/CommandPackets/TargetInfoMachine.cpp index 28dfb7b5..149c096c 100644 --- a/src/DebugServer/Gdb/CommandPackets/TargetInfoMachine.cpp +++ b/src/DebugServer/Gdb/CommandPackets/TargetInfoMachine.cpp @@ -56,11 +56,39 @@ namespace Bloom::DebugServer::Gdb::CommandPackets })); } + auto registerDescriptorsJson = QJsonArray(); + + for (const auto& [registerType, registerDescriptors] : targetDescriptor.registerDescriptorsByType) { + for (const auto& registerDescriptor : registerDescriptors) { + if (!registerDescriptor.name.has_value() || !registerDescriptor.startAddress.has_value()) { + continue; + } + + registerDescriptorsJson.push_back(QJsonObject({ + {"name", QString::fromStdString(registerDescriptor.name.value())}, + {"groupName", QString::fromStdString(registerDescriptor.groupName.value_or("Other"))}, + { + "description", + registerDescriptor.description.has_value() + ? QString::fromStdString(registerDescriptor.description.value()) + : QJsonValue() + }, + {"size", static_cast(registerDescriptor.size)}, + {"startAddress", "0x" + QString::number(registerDescriptor.startAddress.value(), 16)}, + { + "gdbStartAddress", + "0x" + QString::number(registerDescriptor.startAddress.value() | 0x00800000UL, 16) + }, + })); + } + } + return QJsonObject({ {"target", QJsonObject({ {"name", QString::fromStdString(targetDescriptor.name)}, {"id", QString::fromStdString(targetDescriptor.id)}, {"memoryDescriptors", memoryDescriptorsJson}, + {"registerDescriptors", registerDescriptorsJson}, })}, }); }