From 6befaff6662e3a750c8de2239ded13032994baf4 Mon Sep 17 00:00:00 2001 From: Sandra Loosemore Date: Thu, 19 May 2016 17:59:45 -0400 Subject: [PATCH] cygming.h (DWARF2_UNWIND_INFO): Allow --disable-sjlj-exceptions for TARGET_BI_ARCH to select DWARF-2 EH for... 2016-05-19 Sandra Loosemore gcc/ * config/i386/cygming.h (DWARF2_UNWIND_INFO): Allow --disable-sjlj-exceptions for TARGET_BI_ARCH to select DWARF-2 EH for 32-bit mode and SEH for 64-bit. * config/i386/mingw32.h (SHARED_LIBGCC_UNDEFS_SPEC): Handle TARGET_64BIT_DEFAULT. libgcc/ * config.host [x86_64-*-cygwin*]: Handle tmake_eh_file for mixed dw2/seh configuration. [x86_64-*-mingw*]: Likewise. From-SVN: r236490 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/cygming.h | 11 ++++------- gcc/config/i386/mingw32.h | 6 ++++-- libgcc/ChangeLog | 6 ++++++ libgcc/config.host | 7 +++++++ 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8fb96c1d0b..c5e637bdaea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-05-19 Sandra Loosemore + + * config/i386/cygming.h (DWARF2_UNWIND_INFO): Allow + --disable-sjlj-exceptions for TARGET_BI_ARCH to select DWARF-2 EH + for 32-bit mode and SEH for 64-bit. + * config/i386/mingw32.h (SHARED_LIBGCC_UNDEFS_SPEC): Handle + TARGET_64BIT_DEFAULT. + 2016-05-16 Ryan Burn * Makefile.in (GTFILES): Add cilk.h and cilk-common.c. diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index 9da473359a5..d6c2254b800 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -339,16 +339,13 @@ do { \ #define ASM_COMMENT_START " #" #ifndef DWARF2_UNWIND_INFO -/* If configured with --disable-sjlj-exceptions, use DWARF2, else - default to SJLJ. */ +/* If configured with --disable-sjlj-exceptions, use DWARF2 for 32-bit + mode else default to SJLJ. 64-bit code uses SEH unless you request + SJLJ. */ #if (defined (CONFIG_SJLJ_EXCEPTIONS) && !CONFIG_SJLJ_EXCEPTIONS) /* The logic of this #if must be kept synchronised with the logic - for selecting the tmake_eh_file fragment in config.gcc. */ + for selecting the tmake_eh_file fragment in libgcc/config.host. */ #define DWARF2_UNWIND_INFO 1 -/* If multilib is selected break build as sjlj is required. */ -#if defined (TARGET_BI_ARCH) -#error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported. -#endif #else #define DWARF2_UNWIND_INFO 0 #endif diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h index e04818966fa..0407efe7df3 100644 --- a/gcc/config/i386/mingw32.h +++ b/gcc/config/i386/mingw32.h @@ -100,10 +100,12 @@ along with GCC; see the file COPYING3. If not see #if DWARF2_UNWIND_INFO /* DW2-unwind is just available for 32-bit mode. */ #if TARGET_64BIT_DEFAULT -#error DW2 unwind is not available for 64-bit. -#endif +#define SHARED_LIBGCC_UNDEFS_SPEC \ + "%{m32: %{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info}}" +#else #define SHARED_LIBGCC_UNDEFS_SPEC \ "%{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info}" +#endif #else #define SHARED_LIBGCC_UNDEFS_SPEC "" #endif diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 91f968a408e..6b20f9bd2f9 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2016-05-19 Sandra Loosemore + + * config.host [x86_64-*-cygwin*]: Handle tmake_eh_file for mixed + dw2/seh configuration. + [x86_64-*-mingw*]: Likewise. + 2016-05-10 Joel Sherrill PR libgcc/70720 diff --git a/libgcc/config.host b/libgcc/config.host index 4fe308568fe..7899216af6c 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -678,6 +678,9 @@ x86_64-*-cygwin*) # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h if test x$ac_cv_sjlj_exceptions = xyes; then tmake_eh_file="i386/t-sjlj-eh" + elif test "${host_address}" = 32; then + # biarch -m32 with --disable-sjlj-exceptions + tmake_eh_file="i386/t-dw2-eh" else tmake_eh_file="i386/t-seh-eh" fi @@ -730,6 +733,10 @@ x86_64-*-mingw*) # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h if test x$ac_cv_sjlj_exceptions = xyes; then tmake_eh_file="i386/t-sjlj-eh" + elif test "${host_address}" = 32; then + # biarch -m32 with --disable-sjlj-exceptions + tmake_eh_file="i386/t-dw2-eh" + md_unwind_header=i386/w32-unwind.h else tmake_eh_file="i386/t-seh-eh" fi