ProcessManager: Make launch flag parsing version agnostic.

This commit is contained in:
Michael Scire 2018-05-04 01:01:53 -06:00
parent d6cf7c605f
commit c19750a0d5
2 changed files with 15 additions and 4 deletions

View file

@ -143,7 +143,7 @@ void Registration::HandleProcessLaunch() {
}
/* Try to create the process... */
if (R_FAILED((rc = ldrPmCreateProcess((launch_flags >> 2) & 3, new_process.ldr_queue_index, g_resource_limit_handles[reslimit_idx], &new_process.handle)))) {
if (R_FAILED((rc = ldrPmCreateProcess(LAUNCHFLAGS_ARGLOW(launch_flags) | LAUNCHFLAGS_ARGHIGH(launch_flags), new_process.ldr_queue_index, g_resource_limit_handles[reslimit_idx], &new_process.handle)))) {
goto PROCESS_CREATION_FAILED;
}
@ -168,10 +168,13 @@ void Registration::HandleProcessLaunch() {
if (program_info.application_type & 1) {
new_process.flags |= 0x40;
}
if (launch_flags & 1) {
if (kernelAbove200() && LAUNCHFLAGS_NOTIYDEBUGSPECIAL(launch_flags) && (program_info.application_type & 4)) {
}
if (LAUNCHFLAGS_NOTIFYWHENEXITED(launch_flags)) {
new_process.flags |= 1;
}
if (launch_flags & 0x10) {
if (LAUNCHFLAGS_NOTIFYDEBUGEVENTS(launch_flags) && (!kernelAbove200() || (program_info.application_type & 4))) {
new_process.flags |= 0x8;
}
@ -187,7 +190,7 @@ void Registration::HandleProcessLaunch() {
g_debug_application_event->signal_event();
g_debug_next_application = false;
rc = 0;
} else if (launch_flags & 2) {
} else if (LAUNCHFLAGS_STARTSUSPENDED(launch_flags)) {
rc = 0;
} else {
rc = svcStartProcess(new_process.handle, program_info.main_thread_priority, program_info.default_cpu_id, program_info.main_thread_stack_size);

View file

@ -2,6 +2,14 @@
#include <switch.h>
#include <stratosphere.hpp>
#define LAUNCHFLAGS_NOTIFYWHENEXITED(flags) (flags & 1)
#define LAUNCHFLAGS_STARTSUSPENDED(flags) (flags & (kernelAbove500() ? 0x10 : 0x2))
#define LAUNCHFLAGS_ARGLOW(flags) (kernelAbove500() ? ((flags & 0x14) != 0x10) : (kernelAbove200() ? ((flags & 0x6) != 0x2) : ((flags >> 2) & 1)))
#define LAUNCHFLAGS_ARGHIGH(flags) (flags & (kernelAbove500() ? 0x20 : 0x8))
#define LAUNCHFLAGS_NOTIFYDEBUGEVENTS(flags) (flags & (kernelAbove500() ? 0x8 : 0x10))
#define LAUNCHFLAGS_NOTIYDEBUGSPECIAL(flags) (flags & (kernelAbove500() ? 0x2 : (kernelAbove200() ? 0x20 : 0x0)))
class Registration {
public:
struct TidSid {