summaryrefslogtreecommitdiffstats
path: root/gcc45-libstdc.diff
diff options
context:
space:
mode:
Diffstat (limited to 'gcc45-libstdc.diff')
-rw-r--r--gcc45-libstdc.diff791
1 files changed, 791 insertions, 0 deletions
diff --git a/gcc45-libstdc.diff b/gcc45-libstdc.diff
new file mode 100644
index 0000000..79bc0c6
--- /dev/null
+++ b/gcc45-libstdc.diff
@@ -0,0 +1,791 @@
+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<char, char_traits<char> >
++ class _GLIBCXX_IMPORT strstreambuf : public basic_streambuf<char, char_traits<char> >
+ {
+ public:
+ // Types.
+@@ -117,7 +117,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ };
+
+ // Class istrstream, an istream that manages a strstreambuf.
+- class istrstream : public basic_istream<char>
++ class _GLIBCXX_IMPORT istrstream : public basic_istream<char>
+ {
+ public:
+ explicit istrstream(char*);
+@@ -134,7 +134,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ };
+
+ // Class ostrstream
+- class ostrstream : public basic_ostream<char>
++ class _GLIBCXX_IMPORT ostrstream : public basic_ostream<char>
+ {
+ public:
+ ostrstream();
+@@ -151,7 +151,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ };
+
+ // Class strstream
+- class strstream : public basic_iostream<char>
++ class _GLIBCXX_IMPORT strstream : public basic_iostream<char>
+ {
+ 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<char>;
++ extern template class _GLIBCXX_IMPORT basic_ios<char>;
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class basic_ios<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_ios<wchar_t>;
+ #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<char, char, mbstate_t>;
++ extern template class _GLIBCXX_IMPORT codecvt_byname<char, char, mbstate_t>;
+
+ extern template
+ const codecvt<char, char, mbstate_t>&
+@@ -487,7 +487,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ has_facet<codecvt<char, char, mbstate_t> >(const locale&);
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class codecvt_byname<wchar_t, char, mbstate_t>;
++ extern template class _GLIBCXX_IMPORT codecvt_byname<wchar_t, char, mbstate_t>;
+
+ extern template
+ const codecvt<wchar_t, char, mbstate_t>&
+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<char>;
+- extern template class basic_ifstream<char>;
+- extern template class basic_ofstream<char>;
+- extern template class basic_fstream<char>;
++ extern template class _GLIBCXX_IMPORT basic_filebuf<char>;
++ extern template class _GLIBCXX_IMPORT basic_ifstream<char>;
++ extern template class _GLIBCXX_IMPORT basic_ofstream<char>;
++ extern template class _GLIBCXX_IMPORT basic_fstream<char>;
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class basic_filebuf<wchar_t>;
+- extern template class basic_ifstream<wchar_t>;
+- extern template class basic_ofstream<wchar_t>;
+- extern template class basic_fstream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_filebuf<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_ifstream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_ofstream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_fstream<wchar_t>;
+ #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<char>;
++ extern template class _GLIBCXX_IMPORT basic_istream<char>;
+ 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<char>;
++ extern template class _GLIBCXX_IMPORT basic_iostream<char>;
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class basic_istream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_istream<wchar_t>;
+ 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<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_iostream<wchar_t>;
+ #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<char>;
+- extern template class collate_byname<char>;
++ extern template class _GLIBCXX_IMPORT collate<char>;
++ extern template class _GLIBCXX_IMPORT collate_byname<char>;
+
+ extern template
+ const collate<char>&
+@@ -253,8 +253,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ has_facet<collate<char> >(const locale&);
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class collate<wchar_t>;
+- extern template class collate_byname<wchar_t>;
++ extern template class _GLIBCXX_IMPORT collate<wchar_t>;
++ extern template class _GLIBCXX_IMPORT collate_byname<wchar_t>;
+
+ extern template
+ const collate<wchar_t>&
+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<char> : public locale::facet, public ctype_base
++ class _GLIBCXX_IMPORT ctype<char> : public locale::facet, public ctype_base
+ {
+ public:
+ // Types:
+@@ -1171,7 +1171,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ * __ctype_abstract_base<wchar_t>.
+ */
+ template<>
+- class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
++ class _GLIBCXX_IMPORT ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
+ {
+ 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<char>;
+- extern template class numpunct_byname<char>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE num_get<char>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE num_put<char>;
+- extern template class ctype_byname<char>;
++ extern template class _GLIBCXX_IMPORT numpunct<char>;
++ extern template class _GLIBCXX_IMPORT numpunct_byname<char>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_get<char>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_put<char>;
++ extern template class _GLIBCXX_IMPORT ctype_byname<char>;
+
+ extern template
+ const ctype<char>&
+@@ -1315,11 +1315,11 @@ _GLIBCXX_END_LDBL_NAMESPACE
+ has_facet<num_get<char> >(const locale&);
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class numpunct<wchar_t>;
+- extern template class numpunct_byname<wchar_t>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE num_get<wchar_t>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE num_put<wchar_t>;
+- extern template class ctype_byname<wchar_t>;
++ extern template class _GLIBCXX_IMPORT numpunct<wchar_t>;
++ extern template class _GLIBCXX_IMPORT numpunct_byname<wchar_t>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_get<wchar_t>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE num_put<wchar_t>;
++ extern template class _GLIBCXX_IMPORT ctype_byname<wchar_t>;
+
+ extern template
+ const ctype<wchar_t>&
+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<char, false>;
+- extern template class moneypunct<char, true>;
+- extern template class moneypunct_byname<char, false>;
+- extern template class moneypunct_byname<char, true>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE money_get<char>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE money_put<char>;
+- extern template class __timepunct<char>;
+- extern template class time_put<char>;
+- extern template class time_put_byname<char>;
+- extern template class time_get<char>;
+- extern template class time_get_byname<char>;
+- extern template class messages<char>;
+- extern template class messages_byname<char>;
++ extern template class _GLIBCXX_IMPORT moneypunct<char, false>;
++ extern template class _GLIBCXX_IMPORT moneypunct<char, true>;
++ extern template class _GLIBCXX_IMPORT moneypunct_byname<char, false>;
++ extern template class _GLIBCXX_IMPORT moneypunct_byname<char, true>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_get<char>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_put<char>;
++ extern template class _GLIBCXX_IMPORT __timepunct<char>;
++ extern template class _GLIBCXX_IMPORT time_put<char>;
++ extern template class _GLIBCXX_IMPORT time_put_byname<char>;
++ extern template class _GLIBCXX_IMPORT time_get<char>;
++ extern template class _GLIBCXX_IMPORT time_get_byname<char>;
++ extern template class _GLIBCXX_IMPORT messages<char>;
++ extern template class _GLIBCXX_IMPORT messages_byname<char>;
+
+ extern template
+ const moneypunct<char, true>&
+@@ -1289,19 +1289,19 @@ _GLIBCXX_END_LDBL_NAMESPACE
+ has_facet<messages<char> >(const locale&);
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class moneypunct<wchar_t, false>;
+- extern template class moneypunct<wchar_t, true>;
+- extern template class moneypunct_byname<wchar_t, false>;
+- extern template class moneypunct_byname<wchar_t, true>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE money_get<wchar_t>;
+- extern template class _GLIBCXX_LDBL_NAMESPACE money_put<wchar_t>;
+- extern template class __timepunct<wchar_t>;
+- extern template class time_put<wchar_t>;
+- extern template class time_put_byname<wchar_t>;
+- extern template class time_get<wchar_t>;
+- extern template class time_get_byname<wchar_t>;
+- extern template class messages<wchar_t>;
+- extern template class messages_byname<wchar_t>;
++ extern template class _GLIBCXX_IMPORT moneypunct<wchar_t, false>;
++ extern template class _GLIBCXX_IMPORT moneypunct<wchar_t, true>;
++ extern template class _GLIBCXX_IMPORT moneypunct_byname<wchar_t, false>;
++ extern template class _GLIBCXX_IMPORT moneypunct_byname<wchar_t, true>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_get<wchar_t>;
++ extern template class _GLIBCXX_IMPORT _GLIBCXX_LDBL_NAMESPACE money_put<wchar_t>;
++ extern template class _GLIBCXX_IMPORT __timepunct<wchar_t>;
++ extern template class _GLIBCXX_IMPORT time_put<wchar_t>;
++ extern template class _GLIBCXX_IMPORT time_put_byname<wchar_t>;
++ extern template class _GLIBCXX_IMPORT time_get<wchar_t>;
++ extern template class _GLIBCXX_IMPORT time_get_byname<wchar_t>;
++ extern template class _GLIBCXX_IMPORT messages<wchar_t>;
++ extern template class _GLIBCXX_IMPORT messages_byname<wchar_t>;
+
+ extern template
+ const moneypunct<wchar_t, true>&
+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<char>;
++ extern template class _GLIBCXX_IMPORT basic_ostream<char>;
+ 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<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_ostream<wchar_t>;
+ 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<char>;
+- extern template class basic_istringstream<char>;
+- extern template class basic_ostringstream<char>;
+- extern template class basic_stringstream<char>;
++ extern template class _GLIBCXX_IMPORT basic_stringbuf<char>;
++ extern template class _GLIBCXX_IMPORT basic_istringstream<char>;
++ extern template class _GLIBCXX_IMPORT basic_ostringstream<char>;
++ extern template class _GLIBCXX_IMPORT basic_stringstream<char>;
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class basic_stringbuf<wchar_t>;
+- extern template class basic_istringstream<wchar_t>;
+- extern template class basic_ostringstream<wchar_t>;
+- extern template class basic_stringstream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_stringbuf<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_istringstream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_ostringstream<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_stringstream<wchar_t>;
+ #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<char>;
++ extern template class _GLIBCXX_IMPORT basic_streambuf<char>;
+ extern template
+ streamsize
+ __copy_streambufs(basic_streambuf<char>*,
+@@ -157,7 +157,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
+ basic_streambuf<char>*, bool&);
+
+ #ifdef _GLIBCXX_USE_WCHAR_T
+- extern template class basic_streambuf<wchar_t>;
++ extern template class _GLIBCXX_IMPORT basic_streambuf<wchar_t>;
+ extern template
+ streamsize
+ __copy_streambufs(basic_streambuf<wchar_t>*,
+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.