public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-7291] libstdc++: Fix up abi.exp FAILs on powerpc64le-linux
@ 2023-05-04  7:44 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2023-05-04  7:44 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:a3fbe2989f9410f6dec36f2c08f46429c9e93caf

commit r13-7291-ga3fbe2989f9410f6dec36f2c08f46429c9e93caf
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Wed May 3 22:32:50 2023 +0200

    libstdc++: Fix up abi.exp FAILs on powerpc64le-linux
    
    This is an ABI problem on powerpc64le-linux, introduced in 13.1.
    When libstdc++ is configured against old glibc, the
    _ZSt10from_charsPKcS0_RDF128_St12chars_format@@GLIBCXX_3.4.31
    _ZSt8to_charsPcS_DF128_@@GLIBCXX_3.4.31
    _ZSt8to_charsPcS_DF128_St12chars_format@@GLIBCXX_3.4.31
    _ZSt8to_charsPcS_DF128_St12chars_formati@@GLIBCXX_3.4.31
    symbols are exported from the library, while when it is configured against
    new enough glibc, those symbols aren't exported and we export instead
    _ZSt10from_charsPKcS0_Ru9__ieee128St12chars_format@@GLIBCXX_IEEE128_3.4.29
    _ZSt8to_charsPcS_u9__ieee128@@GLIBCXX_IEEE128_3.4.29
    _ZSt8to_charsPcS_u9__ieee128St12chars_format@@GLIBCXX_IEEE128_3.4.29
    _ZSt8to_charsPcS_u9__ieee128St12chars_formati@@GLIBCXX_IEEE128_3.4.29
    together with various other @@GLIBCXX_IEEE128_3.4.{29,30,31} and
    @@CXXABI_IEEE128_1.3.13 symbols.  The idea was that those *IEEE128* symbol
    versions (similarly to *LDBL* symbol versions) are optional (but if it
    appears, all symbols from it up to the version of the library appears),
    but the base appears always.
    My _Float128 from_chars/to_chars changes unfortunately broke this.
    I believe nothing really uses those symbols if libstdc++ has been
    configured against old glibc, so if 13.1 wasn't already released, it might
    be best to make sure they aren't exported on powerpc64le-linux.
    But as they were exported, I think the best resolution for this ABI
    difference is to add those 4 symbols as aliases to the
    GLIBCXX_IEEE128_3.4.29 *u9__ieee128* symbols, which the following patch
    does.
    
    2023-05-03  Jakub Jelinek  <jakub@redhat.com>
    
            * src/c++17/floating_from_chars.cc
            (_ZSt10from_charsPKcS0_RDF128_St12chars_format): New alias to
            _ZSt10from_charsPKcS0_Ru9__ieee128St12chars_format.
            * src/c++17/floating_to_chars.cc (_ZSt8to_charsPcS_DF128_): New alias to
            _ZSt8to_charsPcS_u9__ieee128.
            (_ZSt8to_charsPcS_DF128_St12chars_format): New alias to
            _ZSt8to_charsPcS_u9__ieee128St12chars_format.
            (_ZSt8to_charsPcS_DF128_St12chars_formati): New alias to
            _ZSt8to_charsPcS_u9__ieee128St12chars_formati.
            * config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt: Updated.
    
    (cherry picked from commit b51e2fd65e47e61c09b5fab70d9bb9bfffd0d61e)

Diff:
---
 .../abi/post/powerpc64le-linux-gnu/baseline_symbols.txt |  4 ++++
 libstdc++-v3/src/c++17/floating_from_chars.cc           |  7 +++++++
 libstdc++-v3/src/c++17/floating_to_chars.cc             | 17 +++++++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt
index 05037592381..5250925ce4e 100644
--- a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt
@@ -4491,6 +4491,7 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4
 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4
 FUNC:_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11
 FUNC:_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11
+FUNC:_ZSt10from_charsPKcS0_RDF128_St12chars_format@@GLIBCXX_3.4.31
 FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.29
 FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.29
 FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.29
@@ -4641,6 +4642,9 @@ FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cx
 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_@@GLIBCXX_3.4.21
 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4
 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCXX_3.4
+FUNC:_ZSt8to_charsPcS_DF128_@@GLIBCXX_3.4.31
+FUNC:_ZSt8to_charsPcS_DF128_St12chars_format@@GLIBCXX_3.4.31
+FUNC:_ZSt8to_charsPcS_DF128_St12chars_formati@@GLIBCXX_3.4.31
 FUNC:_ZSt8to_charsPcS_d@@GLIBCXX_3.4.29
 FUNC:_ZSt8to_charsPcS_dSt12chars_format@@GLIBCXX_3.4.29
 FUNC:_ZSt8to_charsPcS_dSt12chars_formati@@GLIBCXX_3.4.29
diff --git a/libstdc++-v3/src/c++17/floating_from_chars.cc b/libstdc++-v3/src/c++17/floating_from_chars.cc
index 3a411cf546a..78b9d92cdc0 100644
--- a/libstdc++-v3/src/c++17/floating_from_chars.cc
+++ b/libstdc++-v3/src/c++17/floating_from_chars.cc
@@ -1272,6 +1272,13 @@ from_chars(const char* first, const char* last, __ieee128& value,
   // fast_float doesn't support IEEE binary128 format, but we can use strtold.
   return from_chars_strtod(first, last, value, fmt);
 }
+
+extern "C" from_chars_result
+_ZSt10from_charsPKcS0_RDF128_St12chars_format(const char* first,
+					      const char* last,
+					      __ieee128& value,
+					      chars_format fmt) noexcept
+__attribute__((alias ("_ZSt10from_charsPKcS0_Ru9__ieee128St12chars_format")));
 #elif defined(USE_STRTOF128_FOR_FROM_CHARS)
 from_chars_result
 from_chars(const char* first, const char* last, _Float128& value,
diff --git a/libstdc++-v3/src/c++17/floating_to_chars.cc b/libstdc++-v3/src/c++17/floating_to_chars.cc
index 06ba4dd0cd6..f0115c5cf5c 100644
--- a/libstdc++-v3/src/c++17/floating_to_chars.cc
+++ b/libstdc++-v3/src/c++17/floating_to_chars.cc
@@ -1851,6 +1851,23 @@ to_chars(char* first, char* last, __float128 value, chars_format fmt,
 {
   return __floating_to_chars_precision(first, last, value, fmt, precision);
 }
+
+extern "C" to_chars_result
+_ZSt8to_charsPcS_DF128_(char* first, char* last, __float128 value) noexcept
+  __attribute__((alias ("_ZSt8to_charsPcS_u9__ieee128")));
+
+extern "C" to_chars_result
+_ZSt8to_charsPcS_DF128_St12chars_format(char* first, char* last,
+					__float128 value,
+					chars_format fmt) noexcept
+  __attribute__((alias ("_ZSt8to_charsPcS_u9__ieee128St12chars_format")));
+
+extern "C" to_chars_result
+_ZSt8to_charsPcS_DF128_St12chars_formati(char* first, char* last,
+					 __float128 value,
+					 chars_format fmt,
+					 int precision) noexcept
+  __attribute__((alias ("_ZSt8to_charsPcS_u9__ieee128St12chars_formati")));
 #else
 to_chars_result
 to_chars(char* first, char* last, _Float128 value) noexcept

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-04  7:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-04  7:44 [gcc r13-7291] libstdc++: Fix up abi.exp FAILs on powerpc64le-linux Jakub Jelinek

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).