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
|
MRS R2,MSP ; Get MSP
|
||||||
STR R2,[R1]
|
STR R2,[R1]
|
||||||
ADDS R1,#4
|
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
|
MOV R0,R12
|
||||||
LDR R1,=mbed_fault_context
|
LDR R1,=mbed_fault_context
|
||||||
LDR R2,=osRtxInfo
|
LDR R2,=osRtxInfo
|
||||||
BLX R3
|
BLX R3
|
||||||
#endif
|
#endif
|
||||||
B . ; Just in case we come back here
|
B . ; Just in case we come back here
|
||||||
ENDP
|
ENDP
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -176,7 +176,12 @@ Fault_Handler_Continue2:
|
||||||
MRS R2,MSP // Get MSP
|
MRS R2,MSP // Get MSP
|
||||||
STR R2,[R1]
|
STR R2,[R1]
|
||||||
ADDS R1,#4
|
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
|
MOV R0,R12
|
||||||
LDR R1,=mbed_fault_context
|
LDR R1,=mbed_fault_context
|
||||||
LDR R2,=osRtxInfo
|
LDR R2,=osRtxInfo
|
||||||
|
|
|
@ -139,13 +139,18 @@ Fault_Handler_Continue2
|
||||||
MRS R2,MSP ; Get MSP
|
MRS R2,MSP ; Get MSP
|
||||||
STR R2,[R1]
|
STR R2,[R1]
|
||||||
ADDS R1,#4
|
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
|
MOV R0,R12
|
||||||
LDR R1,=mbed_fault_context
|
LDR R1,=mbed_fault_context
|
||||||
LDR R2,=osRtxInfo
|
LDR R2,=osRtxInfo
|
||||||
BLX R3
|
BLX R3
|
||||||
#endif
|
#endif
|
||||||
B . ; Just in case we come back here
|
B . ; Just in case we come back here
|
||||||
#endif ; #if (MBED_FAULT_HANDLER_SUPPORT == 1)
|
#endif ; #if (MBED_FAULT_HANDLER_SUPPORT == 1)
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
|
@ -143,7 +143,27 @@ void print_context_info()
|
||||||
fault_print_str("\nBFAR : %",(uint32_t *)&SCB->BFAR);
|
fault_print_str("\nBFAR : %",(uint32_t *)&SCB->BFAR);
|
||||||
}
|
}
|
||||||
#endif
|
#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 */
|
/* Prints thread info from a list */
|
||||||
|
|
|
@ -37,6 +37,8 @@ typedef struct {
|
||||||
uint32_t xPSR;
|
uint32_t xPSR;
|
||||||
uint32_t PSP;
|
uint32_t PSP;
|
||||||
uint32_t MSP;
|
uint32_t MSP;
|
||||||
|
uint32_t EXC_RETURN;
|
||||||
|
uint32_t CONTROL;
|
||||||
} mbed_fault_context_t;
|
} mbed_fault_context_t;
|
||||||
|
|
||||||
//Fault type definitions
|
//Fault type definitions
|
||||||
|
|
Loading…
Reference in New Issue