mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 03:18:55 +02:00
fx
This commit is contained in:
parent
75c5393ab3
commit
6a5c18b55e
1 changed files with 4 additions and 6 deletions
|
|
@ -40,16 +40,13 @@ struct CodeBlockInfo {
|
||||||
};
|
};
|
||||||
|
|
||||||
class SigHandler {
|
class SigHandler {
|
||||||
static constexpr std::size_t signal_stack_size = std::max<std::size_t>(SIGSTKSZ, 2 * 1024 * 1024);
|
|
||||||
|
|
||||||
auto FindCodeBlockInfo(u64 offset) noexcept {
|
auto FindCodeBlockInfo(u64 offset) noexcept {
|
||||||
return std::find_if(code_block_infos.begin(), code_block_infos.end(), [&](auto const& e) {
|
return std::find_if(code_block_infos.begin(), code_block_infos.end(), [&](auto const& e) {
|
||||||
return e.first <= offset && e.first + e.second.size > offset;
|
return e.first <= offset && e.first + e.second.size > offset;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
static void SigAction(int sig, siginfo_t* info, void* raw_context);
|
static void SigAction(int sig, siginfo_t* info, void* raw_context);
|
||||||
|
std::vector<u8> signal_stack_memory;
|
||||||
alignas(16) std::array<u8, signal_stack_size> signal_stack_memory;
|
|
||||||
ankerl::unordered_dense::map<u64, CodeBlockInfo> code_block_infos;
|
ankerl::unordered_dense::map<u64, CodeBlockInfo> code_block_infos;
|
||||||
std::shared_mutex code_block_infos_mutex;
|
std::shared_mutex code_block_infos_mutex;
|
||||||
struct sigaction old_sa_segv;
|
struct sigaction old_sa_segv;
|
||||||
|
|
@ -57,9 +54,10 @@ class SigHandler {
|
||||||
bool supports_fast_mem = true;
|
bool supports_fast_mem = true;
|
||||||
public:
|
public:
|
||||||
SigHandler() noexcept {
|
SigHandler() noexcept {
|
||||||
|
signal_stack_memory.resize(std::max<std::size_t>(SIGSTKSZ, 2 * 1024 * 1024), 0);
|
||||||
stack_t signal_stack{};
|
stack_t signal_stack{};
|
||||||
signal_stack.ss_sp = std::addressof(signal_stack_memory);
|
signal_stack.ss_sp = signal_stack_memory.data();
|
||||||
signal_stack.ss_size = signal_stack_size;
|
signal_stack.ss_size = signal_stack_memory.size();
|
||||||
signal_stack.ss_flags = 0;
|
signal_stack.ss_flags = 0;
|
||||||
if (sigaltstack(&signal_stack, nullptr) != 0) {
|
if (sigaltstack(&signal_stack, nullptr) != 0) {
|
||||||
fmt::print(stderr, "dynarmic: POSIX SigHandler: init failure at sigaltstack\n");
|
fmt::print(stderr, "dynarmic: POSIX SigHandler: init failure at sigaltstack\n");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue