* __float128 typeinfo
@ 2014-11-09 0:41 Marc Glisse
2014-11-10 18:39 ` Jonathan Wakely
0 siblings, 1 reply; 19+ messages in thread
From: Marc Glisse @ 2014-11-09 0:41 UTC (permalink / raw)
To: libstdc++; +Cc: gcc-patches
[-- Attachment #1: Type: TEXT/PLAIN, Size: 846 bytes --]
Hello,
I am digging out https://gcc.gnu.org/ml/gcc-patches/2014-06/msg00637.html
It isn't completely clear if the libstdc++ part was accepted or not. I
won't commit immediately (waiting on another patch), but I'd like to be
ready.
The front-end part is included for reference, both versions were approved,
I'll use the first one if arm vectors are reworked in the same way as
aarch64 before the end of stage 1, and the other one if for some reason it
gets delayed.
2014-11-10 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
gcc/cp/
* rtti.c (emit_support_tinfos): Handle __float128.
libstdc++-v3/
* config/abi/pre/float128.ver: New file.
* configure.ac: Use float128.ver when relevant.
* configure: Regenerate.
* testsuite/util/testsuite_abi.cc (check_version): Accept new
CXXABI_FLOAT128 version.
--
Marc Glisse
[-- Attachment #2: Type: TEXT/PLAIN, Size: 6500 bytes --]
Index: gcc/cp/rtti.c
===================================================================
--- gcc/cp/rtti.c (revision 217249)
+++ gcc/cp/rtti.c (working copy)
@@ -1540,20 +1540,35 @@ emit_support_tinfos (void)
return;
doing_runtime = 1;
for (ix = 0; fundamentals[ix]; ix++)
emit_support_tinfo_1 (*fundamentals[ix]);
for (ix = 0; ix < NUM_INT_N_ENTS; ix ++)
if (int_n_enabled_p[ix])
{
emit_support_tinfo_1 (int_n_trees[ix].signed_type);
emit_support_tinfo_1 (int_n_trees[ix].unsigned_type);
}
+#if 1
+ for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
+ emit_support_tinfo_1 (TREE_VALUE (t));
+#else
+ /* Search for an extra floating point type like __float128. */
+ for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ {
+ tree type = c_common_type_for_mode (mode, false);
+ if (type && type != float_type_node && type != double_type_node
+ && type != long_double_type_node)
+ emit_support_tinfo_1 (type);
+ }
+#endif
}
/* Finish a type info decl. DECL_PTR is a pointer to an unemitted
tinfo decl. Determine whether it needs emitting, and if so
generate the initializer. */
bool
emit_tinfo_decl (tree decl)
{
tree type = TREE_TYPE (DECL_NAME (decl));
Index: libstdc++-v3/config/abi/pre/float128.ver
===================================================================
--- libstdc++-v3/config/abi/pre/float128.ver (revision 0)
+++ libstdc++-v3/config/abi/pre/float128.ver (working copy)
@@ -0,0 +1,10 @@
+# Appended to version file.
+
+CXXABI_FLOAT128 {
+
+ # typeinfo and typeinfo name for __float128
+ _ZT[IS]g;
+ _ZT[IS]Pg;
+ _ZT[IS]PKg;
+
+};
Index: libstdc++-v3/configure
===================================================================
--- libstdc++-v3/configure (revision 217249)
+++ libstdc++-v3/configure (working copy)
@@ -15703,20 +15703,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
$as_echo "$enable_float128" >&6; }
rm -f conftest*
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$enable_float128" = yes; then
+ port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
# Checks for compiler support that doesn't require linking.
# All these tests are for C++; save the language and the compiler flags.
# The CXXFLAGS thing is suspicious, but based on similar bits previously
# found in GLIBCXX_CONFIGURE.
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Index: libstdc++-v3/configure.ac
===================================================================
--- libstdc++-v3/configure.ac (revision 217249)
+++ libstdc++-v3/configure.ac (working copy)
@@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
# Enable descriptive messages to standard output on termination.
GLIBCXX_ENABLE_VERBOSE
# Enable compiler support that doesn't require linking.
GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
GLIBCXX_ENABLE_PCH($is_hosted)
GLIBCXX_ENABLE_THREADS
GLIBCXX_ENABLE_ATOMIC_BUILTINS
GLIBCXX_ENABLE_DECIMAL_FLOAT
GLIBCXX_ENABLE_INT128_FLOAT128
+if test "$enable_float128" = yes; then
+ port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
# Checks for compiler support that doesn't require linking.
GLIBCXX_CHECK_COMPILER_FEATURES
# Enable all the variable C++ runtime options that don't require linking.
GLIBCXX_ENABLE_CSTDIO
GLIBCXX_ENABLE_CLOCALE
GLIBCXX_ENABLE_ALLOCATOR
GLIBCXX_ENABLE_CHEADERS($c_model) dnl c_model from configure.host
GLIBCXX_ENABLE_LONG_LONG([yes])
Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
===================================================================
--- libstdc++-v3/testsuite/util/testsuite_abi.cc (revision 217249)
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc (working copy)
@@ -206,47 +206,50 @@ check_version(symbol& test, bool added)
known_versions.push_back("CXXABI_1.3.1");
known_versions.push_back("CXXABI_1.3.2");
known_versions.push_back("CXXABI_1.3.3");
known_versions.push_back("CXXABI_1.3.4");
known_versions.push_back("CXXABI_1.3.5");
known_versions.push_back("CXXABI_1.3.6");
known_versions.push_back("CXXABI_1.3.7");
known_versions.push_back("CXXABI_1.3.8");
known_versions.push_back("CXXABI_1.3.9");
known_versions.push_back("CXXABI_TM_1");
+ known_versions.push_back("CXXABI_FLOAT128");
}
compat_list::iterator begin = known_versions.begin();
compat_list::iterator end = known_versions.end();
// Check for compatible version.
if (test.version_name.size())
{
compat_list::iterator it1 = find(begin, end, test.version_name);
compat_list::iterator it2 = find(begin, end, test.name);
if (it1 != end)
test.version_status = symbol::compatible;
else
test.version_status = symbol::incompatible;
// Check that added symbols are added in the latest pre-release version.
bool latestp = (test.version_name == "GLIBCXX_3.4.21"
|| test.version_name == "CXXABI_1.3.9"
+ || test.version_name == "CXXABI_FLOAT128"
|| test.version_name == "CXXABI_TM_1");
if (added && !latestp)
test.version_status = symbol::incompatible;
// Check that long double compatibility symbols demangled as
- // __float128 are put into some _LDBL_ version name.
+ // __float128 and regular __float128 symbols are put into some _LDBL_
+ // or _FLOAT128 version name.
if (added && test.demangled_name.find("__float128") != std::string::npos)
{
- // Has to be in _LDBL_ version name.
- if (test.version_name.find("_LDBL_") == std::string::npos)
+ if (test.version_name.find("_LDBL_") == std::string::npos
+ && test.version_name.find("_FLOAT128") == std::string::npos)
test.version_status = symbol::incompatible;
}
// Check for weak label.
if (it1 == end && it2 == end)
test.version_status = symbol::incompatible;
// Check that
// GLIBCXX_3.4
// GLIBCXX_3.4.5
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-11-09 0:41 __float128 typeinfo Marc Glisse
@ 2014-11-10 18:39 ` Jonathan Wakely
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Wakely @ 2014-11-10 18:39 UTC (permalink / raw)
To: Marc Glisse; +Cc: libstdc++, gcc-patches
On 09/11/14 01:41 +0100, Marc Glisse wrote:
>Hello,
>
>I am digging out https://gcc.gnu.org/ml/gcc-patches/2014-06/msg00637.html
>
>It isn't completely clear if the libstdc++ part was accepted or not. I
>won't commit immediately (waiting on another patch), but I'd like to
>be ready.
The libstdc++ part is OK.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-07 9:42 ` Marc Glisse
2014-06-07 9:49 ` Paolo Carlini
@ 2014-06-08 0:07 ` Paolo Carlini
1 sibling, 0 replies; 19+ messages in thread
From: Paolo Carlini @ 2014-06-08 0:07 UTC (permalink / raw)
To: Marc Glisse; +Cc: gcc-patches, jason, libstdc++, meissner, ramana.gcc
[-- Attachment #1: Type: text/plain, Size: 692 bytes --]
Hi again,
On 06/07/2014 11:42 AM, Marc Glisse wrote:
> On Fri, 6 Jun 2014, Paolo Carlini wrote:
>
>> On 06/06/2014 04:16 PM, Marc Glisse wrote:
>>> abi_check is broken before my patch (134 incompatible symbols).
>> Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I
>> would recommend investigating in some detail what's going on at your
>> end...
>
> Ah, no, abi_check actually passed in the regular bootstrap, it is in
> the debug builds (-O0) that it fails because more than a hundred
> non-inlined inline functions find their way into the library. False
> alarm.
I'm finishing testing the attached... So far, it works fine for me at -O0.
Paolo.
////////////////
[-- Attachment #2: p --]
[-- Type: text/plain, Size: 12864 bytes --]
Index: config/abi/pre/gnu.ver
===================================================================
--- config/abi/pre/gnu.ver (revision 211346)
+++ config/abi/pre/gnu.ver (working copy)
@@ -24,11 +24,9 @@
# Names inside the 'extern' block are demangled names.
extern "C++"
{
- std::[A-Z]*;
- std::a[a-c]*;
- std::ad[a-n]*;
- std::ad[p-z]*;
- std::a[e-z]*;
+# std::[A-Z]*;
+# std::a[e-z]*;
+ std::ad[a-np-z]*;
# std::ba[a-r]*;
std::basic_[a-e]*;
std::basic_f[a-h]*;
@@ -45,12 +43,10 @@
std::basic_istr[f-z]*;
std::basic_i[t-z]*;
std::basic_[j-n]*;
- std::basic_o[a-e]*;
# std::basic_ofstream;
# std::basic_o[g-z]*;
- std::basic_o[g-r]*;
- std::basic_ostr[a-d]*;
- std::basic_ostr[f-z]*;
+ std::basic_o[a-eg-r]*;
+ std::basic_ostr[a-df-z]*;
std::basic_[p-r]*;
# std::basic_streambuf
# std::basic_string
@@ -64,20 +60,20 @@
# std::c[i-z]*;
std::c[i-n]*;
# std::condition_variable;
- std::co[^n]*;
- std::c[p-s]*;
+# std::co[^n]*;
+ std::cout;
+# std::codecvt*;
+ std::collate*;
+ std::c[p-sv-z]*;
std::cu[^r]*;
# std::current_exception
- std::c[v-z]*;
# std::[d-g]*;
- std::d[a-d]*;
- std::d[f-n]*;
+ std::d[a-df-np-z]*;
std::domain_error::d*;
# std::domain_error::~d*;
- std::d[p-z]*;
- std::e[a-q]*;
+ std::e[a-m]*;
std::error[^_]*;
- std::e[s-z]*;
+# std::e[s-z];
std::gslice*;
std::h[^a]*;
std::i[a-m]*;
@@ -84,9 +80,24 @@
std::invalid_argument::i*;
# std::invalid_argument::~i*;
# std::ios_base::[A-Ha-z]*;
- std::ios_base::[A-Ha-f]*;
+ std::ios_base::[A-Ha-e]*;
+ std::ios_base::fixed;
+ std::ios_base::float;
+ std::ios_base::failbit;
+ std::ios_base::failure*;
+ std::ios_base::floatfield;
std::ios_base::goodbit;
- std::ios_base::[h-z]*;
+# std::ios_base::[h-z]*;
+ std::ios_base::[h-otu]*;
+ std::ios_base::right;
+ std::ios_base::showpos;
+ std::ios_base::scientific;
+ std::ios_base::showbase;
+ std::ios_base::showpoint;
+ std::ios_base::skipws;
+ std::ios_base::sync_with_stdio*;
+ std::ios_base::register_callback*;
+ std::ios_base::xalloc*;
std::ios_base::_M_grow_words*;
std::ios_base::_M_init*;
std::ios_base::Init::[A-Za-z]*;
@@ -96,19 +107,19 @@
# std::istreambuf_iterator
std::istringstream*;
std::istrstream*;
- std::i[t-z]*;
+# std::i[t-z]*;
std::[A-Zj-k]*;
std::length_error::l*;
# std::length_error::~l*;
std::logic_error*;
std::locale::[A-Za-e]*;
- std::locale::facet::[A-Za-z]*;
+ std::locale::facet::[A-Zg-z]*;
std::locale::facet::_S_get_c_locale*;
std::locale::facet::_S_clone_c_locale*;
std::locale::facet::_S_create_c_locale*;
std::locale::facet::_S_destroy_c_locale*;
std::locale::[A-Zg-h]*;
- std::locale::id::[A-Za-z]*;
+# std::locale::id::[A-Za-z]*;
std::locale::id::_M_id*;
std::locale::[A-Zj-z]*;
std::locale::_[A-Ha-z]*;
@@ -117,15 +128,14 @@
std::locale::_[J-Ra-z]*;
std::locale::_S_normalize_category*;
std::locale::_[T-Za-z]*;
-# std::[A-Zm-r]*;
-# std::[A-Zm]*;
- std::[A-Z]*;
- std::messages*;
- std::money*;
+# std::messages*;
+# std::money*;
# std::n[^u]*;
- std::n[^aue]*;
- std::nu[^m]*;
- std::num[^e]*;
+# std::n[^aue]*;
+ std::nothrow;
+# std::nu[^m]*;
+# std::num[^e]*;
+ std::numpunct*;
std::ostrstream*;
std::out_of_range::o*;
# std::out_of_range::~o*;
@@ -145,18 +155,16 @@
std::strstreambuf*;
# std::t[a-q]*;
std::t[a-g]*;
- std::th[a-h]*;
- std::th[j-q]*;
- std::th[s-z]*;
+ std::th[a-hj-qs-z]*;
# std::t[i-n]*;
std::tr1::h[^a]*;
- std::t[s-z]*;
+# std::t[s-z]*;
# std::[A-Zu-z]*;
std::underflow_error::u*;
# std::underflow_error::~u*;
std::uncaught_exception*;
std::unexpected*;
- std::[A-Zv-z]*;
+ std::[A-Zw-z]*;
std::_List_node_base::hook*;
std::_List_node_base::swap*;
std::_List_node_base::unhook*;
@@ -179,6 +187,11 @@
# among the standard integer types and sizes on different platforms and
# under different modes of 64-bit architecture (ILP64, LLP64, etc.)
+ # std::allocator
+ _ZNSaI[cw]EC[12]Ev;
+ _ZNSaI[cw]ED*;
+ _ZNSaI[cw]EC[12]ERKS_;
+
# std::string
# 'y' here and below represents 'unsigned long long'
# where it is used for size_type on LLP64 platforms.
@@ -196,7 +209,7 @@
_ZNSs[67][j-z]*E[PRcjmvy]*;
_ZNSs7[a-z]*EES2_[NPRjmy]*;
_ZNSs7[a-z]*EES2_S[12]*;
- _ZNSs12_Alloc_hiderC*;
+ _ZNSs12_Alloc_hiderC[12]EP*;
_ZNSs12_M_leak_hardEv;
_ZNSs12_S_constructE[jmy]cRKSaIcE;
_ZNSs12_S_empty_repEv;
@@ -236,7 +249,10 @@
_ZNKSs8_M_check*;
_ZNKSs8_M_limit*;
_ZNKSs9_M_ibeginEv;
- _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_E*;
+# _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_E*;
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES*;
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS*;
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_;
_ZNKSs7compare*;
_ZNKSs5c_strEv;
_ZNKSs8capacityEv;
@@ -257,7 +273,8 @@
_ZNSbIwSt11char_traitsIwESaIwEE[67][j-z]*E[PRwjmvy]*;
_ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_[NPRjmy]*;
_ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_S[56]*;
- _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC*;
+# _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC*;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC[12]EP*;
_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv;
_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructE[jmy]wRKS1_;
_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv;
@@ -452,31 +469,52 @@
# std::use_facet
_ZSt9use_facetIS*;
+ # std::codecvt
+ _ZNSt14codecvt_byname*;
+ _ZNKSt7codecvtI[cw]c11*;
+ _ZNSt7codecvtI[cw]c11*;
+
+ # std::ctype_base
+ _ZNSt10ctype_base5*;
+ _ZNSt10ctype_base6*;
+
# std::ctype
- _ZNKSt5ctypeIcE8*;
+ _ZNKSt5ctypeIcE8do_widen*;
_ZNKSt5ctypeIcE9*;
_ZNKSt5ctypeIcE10*;
_ZNKSt5ctypeIw*;
_ZNSt5ctypeI[cw]*;
- # std::ctype_base
- _ZNSt10ctype_base*;
-
# std::ctype_byname
_ZNSt12ctype_bynameI[cw]*;
# std::num_get
- _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE1[46]*;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE[236CD]*;
+ _ZNSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
# std::num_put
_ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ _ZNSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ # std::money_base
+ _ZNSt10money_base8*;
+ _ZNSt10money_base18*;
+ _ZNSt10money_base20*;
+
# std::money_get
+ _ZNSt9money_get*;
_ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
# std::money_put
+ _ZNSt9money_put*;
_ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ # std::moneypunct
+ _ZNKSt10moneypunct*;
+ _ZNSt10moneypunct*;
+ _ZNSt17moneypunct*;
+
# std::time_get
_ZNSt8time_get*;
_ZNKSt8time_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE1*;
@@ -493,6 +531,11 @@
# std::time_put_byname
_ZNSt15time_put_byname*;
+ # std::messages
+ _ZNKSt8messages*;
+ _ZNSt8messages*;
+ _ZNSt15messages_byname*;
+
# std::numeric_limits
_ZNSt21__numeric_limits_base[5-9]*;
_ZNSt21__numeric_limits_base1[0-7][hirt]*;
@@ -499,7 +542,8 @@
_ZNSt21__numeric_limits_base1[0-7]mi*;
_ZNSt21__numeric_limits_base1[0-7]max_e*;
- _ZNSt14numeric_limitsI[a-m]E[5-9]*;
+ _ZNSt14numeric_limitsI[a-m]E[5-9][a-hj-z]*;
+ _ZNSt14numeric_limitsI[a-m]E[5-9]is_*;
_ZNSt14numeric_limitsI[p-z]E[5-9]*;
_ZNSt14numeric_limitsI[a-m]E1[0-7][hirt]*;
_ZNSt14numeric_limitsI[p-z]E1[0-7][hirt]*;
@@ -508,6 +552,12 @@
_ZNSt14numeric_limitsI[a-m]E1[0-7]max_e*;
_ZNSt14numeric_limitsI[p-z]E1[0-7]max_e*;
+ # std::valarray
+ _ZNSt8valarrayI[jmy]ED*;
+ _ZNSt8valarrayI[jmy]EC*;
+ _ZNSt8valarrayI[jmy]EixE[jmy];
+ _ZNKSt8valarrayI[jmy]E4sizeEv;
+
# std::_Rb_tree
_ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base;
@@ -563,7 +613,7 @@
_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;
# __gnu_debug::_Error_formatter
- _ZNK11__gnu_debug16_Error_formatter10_M_message*;
+ _ZNK11__gnu_debug16_Error_formatter10_M_messageENS*;
_ZNK11__gnu_debug16_Error_formatter10_Parameter*;
_ZNK11__gnu_debug16_Error_formatter13_M_print_word*;
_ZNK11__gnu_debug16_Error_formatter15_M_print_string*;
@@ -667,9 +717,9 @@
_ZTISt10__num_base;
_ZTISt21__ctype_abstract_baseI[cw]E;
_ZTISt23__codecvt_abstract_baseI[cw]c11__mbstate_tE;
-# _ZTISt16__numpunct_cacheI[cw]E;
-# _ZTISt17__timepunct_cacheI[cw]E;
-# _ZTISt18__moneypunct_cacheI[cw]Lb?EE;
+# _ZTISt16__numpunct_cacheI[cw]E;
+# _ZTISt17__timepunct_cacheI[cw]E;
+# _ZTISt18__moneypunct_cacheI[cw]Lb?EE;
_ZTINSt8ios_base7failureE;
_ZTINSt6locale5facetE;
_ZTIN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE;
@@ -708,6 +758,14 @@
_ZTSN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE;
_ZTSN9__gnu_cxx13stdio_filebufI[cw]St11char_traitsI[cw]EEE;
+ # std::type_info
+ _ZNKSt9type_info1*;
+ _ZNSt9type_infoD*;
+
+ # std::exception
+ _ZNKSt9exception4whatEv;
+ _ZNSt9exceptionD*;
+
# std::bad_alloc::~bad_alloc, std::bad_cast::~bad_cast,
# std::bad_typeid::~bad_typeid, std::bad_exception::~bad_exception
_ZNSt9bad_allocD*;
@@ -989,7 +1047,10 @@
_ZNSt15basic_streambufI[cw]St11char_traitsI[cw]EE6stosscEv;
_ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE4syncEv;
- _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE[5-9C]*;
+ _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE[5679]*;
+ _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE8overflow*;
+ _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEC[12]*;
+
_ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EED[^2]*;
} GLIBCXX_3.4.9;
@@ -1150,8 +1211,14 @@
_ZNKSbIwSt11char_traitsIwESaIwEE5crendEv;
# string|wstring ::_S_construct<> and ::_S_construct_aux_2 helpers
- _ZNSs12_S_constructI*;
- _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructI*;
+ # _ZNSs12_S_constructI*;
+ _ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag;
+ _ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag;
+ _ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPcSsEEEES2_T_S4_RKSaIcESt20forward_iterator_tag;
+ # _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructI*;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIN9__gnu_cxx17__normal_iteratorIPwS2_EEEES6_T_S8_RKS1_St20forward_iterator_tag;
_ZNSs18_S_construct_aux_2*;
_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2*;
@@ -1416,7 +1483,7 @@
# *_type_info classes, ctor and dtor
_ZN10__cxxabiv117__array_type_info*;
- _ZN10__cxxabiv117__class_type_info*;
+ _ZN10__cxxabiv117__class_type_infoD*;
_ZN10__cxxabiv116__enum_type_info*;
_ZN10__cxxabiv120__function_type_info*;
_ZN10__cxxabiv123__fundamental_type_info*;
@@ -1427,7 +1494,8 @@
_ZN10__cxxabiv121__vmi_class_type_info*;
# *_type_info classes, member functions
- _ZNK10__cxxabiv117__class_type_info*;
+ _ZNK10__cxxabiv117__class_type_info1[012]*;
+ _ZNK10__cxxabiv117__class_type_info2*;
_ZNK10__cxxabiv120__function_type_info*;
_ZNK10__cxxabiv117__pbase_type_info*;
_ZNK10__cxxabiv129__pointer_to_member_type_info*;
@@ -1576,10 +1644,14 @@
CXXABI_1.3.8 {
__cxa_throw_bad_array_new_length;
- _Z*St20bad_array_new_length*;
+ _ZT[VSI]St20bad_array_new_length;
+ _ZNSt20bad_array_new_lengthD*;
+ _ZNKSt20bad_array_new_length4whatEv;
__cxa_throw_bad_array_length;
- _Z*St16bad_array_length*;
+ _ZT[VSI]St16bad_array_length;
+ _ZNSt16bad_array_lengthD*;
+ _ZNKSt16bad_array_length4whatEv;
# Virtual table verification stub functions.
_Z17__VLTRegisterPair*;
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-07 9:42 ` Marc Glisse
@ 2014-06-07 9:49 ` Paolo Carlini
2014-06-08 0:07 ` Paolo Carlini
1 sibling, 0 replies; 19+ messages in thread
From: Paolo Carlini @ 2014-06-07 9:49 UTC (permalink / raw)
To: Marc Glisse; +Cc: gcc-patches, jason, libstdc++, meissner, ramana.gcc
Hi,
On 07 giugno 2014 11:42:23 CEST, Marc Glisse <marc.glisse@inria.fr> wrote:
>On Fri, 6 Jun 2014, Paolo Carlini wrote:
>
>> On 06/06/2014 04:16 PM, Marc Glisse wrote:
>>> abi_check is broken before my patch (134 incompatible symbols).
>> Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I
>would
>> recommend investigating in some detail what's going on at your end...
>
>Ah, no, abi_check actually passed in the regular bootstrap, it is in
>the
>debug builds (-O0) that it fails because more than a hundred
>non-inlined
>inline functions find their way into the library. False alarm.
Thanks for checking. That is a known issue: short term the only solution I can see is tightening by hand the patterns in the linker script to avoid exporting all the functions which are not inlined anymore at -O0. If nobody has smarter plans I can come to that boring work.
Paolo
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 14:27 ` Paolo Carlini
@ 2014-06-07 9:42 ` Marc Glisse
2014-06-07 9:49 ` Paolo Carlini
2014-06-08 0:07 ` Paolo Carlini
0 siblings, 2 replies; 19+ messages in thread
From: Marc Glisse @ 2014-06-07 9:42 UTC (permalink / raw)
To: Paolo Carlini; +Cc: gcc-patches, jason, libstdc++, meissner, ramana.gcc
On Fri, 6 Jun 2014, Paolo Carlini wrote:
> On 06/06/2014 04:16 PM, Marc Glisse wrote:
>> abi_check is broken before my patch (134 incompatible symbols).
> Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I would
> recommend investigating in some detail what's going on at your end...
Ah, no, abi_check actually passed in the regular bootstrap, it is in the
debug builds (-O0) that it fails because more than a hundred non-inlined
inline functions find their way into the library. False alarm.
--
Marc Glisse
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 15:25 ` Ramana Radhakrishnan
2014-06-06 15:41 ` Marc Glisse
@ 2014-06-07 1:14 ` Richard Earnshaw
1 sibling, 0 replies; 19+ messages in thread
From: Richard Earnshaw @ 2014-06-07 1:14 UTC (permalink / raw)
To: Ramana Radhakrishnan, Marc Glisse
Cc: gcc-patches, Jason Merrill, libstdc++, meissner
On 06/06/14 16:25, Ramana Radhakrishnan wrote:
> On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>> Hello,
>>
>> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
>> part is based on the discussion with Jason yesterday. The libstdc++ part is
>> copied from:
>> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
>> (which wasn't reviewed), but I changed the testsuite.
>>
>> Michael will likely need to make some adjustments to his __float128 patch,
>> but I believe it will only be a small configure tweak.
>>
>> Ramana, does it look safe for ARM? By the way, do you want to remove the
>> XFmode defined in arm-modes.def and apparently unused?
>
> Thanks for this though I know Tejas is actually trying to fix AArch64
> first and then we'll move on to ARM for cleaning up all these types -
> as you realize it's quite a chunky project.
>
> A patch to remove XFmode is pre-approved. I have no idea why this is
> in here. Archeaology shows this came in
>
> git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72440
>
> and with a FIXME:
>
> I'll try and have a look at this patch later today or over the weekend
> to see if it doesn't affect ARM / AArch64.
>
XFmode should have been removed on ARM when the FPA code was expunged.
In fact, it was only briefly used on ARM many, many, years ago when I
tried to use the FPA's extended double-precision format for long double.
That change was backed out when it turned out that some machines of
that era would hang hard (BRS time) in the RISC iX kernel due to a bug
in the floating-point emulation code for handling denormals.
R.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 17:21 ` Marc Glisse
2014-06-06 17:45 ` Michael Meissner
@ 2014-06-06 18:09 ` Joseph S. Myers
1 sibling, 0 replies; 19+ messages in thread
From: Joseph S. Myers @ 2014-06-06 18:09 UTC (permalink / raw)
To: Marc Glisse; +Cc: Jason Merrill, gcc-patches, libstdc++, meissner, ramana.gcc
On Fri, 6 Jun 2014, Marc Glisse wrote:
> DJ Delorie's work on __intN may be a good direction for __floatN as well, IIUC
> we will have a global list of 4 __intN types, and the target decides the value
> of N for each of them, so we can refer to those type nodes in common code but
> they are still target-specific. Or maybe there isn't enough variety in float
> types to deserve this.
The binary types in TS 18661-3 are:
- _FloatN, where N is 16, 32, 64, or >= 128 and a multiple of 32
- _Float32x
- _Float64x
- _Float128x
(_Float32, _Float64, _Float32x required; the first two same representation
and alignment as float and double; other types optional. _Float32x likely
to be same representation and alignment as double. _Float64x likely to be
same representation and alignment as __float80 where that's supported, or
__float128 where that's supported but __float80 isn't. All of these types
have IEEE semantics for their operations, so IBM long double would not be
used for any of them. All these types are distinct from each other and
from float / double / long double. All these types have corresponding
_Complex types. Obviously there are ABI issues with compatibility with
other implementations when supporting these types, although I doubt there
will be much difficulty with those in practice. To support these in C++
you'd need mangling defined.)
I don't really expect anything other than _Float16, _Float32, _Float64,
_Float128, _Float32x (= binary64), _Float64x (= __float80 or binary128) to
be widely used in the near future, though you might still want generic
_FloatN support (and would need it to a certain extent, to process
unsupported types meeting the given pattern as keywords rather than
identifiers then give an error that the type isn't supported).
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 17:21 ` Marc Glisse
@ 2014-06-06 17:45 ` Michael Meissner
2014-06-06 18:09 ` Joseph S. Myers
1 sibling, 0 replies; 19+ messages in thread
From: Michael Meissner @ 2014-06-06 17:45 UTC (permalink / raw)
To: Marc Glisse; +Cc: Jason Merrill, gcc-patches, libstdc++, meissner, ramana.gcc
On Fri, Jun 06, 2014 at 07:21:03PM +0200, Marc Glisse wrote:
> DJ Delorie's work on __intN may be a good direction for __floatN as
> well, IIUC we will have a global list of 4 __intN types, and the
> target decides the value of N for each of them, so we can refer to
> those type nodes in common code but they are still target-specific.
> Or maybe there isn't enough variety in float types to deserve this.
One of the problems I've been having with IEEE floating point on PowerPC is the
number of bits is not the only measure. The IBM double-double format that is
currently used for long double is 128 bits as is the IEEE 128-bit floating
point. So, in theory __float128 could be used for the IBM double-double
format. There might be other places where an implementation has 2 floating
point formats of the same size.
One of the things I need to do to the basic internals, is provide an option so
that __float128 does not widen to a larger type or have smaller types widen to
it.
Another problem with the current __float128 on x86 is it isn't a base type, so
you have do something like the following:
typedef _Complex float __attribute__((mode(TC))) _Complex128;
It would be nice to have a standard name for IEEE 128-bit floating point,
whether it is a defacto standard like __float128, or something in future
standards like _Float128.
--
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 16:38 ` Jason Merrill
2014-06-06 16:55 ` Joseph S. Myers
@ 2014-06-06 17:21 ` Marc Glisse
2014-06-06 17:45 ` Michael Meissner
2014-06-06 18:09 ` Joseph S. Myers
1 sibling, 2 replies; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 17:21 UTC (permalink / raw)
To: Jason Merrill; +Cc: gcc-patches, libstdc++, meissner, ramana.gcc
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1707 bytes --]
On Fri, 6 Jun 2014, Jason Merrill wrote:
> On 06/06/2014 11:58 AM, Marc Glisse wrote:
>> On Fri, 6 Jun 2014, Jason Merrill wrote:
>>
>>> What's your rationale for keeping this in a separate version block
>>> rather than in 1.3.9 (like __int128)?
>>
>> Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
>> isn't __float128 but (de)mangles that way). That doesn't prevent from
>> using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do
>> that if you prefer. If a new target implements __float128 in 4.11 or
>> 4.12, they will have to refine the configure test and provide a
>> different .ver file to avoid adding symbols to an old version.
>
> Fair enough. Let's stick with your approach then, but drop the 1.3.9 from
> the name.
Ok. To help with the review, I am appending the updated patch (untested).
(if we add numeric_limits<__float128> later, I think it should go into
GLIBCXX_FLOAT128_1)
> Why is __float128 handled as a target type, anyway? I'd think it ought to be
> a standard type that just isn't supported on all targets, like __int128.
I don't know. Since it is implemented in software on all platforms as far
as I know, it shouldn't be that specific to a target. But it isn't just
__float128, on some targets my patch may start generating extra symbols
for half-floats (ARM) or __float80.
DJ Delorie's work on __intN may be a good direction for __floatN as well,
IIUC we will have a global list of 4 __intN types, and the target decides
the value of N for each of them, so we can refer to those type nodes in
common code but they are still target-specific. Or maybe there isn't
enough variety in float types to deserve this.
--
Marc Glisse
[-- Attachment #2: Type: TEXT/PLAIN, Size: 6360 bytes --]
Index: gcc/cp/rtti.c
===================================================================
--- gcc/cp/rtti.c (revision 211311)
+++ gcc/cp/rtti.c (working copy)
@@ -1540,20 +1540,31 @@ emit_support_tinfos (void)
/*tag_scope=*/ts_current, false);
pop_abi_namespace ();
if (!COMPLETE_TYPE_P (bltn_type))
return;
dtor = CLASSTYPE_DESTRUCTORS (bltn_type);
if (!dtor || DECL_EXTERNAL (dtor))
return;
doing_runtime = 1;
for (ix = 0; fundamentals[ix]; ix++)
emit_support_tinfo_1 (*fundamentals[ix]);
+
+ /* Search for an extra floating point type like __float128. */
+ for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ {
+ tree type = c_common_type_for_mode (mode, false);
+ if (type && type != float_type_node && type != double_type_node
+ && type != long_double_type_node)
+ emit_support_tinfo_1 (type);
+ }
}
/* Finish a type info decl. DECL_PTR is a pointer to an unemitted
tinfo decl. Determine whether it needs emitting, and if so
generate the initializer. */
bool
emit_tinfo_decl (tree decl)
{
tree type = TREE_TYPE (DECL_NAME (decl));
Index: libstdc++-v3/config/abi/pre/float128.ver
===================================================================
--- libstdc++-v3/config/abi/pre/float128.ver (revision 0)
+++ libstdc++-v3/config/abi/pre/float128.ver (working copy)
@@ -0,0 +1,10 @@
+# Appended to version file.
+
+CXXABI_FLOAT128 {
+
+ # typeinfo and typeinfo name for __float128
+ _ZT[IS]g;
+ _ZT[IS]Pg;
+ _ZT[IS]PKg;
+
+};
Index: libstdc++-v3/configure
===================================================================
--- libstdc++-v3/configure (revision 211311)
+++ libstdc++-v3/configure (working copy)
@@ -15698,20 +15698,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
$as_echo "$enable_float128" >&6; }
rm -f conftest*
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$enable_float128" = yes; then
+ port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
# Checks for compiler support that doesn't require linking.
# All these tests are for C++; save the language and the compiler flags.
# The CXXFLAGS thing is suspicious, but based on similar bits previously
# found in GLIBCXX_CONFIGURE.
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Index: libstdc++-v3/configure.ac
===================================================================
--- libstdc++-v3/configure.ac (revision 211311)
+++ libstdc++-v3/configure.ac (working copy)
@@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
# Enable descriptive messages to standard output on termination.
GLIBCXX_ENABLE_VERBOSE
# Enable compiler support that doesn't require linking.
GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
GLIBCXX_ENABLE_PCH($is_hosted)
GLIBCXX_ENABLE_THREADS
GLIBCXX_ENABLE_ATOMIC_BUILTINS
GLIBCXX_ENABLE_DECIMAL_FLOAT
GLIBCXX_ENABLE_INT128_FLOAT128
+if test "$enable_float128" = yes; then
+ port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
# Checks for compiler support that doesn't require linking.
GLIBCXX_CHECK_COMPILER_FEATURES
# Enable all the variable C++ runtime options that don't require linking.
GLIBCXX_ENABLE_CSTDIO
GLIBCXX_ENABLE_CLOCALE
GLIBCXX_ENABLE_ALLOCATOR
GLIBCXX_ENABLE_CHEADERS($c_model) dnl c_model from configure.host
GLIBCXX_ENABLE_LONG_LONG([yes])
Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
===================================================================
--- libstdc++-v3/testsuite/util/testsuite_abi.cc (revision 211311)
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc (working copy)
@@ -206,47 +206,50 @@ check_version(symbol& test, bool added)
known_versions.push_back("CXXABI_1.3.1");
known_versions.push_back("CXXABI_1.3.2");
known_versions.push_back("CXXABI_1.3.3");
known_versions.push_back("CXXABI_1.3.4");
known_versions.push_back("CXXABI_1.3.5");
known_versions.push_back("CXXABI_1.3.6");
known_versions.push_back("CXXABI_1.3.7");
known_versions.push_back("CXXABI_1.3.8");
known_versions.push_back("CXXABI_1.3.9");
known_versions.push_back("CXXABI_TM_1");
+ known_versions.push_back("CXXABI_FLOAT128");
}
compat_list::iterator begin = known_versions.begin();
compat_list::iterator end = known_versions.end();
// Check for compatible version.
if (test.version_name.size())
{
compat_list::iterator it1 = find(begin, end, test.version_name);
compat_list::iterator it2 = find(begin, end, test.name);
if (it1 != end)
test.version_status = symbol::compatible;
else
test.version_status = symbol::incompatible;
// Check that added symbols are added in the latest pre-release version.
bool latestp = (test.version_name == "GLIBCXX_3.4.21"
|| test.version_name == "CXXABI_1.3.9"
+ || test.version_name == "CXXABI_FLOAT128"
|| test.version_name == "CXXABI_TM_1");
if (added && !latestp)
test.version_status = symbol::incompatible;
// Check that long double compatibility symbols demangled as
- // __float128 are put into some _LDBL_ version name.
+ // __float128 and regular __float128 symbols are put into some _LDBL_
+ // or _FLOAT128 version name.
if (added && test.demangled_name.find("__float128") != std::string::npos)
{
- // Has to be in _LDBL_ version name.
- if (test.version_name.find("_LDBL_") == std::string::npos)
+ if (test.version_name.find("_LDBL_") == std::string::npos
+ && test.version_name.find("_FLOAT128") == std::string::npos)
test.version_status = symbol::incompatible;
}
// Check for weak label.
if (it1 == end && it2 == end)
test.version_status = symbol::incompatible;
// Check that
// GLIBCXX_3.4
// GLIBCXX_3.4.5
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 16:55 ` Joseph S. Myers
@ 2014-06-06 17:06 ` Jason Merrill
0 siblings, 0 replies; 19+ messages in thread
From: Jason Merrill @ 2014-06-06 17:06 UTC (permalink / raw)
To: Joseph S. Myers; +Cc: Marc Glisse, gcc-patches, libstdc++, meissner, ramana.gcc
On 06/06/2014 12:54 PM, Joseph S. Myers wrote:
> If we want something like that as a standard type not supported on all
> targets I'd think we should use the DTS 18661-3 naming (_Float128)
Ah, I wasn't aware of that TS, thanks. I'll check whether it's on the
C++ committee agenda yet.
Jason
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 16:38 ` Jason Merrill
@ 2014-06-06 16:55 ` Joseph S. Myers
2014-06-06 17:06 ` Jason Merrill
2014-06-06 17:21 ` Marc Glisse
1 sibling, 1 reply; 19+ messages in thread
From: Joseph S. Myers @ 2014-06-06 16:55 UTC (permalink / raw)
To: Jason Merrill; +Cc: Marc Glisse, gcc-patches, libstdc++, meissner, ramana.gcc
On Fri, 6 Jun 2014, Jason Merrill wrote:
> On 06/06/2014 11:58 AM, Marc Glisse wrote:
> > On Fri, 6 Jun 2014, Jason Merrill wrote:
> >
> > > What's your rationale for keeping this in a separate version block
> > > rather than in 1.3.9 (like __int128)?
> >
> > Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
> > isn't __float128 but (de)mangles that way). That doesn't prevent from
> > using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do
> > that if you prefer. If a new target implements __float128 in 4.11 or
> > 4.12, they will have to refine the configure test and provide a
> > different .ver file to avoid adding symbols to an old version.
>
> Fair enough. Let's stick with your approach then, but drop the 1.3.9 from the
> name.
>
> Why is __float128 handled as a target type, anyway? I'd think it ought to be
> a standard type that just isn't supported on all targets, like __int128.
If we want something like that as a standard type not supported on all
targets I'd think we should use the DTS 18661-3 naming (_Float128) and
then make __float128 a typedef for that, at least for C. (I don't know if
C++ would want peculiarities such as _Float128 being a distinct type from
long double even if they have the same representation and alignment, so a
conservative approach would be for _Float128 not to exist for C++ unless
it's distinct. There are various other details in which _Float128 differs
from __float128, e.g. it's a keyword and all _FloatN for N >= 128 and a
multiple of 32 are keywords whether or not the type is supported. I
imagine any C++ bindings would look somewhat different, like the C++
bindings to decimal floating point.)
Both __float128 and __int128 names came from the x86_64 ABI.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 15:58 ` Marc Glisse
@ 2014-06-06 16:38 ` Jason Merrill
2014-06-06 16:55 ` Joseph S. Myers
2014-06-06 17:21 ` Marc Glisse
0 siblings, 2 replies; 19+ messages in thread
From: Jason Merrill @ 2014-06-06 16:38 UTC (permalink / raw)
To: Marc Glisse; +Cc: gcc-patches, libstdc++, meissner, ramana.gcc
On 06/06/2014 11:58 AM, Marc Glisse wrote:
> On Fri, 6 Jun 2014, Jason Merrill wrote:
>
>> What's your rationale for keeping this in a separate version block
>> rather than in 1.3.9 (like __int128)?
>
> Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
> isn't __float128 but (de)mangles that way). That doesn't prevent from
> using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do
> that if you prefer. If a new target implements __float128 in 4.11 or
> 4.12, they will have to refine the configure test and provide a
> different .ver file to avoid adding symbols to an old version.
Fair enough. Let's stick with your approach then, but drop the 1.3.9
from the name.
Why is __float128 handled as a target type, anyway? I'd think it ought
to be a standard type that just isn't supported on all targets, like
__int128.
Jason
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 15:39 ` Jason Merrill
@ 2014-06-06 15:58 ` Marc Glisse
2014-06-06 16:38 ` Jason Merrill
0 siblings, 1 reply; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 15:58 UTC (permalink / raw)
To: Jason Merrill; +Cc: gcc-patches, libstdc++, meissner, ramana.gcc
On Fri, 6 Jun 2014, Jason Merrill wrote:
> On 06/06/2014 10:16 AM, Marc Glisse wrote:
>> * config/abi/pre/float128.ver: New file.
>> +CXXABI_FLOAT128_1.3.9 {
>
> What's your rationale for keeping this in a separate version block rather
> than in 1.3.9 (like __int128)?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43622#c6
Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
isn't __float128 but (de)mangles that way). That doesn't prevent from
using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do that
if you prefer. If a new target implements __float128 in 4.11 or 4.12, they
will have to refine the configure test and provide a different .ver file
to avoid adding symbols to an old version. Or I could try to share the
CXXABI_LDBL_1.3 name although it doesn't correspond to long double in this
case.
I have no preference, I'll go with whatever people like.
--
Marc Glisse
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 15:41 ` Marc Glisse
@ 2014-06-06 15:47 ` Ramana Radhakrishnan
0 siblings, 0 replies; 19+ messages in thread
From: Ramana Radhakrishnan @ 2014-06-06 15:47 UTC (permalink / raw)
To: Marc Glisse; +Cc: gcc-patches, Jason Merrill, libstdc++, meissner
On 06/06/14 16:40, Marc Glisse wrote:
> On Fri, 6 Jun 2014, Ramana Radhakrishnan wrote:
>
>> On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>>> Hello,
>>>
>>> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
>>> part is based on the discussion with Jason yesterday. The libstdc++ part is
>>> copied from:
>>> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
>>> (which wasn't reviewed), but I changed the testsuite.
>>>
>>> Michael will likely need to make some adjustments to his __float128 patch,
>>> but I believe it will only be a small configure tweak.
>>>
>>> Ramana, does it look safe for ARM? By the way, do you want to remove the
>>> XFmode defined in arm-modes.def and apparently unused?
>>
>> Thanks for this though I know Tejas is actually trying to fix AArch64
>> first and then we'll move on to ARM for cleaning up all these types -
>> as you realize it's quite a chunky project.
>
> Nice to know. I am a bit afraid it might be hard without breaking ABI
> compatibility at least a little. Good luck anyway.
We did talk about that - but our expectation was that these scalar types
are actually not exposed on any interface and are purely for internal
representations.
User land should only be using the vector types from arm_neon.h - in any
case if such types were used in intrinsics land, user-code will not be
portable across compilers anyway.
>
>> A patch to remove XFmode is pre-approved.
>
> Even for such a trivial patch, it would be good to do at least a build to
> check nothing breaks, but I don't have an easy way to do that (debian
> multiarch cross-builds don't work out of the box), it would be better if
> one of the people working on ARM could handle it.
Sure, one of us will handle that. Thanks for pointing it out.
Ramana
>
>> I'll try and have a look at this patch later today or over the weekend
>> to see if it doesn't affect ARM / AArch64.
>
> Thanks!
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 15:25 ` Ramana Radhakrishnan
@ 2014-06-06 15:41 ` Marc Glisse
2014-06-06 15:47 ` Ramana Radhakrishnan
2014-06-07 1:14 ` Richard Earnshaw
1 sibling, 1 reply; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 15:41 UTC (permalink / raw)
To: ramrad01; +Cc: gcc-patches, Jason Merrill, libstdc++, meissner
On Fri, 6 Jun 2014, Ramana Radhakrishnan wrote:
> On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>> Hello,
>>
>> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
>> part is based on the discussion with Jason yesterday. The libstdc++ part is
>> copied from:
>> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
>> (which wasn't reviewed), but I changed the testsuite.
>>
>> Michael will likely need to make some adjustments to his __float128 patch,
>> but I believe it will only be a small configure tweak.
>>
>> Ramana, does it look safe for ARM? By the way, do you want to remove the
>> XFmode defined in arm-modes.def and apparently unused?
>
> Thanks for this though I know Tejas is actually trying to fix AArch64
> first and then we'll move on to ARM for cleaning up all these types -
> as you realize it's quite a chunky project.
Nice to know. I am a bit afraid it might be hard without breaking ABI
compatibility at least a little. Good luck anyway.
> A patch to remove XFmode is pre-approved.
Even for such a trivial patch, it would be good to do at least a build to
check nothing breaks, but I don't have an easy way to do that (debian
multiarch cross-builds don't work out of the box), it would be better if
one of the people working on ARM could handle it.
> I'll try and have a look at this patch later today or over the weekend
> to see if it doesn't affect ARM / AArch64.
Thanks!
--
Marc Glisse
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 14:16 Marc Glisse
2014-06-06 14:27 ` Paolo Carlini
2014-06-06 15:25 ` Ramana Radhakrishnan
@ 2014-06-06 15:39 ` Jason Merrill
2014-06-06 15:58 ` Marc Glisse
2 siblings, 1 reply; 19+ messages in thread
From: Jason Merrill @ 2014-06-06 15:39 UTC (permalink / raw)
To: Marc Glisse, gcc-patches; +Cc: libstdc++, meissner, ramana.gcc
On 06/06/2014 10:16 AM, Marc Glisse wrote:
> * config/abi/pre/float128.ver: New file.
> +CXXABI_FLOAT128_1.3.9 {
What's your rationale for keeping this in a separate version block
rather than in 1.3.9 (like __int128)?
Jason
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 14:16 Marc Glisse
2014-06-06 14:27 ` Paolo Carlini
@ 2014-06-06 15:25 ` Ramana Radhakrishnan
2014-06-06 15:41 ` Marc Glisse
2014-06-07 1:14 ` Richard Earnshaw
2014-06-06 15:39 ` Jason Merrill
2 siblings, 2 replies; 19+ messages in thread
From: Ramana Radhakrishnan @ 2014-06-06 15:25 UTC (permalink / raw)
To: Marc Glisse; +Cc: gcc-patches, Jason Merrill, libstdc++, meissner
On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
> Hello,
>
> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
> part is based on the discussion with Jason yesterday. The libstdc++ part is
> copied from:
> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
> (which wasn't reviewed), but I changed the testsuite.
>
> Michael will likely need to make some adjustments to his __float128 patch,
> but I believe it will only be a small configure tweak.
>
> Ramana, does it look safe for ARM? By the way, do you want to remove the
> XFmode defined in arm-modes.def and apparently unused?
Thanks for this though I know Tejas is actually trying to fix AArch64
first and then we'll move on to ARM for cleaning up all these types -
as you realize it's quite a chunky project.
A patch to remove XFmode is pre-approved. I have no idea why this is
in here. Archeaology shows this came in
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72440
and with a FIXME:
I'll try and have a look at this patch later today or over the weekend
to see if it doesn't affect ARM / AArch64.
regards
Ramana
>
> Bootstrap+testsuite on x86_64-linux-gnu. I manually checked that
> libstdc++.{a,so} gained exactly the symbols related to typeinfo for
> __float128.
>
> abi_check is broken before my patch (134 incompatible symbols). After it,
> the number of added symbols increases by 7, but the number of incompatible
> symbols remains the same, so I take it as a pass.
>
> 2014-06-06 Marc Glisse <marc.glisse@inria.fr>
>
> PR libstdc++/43622
> gcc/cp/
> * rtti.c (emit_support_tinfos): Handle __float128.
> libstdc++-v3/
> * config/abi/pre/float128.ver: New file.
> * configure.ac: Use float128.ver when relevant.
> * configure: Regenerate.
> * testsuite/util/testsuite_abi.cc (check_version): Accept new
> CXXABI_FLOAT128_1.3.9 version.
>
> --
> Marc Glisse
> Index: gcc/cp/rtti.c
> ===================================================================
> --- gcc/cp/rtti.c (revision 211311)
> +++ gcc/cp/rtti.c (working copy)
> @@ -1540,20 +1540,31 @@ emit_support_tinfos (void)
> /*tag_scope=*/ts_current, false);
> pop_abi_namespace ();
> if (!COMPLETE_TYPE_P (bltn_type))
> return;
> dtor = CLASSTYPE_DESTRUCTORS (bltn_type);
> if (!dtor || DECL_EXTERNAL (dtor))
> return;
> doing_runtime = 1;
> for (ix = 0; fundamentals[ix]; ix++)
> emit_support_tinfo_1 (*fundamentals[ix]);
> +
> + /* Search for an extra floating point type like __float128. */
> + for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
> + mode != VOIDmode;
> + mode = GET_MODE_WIDER_MODE (mode))
> + {
> + tree type = c_common_type_for_mode (mode, false);
> + if (type && type != float_type_node && type != double_type_node
> + && type != long_double_type_node)
> + emit_support_tinfo_1 (type);
> + }
> }
>
> /* Finish a type info decl. DECL_PTR is a pointer to an unemitted
> tinfo decl. Determine whether it needs emitting, and if so
> generate the initializer. */
>
> bool
> emit_tinfo_decl (tree decl)
> {
> tree type = TREE_TYPE (DECL_NAME (decl));
> Index: libstdc++-v3/config/abi/pre/float128.ver
> ===================================================================
> --- libstdc++-v3/config/abi/pre/float128.ver (revision 0)
> +++ libstdc++-v3/config/abi/pre/float128.ver (working copy)
> @@ -0,0 +1,10 @@
> +# Appended to version file.
> +
> +CXXABI_FLOAT128_1.3.9 {
> +
> + # typeinfo and typeinfo name for __float128
> + _ZT[IS]g;
> + _ZT[IS]Pg;
> + _ZT[IS]PKg;
> +
> +};
> Index: libstdc++-v3/configure
> ===================================================================
> --- libstdc++-v3/configure (revision 211311)
> +++ libstdc++-v3/configure (working copy)
> @@ -15698,20 +15698,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
> $as_echo "$enable_float128" >&6; }
> rm -f conftest*
>
> ac_ext=c
> ac_cpp='$CPP $CPPFLAGS'
> ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
> ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS
> conftest.$ac_ext $LIBS >&5'
> ac_compiler_gnu=$ac_cv_c_compiler_gnu
>
>
> +if test "$enable_float128" = yes; then
> + port_specific_symbol_files="$port_specific_symbol_files
> \$(top_srcdir)/config/abi/pre/float128.ver"
> +fi
>
> # Checks for compiler support that doesn't require linking.
>
> # All these tests are for C++; save the language and the compiler flags.
> # The CXXFLAGS thing is suspicious, but based on similar bits previously
> # found in GLIBCXX_CONFIGURE.
>
> ac_ext=cpp
> ac_cpp='$CXXCPP $CPPFLAGS'
> ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
> Index: libstdc++-v3/configure.ac
> ===================================================================
> --- libstdc++-v3/configure.ac (revision 211311)
> +++ libstdc++-v3/configure.ac (working copy)
> @@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
> # Enable descriptive messages to standard output on termination.
> GLIBCXX_ENABLE_VERBOSE
>
> # Enable compiler support that doesn't require linking.
> GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
> GLIBCXX_ENABLE_PCH($is_hosted)
> GLIBCXX_ENABLE_THREADS
> GLIBCXX_ENABLE_ATOMIC_BUILTINS
> GLIBCXX_ENABLE_DECIMAL_FLOAT
> GLIBCXX_ENABLE_INT128_FLOAT128
> +if test "$enable_float128" = yes; then
> + port_specific_symbol_files="$port_specific_symbol_files
> \$(top_srcdir)/config/abi/pre/float128.ver"
> +fi
>
> # Checks for compiler support that doesn't require linking.
> GLIBCXX_CHECK_COMPILER_FEATURES
>
> # Enable all the variable C++ runtime options that don't require linking.
> GLIBCXX_ENABLE_CSTDIO
> GLIBCXX_ENABLE_CLOCALE
> GLIBCXX_ENABLE_ALLOCATOR
> GLIBCXX_ENABLE_CHEADERS($c_model) dnl c_model from configure.host
> GLIBCXX_ENABLE_LONG_LONG([yes])
> Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
> ===================================================================
> --- libstdc++-v3/testsuite/util/testsuite_abi.cc (revision 211311)
> +++ libstdc++-v3/testsuite/util/testsuite_abi.cc (working copy)
> @@ -205,48 +205,51 @@ check_version(symbol& test, bool added)
> known_versions.push_back("CXXABI_LDBL_1.3");
> known_versions.push_back("CXXABI_1.3.1");
> known_versions.push_back("CXXABI_1.3.2");
> known_versions.push_back("CXXABI_1.3.3");
> known_versions.push_back("CXXABI_1.3.4");
> known_versions.push_back("CXXABI_1.3.5");
> known_versions.push_back("CXXABI_1.3.6");
> known_versions.push_back("CXXABI_1.3.7");
> known_versions.push_back("CXXABI_1.3.8");
> known_versions.push_back("CXXABI_1.3.9");
> + known_versions.push_back("CXXABI_FLOAT128_1.3.9");
> known_versions.push_back("CXXABI_TM_1");
> }
> compat_list::iterator begin = known_versions.begin();
> compat_list::iterator end = known_versions.end();
>
> // Check for compatible version.
> if (test.version_name.size())
> {
> compat_list::iterator it1 = find(begin, end, test.version_name);
> compat_list::iterator it2 = find(begin, end, test.name);
> if (it1 != end)
> test.version_status = symbol::compatible;
> else
> test.version_status = symbol::incompatible;
>
> // Check that added symbols are added in the latest pre-release
> version.
> bool latestp = (test.version_name == "GLIBCXX_3.4.21"
> || test.version_name == "CXXABI_1.3.9"
> + || test.version_name == "CXXABI_FLOAT128_1.3.9"
> || test.version_name == "CXXABI_TM_1");
> if (added && !latestp)
> test.version_status = symbol::incompatible;
>
> // Check that long double compatibility symbols demangled as
> - // __float128 are put into some _LDBL_ version name.
> + // __float128 and regular __float128 symbols are put into some _LDBL_
> + // or _FLOAT128_ version name.
> if (added && test.demangled_name.find("__float128") !=
> std::string::npos)
> {
> - // Has to be in _LDBL_ version name.
> - if (test.version_name.find("_LDBL_") == std::string::npos)
> + if (test.version_name.find("_LDBL_") == std::string::npos
> + && test.version_name.find("_FLOAT128_") == std::string::npos)
> test.version_status = symbol::incompatible;
> }
>
> // Check for weak label.
> if (it1 == end && it2 == end)
> test.version_status = symbol::incompatible;
>
> // Check that
> // GLIBCXX_3.4
> // GLIBCXX_3.4.5
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: __float128 typeinfo
2014-06-06 14:16 Marc Glisse
@ 2014-06-06 14:27 ` Paolo Carlini
2014-06-07 9:42 ` Marc Glisse
2014-06-06 15:25 ` Ramana Radhakrishnan
2014-06-06 15:39 ` Jason Merrill
2 siblings, 1 reply; 19+ messages in thread
From: Paolo Carlini @ 2014-06-06 14:27 UTC (permalink / raw)
To: Marc Glisse, gcc-patches; +Cc: jason, libstdc++, meissner, ramana.gcc
Hi,
On 06/06/2014 04:16 PM, Marc Glisse wrote:
> abi_check is broken before my patch (134 incompatible symbols).
Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I
would recommend investigating in some detail what's going on at your end...
Paolo.
^ permalink raw reply [flat|nested] 19+ messages in thread
* __float128 typeinfo
@ 2014-06-06 14:16 Marc Glisse
2014-06-06 14:27 ` Paolo Carlini
` (2 more replies)
0 siblings, 3 replies; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 14:16 UTC (permalink / raw)
To: gcc-patches; +Cc: jason, libstdc++, meissner, ramana.gcc
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1275 bytes --]
Hello,
here is a new try on adding __float128 typeinfo to libsupc++. The
front-end part is based on the discussion with Jason yesterday. The
libstdc++ part is copied from:
https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
(which wasn't reviewed), but I changed the testsuite.
Michael will likely need to make some adjustments to his __float128 patch,
but I believe it will only be a small configure tweak.
Ramana, does it look safe for ARM? By the way, do you want to remove the
XFmode defined in arm-modes.def and apparently unused?
Bootstrap+testsuite on x86_64-linux-gnu. I manually checked that
libstdc++.{a,so} gained exactly the symbols related to typeinfo for
__float128.
abi_check is broken before my patch (134 incompatible symbols). After it,
the number of added symbols increases by 7, but the number of incompatible
symbols remains the same, so I take it as a pass.
2014-06-06 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
gcc/cp/
* rtti.c (emit_support_tinfos): Handle __float128.
libstdc++-v3/
* config/abi/pre/float128.ver: New file.
* configure.ac: Use float128.ver when relevant.
* configure: Regenerate.
* testsuite/util/testsuite_abi.cc (check_version): Accept new
CXXABI_FLOAT128_1.3.9 version.
--
Marc Glisse
[-- Attachment #2: Type: TEXT/PLAIN, Size: 6433 bytes --]
Index: gcc/cp/rtti.c
===================================================================
--- gcc/cp/rtti.c (revision 211311)
+++ gcc/cp/rtti.c (working copy)
@@ -1540,20 +1540,31 @@ emit_support_tinfos (void)
/*tag_scope=*/ts_current, false);
pop_abi_namespace ();
if (!COMPLETE_TYPE_P (bltn_type))
return;
dtor = CLASSTYPE_DESTRUCTORS (bltn_type);
if (!dtor || DECL_EXTERNAL (dtor))
return;
doing_runtime = 1;
for (ix = 0; fundamentals[ix]; ix++)
emit_support_tinfo_1 (*fundamentals[ix]);
+
+ /* Search for an extra floating point type like __float128. */
+ for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ {
+ tree type = c_common_type_for_mode (mode, false);
+ if (type && type != float_type_node && type != double_type_node
+ && type != long_double_type_node)
+ emit_support_tinfo_1 (type);
+ }
}
/* Finish a type info decl. DECL_PTR is a pointer to an unemitted
tinfo decl. Determine whether it needs emitting, and if so
generate the initializer. */
bool
emit_tinfo_decl (tree decl)
{
tree type = TREE_TYPE (DECL_NAME (decl));
Index: libstdc++-v3/config/abi/pre/float128.ver
===================================================================
--- libstdc++-v3/config/abi/pre/float128.ver (revision 0)
+++ libstdc++-v3/config/abi/pre/float128.ver (working copy)
@@ -0,0 +1,10 @@
+# Appended to version file.
+
+CXXABI_FLOAT128_1.3.9 {
+
+ # typeinfo and typeinfo name for __float128
+ _ZT[IS]g;
+ _ZT[IS]Pg;
+ _ZT[IS]PKg;
+
+};
Index: libstdc++-v3/configure
===================================================================
--- libstdc++-v3/configure (revision 211311)
+++ libstdc++-v3/configure (working copy)
@@ -15698,20 +15698,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
$as_echo "$enable_float128" >&6; }
rm -f conftest*
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$enable_float128" = yes; then
+ port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
# Checks for compiler support that doesn't require linking.
# All these tests are for C++; save the language and the compiler flags.
# The CXXFLAGS thing is suspicious, but based on similar bits previously
# found in GLIBCXX_CONFIGURE.
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Index: libstdc++-v3/configure.ac
===================================================================
--- libstdc++-v3/configure.ac (revision 211311)
+++ libstdc++-v3/configure.ac (working copy)
@@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
# Enable descriptive messages to standard output on termination.
GLIBCXX_ENABLE_VERBOSE
# Enable compiler support that doesn't require linking.
GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
GLIBCXX_ENABLE_PCH($is_hosted)
GLIBCXX_ENABLE_THREADS
GLIBCXX_ENABLE_ATOMIC_BUILTINS
GLIBCXX_ENABLE_DECIMAL_FLOAT
GLIBCXX_ENABLE_INT128_FLOAT128
+if test "$enable_float128" = yes; then
+ port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
# Checks for compiler support that doesn't require linking.
GLIBCXX_CHECK_COMPILER_FEATURES
# Enable all the variable C++ runtime options that don't require linking.
GLIBCXX_ENABLE_CSTDIO
GLIBCXX_ENABLE_CLOCALE
GLIBCXX_ENABLE_ALLOCATOR
GLIBCXX_ENABLE_CHEADERS($c_model) dnl c_model from configure.host
GLIBCXX_ENABLE_LONG_LONG([yes])
Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
===================================================================
--- libstdc++-v3/testsuite/util/testsuite_abi.cc (revision 211311)
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc (working copy)
@@ -205,48 +205,51 @@ check_version(symbol& test, bool added)
known_versions.push_back("CXXABI_LDBL_1.3");
known_versions.push_back("CXXABI_1.3.1");
known_versions.push_back("CXXABI_1.3.2");
known_versions.push_back("CXXABI_1.3.3");
known_versions.push_back("CXXABI_1.3.4");
known_versions.push_back("CXXABI_1.3.5");
known_versions.push_back("CXXABI_1.3.6");
known_versions.push_back("CXXABI_1.3.7");
known_versions.push_back("CXXABI_1.3.8");
known_versions.push_back("CXXABI_1.3.9");
+ known_versions.push_back("CXXABI_FLOAT128_1.3.9");
known_versions.push_back("CXXABI_TM_1");
}
compat_list::iterator begin = known_versions.begin();
compat_list::iterator end = known_versions.end();
// Check for compatible version.
if (test.version_name.size())
{
compat_list::iterator it1 = find(begin, end, test.version_name);
compat_list::iterator it2 = find(begin, end, test.name);
if (it1 != end)
test.version_status = symbol::compatible;
else
test.version_status = symbol::incompatible;
// Check that added symbols are added in the latest pre-release version.
bool latestp = (test.version_name == "GLIBCXX_3.4.21"
|| test.version_name == "CXXABI_1.3.9"
+ || test.version_name == "CXXABI_FLOAT128_1.3.9"
|| test.version_name == "CXXABI_TM_1");
if (added && !latestp)
test.version_status = symbol::incompatible;
// Check that long double compatibility symbols demangled as
- // __float128 are put into some _LDBL_ version name.
+ // __float128 and regular __float128 symbols are put into some _LDBL_
+ // or _FLOAT128_ version name.
if (added && test.demangled_name.find("__float128") != std::string::npos)
{
- // Has to be in _LDBL_ version name.
- if (test.version_name.find("_LDBL_") == std::string::npos)
+ if (test.version_name.find("_LDBL_") == std::string::npos
+ && test.version_name.find("_FLOAT128_") == std::string::npos)
test.version_status = symbol::incompatible;
}
// Check for weak label.
if (it1 == end && it2 == end)
test.version_status = symbol::incompatible;
// Check that
// GLIBCXX_3.4
// GLIBCXX_3.4.5
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2014-11-10 18:37 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-09 0:41 __float128 typeinfo Marc Glisse
2014-11-10 18:39 ` Jonathan Wakely
-- strict thread matches above, loose matches on Subject: below --
2014-06-06 14:16 Marc Glisse
2014-06-06 14:27 ` Paolo Carlini
2014-06-07 9:42 ` Marc Glisse
2014-06-07 9:49 ` Paolo Carlini
2014-06-08 0:07 ` Paolo Carlini
2014-06-06 15:25 ` Ramana Radhakrishnan
2014-06-06 15:41 ` Marc Glisse
2014-06-06 15:47 ` Ramana Radhakrishnan
2014-06-07 1:14 ` Richard Earnshaw
2014-06-06 15:39 ` Jason Merrill
2014-06-06 15:58 ` Marc Glisse
2014-06-06 16:38 ` Jason Merrill
2014-06-06 16:55 ` Joseph S. Myers
2014-06-06 17:06 ` Jason Merrill
2014-06-06 17:21 ` Marc Glisse
2014-06-06 17:45 ` Michael Meissner
2014-06-06 18:09 ` Joseph S. Myers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).