Fix build for test harness, irloader

This commit is contained in:
Stefanos Kornilios Mitsis Poiitidis committed 2021-04-15 11:05:07 +03:00
1 parent 0db99ea4f6
commit 830e41459c
3 files changed
+46 -13

No files matched your search

+7 -3
View File
@@ -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());
+8 -3
View File
@@ -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;
+31 -7
View File
@@ -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) {