svn commit: r250253 - head/sys/arm/arm

Ian Lepore ian at FreeBSD.org
Sat May 4 19:59:36 UTC 2013


Author: ian
Date: Sat May  4 19:59:35 2013
New Revision: 250253
URL: http://svnweb.freebsd.org/changeset/base/250253

Log:
  Insert STOP_UNWINDING directives in the _start (kernel entry point) and
  fork_trampoline (thread entry point) assembler routines, because it's
  not possible to unwind beyond those points.
  
  Also insert STOP_UNWINDING in the exception_exit routine, to prevent an
  unwind-loop at that point.  This is just a stopgap until we get around
  to instrumenting all assembler functions with proper unwind metadata.

Modified:
  head/sys/arm/arm/exception.S
  head/sys/arm/arm/locore.S
  head/sys/arm/arm/swtch.S

Modified: head/sys/arm/arm/exception.S
==============================================================================
--- head/sys/arm/arm/exception.S	Sat May  4 19:50:50 2013	(r250252)
+++ head/sys/arm/arm/exception.S	Sat May  4 19:59:35 2013	(r250253)
@@ -196,15 +196,20 @@ END(address_exception_entry)
  * Interrupts are disabled at suitable points to avoid ASTs
  * being posted between testing and exit to user mode.
  *
- * This function uses PULLFRAMEFROMSVCANDEXIT and
- * DO_AST
- * only be called if the exception handler used PUSHFRAMEINSVC
+ * This function uses PULLFRAMEFROMSVCANDEXIT and DO_AST and can
+ * only be called if the exception handler used PUSHFRAMEINSVC.
  *
+ * For EABI, don't try to unwind any further than this.  This is a
+ * stopgap measure to avoid getting stuck in a loop in the unwinder,
+ * which happens because we don't yet provide the proper unwind info
+ * here that describes which registers are being restored.
  */
 
-exception_exit:
+ASENTRY_NP(exception_exit)
+	STOP_UNWINDING
 	DO_AST
 	PULLFRAMEFROMSVCANDEXIT
+END(exception_exit)
 
 /*
  * undefined_entry:

Modified: head/sys/arm/arm/locore.S
==============================================================================
--- head/sys/arm/arm/locore.S	Sat May  4 19:50:50 2013	(r250252)
+++ head/sys/arm/arm/locore.S	Sat May  4 19:59:35 2013	(r250253)
@@ -77,6 +77,8 @@ __FBSDID("$FreeBSD$");
  */
 ENTRY_NP(btext)
 ASENTRY_NP(_start)
+	STOP_UNWINDING		/* Can't unwind into the bootloader! */
+
 	mov	r9, r0		/* 0 or boot mode from boot2 */
 	mov	r8, r1		/* Save Machine type */
 	mov	ip, r2		/* Save meta data */

Modified: head/sys/arm/arm/swtch.S
==============================================================================
--- head/sys/arm/arm/swtch.S	Sat May  4 19:50:50 2013	(r250252)
+++ head/sys/arm/arm/swtch.S	Sat May  4 19:59:35 2013	(r250253)
@@ -540,6 +540,7 @@ ENTRY(savectx)
 END(savectx)
 
 ENTRY(fork_trampoline)
+	STOP_UNWINDING	/* Can't unwind beyond the thread enty point */
 	mov	r1, r5
 	mov	r2, sp
 	mov	r0, r4


More information about the svn-src-head mailing list