sm-grimoire AT lists.ibiblio.org
Subject: Discussion of Spells and Grimoire items
List archive
- From: julian AT openit.de (Julian v. Bock)
- To: Source Mage Grimoire <sm-grimoire AT lists.ibiblio.org>
- Subject: [SM-Grimoire]gcc-3.2 fix
- Date: Mon, 14 Oct 2002 04:57:02 +0200
Hi
I have put together a patch (from the patch already posted and the
current gcc-3.2 branch) to make gcc-3.2 compile under glibc-2.3.
I am going to include the patch into the gcc spell and update glibc
to 2.3.
The patch is attached.
Julian
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/c_locale.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/c_locale.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/c_locale.cc 2002-04-19 09:59:03.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/c_locale.cc 2002-10-14 04:30:58.000000000 +0200
@@ -39,6 +39,17 @@
namespace std
{
+ extern "C" __typeof (strtol_l) __strtol_l;
+ extern "C" __typeof (strtoul_l) __strtoul_l;
+ extern "C" __typeof (strtoll_l) __strtoll_l;
+ extern "C" __typeof (strtoull_l) __strtoull_l;
+ extern "C" __typeof (strtof_l) __strtof_l;
+ extern "C" __typeof (strtod_l) __strtod_l;
+ extern "C" __typeof (strtold_l) __strtold_l;
+ extern "C" __typeof (newlocale) __newlocale;
+ extern "C" __typeof (freelocale) __freelocale;
+ extern "C" __typeof (duplocale) __duplocale;
+
template<>
void
__convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/collate_members.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/collate_members.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/collate_members.cc 2002-04-19 09:59:03.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/collate_members.cc 2002-10-14 04:30:58.000000000 +0200
@@ -37,6 +37,11 @@
namespace std
{
+ extern "C" __typeof (strcoll_l) __strcoll_l;
+ extern "C" __typeof (strxfrm_l) __strxfrm_l;
+ extern "C" __typeof (wcscoll_l) __wcscoll_l;
+ extern "C" __typeof (wcsxfrm_l) __wcsxfrm_l;
+
// These are basically extensions to char_traits, and perhaps should
// be put there instead of here.
template<>
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/ctype_members.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/ctype_members.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/ctype_members.cc 2002-05-24 18:15:25.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/ctype_members.cc 2002-10-14 04:30:58.000000000 +0200
@@ -37,6 +37,11 @@
namespace std
{
+ extern "C" __typeof (wctype_l) __wctype_l;
+ extern "C" __typeof (towupper_l) __towupper_l;
+ extern "C" __typeof (towlower_l) __towlower_l;
+ extern "C" __typeof (iswctype_l) __iswctype_l;
+
// NB: The other ctype<char> specializations are in src/locale.cc and
// various /config/os/* files.
template<>
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/messages_members.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/messages_members.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/messages_members.cc 2002-05-19 00:00:14.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/messages_members.cc 2002-10-14 04:30:58.000000000 +0200
@@ -37,6 +37,7 @@
namespace std
{
+ extern "C" __typeof (uselocale) __uselocale;
// Specializations.
template<>
string
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/messages_members.h gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/messages_members.h
--- gcc-3.2/libstdc++-v3/config/locale/gnu/messages_members.h 2002-05-19 00:00:14.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/messages_members.h 2002-10-14 04:30:58.000000000 +0200
@@ -33,6 +33,8 @@
// Written by Benjamin Kosnik <bkoz AT redhat.com>
+ extern "C" __typeof (uselocale) __uselocale;
+
// Non-virtual member functions.
template<typename _CharT>
typename messages<_CharT>::catalog
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/monetary_members.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/monetary_members.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/monetary_members.cc 2002-07-27 01:23:42.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/monetary_members.cc 2002-10-14 04:30:58.000000000 +0200
@@ -37,6 +37,8 @@
namespace std
{
+ extern "C" __typeof (nl_langinfo_l) __nl_langinfo_l;
+
// Construct and return valid pattern consisting of some combination of:
// space none symbol sign value
money_base::pattern
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/numeric_members.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/numeric_members.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/numeric_members.cc 2002-04-19 09:59:03.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/numeric_members.cc 2002-10-14 04:30:58.000000000 +0200
@@ -37,6 +37,8 @@
namespace std
{
+ extern "C" __typeof (nl_langinfo_l) __nl_langinfo_l;
+
template<>
void
numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
diff -ruN gcc-3.2/libstdc++-v3/config/locale/gnu/time_members.cc gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/time_members.cc
--- gcc-3.2/libstdc++-v3/config/locale/gnu/time_members.cc 2002-05-19 00:00:14.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/locale/gnu/time_members.cc 2002-10-14 04:30:58.000000000 +0200
@@ -38,6 +38,10 @@
namespace std
{
+ extern "C" __typeof (strftime_l) __strftime_l;
+ extern "C" __typeof (wcsftime_l) __wcsftime_l;
+ extern "C" __typeof (nl_langinfo_l) __nl_langinfo_l;
+
template<>
__timepunct<char>::~__timepunct()
{
@@ -52,7 +56,7 @@
const tm* __tm) const
{
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
+ __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
#else
char* __old = strdup(setlocale(LC_ALL, NULL));
setlocale(LC_ALL, _M_name_timepunct);
@@ -202,7 +206,7 @@
const tm* __tm) const
{
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
- __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
+ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
#else
char* __old = strdup(setlocale(LC_ALL, NULL));
setlocale(LC_ALL, _M_name_timepunct);
diff -ruN gcc-3.2/libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h gcc-3.2.fixed/libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h
--- gcc-3.2/libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h 2002-04-19 09:59:07.000000000 +0200
+++ gcc-3.2.fixed/libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h 2002-10-14 04:30:48.000000000 +0200
@@ -34,16 +34,32 @@
// Information as gleaned from /usr/include/ctype.h
-#if _GLIBCPP_USE_SHADOW_HEADERS
- using _C_legacy::__ctype_toupper;
- using _C_legacy::__ctype_tolower;
- using _C_legacy::__ctype_b;
-#endif
-
+#if _GLIBCPP_C_LOCALE_GNU
const ctype_base::mask*
ctype<char>::classic_table() throw()
- { return __ctype_b; }
-
+ {
+ if (!_S_c_locale)
+ _S_create_c_locale(_S_c_locale, "C");
+ return _S_c_locale->__ctype_b;
+ }
+#else
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ {
+ const ctype_base::mask* __ret;
+ char* __old = strdup(setlocale(LC_CTYPE, NULL));
+ setlocale(LC_CTYPE, "C");
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+ __ret = *__ctype_b_loc();
+#else
+ __ret = __ctype_b;
+#endif
+ setlocale(LC_CTYPE, __old);
+ free(__old);
+ return __ret;
+ }
+#endif
+
#if _GLIBCPP_C_LOCALE_GNU
ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
size_t __refs)
@@ -57,17 +73,54 @@
#else
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
- : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
- _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
- _M_table(__table ? __table : classic_table())
- { _M_c_locale_ctype = _S_c_locale; }
+ : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
+ {
+ char* __old=strdup(setlocale(LC_CTYPE, NULL));
+ setlocale(LC_CTYPE, "C");
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+ _M_toupper = *__ctype_toupper_loc();
+ _M_tolower = *__ctype_tolower_loc();
+ _M_table = __table ? __table : *__ctype_b_loc();
+#else
+ _M_toupper = __ctype_toupper;
+ _M_tolower = __ctype_tolower;
+ _M_table = __table ? __table : __ctype_b;
+#endif
+ setlocale(LC_CTYPE, __old);
+ free(__old);
+ _M_c_locale_ctype = _S_c_locale;
+ }
#endif
+#if _GLIBCPP_C_LOCALE_GNU
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) :
+ __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
+ {
+ _M_c_locale_ctype = _S_c_locale;
+ _M_toupper = _M_c_locale_ctype->__ctype_toupper;
+ _M_tolower = _M_c_locale_ctype->__ctype_tolower;
+ _M_table = __table ? __table : _M_c_locale_ctype->__ctype_b;
+ }
+#else
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) :
- __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
- _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
- _M_table(__table ? __table : classic_table())
- { _M_c_locale_ctype = _S_c_locale; }
+ __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
+ {
+ char* __old=strdup(setlocale(LC_CTYPE, NULL));
+ setlocale(LC_CTYPE, "C");
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+ _M_toupper = *__ctype_toupper_loc();
+ _M_tolower = *__ctype_tolower_loc();
+ _M_table = __table ? __table : *__ctype_b_loc();
+#else
+ _M_toupper = __ctype_toupper;
+ _M_tolower = __ctype_tolower;
+ _M_table = __table ? __table : __ctype_b;
+#endif
+ setlocale(LC_CTYPE, __old);
+ free(__old);
+ _M_c_locale_ctype = _S_c_locale;
+ }
+#endif
char
ctype<char>::do_toupper(char __c) const
- [SM-Grimoire]gcc-3.2 fix, Julian v. Bock, 10/13/2002
Archive powered by MHonArc 2.6.24.