diff --git a/External/FEXCore/Source/Interface/IR/AOTIR.cpp b/External/FEXCore/Source/Interface/IR/AOTIR.cpp index 7cc22ffb8..8ca243fba 100644 --- a/External/FEXCore/Source/Interface/IR/AOTIR.cpp +++ b/External/FEXCore/Source/Interface/IR/AOTIR.cpp @@ -300,9 +300,9 @@ namespace FEXCore::IR { AOTIRCaptureCache::PreGenerateIRFetchResult AOTIRCaptureCache::PreGenerateIRFetch(uint64_t GuestRIP, FEXCore::IR::IRListView *IRList) { auto AOTIRCacheEntry = CTX->SyscallHandler->LookupAOTIRCacheEntry(GuestRIP); - + PreGenerateIRFetchResult Result{}; - + if (AOTIRCacheEntry.Entry) { AOTIRCacheEntry.Entry->ContainsCode = true; @@ -344,24 +344,11 @@ namespace FEXCore::IR { auto map = Entry->SourcecodeMap.get(); if (map) { - auto FileBegin = GuestRIP - VAFileStart; + auto FileOffset = GuestRIP - VAFileStart; - auto Sym = map->FindSymbolMapping(FileBegin); + auto Sym = map->FindSymbolMapping(FileOffset); - std::string SymName; - if (Sym) { - auto SymOffset = FileBegin - Sym->FileGuestBegin; - if (SymOffset) { - SymName = fmt::format("{}: {}+{} @{:x}", std::filesystem::path(Entry->Filename).stem().string(), Sym->Name, - SymOffset, HostEntry); - } else { - SymName = fmt::format("{}: {} @{:x}", std::filesystem::path(Entry->Filename).stem().string(), Sym->Name, - HostEntry); - } - } else { - SymName = fmt::format("{}: +{} @{:x}", std::filesystem::path(Entry->Filename).stem().string(), FileBegin, - HostEntry); - } + std::string SymName = HLE::SourcecodeSymbolMapping::SymName(Sym, Entry->Filename, HostEntry, FileOffset); std::vector Lines; for (const auto &GuestOpcode : DebugData->GuestOpcodes) { diff --git a/External/FEXCore/include/FEXCore/HLE/SourcecodeResolver.h b/External/FEXCore/include/FEXCore/HLE/SourcecodeResolver.h index 3e9801763..89189dc5f 100644 --- a/External/FEXCore/include/FEXCore/HLE/SourcecodeResolver.h +++ b/External/FEXCore/include/FEXCore/HLE/SourcecodeResolver.h @@ -1,9 +1,11 @@ #pragma once #include -#include #include #include #include +#include + +#include namespace FEXCore::IR { struct AOTIRCacheEntry; @@ -23,6 +25,22 @@ struct SourcecodeSymbolMapping { uintptr_t FileGuestEnd; std::string Name; + + static std::string SymName(const SourcecodeSymbolMapping *Sym, const std::string &GuestFilename, uintptr_t HostEntry, uintptr_t FileBegin) { + if (Sym) { + auto SymOffset = FileBegin - Sym->FileGuestBegin; + if (SymOffset) { + return fmt::format("{}: {}+{} @{:x}", std::filesystem::path(GuestFilename).stem().string(), Sym->Name, + SymOffset, HostEntry); + } else { + return fmt::format("{}: {} @{:x}", std::filesystem::path(GuestFilename).stem().string(), Sym->Name, + HostEntry); + } + } else { + return fmt::format("{}: +{} @{:x}", std::filesystem::path(GuestFilename).stem().string(), FileBegin, + HostEntry); + } + } }; struct SourcecodeMap {