JitArm64: Properly set m_stack_pointer

In order to reach the middle guard (at m_stack_base + GUARD_OFFSET)
before the bottom guard (at m_stack_base), the stack pointer
must start at an address which is higher than the middle guard.
It also didn't make sense that we were allocating memory
and then not using the top part of it.
This commit is contained in:
JosJuice 2020-11-28 17:08:55 +01:00
parent 9b03cdf93e
commit 9f3ad58588
1 changed files with 3 additions and 3 deletions

View File

@ -33,7 +33,7 @@ constexpr size_t FARCODE_SIZE_MMU = 1024 * 1024 * 48;
constexpr size_t STACK_SIZE = 2 * 1024 * 1024; constexpr size_t STACK_SIZE = 2 * 1024 * 1024;
constexpr size_t SAFE_STACK_SIZE = 512 * 1024; constexpr size_t SAFE_STACK_SIZE = 512 * 1024;
constexpr size_t GUARD_SIZE = 0x10000; // two guards - bottom (permanent) and middle (see above) constexpr size_t GUARD_SIZE = 64 * 1024; // two guards - bottom (permanent) and middle (see above)
constexpr size_t GUARD_OFFSET = STACK_SIZE - SAFE_STACK_SIZE - GUARD_SIZE; constexpr size_t GUARD_OFFSET = STACK_SIZE - SAFE_STACK_SIZE - GUARD_SIZE;
JitArm64::JitArm64() : m_float_emit(this) JitArm64::JitArm64() : m_float_emit(this)
@ -275,9 +275,9 @@ void JitArm64::AllocStack()
return; return;
} }
m_stack_pointer = m_stack_base + GUARD_OFFSET; m_stack_pointer = m_stack_base + STACK_SIZE;
Common::ReadProtectMemory(m_stack_base, GUARD_SIZE); Common::ReadProtectMemory(m_stack_base, GUARD_SIZE);
Common::ReadProtectMemory(m_stack_pointer, GUARD_SIZE); Common::ReadProtectMemory(m_stack_base + GUARD_OFFSET, GUARD_SIZE);
#else #else
// For windows we just keep using the system stack and reserve a large amount of memory at the end // For windows we just keep using the system stack and reserve a large amount of memory at the end
// of the stack. // of the stack.