diff options
author | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-07-02 15:59:19 +0000 |
---|---|---|
committer | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-07-02 15:59:19 +0000 |
commit | b3fd46a0f94ccfc993aa26f42db901c8f486c8b1 (patch) | |
tree | 819f63abca489ef0ba829bffcc7e52b44128bb73 /gcc | |
parent | e7a01e6f163a33afc4822827e12adfee7e5aa33c (diff) | |
download | gcc-b3fd46a0f94ccfc993aa26f42db901c8f486c8b1.tar.gz |
gcc/
2008-07-02 H.J. Lu <hongjiu.lu@intel.com>
PR target/36669
* config/libgcc-glibc.ver: Add %exclude.
* config/m32r/libgcc-glibc.ver: Likwise.
* config/s390/libgcc-glibc.ver: Likwise.
* config/sh/libgcc-glibc.ver: Likwise.
* config/sparc/libgcc-sparc-glibc.ver: Likwise.
* config/i386/libgcc-glibc.ver: New.
* config/i386/libgcc-x86_64-glibc.ver: Removed.
2008-07-02 H.J. Lu <hongjiu.lu@intel.com>
* config.gcc: Remove i386/t-fprules-softfp64 soft-fp/t-softfp
from tmake_file from i[34567]86-*-darwin*, x86_64-*-darwin*,
i[34567]86-*-linux*, x86_64-*-linux*. Add
i386/t-fprules-softfp and soft-fp/t-softfp to tmake_file for
i[34567]86-*-darwin*, x86_64-*-darwin*, i[34567]86-*-linux*,
x86_64-*-linux*. Add i386/t-linux to tmake_file for
i[34567]86-*-linux*, x86_64-*-linux*.
* libgcc-std.ver: Add empty GCC_4.4.0.
* mkmap-symver.awk: Support multiple versions per symbol.
* config/i386/i386.c (ix86_init_builtins): Always define
__builtin_fabsq and __builtin_copysignq with fallbacks.
(ix86_expand_builtin): Emit normal call for __builtin_fabsq
and __builtin_copysignq if SSE2 isn't available.
* config/i386/linux.h (LIBGCC2_HAS_TF_MODE): Defined.
(LIBGCC2_TF_CEXT): Likwise.
(TF_SIZE): Likwise.
* config/i386/linux64.h (LIBGCC2_HAS_TF_MODE): Defined as 1.
* config/i386/sfp-machine.h: Moved to libgcc.
* config/i386/sfp-machine.h: New.
* config/i386/t-linux: Likwise.
* config/i386/t-darwin: Remove softfp_wrap_start and
softfp_wrap_end.
* config/i386/t-darwin64: Likewise.
* config/i386/t-fprules-softfp64: Renamed to ...
* config/i386/t-fprules-softfp: This.
* config/i386/t-linux64: Remove SHLIB_MAPFILES, softfp_wrap_start
and softfp_wrap_end.
libgcc/
2008-07-02 H.J. Lu <hongjiu.lu@intel.com>
PR target/36669
* shared-object.mk ($(base)_s$(objext)): Add -DSHARED.
* config/i386/64/_divtc3-compat.c: New.
* config/i386/64/_multc3-compat.c: Likewise.
* config/i386/64/_powitf2-compat.c: Likewise.
* config/i386/64/eqtf2.c: Likewise.
* config/i386/64/getf2.c: Likewise.
* config/i386/64/letf2.c: Likewise.
* config/i386/64/t-fprules-softfp: Likewise.
2008-07-02 H.J. Lu <hongjiu.lu@intel.com>
* config.host: Add i386/${host_address}/t-fprules-softfp to
tmake_file for i[34567]86-*-darwin*, x86_64-*-darwin*,
i[34567]86-*-linux*, x86_64-*-linux*.
* configure.ac: Set host_address to 64 or 32 for x86.
* configure: Regenerated.
* Makefile.in (config.status): Also depend on
$(srcdir)/config.host.
* config/i386/32/t-fprules-softfp: New.
* config/i386/32/tf-signs.c: Likewise.
* config/i386/64/sfp-machine.h: New. Moved from gcc.
2008-07-02 H.J. Lu <hongjiu.lu@intel.com>
Uros Bizjak <ubizjak@gmail.com>
* config/i386/32/sfp-machine.h: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@137369 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 53 | ||||
-rw-r--r-- | gcc/config.gcc | 15 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 25 | ||||
-rw-r--r-- | gcc/config/i386/libgcc-glibc.ver (renamed from gcc/config/i386/libgcc-x86_64-glibc.ver) | 85 | ||||
-rw-r--r-- | gcc/config/i386/linux.h | 6 | ||||
-rw-r--r-- | gcc/config/i386/linux64.h | 2 | ||||
-rw-r--r-- | gcc/config/i386/sfp-machine.h | 144 | ||||
-rw-r--r-- | gcc/config/i386/t-darwin | 3 | ||||
-rw-r--r-- | gcc/config/i386/t-darwin64 | 3 | ||||
-rw-r--r-- | gcc/config/i386/t-fprules-softfp (renamed from gcc/config/i386/t-fprules-softfp64) | 0 | ||||
-rw-r--r-- | gcc/config/i386/t-linux | 5 | ||||
-rw-r--r-- | gcc/config/i386/t-linux64 | 9 | ||||
-rw-r--r-- | gcc/config/libgcc-glibc.ver | 14 | ||||
-rw-r--r-- | gcc/config/m32r/libgcc-glibc.ver | 10 | ||||
-rw-r--r-- | gcc/config/s390/libgcc-glibc.ver | 24 | ||||
-rw-r--r-- | gcc/config/sh/libgcc-glibc.ver | 11 | ||||
-rw-r--r-- | gcc/config/sparc/libgcc-sparc-glibc.ver | 14 | ||||
-rw-r--r-- | gcc/libgcc-std.ver | 4 | ||||
-rw-r--r-- | gcc/mkmap-symver.awk | 16 |
19 files changed, 269 insertions, 174 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fad92a66f41..c1bbc252c54 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,56 @@ +2008-07-02 H.J. Lu <hongjiu.lu@intel.com> + + PR target/36669 + * config/libgcc-glibc.ver: Add %exclude. + * config/m32r/libgcc-glibc.ver: Likwise. + * config/s390/libgcc-glibc.ver: Likwise. + * config/sh/libgcc-glibc.ver: Likwise. + * config/sparc/libgcc-sparc-glibc.ver: Likwise. + + * config/i386/libgcc-glibc.ver: New. + + * config/i386/libgcc-x86_64-glibc.ver: Removed. + +2008-07-02 H.J. Lu <hongjiu.lu@intel.com> + + * config.gcc: Remove i386/t-fprules-softfp64 soft-fp/t-softfp + from tmake_file from i[34567]86-*-darwin*, x86_64-*-darwin*, + i[34567]86-*-linux*, x86_64-*-linux*. Add + i386/t-fprules-softfp and soft-fp/t-softfp to tmake_file for + i[34567]86-*-darwin*, x86_64-*-darwin*, i[34567]86-*-linux*, + x86_64-*-linux*. Add i386/t-linux to tmake_file for + i[34567]86-*-linux*, x86_64-*-linux*. + + * libgcc-std.ver: Add empty GCC_4.4.0. + + * mkmap-symver.awk: Support multiple versions per symbol. + + * config/i386/i386.c (ix86_init_builtins): Always define + __builtin_fabsq and __builtin_copysignq with fallbacks. + (ix86_expand_builtin): Emit normal call for __builtin_fabsq + and __builtin_copysignq if SSE2 isn't available. + + * config/i386/linux.h (LIBGCC2_HAS_TF_MODE): Defined. + (LIBGCC2_TF_CEXT): Likwise. + (TF_SIZE): Likwise. + + * config/i386/linux64.h (LIBGCC2_HAS_TF_MODE): Defined as 1. + + * config/i386/sfp-machine.h: Moved to libgcc. + + * config/i386/sfp-machine.h: New. + * config/i386/t-linux: Likwise. + + * config/i386/t-darwin: Remove softfp_wrap_start and + softfp_wrap_end. + * config/i386/t-darwin64: Likewise. + + * config/i386/t-fprules-softfp64: Renamed to ... + * config/i386/t-fprules-softfp: This. + + * config/i386/t-linux64: Remove SHLIB_MAPFILES, softfp_wrap_start + and softfp_wrap_end. + 2008-07-02 Jason Merrill <jason@redhat.com> * tree.c (ctor_to_list): New fn. diff --git a/gcc/config.gcc b/gcc/config.gcc index f4f171e0c02..b29a762895c 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1006,11 +1006,11 @@ i[34567]86-*-darwin*) # then this file using that to set --with-cpu=i386 which has no -m64 # support. with_cpu=${with_cpu:-generic} - tmake_file="${tmake_file} i386/t-fprules-softfp64 soft-fp/t-softfp i386/t-crtpc i386/t-crtfm" + tmake_file="${tmake_file} i386/t-crtpc i386/t-crtfm" ;; x86_64-*-darwin*) with_cpu=${with_cpu:-generic} - tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-fprules-softfp64 soft-fp/t-softfp i386/t-crtpc i386/t-crtfm" + tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm" tm_file="${tm_file} ${cpu_type}/darwin64.h" ;; i[34567]86-*-elf*) @@ -1069,7 +1069,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu) if test x$enable_targets = xall; then tm_file="${tm_file} i386/x86-64.h i386/linux64.h" tm_defines="${tm_defines} TARGET_BI_ARCH=1" - tmake_file="${tmake_file} i386/t-linux64 i386/t-fprules-softfp64 soft-fp/t-softfp" + tmake_file="${tmake_file} i386/t-linux64" need_64bit_hwint=yes case X"${with_cpu}" in Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx) @@ -1101,7 +1101,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-crtstuff 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 t-dfprules" ;; i[34567]86-*-gnu*) ;; @@ -2973,6 +2973,13 @@ case ${target} in fi ;; + i[34567]86-*-darwin* | x86_64-*-darwin*) + tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp" + ;; + i[34567]86-*-linux* | x86_64-*-linux*) + tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux" + ;; + mips*-*-*) if test x$gnu_ld = xyes then diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 5a2c0c870a7..58c3dba1e8c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -20247,16 +20247,26 @@ ix86_init_builtins (void) NULL, NULL_TREE); ix86_builtins[(int) IX86_BUILTIN_INFQ] = decl; + /* We will expand them to normal call if SSE2 isn't available since + they are used by libgcc. */ ftype = build_function_type_list (float128_type_node, float128_type_node, NULL_TREE); - def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_fabsq", ftype, IX86_BUILTIN_FABSQ); + decl = add_builtin_function ("__builtin_fabsq", ftype, + IX86_BUILTIN_FABSQ, BUILT_IN_MD, + "__fabstf2", NULL_TREE); + ix86_builtins[(int) IX86_BUILTIN_FABSQ] = decl; + TREE_READONLY (decl) = 1; ftype = build_function_type_list (float128_type_node, float128_type_node, float128_type_node, NULL_TREE); - def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_copysignq", ftype, IX86_BUILTIN_COPYSIGNQ); + decl = add_builtin_function ("__builtin_copysignq", ftype, + IX86_BUILTIN_COPYSIGNQ, BUILT_IN_MD, + "__copysigntf3", NULL_TREE); + ix86_builtins[(int) IX86_BUILTIN_COPYSIGNQ] = decl; + TREE_READONLY (decl) = 1; if (TARGET_MMX) ix86_init_mmx_sse_builtins (); @@ -21610,7 +21620,16 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, i < ARRAY_SIZE (bdesc_args); i++, d++) if (d->code == fcode) - return ix86_expand_args_builtin (d, exp, target); + switch (fcode) + { + case IX86_BUILTIN_FABSQ: + case IX86_BUILTIN_COPYSIGNQ: + if (!TARGET_SSE2) + /* Emit a normal call if SSE2 isn't available. */ + return expand_call (exp, target, ignore); + default: + return ix86_expand_args_builtin (d, exp, target); + } for (i = 0, d = bdesc_comi; i < ARRAY_SIZE (bdesc_comi); i++, d++) if (d->code == fcode) diff --git a/gcc/config/i386/libgcc-x86_64-glibc.ver b/gcc/config/i386/libgcc-glibc.ver index fa5d1a6dba2..be791745b43 100644 --- a/gcc/config/i386/libgcc-x86_64-glibc.ver +++ b/gcc/config/i386/libgcc-glibc.ver @@ -5,6 +5,20 @@ # to defer implementation of these routines to libgcc.so via DT_AUXILIARY. %ifndef __x86_64__ +%exclude { + __divdi3 + __moddi3 + __udivdi3 + __umoddi3 + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %inherit GCC_3.0 GLIBC_2.0 GLIBC_2.0 { # Sampling of DImode arithmetic used by (at least) i386 and m68k. @@ -24,16 +38,18 @@ GLIBC_2.0 { } %endif -% 128 bit long double support was introduced with GCC 4.3.0. -% These lines make the symbols to get a @@GCC_4.3.0 attached. +# 128 bit long double support was introduced with GCC 4.3.0 to 64bit +# and with GCC 4.4.0 to 32bit. These lines make the symbols to get +# a @@GCC_4.3.0 or @@GCC_4.4.0 attached. -%ifdef __x86_64__ %exclude { __addtf3 + __divtc3 __divtf3 __eqtf2 __extenddftf2 __extendsftf2 + __extendxftf2 __fixtfdi __fixtfsi __fixtfti @@ -47,21 +63,45 @@ GLIBC_2.0 { __floatunsitf __floatuntitf __getf2 + __gttf2 __letf2 + __lttf2 + __multc3 __multf3 __negtf2 + __netf2 + __powitf2 __subtf3 __trunctfdf2 __trunctfsf2 + __trunctfxf2 __unordtf2 } +%ifdef __x86_64__ +# Those symbols had improper versions when they were added to gcc 4.3.0. +# We corrected the default version to GCC_4.3.0. But we keep the old +# version for backward binary compatibility. +GCC_3.0 { + __gttf2 + __lttf2 + __netf2 +} + +GCC_4.0.0 { + __divtc3 + __multc3 + __powitf2 +} + GCC_4.3.0 { __addtf3 + __divtc3 __divtf3 __eqtf2 __extenddftf2 __extendsftf2 + __extendxftf2 __fixtfdi __fixtfsi __fixtfti @@ -75,12 +115,51 @@ GCC_4.3.0 { __floatunsitf __floatuntitf __getf2 + __gttf2 + __letf2 + __lttf2 + __multc3 + __multf3 + __negtf2 + __netf2 + __powitf2 + __subtf3 + __trunctfdf2 + __trunctfsf2 + __trunctfxf2 + __unordtf2 +} +%else +GCC_4.4.0 { + __addtf3 + __copysigntf3 + __divtc3 + __divtf3 + __eqtf2 + __extenddftf2 + __extendsftf2 + __fabstf2 + __fixtfdi + __fixtfsi + __fixunstfdi + __fixunstfsi + __floatditf + __floatsitf + __floatunditf + __floatunsitf + __getf2 + __gttf2 __letf2 + __lttf2 + __multc3 __multf3 __negtf2 + __netf2 + __powitf2 __subtf3 __trunctfdf2 __trunctfsf2 + __trunctfxf2 __unordtf2 } %endif diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index ec5dc4e2230..78326b05ec0 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -189,6 +189,12 @@ along with GCC; see the file COPYING3. If not see : "=d"(BASE)) #endif +/* Put all *tf routines in libgcc. */ +#undef LIBGCC2_HAS_TF_MODE +#define LIBGCC2_HAS_TF_MODE 1 +#define LIBGCC2_TF_CEXT q +#define TF_SIZE 113 + #undef NEED_INDICATE_EXEC_STACK #define NEED_INDICATE_EXEC_STACK 1 diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h index 37ede613e7d..04d12cadada 100644 --- a/gcc/config/i386/linux64.h +++ b/gcc/config/i386/linux64.h @@ -91,7 +91,7 @@ along with GCC; see the file COPYING3. If not see /* Put all *tf routines in libgcc. */ #undef LIBGCC2_HAS_TF_MODE -#define LIBGCC2_HAS_TF_MODE TARGET_64BIT +#define LIBGCC2_HAS_TF_MODE 1 #define LIBGCC2_TF_CEXT q #define TF_SIZE 113 diff --git a/gcc/config/i386/sfp-machine.h b/gcc/config/i386/sfp-machine.h index 190e3cb0e81..f2df869653f 100644 --- a/gcc/config/i386/sfp-machine.h +++ b/gcc/config/i386/sfp-machine.h @@ -1,143 +1,5 @@ -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -typedef int TItype __attribute__ ((mode (TI))); -typedef unsigned int UTItype __attribute__ ((mode (TI))); - -#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype)) - -/* The type of the result of a floating point comparison. This must - match `__libgcc_cmp_return__' in GCC for the target. */ -typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); -#define CMPtype __gcc_CMPtype - -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S _FP_QNANBIT_S -#define _FP_NANFRAC_D _FP_QNANBIT_D -#define _FP_NANFRAC_E _FP_QNANBIT_E, 0 -#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0 -#define _FP_NANSIGN_S 1 -#define _FP_NANSIGN_D 1 -#define _FP_NANSIGN_E 1 -#define _FP_NANSIGN_Q 1 - -#define _FP_KEEPNANFRACP 1 - -/* Here is something Intel misdesigned: the specs don't define - the case where we have two NaNs with same mantissas, but - different sign. Different operations pick up different NaNs. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if (_FP_FRAC_GT_##wc(X, Y) \ - || (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - else \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define FP_EX_INVALID 0x01 -#define FP_EX_DENORM 0x02 -#define FP_EX_DIVZERO 0x04 -#define FP_EX_OVERFLOW 0x08 -#define FP_EX_UNDERFLOW 0x10 -#define FP_EX_INEXACT 0x20 - -struct fenv -{ - unsigned short int __control_word; - unsigned short int __unused1; - unsigned short int __status_word; - unsigned short int __unused2; - unsigned short int __tags; - unsigned short int __unused3; - unsigned int __eip; - unsigned short int __cs_selector; - unsigned int __opcode:11; - unsigned int __unused4:5; - unsigned int __data_offset; - unsigned short int __data_selector; - unsigned short int __unused5; -}; - -#define FP_HANDLE_EXCEPTIONS \ - do { \ - if (_fex & FP_EX_INVALID) \ - { \ - float f = 0.0; \ - __asm__ __volatile__ ("divss %0, %0 " : : "x" (f)); \ - } \ - if (_fex & FP_EX_DIVZERO) \ - { \ - float f = 1.0, g = 0.0; \ - __asm__ __volatile__ ("divss %1, %0" : : "x" (f), "x" (g)); \ - } \ - if (_fex & FP_EX_OVERFLOW) \ - { \ - struct fenv temp; \ - __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \ - temp.__status_word |= FP_EX_OVERFLOW; \ - __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \ - __asm__ __volatile__ ("fwait"); \ - } \ - if (_fex & FP_EX_UNDERFLOW) \ - { \ - struct fenv temp; \ - __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \ - temp.__status_word |= FP_EX_UNDERFLOW; \ - __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \ - __asm__ __volatile__ ("fwait"); \ - } \ - if (_fex & FP_EX_INEXACT) \ - { \ - struct fenv temp; \ - __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \ - temp.__status_word |= FP_EX_INEXACT; \ - __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \ - __asm__ __volatile__ ("fwait"); \ - } \ - } while (0) - -#define FP_RND_NEAREST 0 -#define FP_RND_ZERO 0xc00 -#define FP_RND_PINF 0x800 -#define FP_RND_MINF 0x400 - -#define _FP_DECL_EX \ - unsigned short _fcw __attribute__ ((unused)) = FP_RND_NEAREST - -#define FP_INIT_ROUNDMODE \ - do { \ - __asm__ ("fnstcw %0" : "=m" (_fcw)); \ - } while (0) - -#define FP_ROUNDMODE (_fcw & 0xc00) - -#define __LITTLE_ENDIAN 1234 -#define __BIG_ENDIAN 4321 - -#define __BYTE_ORDER __LITTLE_ENDIAN - -/* Define ALIASNAME as a strong alias for NAME. */ -#if defined __MACH__ -/* Mach-O doesn't support aliasing. If these functions ever return - anything but CMPtype we need to revisit this... */ -#define strong_alias(name, aliasname) \ - CMPtype aliasname (TFtype a, TFtype b) { return name(a, b); } +#ifdef __x86_64__ +#include "config/i386/64/sfp-machine.h" #else -# define strong_alias(name, aliasname) _strong_alias(name, aliasname) -# define _strong_alias(name, aliasname) \ - extern __typeof (name) aliasname __attribute__ ((alias (#name))); +#include "config/i386/32/sfp-machine.h" #endif diff --git a/gcc/config/i386/t-darwin b/gcc/config/i386/t-darwin index 6feb48a20a4..fb5bbe78c04 100644 --- a/gcc/config/i386/t-darwin +++ b/gcc/config/i386/t-darwin @@ -2,6 +2,3 @@ MULTILIB_OPTIONS = m64 MULTILIB_DIRNAMES = x86_64 LIB2_SIDITI_CONV_FUNCS=yes LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c - -softfp_wrap_start := '\#ifdef __x86_64__' -softfp_wrap_end := '\#endif' diff --git a/gcc/config/i386/t-darwin64 b/gcc/config/i386/t-darwin64 index 2e55cb786d7..5143e3819dc 100644 --- a/gcc/config/i386/t-darwin64 +++ b/gcc/config/i386/t-darwin64 @@ -1,5 +1,2 @@ LIB2_SIDITI_CONV_FUNCS=yes LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c - -softfp_wrap_start := '\#ifdef __x86_64__' -softfp_wrap_end := '\#endif' diff --git a/gcc/config/i386/t-fprules-softfp64 b/gcc/config/i386/t-fprules-softfp index 0b0068f9053..0b0068f9053 100644 --- a/gcc/config/i386/t-fprules-softfp64 +++ b/gcc/config/i386/t-fprules-softfp diff --git a/gcc/config/i386/t-linux b/gcc/config/i386/t-linux new file mode 100644 index 00000000000..4c6bb51e3b8 --- /dev/null +++ b/gcc/config/i386/t-linux @@ -0,0 +1,5 @@ +# On 64bit we do not need any exports for glibc for 64-bit libgcc_s. +# Need to support TImode for x86. Override the settings from +# t-slibgcc-elf-ver and t-linux +SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \ + $(srcdir)/config/i386/libgcc-glibc.ver diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64 index 0490d7812e1..36378d87e0b 100644 --- a/gcc/config/i386/t-linux64 +++ b/gcc/config/i386/t-linux64 @@ -1,9 +1,3 @@ -# On x86-64 we do not need any exports for glibc for 64-bit libgcc_s, -# override the settings -# from t-slibgcc-elf-ver and t-linux -SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \ - $(srcdir)/config/i386/libgcc-x86_64-glibc.ver - # On Debian, Ubuntu and other derivative distributions, the 32bit libraries # are found in /lib32 and /usr/lib32, /lib64 and /usr/lib64 are symlinks to # /lib and /usr/lib, while other distributions install libraries into /lib64 @@ -21,6 +15,3 @@ INSTALL_LIBGCC = install-multilib EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ crtbeginT.o crtprec32.o crtprec64.o crtprec80.o \ crtfastmath.o - -softfp_wrap_start := '\#ifdef __x86_64__' -softfp_wrap_end := '\#endif' diff --git a/gcc/config/libgcc-glibc.ver b/gcc/config/libgcc-glibc.ver index 837c1a7ee56..264828b17c0 100644 --- a/gcc/config/libgcc-glibc.ver +++ b/gcc/config/libgcc-glibc.ver @@ -4,6 +4,20 @@ # maintain enough binary compatibility to allow future versions of glibc # to defer implementation of these routines to libgcc.so via DT_AUXILIARY. +%exclude { + __divdi3 + __moddi3 + __udivdi3 + __umoddi3 + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %inherit GCC_3.0 GLIBC_2.0 GLIBC_2.0 { # Sampling of DImode arithmetic used by (at least) i386 and m68k. diff --git a/gcc/config/m32r/libgcc-glibc.ver b/gcc/config/m32r/libgcc-glibc.ver index 450c4b60e92..977c3346604 100644 --- a/gcc/config/m32r/libgcc-glibc.ver +++ b/gcc/config/m32r/libgcc-glibc.ver @@ -8,6 +8,16 @@ # because GLIBC_2.0 does not exist on this architecture, as the first # ever glibc release on the platform was GLIBC_2.3. +%exclude { + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %inherit GCC_3.0 GLIBC_2.3 GLIBC_2.3 { __register_frame diff --git a/gcc/config/s390/libgcc-glibc.ver b/gcc/config/s390/libgcc-glibc.ver index e9413d0fff1..ab6eedcf683 100644 --- a/gcc/config/s390/libgcc-glibc.ver +++ b/gcc/config/s390/libgcc-glibc.ver @@ -9,6 +9,20 @@ # ever glibc release on the platform was GLIBC_2.2. %ifndef __s390x__ +%exclude { + __divdi3 + __moddi3 + __udivdi3 + __umoddi3 + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %inherit GCC_3.0 GLIBC_2.0 GLIBC_2.0 { __divdi3 @@ -27,6 +41,16 @@ GLIBC_2.0 { %endif %ifdef __s390x__ +%exclude { + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %inherit GCC_3.0 GLIBC_2.2 GLIBC_2.2 { __register_frame diff --git a/gcc/config/sh/libgcc-glibc.ver b/gcc/config/sh/libgcc-glibc.ver index 734d3d6bfe1..11ef379effa 100644 --- a/gcc/config/sh/libgcc-glibc.ver +++ b/gcc/config/sh/libgcc-glibc.ver @@ -8,6 +8,16 @@ # because GLIBC_2.0 does not exist on this architecture, as the first # ever glibc release on the platform was GLIBC_2.2. +%exclude { + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %inherit GCC_3.0 GLIBC_2.2 GLIBC_2.2 { __register_frame @@ -18,4 +28,3 @@ GLIBC_2.2 { __frame_state_for __register_frame_info_table } - diff --git a/gcc/config/sparc/libgcc-sparc-glibc.ver b/gcc/config/sparc/libgcc-sparc-glibc.ver index ed280fe05a7..8f50c0d5886 100644 --- a/gcc/config/sparc/libgcc-sparc-glibc.ver +++ b/gcc/config/sparc/libgcc-sparc-glibc.ver @@ -4,6 +4,20 @@ # maintain enough binary compatibility to allow future versions of glibc # to defer implementation of these routines to libgcc.so via DT_AUXILIARY. +%exclude { + __divdi3 + __moddi3 + __udivdi3 + __umoddi3 + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table +} + %ifdef __arch64__ %define GLIBC_VER GLIBC_2.2 %else diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver index 89be00cf3be..1df9ab1b3f9 100644 --- a/gcc/libgcc-std.ver +++ b/gcc/libgcc-std.ver @@ -1800,3 +1800,7 @@ GCC_4.3.0 { __satfractunstiuda __satfractunstiuta } + +%inherit GCC_4.4.0 GCC_4.3.0 +GCC_4.4.0 { +} diff --git a/gcc/mkmap-symver.awk b/gcc/mkmap-symver.awk index 855043f7e6c..4877e905147 100644 --- a/gcc/mkmap-symver.awk +++ b/gcc/mkmap-symver.awk @@ -46,7 +46,8 @@ state == "nm" && ($1 == "U" || $2 == "U") { } state == "nm" && NF == 3 { - def[$3] = 1; + split ($3, s, "@") + def[s[1]] = 1; sawsymbol = 1; next; } @@ -82,10 +83,13 @@ $1 == "}" { { sym = prefix $1; + symbols[sym] = 1 if (thislib != "%exclude") - ver[sym] = thislib; - else - delete ver[sym]; + ver[sym, thislib] = 1; + else { + for (l in libs) + ver[sym, l] = 0; + } next; } @@ -107,8 +111,8 @@ function output(lib) { output(inherit[lib]); empty=1 - for (sym in ver) - if ((ver[sym] == lib) && (sym in def)) + for (sym in symbols) + if ((ver[sym, lib] != 0) && (sym in def)) { if (empty) { |