Changes

Jump to navigation Jump to search
3,807 bytes added ,  17:06, 1 December 2020
Line 1: Line 1: −
PGL (Program Loader) is a sysmodule designed for encapsulating all program loading logic.
+
PGL (Program Launcher) is a sysmodule designed for encapsulating all program launching / management logic.
 +
 
 +
The core logic of this sysmodule was previously encapsulated by the ns:dev interface (and the nn.nssrv.ProcessLaunchControlTask thread in particular).
    
= pgl =
 
= pgl =
Line 18: Line 20:  
| 6 || [[#BoostSystemMemoryResourceLimit]]
 
| 6 || [[#BoostSystemMemoryResourceLimit]]
 
|-
 
|-
| 7 ||  
+
| 7 || [[#IsProcessTracked]]
 
|-
 
|-
| 8 ||  
+
| 8 || [[#EnableApplicationCrashReport]]
 
|-
 
|-
| 9 ||
+
| 9 || [[#IsApplicationCrashReportEnabled]]
 
|-
 
|-
| 10 ||  
+
| 10 || [[#EnableApplicationAllThreadDumpOnCrash]]
 
|-
 
|-
| 12 ||
+
| 12 || [[#TriggerSnapShotDumper]]
 
|-
 
|-
| 20 || [[#GetEventObserver]]
+
| 20 || [[#GetShellEventObserver]]
 +
|-
 +
| 21 || [11.0.0+]
 
|}
 
|}
   Line 43: Line 47:  
|-
 
|-
 
| 2 || 4 || LaunchFlags_EnableCrashReportScreenShotForDevelop
 
| 2 || 4 || LaunchFlags_EnableCrashReportScreenShotForDevelop
 +
|-
 +
|}
 +
 +
= SnapShotDumpType =
 +
 +
The SnapShotDumpType enum looks like this:
 +
 +
{| class=wikitable
 +
! Value || Name
 +
|-
 +
| 0 || SnapShotDumpType_None
 +
|-
 +
| 1 || SnapShotDumpType_Auto
 +
|-
 +
| 2 || SnapShotDumpType_Full
 
|-
 
|-
 
|}
 
|}
Line 89: Line 108:  
This just calls pm:shell->TerminateProcess with the input process id.
 
This just calls pm:shell->TerminateProcess with the input process id.
   −
== GetEventObserver ==
+
== GetShellEventObserver ==
 
No input. Returns an [[#IEventObserver]].
 
No input. Returns an [[#IEventObserver]].
   Line 118: Line 137:  
Error 0x6E4 is returned when there is no application process.
 
Error 0x6E4 is returned when there is no application process.
   −
== BoostSystemMemoryResourceLimit
+
== BoostSystemMemoryResourceLimit ==
    
This takes in a u64 mem_size, and uses it as input to pm:shell->BoostSystemMemoryResourceLimit
 
This takes in a u64 mem_size, and uses it as input to pm:shell->BoostSystemMemoryResourceLimit
 +
 +
== EnableApplicationCrashReport ==
 +
 +
Takes an input boolean "enable".
 +
 +
This calls pm:shell->GetApplicationProcessId. If the returned process ID is tracked, this sets or clears bit 1 (value 0x2) in the tracked process's flags.
 +
 +
When a process crash event occurs and pgl launches crash report, the second argument is "%d" formatted with the bitwise AND of this bit and bit 0 (value 0x1).
 +
 +
LaunchFlags_EnableDetailedCrashReport causes the process to have both of these flags set, otherwise they are both zero.
 +
 +
Thus this command is only useful for disabling/toggling detailed crash reports for applications launched with LaunchFlags_EnableDetailedCrashReport, as processes without the launch flag will always send "0" for the creport argument.
 +
 +
== IsApplicationCrashReportEnabled ==
 +
 +
This returns the value of the bit set or cleared by [[#EnableApplicationCrashReport]]
 +
 +
== EnableApplicationAllThreadDumpOnCrash ==
 +
 +
Takes an input boolean "enable".
 +
 +
This calls pm:shell->GetApplicationProcessId. If the returned process ID is tracked, this sets or clears bit 3 (value 0x8) in the tracked process's flags.
 +
 +
Using this command unconditionally sets bit 2 (value 0x4) in the tracked process's flags.
 +
 +
When the SnapShotDumper is launched, argument "-log %d" is set to the value of bit 3 if bit 2 is 1. Otherwise, argument "-log %d" is set to the value of the system setting "snap_shot_dump!output_all_log".
 +
 +
Thus, this overrides the log option for the current application process from snap_shot_dump!output_all_log with the input value.
 +
 +
Previously this functionality was controlled by ns:am2->EnableApplicationAllThreadDumpOnCrash, which is now a wrapper for this function.
 +
 +
== TriggerSnapShotDumper ==
 +
 +
This takes an input 32 "SnapShotDumpType" and an input MapAliasBuffer "argument".
 +
 +
This manually invokes the same function to launch the SnapShotDumper program (0100000000002071) as is called automatically when a process crashes and jit_debug!enable_jit_debug is 1.
 +
 +
If the argument is NULL, then the snap shot dumper is launched with argument Format("D %010llu -log %d -dump %d", process_id, log_option, snap_shot_dump_type - 1).
 +
If the argument is not NULL, the snap shot dumper is launched with argument Format("D %010llu \"%s\" -log %d -dump %d", process_id, argument, log_option, snap_shot_dump_type - 1).
 +
 +
When invoked automatically, the SnapShotDumpType is SnapShotDumpType_Full if both "snap_shot_dump!full_dump" and "snap_shot_dump!auto_dump" are true, SnapShotDumpType_Auto if only "snap_shot_dump!auto_dump" is 1, and SnapShotDumpType_None otherwise.
    
== IEventObserver ==
 
== IEventObserver ==
Line 127: Line 187:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || [[#GetProcessEventHandle]]
 
|-
 
|-
| 1 ||  
+
| 1 || [[#GetProcessEventInfo]]
 
|}
 
|}
 +
 +
== GetProcessEventHandle ==
 +
 +
This takes no input and returns an output copy event handle.
 +
 +
== GetProcessEventInfo ==
 +
 +
This takes no input and attempts to receive a [[Process_Manager_services#ProcessEventInfo]] from the observer's message queue.
 +
 +
Every time a process event occurs, pgl receives the event from PM (it does pm:shell->GetProcessEventHandle() during startup and has a thread looping pm:shell->GetProcessEventInfo() to track process events.
 +
 +
PGL sends to all observers' message queues a [[Process_Manager_services#ProcessEventInfo]] for each event it receives, thus allowing for multiple subscribers to process events.

Navigation menu