mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-04 05:51:27 +12:00
parent
383c501a35
commit
198e9dce1d
2 changed files with 29 additions and 3 deletions
|
@ -71,6 +71,8 @@ static void* s_next = s_memory;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static std::deque<std::vector<RUNTIME_FUNCTION>> s_unwater;
|
static std::deque<std::vector<RUNTIME_FUNCTION>> s_unwater;
|
||||||
static std::vector<std::vector<RUNTIME_FUNCTION>> s_unwind; // .pdata
|
static std::vector<std::vector<RUNTIME_FUNCTION>> s_unwind; // .pdata
|
||||||
|
#else
|
||||||
|
static std::deque<std::tuple<u8*, u64, std::size_t>> s_unfire;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Reset memory manager
|
// Reset memory manager
|
||||||
|
@ -87,7 +89,30 @@ extern void jit_finalize()
|
||||||
|
|
||||||
s_unwind.clear();
|
s_unwind.clear();
|
||||||
#else
|
#else
|
||||||
// TODO: unregister EH frames if necessary
|
struct MemoryManager : llvm::RTDyldMemoryManager
|
||||||
|
{
|
||||||
|
u8* allocateCodeSection(std::uintptr_t size, uint align, uint sec_id, llvm::StringRef sec_name) override
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8* allocateDataSection(std::uintptr_t size, uint align, uint sec_id, llvm::StringRef sec_name, bool is_ro) override
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool finalizeMemory(std::string* = nullptr) override
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} mem;
|
||||||
|
|
||||||
|
for (auto&& t : s_unfire)
|
||||||
|
{
|
||||||
|
mem.deregisterEHFrames(std::get<0>(t), std::get<1>(t), std::get<2>(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
s_unfire.clear();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
utils::memory_decommit(s_memory, s_memory_size);
|
utils::memory_decommit(s_memory, s_memory_size);
|
||||||
|
@ -261,6 +286,8 @@ struct MemoryManager : llvm::RTDyldMemoryManager
|
||||||
{
|
{
|
||||||
s_unwind.emplace_back(std::move(pdata));
|
s_unwind.emplace_back(std::move(pdata));
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
s_unfire.push_front(std::make_tuple(addr, load_addr, size));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return RTDyldMemoryManager::registerEHFrames(addr, load_addr, size);
|
return RTDyldMemoryManager::registerEHFrames(addr, load_addr, size);
|
||||||
|
@ -268,7 +295,6 @@ struct MemoryManager : llvm::RTDyldMemoryManager
|
||||||
|
|
||||||
void deregisterEHFrames(u8* addr, u64 load_addr, std::size_t size) override
|
void deregisterEHFrames(u8* addr, u64 load_addr, std::size_t size) override
|
||||||
{
|
{
|
||||||
return RTDyldMemoryManager::deregisterEHFrames(addr, load_addr, size);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1181,7 +1181,7 @@ extern void ppu_initialize(const ppu_module& info)
|
||||||
// Initialize compiler instance
|
// Initialize compiler instance
|
||||||
if (!jit)
|
if (!jit)
|
||||||
{
|
{
|
||||||
jit = fxm::get_always<jit_compiler>(s_link_table, g_cfg.core.llvm_cpu);
|
jit = std::make_shared<jit_compiler>(s_link_table, g_cfg.core.llvm_cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
// First function in current module part
|
// First function in current module part
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue