mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
Update svcGetDebugThreadContext, add svcSetDebugThreadContext, implement threadDumpContext
This commit is contained in:
parent
5498d3e0c7
commit
3ecd841ec2
@ -861,12 +861,30 @@ Result svcContinueDebugEvent(Handle debug, u32 flags, u64* tid_list, u32 num_tid
|
||||
Result svcLegacyContinueDebugEvent(Handle debug, u32 flags, u64 threadID);
|
||||
|
||||
/**
|
||||
* @brief Gets the context of a thread in a debugging session.
|
||||
* @brief Gets the context (dump the registers) of a thread in a debugging session.
|
||||
* @return Result code.
|
||||
* @param[out] ctx Output thread context (register dump).
|
||||
* @param[in] debug Debug handle.
|
||||
* @param[in] threadId ID of the thread to dump the context of.
|
||||
* @param[in] flags Register groups to select, combination of @ref RegisterGroup flags.
|
||||
* @note Syscall number 0x67.
|
||||
* @warning Official kernel will not dump any CPU GPR if the thread is currently executing a system call (except @ref svcBreak and @ref svcReturnFromException).
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcGetDebugThreadContext(u8* out, Handle debug, u64 threadID, u32 flags);
|
||||
Result svcGetDebugThreadContext(ThreadContext* ctx, Handle debug, u64 threadID, u32 flags);
|
||||
|
||||
/**
|
||||
* @brief Gets the context (dump the registers) of a thread in a debugging session.
|
||||
* @return Result code.
|
||||
* @param[in] debug Debug handle.
|
||||
* @param[in] threadId ID of the thread to set the context of.
|
||||
* @param[in] ctx Input thread context (register dump).
|
||||
* @param[in] flags Register groups to select, combination of @ref RegisterGroup flags.
|
||||
* @note Syscall number 0x68.
|
||||
* @warning Official kernel will return an error if the thread is currently executing a system call (except @ref svcBreak and @ref svcReturnFromException).
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcSetDebugThreadContext(Handle debug, u64 threadID, const ThreadContext* ctx, u32 flags);
|
||||
|
||||
///@}
|
||||
|
||||
|
@ -482,6 +482,11 @@ SVC_BEGIN svcGetDebugThreadContext
|
||||
ret
|
||||
SVC_END
|
||||
|
||||
SVC_BEGIN svcSetDebugThreadContext
|
||||
svc 0x68
|
||||
ret
|
||||
SVC_END
|
||||
|
||||
SVC_BEGIN svcQueryDebugProcessMemory
|
||||
str x1, [sp, #-16]!
|
||||
svc 0x69
|
||||
|
@ -134,3 +134,7 @@ Result threadPause(Thread* t) {
|
||||
Result threadResume(Thread* t) {
|
||||
return svcSetThreadActivity(t->handle, 0);
|
||||
}
|
||||
|
||||
Result threadDumpContext(ThreadContext* ctx, Thread* t) {
|
||||
return svcGetThreadContext3(ctx, t->handle);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user