mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 18:00:17 +02:00
- Do compiler/architecture checks EARLY, don't waste time doing random configuration stuff if the user can't even compile in the first place - MSVC is unsupported, I assume? So add a check to disallow. There's literally no MSVC or MSC_VER checks anywhere, so... - Rather than using the MSVC architecture definitions, use our own `ARCHITECTURE_arm64` et al. Hijacking existing "standard" definitions is a very bad idea. Also makes it more readable in CMake - Change the x86 host check to `x86|amd64`. Some systems still refer to themselves as x86 despite being 64-bit for... reasons, and I saw one a very long time ago that referred to it as amd64. This should basically never come up, nor is it really relevant given that FEX is for arm64... but it kinda annoyed me so whatever. TODOs: - Should we check `CMAKE_SIZEOF_VOID_P (equal) 64`? I don't think anyone is even trying to compile this thing on armv7 or older, but might as well? maybe? - What's the status of *BSD, Solaris, macOS? Technically macOS does support Wine, not sure about the others. Signed-off-by: crueter <crueter@eden-emu.dev>
71 lines
2.0 KiB
C++
71 lines
2.0 KiB
C++
// SPDX-License-Identifier: MIT
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <mutex>
|
|
#include <map>
|
|
#include <shared_mutex>
|
|
#include <string_view>
|
|
|
|
#include <FEXCore/Utils/CompilerDefs.h>
|
|
#include <FEXCore/Config/Config.h>
|
|
#include <FEXCore/Core/CodeCache.h>
|
|
|
|
#include "Common/VolatileMetadata.h"
|
|
#include "Module.h"
|
|
|
|
namespace FEXCore::Core {
|
|
struct InternalThreadState;
|
|
}
|
|
|
|
namespace FEXCore::Context {
|
|
class Context;
|
|
}
|
|
|
|
namespace FEX::Windows {
|
|
#ifdef ARCHITECTURE_arm64ec
|
|
using ArchImageNtHeaders = IMAGE_NT_HEADERS64;
|
|
using ArchImageLoadConfigDirectory = _IMAGE_LOAD_CONFIG_DIRECTORY64;
|
|
#else
|
|
using ArchImageNtHeaders = IMAGE_NT_HEADERS32;
|
|
using ArchImageLoadConfigDirectory = _IMAGE_LOAD_CONFIG_DIRECTORY32;
|
|
#endif
|
|
|
|
FEXCore::CodeMapFileId ComputeCodeMapId(std::string_view FileName, uint32_t TimeDateStamp, uint32_t SizeOfImage);
|
|
|
|
/**
|
|
* @brief Tracks mapped PE code images and handles their volatile metadata
|
|
*/
|
|
class ImageTracker : public FEXCore::CodeMapOpener {
|
|
public:
|
|
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);
|
|
|
|
std::optional<FEXCore::ExecutableFileSectionInfo> LookupExecutableFileSection(uint64_t Address);
|
|
|
|
int OpenCodeMapFile() override;
|
|
|
|
private:
|
|
struct MappedImageInfo {
|
|
FEXCore::ExecutableFileInfo Info;
|
|
FEXCore::ExecutableFileSectionInfo SectionInfo;
|
|
|
|
MappedImageInfo(std::string_view Path, uint64_t Address, ArchImageNtHeaders* Nt,
|
|
fextl::unordered_map<uint32_t, FEXCore::GuestRelocationType> Relocations);
|
|
};
|
|
|
|
FEXCore::Context::Context& CTX;
|
|
|
|
FEX_CONFIG_OPT(ExtendedVolatileMetadataConfig, EXTENDEDVOLATILEMETADATA);
|
|
fextl::unordered_map<fextl::string, FEX::VolatileMetadata::ExtendedVolatileMetadata> ExtendedMetaData;
|
|
|
|
std::shared_mutex ImagesLock;
|
|
std::map<uint64_t, MappedImageInfo> MappedImages;
|
|
|
|
std::string ActiveCodeMapPath;
|
|
bool IsGeneratingCache;
|
|
};
|
|
|
|
} // namespace FEX::Windows
|