Line 994: |
Line 994: |
| | Exception address | | | Exception address |
| |- | | |- |
− | | u32 | + | | u32[4] |
− | | Argument (type-specific) | + | | Type-specific data, see below |
| |} | | |} |
| + | |
| + | The register storage layout for CPU exceptions is as follows (referring to user-mode registers): r0-r12, sp, <event-signaling exception handler>, lr_svc, lr, pc (misadjusted for Thumb instructions), cpsr. (????) |
| | | |
| Exception types: | | Exception types: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Reason | + | ! Exception type |
| ! Id | | ! Id |
− | ! Argument
| |
| |- | | |- |
| | UNDEFINED INSTRUCTION | | | UNDEFINED INSTRUCTION |
| | 0 | | | 0 |
− | | register storage
| |
| |- | | |- |
| | PREFETCH ABORT | | | PREFETCH ABORT |
| | 1 | | | 1 |
− | | register storage
| |
| |- | | |- |
| | DATA ABORT | | | DATA ABORT |
| | 2 | | | 2 |
− | | register storage
| |
| |- | | |- |
| | UNALIGNED DATA ACCESS | | | UNALIGNED DATA ACCESS |
| | 3 | | | 3 |
− | | register storage
| |
| |- | | |- |
| | ATTACH BREAK | | | ATTACH BREAK |
| | 4 | | | 4 |
− | | (None)
| |
| |- | | |- |
− | | SVC STOP POINT | + | | STOP POINT |
| | 5 | | | 5 |
− | | (None)
| |
| |- | | |- |
| | USER BREAK | | | USER BREAK |
| | 6 | | | 6 |
− | | User break type
| |
| |- | | |- |
| | DEBUGGER BREAK | | | DEBUGGER BREAK |
| | 7 | | | 7 |
− | | (None)
| |
| |- | | |- |
| | UNDEFINED SYSCALL | | | UNDEFINED SYSCALL |
| | 8 | | | 8 |
− | | Attempted syscall ID
| |
| |} | | |} |
| | | |
− | "SVC stop point" is svc 0xFF. | + | For UNDEFINED INSTRUCTION/PREFETCH ABORT/DATA ABORT/UNALIGNED DATA ACCESS/UNDEFINED SYSCALL: |
− | VFP exceptions aren't signaled?
| + | {| class="wikitable" border="1" |
| + | ! Type |
| + | ! Field |
| + | |- |
| + | | u32 |
| + | | Fault information: Fault Address Register (for DATA ABORT and UNALIGNED DATA ACCESS), |
| + | attempted SVC ID (for UNDEFINED SYSCALL), otherwise 0 |
| + | |} |
| | | |
− | The register storage layout is as follows (referring to user-mode registers): r0-r12, sp, <event-signaling exception handler>, lr_svc, lr, pc (misadjusted for Thumb instructions), cpsr.
| + | For STOP POINT: |
| + | {| class="wikitable" border="1" |
| + | ! Type |
| + | ! Field |
| + | |- |
| + | | u32 |
| + | | Stop point type that caused the event: 0 = svc 0xFF, 1 = breakpoint, 2 = watchpoint |
| + | |- |
| + | | u32 |
| + | | Fault information: always zero in this case |
| + | |} |
| + | |
| + | For USER BREAK: |
| + | {| class="wikitable" border="1" |
| + | ! Type |
| + | ! Field |
| + | |- |
| + | | u32 |
| + | | Break reason |
| + | |- |
| + | | u32[2] |
| + | | User-provided parameters for debug reasons, or 0 |
| + | |} |
| + | |
| + | For DEBUGGER BREAK: |
| + | {| class="wikitable" border="1" |
| + | ! Type |
| + | ! Field |
| + | |- |
| + | | [[KThread]]*[nbCores] |
| + | | Pointers to the current threads at the time svcBreakDebugProcess was called |
| + | |} |
| | | |
| User break types: | | User break types: |
Line 1,059: |
Line 1,089: |
| | USER | | | USER |
| | 2 | | | 2 |
| + | |- |
| + | | DEBUG_ASSERT |
| + | | 3 |
| + | |- |
| + | | DEBUG_USER |
| + | | 4 |
| |} | | |} |
| | | |