diff --git a/src/xenia/cpu/frontend/ppc_context.h b/src/xenia/cpu/frontend/ppc_context.h index 653ec5ba8..8516f70e4 100644 --- a/src/xenia/cpu/frontend/ppc_context.h +++ b/src/xenia/cpu/frontend/ppc_context.h @@ -19,6 +19,9 @@ namespace cpu { class Processor; class ThreadState; } // namespace cpu +namespace kernel { +class KernelState; +} // namespace kernel } // namespace xe namespace xe { @@ -209,6 +212,9 @@ typedef struct alignas(64) PPCContext_s { // current runtime and its data. Processor* processor; + // Shared kernel state, for easy access from kernel exports. + xe::kernel::KernelState* kernel_state; + uint8_t* physical_membase; void SetRegFromString(const char* name, const char* value); diff --git a/src/xenia/kernel/objects/xthread.cc b/src/xenia/kernel/objects/xthread.cc index 3aa0a0548..4f6a58b86 100644 --- a/src/xenia/kernel/objects/xthread.cc +++ b/src/xenia/kernel/objects/xthread.cc @@ -205,6 +205,9 @@ X_STATUS XThread::Create() { thread_state_->thread_id(), thread_state_->stack_limit(), thread_state_->stack_base()); + // Exports use this to get the kernel. + thread_state_->context()->kernel_state = kernel_state_; + uint8_t proc_mask = static_cast(creation_params_.creation_flags >> 24);