diff options
author | andrew <andrew@FreeBSD.org> | 2013-03-10 02:38:35 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2013-03-10 02:38:35 +0000 |
commit | ca62d86bb1fcf369c2dced99f4b5ff55e8312d9d (patch) | |
tree | 68ec4812a537152c1317c510cf976daba45c7f83 | |
parent | 9ee11b8da5e2b1d8e698df036bcbcca4b91698b8 (diff) | |
download | FreeBSD-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.S | 4 |
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: |