SVC: Difference between revisions

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
|}
|}