svn commit: r252311 - in head/sys/arm: arm include
Andrew Turner
andrew at FreeBSD.org
Thu Jun 27 18:54:19 UTC 2013
Author: andrew
Date: Thu Jun 27 18:54:18 2013
New Revision: 252311
URL: http://svnweb.freebsd.org/changeset/base/252311
Log:
Add UNWINDSVCFRAME to provide the unwind pseudo ops to allow us to unwind
past a trapframe.
Use this macro in exception_exit as it is the function the unwinder enters
as the functions that store the frame setting lr to point to it.
Modified:
head/sys/arm/arm/exception.S
head/sys/arm/include/asmacros.h
Modified: head/sys/arm/arm/exception.S
==============================================================================
--- head/sys/arm/arm/exception.S Thu Jun 27 18:28:45 2013 (r252310)
+++ head/sys/arm/arm/exception.S Thu Jun 27 18:54:18 2013 (r252311)
@@ -206,7 +206,7 @@ END(address_exception_entry)
*/
ASENTRY_NP(exception_exit)
- STOP_UNWINDING
+ UNWINDSVCFRAME
DO_AST
PULLFRAMEFROMSVCANDEXIT
END(exception_exit)
Modified: head/sys/arm/include/asmacros.h
==============================================================================
--- head/sys/arm/include/asmacros.h Thu Jun 27 18:28:45 2013 (r252310)
+++ head/sys/arm/include/asmacros.h Thu Jun 27 18:54:18 2013 (r252311)
@@ -206,7 +206,16 @@
mov r0, r0; /* NOP for previous instruction */ \
add sp, sp, #(4*15); /* Adjust the stack pointer */ \
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
-#endif
+#endif
+#if defined(__ARM_EABI__)
+#define UNWINDSVCFRAME \
+ .save {r13-r15}; /* Restore sp, lr, pc */ \
+ .pad #(2*4); /* Skip user sp and lr */ \
+ .save {r0-r12}; /* Restore r0-r12 */ \
+ .pad #(4) /* Skip spsr */
+#else
+#define UNWINDSVCFRAME
+#endif
#define DATA(name) \
.data ; \
More information about the svn-src-head
mailing list