Renamed GDB & TargetConrollerConsole read & write register functions/classes to a more generic name.

This commit is contained in:
Nav
2021-08-07 17:07:04 +01:00
parent 3be850fbbf
commit fd719f1cda
11 changed files with 96 additions and 96 deletions

View File

@@ -24,10 +24,10 @@ std::unique_ptr<CommandPacket> CommandPacketFactory::create(std::vector<unsigned
return std::make_unique<CommandPackets::SupportedFeaturesQuery>(rawPacket);
} else if (rawPacketString[1] == 'g' || rawPacketString[1] == 'p') {
return std::make_unique<CommandPackets::ReadGeneralRegisters>(rawPacket);
return std::make_unique<CommandPackets::ReadRegisters>(rawPacket);
} else if (rawPacketString[1] == 'P') {
return std::make_unique<CommandPackets::WriteGeneralRegister>(rawPacket);
return std::make_unique<CommandPackets::WriteRegister>(rawPacket);
} else if (rawPacketString[1] == 'c') {
return std::make_unique<CommandPackets::ContinueExecution>(rawPacket);

View File

@@ -7,8 +7,8 @@
#include "CommandPacket.hpp"
#include "InterruptExecution.hpp"
#include "SupportedFeaturesQuery.hpp"
#include "ReadGeneralRegisters.hpp"
#include "WriteGeneralRegister.hpp"
#include "ReadRegisters.hpp"
#include "WriteRegister.hpp"
#include "ReadMemory.hpp"
#include "WriteMemory.hpp"
#include "StepExecution.hpp"

View File

@@ -1,15 +1,15 @@
#include "ReadGeneralRegisters.hpp"
#include "ReadRegisters.hpp"
#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp"
using namespace Bloom::DebugServers::Gdb::CommandPackets;
void ReadGeneralRegisters::init() {
void ReadRegisters::init() {
if (this->data.size() >= 2 && this->data.front() == 'p') {
// This command packet is requesting a specific register
this->registerNumber = static_cast<size_t>(std::stoi(std::string(this->data.begin() + 1, this->data.end())));
}
}
void ReadGeneralRegisters::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) {
void ReadRegisters::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) {
gdbRspDebugServer.handleGdbPacket(*this);
}

View File

@@ -7,11 +7,11 @@
namespace Bloom::DebugServers::Gdb::CommandPackets
{
/**
* The ReadGeneralRegisters class implements a structure for "g" and "p" command packets. In response to these
* The ReadRegisters class implements a structure for "g" and "p" command packets. In response to these
* packets, the server is expected to send register values for all registers (for "g" packets) or for a single
* register (for "p" packets).
*/
class ReadGeneralRegisters: public CommandPacket
class ReadRegisters: public CommandPacket
{
private:
void init();
@@ -26,7 +26,7 @@ namespace Bloom::DebugServers::Gdb::CommandPackets
*/
std::optional<int> registerNumber;
explicit ReadGeneralRegisters(const std::vector<unsigned char>& rawPacket): CommandPacket(rawPacket) {
explicit ReadRegisters(const std::vector<unsigned char>& rawPacket): CommandPacket(rawPacket) {
init();
};

View File

@@ -1,11 +1,11 @@
#include "WriteGeneralRegister.hpp"
#include "WriteRegister.hpp"
#include "src/DebugServers/GdbRsp/GdbRspDebugServer.hpp"
#include "src/Exceptions/Exception.hpp"
using namespace Bloom::DebugServers::Gdb::CommandPackets;
using namespace Bloom::Exceptions;
void WriteGeneralRegister::init() {
void WriteRegister::init() {
// The P packet updates a single register
auto packet = std::string(this->data.begin(), this->data.end());
@@ -23,6 +23,6 @@ void WriteGeneralRegister::init() {
std::reverse(this->registerValue.begin(), this->registerValue.end());
}
void WriteGeneralRegister::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) {
void WriteRegister::dispatchToHandler(Gdb::GdbRspDebugServer& gdbRspDebugServer) {
gdbRspDebugServer.handleGdbPacket(*this);
}

View File

@@ -8,10 +8,10 @@
namespace Bloom::DebugServers::Gdb::CommandPackets
{
/**
* The WriteGeneralRegisters class implements the structure for "P" packets. Upon receiving this packet,
* The WriteRegisters class implements the structure for "P" packets. Upon receiving this packet,
* server is expected to update a register value to the target.
*/
class WriteGeneralRegister: public CommandPacket
class WriteRegister: public CommandPacket
{
private:
void init();
@@ -20,7 +20,7 @@ namespace Bloom::DebugServers::Gdb::CommandPackets
int registerNumber = 0;
std::vector<unsigned char> registerValue;
explicit WriteGeneralRegister(const std::vector<unsigned char>& rawPacket): CommandPacket(rawPacket) {
explicit WriteRegister(const std::vector<unsigned char>& rawPacket): CommandPacket(rawPacket) {
init();
};

View File

@@ -54,19 +54,20 @@ void GdbRspDebugServer::init() {
}
if (::setsockopt(
socketFileDescriptor,
SOL_SOCKET,
SO_REUSEADDR,
&this->enableReuseAddressSocketOption,
sizeof(this->enableReuseAddressSocketOption)) < 0
socketFileDescriptor,
SOL_SOCKET,
SO_REUSEADDR,
&(this->enableReuseAddressSocketOption),
sizeof(this->enableReuseAddressSocketOption)
) < 0
) {
Logger::error("Failed to set socket SO_REUSEADDR option.");
}
if (::bind(
socketFileDescriptor,
reinterpret_cast<const sockaddr*>(&(this->socketAddress)),
sizeof(this->socketAddress)
socketFileDescriptor,
reinterpret_cast<const sockaddr*>(&(this->socketAddress)),
sizeof(this->socketAddress)
) < 0
) {
throw Exception("Failed to bind address. The selected port number ("
@@ -258,11 +259,12 @@ void GdbRspDebugServer::handleGdbPacket(CommandPackets::SupportedFeaturesQuery&
this->clientConnection->writePacket(response);
}
void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadGeneralRegisters& packet) {
Logger::debug("Handling ReadGeneralRegisters packet");
void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadRegisters& packet) {
Logger::debug("Handling ReadRegisters packet");
try {
auto descriptors = TargetRegisterDescriptors();
auto registerNumberToDescriptorMapping = this->getRegisterNumberToDescriptorMapping();
if (packet.registerNumber.has_value()) {
Logger::debug("Reading register number: " + std::to_string(packet.registerNumber.value()));
@@ -270,14 +272,12 @@ void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadGeneralRegisters& pa
} else {
// Read all descriptors
auto descriptorMapping = this->getRegisterNumberToDescriptorMapping();
for (auto& descriptor : descriptorMapping.getMap()) {
for (auto& descriptor : registerNumberToDescriptorMapping.getMap()) {
descriptors.push_back(descriptor.second);
}
}
auto registerSet = this->targetControllerConsole.readGeneralRegisters(descriptors);
auto registerNumberToDescriptorMapping = this->getRegisterNumberToDescriptorMapping();
auto registerSet = this->targetControllerConsole.readRegisters(descriptors);
/*
* Remove any registers that are not mapped to GDB register numbers (as we won't know where to place
@@ -332,14 +332,14 @@ void GdbRspDebugServer::handleGdbPacket(CommandPackets::ReadGeneralRegisters& pa
}
}
void GdbRspDebugServer::handleGdbPacket(CommandPackets::WriteGeneralRegister& packet) {
Logger::debug("Handling WriteGeneralRegisters packet");
void GdbRspDebugServer::handleGdbPacket(CommandPackets::WriteRegister& packet) {
Logger::debug("Handling WriteRegister packet");
try {
auto registerDescriptor = this->getRegisterDescriptorFromNumber(packet.registerNumber);
this->targetControllerConsole.writeGeneralRegisters({
TargetRegister(registerDescriptor, packet.registerValue)
});
this->targetControllerConsole.writeRegisters({
TargetRegister(registerDescriptor, packet.registerValue)
});
this->clientConnection->writePacket(ResponsePacket({'O', 'K'}));
} catch (const Exception& exception) {

View File

@@ -140,10 +140,10 @@ namespace Bloom::DebugServers::Gdb
*
* @return
*/
virtual BiMap<
virtual const BiMap<
GdbRegisterNumber,
Targets::TargetRegisterDescriptor
> getRegisterNumberToDescriptorMapping() = 0;
>& getRegisterNumberToDescriptorMapping() = 0;
/**
* Obtains the appropriate register descriptor from a register number.
@@ -197,14 +197,14 @@ namespace Bloom::DebugServers::Gdb
*
* @param packet
*/
virtual void handleGdbPacket(CommandPackets::ReadGeneralRegisters& packet);
virtual void handleGdbPacket(CommandPackets::ReadRegisters& packet);
/**
* Handles the write general register ("P") command packet.
*
* @param packet
*/
virtual void handleGdbPacket(CommandPackets::WriteGeneralRegister& packet);
virtual void handleGdbPacket(CommandPackets::WriteRegister& packet);
/**
* Handles the continue execution ("c") command packet.