[PATCH/AARCH64/ILP32] Fix unwinding (libgcc)

Andrew Pinski pinskia@gmail.com
Wed Apr 27 21:13:00 GMT 2016


Hi,
  AARCH64 ILP32 is like x32 where UNITS_PER_WORD > sizeof(void*) so we
need to define REG_VALUE_IN_UNWIND_CONTEXT for ILP32.  This fixes
unwinding through the signal handler.  This is independent of the ABI
which Linux kernel uses to store the registers.

OK?  Bootstrapped and tested on aarch64 with no regressions.

Thanks,
Andrew Pinski

ChangeLog:
* config/aarch64/value-unwind.h: New file.
* config.host (aarch64*-*-*): Add aarch64/value-unwind.h to tm_file.
-------------- next part --------------
Index: libgcc/config.host
===================================================================
--- libgcc/config.host	(revision 235529)
+++ libgcc/config.host	(working copy)
@@ -1385,4 +1385,8 @@ i[34567]86-*-linux* | x86_64-*-linux*)
 	fi
 	tm_file="${tm_file} i386/value-unwind.h"
 	;;
+aarch64*-*-*)
+	# ILP32 needs an extra header for unwinding
+	tm_file="${tm_file} aarch64/value-unwind.h"
+	;;
 esac
Index: libgcc/ChangeLog
===================================================================
--- libgcc/ChangeLog	(revision 235529)
+++ libgcc/ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+2016-04-27  Andrew Pinski  <apinski@cavium.com>
+
+	* config/aarch64/value-unwind.h: New file.
+	* config.host (aarch64*-*-*): Add aarch64/value-unwind.h
+	to tm_file.
+
 2016-04-25  Nick Clifton  <nickc@redhat.com>
 
 	* config/msp430/cmpd.c (__mspabi_cmpf): Add prototype.
Index: libgcc/config/aarch64/value-unwind.h
===================================================================
--- libgcc/config/aarch64/value-unwind.h	(revision 0)
+++ libgcc/config/aarch64/value-unwind.h	(revision 0)
@@ -0,0 +1,25 @@
+/* Store register values as _Unwind_Word type in DWARF2 EH unwind context.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Define this macro if the target stores register values as _Unwind_Word
+   type in unwind context.  Only enable it for ilp32.  */
+#if defined __aarch64__ && !defined __LP64__
+# define REG_VALUE_IN_UNWIND_CONTEXT
+#endif


More information about the Gcc-patches mailing list