mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 15:31:26 +12:00
JIT: use MAP_32BIT on Linux and FreeBSD
Unless RLIMIT_DATA is low enough FreeBSD by default reserves lower 2Gb for brk(2) style heap, ignoring mmap(2) address hint requested by RPCS3. Passing MAP_32BIT fixes the following crash Assertion failed: ((Type == ELF::R_X86_64_32 && (Value <= UINT32_MAX)) || (Type == ELF::R_X86_64_32S && ((int64_t)Value <= INT32_MAX && (int64_t)Value >= INT32_MIN))), function resolveX86_64Relocation, file /usr/ports/devel/llvm40/work/llvm-4.0.1.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp, line 287.
This commit is contained in:
parent
4b20202990
commit
17aa7971da
1 changed files with 8 additions and 0 deletions
|
@ -30,6 +30,8 @@
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
#else
|
||||||
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "JIT.h"
|
#include "JIT.h"
|
||||||
|
@ -47,6 +49,11 @@ static void* const s_memory = []() -> void*
|
||||||
llvm::InitializeNativeTargetAsmPrinter();
|
llvm::InitializeNativeTargetAsmPrinter();
|
||||||
LLVMLinkInMCJIT();
|
LLVMLinkInMCJIT();
|
||||||
|
|
||||||
|
#ifdef MAP_32BIT
|
||||||
|
auto ptr = ::mmap(nullptr, s_memory_size, PROT_NONE, MAP_ANON | MAP_PRIVATE | MAP_32BIT, -1, 0);
|
||||||
|
if (ptr != MAP_FAILED)
|
||||||
|
return ptr;
|
||||||
|
#else
|
||||||
for (u64 addr = 0x10000000; addr <= 0x80000000 - s_memory_size; addr += 0x1000000)
|
for (u64 addr = 0x10000000; addr <= 0x80000000 - s_memory_size; addr += 0x1000000)
|
||||||
{
|
{
|
||||||
if (auto ptr = utils::memory_reserve(s_memory_size, (void*)addr))
|
if (auto ptr = utils::memory_reserve(s_memory_size, (void*)addr))
|
||||||
|
@ -54,6 +61,7 @@ static void* const s_memory = []() -> void*
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return utils::memory_reserve(s_memory_size);
|
return utils::memory_reserve(s_memory_size);
|
||||||
}();
|
}();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue