summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/armv7-m/up_memfault.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-19 16:11:23 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-19 16:11:23 +0000
commita48a83271d371fd33201e3bba10967531ad32419 (patch)
treec58b80885bb66dbe6eda976a83caea2eae93e7fe /nuttx/arch/arm/src/armv7-m/up_memfault.c
parentc79e92ceffd9665632b58a6fb884178a4f4c71a2 (diff)
downloadpx4-nuttx-a48a83271d371fd33201e3bba10967531ad32419.tar.gz
px4-nuttx-a48a83271d371fd33201e3bba10967531ad32419.tar.bz2
px4-nuttx-a48a83271d371fd33201e3bba10967531ad32419.zip
If the PRIMASK is used to disable interrupts, then additional logic is required to handle hard faults in the kernel build
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5761 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src/armv7-m/up_memfault.c')
-rw-r--r--nuttx/arch/arm/src/armv7-m/up_memfault.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/nuttx/arch/arm/src/armv7-m/up_memfault.c b/nuttx/arch/arm/src/armv7-m/up_memfault.c
index a90f7cc74..c9f1b57b1 100644
--- a/nuttx/arch/arm/src/armv7-m/up_memfault.c
+++ b/nuttx/arch/arm/src/armv7-m/up_memfault.c
@@ -97,17 +97,33 @@ int up_memfault(int irq, FAR void *context)
mfdbg(" IRQ: %d context: %p\n", irq, regs);
lldbg(" CFAULTS: %08x MMFAR: %08x\n",
getreg32(NVIC_CFAULTS), getreg32(NVIC_MEMMANAGE_ADDR));
+ mfdbg(" BASEPRI: %08x PRIMASK: %08x IPSR: %08x CONTROL: %08x\n",
+ getbasepri(), getprimask(), getipsr(), getcontrol());
mfdbg(" R0: %08x %08x %08x %08x %08x %08x %08x %08x\n",
regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3],
regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
mfdbg(" R8: %08x %08x %08x %08x %08x %08x %08x %08x\n",
regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11],
regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
-#ifdef REG_EXC_RETURN
- mfdbg(" PSR: %08x EXC_RETURN: %08x\n",
- regs[REG_XPSR], regs[REG_EXC_RETURN]);
+
+#ifdef CONFIG_ARMV7M_USEBASEPRI
+# ifdef REG_EXC_RETURN
+ mfdbg(" xPSR: %08x BASEPRI: %08x EXC_RETURN: %08x (saved)\n",
+ current_regs[REG_XPSR], current_regs[REG_BASEPRI],
+ current_regs[REG_EXC_RETURN]);
+# else
+ mfdbg(" xPSR: %08x BASEPRI: %08x (saved)\n",
+ current_regs[REG_XPSR], current_regs[REG_BASEPRI]);
+# endif
#else
- mfdbg(" PSR: %08x\n", regs[REG_XPSR]);
+# ifdef REG_EXC_RETURN
+ mfdbg(" xPSR: %08x PRIMASK: %08x EXC_RETURN: %08x (saved)\n",
+ current_regs[REG_XPSR], current_regs[REG_PRIMASK],
+ current_regs[REG_EXC_RETURN]);
+# else
+ mfdbg(" xPSR: %08x PRIMASK: %08x (saved)\n",
+ current_regs[REG_XPSR], current_regs[REG_PRIMASK]);
+# endif
#endif
PANIC(OSERR_UNEXPECTEDISR);