Bart De VOS pointed out that removing absolute paths from the libc linker scripts is plainly wrong.
It dates from dawn ages of the original crosstool code, and is not well explained. At that time, binutils might not understand the sysroot stuff, and it was necessary to remove absolute paths in that case.
/trunk/scripts/build/libc/glibc.sh | 14 2 12 0 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
1 diff -durN gcc-4.2.1.orig/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.2.1/libstdc++-v3/config/locale/uclibc/monetary_members.cc
2 --- gcc-4.2.1.orig/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2007-08-03 20:30:53.000000000 +0200
3 +++ gcc-4.2.1/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2007-08-03 20:31:24.000000000 +0200
5 # ifdef __UCLIBC_HAS_XLOCALE__
6 _M_data->_M_decimal_point = __cloc->decimal_point_wc;
7 _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
9 +# elif defined __UCLIBC_HAS_LOCALE__
10 _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
11 _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
14 # ifdef __UCLIBC_HAS_XLOCALE__
15 _M_data->_M_decimal_point = __cloc->decimal_point_wc;
16 _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
18 +# elif defined __UCLIBC_HAS_LOCALE__
19 _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
20 _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
22 diff -durN gcc-4.2.1.orig/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.2.1/libstdc++-v3/config/locale/uclibc/numeric_members.cc
23 --- gcc-4.2.1.orig/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2007-08-03 20:30:53.000000000 +0200
24 +++ gcc-4.2.1/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2007-08-03 20:31:24.000000000 +0200
28 // NB: In the GNU model wchar_t is always 32 bit wide.
29 +#ifdef __UCLIBC_MJN3_ONLY__
30 +#warning fix this... should be numeric
33 +# ifdef __UCLIBC_HAS_XLOCALE__
34 + _M_data->_M_decimal_point = __cloc->decimal_point_wc;
35 + _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
36 +# elif defined __UCLIBC_HAS_LOCALE__
37 + _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
38 + _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
41 union { char *__s; wchar_t __w; } __u;
42 __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
43 _M_data->_M_decimal_point = __u.__w;
45 __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
46 _M_data->_M_thousands_sep = __u.__w;
49 if (_M_data->_M_thousands_sep == L'\0')
50 _M_data->_M_grouping = "";