This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
V3 PATCH: Export std::basic_iostream constructors/destructors
- From: Mark Mitchell <mark at codesourcery dot com>
- To: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Tue, 8 Feb 2005 08:42:31 -0800
- Subject: V3 PATCH: Export std::basic_iostream constructors/destructors
- Reply-to: mark at codesourcery dot com
Several of the V3 tests failed for me on an EM64T RH ES3 machine due
to undefined symbols at link time. It turns out that the linker on
that machine (GNU ld 2.14) apparently handles the combination of
demangling and wild-cards in linker scripts slightly differently from
more recent linkers. As a result, construtors and destructors for
std::basic_iostream <char, char_traits<char> > were becoming local
symbols in libstdc++.so, even though they were exported on other
systems. As these functions are part of an "extern template" they
*must* be exported by the shared library, or we can indeed get link
failure later. It looks like someone has run into this problem
before, in that there are entries for other constructors and
destructors in the version map.
Tested by rebuilding the library and rerunning the failing tests,
applied on the mainline.
--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
2005-02-08 Mark Mitchell <mark@codesourcery.com>
* config/linker-map.gnu (GLIBCXX_3.4): Add _ZNSdC* and _ZNSdD*.
Index: config/linker-map.gnu
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/config/linker-map.gnu,v
retrieving revision 1.76
diff -c -5 -p -r1.76 linker-map.gnu
*** config/linker-map.gnu 8 Nov 2004 20:06:28 -0000 1.76
--- config/linker-map.gnu 8 Feb 2005 16:35:50 -0000
*************** GLIBCXX_3.4 {
*** 100,109 ****
--- 100,113 ----
# operator delete[](void*)
_ZdaPv;
# operator delete[](void*, std::nothrow_t const&)
_ZdaPvRKSt9nothrow_t;
+ # std::basic_iostream constructors, destructors
+ _ZNSdC*;
+ _ZNSdD*;
+
# std::locale destructors
_ZNSt6localeD*;
# std::locale::facet destructors
_ZNSt6locale5facetD*;