From d3ef67eaf39f1af64a1a1331c63ad60dd8c217cd Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 6 Aug 2007 19:58:11 +0000 Subject: [PATCH] re PR target/31868 (Non-Linux DWARF EH x86-64 targets have broken crtend.o) 2007-08-06 H.J. Lu Daniel Jacobowitz PR target/31868 * config.gcc (x86_64-*-freebsd*): Add i386/t-crtstuff to tmake_file. (x86_64-*-netbsd*): Likewise. (x86_64-*-linux*): Likewise. (x86_64-*-kfreebsd*-gnu): Likewise. (x86_64-*-knetbsd*-gnu): Likewise. (i[34567]86-*-solaris2.1[0-9]*): Likewise. * config/i386/t-linux64 (CRTSTUFF_T_CFLAGS): Removed. * config/i386/t-crtstuff (CRTSTUFF_T_CFLAGS): Update comments. Add -fno-asynchronous-unwind-tables. * config/t-freebsd (CRTSTUFF_T_CFLAGS_S): Add $(CRTSTUFF_T_CFLAGS). * config/t-libc-ok (CRTSTUFF_T_CFLAGS_S): Likewise. * config/t-lynx (CRTSTUFF_T_CFLAGS_S): Likewise. * config/t-netbsd (CRTSTUFF_T_CFLAGS_S): Likewise. * config/t-svr4 (CRTSTUFF_T_CFLAGS_S): Likewise. Co-Authored-By: Daniel Jacobowitz From-SVN: r127248 --- gcc/ChangeLog | 23 +++++++++++++++++++++++ gcc/config.gcc | 6 ++++-- gcc/config/i386/t-crtstuff | 7 ++++++- gcc/config/i386/t-linux64 | 6 ------ gcc/config/t-freebsd | 2 +- gcc/config/t-libc-ok | 2 +- gcc/config/t-lynx | 2 +- gcc/config/t-netbsd | 2 +- gcc/config/t-svr4 | 2 +- 9 files changed, 38 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c47c658..86e1423 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2007-08-06 H.J. Lu + Daniel Jacobowitz + + PR target/31868 + * config.gcc (x86_64-*-freebsd*): Add i386/t-crtstuff to + tmake_file. + (x86_64-*-netbsd*): Likewise. + (x86_64-*-linux*): Likewise. + (x86_64-*-kfreebsd*-gnu): Likewise. + (x86_64-*-knetbsd*-gnu): Likewise. + (i[34567]86-*-solaris2.1[0-9]*): Likewise. + + * config/i386/t-linux64 (CRTSTUFF_T_CFLAGS): Removed. + + * config/i386/t-crtstuff (CRTSTUFF_T_CFLAGS): Update comments. + Add -fno-asynchronous-unwind-tables. + + * config/t-freebsd (CRTSTUFF_T_CFLAGS_S): Add $(CRTSTUFF_T_CFLAGS). + * config/t-libc-ok (CRTSTUFF_T_CFLAGS_S): Likewise. + * config/t-lynx (CRTSTUFF_T_CFLAGS_S): Likewise. + * config/t-netbsd (CRTSTUFF_T_CFLAGS_S): Likewise. + * config/t-svr4 (CRTSTUFF_T_CFLAGS_S): Likewise. + 2007-08-06 Steve Ellcey * config/ia64/ia64.c (ia64_c_mode_for_suffix): New. diff --git a/gcc/config.gcc b/gcc/config.gcc index b7bc072..503a60b 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1095,6 +1095,7 @@ i[34567]86-*-freebsd*) ;; x86_64-*-freebsd*) tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h" + tmake_file="${tmake_file} i386/t-crtstuff" ;; i[34567]86-*-netbsdelf*) tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h" @@ -1107,6 +1108,7 @@ i[34567]86-*-netbsd*) ;; x86_64-*-netbsd*) tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h" + tmake_file="${tmake_file} i386/t-crtstuff" ;; i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h" @@ -1166,7 +1168,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu) x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;; x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;; esac - tmake_file="${tmake_file} i386/t-linux64 i386/t-crtpc i386/t-crtfm i386/t-fprules-softfp64 soft-fp/t-softfp t-dfprules" + tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc i386/t-crtfm i386/t-fprules-softfp64 soft-fp/t-softfp t-dfprules" ;; i[34567]86-*-gnu*) ;; @@ -1263,7 +1265,7 @@ i[34567]86-*-solaris2*) *-*-solaris2.1[0-9]*) tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h" tm_defines="${tm_defines} TARGET_BI_ARCH=1" - tmake_file="$tmake_file i386/t-sol2-10" + tmake_file="$tmake_file i386/t-crtstuff i386/t-sol2-10" need_64bit_hwint=yes # FIXME: -m64 for i[34567]86-*-* should be allowed just # like -m32 for x86_64-*-*. diff --git a/gcc/config/i386/t-crtstuff b/gcc/config/i386/t-crtstuff index a202df6..8fe5875 100644 --- a/gcc/config/i386/t-crtstuff +++ b/gcc/config/i386/t-crtstuff @@ -1,2 +1,7 @@ # The pushl in CTOR initialization interferes with frame pointer elimination. -CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer +# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables, +# because then __FRAME_END__ might not be the last thing in .eh_frame +# section. -fno-asynchronous-unwind-tables is off by default for i386 +# and is on by default for x86-64. We turn it off for both i386 and +# x86-64. +CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer -fno-asynchronous-unwind-tables diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64 index 7aa1b81..0a70cd9 100644 --- a/gcc/config/i386/t-linux64 +++ b/gcc/config/i386/t-linux64 @@ -17,9 +17,3 @@ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ softfp_wrap_start := '\#ifdef __x86_64__' softfp_wrap_end := '\#endif' - -# The pushl in CTOR initialization interferes with frame pointer elimination. -# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables, -# because then __FRAME_END__ might not be the last thing in .eh_frame -# section. -CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer -fno-asynchronous-unwind-tables diff --git a/gcc/config/t-freebsd b/gcc/config/t-freebsd index 211dbdf..0680618 100644 --- a/gcc/config/t-freebsd +++ b/gcc/config/t-freebsd @@ -1,5 +1,5 @@ # Compile crtbeginS.o and crtendS.o with pic. -CRTSTUFF_T_CFLAGS_S = -fPIC +CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC # Compile libgcc.a with pic. TARGET_LIBGCC2_CFLAGS += -fPIC diff --git a/gcc/config/t-libc-ok b/gcc/config/t-libc-ok index 4dae812..561ee0b 100644 --- a/gcc/config/t-libc-ok +++ b/gcc/config/t-libc-ok @@ -1 +1 @@ -CRTSTUFF_T_CFLAGS_S=-fPIC +CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC diff --git a/gcc/config/t-lynx b/gcc/config/t-lynx index a14a53c..3a6a5d8 100644 --- a/gcc/config/t-lynx +++ b/gcc/config/t-lynx @@ -1,5 +1,5 @@ # Compile crtbeginS.o and crtendS.o with pic. -CRTSTUFF_T_CFLAGS_S = -fPIC +CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC # Compile libgcc2.a with pic. TARGET_LIBGCC2_CFLAGS = -fPIC diff --git a/gcc/config/t-netbsd b/gcc/config/t-netbsd index 843e410..34949e1 100644 --- a/gcc/config/t-netbsd +++ b/gcc/config/t-netbsd @@ -1,2 +1,2 @@ # Always build crtstuff with PIC. -CRTSTUFF_T_CFLAGS = -fPIC +CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC diff --git a/gcc/config/t-svr4 b/gcc/config/t-svr4 index 52c9b28..3ea1174 100644 --- a/gcc/config/t-svr4 +++ b/gcc/config/t-svr4 @@ -4,7 +4,7 @@ # we will be doing that, we just always use -fPIC when compiling the # routines in crtstuff.c. Likewise for libgcc2.c. -CRTSTUFF_T_CFLAGS = -fPIC +CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC TARGET_LIBGCC2_CFLAGS = -fPIC # See all the declarations. -- 2.7.4