ErrDisp: Difference between revisions

From 3dbrew
Jump to navigation Jump to search
Guiand (talk | contribs)
No edit summary
Steveice10 (talk | contribs)
mNo edit summary
Line 14: Line 14:
|-
|-
| 0x00010800
| 0x00010800
| ThrowFatalError(0x80-byte errorinfo)
| [[ERR:ThrowFatalError|ThrowFatalError]]
|-
|-
| 0x00020042
| 0x00020042
| (size, <nowiki>(size<<14) | 2</nowiki>, errorinfoptr) This is similar to cmd1, except with this the input buffer is copied to final output errorinfo+0x80 instead of +0x0, via the ARM11 kernel. Max size is 0x100. ErrDisp doesn't do anything in the cmd-handler for this command at all, besides checking the command header and buffer header.
| [[ERR:SetUserString|SetUserString]]
|}
 
= output, where *((u8*)errinfo) == 0 or 1 =
{| class="wikitable" border="1"
|-
! Entry
! Format string
! Format args
! Description
|-
| PID
| 0x%08X_0x%08X
| *(u32*)(errinfo + 0x10), *(u32*)(errinfo + 0x14)
| Process ID
|-
| REV
| %d
| *(u16*)(errinfo + 2) <nowiki>|</nowiki> (*(u8*)(errinfo + 1) << 16)
| ?
|-
| AID
| 0x%08X_0x%08X
| *(u32*)(errinfo + 0x18), *(u32*)(errinfo + 0x1C)
| Application ID?
|-
| ADR
| 0x%08X
| *(u32*)(errinfo + 8)
| Address where the error was thrown from
|-
| RSL
| 0x%08X
| *(u32*)(errinfo + 4)
| Error code
|-
| Level
| %d
| *(u32*)(errinfo + 4) & 0x80000000 ? (*(u32*)(errinfo + 4) >> 27) - 0x20 :  *(u32*)(errinfo + 4) >> 27
| Error code level
|-
| Summary
| %d
| (*(u32*)(errinfo + 4) & 0x7E00000) >> 21
| Error code summary
|-
| Module
| %d
| (*(u32*)(errinfo + 4) & 0x3FC00) >> 10
| Error code module
|-
| Desc
| %d
| *(u32*)(errinfo + 4) & 0x3FF
| Error code description
|-
| Datetime
| %04d/%02d/%02d %02d:%02d:%02d
| ?
| ?
|}
 
= output, where *((u8*)errinfo) == 4 =
{| class="wikitable" border="1"
|-
! Entry
! Format string
! Format args
! Description
|-
| PID
| 0x%08X_0x%08X
| *(u32*)(errinfo + 0x10), *(u32*)(errinfo + 0x14)
| Process ID
|-
| REV
| %d
| *(u16*)(errinfo + 2) <nowiki>|</nowiki> (*(u8*)(errinfo + 1) << 16)
| ?
|-
| AID
| 0x%08X_0x%08X
| *(u32*)(errinfo + 0x18), *(u32*)(errinfo + 0x1C)
| Application ID?
|-
| RSL
| 0x%08X
| *(u32*)(errinfo + 4)
| Error code
|-
| Level
| %d
| *(u32*)(errinfo + 4) & 0x80000000 ? (*(u32*)(errinfo + 4) >> 27) - 0x20 :  *(u32*)(errinfo + 4) >> 27
| Error code level
|-
| Summary
| %d
| (*(u32*)(errinfo + 4) & 0x7E00000) >> 21
| Error code summary
|-
| Module
| %d
| (*(u32*)(errinfo + 4) & 0x3FC00) >> 10
| Error code module
|-
| Desc
| %d
| *(u32*)(errinfo + 4) & 0x3FF
| Error code description
|-
| ?
| %.*s
| 0x2E, for (int i = 0; i < 2; i++) errinfo + (i * 46) + 0x20
| ?
|-
| Datetime
| %04d/%02d/%02d %02d:%02d:%02d
| ?
| ?
|}
|}

Revision as of 04:57, 8 December 2015

This system process handles displaying the error screens, such as "an error has occurred, the system needs shutdown". This can also display a register dump for exceptions, and info for fatal errors. (Normally the black-screen errors are displayed on retail, while the latter is displayed on development units.)

The register dump/fatal error info can also be written to nandrw/sys/native.log. On retail consoles, the system does not notify ErrDisp that any user-land exceptions occurred, ErrDisp is only notified for this on dev/debug units. Therefore, on retail consoles native.log only contains info from fatal errors. Starting with 5.0.0-11 ErrDisp no longer writes logs to native.log, except when the error-type is value 5 and when other checks with the errorinfo structure are successful (normally processes using this port never use error-type 5).

The bottom screen displays the error screen like "error has occurred", even with a development 3DS. The top screen can display the development error info, this is only displayed when UNITINFO bit0 is clear, for a development 3DS.

ErrDisp handles "returning" to Home Menu via NSS:RebootSystem, which triggers a hardware system reboot.

ErrDisp error port "err:f"

Command Header Description
0x00010800 ThrowFatalError
0x00020042 SetUserString