Line 20:
Line 20:
|}
|}
−
= errinfo =
+
= output, where *((u8*)errinfo) == 4 =
−
Note: the following data is still only partly reliable
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
−
! Type
+
! Entry
−
! Name
+
! Format string
−
! Info
+
! Format args
+
! Description
|-
|-
−
| 1 byte
+
| PID
+
| 0x%08X_0x%08X
+
| 0x41900000, *(u32*)(errinfo + 0x10)
+
| Process ID
+
|-
+
| REV
+
| %d
+
| *(u16*)(errinfo + 2) | (*(u8*)(errinfo + 1) << 16)
| ?
| ?
−
| unknown
|-
|-
−
| 1 byte
+
| AID
−
| ?
+
| 0x%08X_0x%08X
−
| unknown
+
| 0x41900000, *(u32*)(errinfo + 0x18)
+
| Application ID?
+
|-
+
| RSL
+
| 0x%08X
+
| *(u32*)(errinfo + 4)
+
| Error code
+
|-
+
| Level
+
| %d
+
| *(u32*)(errinfo + 4) & 0x80000000 ? (*(u32*)(errinfo + 4) >> 0x27) - 0x20 : *(u32*)(errinfo + 4) >> 0x27
+
| Error code level
|-
|-
−
| 2 bytes
+
| Summary
−
|
+
| %d
−
| The type of error info struct (??)
+
| (*(u32*)(errinfo + 4) & 0x7E00000) >> 21
+
| Error code summary
|-
|-
−
| 4 bytes
+
| Module
−
|
+
| %d
−
| The return code of the errored function (?? - Inconsistent)
+
| (*(u32*)(errinfo + 4) & 0x3FC00) >> 10
+
| Error code module
|-
|-
−
| 4 bytes
+
| Desc
−
| caller_ptr
+
| %d
−
| The contents of the LR register - where the error was called from
+
| (*(u32*)(errinfo + 4) << 22) >> 22
+
| Error code description
|-
|-
−
| 4 bytes
+
| ?
−
| process_id
+
| %0.*s
−
| The ID/Handle of the running process
+
| 0x2E, for (int i = 0; i < 2; i++) (errinfo + (((i << 3) - i) + (i << 4)) << 1) + 0x20
+
| ?
+
|-
+
| Datetime
+
| %04d/%02d/%02d %02d:%02d:%02d
+
| ?
+
| ?
|}
|}