Add mode and privilege info to crash dump

pull/6257/head
Senthil Ramakrishnan 2018-03-05 15:30:01 -06:00
parent 06f5fbc75d
commit 72f45b83e0
5 changed files with 44 additions and 7 deletions

View File

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

View File

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

View File

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

View File

@ -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 */

View File

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