diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/config/os/mingw32/os_defines.h src/gcc-4.5.0/libstdc++-v3/config/os/mingw32/os_defines.h --- origsrc/gcc-4.5.0/libstdc++-v3/config/os/mingw32/os_defines.h 2009-11-30 23:22:04.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/config/os/mingw32/os_defines.h 2010-04-19 05:11:01.671875000 +0100 @@ -60,4 +60,10 @@ // See libstdc++/37522. #define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1 +#ifdef _DLL +#define _GLIBCXX_IMPORT __attribute__((dllimport)) +#else +#define _GLIBCXX_IMPORT +#endif + #endif diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/config/os/newlib/os_defines.h src/gcc-4.5.0/libstdc++-v3/config/os/newlib/os_defines.h --- origsrc/gcc-4.5.0/libstdc++-v3/config/os/newlib/os_defines.h 2009-11-30 23:22:04.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/config/os/newlib/os_defines.h 2010-04-19 05:11:01.687500000 +0100 @@ -35,6 +35,8 @@ #ifdef __CYGWIN__ #define _GLIBCXX_GTHREAD_USE_WEAK 0 +#define __GXX_MERGED_TYPEINFO_NAMES 0 +#define __GXX_TYPEINFO_EQUALITY_INLINE 0 #if defined (_GLIBCXX_DLL) #define _GLIBCXX_PSEUDO_VISIBILITY_default __attribute__ ((__dllimport__)) @@ -47,6 +49,13 @@ // See libstdc++/20806. #define _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM 1 + +#ifdef _DLL +#define _GLIBCXX_IMPORT __attribute__((dllimport)) +#else +#define _GLIBCXX_IMPORT +#endif + #endif #endif diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/configure.host src/gcc-4.5.0/libstdc++-v3/configure.host --- origsrc/gcc-4.5.0/libstdc++-v3/configure.host 2009-11-30 23:22:04.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/configure.host 2010-04-19 05:11:01.703125000 +0100 @@ -209,6 +209,7 @@ case "${host_os}" in ;; cygwin*) os_include_dir="os/newlib" + OPT_LDFLAGS="-Wl,--exclude-modules-for-implib=\`cd ../libsupc++; ls *type_inf*.o -1 | tr '\012' ':'\`tinfo.o:tinfo2.o" OPT_LDFLAGS="${OPT_LDFLAGS} -no-undefined -bindir \$(bindir)" ;; darwin | darwin[1-7] | darwin[1-7].*) diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/backward/strstream src/gcc-4.5.0/libstdc++-v3/include/backward/strstream --- origsrc/gcc-4.5.0/libstdc++-v3/include/backward/strstream 2010-03-16 22:34:53.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/backward/strstream 2010-04-19 05:11:01.703125000 +0100 @@ -55,7 +55,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Class strstreambuf, a streambuf class that manages an array of char. // Note that this class is not a template. - class strstreambuf : public basic_streambuf > + class _GLIBCXX_IMPORT strstreambuf : public basic_streambuf > { public: // Types. @@ -117,7 +117,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; // Class istrstream, an istream that manages a strstreambuf. - class istrstream : public basic_istream + class _GLIBCXX_IMPORT istrstream : public basic_istream { public: explicit istrstream(char*); @@ -134,7 +134,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; // Class ostrstream - class ostrstream : public basic_ostream + class _GLIBCXX_IMPORT ostrstream : public basic_ostream { public: ostrstream(); @@ -151,7 +151,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; // Class strstream - class strstream : public basic_iostream + class _GLIBCXX_IMPORT strstream : public basic_iostream { public: typedef char char_type; diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/basic_ios.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/basic_ios.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/basic_ios.tcc 2009-04-09 16:00:19.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/basic_ios.tcc 2010-04-19 05:11:01.703125000 +0100 @@ -175,10 +175,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class basic_ios; + extern template class _GLIBCXX_IMPORT basic_ios; #ifdef _GLIBCXX_USE_WCHAR_T - extern template class basic_ios; + extern template class _GLIBCXX_IMPORT basic_ios; #endif #endif diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/c++config src/gcc-4.5.0/libstdc++-v3/include/bits/c++config --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/c++config 2009-11-30 23:22:04.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/c++config 2010-04-19 05:11:01.718750000 +0100 @@ -376,4 +376,8 @@ _GLIBCXX_END_NAMESPACE # endif #endif +#ifndef _GLIBCXX_IMPORT +#define _GLIBCXX_IMPORT +#endif + // End of prewritten config; the discovered settings follow. diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/codecvt.h src/gcc-4.5.0/libstdc++-v3/include/bits/codecvt.h --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/codecvt.h 2010-02-10 05:45:24.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/codecvt.h 2010-04-19 05:11:01.750000000 +0100 @@ -476,7 +476,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class codecvt_byname; + extern template class _GLIBCXX_IMPORT codecvt_byname; extern template const codecvt& @@ -487,7 +487,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) has_facet >(const locale&); #ifdef _GLIBCXX_USE_WCHAR_T - extern template class codecvt_byname; + extern template class _GLIBCXX_IMPORT codecvt_byname; extern template const codecvt& diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/fstream.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/fstream.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/fstream.tcc 2009-04-09 16:00:19.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/fstream.tcc 2010-04-19 05:11:01.750000000 +0100 @@ -908,16 +908,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class basic_filebuf; - extern template class basic_ifstream; - extern template class basic_ofstream; - extern template class basic_fstream; + extern template class _GLIBCXX_IMPORT basic_filebuf; + extern template class _GLIBCXX_IMPORT basic_ifstream; + extern template class _GLIBCXX_IMPORT basic_ofstream; + extern template class _GLIBCXX_IMPORT basic_fstream; #ifdef _GLIBCXX_USE_WCHAR_T - extern template class basic_filebuf; - extern template class basic_ifstream; - extern template class basic_ofstream; - extern template class basic_fstream; + extern template class _GLIBCXX_IMPORT basic_filebuf; + extern template class _GLIBCXX_IMPORT basic_ifstream; + extern template class _GLIBCXX_IMPORT basic_ofstream; + extern template class _GLIBCXX_IMPORT basic_fstream; #endif #endif diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/ios_base.h src/gcc-4.5.0/libstdc++-v3/include/bits/ios_base.h --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/ios_base.h 2010-02-17 05:43:24.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/ios_base.h 2010-04-19 05:07:26.125000000 +0100 @@ -204,7 +204,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * people will only see @c ios_base when they need to specify the full * name of the various I/O flags (e.g., the openmodes). */ - class ios_base + class _GLIBCXX_IMPORT ios_base { public: @@ -214,7 +214,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * * 27.4.2.1.1 Class ios_base::failure */ - class failure : public exception + class _GLIBCXX_IMPORT failure : public exception { public: // _GLIBCXX_RESOLVE_LIB_DEFECTS @@ -529,7 +529,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Used to initialize standard streams. In theory, g++ could use // -finit-priority to order this stuff correctly without going // through these machinations. - class Init + class _GLIBCXX_IMPORT Init { friend class ios_base; public: diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/istream.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/istream.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/istream.tcc 2009-09-05 01:18:07.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/istream.tcc 2010-04-19 05:11:01.750000000 +0100 @@ -1018,7 +1018,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class basic_istream; + extern template class _GLIBCXX_IMPORT basic_istream; extern template istream& ws(istream&); extern template istream& operator>>(istream&, char&); extern template istream& operator>>(istream&, char*); @@ -1041,10 +1041,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template istream& istream::_M_extract(long double&); extern template istream& istream::_M_extract(void*&); - extern template class basic_iostream; + extern template class _GLIBCXX_IMPORT basic_iostream; #ifdef _GLIBCXX_USE_WCHAR_T - extern template class basic_istream; + extern template class _GLIBCXX_IMPORT basic_istream; extern template wistream& ws(wistream&); extern template wistream& operator>>(wistream&, wchar_t&); extern template wistream& operator>>(wistream&, wchar_t*); @@ -1063,7 +1063,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template wistream& wistream::_M_extract(long double&); extern template wistream& wistream::_M_extract(void*&); - extern template class basic_iostream; + extern template class _GLIBCXX_IMPORT basic_iostream; #endif #endif diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.h src/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.h --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.h 2010-02-17 05:43:24.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.h 2010-04-19 05:11:01.765625000 +0100 @@ -59,7 +59,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * This library supports efficient construction and copying of locales * through a reference counting implementation of the locale class. */ - class locale + class _GLIBCXX_IMPORT locale { public: // Types: @@ -67,9 +67,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std) typedef int category; // Forward decls and friends: - class facet; - class id; - class _Impl; + class _GLIBCXX_IMPORT facet; + class _GLIBCXX_IMPORT id; + class _GLIBCXX_IMPORT _Impl; friend class facet; friend class _Impl; @@ -334,7 +334,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * * Facets may not be copied or assigned. */ - class locale::facet + class _GLIBCXX_IMPORT locale::facet { private: friend class locale; @@ -429,7 +429,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * cannot be used in a locale. The locale::id ensures that each class * type gets a unique identifier. */ - class locale::id + class _GLIBCXX_IMPORT locale::id { private: friend class locale; @@ -468,7 +468,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Implementation object for locale. - class locale::_Impl + class _GLIBCXX_IMPORT locale::_Impl { public: // Friends. diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.tcc 2009-04-18 22:19:18.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/locale_classes.tcc 2010-04-19 05:11:01.765625000 +0100 @@ -241,8 +241,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class collate; - extern template class collate_byname; + extern template class _GLIBCXX_IMPORT collate; + extern template class _GLIBCXX_IMPORT collate_byname; extern template const collate& @@ -253,8 +253,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) has_facet >(const locale&); #ifdef _GLIBCXX_USE_WCHAR_T - extern template class collate; - extern template class collate_byname; + extern template class _GLIBCXX_IMPORT collate; + extern template class _GLIBCXX_IMPORT collate_byname; extern template const collate& diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.h src/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.h --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.h 2010-02-19 03:30:46.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.h 2010-04-19 05:11:01.765625000 +0100 @@ -670,7 +670,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * optimizations as well. */ template<> - class ctype : public locale::facet, public ctype_base + class _GLIBCXX_IMPORT ctype : public locale::facet, public ctype_base { public: // Types: @@ -1171,7 +1171,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * __ctype_abstract_base. */ template<> - class ctype : public __ctype_abstract_base + class _GLIBCXX_IMPORT ctype : public __ctype_abstract_base { public: // Types: diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.tcc 2009-07-18 23:58:10.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets.tcc 2010-04-19 05:11:01.781250000 +0100 @@ -1276,11 +1276,11 @@ _GLIBCXX_END_LDBL_NAMESPACE // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class numpunct; - extern template class numpunct_byname; - extern template class _GLIBCXX_LDBL_NAMESPACE num_get; - extern template class _GLIBCXX_LDBL_NAMESPACE num_put; - extern template class ctype_byname; + extern template class _GLIBCXX_IMPORT numpunct; + extern template class _GLIBCXX_IMPORT numpunct_byname; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_get; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_put; + extern template class _GLIBCXX_IMPORT ctype_byname; extern template const ctype& @@ -1315,11 +1315,11 @@ _GLIBCXX_END_LDBL_NAMESPACE has_facet >(const locale&); #ifdef _GLIBCXX_USE_WCHAR_T - extern template class numpunct; - extern template class numpunct_byname; - extern template class _GLIBCXX_LDBL_NAMESPACE num_get; - extern template class _GLIBCXX_LDBL_NAMESPACE num_put; - extern template class ctype_byname; + extern template class _GLIBCXX_IMPORT numpunct; + extern template class _GLIBCXX_IMPORT numpunct_byname; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_get; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_put; + extern template class _GLIBCXX_IMPORT ctype_byname; extern template const ctype& diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc 2010-01-07 17:20:45.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc 2010-04-19 05:11:01.781250000 +0100 @@ -1214,19 +1214,19 @@ _GLIBCXX_END_LDBL_NAMESPACE // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class moneypunct; - extern template class moneypunct; - extern template class moneypunct_byname; - extern template class moneypunct_byname; - extern template class _GLIBCXX_LDBL_NAMESPACE money_get; - extern template class _GLIBCXX_LDBL_NAMESPACE money_put; - extern template class __timepunct; - extern template class time_put; - extern template class time_put_byname; - extern template class time_get; - extern template class time_get_byname; - extern template class messages; - extern template class messages_byname; + extern template class _GLIBCXX_IMPORT moneypunct; + extern template class _GLIBCXX_IMPORT moneypunct; + extern template class _GLIBCXX_IMPORT moneypunct_byname; + extern template class _GLIBCXX_IMPORT moneypunct_byname; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_get; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_put; + extern template class _GLIBCXX_IMPORT __timepunct; + extern template class _GLIBCXX_IMPORT time_put; + extern template class _GLIBCXX_IMPORT time_put_byname; + extern template class _GLIBCXX_IMPORT time_get; + extern template class _GLIBCXX_IMPORT time_get_byname; + extern template class _GLIBCXX_IMPORT messages; + extern template class _GLIBCXX_IMPORT messages_byname; extern template const moneypunct& @@ -1289,19 +1289,19 @@ _GLIBCXX_END_LDBL_NAMESPACE has_facet >(const locale&); #ifdef _GLIBCXX_USE_WCHAR_T - extern template class moneypunct; - extern template class moneypunct; - extern template class moneypunct_byname; - extern template class moneypunct_byname; - extern template class _GLIBCXX_LDBL_NAMESPACE money_get; - extern template class _GLIBCXX_LDBL_NAMESPACE money_put; - extern template class __timepunct; - extern template class time_put; - extern template class time_put_byname; - extern template class time_get; - extern template class time_get_byname; - extern template class messages; - extern template class messages_byname; + extern template class _GLIBCXX_IMPORT moneypunct; + extern template class _GLIBCXX_IMPORT moneypunct; + extern template class _GLIBCXX_IMPORT moneypunct_byname; + extern template class _GLIBCXX_IMPORT moneypunct_byname; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_get; + extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_put; + extern template class _GLIBCXX_IMPORT __timepunct; + extern template class _GLIBCXX_IMPORT time_put; + extern template class _GLIBCXX_IMPORT time_put_byname; + extern template class _GLIBCXX_IMPORT time_get; + extern template class _GLIBCXX_IMPORT time_get_byname; + extern template class _GLIBCXX_IMPORT messages; + extern template class _GLIBCXX_IMPORT messages_byname; extern template const moneypunct& diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/ostream.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/ostream.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/ostream.tcc 2009-09-05 01:18:07.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/ostream.tcc 2010-04-19 05:11:01.781250000 +0100 @@ -357,7 +357,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class basic_ostream; + extern template class _GLIBCXX_IMPORT basic_ostream; extern template ostream& endl(ostream&); extern template ostream& ends(ostream&); extern template ostream& flush(ostream&); @@ -380,7 +380,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template ostream& ostream::_M_insert(const void*); #ifdef _GLIBCXX_USE_WCHAR_T - extern template class basic_ostream; + extern template class _GLIBCXX_IMPORT basic_ostream; extern template wostream& endl(wostream&); extern template wostream& ends(wostream&); extern template wostream& flush(wostream&); diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/sstream.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/sstream.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/sstream.tcc 2009-04-09 16:00:19.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/sstream.tcc 2010-04-19 05:11:01.796875000 +0100 @@ -255,16 +255,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class basic_stringbuf; - extern template class basic_istringstream; - extern template class basic_ostringstream; - extern template class basic_stringstream; + extern template class _GLIBCXX_IMPORT basic_stringbuf; + extern template class _GLIBCXX_IMPORT basic_istringstream; + extern template class _GLIBCXX_IMPORT basic_ostringstream; + extern template class _GLIBCXX_IMPORT basic_stringstream; #ifdef _GLIBCXX_USE_WCHAR_T - extern template class basic_stringbuf; - extern template class basic_istringstream; - extern template class basic_ostringstream; - extern template class basic_stringstream; + extern template class _GLIBCXX_IMPORT basic_stringbuf; + extern template class _GLIBCXX_IMPORT basic_istringstream; + extern template class _GLIBCXX_IMPORT basic_ostringstream; + extern template class _GLIBCXX_IMPORT basic_stringstream; #endif #endif diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/bits/streambuf.tcc src/gcc-4.5.0/libstdc++-v3/include/bits/streambuf.tcc --- origsrc/gcc-4.5.0/libstdc++-v3/include/bits/streambuf.tcc 2009-04-09 16:00:19.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/bits/streambuf.tcc 2010-04-19 05:11:01.796875000 +0100 @@ -146,7 +146,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // which are defined via explicit instantiations elsewhere. // NB: This syntax is a GNU extension. #if _GLIBCXX_EXTERN_TEMPLATE - extern template class basic_streambuf; + extern template class _GLIBCXX_IMPORT basic_streambuf; extern template streamsize __copy_streambufs(basic_streambuf*, @@ -157,7 +157,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) basic_streambuf*, bool&); #ifdef _GLIBCXX_USE_WCHAR_T - extern template class basic_streambuf; + extern template class _GLIBCXX_IMPORT basic_streambuf; extern template streamsize __copy_streambufs(basic_streambuf*, diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/ext/concurrence.h src/gcc-4.5.0/libstdc++-v3/include/ext/concurrence.h --- origsrc/gcc-4.5.0/libstdc++-v3/include/ext/concurrence.h 2009-04-09 16:00:19.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/ext/concurrence.h 2010-04-19 05:11:01.796875000 +0100 @@ -60,7 +60,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) // NB: As this is used in libsupc++, need to only depend on // exception. No stdexception classes, no use of std::string. - class __concurrence_lock_error : public std::exception + class _GLIBCXX_IMPORT __concurrence_lock_error : public std::exception { public: virtual char const* @@ -68,7 +68,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) { return "__gnu_cxx::__concurrence_lock_error"; } }; - class __concurrence_unlock_error : public std::exception + class _GLIBCXX_IMPORT __concurrence_unlock_error : public std::exception { public: virtual char const* diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/std/iostream src/gcc-4.5.0/libstdc++-v3/include/std/iostream --- origsrc/gcc-4.5.0/libstdc++-v3/include/std/iostream 2010-02-04 18:20:34.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/include/std/iostream 2010-04-19 05:11:01.796875000 +0100 @@ -56,16 +56,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * linked to above. */ //@{ - extern istream cin; ///< Linked to standard input - extern ostream cout; ///< Linked to standard output - extern ostream cerr; ///< Linked to standard error (unbuffered) - extern ostream clog; ///< Linked to standard error (buffered) + extern _GLIBCXX_IMPORT istream cin; ///< Linked to standard input + extern _GLIBCXX_IMPORT ostream cout; ///< Linked to standard output + extern _GLIBCXX_IMPORT ostream cerr; ///< Linked to standard error (unbuffered) + extern _GLIBCXX_IMPORT ostream clog; ///< Linked to standard error (buffered) #ifdef _GLIBCXX_USE_WCHAR_T - extern wistream wcin; ///< Linked to standard input - extern wostream wcout; ///< Linked to standard output - extern wostream wcerr; ///< Linked to standard error (unbuffered) - extern wostream wclog; ///< Linked to standard error (buffered) + extern _GLIBCXX_IMPORT wistream wcin; ///< Linked to standard input + extern _GLIBCXX_IMPORT wostream wcout; ///< Linked to standard output + extern _GLIBCXX_IMPORT wostream wcerr; ///< Linked to standard error (unbuffered) + extern _GLIBCXX_IMPORT wostream wclog; ///< Linked to standard error (buffered) #endif //@} diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/include/std/stdexcept src/gcc-4.5.0/libstdc++-v3/include/std/stdexcept --- origsrc/gcc-4.5.0/libstdc++-v3/include/std/stdexcept 2009-04-09 16:00:19.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/include/std/stdexcept 2010-04-19 05:11:01.812500000 +0100 @@ -50,7 +50,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * program runs (e.g., violations of class invariants). * @brief One of two subclasses of exception. */ - class logic_error : public exception + class _GLIBCXX_IMPORT logic_error : public exception { string _M_msg; @@ -70,14 +70,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) /** Thrown by the library, or by you, to report domain errors (domain in * the mathematical sense). */ - class domain_error : public logic_error + class _GLIBCXX_IMPORT domain_error : public logic_error { public: explicit domain_error(const string& __arg); }; /** Thrown to report invalid arguments to functions. */ - class invalid_argument : public logic_error + class _GLIBCXX_IMPORT invalid_argument : public logic_error { public: explicit invalid_argument(const string& __arg); @@ -85,7 +85,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) /** Thrown when an object is constructed that would exceed its maximum * permitted size (e.g., a basic_string instance). */ - class length_error : public logic_error + class _GLIBCXX_IMPORT length_error : public logic_error { public: explicit length_error(const string& __arg); @@ -93,7 +93,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) /** This represents an argument whose value is not within the expected * range (e.g., boundary checks in basic_string). */ - class out_of_range : public logic_error + class _GLIBCXX_IMPORT out_of_range : public logic_error { public: explicit out_of_range(const string& __arg); @@ -104,7 +104,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * the program executes. * @brief One of two subclasses of exception. */ - class runtime_error : public exception + class _GLIBCXX_IMPORT runtime_error : public exception { string _M_msg; @@ -123,7 +123,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; /** Thrown to indicate range errors in internal computations. */ - class range_error : public runtime_error + class _GLIBCXX_IMPORT range_error : public runtime_error { public: explicit range_error(const string& __arg); @@ -137,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; /** Thrown to indicate arithmetic underflow. */ - class underflow_error : public runtime_error + class _GLIBCXX_IMPORT underflow_error : public runtime_error { public: explicit underflow_error(const string& __arg); diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.am src/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.am --- origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.am 2009-08-23 08:28:35.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.am 2010-04-19 05:11:01.812500000 +0100 @@ -154,7 +154,8 @@ LTCXXCOMPILE = $(LIBTOOL) --tag CXX --ta --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) +LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \ + -no-undefined -bindir $(bindir) # 3) We'd have a problem when building the shared libstdc++ object if # the rules automake generates would be used. We cannot allow g++ to diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.in src/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.in --- origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.in 2010-04-02 19:18:06.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/libsupc++/Makefile.in 2010-04-19 05:11:01.812500000 +0100 @@ -466,7 +466,9 @@ LTCXXCOMPILE = $(LIBTOOL) --tag CXX --ta --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) +LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \ + -no-undefined -bindir $(bindir) + # 3) We'd have a problem when building the shared libstdc++ object if # the rules automake generates would be used. We cannot allow g++ to diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/exception src/gcc-4.5.0/libstdc++-v3/libsupc++/exception --- origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/exception 2010-02-18 17:58:53.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/libsupc++/exception 2010-04-19 05:09:20.750000000 +0100 @@ -58,7 +58,7 @@ namespace std * your own %exception classes, or use a different hierarchy, or to * throw non-class data (e.g., fundamental types). */ - class exception + class _GLIBCXX_IMPORT exception { public: exception() throw() { } @@ -71,7 +71,7 @@ namespace std /** If an %exception is thrown which is not listed in a function's * %exception specification, one of these may be thrown. */ - class bad_exception : public exception + class _GLIBCXX_IMPORT bad_exception : public exception { public: bad_exception() throw() { } diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/new src/gcc-4.5.0/libstdc++-v3/libsupc++/new --- origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/new 2010-02-18 17:58:53.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/libsupc++/new 2010-04-19 05:11:01.828125000 +0100 @@ -53,7 +53,7 @@ namespace std * * @c bad_alloc (or classes derived from it) is used to report allocation * errors from the throwing forms of @c new. */ - class bad_alloc : public exception + class _GLIBCXX_IMPORT bad_alloc : public exception { public: bad_alloc() throw() { } diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/typeinfo src/gcc-4.5.0/libstdc++-v3/libsupc++/typeinfo --- origsrc/gcc-4.5.0/libstdc++-v3/libsupc++/typeinfo 2010-02-18 17:58:53.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/libsupc++/typeinfo 2010-04-19 05:10:35.125000000 +0100 @@ -84,7 +84,7 @@ namespace std * The @c type_info class describes type information generated by * an implementation. */ - class type_info + class _GLIBCXX_IMPORT type_info { public: /** Destructor first. Being the first non-inline virtual function, this @@ -171,7 +171,7 @@ namespace std * * If you attempt an invalid @c dynamic_cast expression, an instance of * this class (or something derived from this class) is thrown. */ - class bad_cast : public exception + class _GLIBCXX_IMPORT bad_cast : public exception { public: bad_cast() throw() { } @@ -188,7 +188,7 @@ namespace std * @brief Thrown when a NULL pointer in a @c typeid expression is used. * @ingroup exceptions */ - class bad_typeid : public exception + class _GLIBCXX_IMPORT bad_typeid : public exception { public: bad_typeid () throw() { } diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/scripts/testsuite_flags.in src/gcc-4.5.0/libstdc++-v3/scripts/testsuite_flags.in --- origsrc/gcc-4.5.0/libstdc++-v3/scripts/testsuite_flags.in 2007-09-11 23:32:51.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/scripts/testsuite_flags.in 2010-04-19 05:11:01.828125000 +0100 @@ -27,6 +27,7 @@ EOF BUILD_DIR=@glibcxx_builddir@ SRC_DIR=@glibcxx_srcdir@ PREFIX_DIR=@glibcxx_prefixdir@ +target=@target@ query=$1 case ${query} in @@ -71,6 +72,12 @@ case ${query} in ;; --cxxldflags) SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@" + case ${target} in + *cygwin*) + SECTIONLDFLAGS="${SECTIONLDFLAGS} -Wl,--enable-auto-import" + ;; + esac + echo ${SECTIONLDFLAGS} ;; *) diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/src/Makefile.am src/gcc-4.5.0/libstdc++-v3/src/Makefile.am --- origsrc/gcc-4.5.0/libstdc++-v3/src/Makefile.am 2010-02-22 18:07:07.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/src/Makefile.am 2010-04-19 05:11:01.828125000 +0100 @@ -210,7 +210,8 @@ libstdc___la_DEPENDENCIES = \ $(top_builddir)/libsupc++/libsupc++convenience.la libstdc___la_LDFLAGS = \ - -version-info $(libtool_VERSION) ${version_arg} -lm + -version-info $(libtool_VERSION) ${version_arg} -lm \ + -no-undefined -bindir $(bindir) libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS) diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/src/Makefile.in src/gcc-4.5.0/libstdc++-v3/src/Makefile.in --- origsrc/gcc-4.5.0/libstdc++-v3/src/Makefile.in 2010-04-02 19:18:06.000000000 +0100 +++ src/gcc-4.5.0/libstdc++-v3/src/Makefile.in 2010-04-19 05:11:01.828125000 +0100 @@ -452,7 +452,8 @@ libstdc___la_DEPENDENCIES = \ $(top_builddir)/libsupc++/libsupc++convenience.la libstdc___la_LDFLAGS = \ - -version-info $(libtool_VERSION) ${version_arg} -lm + -version-info $(libtool_VERSION) ${version_arg} -lm \ + -no-undefined -bindir $(bindir) libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS) diff -pruN origsrc/gcc-4.5.0/libstdc++-v3/testsuite/lib/libstdc++.exp src/gcc-4.5.0/libstdc++-v3/testsuite/lib/libstdc++.exp --- origsrc/gcc-4.5.0/libstdc++-v3/testsuite/lib/libstdc++.exp 2010-01-07 00:22:51.000000000 +0000 +++ src/gcc-4.5.0/libstdc++-v3/testsuite/lib/libstdc++.exp 2010-04-19 05:11:01.843750000 +0100 @@ -124,6 +124,9 @@ proc libstdc++_init { testfile } { if { [string match "powerpc-*-darwin*" $target_triplet] } { append DEFAULT_CXXFLAGS " -multiply_defined suppress" } + if { [string match "*-*-cygwin*" $target_triplet] } { + append DEFAULT_CXXFLAGS " -Wl,--enable-auto-import" + } } v3track DEFAULT_CXXFLAGS 2 @@ -144,6 +147,9 @@ proc libstdc++_init { testfile } { set gccdir [file dirname $gccdir] append ld_library_path_tmp ":${gccdir}" } + if { [string match "*-*-cygwin*" $target_triplet] } { + append ld_library_path_tmp ":${blddir}/../libgcc" + } v3track gccdir 3 # Locate libgomp. This is only required for parallel mode.