Included CPU register offset in stack pointer and status register addresses
This commit is contained in:
@@ -84,15 +84,30 @@ void Avr8::loadTargetParameters() {
|
|||||||
this->targetParameters->bootSectionSize = firstBootSectionMemorySegment->size;
|
this->targetParameters->bootSectionSize = firstBootSectionMemorySegment->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::uint32_t cpuRegistersOffset = 0;
|
||||||
|
|
||||||
|
if (peripheralModules.contains("cpu")) {
|
||||||
|
auto cpuPeripheralModule = peripheralModules.at("cpu");
|
||||||
|
|
||||||
|
if (cpuPeripheralModule.instancesMappedByName.contains("cpu")) {
|
||||||
|
auto cpuInstance = cpuPeripheralModule.instancesMappedByName.at("cpu");
|
||||||
|
|
||||||
|
if (cpuInstance.registerGroupsMappedByName.contains("cpu")) {
|
||||||
|
auto cpuRegisterGroup = cpuInstance.registerGroupsMappedByName.at("cpu");
|
||||||
|
cpuRegistersOffset = cpuRegisterGroup.offset.value_or(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto statusRegister = this->targetDescriptionFile->getStatusRegister();
|
auto statusRegister = this->targetDescriptionFile->getStatusRegister();
|
||||||
if (statusRegister.has_value()) {
|
if (statusRegister.has_value()) {
|
||||||
this->targetParameters->statusRegisterStartAddress = statusRegister->offset;
|
this->targetParameters->statusRegisterStartAddress = cpuRegistersOffset + statusRegister->offset;
|
||||||
this->targetParameters->statusRegisterSize = statusRegister->size;
|
this->targetParameters->statusRegisterSize = statusRegister->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto stackPointerRegister = this->targetDescriptionFile->getStackPointerRegister();
|
auto stackPointerRegister = this->targetDescriptionFile->getStackPointerRegister();
|
||||||
if (stackPointerRegister.has_value()) {
|
if (stackPointerRegister.has_value()) {
|
||||||
this->targetParameters->stackPointerRegisterStartAddress = stackPointerRegister->offset;
|
this->targetParameters->stackPointerRegisterStartAddress = cpuRegistersOffset + stackPointerRegister->offset;
|
||||||
this->targetParameters->stackPointerRegisterSize = stackPointerRegister->size;
|
this->targetParameters->stackPointerRegisterSize = stackPointerRegister->size;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -101,12 +116,14 @@ void Avr8::loadTargetParameters() {
|
|||||||
auto stackPointerHighRegister = this->targetDescriptionFile->getStackPointerHighRegister();
|
auto stackPointerHighRegister = this->targetDescriptionFile->getStackPointerHighRegister();
|
||||||
|
|
||||||
if (stackPointerLowRegister.has_value()) {
|
if (stackPointerLowRegister.has_value()) {
|
||||||
this->targetParameters->stackPointerRegisterStartAddress = stackPointerLowRegister->offset;
|
this->targetParameters->stackPointerRegisterStartAddress = cpuRegistersOffset
|
||||||
|
+ stackPointerLowRegister->offset;
|
||||||
this->targetParameters->stackPointerRegisterSize = stackPointerLowRegister->size;
|
this->targetParameters->stackPointerRegisterSize = stackPointerLowRegister->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stackPointerHighRegister.has_value()) {
|
if (stackPointerHighRegister.has_value()) {
|
||||||
this->targetParameters->stackPointerRegisterSize = (this->targetParameters->stackPointerRegisterSize.has_value()) ?
|
this->targetParameters->stackPointerRegisterSize =
|
||||||
|
this->targetParameters->stackPointerRegisterSize.has_value() ?
|
||||||
this->targetParameters->stackPointerRegisterSize.value() + stackPointerHighRegister->size :
|
this->targetParameters->stackPointerRegisterSize.value() + stackPointerHighRegister->size :
|
||||||
stackPointerHighRegister->size;
|
stackPointerHighRegister->size;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user