Changes

711 bytes added ,  20:23, 16 December 2016
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
 
|}
 
|}