KDebug: Difference between revisions
No edit summary |
No edit summary |
||
(30 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Kernel objects]] | [[Category:Kernel synchronization objects]] | ||
class [[KDebug]] extends [[KSynchronizationObject]]; | [[Category:Kernel interrupt events]] | ||
class [[KDebug]] extends [[KSynchronizationObject]] and [[KSendableInterruptEvent]]; | |||
Size : 0xA0 bytes | Size : 0xA0 bytes | ||
Line 29: | Line 30: | ||
| KLinkedListNode* | | KLinkedListNode* | ||
| Pointer to last KLinkedListNode in node list of KThreads that sync with this object | | Pointer to last KLinkedListNode in node list of KThreads that sync with this object | ||
|- | |||
| 0x14 | |||
| [[KSendableInterruptEvent]] | |||
| Process termination event | |||
|- | |||
| 0x1C | |||
| u8 | |||
| Indicates an ATTACH PROCESS event has been signaled to this object | |||
|- | |||
| 0x1D | |||
| u8 | |||
| Debug string length >> 31, always 0 | |||
|- | |||
| 0x1E | |||
| u8 | |||
| Indicates that a debug event is currently being signaled to this object | |||
|- | |||
| 0x1F | |||
| u8 | |||
| Indicates that the parent process is paused (using svcBreakDebugProcess). | |||
svcContinueDebugEvent will ignore all debug events other than EXIT PROCESS, and some other debug SVCs will return an error. | |||
|- | |||
| 0x20 | |||
| [[SVC|DebugEventType]] | |||
| Type of the latest debug event | |||
|- | |||
| 0x24 | |||
| u32 | |||
| Unknown, probably unused | |||
|- | |||
| 0x28 | |||
| [[KThread]] * | |||
| Thread having exclusive access to this object | |||
|- | |||
| 0x2C | |||
| u32 | |||
| Debug event flags set by svcContinueDebugEvents | |||
Bit0: no exception dumps are made if this is set. | |||
Bit1 and following: report EXCEPTION (this flag is bypassed for svc 0xFF), SCHEDULE, SYSCALL, MAP debug events, respectively. | |||
|- | |||
| 0x30 | |||
| u32 | |||
| Stop point type that caused the event: 0 = svc 0xFF, 1 = breakpoint, 2 = watchpoint (otherwise it's not updated). | |||
|- | |||
| 0x34 | |||
| u32 | |||
| Count of KEventInfo object nodes to be fetched with svcGetProcessDebugEvent (associated with this KDebug object) | |||
|- | |||
| 0x38 | |||
| [[KLinkedListNode]]* | |||
| Pointer to first KLinkedListNode in linked list of KEventInfo objects to be fetched with svcGetProcessDebugEvent | |||
|- | |||
| 0x3C | |||
| [[KLinkedListNode]]* | |||
| Pointer to last KLinkedListNode in linked list of KEventInfo objects to be fetched with svcGetProcessDebugEvent | |||
|- | |||
| 0x40 | |||
| u32 | |||
| Count of KEventInfo object nodes to be fetched with svcContinueDebugEvent (associated with this KDebug object) | |||
|- | |||
| 0x44 | |||
| [[KLinkedListNode]]* | |||
| Pointer to first KLinkedListNode in linked list of KEventInfo objects to be fetched with svcContinueDebugEvent | |||
|- | |||
| 0x48 | |||
| [[KLinkedListNode]]* | |||
| Pointer to last KLinkedListNode in linked list of KEventInfo objects to be fetched with svcContinueDebugEvent | |||
|- | |||
| 0x4C | |||
| [[KProcess]]* | |||
| Parent process | |||
|- | |||
| 0x50 | |||
| [[KThread]]* | |||
| Current KThread- thread being debugged | |||
|- | |||
| 0x54 | |||
| [[KThread]]* | |||
| Thread using ContinueDebugEvent | |||
|- | |||
| 0x58 | |||
| s32 | |||
| Cpu core of thread using ContinueDebugEvent | |||
|- | |||
| 0x5C | |||
| u32 | |||
| Count of KDebugThread object nodes associated with this KDebug object | |||
|- | |||
| 0x60 | |||
| KLinkedListNode* | |||
| Pointer to first KLinkedListNode in linked list of KDebugThread objects | |||
|- | |||
| 0x64 | |||
| KLinkedListNode* | |||
| Pointer to last KLinkedListNode in linked list of KDebugThread objects | |||
|- | |||
| 0x68 | |||
| u32 | |||
| List size; this [[KLinkedList]] of all the [[KThread]] instances of the parent process: the currently running threads followed the others, | |||
by core then by dynamic priority. | |||
|- | |||
| 0x6C | |||
| KLinkedListNode* | |||
| Pointer to first KLinkedListNode in the above list | |||
|- | |||
| 0x70 | |||
| KLinkedListNode* | |||
| Pointer to last KLinkedListNode in the above list | |||
|- | |||
| 0x74 | |||
| [[KRecursiveLock]] | |||
| Recursive lock | |||
|- | |||
| 0x7C | |||
| [[KThread]]* | |||
| Current KThread- used in svcBreak | |||
|- | |||
| 0x80 | |||
| u8 | |||
| Cleared when an EXCEPTION debug event was (attempted to be) signaled (i.e. even when bit2 of the debug flag is clear) | |||
|- | |||
| 0x81 | |||
| u8 | |||
| Indicates that an EXCEPTION debug event was signaled | |||
|- | |||
| 0x82 | |||
| u8 | |||
| Indicates that all threads should be unlocked | |||
|- | |||
| 0x83 | |||
| u8 | |||
| Indicates that an EXCEPTION debug event different from USER_BREAK was continued, while the process was paused | |||
|- | |||
| 0x84 | |||
| u8 | |||
| Indicates that a USER_BREAK debug event was continued while the process was paused | |||
|- | |||
| 0x85 | |||
| u8 | |||
| Indicates that the KProcess instance it belongs to has exited (normally ?) | |||
|- | |||
| 0x86 | |||
| u8 | |||
| Indicates that the KProcess instance it belongs to has been terminated | |||
|- | |||
| 0x87 | |||
| u8 | |||
| Indicates that svcBreak was used and not yet handled by svcContinueDebugEvent, with type != (UN)LOAD_RO | |||
|- | |||
| 0x88 | |||
| u32 * | |||
| Register dump | |||
|- | |||
| 0x8C | |||
| u32 | |||
| [[SVC#EXCEPTION_event|Exception type]] | |||
|- | |||
| 0x90 | |||
| u16 | |||
| Number of "EXCEPTION" events encountered (0 or 1) | |||
|- | |||
| 0x92 | |||
| u16 | |||
| ID of the invalid SVC that was attempted | |||
|- | |||
| 0x94 | |||
| u16 | |||
| Total number of debug events associated with this object awaiting svcContinueDebugEvent | |||
|- | |||
| 0x96 | |||
| u16 | |||
| Number of EXIT PROCESS debug events associated with this object awaiting svcContinueDebugEvent | |||
|- | |||
| 0x98 | |||
| const char * | |||
| Debug string | |||
|- | |||
| 0x9C | |||
| u32 | |||
| Debug string length | |||
|} | |} |