Use the new kernel module description thing to annotate GPRs in the register viewer

This commit is contained in:
Henrik Rydgård
2026-07-28 00:15:41 +02:00
parent c0826cbb5d
commit 39c8cbbde1
5 changed files with 59 additions and 20 deletions
+18 -11
View File
@@ -2647,7 +2647,7 @@ static u32 sceKernelGetModuleIdList(u32 resultBuffer, u32 resultBufferSize, u32
return hleNoLog(0);
}
std::string KernelModuleAddressDescription(u32 address) {
bool DescribeKernelModuleAddress(u32 address, char *buffer, size_t bufferSize) {
u32 error;
for (SceUID moduleId : loadedModules) {
PSPModule *module = kernelObjects.Get<PSPModule>(moduleId, error);
@@ -2657,19 +2657,26 @@ std::string KernelModuleAddressDescription(u32 address) {
const NativeModule &nm = module->nm;
u32 dataAddr = module->GetDataAddr();
u32 bssAddr = module->GetBSSAddr();
if (nm.text_size != 0 && address >= nm.text_addr && address < nm.text_addr + nm.text_size)
return StringFromFormat("%s.text+%x", nm.name, address - nm.text_addr);
if (nm.data_size != 0 && address >= dataAddr && address < dataAddr + nm.data_size)
return StringFromFormat("%s.data+%x", nm.name, address - dataAddr);
if (nm.bss_size != 0 && address >= bssAddr && address < bssAddr + nm.bss_size)
return StringFromFormat("%s.bss+%x", nm.name, address - bssAddr);
if (nm.text_size != 0 && address >= nm.text_addr && address < nm.text_addr + nm.text_size) {
snprintf(buffer, bufferSize, "%s.text+%x", nm.name, address - nm.text_addr);
return true;
}
if (nm.data_size != 0 && address >= dataAddr && address < dataAddr + nm.data_size) {
snprintf(buffer, bufferSize, "%s.data+%x", nm.name, address - dataAddr);
return true;
}
if (nm.bss_size != 0 && address >= bssAddr && address < bssAddr + nm.bss_size) {
snprintf(buffer, bufferSize, "%s.bss+%x", nm.name, address - bssAddr);
return true;
}
for (int i = 0; i < (int)nm.nsegment && i < 4; i++) {
if (nm.segmentsize[i] != 0 && address >= nm.segmentaddr[i] && address < nm.segmentaddr[i] + nm.segmentsize[i])
return StringFromFormat("%s.seg%d+%x", nm.name, i, address - nm.segmentaddr[i]);
if (nm.segmentsize[i] != 0 && address >= nm.segmentaddr[i] && address < nm.segmentaddr[i] + nm.segmentsize[i]) {
snprintf(buffer, bufferSize, "%s.seg%d+%x", nm.name, i, address - nm.segmentaddr[i]);
return true;
}
}
}
return std::string();
return false;
}
//fix for tiger x dragon