mirror of https://github.com/ARMmbed/mbed-os.git
Add mode and privilege info to crash dump
parent
06f5fbc75d
commit
72f45b83e0
|
@ -144,13 +144,18 @@ Fault_Handler_Continue2
|
|||
MRS R2,MSP ; Get MSP
|
||||
STR R2,[R1]
|
||||
ADDS R1,#4
|
||||
LDR R3,=mbed_fault_handler ; Load address of mbedFaultHandler
|
||||
MOV R2,LR ; Get current LR(EXC_RETURN)
|
||||
STR R2,[R1]
|
||||
ADDS R1,#4
|
||||
MRS R2,CONTROL ; Get CONTROL Reg
|
||||
STR R2,[R1]
|
||||
LDR R3,=mbed_fault_handler ; Load address of mbedFaultHandler
|
||||
MOV R0,R12
|
||||
LDR R1,=mbed_fault_context
|
||||
LDR R2,=osRtxInfo
|
||||
BLX R3
|
||||
#endif
|
||||
B . ; Just in case we come back here
|
||||
B . ; Just in case we come back here
|
||||
ENDP
|
||||
|
||||
#endif
|
||||
|
|
|
@ -176,7 +176,12 @@ Fault_Handler_Continue2:
|
|||
MRS R2,MSP // Get MSP
|
||||
STR R2,[R1]
|
||||
ADDS R1,#4
|
||||
LDR R3,=mbed_fault_handler // Load address of mbedFaultHandler
|
||||
MOV R2,LR // Get current LR(EXC_RETURN)
|
||||
STR R2,[R1]
|
||||
ADDS R1,#4
|
||||
MRS R2,CONTROL // Get CONTROL Reg
|
||||
STR R2,[R1]
|
||||
LDR R3,=mbed_fault_handler // Load address of mbedFaultHandler
|
||||
MOV R0,R12
|
||||
LDR R1,=mbed_fault_context
|
||||
LDR R2,=osRtxInfo
|
||||
|
|
|
@ -139,13 +139,18 @@ Fault_Handler_Continue2
|
|||
MRS R2,MSP ; Get MSP
|
||||
STR R2,[R1]
|
||||
ADDS R1,#4
|
||||
LDR R3,=mbed_fault_handler ; Load address of mbedFaultHandler
|
||||
MOV R2,LR ; Get current LR(EXC_RETURN)
|
||||
STR R2,[R1]
|
||||
ADDS R1,#4
|
||||
MRS R2,CONTROL ; Get CONTROL Reg
|
||||
STR R2,[R1]
|
||||
LDR R3,=mbed_fault_handler ; Load address of mbedFaultHandler
|
||||
MOV R0,R12
|
||||
LDR R1,=mbed_fault_context
|
||||
LDR R2,=osRtxInfo
|
||||
BLX R3
|
||||
#endif
|
||||
B . ; Just in case we come back here
|
||||
#endif ; #if (MBED_FAULT_HANDLER_SUPPORT == 1)
|
||||
B . ; Just in case we come back here
|
||||
#endif ; #if (MBED_FAULT_HANDLER_SUPPORT == 1)
|
||||
|
||||
END
|
||||
|
|
|
@ -143,7 +143,27 @@ void print_context_info()
|
|||
fault_print_str("\nBFAR : %",(uint32_t *)&SCB->BFAR);
|
||||
}
|
||||
#endif
|
||||
|
||||
//Print Mode
|
||||
if(mbed_fault_context.EXC_RETURN & 0x8) {
|
||||
fault_print_str("\nMode : Thread", NULL);
|
||||
//Print Priv level in Thread mode - We capture CONTROL reg which reflects the privilege.
|
||||
//Note that the CONTROL register captured still reflects the privilege status of the
|
||||
//thread mode eventhough we are in Handler mode by the time we capture it.
|
||||
if(mbed_fault_context.CONTROL & 0x1) {
|
||||
fault_print_str("\nPriv : User", NULL);
|
||||
} else {
|
||||
fault_print_str("\nPriv : Privileged", NULL);
|
||||
}
|
||||
} else {
|
||||
fault_print_str("\nMode : Handler", NULL);
|
||||
fault_print_str("\nPriv : Privileged", NULL);
|
||||
}
|
||||
//Print Return Stack
|
||||
if(mbed_fault_context.EXC_RETURN & 0x4) {
|
||||
fault_print_str("\nStack: PSP", NULL);
|
||||
} else {
|
||||
fault_print_str("\nStack: MSP", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Prints thread info from a list */
|
||||
|
|
|
@ -37,6 +37,8 @@ typedef struct {
|
|||
uint32_t xPSR;
|
||||
uint32_t PSP;
|
||||
uint32_t MSP;
|
||||
uint32_t EXC_RETURN;
|
||||
uint32_t CONTROL;
|
||||
} mbed_fault_context_t;
|
||||
|
||||
//Fault type definitions
|
||||
|
|
Loading…
Reference in New Issue