mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-27 21:01:06 +01:00
Fix build for test harness, irloader
This commit is contained in:
1 parent
0db99ea4f6
commit
830e41459c
3 files changed
+46
-13
No files matched your search
@@ -349,7 +349,7 @@ namespace FEX::HarnessHelper {
|
||||
return STACK_SIZE;
|
||||
}
|
||||
|
||||
uint64_t SetupStack() override {
|
||||
uint64_t GetStackPointer() override {
|
||||
if (Config.Is64BitMode()) {
|
||||
return reinterpret_cast<uint64_t>(mmap(nullptr, STACK_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)) + STACK_SIZE;
|
||||
}
|
||||
@@ -364,7 +364,7 @@ namespace FEX::HarnessHelper {
|
||||
return RIP;
|
||||
}
|
||||
|
||||
void MapMemoryRegion(std::function<void *(void *addr, size_t length, int prot, int flags, int fd, off_t offset)> Mapper, std::function<int(void *addr, size_t length)> Unmapper) override {
|
||||
bool MapMemory(std::function<void *(void *addr, size_t length, int prot, int flags, int fd, off_t offset)> Mapper, std::function<int(void *addr, size_t length)> Unmapper) override {
|
||||
bool LimitedSize = true;
|
||||
auto DoMMap = [](uint64_t Address, size_t Size) -> void* {
|
||||
void *Result = mmap(reinterpret_cast<void*>(Address), Size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
@@ -410,9 +410,13 @@ namespace FEX::HarnessHelper {
|
||||
for (auto& [region, size] : Config.GetMemoryRegions()) {
|
||||
DoMMap(region, size);
|
||||
}
|
||||
|
||||
LoadMemory();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LoadMemory() override {
|
||||
void LoadMemory() {
|
||||
// Memory base here starts at the start location we passed back with GetLayout()
|
||||
// This will write at [CODE_START_RANGE + 0, RawFile.size() )
|
||||
memcpy(reinterpret_cast<void*>(RIP), &RawFile.at(0), RawFile.size());
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
return STACK_SIZE;
|
||||
}
|
||||
|
||||
uint64_t SetupStack() override
|
||||
uint64_t GetStackPointer() override
|
||||
{
|
||||
return reinterpret_cast<uint64_t>(mmap(nullptr, STACK_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
|
||||
}
|
||||
@@ -83,13 +83,17 @@ public:
|
||||
return IR->GetEntryRIP();
|
||||
}
|
||||
|
||||
void MapMemoryRegion(std::function<void *(void *addr, size_t length, int prot, int flags, int fd, off_t offset)> Mapper, std::function<int(void *addr, size_t length)> Unmapper) override
|
||||
bool MapMemory(std::function<void *(void *addr, size_t length, int prot, int flags, int fd, off_t offset)> Mapper, std::function<int(void *addr, size_t length)> Unmapper) override
|
||||
{
|
||||
// Map the memory regions the test file asks for
|
||||
IR->MapRegions();
|
||||
|
||||
LoadMemory();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LoadMemory() override
|
||||
void LoadMemory()
|
||||
{
|
||||
IR->LoadMemory();
|
||||
}
|
||||
@@ -134,6 +138,7 @@ int main(int argc, char **argv, char **const envp)
|
||||
if (Loader.IsValid())
|
||||
{
|
||||
IRCodeLoader CodeLoader{&Loader};
|
||||
CodeLoader.MapMemory(nullptr, nullptr);
|
||||
FEXCore::Context::InitCore(CTX, &CodeLoader);
|
||||
FEXCore::Context::ExitReason ShutdownReason = FEXCore::Context::ExitReason::EXIT_SHUTDOWN;
|
||||
|
||||
|
||||
@@ -9,7 +9,8 @@ $end_info$
|
||||
#include "Common/EnvironmentLoader.h"
|
||||
#include "CommonCore/HostFactory.h"
|
||||
#include "HarnessHelpers.h"
|
||||
#include "Tests/LinuxSyscalls/Syscalls.h"
|
||||
#include "Tests/LinuxSyscalls/x32/Syscalls.h"
|
||||
#include "Tests/LinuxSyscalls/x64/Syscalls.h"
|
||||
#include "Tests/LinuxSyscalls/SignalDelegator.h"
|
||||
|
||||
#include <FEXCore/Config/Config.h>
|
||||
@@ -79,13 +80,36 @@ int main(int argc, char **argv, char **const envp) {
|
||||
|
||||
FEXCore::Context::InitializeContext(CTX);
|
||||
|
||||
|
||||
FEX::HLE::x32::MemAllocator *Allocator = nullptr;
|
||||
|
||||
if (Loader.Is64BitMode()) {
|
||||
if (!Loader.MapMemory([](void *addr, size_t length, int prot, int flags, int fd, off_t offset) {
|
||||
return mmap(addr, length, prot, flags, fd, offset);
|
||||
}, [](void *addr, size_t length) {
|
||||
return munmap(addr, length);
|
||||
})) {
|
||||
// failed to map
|
||||
return -ENOEXEC;
|
||||
}
|
||||
} else {
|
||||
Allocator = new FEX::HLE::x32::MemAllocator();
|
||||
if (!Loader.MapMemory([Allocator](void *addr, size_t length, int prot, int flags, int fd, off_t offset) {
|
||||
return Allocator->mmap(addr, length, prot, flags, fd, offset);
|
||||
}, [Allocator](void *addr, size_t length) {
|
||||
return Allocator->munmap(addr, length);
|
||||
})) {
|
||||
// failed to map
|
||||
return -ENOEXEC;
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<FEX::HLE::SignalDelegator> SignalDelegation = std::make_unique<FEX::HLE::SignalDelegator>();
|
||||
std::unique_ptr<FEXCore::HLE::SyscallHandler> SyscallHandler{
|
||||
FEX::HLE::CreateHandler(
|
||||
Loader.Is64BitMode() ? FEXCore::Context::OperatingMode::MODE_64BIT : FEXCore::Context::OperatingMode::MODE_32BIT,
|
||||
CTX,
|
||||
SignalDelegation.get(),
|
||||
&Loader)};
|
||||
std::unique_ptr<FEX::HLE::SyscallHandler> SyscallHandler{
|
||||
Loader.Is64BitMode() ?
|
||||
FEX::HLE::x64::CreateHandler(CTX, SignalDelegation.get()) :
|
||||
FEX::HLE::x32::CreateHandler(CTX, SignalDelegation.get(), Allocator)
|
||||
};
|
||||
|
||||
bool DidFault = false;
|
||||
SignalDelegation->RegisterFrontendHostSignalHandler(SIGSEGV, [&DidFault](FEXCore::Core::InternalThreadState *Thread, int Signal, void *info, void *ucontext) {
|
||||
|
||||
Reference in new issue
Block a user