On 28/11/22 19:35, Jonathan Wakely wrote:
On Mon, 28 Nov 2022 at 06:07, François Dumont via Libstdc++
<libstd...@gcc.gnu.org <mailto:libstdc%2b...@gcc.gnu.org>> wrote:
This patch is fixing those tests:
20_util/to_chars/float128_c++23.cc
std/format/formatter/requirements.cc
std/format/functions/format.cc
std/format/functions/format_to_n.cc
std/format/functions/size.cc
std/format/functions/vformat_to.cc
std/format/string.cc
Note that symbols used in <format> for __ibm128 and __iee128 are
untested.
We don't need to do this for those symbols, the ALT128 config is
incompatible with versioned namespace. If you're using the versioned
namespace, you don't need backwards compatibility with the old long
double ABI.
Here is the simplified patch then.
libstdc++: [_GLIBCXX_INLINE_VERSION] Add to_chars/from_chars
symbols export
libstdc++-v3/ChangeLog
* include/std/format [_GLIBCXX_INLINE_VERSION](to_chars):
Adapt __asm symbol
specifications.
* config/abi/pre/gnu-versioned-namespace.ver: Add
to_chars/from_chars symbols
export.
Ok to commit ?
François
diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
index 06ccaa80a58..7fc81514808 100644
--- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
+++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
@@ -142,6 +142,12 @@ GLIBCXX_8.0 {
_ZN14__gnu_parallel9_Settings3getEv;
_ZN14__gnu_parallel9_Settings3setERS0_;
+ # to_chars/from_chars _Float128
+ _ZNSt3__88to_charsEPcS0_DF128_;
+ _ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatE;
+ _ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatEi;
+ _ZNSt3__810from_charsEPKcS1_RDF128_NS_12chars_formatE;
+
local:
*;
};
diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format
index 23ffbdabed8..fb7a02cec57 100644
--- a/libstdc++-v3/include/std/format
+++ b/libstdc++-v3/include/std/format
@@ -1288,15 +1288,27 @@ namespace __format
// Make them available as std::__format::to_chars.
to_chars_result
to_chars(char*, char*, _Float128) noexcept
+# if _GLIBCXX_INLINE_VERSION
+ __asm("_ZNSt3__88to_charsEPcS0_DF128_");
+# else
__asm("_ZSt8to_charsPcS_DF128_");
+# endif
to_chars_result
to_chars(char*, char*, _Float128, chars_format) noexcept
+# if _GLIBCXX_INLINE_VERSION
+ __asm("_ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatE");
+# else
__asm("_ZSt8to_charsPcS_DF128_St12chars_format");
+# endif
to_chars_result
to_chars(char*, char*, _Float128, chars_format, int) noexcept
+# if _GLIBCXX_INLINE_VERSION
+ __asm("_ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatEi");
+# else
__asm("_ZSt8to_charsPcS_DF128_St12chars_formati");
+# endif
# endif
#endif