From 085cf027dc64f4b9e56a3a4f875c06ab0f48298b Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Mon, 22 Dec 2025 15:26:52 +0000 Subject: [PATCH] ImageTracker: Do not generate codemaps when generating code caches --- Source/Windows/ARM64EC/Module.cpp | 2 +- Source/Windows/Common/ImageTracker.cpp | 7 ++++--- Source/Windows/Common/ImageTracker.h | 3 ++- Source/Windows/WOW64/Module.cpp | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Source/Windows/ARM64EC/Module.cpp b/Source/Windows/ARM64EC/Module.cpp index c26a5d116..19ac4f33d 100644 --- a/Source/Windows/ARM64EC/Module.cpp +++ b/Source/Windows/ARM64EC/Module.cpp @@ -595,7 +595,7 @@ NTSTATUS ProcessInit() { CTX->InitCore(); Exception::HandlerConfig.emplace(*CTX); InvalidationTracker.emplace(*CTX, Threads); - ImageTracker.emplace(*CTX); + ImageTracker.emplace(*CTX, false); auto MainModule = reinterpret_cast<__TEB*>(NtCurrentTeb())->Peb->ImageBaseAddress; HandleImageMap(reinterpret_cast(MainModule), true); diff --git a/Source/Windows/Common/ImageTracker.cpp b/Source/Windows/Common/ImageTracker.cpp index 676d3e4fb..8131ccbb8 100644 --- a/Source/Windows/Common/ImageTracker.cpp +++ b/Source/Windows/Common/ImageTracker.cpp @@ -75,9 +75,10 @@ static void LoadImageVolatileMetadata(fextl::set& VolatileInstructions } } -ImageTracker::ImageTracker(FEXCore::Context::Context& CTX) +ImageTracker::ImageTracker(FEXCore::Context::Context& CTX, bool IsGeneratingCache) : CTX {CTX} - , ExtendedMetaData {FEX::VolatileMetadata::ParseExtendedVolatileMetadata(ExtendedVolatileMetadataConfig())} {} + , ExtendedMetaData {FEX::VolatileMetadata::ParseExtendedVolatileMetadata(ExtendedVolatileMetadataConfig())} + , IsGeneratingCache {IsGeneratingCache} {} ImageTracker::MappedImageInfo::MappedImageInfo(std::string_view Path, uint64_t Address, ArchImageNtHeaders* Nt, fextl::unordered_map Relocations) @@ -108,7 +109,7 @@ FEXCore::ExecutableFileSectionInfo ImageTracker::HandleImageMap(std::string_view auto ID = FEXCore::CodeMap::GetBaseFilename(ImageInfo->Info, false); LogMan::Msg::DFmt("Load module {} ({}): {:X}", ModuleName, ID, Address); - if (FEXCore::Config::Get_ENABLECODECACHINGWIP()) { + if (FEXCore::Config::Get_ENABLECODECACHINGWIP() && !IsGeneratingCache) { if (MainImage) { LARGE_INTEGER Time; NtQuerySystemTime(&Time); diff --git a/Source/Windows/Common/ImageTracker.h b/Source/Windows/Common/ImageTracker.h index 75ae663d7..e377f055a 100644 --- a/Source/Windows/Common/ImageTracker.h +++ b/Source/Windows/Common/ImageTracker.h @@ -38,7 +38,7 @@ FEXCore::CodeMapFileId ComputeCodeMapId(std::string_view FileName, uint32_t Time */ class ImageTracker : public FEXCore::CodeMapOpener { public: - ImageTracker(FEXCore::Context::Context& CTX); + ImageTracker(FEXCore::Context::Context& CTX, bool IsGeneratingCache); FEXCore::ExecutableFileSectionInfo HandleImageMap(std::string_view Path, uint64_t Address, bool MainImage); void HandleImageUnmap(uint64_t Address, uint64_t Size); @@ -64,6 +64,7 @@ private: std::map MappedImages; std::string ActiveCodeMapPath; + bool IsGeneratingCache; }; } // namespace FEX::Windows diff --git a/Source/Windows/WOW64/Module.cpp b/Source/Windows/WOW64/Module.cpp index 5be957143..dfd015582 100644 --- a/Source/Windows/WOW64/Module.cpp +++ b/Source/Windows/WOW64/Module.cpp @@ -513,7 +513,7 @@ void BTCpuProcessInit() { CTX->InitCore(); Context::HandlerConfig.emplace(*CTX); InvalidationTracker.emplace(*CTX, Threads); - ImageTracker.emplace(*CTX); + ImageTracker.emplace(*CTX, false); auto MainModule = reinterpret_cast<__TEB*>(NtCurrentTeb())->Peb->ImageBaseAddress; HandleImageMap(reinterpret_cast(MainModule), true);