From d876da1a013082fc443274fd65f3c30f751e2d5f Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 5 Sep 2016 08:57:09 -0700 Subject: [PATCH] Initialize fp correctly on a new thread. --- Core/HLE/sceKernelThread.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index c92a154a4b..528cde669c 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -2016,8 +2016,9 @@ int __KernelStartThread(SceUID threadToStartID, int argSize, u32 argBlockPtr, bo Memory::Write_U32(MIPS_MAKE_B(-1), sp + 8); Memory::Write_U32(MIPS_MAKE_NOP(), sp + 12); - // Point ra at our return stub. + // Point ra at our return stub, and start fp off matching sp. startThread->context.r[MIPS_REG_RA] = sp; + startThread->context.r[MIPS_REG_FP] = sp; // Smaller is better for priority. Only switch if the new thread is better. if (cur && cur->nt.currentPriority > startThread->nt.currentPriority) {