mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-05 19:51:45 +00:00
ProcessManager: Make launch flag parsing version agnostic.
This commit is contained in:
parent
d6cf7c605f
commit
c19750a0d5
2 changed files with 15 additions and 4 deletions
|
@ -143,7 +143,7 @@ void Registration::HandleProcessLaunch() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to create the process... */
|
/* 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;
|
goto PROCESS_CREATION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,10 +168,13 @@ void Registration::HandleProcessLaunch() {
|
||||||
if (program_info.application_type & 1) {
|
if (program_info.application_type & 1) {
|
||||||
new_process.flags |= 0x40;
|
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;
|
new_process.flags |= 1;
|
||||||
}
|
}
|
||||||
if (launch_flags & 0x10) {
|
if (LAUNCHFLAGS_NOTIFYDEBUGEVENTS(launch_flags) && (!kernelAbove200() || (program_info.application_type & 4))) {
|
||||||
new_process.flags |= 0x8;
|
new_process.flags |= 0x8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +190,7 @@ void Registration::HandleProcessLaunch() {
|
||||||
g_debug_application_event->signal_event();
|
g_debug_application_event->signal_event();
|
||||||
g_debug_next_application = false;
|
g_debug_next_application = false;
|
||||||
rc = 0;
|
rc = 0;
|
||||||
} else if (launch_flags & 2) {
|
} else if (LAUNCHFLAGS_STARTSUSPENDED(launch_flags)) {
|
||||||
rc = 0;
|
rc = 0;
|
||||||
} else {
|
} else {
|
||||||
rc = svcStartProcess(new_process.handle, program_info.main_thread_priority, program_info.default_cpu_id, program_info.main_thread_stack_size);
|
rc = svcStartProcess(new_process.handle, program_info.main_thread_priority, program_info.default_cpu_id, program_info.main_thread_stack_size);
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
#include <switch.h>
|
#include <switch.h>
|
||||||
#include <stratosphere.hpp>
|
#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 {
|
class Registration {
|
||||||
public:
|
public:
|
||||||
struct TidSid {
|
struct TidSid {
|
||||||
|
|
Loading…
Reference in a new issue