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

commit r15-3576-gfc7a1fb0238e379d466316aa219734ac61f4bc0e
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Sep 10 14:36:26 2024 +0100

    libstdc++: Only use std::ios_base_library_init() for ELF [PR116159]
    
    The undefined std::ios_base_library_init() symbol that is referenced by
    <iostream> is only supposed to be used for targets where symbol
    versioning is supported.
    
    The mingw-w64 target defaults to --enable-symvers=gnu due to using GNU
    ld but doesn't actually support symbol versioning. This means it tries
    to emit references to the std::ios_base_library_init() symbol, which
    isn't really defined in the library. This causes problems when using lld
    to link user binaries.
    
    Disable the undefined symbol reference for non-ELF targets.
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/116159
            * include/std/iostream (ios_base_library_init): Only define for
            ELF targets.
            * src/c++98/ios_init.cc (ios_base_library_init): Likewise.

Diff:
---
 libstdc++-v3/include/std/iostream  | 2 +-
 libstdc++-v3/src/c++98/ios_init.cc | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/include/std/iostream 
b/libstdc++-v3/include/std/iostream
index 4f4fa6880d57..4a6dc584d38a 100644
--- a/libstdc++-v3/include/std/iostream
+++ b/libstdc++-v3/include/std/iostream
@@ -78,7 +78,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #if !(_GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE \
       && __has_attribute(__init_priority__))
   static ios_base::Init __ioinit;
-#elif defined(_GLIBCXX_SYMVER_GNU)
+#elif defined(_GLIBCXX_SYMVER_GNU) && defined(__ELF__)
   __extension__ __asm (".globl _ZSt21ios_base_library_initv");
 #endif
 
diff --git a/libstdc++-v3/src/c++98/ios_init.cc 
b/libstdc++-v3/src/c++98/ios_init.cc
index 1422e20d9405..6e2e5014cf0f 100644
--- a/libstdc++-v3/src/c++98/ios_init.cc
+++ b/libstdc++-v3/src/c++98/ios_init.cc
@@ -199,7 +199,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     return __ret;
   }
 
-#ifdef _GLIBCXX_SYMVER_GNU
+#if defined(_GLIBCXX_SYMVER_GNU) && defined(__ELF__)
 #pragma GCC diagnostic ignored "-Wattribute-alias"
 
   void ios_base_library_init (void)

Reply via email to