From 398a412707a79dc048cb9b24cfe0b66bb3fa8fbe Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Thu, 14 May 2015 00:58:57 -0500 Subject: [PATCH] Inherit exe stack size if user doesn't specify one --- src/xenia/kernel/xboxkrnl_threading.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/xenia/kernel/xboxkrnl_threading.cc b/src/xenia/kernel/xboxkrnl_threading.cc index a8dbaa8ae..a1c4f296e 100644 --- a/src/xenia/kernel/xboxkrnl_threading.cc +++ b/src/xenia/kernel/xboxkrnl_threading.cc @@ -18,6 +18,7 @@ #include "xenia/kernel/objects/xsemaphore.h" #include "xenia/kernel/objects/xthread.h" #include "xenia/kernel/objects/xtimer.h" +#include "xenia/kernel/objects/xuser_module.h" #include "xenia/kernel/util/shim_utils.h" #include "xenia/kernel/xboxkrnl_private.h" #include "xenia/xbox.h" @@ -100,6 +101,14 @@ SHIM_CALL ExCreateThread_shim(PPCContext* ppc_state, KernelState* state) { // LPVOID StartContext, // DWORD CreationFlags // 0x80? + // Inherit default stack size + if (stack_size == 0) { + stack_size = state->GetExecutableModule()->xex_header()->exe_stack_size; + } + + // Stack must be aligned to 16kb pages + stack_size = std::max((uint32_t)0x4000, ((stack_size + 0xFFF) & 0xFFFFF000)); + XThread* thread = new XThread(state, stack_size, xapi_thread_startup, start_address, start_context, creation_flags);