MCPcopy Create free account
hub / github.com/FEX-Emu/FEX / LoadImageVolatileMetadata

Function LoadImageVolatileMetadata

Source/Windows/WOW64/Module.cpp:166–187  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

164}
165
166void LoadImageVolatileMetadata(const fextl::string& ModuleName, uint64_t Address) {
167 const auto Module = reinterpret_cast<HMODULE>(Address);
168 IMAGE_NT_HEADERS* Nt = RtlImageNtHeader(Module);
169 uint64_t EndAddress = Address + Nt->OptionalHeader.SizeOfImage;
170
171 fextl::set<uint64_t> VolatileInstructions;
172 FEXCore::IntervalList<uint64_t> VolatileValidRanges;
173
174 // Load FEX extended volatile metadata.
175 auto it = ExtendedMetaData.find(ModuleName);
176 if (it != ExtendedMetaData.end()) {
177 FEX::Windows::ApplyFEXExtendedVolatileMetadata(it->second, VolatileInstructions, VolatileValidRanges, Address, EndAddress);
178 }
179
180 if (VolatileInstructions.empty() && VolatileValidRanges.Empty()) {
181 return;
182 }
183
184 LogMan::Msg::DFmt("Loaded volatile metadata for {:X}: {} entries", Address, VolatileInstructions.size());
185 std::scoped_lock Lock(CTX->GetCodeInvalidationMutex());
186 CTX->AddForceTSOInformation(VolatileValidRanges, std::move(VolatileInstructions));
187}
188
189void HandleImageMap(uint64_t Address) {
190 fextl::string ModuleName = FEX::Windows::GetSectionFilePath(Address);

Callers 1

HandleImageMapFunction · 0.70

Calls 6

DFmtFunction · 0.85
endMethod · 0.45
EmptyMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected