
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])();
|
|
} |