svn commit: r213185 - head/contrib/gcc/config/rs6000

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sun Sep 26 14:20:09 UTC 2010


Author: nwhitehorn
Date: Sun Sep 26 14:20:09 2010
New Revision: 213185
URL: http://svn.freebsd.org/changeset/base/213185

Log:
  Check for NULL link registers as found in initial stack frames when doing
  stack unwinding, instead of naively trying to check the instruction at
  that location. This fixes signal handling in threaded applications after
  recent changes regarding unwinding in libthr. While here, clean up our
  MD_FROB_UPDATE_CONTEXT() implementation a little.

Modified:
  head/contrib/gcc/config/rs6000/freebsd.h

Modified: head/contrib/gcc/config/rs6000/freebsd.h
==============================================================================
--- head/contrib/gcc/config/rs6000/freebsd.h	Sun Sep 26 12:52:23 2010	(r213184)
+++ head/contrib/gcc/config/rs6000/freebsd.h	Sun Sep 26 14:20:09 2010	(r213185)
@@ -219,17 +219,16 @@
       | (TARGET_64BIT ? DW_EH_PE_udata8 : DW_EH_PE_sdata4))		\
    : DW_EH_PE_absptr)
 
+#ifdef __powerpc64__
 #define MD_FROB_UPDATE_CONTEXT(CTX, FS)					\
-  if (TARGET_64BIT) {							\
     if ((FS)->regs.reg[2].how == REG_UNSAVED)				\
       {									\
-	unsigned int *insn						\
-	  = (unsigned int *)						\
+	unsigned int *insn = (unsigned int *)				\
 	    _Unwind_GetGR ((CTX), LINK_REGISTER_REGNUM);		\
-	if (*insn == 0xE8410028)					\
+	if (insn != NULL && *insn == 0xE8410028)			\
 	  _Unwind_SetGRPtr ((CTX), 2, (CTX)->cfa + 40);			\
-      }									\
-  }
+      }
+#endif
 
 /* FreeBSD doesn't support saving and restoring 64-bit regs with a 32-bit
    kernel. This is supported when running on a 64-bit kernel with


More information about the svn-src-all mailing list