From 9333373872769f3d87132ee8a32232a1b1d298d7 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Mon, 12 Jun 2023 07:40:52 +0200 Subject: [PATCH] [Thread] Set pointer for: stack_kernel Based on disassembly and info from console it is used to store initial thread data like: - start_address, context, etc. --- src/xenia/kernel/xthread.cc | 1 + src/xenia/kernel/xthread.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/xenia/kernel/xthread.cc b/src/xenia/kernel/xthread.cc index 63dfc0bd8..f49645710 100644 --- a/src/xenia/kernel/xthread.cc +++ b/src/xenia/kernel/xthread.cc @@ -199,6 +199,7 @@ void XThread::InitializeGuestObject() { xe::store_and_swap(p + 0x056, 1); xe::store_and_swap(p + 0x05C, stack_base_); xe::store_and_swap(p + 0x060, stack_limit_); + xe::store_and_swap(p + 0x064, stack_base_ - kThreadKernelStackSize); xe::store_and_swap(p + 0x068, tls_static_address_); xe::store_and_swap(p + 0x06C, 0); xe::store_and_swap(p + 0x074, guest_object() + 0x074); diff --git a/src/xenia/kernel/xthread.h b/src/xenia/kernel/xthread.h index 7f72a7e14..f5bac2942 100644 --- a/src/xenia/kernel/xthread.h +++ b/src/xenia/kernel/xthread.h @@ -166,6 +166,8 @@ class XThread : public XObject, public cpu::Thread { static constexpr uint32_t kStackAddressRangeBegin = 0x70000000; static constexpr uint32_t kStackAddressRangeEnd = 0x7F000000; + static constexpr uint32_t kThreadKernelStackSize = 0xF0; + struct CreationParams { uint32_t stack_size; uint32_t xapi_thread_startup;