From b37c639ee018ef6403859952fd459fe8073313d3 Mon Sep 17 00:00:00 2001 From: Justin Weiss Date: Mon, 24 Feb 2020 17:47:14 -0800 Subject: Fix dynarec crashes on 3DS After the dynarec writes new instructions, it has to flush the instruction and data caches. Some of these flush operations are privileged on the 3DS, so the clear cache functions have to run through svcBackdoor. The Nintendo implementation (and CFW reimplementation) of svcBackdoor has a problem where interrupts and context switches will cause crashes. Even though we can disable interrupts in the flush function, there's still a window of time between svcBackdoor being called and the function being run where an interrupt will corrupt the stack. Luma3DS implemements a svcCustomBackdoor call we can use that also runs a function in supervisor mode, but uses an implementation that avoids this problem. --- Makefile.libretro | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Makefile.libretro') diff --git a/Makefile.libretro b/Makefile.libretro index 133ee6d..d9b528a 100644 --- a/Makefile.libretro +++ b/Makefile.libretro @@ -213,6 +213,8 @@ else ifeq ($(platform), ctr) CFLAGS += -Ifrontend/3ds CFLAGS += -Werror=implicit-function-declaration + OBJS += frontend/3ds/utils.o + # CFLAGS += -DPCSX BUILTIN_GPU = unai DYNAREC = ari64 -- cgit v1.2.3