summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2013-03-10 02:38:35 +0000
committerandrew <andrew@FreeBSD.org>2013-03-10 02:38:35 +0000
commitca62d86bb1fcf369c2dced99f4b5ff55e8312d9d (patch)
tree68ec4812a537152c1317c510cf976daba45c7f83
parent9ee11b8da5e2b1d8e698df036bcbcca4b91698b8 (diff)
downloadFreeBSD-src-ca62d86bb1fcf369c2dced99f4b5ff55e8312d9d.zip
FreeBSD-src-ca62d86bb1fcf369c2dced99f4b5ff55e8312d9d.tar.gz
Tell the unwinder we can't unwind swi_entry. This fixes an infinite loop
when the kernel attempts to unwind through this function. The .fnstart and .fnend in this function should be moved to macros but we are currently missing an END macro on ARM.
-rw-r--r--sys/arm/arm/exception.S4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/arm/arm/exception.S b/sys/arm/arm/exception.S
index cd936bb..b2ce47b 100644
--- a/sys/arm/arm/exception.S
+++ b/sys/arm/arm/exception.S
@@ -77,6 +77,9 @@ Lreset_panicmsg:
* Handler for the Software Interrupt exception.
*/
ASENTRY_NP(swi_entry)
+ .fnstart
+ .cantunwind /* Don't unwind past here */
+
PUSHFRAME
mov r0, sp /* Pass the frame to any function */
@@ -88,6 +91,7 @@ ASENTRY_NP(swi_entry)
DO_AST
PULLFRAME
movs pc, lr /* Exit */
+ .fnend
/*
* prefetch_abort_entry:
OpenPOWER on IntegriCloud