From 5d58bbde07321bc5f1edef88c5d70a0da958517d Mon Sep 17 00:00:00 2001 From: Nav Date: Thu, 24 Mar 2022 19:04:18 +0000 Subject: [PATCH] New GDB target descriptor class --- src/DebugServers/GdbRsp/TargetDescriptor.hpp | 50 ++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/DebugServers/GdbRsp/TargetDescriptor.hpp diff --git a/src/DebugServers/GdbRsp/TargetDescriptor.hpp b/src/DebugServers/GdbRsp/TargetDescriptor.hpp new file mode 100644 index 00000000..3aa211cc --- /dev/null +++ b/src/DebugServers/GdbRsp/TargetDescriptor.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include +#include + +#include "RegisterDescriptor.hpp" + +#include "src/Targets/TargetDescriptor.hpp" +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::DebugServers::Gdb +{ + struct TargetDescriptor + { + const Bloom::Targets::TargetDescriptor& targetDescriptor; + + explicit TargetDescriptor(const Bloom::Targets::TargetDescriptor& targetDescriptor) + : targetDescriptor(targetDescriptor) + {} + + /** + * Should retrieve the GDB register number, given a target register descriptor. Or std::nullopt if the target + * register descriptor isn't mapped to any GDB register. + * + * @param registerDescriptor + * @return + */ + virtual std::optional getRegisterNumberFromTargetRegisterDescriptor( + const Targets::TargetRegisterDescriptor& registerDescriptor + ) = 0; + + /** + * Should retrieve the GDB register descriptor for a given GDB register number. + * + * @param number + * @return + */ + virtual const RegisterDescriptor& getRegisterDescriptorFromNumber(GdbRegisterNumberType number) = 0; + + /** + * Should retrieve the mapped target register descriptor for a given GDB register number. + * + * @param number + * @return + */ + virtual const Targets::TargetRegisterDescriptor& getTargetRegisterDescriptorFromNumber( + GdbRegisterNumberType number + ) = 0; + }; +}