diff options
author | Justin Weiss | 2020-02-24 17:47:14 -0800 |
---|---|---|
committer | Justin Weiss | 2020-02-24 20:04:58 -0800 |
commit | b37c639ee018ef6403859952fd459fe8073313d3 (patch) | |
tree | e7ae2baefbc11ac89b25240fb505441e18702a5b /libpcsxcore | |
parent | 28d1bea2e828cd079593abc8c97ea6ff4fd7d4f4 (diff) | |
download | pcsx_rearmed-b37c639ee018ef6403859952fd459fe8073313d3.tar.gz pcsx_rearmed-b37c639ee018ef6403859952fd459fe8073313d3.tar.bz2 pcsx_rearmed-b37c639ee018ef6403859952fd459fe8073313d3.zip |
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.
Diffstat (limited to 'libpcsxcore')
-rw-r--r-- | libpcsxcore/new_dynarec/new_dynarec.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libpcsxcore/new_dynarec/new_dynarec.c b/libpcsxcore/new_dynarec/new_dynarec.c index dfa17a7..bb6ff0b 100644 --- a/libpcsxcore/new_dynarec/new_dynarec.c +++ b/libpcsxcore/new_dynarec/new_dynarec.c @@ -7085,6 +7085,10 @@ void new_dynarec_init(void) { SysPrintf("Init new dynarec\n"); +#ifdef _3DS + check_rosalina(); +#endif + // allocate/prepare a buffer for translation cache // see assem_arm.h for some explanation #if defined(BASE_ADDR_FIXED) |