Line 183:
Line 183:
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result
|-
|-
−
| 0x64 || svcContinueDebugEvent || W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id || W0=result
+
| 0x64 || svcContinueDebugEvent || [Until 3.0.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id
+
[3.0.0 +] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means "all threads")
+
|| W0=result
|-
|-
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out
Line 1,801:
Line 1,803:
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual
|-
|-
+
|}
+
+
== ContinueDebugFlagsOld ==
+
Until [[3.0.0]]:
+
+
{| class=wikitable
+
! Bit || Bitmask || Description
+
|-
+
| 0 || 1 || CancelSynchronization (cancels with error 0x6C01)
+
|-
+
| 1 || 2 || SwallowException
+
|-
+
| 2 || 4 || ResumeAllThreads
|}
|}
== ContinueDebugFlags ==
== ContinueDebugFlags ==
+
Starting from [[3.0.0]]:
+
{| class=wikitable
{| class=wikitable
! Bit || Bitmask || Description
! Bit || Bitmask || Description
|-
|-
−
| 0 || 1 || CancelSynchronization (only if ResumeAllThreads is set; cancels with error 0x6C01)
+
| 0 || 1 || CancelSynchronization (cancels with error 0x6C01)
|-
|-
| 1 || 2 || SwallowException
| 1 || 2 || SwallowException
|-
|-
−
| 2 || 4 || ResumeAllThreads
+
| 2 || 4 || Resume
+
|-
+
| 3 || 8 || CancelSynchronizationInverted
|}
|}
+
+
CancelSynchronizationInverted is like CancelSynchronization but acts on all threads that aren't in the input list.
+
+
If the input number of threads is 0, this means "all threads".
== DebugEventInfo ==
== DebugEventInfo ==