mirror of
https://github.com/LumaTeam/Luma3DS.git
synced 2026-02-22 09:54:38 +00:00
This commit adds all the changes made to the 3GX plugin loader fork of Luma3DS. The most important features are:
- Add 3GX plugin loader support. New service added to rosalina: plg:ldr
- Add svcControlProcess, svcControlMemoryUnsafe and improve svcMapProcessMemoryEx (breaking change)
- Allow applications to override certain configurations depending on their needs:
- Disable core2 thread redirection
- Disable game patching for the next app
- Force New 3DS speedup
- Force next application in a specific memory mode
- Block the opening of the Rosalina menu
- Add GDB commands to list all process handles and catch all SVC (latter is for IDA Pro as gdb client supports it)
- Other changes necessary for plugins to work properly. Please check changed files in this PR for more details.
---------
Co-authored-by: PabloMK7 <hackyglitch@gmail.com>
Co-authored-by: Nanquitas <nath.doidi@gmail.com>
Co-authored-by: TuxSH <1922548+TuxSH@users.noreply.github.com>
32 lines
1.0 KiB
C
32 lines
1.0 KiB
C
#include "svc/ExitProcess.h"
|
|
|
|
void ExitProcessHook(void) {
|
|
KProcess *currentProcess = currentCoreContext->objectContext.currentProcess;
|
|
u32 flags = KPROCESS_GET_RVALUE(currentProcess, customFlags);
|
|
|
|
if (flags & SignalOnExit)
|
|
{
|
|
// Signal that the process is about to be terminated
|
|
if (PLG_GetStatus() == PLG_CFG_RUNNING)
|
|
PLG_SignalEvent(PLG_CFG_EXIT_EVENT);
|
|
|
|
// Unlock all threads that might be locked
|
|
{
|
|
KRecursiveLock__Lock(criticalSectionLock);
|
|
|
|
for (KLinkedListNode *node = threadList->list.nodes.first;
|
|
node != (KLinkedListNode *)&threadList->list.nodes;
|
|
node = node->next)
|
|
{
|
|
KThread *thread = (KThread *)node->key;
|
|
|
|
if (thread->ownerProcess == currentProcess && thread->schedulingMask & 0x20)
|
|
thread->schedulingMask &= ~0x20;
|
|
}
|
|
|
|
KRecursiveLock__Unlock(criticalSectionLock);
|
|
}
|
|
}
|
|
|
|
return ((void(*)())officialSVCs[0x3])();
|
|
} |