From c19175577e1cbf749590889441ad5dd03bb2c9d7 Mon Sep 17 00:00:00 2001 From: glisse Date: Tue, 22 Apr 2014 16:44:46 +0000 Subject: [PATCH] 2014-04-22 Marc Glisse PR libstdc++/43622 gcc/c-family/ * c-common.c (registered_builtin_types): Make non-static. * c-common.h (registered_builtin_types): Declare. gcc/cp/ * rtti.c (emit_support_tinfo_1): New function, extracted from emit_support_tinfos. (emit_support_tinfos): Call it and iterate on registered_builtin_types. libstdc++-v3/ * config/abi/pre/gnu.ver (CXXABI_1.3.9): New version, new symbols. * config/abi/pre/gnu-versioned-namespace.ver: New symbols. * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209652 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/c-family/ChangeLog | 6 ++ gcc/c-family/c-common.c | 2 +- gcc/c-family/c-common.h | 4 ++ gcc/cp/ChangeLog | 7 ++ gcc/cp/rtti.c | 77 ++++++++++++---------- libstdc++-v3/ChangeLog | 7 ++ .../abi/post/x86_64-linux-gnu/baseline_symbols.txt | 13 ++++ .../config/abi/pre/gnu-versioned-namespace.ver | 8 +-- libstdc++-v3/config/abi/pre/gnu.ver | 14 ++++ 9 files changed, 97 insertions(+), 41 deletions(-) diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 206b47b..66158ca 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2014-04-22 Marc Glisse + + PR libstdc++/43622 + * c-common.c (registered_builtin_types): Make non-static. + * c-common.h (registered_builtin_types): Declare. + 2014-04-14 Richard Biener Marc Glisse diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index c0e247b..0b5ded8 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -3469,7 +3469,7 @@ c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit, /* Used for communication between c_common_type_for_mode and c_register_builtin_type. */ -static GTY(()) tree registered_builtin_types; +tree registered_builtin_types; /* Return a data type that has machine mode MODE. If the mode is an integer, diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 24959d8..57b7dce 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -1013,6 +1013,10 @@ extern vec *make_tree_vector_single (tree); extern vec *make_tree_vector_from_list (tree); extern vec *make_tree_vector_copy (const vec *); +/* Used for communication between c_common_type_for_mode and + c_register_builtin_type. */ +extern GTY(()) tree registered_builtin_types; + /* In c-gimplify.c */ extern void c_genericize (tree); extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *); diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2105ab2..854cc4b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2014-04-22 Marc Glisse + + PR libstdc++/43622 + * rtti.c (emit_support_tinfo_1): New function, extracted from + emit_support_tinfos. + (emit_support_tinfos): Call it and iterate on registered_builtin_types. + 2014-04-22 Jakub Jelinek PR c/59073 diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index a8e6d25..a35036d 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -1465,6 +1465,44 @@ create_tinfo_types (void) pop_abi_namespace (); } +/* Helper for emit_support_tinfos. Emits the type_info descriptor of + a single type. */ + +void +emit_support_tinfo_1 (tree bltn) +{ + tree types[3]; + + if (bltn == NULL_TREE) + return; + types[0] = bltn; + types[1] = build_pointer_type (bltn); + types[2] = build_pointer_type (cp_build_qualified_type (bltn, + TYPE_QUAL_CONST)); + + for (int i = 0; i < 3; ++i) + { + tree tinfo = get_tinfo_decl (types[i]); + TREE_USED (tinfo) = 1; + mark_needed (tinfo); + /* The C++ ABI requires that these objects be COMDAT. But, + On systems without weak symbols, initialized COMDAT + objects are emitted with internal linkage. (See + comdat_linkage for details.) Since we want these objects + to have external linkage so that copies do not have to be + emitted in code outside the runtime library, we make them + non-COMDAT here. + + It might also not be necessary to follow this detail of the + ABI. */ + if (!flag_weak || ! targetm.cxx.library_rtti_comdat ()) + { + gcc_assert (TREE_PUBLIC (tinfo) && !DECL_COMDAT (tinfo)); + DECL_INTERFACE_KNOWN (tinfo) = 1; + } + } +} + /* Emit the type_info descriptors which are guaranteed to be in the runtime support. Generating them here guarantees consistency with the other structures. We use the following heuristic to determine when the runtime @@ -1507,42 +1545,9 @@ emit_support_tinfos (void) return; doing_runtime = 1; for (ix = 0; fundamentals[ix]; ix++) - { - tree bltn = *fundamentals[ix]; - tree types[3]; - int i; - - if (bltn == NULL_TREE) - continue; - types[0] = bltn; - types[1] = build_pointer_type (bltn); - types[2] = build_pointer_type (cp_build_qualified_type (bltn, - TYPE_QUAL_CONST)); - - for (i = 0; i < 3; ++i) - { - tree tinfo; - - tinfo = get_tinfo_decl (types[i]); - TREE_USED (tinfo) = 1; - mark_needed (tinfo); - /* The C++ ABI requires that these objects be COMDAT. But, - On systems without weak symbols, initialized COMDAT - objects are emitted with internal linkage. (See - comdat_linkage for details.) Since we want these objects - to have external linkage so that copies do not have to be - emitted in code outside the runtime library, we make them - non-COMDAT here. - - It might also not be necessary to follow this detail of the - ABI. */ - if (!flag_weak || ! targetm.cxx.library_rtti_comdat ()) - { - gcc_assert (TREE_PUBLIC (tinfo) && !DECL_COMDAT (tinfo)); - DECL_INTERFACE_KNOWN (tinfo) = 1; - } - } - } + emit_support_tinfo_1 (*fundamentals[ix]); + for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t)) + emit_support_tinfo_1 (TREE_VALUE (t)); } /* Finish a type info decl. DECL_PTR is a pointer to an unemitted diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ca27783..4a0a5cb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2014-04-22 Marc Glisse + + PR libstdc++/43622 + * config/abi/pre/gnu.ver (CXXABI_1.3.9): New version, new symbols. + * config/abi/pre/gnu-versioned-namespace.ver: New symbols. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise. + 2014-04-22 Rainer Orth * configure.host: Remove solaris2.9 handling. diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt index d86b830..30d29b2 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt @@ -2520,6 +2520,7 @@ OBJECT:0:CXXABI_1.3.5 OBJECT:0:CXXABI_1.3.6 OBJECT:0:CXXABI_1.3.7 OBJECT:0:CXXABI_1.3.8 +OBJECT:0:CXXABI_1.3.9 OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 @@ -2624,6 +2625,7 @@ OBJECT:16:_ZTIc@@CXXABI_1.3 OBJECT:16:_ZTId@@CXXABI_1.3 OBJECT:16:_ZTIe@@CXXABI_1.3 OBJECT:16:_ZTIf@@CXXABI_1.3 +OBJECT:16:_ZTIg@@CXXABI_1.3.9 OBJECT:16:_ZTIh@@CXXABI_1.3 OBJECT:16:_ZTIi@@CXXABI_1.3 OBJECT:16:_ZTIj@@CXXABI_1.3 @@ -3124,11 +3126,14 @@ OBJECT:2:_ZTSc@@CXXABI_1.3 OBJECT:2:_ZTSd@@CXXABI_1.3 OBJECT:2:_ZTSe@@CXXABI_1.3 OBJECT:2:_ZTSf@@CXXABI_1.3 +OBJECT:2:_ZTSg@@CXXABI_1.3.9 OBJECT:2:_ZTSh@@CXXABI_1.3 OBJECT:2:_ZTSi@@CXXABI_1.3 OBJECT:2:_ZTSj@@CXXABI_1.3 OBJECT:2:_ZTSl@@CXXABI_1.3 OBJECT:2:_ZTSm@@CXXABI_1.3 +OBJECT:2:_ZTSn@@CXXABI_1.3.9 +OBJECT:2:_ZTSo@@CXXABI_1.3.9 OBJECT:2:_ZTSs@@CXXABI_1.3 OBJECT:2:_ZTSt@@CXXABI_1.3 OBJECT:2:_ZTSv@@CXXABI_1.3 @@ -3155,6 +3160,7 @@ OBJECT:32:_ZTIPKc@@CXXABI_1.3 OBJECT:32:_ZTIPKd@@CXXABI_1.3 OBJECT:32:_ZTIPKe@@CXXABI_1.3 OBJECT:32:_ZTIPKf@@CXXABI_1.3 +OBJECT:32:_ZTIPKg@@CXXABI_1.3.9 OBJECT:32:_ZTIPKh@@CXXABI_1.3 OBJECT:32:_ZTIPKi@@CXXABI_1.3 OBJECT:32:_ZTIPKj@@CXXABI_1.3 @@ -3174,6 +3180,7 @@ OBJECT:32:_ZTIPc@@CXXABI_1.3 OBJECT:32:_ZTIPd@@CXXABI_1.3 OBJECT:32:_ZTIPe@@CXXABI_1.3 OBJECT:32:_ZTIPf@@CXXABI_1.3 +OBJECT:32:_ZTIPg@@CXXABI_1.3.9 OBJECT:32:_ZTIPh@@CXXABI_1.3 OBJECT:32:_ZTIPi@@CXXABI_1.3 OBJECT:32:_ZTIPj@@CXXABI_1.3 @@ -3228,11 +3235,14 @@ OBJECT:3:_ZTSPc@@CXXABI_1.3 OBJECT:3:_ZTSPd@@CXXABI_1.3 OBJECT:3:_ZTSPe@@CXXABI_1.3 OBJECT:3:_ZTSPf@@CXXABI_1.3 +OBJECT:3:_ZTSPg@@CXXABI_1.3.9 OBJECT:3:_ZTSPh@@CXXABI_1.3 OBJECT:3:_ZTSPi@@CXXABI_1.3 OBJECT:3:_ZTSPj@@CXXABI_1.3 OBJECT:3:_ZTSPl@@CXXABI_1.3 OBJECT:3:_ZTSPm@@CXXABI_1.3 +OBJECT:3:_ZTSPn@@CXXABI_1.3.9 +OBJECT:3:_ZTSPo@@CXXABI_1.3.9 OBJECT:3:_ZTSPs@@CXXABI_1.3 OBJECT:3:_ZTSPt@@CXXABI_1.3 OBJECT:3:_ZTSPv@@CXXABI_1.3 @@ -3555,11 +3565,14 @@ OBJECT:4:_ZTSPKc@@CXXABI_1.3 OBJECT:4:_ZTSPKd@@CXXABI_1.3 OBJECT:4:_ZTSPKe@@CXXABI_1.3 OBJECT:4:_ZTSPKf@@CXXABI_1.3 +OBJECT:4:_ZTSPKg@@CXXABI_1.3.9 OBJECT:4:_ZTSPKh@@CXXABI_1.3 OBJECT:4:_ZTSPKi@@CXXABI_1.3 OBJECT:4:_ZTSPKj@@CXXABI_1.3 OBJECT:4:_ZTSPKl@@CXXABI_1.3 OBJECT:4:_ZTSPKm@@CXXABI_1.3 +OBJECT:4:_ZTSPKn@@CXXABI_1.3.9 +OBJECT:4:_ZTSPKo@@CXXABI_1.3.9 OBJECT:4:_ZTSPKs@@CXXABI_1.3 OBJECT:4:_ZTSPKt@@CXXABI_1.3 OBJECT:4:_ZTSPKv@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver index 31155b7..3436063 100644 --- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver +++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver @@ -321,10 +321,10 @@ CXXABI_2.0 { _ZTIPDn; _ZTIPKDn; - # typeinfo for __int128 and unsigned __int128 - _ZTI[no]; - _ZTIP[no]; - _ZTIPK[no]; + # typeinfo for __int128, unsigned __int128 and __float128 + _ZTI[gno]; + _ZTIP[gno]; + _ZTIPK[gno]; # virtual table _ZTVN10__cxxabiv117__array_type_infoE; diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index f3afb94..f0ce4f0 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1584,6 +1584,20 @@ CXXABI_1.3.8 { } CXXABI_1.3.7; +CXXABI_1.3.9 { + + # typeinfo name for __int128, unsigned __int128 and __float128 + _ZTS[gno]; + _ZTSP[gno]; + _ZTSPK[gno]; + + # typeinfo for __float128 + _ZTIg; + _ZTIPg; + _ZTIPKg; + +} CXXABI_1.3.8; + # Symbols in the support library (libsupc++) supporting transactional memory. CXXABI_TM_1 { -- 2.7.4