From c276347b620130344a0bf2c1f6017991659d9cde Mon Sep 17 00:00:00 2001 From: BullyWiiPlaza Date: Sun, 20 Aug 2017 22:03:08 +0200 Subject: [PATCH] Fix games like Paper Mario Color Splash from crashing with the message "Kernel copy thread stack allocation failed" --- src/system/kernel.h | 22 +++++++++++++--------- tcpgecko.elf | Bin 234356 -> 234276 bytes 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/system/kernel.h b/src/system/kernel.h index e3e631b..30f9d8c 100644 --- a/src/system/kernel.h +++ b/src/system/kernel.h @@ -67,21 +67,25 @@ int kernelCopyService(int argc, void *argv) { } } + // This is here to avoid the warning return 0; } void startKernelCopyService() { unsigned int stack = (unsigned int) memalign(0x40, 0x100); - ASSERT_ALLOCATED(stack, "Kernel copy thread stack") - stack += 0x100; - void *thread = memalign(0x40, 0x1000); - ASSERT_ALLOCATED(thread, "Kernel copy thread") - int status = OSCreateThread(thread, kernelCopyService, 1, NULL, (u32) stack + sizeof(stack), sizeof(stack), 31, - OS_THREAD_ATTR_AFFINITY_CORE1 | OS_THREAD_ATTR_PINNED_AFFINITY | OS_THREAD_ATTR_DETACH); - ASSERT_INTEGER(status, 1, "Creating kernel copy thread") - // OSSetThreadName(thread, "Kernel Copier"); - OSResumeThread(thread); + if (stack != 0) { + stack += 0x100; + void *thread = memalign(0x40, 0x1000); + ASSERT_ALLOCATED(thread, "Kernel copy thread") + + int status = OSCreateThread(thread, kernelCopyService, 1, NULL, (u32) stack + sizeof(stack), sizeof(stack), 31, + OS_THREAD_ATTR_AFFINITY_CORE1 | OS_THREAD_ATTR_PINNED_AFFINITY | + OS_THREAD_ATTR_DETACH); + ASSERT_INTEGER(status, 1, "Creating kernel copy thread") + // OSSetThreadName(thread, "Kernel Copier"); + OSResumeThread(thread); + } } #define MINIMUM_KERNEL_COMPARE_LENGTH 4 diff --git a/tcpgecko.elf b/tcpgecko.elf index 236eefdd3cb85ef9e82e0a5c4c0b94e96e0d9b43..703d973d469eef113042836e0c6d0d88e4da3d4e 100644 GIT binary patch delta 26511 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 delta 28400 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 Z2Q8ZMD$ZtyO~UZuApFoph@?SL{}&|<3z`4`