diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f1471bbd875..b75b3b3e496 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,25 @@ +2006-02-08 Jakub Jelinek + + * config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file. + (sparc64-*-linux*): Likewise. + * config/sparc/t-linux64 (SHLIB_MAPFILES): Removed. + * config/sparc/t-linux: New file. + * config/sparc/libgcc-sparc-glibc.ver (__fixtfdi, __fixunstfdi, + __floatditf): Export at GCC_LDBL_3.0 if -m32 -mlong-double-128. + (__divtc3, __multc3, __powitf2): Export at GCC_LDBL_4.0.0 if + -m32 -mlong-double-128. + + * config.gcc (alpha*-*-linux*): Add alpha/t-linux to tmake_file. + * config/alpha/t-linux: New file. + * config/alpha/libgcc-alpha-ldbl.ver: New file. + + * config/sparc/linux.h (TARGET_OS_CPP_BUILTINS): Define + __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128. + (CPP_SUBTARGET_SPEC): Don't add -D__LONG_DOUBLE_128__ here. + * config/sparc/linux64.h (TARGET_OS_CPP_BUILTINS): Define + __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128 and TARGET_ARCH32. + (CPP_ARCH32_SPEC): Remove. + 2006-02-07 Uttam Pawar PR tree-optimization/26145 diff --git a/gcc/config.gcc b/gcc/config.gcc index 85e3c2fe700..b5c72519577 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -568,7 +568,7 @@ alpha*-*-unicosmk*) alpha*-*-linux*) tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" target_cpu_default="MASK_GAS" - tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee" + tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee alpha/t-linux" ;; alpha*-*-gnu*) target_cpu_default="MASK_GAS" @@ -2055,7 +2055,7 @@ sparc-*-elf*) sparc-*-linux*) # SPARC's running GNU/Linux, libc6 tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h" extra_options="${extra_options} sparc/long-double-switch.opt" - tmake_file="${tmake_file} sparc/t-crtfm" + tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm" ;; sparc-*-rtems*) tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h" @@ -2174,7 +2174,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*) sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h" extra_options="${extra_options} sparc/long-double-switch.opt" - tmake_file="${tmake_file} sparc/t-linux64 sparc/t-crtfm" + tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm" ;; sparc64-*-netbsd*) tm_file="sparc/biarch64.h ${tm_file}" diff --git a/gcc/config/alpha/libgcc-alpha-ldbl.ver b/gcc/config/alpha/libgcc-alpha-ldbl.ver new file mode 100644 index 00000000000..f8fc4a9fa77 --- /dev/null +++ b/gcc/config/alpha/libgcc-alpha-ldbl.ver @@ -0,0 +1,32 @@ +%ifdef __LONG_DOUBLE_128__ + +# long double 128 bit support in libgcc_s.so.1 is only available +# when configured with --with-long-double-128. Make sure all the +# symbols are available at @@GCC_LDBL_* versions to make it clear +# there is a configurable symbol set. + +%exclude { + __fixtfdi + __fixunstfdi + __floatditf + + __divtc3 + __multc3 + __powitf2 +} + +%inherit GCC_LDBL_3.0 GCC_3.0 +GCC_LDBL_3.0 { + __fixtfdi + __fixunstfdi + __floatditf +} + +%inherit GCC_LDBL_4.0.0 GCC_4.0.0 +GCC_LDBL_4.0.0 { + __divtc3 + __multc3 + __powitf2 +} + +%endif diff --git a/gcc/config/alpha/t-linux b/gcc/config/alpha/t-linux new file mode 100644 index 00000000000..fabf38f9cce --- /dev/null +++ b/gcc/config/alpha/t-linux @@ -0,0 +1 @@ +SHLIB_MAPFILES += $(srcdir)/config/alpha/libgcc-alpha-ldbl.ver diff --git a/gcc/config/sparc/libgcc-sparc-glibc.ver b/gcc/config/sparc/libgcc-sparc-glibc.ver index e3ba0bbdb65..ed280fe05a7 100644 --- a/gcc/config/sparc/libgcc-sparc-glibc.ver +++ b/gcc/config/sparc/libgcc-sparc-glibc.ver @@ -26,3 +26,36 @@ GLIBC_VER { __frame_state_for __register_frame_info_table } + +%if !defined (__arch64__) && defined (__LONG_DOUBLE_128__) + +# long double 128 bit support from 32-bit libgcc_s.so.1 is only available +# when configured with --with-long-double-128. Make sure all the +# symbols are available at @@GCC_LDBL_* versions to make it clear +# there is a configurable symbol set. + +%exclude { + __fixtfdi + __fixunstfdi + __floatditf + + __divtc3 + __multc3 + __powitf2 +} + +%inherit GCC_LDBL_3.0 GCC_3.0 +GCC_LDBL_3.0 { + __fixtfdi + __fixunstfdi + __floatditf +} + +%inherit GCC_LDBL_4.0.0 GCC_4.0.0 +GCC_LDBL_4.0.0 { + __divtc3 + __multc3 + __powitf2 +} + +%endif diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h index df0fe58bc73..524c720ae63 100644 --- a/gcc/config/sparc/linux.h +++ b/gcc/config/sparc/linux.h @@ -23,12 +23,14 @@ Boston, MA 02110-1301, USA. */ #define TARGET_OS_CPP_BUILTINS() \ do \ { \ - builtin_define_std ("unix"); \ - builtin_define_std ("linux"); \ - builtin_define ("__gnu_linux__"); \ - builtin_assert ("system=linux"); \ - builtin_assert ("system=unix"); \ - builtin_assert ("system=posix"); \ + builtin_define_std ("unix"); \ + builtin_define_std ("linux"); \ + builtin_define ("__gnu_linux__"); \ + builtin_assert ("system=linux"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=posix"); \ + if (TARGET_LONG_DOUBLE_128) \ + builtin_define ("__LONG_DOUBLE_128__"); \ } \ while (0) @@ -95,8 +97,7 @@ Boston, MA 02110-1301, USA. */ #undef CPP_SUBTARGET_SPEC #define CPP_SUBTARGET_SPEC \ -"%{posix:-D_POSIX_SOURCE} \ -%{pthread:-D_REENTRANT} %{mlong-double-128:-D__LONG_DOUBLE_128__}" +"%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" #undef LIB_SPEC #define LIB_SPEC \ diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h index f997fee37f7..a190c1654b1 100644 --- a/gcc/config/sparc/linux64.h +++ b/gcc/config/sparc/linux64.h @@ -20,17 +20,19 @@ along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_define_std ("linux"); \ - builtin_define ("_LONGLONG"); \ - builtin_define ("__gnu_linux__"); \ - builtin_assert ("system=linux"); \ - builtin_assert ("system=unix"); \ - builtin_assert ("system=posix"); \ - } \ +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define_std ("unix"); \ + builtin_define_std ("linux"); \ + builtin_define ("_LONGLONG"); \ + builtin_define ("__gnu_linux__"); \ + builtin_assert ("system=linux"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=posix"); \ + if (TARGET_ARCH32 && TARGET_LONG_DOUBLE_128) \ + builtin_define ("__LONG_DOUBLE_128__"); \ + } \ while (0) /* Don't assume anything about the header files. */ @@ -54,13 +56,6 @@ Boston, MA 02110-1301, USA. */ #undef ASM_CPU_DEFAULT_SPEC #define ASM_CPU_DEFAULT_SPEC "-Av9a" -#ifdef SPARC_BI_ARCH - -#undef CPP_ARCH32_SPEC -#define CPP_ARCH32_SPEC "%{mlong-double-128:-D__LONG_DOUBLE_128__}" - -#endif - /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add the GNU/Linux magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static diff --git a/gcc/config/sparc/t-linux b/gcc/config/sparc/t-linux new file mode 100644 index 00000000000..a3e513087f5 --- /dev/null +++ b/gcc/config/sparc/t-linux @@ -0,0 +1,5 @@ +# Override t-slibgcc-elf-ver to export some libgcc symbols with +# the symbol versions that glibc used. +# Avoid the t-linux version file. +SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \ + $(srcdir)/config/sparc/libgcc-sparc-glibc.ver diff --git a/gcc/config/sparc/t-linux64 b/gcc/config/sparc/t-linux64 index 3e3fa4cae7e..7a1d5b1e145 100644 --- a/gcc/config/sparc/t-linux64 +++ b/gcc/config/sparc/t-linux64 @@ -8,12 +8,6 @@ INSTALL_LIBGCC = install-multilib EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \ crtfastmath.o -# Override t-slibgcc-elf-ver to export some libgcc symbols with -# the symbol versions that glibc used. -# Avoid the t-linux version file. -SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \ - $(srcdir)/config/sparc/libgcc-sparc-glibc.ver - CRTSTUFF_T_CFLAGS = `if test x$$($(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) \ -print-multi-os-directory) \ = x../lib64; then echo -mcmodel=medany; fi`