https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88125

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Done.

Do we also want this patch?

--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -1123,6 +1123,7 @@ GLIBCXX_3.4.4 {

 GLIBCXX_3.4.5 {

+#ifndef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT
     # std::string
     _ZNKSs11_M_disjunctEPKc;
     _ZNKSs15_M_check_lengthE[jmy][jmy]PKc;
@@ -1154,6 +1155,7 @@ GLIBCXX_3.4.5 {
 #if !defined(__sun__) && !defined(__svr4__)
     _ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv;
 #endif
+#endif
 } GLIBCXX_3.4.4;

 GLIBCXX_3.4.6 {


The patterns in the GLIBCXX_3.4.5 node are duplicates of ones in the base
version, that depend on that macro (starting at line 1024):

#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT
   # GLIBCXX_ABI compatibility only.
    # std::string
    _ZNKSs11_M_disjunctEPKc;
    _ZNKSs15_M_check_lengthE[jmy][jmy]PKc;
    _ZNSs4_Rep26_M_set_length_and_sharableE*;
    _ZNSs7_M_copyEPcPKc[jmy];
    _ZNSs7_M_moveEPcPKc[jmy];
    _ZNSs9_M_assignEPc[jmy]c;

    # std::wstring
    _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw;
    _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthE[jmy][jmy]PKc;
    _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableE*;
    _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKw[jmy];
    _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKw[jmy];
    _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPw[jmy]w;

    _ZNKSt13basic_fstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
    _ZNKSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
    _ZNKSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE7is_openEv;

    _ZNSi6ignoreE[ilvx];
    _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[ilvx];

    _ZNSt11char_traitsI[cw]E2eqERK[cw]S2_;

    _ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv;
#endif

This means that when HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT is defined
those patterns appear twice. Those symbols are meant to have multiple versions
(as Brooks pointed out in comment 0) but they are given those versions by asm
.symver directive in src/c++98/compatibility.cc so I don't think the dups in
the linker script are needed. But I might be misunderstanding something.

Reply via email to