Move away from using const references of std::vector<unsigned char> for target memory buffers. Replaced with std::span<const unsigned char> (via TargetMemoryBufferSpan alias)

This commit is contained in:
Nav
2024-11-16 21:49:49 +00:00
parent eebba986b5
commit 4147af618b
21 changed files with 39 additions and 33 deletions

View File

@@ -10,7 +10,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr::CommandFrames::Avr8
class WriteMemory: public Avr8GenericCommandFrame<std::vector<unsigned char>> class WriteMemory: public Avr8GenericCommandFrame<std::vector<unsigned char>>
{ {
public: public:
WriteMemory(const Avr8MemoryType& type, std::uint32_t address, const Targets::TargetMemoryBuffer& buffer) WriteMemory(const Avr8MemoryType& type, std::uint32_t address, Targets::TargetMemoryBufferSpan buffer)
: Avr8GenericCommandFrame() : Avr8GenericCommandFrame()
{ {
/* /*

View File

@@ -745,7 +745,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) { ) {
if (memorySegmentDescriptor.type == TargetMemorySegmentType::FLASH) { if (memorySegmentDescriptor.type == TargetMemorySegmentType::FLASH) {
if (this->session.configVariant == Avr8ConfigVariant::XMEGA) { if (this->session.configVariant == Avr8ConfigVariant::XMEGA) {
@@ -1484,7 +1484,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr
void EdbgAvr8Interface::writeMemory( void EdbgAvr8Interface::writeMemory(
Avr8MemoryType type, Avr8MemoryType type,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) { ) {
if (type == Avr8MemoryType::FUSES && this->session.configVariant == Avr8ConfigVariant::DEBUG_WIRE) { if (type == Avr8MemoryType::FUSES && this->session.configVariant == Avr8ConfigVariant::DEBUG_WIRE) {
throw Exception{"Cannot access AVR fuses via the debugWIRE interface"}; throw Exception{"Cannot access AVR fuses via the debugWIRE interface"};
@@ -1548,7 +1548,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr
this->writeMemory( this->writeMemory(
type, type,
startAddress + bytesWritten, startAddress + bytesWritten,
TargetMemoryBuffer{buffer.begin() + bytesWritten, buffer.begin() + bytesWritten + chunkSize} buffer.subspan(bytesWritten, chunkSize)
); );
bytesWritten += chunkSize; bytesWritten += chunkSize;

View File

@@ -259,7 +259,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const Targets::TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) override; ) override;
/** /**
@@ -546,7 +546,11 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr
* @param address * @param address
* @param buffer * @param buffer
*/ */
void writeMemory(Avr8MemoryType type, Targets::TargetMemoryAddress address, const Targets::TargetMemoryBuffer& buffer); void writeMemory(
Avr8MemoryType type,
Targets::TargetMemoryAddress address,
Targets::TargetMemoryBufferSpan buffer
);
/** /**
* Fetches the current target state. * Fetches the current target state.

View File

@@ -43,6 +43,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
using ::Targets::TargetMemoryAddressRange; using ::Targets::TargetMemoryAddressRange;
using ::Targets::TargetMemorySize; using ::Targets::TargetMemorySize;
using ::Targets::TargetMemoryBuffer; using ::Targets::TargetMemoryBuffer;
using ::Targets::TargetMemoryBufferSpan;
using ::Targets::TargetStackPointer; using ::Targets::TargetStackPointer;
using ::Targets::TargetAddressSpaceDescriptor; using ::Targets::TargetAddressSpaceDescriptor;
using ::Targets::TargetMemorySegmentDescriptor; using ::Targets::TargetMemorySegmentDescriptor;
@@ -389,7 +390,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) { ) {
using DebugModule::Registers::MemoryAccessControlField; using DebugModule::Registers::MemoryAccessControlField;
@@ -799,7 +800,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
void DebugTranslator::writeMemoryViaAbstractCommand( void DebugTranslator::writeMemoryViaAbstractCommand(
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) { ) {
using DebugModule::Registers::MemoryAccessControlField; using DebugModule::Registers::MemoryAccessControlField;
@@ -814,7 +815,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
.commandType = AbstractCommandRegister::CommandType::MEMORY_ACCESS .commandType = AbstractCommandRegister::CommandType::MEMORY_ACCESS
}; };
for (TargetMemoryAddress offset = 0; offset < buffer.size(); offset += 4) { for (auto offset = TargetMemoryAddress{0}; offset < buffer.size(); offset += 4) {
this->dtmInterface.writeDebugModuleRegister( this->dtmInterface.writeDebugModuleRegister(
RegisterAddress::ABSTRACT_DATA_0, RegisterAddress::ABSTRACT_DATA_0,
static_cast<RegisterValue>( static_cast<RegisterValue>(

View File

@@ -84,7 +84,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const Targets::TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) override; ) override;
private: private:
@@ -146,7 +146,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec
); );
void writeMemoryViaAbstractCommand( void writeMemoryViaAbstractCommand(
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const Targets::TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
); );
std::optional<std::reference_wrapper<const TriggerModule::TriggerDescriptor>> getAvailableTrigger(); std::optional<std::reference_wrapper<const TriggerModule::TriggerDescriptor>> getAvailableTrigger();

View File

@@ -118,7 +118,7 @@ namespace DebugToolDrivers::TargetInterfaces::Microchip::Avr8
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const Targets::TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) = 0; ) = 0;
/** /**

View File

@@ -52,7 +52,7 @@ namespace DebugToolDrivers::TargetInterfaces::RiscV
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const Targets::TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
) = 0; ) = 0;
}; };
} }

View File

@@ -68,6 +68,7 @@ namespace Services
using Targets::TargetMemorySize; using Targets::TargetMemorySize;
using Targets::TargetMemoryAddressRange; using Targets::TargetMemoryAddressRange;
using Targets::TargetMemoryBuffer; using Targets::TargetMemoryBuffer;
using Targets::TargetMemoryBufferSpan;
using Targets::TargetStackPointer; using Targets::TargetStackPointer;
using Targets::TargetBreakpoint; using Targets::TargetBreakpoint;
@@ -210,14 +211,14 @@ namespace Services
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
Targets::TargetMemoryBuffer&& buffer TargetMemoryBufferSpan buffer
) const { ) const {
this->commandManager.sendCommandAndWaitForResponse( this->commandManager.sendCommandAndWaitForResponse(
std::make_unique<WriteTargetMemory>( std::make_unique<WriteTargetMemory>(
addressSpaceDescriptor, addressSpaceDescriptor,
memorySegmentDescriptor, memorySegmentDescriptor,
startAddress, startAddress,
std::move(buffer) buffer
), ),
this->defaultTimeout, this->defaultTimeout,
this->activeAtomicSessionId this->activeAtomicSessionId

View File

@@ -155,7 +155,7 @@ namespace Services
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
Targets::TargetMemoryBuffer&& buffer Targets::TargetMemoryBufferSpan buffer
) const; ) const;
/** /**

View File

@@ -18,18 +18,18 @@ namespace TargetController::Commands
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor; const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor;
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor; const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor;
Targets::TargetMemoryAddress startAddress; Targets::TargetMemoryAddress startAddress;
Targets::TargetMemoryBuffer buffer; Targets::TargetMemoryBufferSpan buffer;
WriteTargetMemory( WriteTargetMemory(
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
Targets::TargetMemoryBuffer&& buffer Targets::TargetMemoryBufferSpan buffer
) )
: addressSpaceDescriptor(addressSpaceDescriptor) : addressSpaceDescriptor(addressSpaceDescriptor)
, memorySegmentDescriptor(memorySegmentDescriptor) , memorySegmentDescriptor(memorySegmentDescriptor)
, startAddress(startAddress) , startAddress(startAddress)
, buffer(std::move(buffer)) , buffer(buffer)
{}; {};
[[nodiscard]] CommandType getType() const override { [[nodiscard]] CommandType getType() const override {

View File

@@ -741,8 +741,8 @@ namespace TargetController
void TargetControllerComponent::writeTargetMemory( void TargetControllerComponent::writeTargetMemory(
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) { ) {
const auto isProgramMemory = this->target->isProgramMemory( const auto isProgramMemory = this->target->isProgramMemory(
addressSpaceDescriptor, addressSpaceDescriptor,

View File

@@ -302,7 +302,7 @@ namespace TargetController
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
Targets::TargetMemoryAddress startAddress, Targets::TargetMemoryAddress startAddress,
const Targets::TargetMemoryBuffer& buffer Targets::TargetMemoryBufferSpan buffer
); );
void eraseTargetMemory( void eraseTargetMemory(

View File

@@ -405,7 +405,7 @@ namespace Targets::Microchip::Avr8
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
std::uint32_t startAddress, std::uint32_t startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) { ) {
if (memorySegmentDescriptor.type == TargetMemorySegmentType::FLASH && !this->programmingModeEnabled()) { if (memorySegmentDescriptor.type == TargetMemorySegmentType::FLASH && !this->programmingModeEnabled()) {
throw Exception{"Attempted Flash memory write in the absence of an active programming session."}; throw Exception{"Attempted Flash memory write in the absence of an active programming session."};
@@ -1088,7 +1088,7 @@ namespace Targets::Microchip::Avr8
this->fuseAddressSpaceDescriptor, this->fuseAddressSpaceDescriptor,
this->fuseMemorySegmentDescriptor, this->fuseMemorySegmentDescriptor,
ocdenRegisterDescriptor.startAddress, ocdenRegisterDescriptor.startAddress,
{newValue} TargetMemoryBuffer({newValue})
); );
Logger::debug("Verifying OCDEN fuse bit"); Logger::debug("Verifying OCDEN fuse bit");
@@ -1140,7 +1140,7 @@ namespace Targets::Microchip::Avr8
this->fuseAddressSpaceDescriptor, this->fuseAddressSpaceDescriptor,
this->fuseMemorySegmentDescriptor, this->fuseMemorySegmentDescriptor,
eesaveRegisterDescriptor.startAddress, eesaveRegisterDescriptor.startAddress,
{newValue} TargetMemoryBuffer({newValue})
); );
Logger::debug("Verifying EESAVE fuse bit"); Logger::debug("Verifying EESAVE fuse bit");

View File

@@ -84,7 +84,7 @@ namespace Targets::Microchip::Avr8
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) override; ) override;
bool isProgramMemory( bool isProgramMemory(
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,

View File

@@ -235,7 +235,7 @@ namespace Targets::RiscV
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) { ) {
assert(!buffer.empty()); assert(!buffer.empty());

View File

@@ -62,7 +62,7 @@ namespace Targets::RiscV
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) override; ) override;
bool isProgramMemory( bool isProgramMemory(
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,

View File

@@ -106,7 +106,7 @@ namespace Targets::RiscV::Wch
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) { ) {
/* /*
* WCH targets have an alias segment that maps to either the program memory segment or the boot program * WCH targets have an alias segment that maps to either the program memory segment or the boot program

View File

@@ -23,7 +23,7 @@ namespace Targets::RiscV::Wch
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) override; ) override;
protected: protected:

View File

@@ -198,7 +198,7 @@ namespace Targets
const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
TargetMemoryAddress startAddress, TargetMemoryAddress startAddress,
const TargetMemoryBuffer& buffer TargetMemoryBufferSpan buffer
) = 0; ) = 0;
/** /**

View File

@@ -33,7 +33,7 @@ namespace Targets
&& intersectingSegmentIt->second >= (startAddress + bytes - 1); && intersectingSegmentIt->second >= (startAddress + bytes - 1);
} }
void TargetMemoryCache::insert(TargetMemoryAddress startAddress, const TargetMemoryBuffer& data) { void TargetMemoryCache::insert(TargetMemoryAddress startAddress, TargetMemoryBufferSpan data) {
const auto startIndex = startAddress - this->memorySegmentDescriptor.addressRange.startAddress; const auto startIndex = startAddress - this->memorySegmentDescriptor.addressRange.startAddress;
std::copy(data.begin(), data.end(), this->data.begin() + startIndex); std::copy(data.begin(), data.end(), this->data.begin() + startIndex);

View File

@@ -39,7 +39,7 @@ namespace Targets
* @param startAddress * @param startAddress
* @param data * @param data
*/ */
void insert(TargetMemoryAddress startAddress, const TargetMemoryBuffer& data); void insert(TargetMemoryAddress startAddress, TargetMemoryBufferSpan data);
/** /**
* Clears the cache. * Clears the cache.