[OE-core] [PATCH] gcc: Add recipes for 4.6.0

Koen Kooi koen at dominion.thruhere.net
Wed Apr 20 16:51:21 UTC 2011


Op 20 apr 2011, om 18:48 heeft Saul Wold het volgende geschreven:

> On 04/20/2011 08:42 AM, Kamble, Nitin A wrote:
>> Hi Khem,
>>   Great to have these patches. And thanks for getting them out early :) I will check them out and give you feedback on them. Are they available in a tree format or tar.gz so that I can try them with Yocto easily?
>> Thanks&  Regards,
>> Nitin
>> 
> Nitin,
> 
> you should be able to save Khem's email and apply it directly to your git branch via a "git am -i -s <saved email file>"  The -i option is for interactive apply and -s sign's it.

Or get the mbox from http://patches.openembedded.org/patch/2523/ , that should work as well

regards,

Koen


> 
> Sau!
> 
>> 
>>> -----Original Message-----
>>> From: Khem Raj [mailto:raj.khem at gmail.com]
>>> Sent: Tuesday, April 19, 2011 9:27 PM
>>> To: OE core
>>> Cc: Khem Raj; Kamble, Nitin A
>>> Subject: [PATCH] gcc: Add recipes for 4.6.0
>>> 
>>> Hi
>>> 
>>> This is initial set of patches for testing them out
>>> The patches need documentation is pending
>>> Some patches especially uclibc related are not
>>> needed they must be dropped.
>>> 
>>> This is not the final version yet. But I would like
>>> folks to help trying them out and report issues
>>> 
>>> I have tried to boot uclibc/arm on it but qemu
>>> died on me. so please boot the images you build
>>> and I would be interested to know the results.
>>> 
>>> -Khem
>>> 
>>> Signed-off-by: Khem Raj<raj.khem at gmail.com>
>>> ---
>>>  meta/recipes-devtools/gcc/gcc-4.6.0.inc            |   82 +
>>>  .../gcc/gcc-4.6.0/100-uclibc-conf.patch            |   37 +
>>>  .../gcc/gcc-4.6.0/103-uclibc-conf-noupstream.patch |   15 +
>>>  .../gcc/gcc-4.6.0/200-uclibc-locale.patch          | 2840
>>> ++++++++++++++++++++
>>>  .../gcc/gcc-4.6.0/203-uclibc-locale-no__x.patch    |  233 ++
>>>  .../gcc-4.6.0/204-uclibc-locale-wchar_fix.patch    |   52 +
>>>  .../gcc/gcc-4.6.0/205-uclibc-locale-update.patch   |  519 ++++
>>>  .../gcc/gcc-4.6.0/301-missing-execinfo_h.patch     |   13 +
>>>  .../gcc/gcc-4.6.0/302-c99-snprintf.patch           |   13 +
>>>  .../gcc/gcc-4.6.0/303-c99-complex-ugly-hack.patch  |   14 +
>>>  .../gcc/gcc-4.6.0/304-index_macro.patch            |   28 +
>>>  .../gcc-4.6.0/305-libmudflap-susv3-legacy.patch    |   49 +
>>>  .../gcc/gcc-4.6.0/306-libstdc++-namespace.patch    |   38 +
>>>  .../gcc/gcc-4.6.0/307-locale_facets.patch          |   19 +
>>>  .../gcc/gcc-4.6.0/602-sdk-libstdc++-includes.patch |   20 +
>>>  .../recipes-devtools/gcc/gcc-4.6.0/64bithack.patch |   33 +
>>>  .../gcc/gcc-4.6.0/740-sh-pr24836.patch             |   29 +
>>>  .../gcc/gcc-4.6.0/800-arm-bigendian.patch          |   34 +
>>>  .../gcc/gcc-4.6.0/904-flatten-switch-stmt-00.patch |   74 +
>>>  .../gcc/gcc-4.6.0/COLLECT_GCC_OPTIONS.patch        |   23 +
>>>  .../GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch       |   33 +
>>>  .../gcc/gcc-4.6.0/arm-bswapsi2.patch               |   13 +
>>>  .../gcc/gcc-4.6.0/arm-nolibfloat.patch             |   24 +
>>>  .../gcc/gcc-4.6.0/arm-softfloat.patch              |   16 +
>>>  .../gcc/gcc-4.6.0/arm-unbreak-eabi-armv4t.dpatch   |   36 +
>>>  .../gcc/gcc-4.6.0/cache-amnesia.patch              |   31 +
>>>  .../gcc-4.6.0/disable_relax_pic_calls_flag.patch   |   46 +
>>>  .../gcc/gcc-4.6.0/fortran-cross-compile-hack.patch |   30 +
>>>  .../gcc/gcc-4.6.0/gcc-4.0.2-e300c2c3.patch         |  319 +++
>>>  .../gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch          |   31 +
>>>  .../gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch      |  114 +
>>>  .../gcc/gcc-4.6.0/gcc-arm-frename-registers.patch  |   25 +
>>>  .../gcc/gcc-4.6.0/gcc-flags-for-build.patch        |  178 ++
>>>  .../gcc/gcc-4.6.0/gcc-ice-hack.dpatch              |  331 +++
>>>  .../gcc/gcc-4.6.0/gcc-poison-dir-extend.patch      |   25 +
>>>  .../gcc/gcc-4.6.0/gcc-poison-parameters.patch      |   74 +
>>>  .../gcc-4.6.0/gcc-poison-system-directories.patch  |  221 ++
>>>  .../gcc-uclibc-locale-ctype_touplow_t.patch        |   70 +
>>>  .../gcc/gcc-4.6.0/libstdc++-pic.dpatch             |   71 +
>>>  .../gcc/gcc-4.6.0/optional_libstdc.patch           |   84 +
>>>  meta/recipes-devtools/gcc/gcc-4.6.0/pr30961.dpatch |  179 ++
>>>  meta/recipes-devtools/gcc/gcc-4.6.0/pr35942.patch  |   38 +
>>>  .../gcc/gcc-4.6.0/zecke-xgcc-cpp.patch             |   28 +
>>>  .../gcc/gcc-cross-initial_4.6.0.bb                 |    2 +
>>>  .../gcc/gcc-cross-intermediate_4.6.0.bb            |    3 +
>>>  meta/recipes-devtools/gcc/gcc-cross_4.6.0.bb       |    8 +
>>>  .../gcc/gcc-crosssdk-initial_4.6.0.bb              |    4 +
>>>  .../gcc/gcc-crosssdk-intermediate_4.6.0.bb         |    4 +
>>>  meta/recipes-devtools/gcc/gcc-runtime_4.6.0.bb     |   10 +
>>>  meta/recipes-devtools/gcc/gcc_4.6.0.bb             |    7 +
>>>  meta/recipes-devtools/gcc/libgcc_4.6.0.bb          |   46 +
>>>  51 files changed, 6266 insertions(+), 0 deletions(-)
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0.inc
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/100-uclibc-
>>> conf.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/103-uclibc-
>>> conf-noupstream.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/200-uclibc-
>>> locale.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/203-uclibc-
>>> locale-no__x.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/204-uclibc-
>>> locale-wchar_fix.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/205-uclibc-
>>> locale-update.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/301-missing-
>>> execinfo_h.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/302-c99-
>>> snprintf.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/303-c99-
>>> complex-ugly-hack.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/304-
>>> index_macro.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/305-libmudflap-
>>> susv3-legacy.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/306-libstdc++-
>>> namespace.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/307-
>>> locale_facets.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/602-sdk-
>>> libstdc++-includes.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/64bithack.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/740-sh-
>>> pr24836.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/800-arm-
>>> bigendian.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/904-flatten-
>>> switch-stmt-00.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/COLLECT_GCC_OPTIONS.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/arm-
>>> bswapsi2.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/arm-
>>> nolibfloat.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/arm-
>>> softfloat.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/arm-unbreak-
>>> eabi-armv4t.dpatch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/cache-
>>> amnesia.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/disable_relax_pic_calls_flag.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/fortran-cross-
>>> compile-hack.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.0.2-
>>> e300c2c3.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.3.1-
>>> ARCH_FLAGS_FOR_TARGET.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.3.3-
>>> SYSROOT_CFLAGS_FOR_TARGET.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-arm-
>>> frename-registers.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-flags-for-
>>> build.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-ice-
>>> hack.dpatch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-dir-
>>> extend.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-
>>> parameters.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-
>>> system-directories.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-uclibc-
>>> locale-ctype_touplow_t.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/libstdc++-
>>> pic.dpatch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/optional_libstdc.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/pr30961.dpatch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/pr35942.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/zecke-xgcc-
>>> cpp.patch
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-cross-
>>> initial_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-cross-
>>> intermediate_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-cross_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-crosssdk-
>>> initial_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-crosssdk-
>>> intermediate_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc-runtime_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/gcc_4.6.0.bb
>>>  create mode 100644 meta/recipes-devtools/gcc/libgcc_4.6.0.bb
>>> 
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0.inc b/meta/recipes-
>>> devtools/gcc/gcc-4.6.0.inc
>>> new file mode 100644
>>> index 0000000..6f319d4
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0.inc
>>> @@ -0,0 +1,82 @@
>>> +require gcc-common.inc
>>> +
>>> +DEPENDS =+ "mpfr gmp libmpc"
>>> +NATIVEDEPS = "mpfr-native gmp-native gettext-native libmpc-native"
>>> +
>>> +LICENSE="GCC RUNTIME LIBRARY EXCEPTION&  GPLv3"
>>> +
>>> +LIC_FILES_CHKSUM =
>>> "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
>>> +
>>> file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
>>> +
>>> file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
>>> +
>>> file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
>>> +
>>> file://COPYING.RUNTIME;md5=fe60d87048567d4fe8c8a0ed2448bcc8"
>>> +
>>> +SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
>>> +        file://gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch \
>>> +        file://100-uclibc-conf.patch \
>>> +           file://gcc-uclibc-locale-ctype_touplow_t.patch \
>>> +        file://cache-amnesia.patch \
>>> +        file://gcc-flags-for-build.patch \
>>> +           file://103-uclibc-conf-noupstream.patch  \
>>> +           file://200-uclibc-locale.patch  \
>>> +           file://203-uclibc-locale-no__x.patch;striplevel=1 \
>>> +           file://204-uclibc-locale-wchar_fix.patch;striplevel=1 \
>>> +           file://205-uclibc-locale-update.patch;striplevel=1 \
>>> +           file://301-missing-execinfo_h.patch  \
>>> +           file://302-c99-snprintf.patch  \
>>> +           file://303-c99-complex-ugly-hack.patch  \
>>> +           file://304-index_macro.patch  \
>>> +           file://305-libmudflap-susv3-legacy.patch  \
>>> +           file://306-libstdc++-namespace.patch  \
>>> +           file://740-sh-pr24836.patch  \
>>> +           file://800-arm-bigendian.patch  \
>>> +           file://904-flatten-switch-stmt-00.patch  \
>>> +           file://arm-nolibfloat.patch  \
>>> +           file://arm-softfloat.patch \
>>> +           file://zecke-xgcc-cpp.patch \
>>> +           file://gcc-poison-system-directories.patch \
>>> +           file://gcc-poison-dir-extend.patch \
>>> +           file://gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch \
>>> +        file://64bithack.patch \
>>> +        file://optional_libstdc.patch \
>>> +        file://disable_relax_pic_calls_flag.patch \
>>> +        file://gcc-poison-parameters.patch \
>>> +        file://GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch \
>>> +        file://COLLECT_GCC_OPTIONS.patch \
>>> +       "
>>> +SRC_URI_append_sh3  = " file://sh3-installfix-fixheaders.patch;patch=1
>>> "
>>> +
>>> +SRC_URI[md5sum] = "93d1c436bf991564524701259b6285a2"
>>> +SRC_URI[sha256sum] =
>>> "23bd0013d76ac6fb4537e5e8f4e5947129362dcc32f0d08563b7d4d9e44c0e17"
>>> +
>>> +
>>> +# Language Overrides
>>> +FORTRAN = ""
>>> +JAVA = ""
>>> +
>>> +#EXTRA_OECONF_BASE = "  --enable-cheaders=c_std \
>>> +#                    --enable-libssp \
>>> +#                    --disable-bootstrap \
>>> +#                    --disable-libgomp \
>>> +#                    --disable-libmudflap"
>>> +EXTRA_OECONF_BASE = " --enable-lto \
>>> +                     --enable-libssp \
>>> +                     --disable-bootstrap \
>>> +                     --disable-libgomp \
>>> +                     --disable-libmudflap \
>>> +                     --enable-cheaders=c_global "
>>> +
>>> +EXTRA_OECONF_INITIAL = "--disable-libmudflap \
>>> +                     --disable-libgomp \
>>> +                     --disable-libssp \
>>> +                     --disable-libquadmath \
>>> +                     --enable-decimal-float=no"
>>> +
>>> +EXTRA_OECONF_INTERMEDIATE = "--disable-libmudflap \
>>> +                             --disable-libgomp \
>>> +                             --disable-libquadmath \
>>> +                             --disable-libssp"
>>> +
>>> +EXTRA_OECONF_append_linux-uclibc = " --disable-decimal-float "
>>> +EXTRA_OECONF_append_linux-uclibceabi = " --disable-decimal-float "
>>> +EXTRA_OECONF_append_linux-uclibcspe = " --disable-decimal-float "
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/100-uclibc-conf.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/100-uclibc-conf.patch
>>> new file mode 100644
>>> index 0000000..313b828
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/100-uclibc-conf.patch
>>> @@ -0,0 +1,37 @@
>>> +Index: gcc-4.6.0/contrib/regression/objs-gcc.sh
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/contrib/regression/objs-gcc.sh
>>> ++++ gcc-4.6.0/contrib/regression/objs-gcc.sh
>>> +@@ -106,6 +106,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H
>>> +  then
>>> +   make all-gdb all-dejagnu all-ld || exit 1
>>> +   make install-gdb install-dejagnu install-ld || exit 1
>>> ++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-
>>> linux-uclibc ]
>>> ++ then
>>> ++  make all-gdb all-dejagnu all-ld || exit 1
>>> ++  make install-gdb install-dejagnu install-ld || exit 1
>>> + elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
>>> +   make bootstrap || exit 1
>>> +   make install || exit 1
>>> +Index: gcc-4.6.0/libjava/classpath/ltconfig
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libjava/classpath/ltconfig
>>> ++++ gcc-4.6.0/libjava/classpath/ltconfig
>>> +@@ -603,7 +603,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
>>> +
>>> + # Transform linux* to *-*-linux-gnu*, to support old configure
>>> scripts.
>>> + case $host_os in
>>> +-linux-gnu*) ;;
>>> ++linux-gnu*|linux-uclibc*) ;;
>>> + linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
>>> + esac
>>> +
>>> +@@ -1247,7 +1247,7 @@ linux-gnuoldld* | linux-gnuaout* | linux
>>> +   ;;
>>> +
>>> + # This must be Linux ELF.
>>> +-linux-gnu*)
>>> ++linux*)
>>> +   version_type=linux
>>> +   need_lib_prefix=no
>>> +   need_version=no
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/103-uclibc-conf-
>>> noupstream.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/103-uclibc-conf-
>>> noupstream.patch
>>> new file mode 100644
>>> index 0000000..b28fac2
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/103-uclibc-conf-
>>> noupstream.patch
>>> @@ -0,0 +1,15 @@
>>> +Corrects sub machine arch corectly
>>> +
>>> +Index: gcc-4.6.0/gcc/config.gcc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config.gcc
>>> ++++ gcc-4.6.0/gcc/config.gcc
>>> +@@ -2316,7 +2316,7 @@ score-*-elf)
>>> +         ;;
>>> + sh-*-elf* | sh[12346l]*-*-elf* | \
>>> + sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
>>> +-  sh-*-linux* | sh[2346lbe]*-*-linux* | \
>>> ++  sh*-*-linux* | sh[2346lbe]*-*-linux* | \
>>> +   sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-
>>> netbsd* | \
>>> +    sh64-*-netbsd* | sh64l*-*-netbsd*)
>>> +     tmake_file="${tmake_file} sh/t-sh sh/t-elf"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/200-uclibc-
>>> locale.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/200-uclibc-
>>> locale.patch
>>> new file mode 100644
>>> index 0000000..0f2caff
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/200-uclibc-locale.patch
>>> @@ -0,0 +1,2840 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/acinclude.m4
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/acinclude.m4
>>> ++++ gcc-4.6.0/libstdc++-v3/acinclude.m4
>>> +@@ -1753,7 +1753,7 @@ dnl
>>> + AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
>>> +   GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
>>> +     [use MODEL for target locale package],
>>> +-    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
>>> ++    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
>>> +
>>> +   # Deal with gettext issues.  Default to not using it (=no) until we
>>> detect
>>> +   # support for it later.  Let the user turn it off via --e/d, but
>>> let that
>>> +@@ -1774,6 +1774,9 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
>>> +   # Default to "generic".
>>> +   if test $enable_clocale_flag = auto; then
>>> +     case ${target_os} in
>>> ++      *-uclibc*)
>>> ++        enable_clocale_flag=uclibc
>>> ++        ;;
>>> +       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
>>> +     enable_clocale_flag=gnu
>>> +     ;;
>>> +@@ -1915,6 +1918,40 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
>>> +       CTIME_CC=config/locale/generic/time_members.cc
>>> +       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
>>> +       ;;
>>> ++    uclibc)
>>> ++      AC_MSG_RESULT(uclibc)
>>> ++
>>> ++      # Declare intention to use gettext, and add support for
>>> specific
>>> ++      # languages.
>>> ++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
>>> ++      ALL_LINGUAS="de fr"
>>> ++
>>> ++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
>>> ++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
>>> ++      if test x"$check_msgfmt" = x"yes"&&  test x"$enable_nls" =
>>> x"yes"; then
>>> ++        USE_NLS=yes
>>> ++      fi
>>> ++      # Export the build objects.
>>> ++      for ling in $ALL_LINGUAS; do \
>>> ++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
>>> ++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
>>> ++      done
>>> ++      AC_SUBST(glibcxx_MOFILES)
>>> ++      AC_SUBST(glibcxx_POFILES)
>>> ++
>>> ++      CLOCALE_H=config/locale/uclibc/c_locale.h
>>> ++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
>>> ++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
>>> ++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
>>> ++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
>>> ++      CMESSAGES_H=config/locale/uclibc/messages_members.h
>>> ++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
>>> ++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
>>> ++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
>>> ++      CTIME_H=config/locale/uclibc/time_members.h
>>> ++      CTIME_CC=config/locale/uclibc/time_members.cc
>>> ++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
>>> ++      ;;
>>> +   esac
>>> +
>>> +   # This is where the testsuite looks for locale catalogs, using the
>>> +Index: gcc-4.6.0/libstdc++-
>>> v3/config/locale/uclibc/c++locale_internal.h
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
>>> +@@ -0,0 +1,63 @@
>>> ++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -
>>> *-
>>> ++
>>> ++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++// Written by Jakub Jelinek<jakub at redhat.com>
>>> ++
>>> ++#include<bits/c++config.h>
>>> ++#include<clocale>
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning clean this up
>>> ++#endif
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++
>>> ++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
>>> ++extern "C" __typeof(strcoll_l) __strcoll_l;
>>> ++extern "C" __typeof(strftime_l) __strftime_l;
>>> ++extern "C" __typeof(strtod_l) __strtod_l;
>>> ++extern "C" __typeof(strtof_l) __strtof_l;
>>> ++extern "C" __typeof(strtold_l) __strtold_l;
>>> ++extern "C" __typeof(strxfrm_l) __strxfrm_l;
>>> ++extern "C" __typeof(newlocale) __newlocale;
>>> ++extern "C" __typeof(freelocale) __freelocale;
>>> ++extern "C" __typeof(duplocale) __duplocale;
>>> ++extern "C" __typeof(uselocale) __uselocale;
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++extern "C" __typeof(iswctype_l) __iswctype_l;
>>> ++extern "C" __typeof(towlower_l) __towlower_l;
>>> ++extern "C" __typeof(towupper_l) __towupper_l;
>>> ++extern "C" __typeof(wcscoll_l) __wcscoll_l;
>>> ++extern "C" __typeof(wcsftime_l) __wcsftime_l;
>>> ++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
>>> ++extern "C" __typeof(wctype_l) __wctype_l;
>>> ++#endif
>>> ++
>>> ++#endif // GLIBC 2.3 and later
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> +@@ -0,0 +1,160 @@
>>> ++// Wrapper for underlying C-language localization -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.8  Standard locale categories.
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#include<cerrno>   // For errno
>>> ++#include<locale>
>>> ++#include<stdexcept>
>>> ++#include<langinfo.h>
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifndef __UCLIBC_HAS_XLOCALE__
>>> ++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
>>> ++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
>>> ++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
>>> ++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
>>> ++#define __strtof_l(S, E, L)         strtof((S), (E))
>>> ++#define __strtod_l(S, E, L)         strtod((S), (E))
>>> ++#define __strtold_l(S, E, L)        strtold((S), (E))
>>> ++#warning should dummy __newlocale check for C|POSIX ?
>>> ++#define __newlocale(a, b, c)        NULL
>>> ++#define __freelocale(a)             ((void)0)
>>> ++#define __duplocale(a)              __c_locale()
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  template<>
>>> ++    void
>>> ++    __convert_to_v(const char* __s, float&  __v, ios_base::iostate&
>>> __err,
>>> ++               const __c_locale&  __cloc)
>>> ++    {
>>> ++      if (!(__err&  ios_base::failbit))
>>> ++    {
>>> ++      char* __sanity;
>>> ++      errno = 0;
>>> ++      float __f = __strtof_l(__s,&__sanity, __cloc);
>>> ++          if (__sanity != __s&&  errno != ERANGE)
>>> ++        __v = __f;
>>> ++      else
>>> ++        __err |= ios_base::failbit;
>>> ++    }
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    void
>>> ++    __convert_to_v(const char* __s, double&  __v, ios_base::iostate&
>>> __err,
>>> ++               const __c_locale&  __cloc)
>>> ++    {
>>> ++      if (!(__err&  ios_base::failbit))
>>> ++    {
>>> ++      char* __sanity;
>>> ++      errno = 0;
>>> ++      double __d = __strtod_l(__s,&__sanity, __cloc);
>>> ++          if (__sanity != __s&&  errno != ERANGE)
>>> ++        __v = __d;
>>> ++      else
>>> ++        __err |= ios_base::failbit;
>>> ++    }
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    void
>>> ++    __convert_to_v(const char* __s, long double&  __v,
>>> ios_base::iostate&  __err,
>>> ++               const __c_locale&  __cloc)
>>> ++    {
>>> ++      if (!(__err&  ios_base::failbit))
>>> ++    {
>>> ++      char* __sanity;
>>> ++      errno = 0;
>>> ++      long double __ld = __strtold_l(__s,&__sanity, __cloc);
>>> ++          if (__sanity != __s&&  errno != ERANGE)
>>> ++        __v = __ld;
>>> ++      else
>>> ++        __err |= ios_base::failbit;
>>> ++    }
>>> ++    }
>>> ++
>>> ++  void
>>> ++  locale::facet::_S_create_c_locale(__c_locale&  __cloc, const char*
>>> __s,
>>> ++                                __c_locale __old)
>>> ++  {
>>> ++    __cloc = __newlocale(1<<  LC_ALL, __s, __old);
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    if (!__cloc)
>>> ++      {
>>> ++    // This named locale is not supported by the underlying OS.
>>> ++    __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
>>> ++                          "name not valid"));
>>> ++      }
>>> ++#endif
>>> ++  }
>>> ++
>>> ++  void
>>> ++  locale::facet::_S_destroy_c_locale(__c_locale&  __cloc)
>>> ++  {
>>> ++    if (_S_get_c_locale() != __cloc)
>>> ++      __freelocale(__cloc);
>>> ++  }
>>> ++
>>> ++  __c_locale
>>> ++  locale::facet::_S_clone_c_locale(__c_locale&  __cloc)
>>> ++  { return __duplocale(__cloc); }
>>> ++} // namespace std
>>> ++
>>> ++namespace __gnu_cxx
>>> ++{
>>> ++  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
>>> ++    {
>>> ++      "LC_CTYPE",
>>> ++      "LC_NUMERIC",
>>> ++      "LC_TIME",
>>> ++      "LC_COLLATE",
>>> ++      "LC_MONETARY",
>>> ++      "LC_MESSAGES",
>>> ++#if _GLIBCXX_NUM_CATEGORIES != 0
>>> ++      "LC_PAPER",
>>> ++      "LC_NAME",
>>> ++      "LC_ADDRESS",
>>> ++      "LC_TELEPHONE",
>>> ++      "LC_MEASUREMENT",
>>> ++      "LC_IDENTIFICATION"
>>> ++#endif
>>> ++    };
>>> ++}
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  const char* const* const locale::_S_categories =
>>> __gnu_cxx::category_names;
>>> ++}  // namespace std
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> +@@ -0,0 +1,117 @@
>>> ++// Wrapper for underlying C-language localization -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software
>>> Foundation, Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.8  Standard locale categories.
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#ifndef _C_LOCALE_H
>>> ++#define _C_LOCALE_H 1
>>> ++
>>> ++#pragma GCC system_header
>>> ++
>>> ++#include<cstring>               // get std::strlen
>>> ++#include<cstdio>                // get std::snprintf or std::sprintf
>>> ++#include<clocale>
>>> ++#include<langinfo.h>                // For codecvt
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix this
>>> ++#endif
>>> ++#ifdef __UCLIBC_HAS_LOCALE__
>>> ++#include<iconv.h>           // For codecvt using iconv, iconv_t
>>> ++#endif
>>> ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> ++#include<libintl.h>                 // For messages
>>> ++#endif
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning what is _GLIBCXX_C_LOCALE_GNU for
>>> ++#endif
>>> ++#define _GLIBCXX_C_LOCALE_GNU 1
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix categories
>>> ++#endif
>>> ++// #define _GLIBCXX_NUM_CATEGORIES 6
>>> ++#define _GLIBCXX_NUM_CATEGORIES 0
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++namespace __gnu_cxx
>>> ++{
>>> ++  extern "C" __typeof(uselocale) __uselocale;
>>> ++}
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++  typedef __locale_t                __c_locale;
>>> ++#else
>>> ++  typedef int*                      __c_locale;
>>> ++#endif
>>> ++
>>> ++  // Convert numeric value of type _Tv to string and return length of
>>> ++  // string.  If snprintf is available use it, otherwise fall back to
>>> ++  // the unsafe sprintf which, in general, can be dangerous and
>>> should
>>> ++  // be avoided.
>>> ++  template<typename _Tv>
>>> ++    int
>>> ++    __convert_from_v(char* __out,
>>> ++                 const int __size __attribute__ ((__unused__)),
>>> ++                 const char* __fmt,
>>> ++#ifdef __UCLIBC_HAS_XCLOCALE__
>>> ++                 _Tv __v, const __c_locale&  __cloc, int __prec)
>>> ++    {
>>> ++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
>>> ++#else
>>> ++                 _Tv __v, const __c_locale&, int __prec)
>>> ++    {
>>> ++# ifdef __UCLIBC_HAS_LOCALE__
>>> ++      char* __old = std::setlocale(LC_ALL, NULL);
>>> ++      char* __sav = new char[std::strlen(__old) + 1];
>>> ++      std::strcpy(__sav, __old);
>>> ++      std::setlocale(LC_ALL, "C");
>>> ++# endif
>>> ++#endif
>>> ++
>>> ++      const int __ret = std::snprintf(__out, __size, __fmt, __prec,
>>> __v);
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XCLOCALE__
>>> ++      __gnu_cxx::__uselocale(__old);
>>> ++#elif defined __UCLIBC_HAS_LOCALE__
>>> ++      std::setlocale(LC_ALL, __sav);
>>> ++      delete [] __sav;
>>> ++#endif
>>> ++      return __ret;
>>> ++    }
>>> ++}
>>> ++
>>> ++#endif
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
>>> +@@ -0,0 +1,308 @@
>>> ++// std::codecvt implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#include<locale>
>>> ++#include<cstdlib>   // For MB_CUR_MAX
>>> ++#include<climits>   // For MB_LEN_MAX
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  // Specializations.
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  codecvt_base::result
>>> ++  codecvt<wchar_t, char, mbstate_t>::
>>> ++  do_out(state_type&  __state, const intern_type* __from,
>>> ++     const intern_type* __from_end, const intern_type*&  __from_next,
>>> ++     extern_type* __to, extern_type* __to_end,
>>> ++     extern_type*&  __to_next) const
>>> ++  {
>>> ++    result __ret = ok;
>>> ++    state_type __tmp_state(__state);
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
>>> ++#endif
>>> ++
>>> ++    // wcsnrtombs is *very* fast but stops if encounters NUL
>>> characters:
>>> ++    // in case we fall back to wcrtomb and then continue, in a loop.
>>> ++    // NB: wcsnrtombs is a GNU extension
>>> ++    for (__from_next = __from, __to_next = __to;
>>> ++     __from_next<  __from_end&&  __to_next<  __to_end
>>> ++&&  __ret == ok;)
>>> ++      {
>>> ++    const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
>>> ++                                                  __from_end - __from_next);
>>> ++    if (!__from_chunk_end)
>>> ++      __from_chunk_end = __from_end;
>>> ++
>>> ++    __from = __from_next;
>>> ++    const size_t __conv = wcsnrtombs(__to_next,&__from_next,
>>> ++                                     __from_chunk_end - __from_next,
>>> ++                                     __to_end - __to_next,&__state);
>>> ++    if (__conv == static_cast<size_t>(-1))
>>> ++      {
>>> ++        // In case of error, in order to stop at the exact place we
>>> ++        // have to start again from the beginning with a series of
>>> ++        // wcrtomb.
>>> ++        for (; __from<  __from_next; ++__from)
>>> ++          __to_next += wcrtomb(__to_next, *__from,&__tmp_state);
>>> ++        __state = __tmp_state;
>>> ++        __ret = error;
>>> ++      }
>>> ++    else if (__from_next&&  __from_next<  __from_chunk_end)
>>> ++      {
>>> ++        __to_next += __conv;
>>> ++        __ret = partial;
>>> ++      }
>>> ++    else
>>> ++      {
>>> ++        __from_next = __from_chunk_end;
>>> ++        __to_next += __conv;
>>> ++      }
>>> ++
>>> ++    if (__from_next<  __from_end&&  __ret == ok)
>>> ++      {
>>> ++        extern_type __buf[MB_LEN_MAX];
>>> ++        __tmp_state = __state;
>>> ++        const size_t __conv = wcrtomb(__buf, *__from_next,
>>> &__tmp_state);
>>> ++        if (__conv>  static_cast<size_t>(__to_end - __to_next))
>>> ++          __ret = partial;
>>> ++        else
>>> ++          {
>>> ++            memcpy(__to_next, __buf, __conv);
>>> ++            __state = __tmp_state;
>>> ++            __to_next += __conv;
>>> ++            ++__from_next;
>>> ++          }
>>> ++      }
>>> ++      }
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  codecvt_base::result
>>> ++  codecvt<wchar_t, char, mbstate_t>::
>>> ++  do_in(state_type&  __state, const extern_type* __from,
>>> ++    const extern_type* __from_end, const extern_type*&  __from_next,
>>> ++    intern_type* __to, intern_type* __to_end,
>>> ++    intern_type*&  __to_next) const
>>> ++  {
>>> ++    result __ret = ok;
>>> ++    state_type __tmp_state(__state);
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
>>> ++#endif
>>> ++
>>> ++    // mbsnrtowcs is *very* fast but stops if encounters NUL
>>> characters:
>>> ++    // in case we store a L'\0' and then continue, in a loop.
>>> ++    // NB: mbsnrtowcs is a GNU extension
>>> ++    for (__from_next = __from, __to_next = __to;
>>> ++     __from_next<  __from_end&&  __to_next<  __to_end
>>> ++&&  __ret == ok;)
>>> ++      {
>>> ++    const extern_type* __from_chunk_end;
>>> ++    __from_chunk_end = static_cast<const
>>> extern_type*>(memchr(__from_next, '\0',
>>> ++                                                              __from_end
>>> ++                                                              - __from_next));
>>> ++    if (!__from_chunk_end)
>>> ++      __from_chunk_end = __from_end;
>>> ++
>>> ++    __from = __from_next;
>>> ++    size_t __conv = mbsnrtowcs(__to_next,&__from_next,
>>> ++                               __from_chunk_end - __from_next,
>>> ++                               __to_end - __to_next,&__state);
>>> ++    if (__conv == static_cast<size_t>(-1))
>>> ++      {
>>> ++        // In case of error, in order to stop at the exact place we
>>> ++        // have to start again from the beginning with a series of
>>> ++        // mbrtowc.
>>> ++        for (;; ++__to_next, __from += __conv)
>>> ++          {
>>> ++            __conv = mbrtowc(__to_next, __from, __from_end - __from,
>>> ++&__tmp_state);
>>> ++            if (__conv == static_cast<size_t>(-1)
>>> ++                || __conv == static_cast<size_t>(-2))
>>> ++              break;
>>> ++          }
>>> ++        __from_next = __from;
>>> ++        __state = __tmp_state;
>>> ++        __ret = error;
>>> ++      }
>>> ++    else if (__from_next&&  __from_next<  __from_chunk_end)
>>> ++      {
>>> ++        // It is unclear what to return in this case (see DR 382).
>>> ++        __to_next += __conv;
>>> ++        __ret = partial;
>>> ++      }
>>> ++    else
>>> ++      {
>>> ++        __from_next = __from_chunk_end;
>>> ++        __to_next += __conv;
>>> ++      }
>>> ++
>>> ++    if (__from_next<  __from_end&&  __ret == ok)
>>> ++      {
>>> ++        if (__to_next<  __to_end)
>>> ++          {
>>> ++            // XXX Probably wrong for stateful encodings
>>> ++            __tmp_state = __state;
>>> ++            ++__from_next;
>>> ++            *__to_next++ = L'\0';
>>> ++          }
>>> ++        else
>>> ++          __ret = partial;
>>> ++      }
>>> ++      }
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  int
>>> ++  codecvt<wchar_t, char, mbstate_t>::
>>> ++  do_encoding() const throw()
>>> ++  {
>>> ++    // XXX This implementation assumes that the encoding is
>>> ++    // stateless and is either single-byte or variable-width.
>>> ++    int __ret = 0;
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
>>> ++#endif
>>> ++    if (MB_CUR_MAX == 1)
>>> ++      __ret = 1;
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  int
>>> ++  codecvt<wchar_t, char, mbstate_t>::
>>> ++  do_max_length() const throw()
>>> ++  {
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
>>> ++#endif
>>> ++    // XXX Probably wrong for stateful encodings.
>>> ++    int __ret = MB_CUR_MAX;
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  int
>>> ++  codecvt<wchar_t, char, mbstate_t>::
>>> ++  do_length(state_type&  __state, const extern_type* __from,
>>> ++        const extern_type* __end, size_t __max) const
>>> ++  {
>>> ++    int __ret = 0;
>>> ++    state_type __tmp_state(__state);
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
>>> ++#endif
>>> ++
>>> ++    // mbsnrtowcs is *very* fast but stops if encounters NUL
>>> characters:
>>> ++    // in case we advance past it and then continue, in a loop.
>>> ++    // NB: mbsnrtowcs is a GNU extension
>>> ++
>>> ++    // A dummy internal buffer is needed in order for mbsnrtocws to
>>> consider
>>> ++    // its fourth parameter (it wouldn't with NULL as first
>>> parameter).
>>> ++    wchar_t* __to =
>>> static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
>>> ++                                                       * __max));
>>> ++    while (__from<  __end&&  __max)
>>> ++      {
>>> ++    const extern_type* __from_chunk_end;
>>> ++    __from_chunk_end = static_cast<const extern_type*>(memchr(__from,
>>> '\0',
>>> ++                                                              __end
>>> ++                                                              - __from));
>>> ++    if (!__from_chunk_end)
>>> ++      __from_chunk_end = __end;
>>> ++
>>> ++    const extern_type* __tmp_from = __from;
>>> ++    size_t __conv = mbsnrtowcs(__to,&__from,
>>> ++                               __from_chunk_end - __from,
>>> ++                               __max,&__state);
>>> ++    if (__conv == static_cast<size_t>(-1))
>>> ++      {
>>> ++        // In case of error, in order to stop at the exact place we
>>> ++        // have to start again from the beginning with a series of
>>> ++        // mbrtowc.
>>> ++        for (__from = __tmp_from;; __from += __conv)
>>> ++          {
>>> ++            __conv = mbrtowc(NULL, __from, __end - __from,
>>> ++&__tmp_state);
>>> ++            if (__conv == static_cast<size_t>(-1)
>>> ++                || __conv == static_cast<size_t>(-2))
>>> ++              break;
>>> ++          }
>>> ++        __state = __tmp_state;
>>> ++        __ret += __from - __tmp_from;
>>> ++        break;
>>> ++      }
>>> ++    if (!__from)
>>> ++      __from = __from_chunk_end;
>>> ++
>>> ++    __ret += __from - __tmp_from;
>>> ++    __max -= __conv;
>>> ++
>>> ++    if (__from<  __end&&  __max)
>>> ++      {
>>> ++        // XXX Probably wrong for stateful encodings
>>> ++        __tmp_state = __state;
>>> ++        ++__from;
>>> ++        ++__ret;
>>> ++        --__max;
>>> ++      }
>>> ++      }
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++
>>> ++    return __ret;
>>> ++  }
>>> ++#endif
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
>>> +@@ -0,0 +1,80 @@
>>> ++// std::collate implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#include<locale>
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifndef __UCLIBC_HAS_XLOCALE__
>>> ++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
>>> ++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
>>> ++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
>>> ++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  // These are basically extensions to char_traits, and perhaps
>>> should
>>> ++  // be put there instead of here.
>>> ++  template<>
>>> ++    int
>>> ++    collate<char>::_M_compare(const char* __one, const char* __two)
>>> const
>>> ++    {
>>> ++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
>>> ++      return (__cmp>>  (8 * sizeof (int) - 2)) | (__cmp != 0);
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    size_t
>>> ++    collate<char>::_M_transform(char* __to, const char* __from,
>>> ++                            size_t __n) const
>>> ++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  template<>
>>> ++    int
>>> ++    collate<wchar_t>::_M_compare(const wchar_t* __one,
>>> ++                             const wchar_t* __two) const
>>> ++    {
>>> ++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
>>> ++      return (__cmp>>  (8 * sizeof (int) - 2)) | (__cmp != 0);
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    size_t
>>> ++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t*
>>> __from,
>>> ++                               size_t __n) const
>>> ++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
>>> ++#endif
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> +@@ -0,0 +1,300 @@
>>> ++// std::ctype implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation,
>>> Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#define _LIBC
>>> ++#include<locale>
>>> ++#undef _LIBC
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifndef __UCLIBC_HAS_XLOCALE__
>>> ++#define __wctype_l(S, L)           wctype((S))
>>> ++#define __towupper_l(C, L)         towupper((C))
>>> ++#define __towlower_l(C, L)         towlower((C))
>>> ++#define __iswctype_l(C, M, L)      iswctype((C), (M))
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  // NB: The other ctype<char>  specializations are in src/locale.cc
>>> and
>>> ++  // various /config/os/* files.
>>> ++  template<>
>>> ++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
>>> ++    : ctype<char>(0, false, __refs)
>>> ++    {
>>> ++      if (std::strcmp(__s, "C") != 0&&  std::strcmp(__s, "POSIX") !=
>>> 0)
>>> ++    {
>>> ++      this->_S_destroy_c_locale(this->_M_c_locale_ctype);
>>> ++      this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
>>> ++      this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
>>> ++      this->_M_table = this->_M_c_locale_ctype->__ctype_b;
>>> ++#endif
>>> ++    }
>>> ++    }
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  ctype<wchar_t>::__wmask_type
>>> ++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
>>> ++  {
>>> ++    __wmask_type __ret;
>>> ++    switch (__m)
>>> ++      {
>>> ++      case space:
>>> ++    __ret = __wctype_l("space", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case print:
>>> ++    __ret = __wctype_l("print", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case cntrl:
>>> ++    __ret = __wctype_l("cntrl", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case upper:
>>> ++    __ret = __wctype_l("upper", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case lower:
>>> ++    __ret = __wctype_l("lower", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case alpha:
>>> ++    __ret = __wctype_l("alpha", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case digit:
>>> ++    __ret = __wctype_l("digit", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case punct:
>>> ++    __ret = __wctype_l("punct", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case xdigit:
>>> ++    __ret = __wctype_l("xdigit", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case alnum:
>>> ++    __ret = __wctype_l("alnum", _M_c_locale_ctype);
>>> ++    break;
>>> ++      case graph:
>>> ++    __ret = __wctype_l("graph", _M_c_locale_ctype);
>>> ++    break;
>>> ++      default:
>>> ++    __ret = __wmask_type();
>>> ++      }
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  wchar_t
>>> ++  ctype<wchar_t>::do_toupper(wchar_t __c) const
>>> ++  { return __towupper_l(__c, _M_c_locale_ctype); }
>>> ++
>>> ++  const wchar_t*
>>> ++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi)
>>> const
>>> ++  {
>>> ++    while (__lo<  __hi)
>>> ++      {
>>> ++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
>>> ++        ++__lo;
>>> ++      }
>>> ++    return __hi;
>>> ++  }
>>> ++
>>> ++  wchar_t
>>> ++  ctype<wchar_t>::do_tolower(wchar_t __c) const
>>> ++  { return __towlower_l(__c, _M_c_locale_ctype); }
>>> ++
>>> ++  const wchar_t*
>>> ++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi)
>>> const
>>> ++  {
>>> ++    while (__lo<  __hi)
>>> ++      {
>>> ++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
>>> ++        ++__lo;
>>> ++      }
>>> ++    return __hi;
>>> ++  }
>>> ++
>>> ++  bool
>>> ++  ctype<wchar_t>::
>>> ++  do_is(mask __m, wchar_t __c) const
>>> ++  {
>>> ++    // Highest bitmask in ctype_base == 10, but extra in "C"
>>> ++    // library for blank.
>>> ++    bool __ret = false;
>>> ++    const size_t __bitmasksize = 11;
>>> ++    for (size_t __bitcur = 0; __bitcur<= __bitmasksize; ++__bitcur)
>>> ++      if (__m&  _M_bit[__bitcur]
>>> ++&&  __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
>>> ++    {
>>> ++      __ret = true;
>>> ++      break;
>>> ++    }
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  const wchar_t*
>>> ++  ctype<wchar_t>::
>>> ++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
>>> ++  {
>>> ++    for (; __lo<  __hi; ++__vec, ++__lo)
>>> ++      {
>>> ++    // Highest bitmask in ctype_base == 10, but extra in "C"
>>> ++    // library for blank.
>>> ++    const size_t __bitmasksize = 11;
>>> ++    mask __m = 0;
>>> ++    for (size_t __bitcur = 0; __bitcur<= __bitmasksize; ++__bitcur)
>>> ++      if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
>>> ++        __m |= _M_bit[__bitcur];
>>> ++    *__vec = __m;
>>> ++      }
>>> ++    return __hi;
>>> ++  }
>>> ++
>>> ++  const wchar_t*
>>> ++  ctype<wchar_t>::
>>> ++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi)
>>> const
>>> ++  {
>>> ++    while (__lo<  __hi&&  !this->do_is(__m, *__lo))
>>> ++      ++__lo;
>>> ++    return __lo;
>>> ++  }
>>> ++
>>> ++  const wchar_t*
>>> ++  ctype<wchar_t>::
>>> ++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi)
>>> const
>>> ++  {
>>> ++    while (__lo<  __hi&&  this->do_is(__m, *__lo) != 0)
>>> ++      ++__lo;
>>> ++    return __lo;
>>> ++  }
>>> ++
>>> ++  wchar_t
>>> ++  ctype<wchar_t>::
>>> ++  do_widen(char __c) const
>>> ++  { return _M_widen[static_cast<unsigned char>(__c)]; }
>>> ++
>>> ++  const char*
>>> ++  ctype<wchar_t>::
>>> ++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
>>> ++  {
>>> ++    while (__lo<  __hi)
>>> ++      {
>>> ++    *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
>>> ++    ++__lo;
>>> ++    ++__dest;
>>> ++      }
>>> ++    return __hi;
>>> ++  }
>>> ++
>>> ++  char
>>> ++  ctype<wchar_t>::
>>> ++  do_narrow(wchar_t __wc, char __dfault) const
>>> ++  {
>>> ++    if (__wc>= 0&&  __wc<  128&&  _M_narrow_ok)
>>> ++      return _M_narrow[__wc];
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_ctype);
>>> ++#endif
>>> ++    const int __c = wctob(__wc);
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++    return (__c == EOF ? __dfault : static_cast<char>(__c));
>>> ++  }
>>> ++
>>> ++  const wchar_t*
>>> ++  ctype<wchar_t>::
>>> ++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
>>> ++        char* __dest) const
>>> ++  {
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_ctype);
>>> ++#endif
>>> ++    if (_M_narrow_ok)
>>> ++      while (__lo<  __hi)
>>> ++    {
>>> ++      if (*__lo>= 0&&  *__lo<  128)
>>> ++        *__dest = _M_narrow[*__lo];
>>> ++      else
>>> ++        {
>>> ++          const int __c = wctob(*__lo);
>>> ++          *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
>>> ++        }
>>> ++      ++__lo;
>>> ++      ++__dest;
>>> ++    }
>>> ++    else
>>> ++      while (__lo<  __hi)
>>> ++    {
>>> ++      const int __c = wctob(*__lo);
>>> ++      *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
>>> ++      ++__lo;
>>> ++      ++__dest;
>>> ++    }
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++    return __hi;
>>> ++  }
>>> ++
>>> ++  void
>>> ++  ctype<wchar_t>::_M_initialize_ctype()
>>> ++  {
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __c_locale __old = __uselocale(_M_c_locale_ctype);
>>> ++#endif
>>> ++    wint_t __i;
>>> ++    for (__i = 0; __i<  128; ++__i)
>>> ++      {
>>> ++    const int __c = wctob(__i);
>>> ++    if (__c == EOF)
>>> ++      break;
>>> ++    else
>>> ++      _M_narrow[__i] = static_cast<char>(__c);
>>> ++      }
>>> ++    if (__i == 128)
>>> ++      _M_narrow_ok = true;
>>> ++    else
>>> ++      _M_narrow_ok = false;
>>> ++    for (size_t __j = 0;
>>> ++     __j<  sizeof(_M_widen) / sizeof(wint_t); ++__j)
>>> ++      _M_widen[__j] = btowc(__j);
>>> ++
>>> ++    for (size_t __k = 0; __k<= 11; ++__k)
>>> ++      {
>>> ++    _M_bit[__k] = static_cast<mask>(_ISbit(__k));
>>> ++    _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
>>> ++      }
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++    __uselocale(__old);
>>> ++#endif
>>> ++  }
>>> ++#endif //  _GLIBCXX_USE_WCHAR_T
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
>>> +@@ -0,0 +1,100 @@
>>> ++// std::messages implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#include<locale>
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix gettext stuff
>>> ++#endif
>>> ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> ++extern "C" char *__dcgettext(const char *domainname,
>>> ++                         const char *msgid, int category);
>>> ++#undef gettext
>>> ++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
>>> ++#else
>>> ++#undef gettext
>>> ++#define gettext(msgid) (msgid)
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  // Specializations.
>>> ++  template<>
>>> ++    string
>>> ++    messages<char>::do_get(catalog, int, int, const string&  __dfault)
>>> const
>>> ++    {
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __c_locale __old = __uselocale(_M_c_locale_messages);
>>> ++      const char* __msg = const_cast<const
>>> char*>(gettext(__dfault.c_str()));
>>> ++      __uselocale(__old);
>>> ++      return string(__msg);
>>> ++#elif defined __UCLIBC_HAS_LOCALE__
>>> ++      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      setlocale(LC_ALL, _M_name_messages);
>>> ++      const char* __msg = gettext(__dfault.c_str());
>>> ++      setlocale(LC_ALL, __old);
>>> ++      free(__old);
>>> ++      return string(__msg);
>>> ++#else
>>> ++      const char* __msg = gettext(__dfault.c_str());
>>> ++      return string(__msg);
>>> ++#endif
>>> ++    }
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  template<>
>>> ++    wstring
>>> ++    messages<wchar_t>::do_get(catalog, int, int, const wstring&
>>> __dfault) const
>>> ++    {
>>> ++# ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __c_locale __old = __uselocale(_M_c_locale_messages);
>>> ++      char* __msg = gettext(_M_convert_to_char(__dfault));
>>> ++      __uselocale(__old);
>>> ++      return _M_convert_from_char(__msg);
>>> ++# elif defined __UCLIBC_HAS_LOCALE__
>>> ++      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      setlocale(LC_ALL, _M_name_messages);
>>> ++      char* __msg = gettext(_M_convert_to_char(__dfault));
>>> ++      setlocale(LC_ALL, __old);
>>> ++      free(__old);
>>> ++      return _M_convert_from_char(__msg);
>>> ++# else
>>> ++      char* __msg = gettext(_M_convert_to_char(__dfault));
>>> ++      return _M_convert_from_char(__msg);
>>> ++# endif
>>> ++    }
>>> ++#endif
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +@@ -0,0 +1,118 @@
>>> ++// std::messages implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation,
>>> Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.7.1.2  messages functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix prototypes for *textdomain funcs
>>> ++#endif
>>> ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> ++extern "C" char *__textdomain(const char *domainname);
>>> ++extern "C" char *__bindtextdomain(const char *domainname,
>>> ++                              const char *dirname);
>>> ++#else
>>> ++#undef __textdomain
>>> ++#undef __bindtextdomain
>>> ++#define __textdomain(D)           ((void)0)
>>> ++#define __bindtextdomain(D,P)     ((void)0)
>>> ++#endif
>>> ++
>>> ++  // Non-virtual member functions.
>>> ++  template<typename _CharT>
>>> ++     messages<_CharT>::messages(size_t __refs)
>>> ++     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
>>> ++     _M_name_messages(_S_get_c_name())
>>> ++     { }
>>> ++
>>> ++  template<typename _CharT>
>>> ++     messages<_CharT>::messages(__c_locale __cloc, const char* __s,
>>> ++                            size_t __refs)
>>> ++     : facet(__refs),
>>> _M_c_locale_messages(_S_clone_c_locale(__cloc)),
>>> ++     _M_name_messages(__s)
>>> ++     {
>>> ++       char* __tmp = new char[std::strlen(__s) + 1];
>>> ++       std::strcpy(__tmp, __s);
>>> ++       _M_name_messages = __tmp;
>>> ++     }
>>> ++
>>> ++  template<typename _CharT>
>>> ++    typename messages<_CharT>::catalog
>>> ++    messages<_CharT>::open(const basic_string<char>&  __s, const
>>> locale&  __loc,
>>> ++                       const char* __dir) const
>>> ++    {
>>> ++      __bindtextdomain(__s.c_str(), __dir);
>>> ++      return this->do_open(__s, __loc);
>>> ++    }
>>> ++
>>> ++  // Virtual member functions.
>>> ++  template<typename _CharT>
>>> ++    messages<_CharT>::~messages()
>>> ++    {
>>> ++      if (_M_name_messages != _S_get_c_name())
>>> ++    delete [] _M_name_messages;
>>> ++      _S_destroy_c_locale(_M_c_locale_messages);
>>> ++    }
>>> ++
>>> ++  template<typename _CharT>
>>> ++    typename messages<_CharT>::catalog
>>> ++    messages<_CharT>::do_open(const basic_string<char>&  __s,
>>> ++                          const locale&) const
>>> ++    {
>>> ++      // No error checking is done, assume the catalog exists and can
>>> ++      // be used.
>>> ++      __textdomain(__s.c_str());
>>> ++      return 0;
>>> ++    }
>>> ++
>>> ++  template<typename _CharT>
>>> ++    void
>>> ++    messages<_CharT>::do_close(catalog) const
>>> ++    { }
>>> ++
>>> ++   // messages_byname
>>> ++   template<typename _CharT>
>>> ++     messages_byname<_CharT>::messages_byname(const char* __s, size_t
>>> __refs)
>>> ++     : messages<_CharT>(__refs)
>>> ++     {
>>> ++       if (this->_M_name_messages != locale::facet::_S_get_c_name())
>>> ++     delete [] this->_M_name_messages;
>>> ++       char* __tmp = new char[std::strlen(__s) + 1];
>>> ++       std::strcpy(__tmp, __s);
>>> ++       this->_M_name_messages = __tmp;
>>> ++
>>> ++       if (std::strcmp(__s, "C") != 0&&  std::strcmp(__s, "POSIX") !=
>>> 0)
>>> ++     {
>>> ++       this->_S_destroy_c_locale(this->_M_c_locale_messages);
>>> ++       this->_S_create_c_locale(this->_M_c_locale_messages, __s);
>>> ++     }
>>> ++     }
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +@@ -0,0 +1,692 @@
>>> ++// std::moneypunct implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation,
>>> Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#define _LIBC
>>> ++#include<locale>
>>> ++#undef _LIBC
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning optimize this for uclibc
>>> ++#warning tailor for stub locale support
>>> ++#endif
>>> ++
>>> ++#ifndef __UCLIBC_HAS_XLOCALE__
>>> ++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  // Construct and return valid pattern consisting of some
>>> combination of:
>>> ++  // space none symbol sign value
>>> ++  money_base::pattern
>>> ++  money_base::_S_construct_pattern(char __precedes, char __space,
>>> char __posn)
>>> ++  {
>>> ++    pattern __ret;
>>> ++
>>> ++    // This insanely complicated routine attempts to construct a
>>> valid
>>> ++    // pattern for use with monyepunct. A couple of invariants:
>>> ++
>>> ++    // if (__precedes) symbol ->  value
>>> ++    // else value ->  symbol
>>> ++
>>> ++    // if (__space) space
>>> ++    // else none
>>> ++
>>> ++    // none == never first
>>> ++    // space never first or last
>>> ++
>>> ++    // Any elegant implementations of this are welcome.
>>> ++    switch (__posn)
>>> ++      {
>>> ++      case 0:
>>> ++      case 1:
>>> ++    // 1 The sign precedes the value and symbol.
>>> ++    __ret.field[0] = sign;
>>> ++    if (__space)
>>> ++      {
>>> ++        // Pattern starts with sign.
>>> ++        if (__precedes)
>>> ++          {
>>> ++            __ret.field[1] = symbol;
>>> ++            __ret.field[3] = value;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[1] = value;
>>> ++            __ret.field[3] = symbol;
>>> ++          }
>>> ++        __ret.field[2] = space;
>>> ++      }
>>> ++    else
>>> ++      {
>>> ++        // Pattern starts with sign and ends with none.
>>> ++        if (__precedes)
>>> ++          {
>>> ++            __ret.field[1] = symbol;
>>> ++            __ret.field[2] = value;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[1] = value;
>>> ++            __ret.field[2] = symbol;
>>> ++          }
>>> ++        __ret.field[3] = none;
>>> ++      }
>>> ++    break;
>>> ++      case 2:
>>> ++    // 2 The sign follows the value and symbol.
>>> ++    if (__space)
>>> ++      {
>>> ++        // Pattern either ends with sign.
>>> ++        if (__precedes)
>>> ++          {
>>> ++            __ret.field[0] = symbol;
>>> ++            __ret.field[2] = value;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[0] = value;
>>> ++            __ret.field[2] = symbol;
>>> ++          }
>>> ++        __ret.field[1] = space;
>>> ++        __ret.field[3] = sign;
>>> ++      }
>>> ++    else
>>> ++      {
>>> ++        // Pattern ends with sign then none.
>>> ++        if (__precedes)
>>> ++          {
>>> ++            __ret.field[0] = symbol;
>>> ++            __ret.field[1] = value;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[0] = value;
>>> ++            __ret.field[1] = symbol;
>>> ++          }
>>> ++        __ret.field[2] = sign;
>>> ++        __ret.field[3] = none;
>>> ++      }
>>> ++    break;
>>> ++      case 3:
>>> ++    // 3 The sign immediately precedes the symbol.
>>> ++    if (__precedes)
>>> ++      {
>>> ++        __ret.field[0] = sign;
>>> ++        __ret.field[1] = symbol;
>>> ++        if (__space)
>>> ++          {
>>> ++            __ret.field[2] = space;
>>> ++            __ret.field[3] = value;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[2] = value;
>>> ++            __ret.field[3] = none;
>>> ++          }
>>> ++      }
>>> ++    else
>>> ++      {
>>> ++        __ret.field[0] = value;
>>> ++        if (__space)
>>> ++          {
>>> ++            __ret.field[1] = space;
>>> ++            __ret.field[2] = sign;
>>> ++            __ret.field[3] = symbol;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[1] = sign;
>>> ++            __ret.field[2] = symbol;
>>> ++            __ret.field[3] = none;
>>> ++          }
>>> ++      }
>>> ++    break;
>>> ++      case 4:
>>> ++    // 4 The sign immediately follows the symbol.
>>> ++    if (__precedes)
>>> ++      {
>>> ++        __ret.field[0] = symbol;
>>> ++        __ret.field[1] = sign;
>>> ++        if (__space)
>>> ++          {
>>> ++            __ret.field[2] = space;
>>> ++            __ret.field[3] = value;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[2] = value;
>>> ++            __ret.field[3] = none;
>>> ++          }
>>> ++      }
>>> ++    else
>>> ++      {
>>> ++        __ret.field[0] = value;
>>> ++        if (__space)
>>> ++          {
>>> ++            __ret.field[1] = space;
>>> ++            __ret.field[2] = symbol;
>>> ++            __ret.field[3] = sign;
>>> ++          }
>>> ++        else
>>> ++          {
>>> ++            __ret.field[1] = symbol;
>>> ++            __ret.field[2] = sign;
>>> ++            __ret.field[3] = none;
>>> ++          }
>>> ++      }
>>> ++    break;
>>> ++      default:
>>> ++    ;
>>> ++      }
>>> ++    return __ret;
>>> ++  }
>>> ++
>>> ++  template<>
>>> ++    void
>>> ++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale
>>> __cloc,
>>> ++                                                 const char*)
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __moneypunct_cache<char, true>;
>>> ++
>>> ++      if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_data->_M_decimal_point = '.';
>>> ++      _M_data->_M_thousands_sep = ',';
>>> ++      _M_data->_M_grouping = "";
>>> ++      _M_data->_M_grouping_size = 0;
>>> ++      _M_data->_M_curr_symbol = "";
>>> ++      _M_data->_M_curr_symbol_size = 0;
>>> ++      _M_data->_M_positive_sign = "";
>>> ++      _M_data->_M_positive_sign_size = 0;
>>> ++      _M_data->_M_negative_sign = "";
>>> ++      _M_data->_M_negative_sign_size = 0;
>>> ++      _M_data->_M_frac_digits = 0;
>>> ++      _M_data->_M_pos_format = money_base::_S_default_pattern;
>>> ++      _M_data->_M_neg_format = money_base::_S_default_pattern;
>>> ++
>>> ++      for (size_t __i = 0; __i<  money_base::_S_end; ++__i)
>>> ++        _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      // Named locale.
>>> ++      _M_data->_M_decimal_point =
>>> *(__nl_langinfo_l(__MON_DECIMAL_POINT,
>>> ++                                                    __cloc));
>>> ++      _M_data->_M_thousands_sep =
>>> *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
>>> ++                                                    __cloc));
>>> ++      _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
>>> ++      _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
>>> ++      _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN,
>>> __cloc);
>>> ++      _M_data->_M_positive_sign_size = strlen(_M_data-
>>>> _M_positive_sign);
>>> ++
>>> ++      char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
>>> ++      if (!__nposn)
>>> ++        _M_data->_M_negative_sign = "()";
>>> ++      else
>>> ++        _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
>>> ++                                                    __cloc);
>>> ++      _M_data->_M_negative_sign_size = strlen(_M_data-
>>>> _M_negative_sign);
>>> ++
>>> ++      // _Intl == true
>>> ++      _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL,
>>> __cloc);
>>> ++      _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
>>> ++      _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
>>> ++                                                  __cloc));
>>> ++      char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES,
>>> __cloc));
>>> ++      char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE,
>>> __cloc));
>>> ++      char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
>>> ++      _M_data->_M_pos_format = _S_construct_pattern(__pprecedes,
>>> __pspace,
>>> ++                                                    __pposn);
>>> ++      char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES,
>>> __cloc));
>>> ++      char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE,
>>> __cloc));
>>> ++      _M_data->_M_neg_format = _S_construct_pattern(__nprecedes,
>>> __nspace,
>>> ++                                                    __nposn);
>>> ++    }
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    void
>>> ++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale
>>> __cloc,
>>> ++                                                  const char*)
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __moneypunct_cache<char, false>;
>>> ++
>>> ++      if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_data->_M_decimal_point = '.';
>>> ++      _M_data->_M_thousands_sep = ',';
>>> ++      _M_data->_M_grouping = "";
>>> ++      _M_data->_M_grouping_size = 0;
>>> ++      _M_data->_M_curr_symbol = "";
>>> ++      _M_data->_M_curr_symbol_size = 0;
>>> ++      _M_data->_M_positive_sign = "";
>>> ++      _M_data->_M_positive_sign_size = 0;
>>> ++      _M_data->_M_negative_sign = "";
>>> ++      _M_data->_M_negative_sign_size = 0;
>>> ++      _M_data->_M_frac_digits = 0;
>>> ++      _M_data->_M_pos_format = money_base::_S_default_pattern;
>>> ++      _M_data->_M_neg_format = money_base::_S_default_pattern;
>>> ++
>>> ++      for (size_t __i = 0; __i<  money_base::_S_end; ++__i)
>>> ++        _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      // Named locale.
>>> ++      _M_data->_M_decimal_point =
>>> *(__nl_langinfo_l(__MON_DECIMAL_POINT,
>>> ++                                                    __cloc));
>>> ++      _M_data->_M_thousands_sep =
>>> *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
>>> ++                                                    __cloc));
>>> ++      _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
>>> ++      _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
>>> ++      _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN,
>>> __cloc);
>>> ++      _M_data->_M_positive_sign_size = strlen(_M_data-
>>>> _M_positive_sign);
>>> ++
>>> ++      char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
>>> ++      if (!__nposn)
>>> ++        _M_data->_M_negative_sign = "()";
>>> ++      else
>>> ++        _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
>>> ++                                                    __cloc);
>>> ++      _M_data->_M_negative_sign_size = strlen(_M_data-
>>>> _M_negative_sign);
>>> ++
>>> ++      // _Intl == false
>>> ++      _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL,
>>> __cloc);
>>> ++      _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
>>> ++      _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS,
>>> __cloc));
>>> ++      char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
>>> ++      char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
>>> ++      char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
>>> ++      _M_data->_M_pos_format = _S_construct_pattern(__pprecedes,
>>> __pspace,
>>> ++                                                    __pposn);
>>> ++      char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
>>> ++      char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
>>> ++      _M_data->_M_neg_format = _S_construct_pattern(__nprecedes,
>>> __nspace,
>>> ++                                                    __nposn);
>>> ++    }
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    moneypunct<char, true>::~moneypunct()
>>> ++    { delete _M_data; }
>>> ++
>>> ++  template<>
>>> ++    moneypunct<char, false>::~moneypunct()
>>> ++    { delete _M_data; }
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  template<>
>>> ++    void
>>> ++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale
>>> __cloc,
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++                                                    const char*)
>>> ++#else
>>> ++                                                    const char* __name)
>>> ++#endif
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __moneypunct_cache<wchar_t, true>;
>>> ++
>>> ++      if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_data->_M_decimal_point = L'.';
>>> ++      _M_data->_M_thousands_sep = L',';
>>> ++      _M_data->_M_grouping = "";
>>> ++      _M_data->_M_grouping_size = 0;
>>> ++      _M_data->_M_curr_symbol = L"";
>>> ++      _M_data->_M_curr_symbol_size = 0;
>>> ++      _M_data->_M_positive_sign = L"";
>>> ++      _M_data->_M_positive_sign_size = 0;
>>> ++      _M_data->_M_negative_sign = L"";
>>> ++      _M_data->_M_negative_sign_size = 0;
>>> ++      _M_data->_M_frac_digits = 0;
>>> ++      _M_data->_M_pos_format = money_base::_S_default_pattern;
>>> ++      _M_data->_M_neg_format = money_base::_S_default_pattern;
>>> ++
>>> ++      // Use ctype::widen code without the facet...
>>> ++      for (size_t __i = 0; __i<  money_base::_S_end; ++__i)
>>> ++        _M_data->_M_atoms[__i] =
>>> ++          static_cast<wchar_t>(money_base::_S_atoms[__i]);
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      // Named locale.
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __c_locale __old = __uselocale(__cloc);
>>> ++#else
>>> ++      // Switch to named locale so that mbsrtowcs will work.
>>> ++      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      setlocale(LC_ALL, __name);
>>> ++#endif
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix this... should be monetary
>>> ++#endif
>>> ++#ifdef __UCLIBC__
>>> ++# ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      _M_data->_M_decimal_point = __cloc->decimal_point_wc;
>>> ++      _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
>>> ++# else
>>> ++      _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
>>> ++      _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
>>> ++# endif
>>> ++#else
>>> ++      union { char *__s; wchar_t __w; } __u;
>>> ++      __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC,
>>> __cloc);
>>> ++      _M_data->_M_decimal_point = __u.__w;
>>> ++
>>> ++      __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC,
>>> __cloc);
>>> ++      _M_data->_M_thousands_sep = __u.__w;
>>> ++#endif
>>> ++      _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
>>> ++      _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
>>> ++
>>> ++      const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN,
>>> __cloc);
>>> ++      const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN,
>>> __cloc);
>>> ++      const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL,
>>> __cloc);
>>> ++
>>> ++      wchar_t* __wcs_ps = 0;
>>> ++      wchar_t* __wcs_ns = 0;
>>> ++      const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN,
>>> __cloc));
>>> ++      try
>>> ++        {
>>> ++          mbstate_t __state;
>>> ++          size_t __len = strlen(__cpossign);
>>> ++          if (__len)
>>> ++            {
>>> ++              ++__len;
>>> ++              memset(&__state, 0, sizeof(mbstate_t));
>>> ++              __wcs_ps = new wchar_t[__len];
>>> ++              mbsrtowcs(__wcs_ps,&__cpossign, __len,&__state);
>>> ++              _M_data->_M_positive_sign = __wcs_ps;
>>> ++            }
>>> ++          else
>>> ++            _M_data->_M_positive_sign = L"";
>>> ++          _M_data->_M_positive_sign_size = wcslen(_M_data-
>>>> _M_positive_sign);
>>> ++
>>> ++          __len = strlen(__cnegsign);
>>> ++          if (!__nposn)
>>> ++            _M_data->_M_negative_sign = L"()";
>>> ++          else if (__len)
>>> ++            {
>>> ++              ++__len;
>>> ++              memset(&__state, 0, sizeof(mbstate_t));
>>> ++              __wcs_ns = new wchar_t[__len];
>>> ++              mbsrtowcs(__wcs_ns,&__cnegsign, __len,&__state);
>>> ++              _M_data->_M_negative_sign = __wcs_ns;
>>> ++            }
>>> ++          else
>>> ++            _M_data->_M_negative_sign = L"";
>>> ++          _M_data->_M_negative_sign_size = wcslen(_M_data-
>>>> _M_negative_sign);
>>> ++
>>> ++          // _Intl == true.
>>> ++          __len = strlen(__ccurr);
>>> ++          if (__len)
>>> ++            {
>>> ++              ++__len;
>>> ++              memset(&__state, 0, sizeof(mbstate_t));
>>> ++              wchar_t* __wcs = new wchar_t[__len];
>>> ++              mbsrtowcs(__wcs,&__ccurr, __len,&__state);
>>> ++              _M_data->_M_curr_symbol = __wcs;
>>> ++            }
>>> ++          else
>>> ++            _M_data->_M_curr_symbol = L"";
>>> ++          _M_data->_M_curr_symbol_size = wcslen(_M_data-
>>>> _M_curr_symbol);
>>> ++        }
>>> ++      catch (...)
>>> ++        {
>>> ++          delete _M_data;
>>> ++          _M_data = 0;
>>> ++          delete __wcs_ps;
>>> ++          delete __wcs_ns;
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++          __uselocale(__old);
>>> ++#else
>>> ++          setlocale(LC_ALL, __old);
>>> ++          free(__old);
>>> ++#endif
>>> ++          __throw_exception_again;
>>> ++        }
>>> ++
>>> ++      _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
>>> ++                                                  __cloc));
>>> ++      char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES,
>>> __cloc));
>>> ++      char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE,
>>> __cloc));
>>> ++      char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
>>> ++      _M_data->_M_pos_format = _S_construct_pattern(__pprecedes,
>>> __pspace,
>>> ++                                                    __pposn);
>>> ++      char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES,
>>> __cloc));
>>> ++      char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE,
>>> __cloc));
>>> ++      _M_data->_M_neg_format = _S_construct_pattern(__nprecedes,
>>> __nspace,
>>> ++                                                    __nposn);
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __uselocale(__old);
>>> ++#else
>>> ++      setlocale(LC_ALL, __old);
>>> ++      free(__old);
>>> ++#endif
>>> ++    }
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++  void
>>> ++  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale
>>> __cloc,
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++                                                   const char*)
>>> ++#else
>>> ++                                                       const char*
>>> __name)
>>> ++#endif
>>> ++  {
>>> ++    if (!_M_data)
>>> ++      _M_data = new __moneypunct_cache<wchar_t, false>;
>>> ++
>>> ++    if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_data->_M_decimal_point = L'.';
>>> ++      _M_data->_M_thousands_sep = L',';
>>> ++      _M_data->_M_grouping = "";
>>> ++          _M_data->_M_grouping_size = 0;
>>> ++      _M_data->_M_curr_symbol = L"";
>>> ++      _M_data->_M_curr_symbol_size = 0;
>>> ++      _M_data->_M_positive_sign = L"";
>>> ++      _M_data->_M_positive_sign_size = 0;
>>> ++      _M_data->_M_negative_sign = L"";
>>> ++      _M_data->_M_negative_sign_size = 0;
>>> ++      _M_data->_M_frac_digits = 0;
>>> ++      _M_data->_M_pos_format = money_base::_S_default_pattern;
>>> ++      _M_data->_M_neg_format = money_base::_S_default_pattern;
>>> ++
>>> ++      // Use ctype::widen code without the facet...
>>> ++      for (size_t __i = 0; __i<  money_base::_S_end; ++__i)
>>> ++        _M_data->_M_atoms[__i] =
>>> ++          static_cast<wchar_t>(money_base::_S_atoms[__i]);
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      // Named locale.
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __c_locale __old = __uselocale(__cloc);
>>> ++#else
>>> ++      // Switch to named locale so that mbsrtowcs will work.
>>> ++      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      setlocale(LC_ALL, __name);
>>> ++#endif
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix this... should be monetary
>>> ++#endif
>>> ++#ifdef __UCLIBC__
>>> ++# ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      _M_data->_M_decimal_point = __cloc->decimal_point_wc;
>>> ++      _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
>>> ++# else
>>> ++      _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
>>> ++      _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
>>> ++# endif
>>> ++#else
>>> ++          union { char *__s; wchar_t __w; } __u;
>>> ++      __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC,
>>> __cloc);
>>> ++      _M_data->_M_decimal_point = __u.__w;
>>> ++
>>> ++      __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC,
>>> __cloc);
>>> ++      _M_data->_M_thousands_sep = __u.__w;
>>> ++#endif
>>> ++      _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
>>> ++          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
>>> ++
>>> ++      const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN,
>>> __cloc);
>>> ++      const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN,
>>> __cloc);
>>> ++      const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL,
>>> __cloc);
>>> ++
>>> ++      wchar_t* __wcs_ps = 0;
>>> ++      wchar_t* __wcs_ns = 0;
>>> ++      const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
>>> ++      try
>>> ++            {
>>> ++              mbstate_t __state;
>>> ++              size_t __len;
>>> ++              __len = strlen(__cpossign);
>>> ++              if (__len)
>>> ++                {
>>> ++              ++__len;
>>> ++              memset(&__state, 0, sizeof(mbstate_t));
>>> ++              __wcs_ps = new wchar_t[__len];
>>> ++              mbsrtowcs(__wcs_ps,&__cpossign, __len,&__state);
>>> ++              _M_data->_M_positive_sign = __wcs_ps;
>>> ++            }
>>> ++          else
>>> ++            _M_data->_M_positive_sign = L"";
>>> ++              _M_data->_M_positive_sign_size = wcslen(_M_data-
>>>> _M_positive_sign);
>>> ++
>>> ++          __len = strlen(__cnegsign);
>>> ++          if (!__nposn)
>>> ++            _M_data->_M_negative_sign = L"()";
>>> ++          else if (__len)
>>> ++            {
>>> ++              ++__len;
>>> ++              memset(&__state, 0, sizeof(mbstate_t));
>>> ++              __wcs_ns = new wchar_t[__len];
>>> ++              mbsrtowcs(__wcs_ns,&__cnegsign, __len,&__state);
>>> ++              _M_data->_M_negative_sign = __wcs_ns;
>>> ++            }
>>> ++          else
>>> ++            _M_data->_M_negative_sign = L"";
>>> ++              _M_data->_M_negative_sign_size = wcslen(_M_data-
>>>> _M_negative_sign);
>>> ++
>>> ++          // _Intl == true.
>>> ++          __len = strlen(__ccurr);
>>> ++          if (__len)
>>> ++            {
>>> ++              ++__len;
>>> ++              memset(&__state, 0, sizeof(mbstate_t));
>>> ++              wchar_t* __wcs = new wchar_t[__len];
>>> ++              mbsrtowcs(__wcs,&__ccurr, __len,&__state);
>>> ++              _M_data->_M_curr_symbol = __wcs;
>>> ++            }
>>> ++          else
>>> ++            _M_data->_M_curr_symbol = L"";
>>> ++              _M_data->_M_curr_symbol_size = wcslen(_M_data-
>>>> _M_curr_symbol);
>>> ++        }
>>> ++          catch (...)
>>> ++        {
>>> ++          delete _M_data;
>>> ++              _M_data = 0;
>>> ++          delete __wcs_ps;
>>> ++          delete __wcs_ns;
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++          __uselocale(__old);
>>> ++#else
>>> ++          setlocale(LC_ALL, __old);
>>> ++          free(__old);
>>> ++#endif
>>> ++              __throw_exception_again;
>>> ++        }
>>> ++
>>> ++      _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS,
>>> __cloc));
>>> ++      char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
>>> ++      char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
>>> ++      char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
>>> ++      _M_data->_M_pos_format = _S_construct_pattern(__pprecedes,
>>> __pspace,
>>> ++                                                    __pposn);
>>> ++      char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
>>> ++      char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
>>> ++      _M_data->_M_neg_format = _S_construct_pattern(__nprecedes,
>>> __nspace,
>>> ++                                                    __nposn);
>>> ++
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __uselocale(__old);
>>> ++#else
>>> ++      setlocale(LC_ALL, __old);
>>> ++      free(__old);
>>> ++#endif
>>> ++    }
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    moneypunct<wchar_t, true>::~moneypunct()
>>> ++    {
>>> ++      if (_M_data->_M_positive_sign_size)
>>> ++    delete [] _M_data->_M_positive_sign;
>>> ++      if (_M_data->_M_negative_sign_size
>>> ++&&  wcscmp(_M_data->_M_negative_sign, L"()") != 0)
>>> ++    delete [] _M_data->_M_negative_sign;
>>> ++      if (_M_data->_M_curr_symbol_size)
>>> ++    delete [] _M_data->_M_curr_symbol;
>>> ++      delete _M_data;
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    moneypunct<wchar_t, false>::~moneypunct()
>>> ++    {
>>> ++      if (_M_data->_M_positive_sign_size)
>>> ++    delete [] _M_data->_M_positive_sign;
>>> ++      if (_M_data->_M_negative_sign_size
>>> ++&&  wcscmp(_M_data->_M_negative_sign, L"()") != 0)
>>> ++    delete [] _M_data->_M_negative_sign;
>>> ++      if (_M_data->_M_curr_symbol_size)
>>> ++    delete [] _M_data->_M_curr_symbol;
>>> ++      delete _M_data;
>>> ++    }
>>> ++#endif
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +@@ -0,0 +1,160 @@
>>> ++// std::numpunct implementation details, GNU version -*- C++ -*-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation,
>>> Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#define _LIBC
>>> ++#include<locale>
>>> ++#undef _LIBC
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning tailor for stub locale support
>>> ++#endif
>>> ++#ifndef __UCLIBC_HAS_XLOCALE__
>>> ++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  template<>
>>> ++    void
>>> ++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __numpunct_cache<char>;
>>> ++
>>> ++      if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_data->_M_grouping = "";
>>> ++      _M_data->_M_grouping_size = 0;
>>> ++      _M_data->_M_use_grouping = false;
>>> ++
>>> ++      _M_data->_M_decimal_point = '.';
>>> ++      _M_data->_M_thousands_sep = ',';
>>> ++
>>> ++      for (size_t __i = 0; __i<  __num_base::_S_oend; ++__i)
>>> ++        _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
>>> ++
>>> ++      for (size_t __j = 0; __j<  __num_base::_S_iend; ++__j)
>>> ++        _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      // Named locale.
>>> ++      _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
>>> ++                                                    __cloc));
>>> ++      _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
>>> ++                                                    __cloc));
>>> ++
>>> ++      // Check for NULL, which implies no grouping.
>>> ++      if (_M_data->_M_thousands_sep == '\0')
>>> ++        _M_data->_M_grouping = "";
>>> ++      else
>>> ++        _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
>>> ++      _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
>>> ++    }
>>> ++
>>> ++      // NB: There is no way to extact this info from posix locales.
>>> ++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
>>> ++      _M_data->_M_truename = "true";
>>> ++      _M_data->_M_truename_size = 4;
>>> ++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
>>> ++      _M_data->_M_falsename = "false";
>>> ++      _M_data->_M_falsename_size = 5;
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    numpunct<char>::~numpunct()
>>> ++    { delete _M_data; }
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  template<>
>>> ++    void
>>> ++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __numpunct_cache<wchar_t>;
>>> ++
>>> ++      if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_data->_M_grouping = "";
>>> ++      _M_data->_M_grouping_size = 0;
>>> ++      _M_data->_M_use_grouping = false;
>>> ++
>>> ++      _M_data->_M_decimal_point = L'.';
>>> ++      _M_data->_M_thousands_sep = L',';
>>> ++
>>> ++      // Use ctype::widen code without the facet...
>>> ++      for (size_t __i = 0; __i<  __num_base::_S_oend; ++__i)
>>> ++        _M_data->_M_atoms_out[__i] =
>>> ++          static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
>>> ++
>>> ++      for (size_t __j = 0; __j<  __num_base::_S_iend; ++__j)
>>> ++        _M_data->_M_atoms_in[__j] =
>>> ++          static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      // Named locale.
>>> ++      // NB: In the GNU model wchar_t is always 32 bit wide.
>>> ++      union { char *__s; wchar_t __w; } __u;
>>> ++      __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC,
>>> __cloc);
>>> ++      _M_data->_M_decimal_point = __u.__w;
>>> ++
>>> ++      __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC,
>>> __cloc);
>>> ++      _M_data->_M_thousands_sep = __u.__w;
>>> ++
>>> ++      if (_M_data->_M_thousands_sep == L'\0')
>>> ++        _M_data->_M_grouping = "";
>>> ++      else
>>> ++        _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
>>> ++      _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
>>> ++    }
>>> ++
>>> ++      // NB: There is no way to extact this info from posix locales.
>>> ++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
>>> ++      _M_data->_M_truename = L"true";
>>> ++      _M_data->_M_truename_size = 4;
>>> ++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
>>> ++      _M_data->_M_falsename = L"false";
>>> ++      _M_data->_M_falsename_size = 5;
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    numpunct<wchar_t>::~numpunct()
>>> ++    { delete _M_data; }
>>> ++ #endif
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> +@@ -0,0 +1,406 @@
>>> ++// std::time_get, std::time_put implementation, GNU version -*- C++ -
>>> *-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation,
>>> Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
>>> ++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++#include<locale>
>>> ++#include<bits/c++locale_internal.h>
>>> ++
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning tailor for stub locale support
>>> ++#endif
>>> ++#ifndef __UCLIBC_HAS_XLOCALE__
>>> ++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
>>> ++#endif
>>> ++
>>> ++namespace std
>>> ++{
>>> ++  template<>
>>> ++    void
>>> ++    __timepunct<char>::
>>> ++    _M_put(char* __s, size_t __maxlen, const char* __format,
>>> ++       const tm* __tm) const
>>> ++    {
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      const size_t __len = __strftime_l(__s, __maxlen, __format,
>>> __tm,
>>> ++                                    _M_c_locale_timepunct);
>>> ++#else
>>> ++      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      setlocale(LC_ALL, _M_name_timepunct);
>>> ++      const size_t __len = strftime(__s, __maxlen, __format, __tm);
>>> ++      setlocale(LC_ALL, __old);
>>> ++      free(__old);
>>> ++#endif
>>> ++      // Make sure __s is null terminated.
>>> ++      if (__len == 0)
>>> ++    __s[0] = '\0';
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    void
>>> ++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __timepunct_cache<char>;
>>> ++
>>> ++      if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_c_locale_timepunct = _S_get_c_locale();
>>> ++
>>> ++      _M_data->_M_date_format = "%m/%d/%y";
>>> ++      _M_data->_M_date_era_format = "%m/%d/%y";
>>> ++      _M_data->_M_time_format = "%H:%M:%S";
>>> ++      _M_data->_M_time_era_format = "%H:%M:%S";
>>> ++      _M_data->_M_date_time_format = "";
>>> ++      _M_data->_M_date_time_era_format = "";
>>> ++      _M_data->_M_am = "AM";
>>> ++      _M_data->_M_pm = "PM";
>>> ++      _M_data->_M_am_pm_format = "";
>>> ++
>>> ++      // Day names, starting with "C"'s Sunday.
>>> ++      _M_data->_M_day1 = "Sunday";
>>> ++      _M_data->_M_day2 = "Monday";
>>> ++      _M_data->_M_day3 = "Tuesday";
>>> ++      _M_data->_M_day4 = "Wednesday";
>>> ++      _M_data->_M_day5 = "Thursday";
>>> ++      _M_data->_M_day6 = "Friday";
>>> ++      _M_data->_M_day7 = "Saturday";
>>> ++
>>> ++      // Abbreviated day names, starting with "C"'s Sun.
>>> ++      _M_data->_M_aday1 = "Sun";
>>> ++      _M_data->_M_aday2 = "Mon";
>>> ++      _M_data->_M_aday3 = "Tue";
>>> ++      _M_data->_M_aday4 = "Wed";
>>> ++      _M_data->_M_aday5 = "Thu";
>>> ++      _M_data->_M_aday6 = "Fri";
>>> ++      _M_data->_M_aday7 = "Sat";
>>> ++
>>> ++      // Month names, starting with "C"'s January.
>>> ++      _M_data->_M_month01 = "January";
>>> ++      _M_data->_M_month02 = "February";
>>> ++      _M_data->_M_month03 = "March";
>>> ++      _M_data->_M_month04 = "April";
>>> ++      _M_data->_M_month05 = "May";
>>> ++      _M_data->_M_month06 = "June";
>>> ++      _M_data->_M_month07 = "July";
>>> ++      _M_data->_M_month08 = "August";
>>> ++      _M_data->_M_month09 = "September";
>>> ++      _M_data->_M_month10 = "October";
>>> ++      _M_data->_M_month11 = "November";
>>> ++      _M_data->_M_month12 = "December";
>>> ++
>>> ++      // Abbreviated month names, starting with "C"'s Jan.
>>> ++      _M_data->_M_amonth01 = "Jan";
>>> ++      _M_data->_M_amonth02 = "Feb";
>>> ++      _M_data->_M_amonth03 = "Mar";
>>> ++      _M_data->_M_amonth04 = "Apr";
>>> ++      _M_data->_M_amonth05 = "May";
>>> ++      _M_data->_M_amonth06 = "Jun";
>>> ++      _M_data->_M_amonth07 = "Jul";
>>> ++      _M_data->_M_amonth08 = "Aug";
>>> ++      _M_data->_M_amonth09 = "Sep";
>>> ++      _M_data->_M_amonth10 = "Oct";
>>> ++      _M_data->_M_amonth11 = "Nov";
>>> ++      _M_data->_M_amonth12 = "Dec";
>>> ++    }
>>> ++      else
>>> ++    {
>>> ++      _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
>>> ++
>>> ++      _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
>>> ++      _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT,
>>> __cloc);
>>> ++      _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
>>> ++      _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT,
>>> __cloc);
>>> ++      _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT,
>>> __cloc);
>>> ++      _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
>>> ++                                                         __cloc);
>>> ++      _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
>>> ++      _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
>>> ++      _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
>>> ++
>>> ++      // Day names, starting with "C"'s Sunday.
>>> ++      _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
>>> ++      _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
>>> ++      _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
>>> ++      _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
>>> ++      _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
>>> ++      _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
>>> ++      _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
>>> ++
>>> ++      // Abbreviated day names, starting with "C"'s Sun.
>>> ++      _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
>>> ++      _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
>>> ++      _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
>>> ++      _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
>>> ++      _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
>>> ++      _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
>>> ++      _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
>>> ++
>>> ++      // Month names, starting with "C"'s January.
>>> ++      _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
>>> ++      _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
>>> ++      _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
>>> ++      _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
>>> ++      _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
>>> ++      _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
>>> ++      _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
>>> ++      _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
>>> ++      _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
>>> ++      _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
>>> ++      _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
>>> ++      _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
>>> ++
>>> ++      // Abbreviated month names, starting with "C"'s Jan.
>>> ++      _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
>>> ++      _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
>>> ++      _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
>>> ++      _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
>>> ++      _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
>>> ++      _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
>>> ++      _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
>>> ++      _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
>>> ++      _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
>>> ++      _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
>>> ++      _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
>>> ++      _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
>>> ++    }
>>> ++    }
>>> ++
>>> ++#ifdef _GLIBCXX_USE_WCHAR_T
>>> ++  template<>
>>> ++    void
>>> ++    __timepunct<wchar_t>::
>>> ++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
>>> ++       const tm* __tm) const
>>> ++    {
>>> ++#ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      __wcsftime_l(__s, __maxlen, __format, __tm,
>>> _M_c_locale_timepunct);
>>> ++      const size_t __len = __wcsftime_l(__s, __maxlen, __format,
>>> __tm,
>>> ++                                    _M_c_locale_timepunct);
>>> ++#else
>>> ++      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      setlocale(LC_ALL, _M_name_timepunct);
>>> ++      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
>>> ++      setlocale(LC_ALL, __old);
>>> ++      free(__old);
>>> ++#endif
>>> ++      // Make sure __s is null terminated.
>>> ++      if (__len == 0)
>>> ++    __s[0] = L'\0';
>>> ++    }
>>> ++
>>> ++  template<>
>>> ++    void
>>> ++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
>>> ++    {
>>> ++      if (!_M_data)
>>> ++    _M_data = new __timepunct_cache<wchar_t>;
>>> ++
>>> ++#warning wide time stuff
>>> ++//       if (!__cloc)
>>> ++    {
>>> ++      // "C" locale
>>> ++      _M_c_locale_timepunct = _S_get_c_locale();
>>> ++
>>> ++      _M_data->_M_date_format = L"%m/%d/%y";
>>> ++      _M_data->_M_date_era_format = L"%m/%d/%y";
>>> ++      _M_data->_M_time_format = L"%H:%M:%S";
>>> ++      _M_data->_M_time_era_format = L"%H:%M:%S";
>>> ++      _M_data->_M_date_time_format = L"";
>>> ++      _M_data->_M_date_time_era_format = L"";
>>> ++      _M_data->_M_am = L"AM";
>>> ++      _M_data->_M_pm = L"PM";
>>> ++      _M_data->_M_am_pm_format = L"";
>>> ++
>>> ++      // Day names, starting with "C"'s Sunday.
>>> ++      _M_data->_M_day1 = L"Sunday";
>>> ++      _M_data->_M_day2 = L"Monday";
>>> ++      _M_data->_M_day3 = L"Tuesday";
>>> ++      _M_data->_M_day4 = L"Wednesday";
>>> ++      _M_data->_M_day5 = L"Thursday";
>>> ++      _M_data->_M_day6 = L"Friday";
>>> ++      _M_data->_M_day7 = L"Saturday";
>>> ++
>>> ++      // Abbreviated day names, starting with "C"'s Sun.
>>> ++      _M_data->_M_aday1 = L"Sun";
>>> ++      _M_data->_M_aday2 = L"Mon";
>>> ++      _M_data->_M_aday3 = L"Tue";
>>> ++      _M_data->_M_aday4 = L"Wed";
>>> ++      _M_data->_M_aday5 = L"Thu";
>>> ++      _M_data->_M_aday6 = L"Fri";
>>> ++      _M_data->_M_aday7 = L"Sat";
>>> ++
>>> ++      // Month names, starting with "C"'s January.
>>> ++      _M_data->_M_month01 = L"January";
>>> ++      _M_data->_M_month02 = L"February";
>>> ++      _M_data->_M_month03 = L"March";
>>> ++      _M_data->_M_month04 = L"April";
>>> ++      _M_data->_M_month05 = L"May";
>>> ++      _M_data->_M_month06 = L"June";
>>> ++      _M_data->_M_month07 = L"July";
>>> ++      _M_data->_M_month08 = L"August";
>>> ++      _M_data->_M_month09 = L"September";
>>> ++      _M_data->_M_month10 = L"October";
>>> ++      _M_data->_M_month11 = L"November";
>>> ++      _M_data->_M_month12 = L"December";
>>> ++
>>> ++      // Abbreviated month names, starting with "C"'s Jan.
>>> ++      _M_data->_M_amonth01 = L"Jan";
>>> ++      _M_data->_M_amonth02 = L"Feb";
>>> ++      _M_data->_M_amonth03 = L"Mar";
>>> ++      _M_data->_M_amonth04 = L"Apr";
>>> ++      _M_data->_M_amonth05 = L"May";
>>> ++      _M_data->_M_amonth06 = L"Jun";
>>> ++      _M_data->_M_amonth07 = L"Jul";
>>> ++      _M_data->_M_amonth08 = L"Aug";
>>> ++      _M_data->_M_amonth09 = L"Sep";
>>> ++      _M_data->_M_amonth10 = L"Oct";
>>> ++      _M_data->_M_amonth11 = L"Nov";
>>> ++      _M_data->_M_amonth12 = L"Dec";
>>> ++    }
>>> ++#if 0
>>> ++      else
>>> ++    {
>>> ++      _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
>>> ++
>>> ++      union { char *__s; wchar_t *__w; } __u;
>>> ++
>>> ++      __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
>>> ++      _M_data->_M_date_format = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
>>> ++      _M_data->_M_date_era_format = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
>>> ++      _M_data->_M_time_format = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
>>> ++      _M_data->_M_time_era_format = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
>>> ++      _M_data->_M_date_time_format = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
>>> ++      _M_data->_M_date_time_era_format = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
>>> ++      _M_data->_M_am = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
>>> ++      _M_data->_M_pm = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
>>> ++      _M_data->_M_am_pm_format = __u.__w;
>>> ++
>>> ++      // Day names, starting with "C"'s Sunday.
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
>>> ++      _M_data->_M_day1 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
>>> ++      _M_data->_M_day2 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
>>> ++      _M_data->_M_day3 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
>>> ++      _M_data->_M_day4 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
>>> ++      _M_data->_M_day5 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
>>> ++      _M_data->_M_day6 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
>>> ++      _M_data->_M_day7 = __u.__w;
>>> ++
>>> ++      // Abbreviated day names, starting with "C"'s Sun.
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
>>> ++      _M_data->_M_aday1 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
>>> ++      _M_data->_M_aday2 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
>>> ++      _M_data->_M_aday3 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
>>> ++      _M_data->_M_aday4 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
>>> ++      _M_data->_M_aday5 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
>>> ++      _M_data->_M_aday6 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
>>> ++      _M_data->_M_aday7 = __u.__w;
>>> ++
>>> ++      // Month names, starting with "C"'s January.
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
>>> ++      _M_data->_M_month01 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
>>> ++      _M_data->_M_month02 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
>>> ++      _M_data->_M_month03 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
>>> ++      _M_data->_M_month04 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
>>> ++      _M_data->_M_month05 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
>>> ++      _M_data->_M_month06 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
>>> ++      _M_data->_M_month07 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
>>> ++      _M_data->_M_month08 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
>>> ++      _M_data->_M_month09 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
>>> ++      _M_data->_M_month10 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
>>> ++      _M_data->_M_month11 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
>>> ++      _M_data->_M_month12 = __u.__w;
>>> ++
>>> ++      // Abbreviated month names, starting with "C"'s Jan.
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
>>> ++      _M_data->_M_amonth01 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
>>> ++      _M_data->_M_amonth02 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
>>> ++      _M_data->_M_amonth03 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
>>> ++      _M_data->_M_amonth04 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
>>> ++      _M_data->_M_amonth05 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
>>> ++      _M_data->_M_amonth06 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
>>> ++      _M_data->_M_amonth07 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
>>> ++      _M_data->_M_amonth08 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
>>> ++      _M_data->_M_amonth09 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
>>> ++      _M_data->_M_amonth10 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
>>> ++      _M_data->_M_amonth11 = __u.__w;
>>> ++      __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
>>> ++      _M_data->_M_amonth12 = __u.__w;
>>> ++    }
>>> ++#endif // 0
>>> ++    }
>>> ++#endif
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
>>> +===================================================================
>>> +--- /dev/null
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
>>> +@@ -0,0 +1,68 @@
>>> ++// std::time_get, std::time_put implementation, GNU version -*- C++ -
>>> *-
>>> ++
>>> ++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation,
>>> Inc.
>>> ++//
>>> ++// This file is part of the GNU ISO C++ Library.  This library is
>>> free
>>> ++// software; you can redistribute it and/or modify it under the
>>> ++// terms of the GNU General Public License as published by the
>>> ++// Free Software Foundation; either version 2, or (at your option)
>>> ++// any later version.
>>> ++
>>> ++// This library is distributed in the hope that it will be useful,
>>> ++// but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> ++// GNU General Public License for more details.
>>> ++
>>> ++// You should have received a copy of the GNU General Public License
>>> along
>>> ++// with this library; see the file COPYING.  If not, write to the
>>> Free
>>> ++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA
>>> 02111-1307,
>>> ++// USA.
>>> ++
>>> ++// As a special exception, you may use this file as part of a free
>>> software
>>> ++// library without restriction.  Specifically, if other files
>>> instantiate
>>> ++// templates or use macros or inline functions from this file, or you
>>> compile
>>> ++// this file and link it with other files to produce an executable,
>>> this
>>> ++// file does not by itself cause the resulting executable to be
>>> covered by
>>> ++// the GNU General Public License.  This exception does not however
>>> ++// invalidate any other reasons why the executable file might be
>>> covered by
>>> ++// the GNU General Public License.
>>> ++
>>> ++//
>>> ++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
>>> ++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
>>> ++//
>>> ++
>>> ++// Written by Benjamin Kosnik<bkoz at redhat.com>
>>> ++
>>> ++  template<typename _CharT>
>>> ++    __timepunct<_CharT>::__timepunct(size_t __refs)
>>> ++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
>>> ++    _M_name_timepunct(_S_get_c_name())
>>> ++    { _M_initialize_timepunct(); }
>>> ++
>>> ++  template<typename _CharT>
>>> ++    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t
>>> __refs)
>>> ++    : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
>>> ++    _M_name_timepunct(_S_get_c_name())
>>> ++    { _M_initialize_timepunct(); }
>>> ++
>>> ++  template<typename _CharT>
>>> ++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char*
>>> __s,
>>> ++                                 size_t __refs)
>>> ++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
>>> ++    _M_name_timepunct(__s)
>>> ++    {
>>> ++      char* __tmp = new char[std::strlen(__s) + 1];
>>> ++      std::strcpy(__tmp, __s);
>>> ++      _M_name_timepunct = __tmp;
>>> ++      _M_initialize_timepunct(__cloc);
>>> ++    }
>>> ++
>>> ++  template<typename _CharT>
>>> ++    __timepunct<_CharT>::~__timepunct()
>>> ++    {
>>> ++      if (_M_name_timepunct != _S_get_c_name())
>>> ++    delete [] _M_name_timepunct;
>>> ++      delete _M_data;
>>> ++      _S_destroy_c_locale(_M_c_locale_timepunct);
>>> ++    }
>>> +Index: gcc-4.6.0/libstdc++-v3/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/configure
>>> ++++ gcc-4.6.0/libstdc++-v3/configure
>>> +@@ -15642,7 +15642,7 @@ $as_echo "stdio">&6; }
>>> + if test "${enable_clocale+set}" = set; then :
>>> +   enableval=$enable_clocale;
>>> +       case "$enableval" in
>>> +-       generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
>>> ++       generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
>>> +        *) as_fn_error "Unknown argument to enable/disable clocale"
>>> "$LINENO" 5 ;;
>>> +                     esac
>>> +
>>> +@@ -15674,6 +15674,9 @@ fi
>>> +   # Default to "generic".
>>> +   if test $enable_clocale_flag = auto; then
>>> +     case ${target_os} in
>>> ++      *-uclibc*)
>>> ++        enable_clocale_flag=uclibc
>>> ++        ;;
>>> +       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
>>> +     enable_clocale_flag=gnu
>>> +     ;;
>>> +@@ -15907,6 +15910,76 @@ $as_echo "IEEE 1003.1">&6; }
>>> +       CTIME_CC=config/locale/generic/time_members.cc
>>> +       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
>>> +       ;;
>>> ++    uclibc)
>>> ++      echo "$as_me:$LINENO: result: uclibc">&5
>>> ++echo "${ECHO_T}uclibc">&6
>>> ++
>>> ++      # Declare intention to use gettext, and add support for
>>> specific
>>> ++      # languages.
>>> ++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
>>> ++      ALL_LINGUAS="de fr"
>>> ++
>>> ++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
>>> ++      # Extract the first word of "msgfmt", so it can be a program
>>> name with args.
>>> ++set dummy msgfmt; ac_word=$2
>>> ++echo "$as_me:$LINENO: checking for $ac_word">&5
>>> ++echo $ECHO_N "checking for $ac_word... $ECHO_C">&6
>>> ++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
>>> ++  echo $ECHO_N "(cached) $ECHO_C">&6
>>> ++else
>>> ++  if test -n "$check_msgfmt"; then
>>> ++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the
>>> test.
>>> ++else
>>> ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
>>> ++for as_dir in $PATH
>>> ++do
>>> ++  IFS=$as_save_IFS
>>> ++  test -z "$as_dir"&&  as_dir=.
>>> ++  for ac_exec_ext in '' $ac_executable_extensions; do
>>> ++  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
>>> ++    ac_cv_prog_check_msgfmt="yes"
>>> ++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext">&5
>>> ++    break 2
>>> ++  fi
>>> ++done
>>> ++done
>>> ++
>>> ++  test -z "$ac_cv_prog_check_msgfmt"&&  ac_cv_prog_check_msgfmt="no"
>>> ++fi
>>> ++fi
>>> ++check_msgfmt=$ac_cv_prog_check_msgfmt
>>> ++if test -n "$check_msgfmt"; then
>>> ++  echo "$as_me:$LINENO: result: $check_msgfmt">&5
>>> ++echo "${ECHO_T}$check_msgfmt">&6
>>> ++else
>>> ++  echo "$as_me:$LINENO: result: no">&5
>>> ++echo "${ECHO_T}no">&6
>>> ++fi
>>> ++
>>> ++      if test x"$check_msgfmt" = x"yes"&&  test x"$enable_nls" =
>>> x"yes"; then
>>> ++        USE_NLS=yes
>>> ++      fi
>>> ++      # Export the build objects.
>>> ++      for ling in $ALL_LINGUAS; do \
>>> ++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
>>> ++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
>>> ++      done
>>> ++
>>> ++
>>> ++
>>> ++      CLOCALE_H=config/locale/uclibc/c_locale.h
>>> ++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
>>> ++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
>>> ++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
>>> ++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
>>> ++      CMESSAGES_H=config/locale/uclibc/messages_members.h
>>> ++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
>>> ++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
>>> ++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
>>> ++      CTIME_H=config/locale/uclibc/time_members.h
>>> ++      CTIME_CC=config/locale/uclibc/time_members.cc
>>> ++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
>>> ++      ;;
>>> +   esac
>>> +
>>> +   # This is where the testsuite looks for locale catalogs, using the
>>> +@@ -16957,6 +17030,7 @@ rm -f core conftest.err conftest.$ac_obj
>>> +
>>> +     cat confdefs.h -<<_ACEOF>conftest.$ac_ext
>>> + /* end confdefs.h.  */
>>> ++#line 17016 "configure"
>>> + #include<wctype.h>
>>> + int
>>> + main ()
>>> +@@ -64172,7 +64246,6 @@ $as_echo_n "checking for shared libgcc..
>>> + fi
>>> + cat confdefs.h -<<_ACEOF>conftest.$ac_ext
>>> + /* end confdefs.h.  */
>>> +-
>>> + int
>>> + main ()
>>> + {
>>> +Index: gcc-4.6.0/libstdc++-v3/include/c_compatibility/wchar.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/include/c_compatibility/wchar.h
>>> ++++ gcc-4.6.0/libstdc++-v3/include/c_compatibility/wchar.h
>>> +@@ -101,7 +101,9 @@ using std::wmemcmp;
>>> + using std::wmemcpy;
>>> + using std::wmemmove;
>>> + using std::wmemset;
>>> ++#if _GLIBCXX_HAVE_WCSFTIME
>>> + using std::wcsftime;
>>> ++#endif
>>> +
>>> + #if _GLIBCXX_USE_C99
>>> + using std::wcstold;
>>> +Index: gcc-4.6.0/libstdc++-v3/include/c_std/cwchar
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/include/c_std/cwchar
>>> ++++ gcc-4.6.0/libstdc++-v3/include/c_std/cwchar
>>> +@@ -177,7 +177,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> +   using ::wcscoll;
>>> +   using ::wcscpy;
>>> +   using ::wcscspn;
>>> ++#if _GLIBCXX_HAVE_WCSFTIME
>>> +   using ::wcsftime;
>>> ++#endif
>>> +   using ::wcslen;
>>> +   using ::wcsncat;
>>> +   using ::wcsncmp;
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/203-uclibc-locale-
>>> no__x.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/203-uclibc-locale-
>>> no__x.patch
>>> new file mode 100644
>>> index 0000000..78743c6
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/203-uclibc-locale-no__x.patch
>>> @@ -0,0 +1,233 @@
>>> +Index: gcc-4.6.0/libstdc++-
>>> v3/config/locale/uclibc/c++locale_internal.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/c++locale_internal.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
>>> +@@ -60,4 +60,49 @@ extern "C" __typeof(wcsxfrm_l) __wcsxfrm
>>> + extern "C" __typeof(wctype_l) __wctype_l;
>>> + #endif
>>> +
>>> ++# define __nl_langinfo_l nl_langinfo_l
>>> ++# define __strcoll_l strcoll_l
>>> ++# define __strftime_l strftime_l
>>> ++# define __strtod_l strtod_l
>>> ++# define __strtof_l strtof_l
>>> ++# define __strtold_l strtold_l
>>> ++# define __strxfrm_l strxfrm_l
>>> ++# define __newlocale newlocale
>>> ++# define __freelocale freelocale
>>> ++# define __duplocale duplocale
>>> ++# define __uselocale uselocale
>>> ++
>>> ++# ifdef _GLIBCXX_USE_WCHAR_T
>>> ++#  define __iswctype_l iswctype_l
>>> ++#  define __towlower_l towlower_l
>>> ++#  define __towupper_l towupper_l
>>> ++#  define __wcscoll_l wcscoll_l
>>> ++#  define __wcsftime_l wcsftime_l
>>> ++#  define __wcsxfrm_l wcsxfrm_l
>>> ++#  define __wctype_l wctype_l
>>> ++# endif
>>> ++
>>> ++#else
>>> ++# define __nl_langinfo_l(N, L)       nl_langinfo((N))
>>> ++# define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
>>> ++# define __strtod_l(S, E, L)         strtod((S), (E))
>>> ++# define __strtof_l(S, E, L)         strtof((S), (E))
>>> ++# define __strtold_l(S, E, L)        strtold((S), (E))
>>> ++# define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
>>> ++# warning should dummy __newlocale check for C|POSIX ?
>>> ++# define __newlocale(a, b, c)        NULL
>>> ++# define __freelocale(a)             ((void)0)
>>> ++# define __duplocale(a)              __c_locale()
>>> ++//# define __uselocale ?
>>> ++//
>>> ++# ifdef _GLIBCXX_USE_WCHAR_T
>>> ++#  define __iswctype_l(C, M, L)       iswctype((C), (M))
>>> ++#  define __towlower_l(C, L)          towlower((C))
>>> ++#  define __towupper_l(C, L)          towupper((C))
>>> ++#  define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
>>> ++//#  define __wcsftime_l(S, M, F, T, L)  wcsftime((S), (M), (F), (T))
>>> ++#  define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
>>> ++#  define __wctype_l(S, L)            wctype((S))
>>> ++# endif
>>> ++
>>> + #endif // GLIBC 2.3 and later
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> +@@ -39,20 +39,6 @@
>>> + #include<langinfo.h>
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> +-#ifndef __UCLIBC_HAS_XLOCALE__
>>> +-#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
>>> +-#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
>>> +-#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
>>> +-#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
>>> +-#define __strtof_l(S, E, L)         strtof((S), (E))
>>> +-#define __strtod_l(S, E, L)         strtod((S), (E))
>>> +-#define __strtold_l(S, E, L)        strtold((S), (E))
>>> +-#warning should dummy __newlocale check for C|POSIX ?
>>> +-#define __newlocale(a, b, c)        NULL
>>> +-#define __freelocale(a)             ((void)0)
>>> +-#define __duplocale(a)              __c_locale()
>>> +-#endif
>>> +-
>>> + namespace std
>>> + {
>>> +   template<>
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/collate_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
>>> +@@ -36,13 +36,6 @@
>>> + #include<locale>
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> +-#ifndef __UCLIBC_HAS_XLOCALE__
>>> +-#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
>>> +-#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
>>> +-#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
>>> +-#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
>>> +-#endif
>>> +-
>>> + namespace std
>>> + {
>>> +   // These are basically extensions to char_traits, and perhaps
>>> should
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/monetary_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +@@ -43,10 +43,6 @@
>>> + #warning tailor for stub locale support
>>> + #endif
>>> +
>>> +-#ifndef __UCLIBC_HAS_XLOCALE__
>>> +-#define __nl_langinfo_l(N, L)         nl_langinfo((N))
>>> +-#endif
>>> +-
>>> + namespace std
>>> + {
>>> +   // Construct and return valid pattern consisting of some
>>> combination of:
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/numeric_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +@@ -41,9 +41,6 @@
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning tailor for stub locale support
>>> + #endif
>>> +-#ifndef __UCLIBC_HAS_XLOCALE__
>>> +-#define __nl_langinfo_l(N, L)         nl_langinfo((N))
>>> +-#endif
>>> +
>>> + namespace std
>>> + {
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> +@@ -40,9 +40,6 @@
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning tailor for stub locale support
>>> + #endif
>>> +-#ifndef __UCLIBC_HAS_XLOCALE__
>>> +-#define __nl_langinfo_l(N, L)         nl_langinfo((N))
>>> +-#endif
>>> +
>>> + namespace std
>>> + {
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> +@@ -38,13 +38,6 @@
>>> + #undef _LIBC
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> +-#ifndef __UCLIBC_HAS_XLOCALE__
>>> +-#define __wctype_l(S, L)           wctype((S))
>>> +-#define __towupper_l(C, L)         towupper((C))
>>> +-#define __towlower_l(C, L)         towlower((C))
>>> +-#define __iswctype_l(C, M, L)      iswctype((C), (M))
>>> +-#endif
>>> +-
>>> + namespace std
>>> + {
>>> +   // NB: The other ctype<char>  specializations are in src/locale.cc
>>> and
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/messages_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
>>> +@@ -39,13 +39,10 @@
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning fix gettext stuff
>>> + #endif
>>> +-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> +-extern "C" char *__dcgettext(const char *domainname,
>>> +-                         const char *msgid, int category);
>>> + #undef gettext
>>> +-#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
>>> ++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> ++#define gettext(msgid) dcgettext(NULL, msgid, LC_MESSAGES)
>>> + #else
>>> +-#undef gettext
>>> + #define gettext(msgid) (msgid)
>>> + #endif
>>> +
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/messages_members.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +@@ -36,15 +36,11 @@
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning fix prototypes for *textdomain funcs
>>> + #endif
>>> +-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> +-extern "C" char *__textdomain(const char *domainname);
>>> +-extern "C" char *__bindtextdomain(const char *domainname,
>>> +-                              const char *dirname);
>>> +-#else
>>> +-#undef __textdomain
>>> +-#undef __bindtextdomain
>>> +-#define __textdomain(D)           ((void)0)
>>> +-#define __bindtextdomain(D,P)     ((void)0)
>>> ++#ifndef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> ++#undef textdomain
>>> ++#undef bindtextdomain
>>> ++#define textdomain(D)           ((void)0)
>>> ++#define bindtextdomain(D,P)     ((void)0)
>>> + #endif
>>> +
>>> +   // Non-virtual member functions.
>>> +@@ -70,7 +66,7 @@ extern "C" char *__bindtextdomain(const
>>> +     messages<_CharT>::open(const basic_string<char>&  __s, const
>>> locale&  __loc,
>>> +                        const char* __dir) const
>>> +     {
>>> +-      __bindtextdomain(__s.c_str(), __dir);
>>> ++      bindtextdomain(__s.c_str(), __dir);
>>> +       return this->do_open(__s, __loc);
>>> +     }
>>> +
>>> +@@ -90,7 +86,7 @@ extern "C" char *__bindtextdomain(const
>>> +     {
>>> +       // No error checking is done, assume the catalog exists and can
>>> +       // be used.
>>> +-      __textdomain(__s.c_str());
>>> ++      textdomain(__s.c_str());
>>> +       return 0;
>>> +     }
>>> +
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> +@@ -68,6 +68,7 @@ namespace __gnu_cxx
>>> + {
>>> +   extern "C" __typeof(uselocale) __uselocale;
>>> + }
>>> ++#define __uselocale uselocale
>>> + #endif
>>> +
>>> + namespace std
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/204-uclibc-locale-
>>> wchar_fix.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/204-uclibc-
>>> locale-wchar_fix.patch
>>> new file mode 100644
>>> index 0000000..2d8d70a
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/204-uclibc-locale-
>>> wchar_fix.patch
>>> @@ -0,0 +1,52 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/monetary_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +@@ -401,7 +401,7 @@ namespace std
>>> + # ifdef __UCLIBC_HAS_XLOCALE__
>>> +       _M_data->_M_decimal_point = __cloc->decimal_point_wc;
>>> +       _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
>>> +-# else
>>> ++# elif defined __UCLIBC_HAS_LOCALE__
>>> +       _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
>>> +       _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
>>> + # endif
>>> +@@ -556,7 +556,7 @@ namespace std
>>> + # ifdef __UCLIBC_HAS_XLOCALE__
>>> +       _M_data->_M_decimal_point = __cloc->decimal_point_wc;
>>> +       _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
>>> +-# else
>>> ++# elif defined __UCLIBC_HAS_LOCALE__
>>> +       _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
>>> +       _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
>>> + # endif
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/numeric_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +@@ -127,12 +127,25 @@ namespace std
>>> +     {
>>> +       // Named locale.
>>> +       // NB: In the GNU model wchar_t is always 32 bit wide.
>>> ++#ifdef __UCLIBC_MJN3_ONLY__
>>> ++#warning fix this... should be numeric
>>> ++#endif
>>> ++#ifdef __UCLIBC__
>>> ++# ifdef __UCLIBC_HAS_XLOCALE__
>>> ++      _M_data->_M_decimal_point = __cloc->decimal_point_wc;
>>> ++      _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
>>> ++# elif defined __UCLIBC_HAS_LOCALE__
>>> ++      _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
>>> ++      _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
>>> ++# endif
>>> ++#else
>>> +       union { char *__s; wchar_t __w; } __u;
>>> +       __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC,
>>> __cloc);
>>> +       _M_data->_M_decimal_point = __u.__w;
>>> +
>>> +       __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC,
>>> __cloc);
>>> +       _M_data->_M_thousands_sep = __u.__w;
>>> ++#endif
>>> +
>>> +       if (_M_data->_M_thousands_sep == L'\0')
>>> +         _M_data->_M_grouping = "";
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/205-uclibc-locale-
>>> update.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/205-uclibc-locale-
>>> update.patch
>>> new file mode 100644
>>> index 0000000..911ad51
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/205-uclibc-locale-
>>> update.patch
>>> @@ -0,0 +1,519 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
>>> +@@ -39,23 +39,20 @@
>>> + #include<langinfo.h>
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> +-namespace std
>>> +-{
>>> ++_GLIBCXX_BEGIN_NAMESPACE(std)
>>> ++
>>> +   template<>
>>> +     void
>>> +     __convert_to_v(const char* __s, float&  __v, ios_base::iostate&
>>> __err,
>>> +                const __c_locale&  __cloc)
>>> +     {
>>> +-      if (!(__err&  ios_base::failbit))
>>> +-    {
>>> +-      char* __sanity;
>>> +-      errno = 0;
>>> +-      float __f = __strtof_l(__s,&__sanity, __cloc);
>>> +-          if (__sanity != __s&&  errno != ERANGE)
>>> +-        __v = __f;
>>> +-      else
>>> +-        __err |= ios_base::failbit;
>>> +-    }
>>> ++      char* __sanity;
>>> ++      errno = 0;
>>> ++      float __f = __strtof_l(__s,&__sanity, __cloc);
>>> ++      if (__sanity != __s&&  errno != ERANGE)
>>> ++    __v = __f;
>>> ++      else
>>> ++    __err |= ios_base::failbit;
>>> +     }
>>> +
>>> +   template<>
>>> +@@ -63,16 +60,13 @@ namespace std
>>> +     __convert_to_v(const char* __s, double&  __v, ios_base::iostate&
>>> __err,
>>> +                const __c_locale&  __cloc)
>>> +     {
>>> +-      if (!(__err&  ios_base::failbit))
>>> +-    {
>>> +-      char* __sanity;
>>> +-      errno = 0;
>>> +-      double __d = __strtod_l(__s,&__sanity, __cloc);
>>> +-          if (__sanity != __s&&  errno != ERANGE)
>>> +-        __v = __d;
>>> +-      else
>>> +-        __err |= ios_base::failbit;
>>> +-    }
>>> ++      char* __sanity;
>>> ++      errno = 0;
>>> ++      double __d = __strtod_l(__s,&__sanity, __cloc);
>>> ++      if (__sanity != __s&&  errno != ERANGE)
>>> ++    __v = __d;
>>> ++      else
>>> ++    __err |= ios_base::failbit;
>>> +     }
>>> +
>>> +   template<>
>>> +@@ -80,16 +74,13 @@ namespace std
>>> +     __convert_to_v(const char* __s, long double&  __v,
>>> ios_base::iostate&  __err,
>>> +                const __c_locale&  __cloc)
>>> +     {
>>> +-      if (!(__err&  ios_base::failbit))
>>> +-    {
>>> +-      char* __sanity;
>>> +-      errno = 0;
>>> +-      long double __ld = __strtold_l(__s,&__sanity, __cloc);
>>> +-          if (__sanity != __s&&  errno != ERANGE)
>>> +-        __v = __ld;
>>> +-      else
>>> +-        __err |= ios_base::failbit;
>>> +-    }
>>> ++      char* __sanity;
>>> ++      errno = 0;
>>> ++      long double __ld = __strtold_l(__s,&__sanity, __cloc);
>>> ++      if (__sanity != __s&&  errno != ERANGE)
>>> ++    __v = __ld;
>>> ++      else
>>> ++    __err |= ios_base::failbit;
>>> +     }
>>> +
>>> +   void
>>> +@@ -110,17 +101,18 @@ namespace std
>>> +   void
>>> +   locale::facet::_S_destroy_c_locale(__c_locale&  __cloc)
>>> +   {
>>> +-    if (_S_get_c_locale() != __cloc)
>>> ++    if (__cloc&&  _S_get_c_locale() != __cloc)
>>> +       __freelocale(__cloc);
>>> +   }
>>> +
>>> +   __c_locale
>>> +   locale::facet::_S_clone_c_locale(__c_locale&  __cloc)
>>> +   { return __duplocale(__cloc); }
>>> +-} // namespace std
>>> +
>>> +-namespace __gnu_cxx
>>> +-{
>>> ++_GLIBCXX_END_NAMESPACE
>>> ++
>>> ++_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
>>> ++
>>> +   const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
>>> +     {
>>> +       "LC_CTYPE",
>>> +@@ -138,9 +130,11 @@ namespace __gnu_cxx
>>> +       "LC_IDENTIFICATION"
>>> + #endif
>>> +     };
>>> +-}
>>> +
>>> +-namespace std
>>> +-{
>>> ++_GLIBCXX_END_NAMESPACE
>>> ++
>>> ++_GLIBCXX_BEGIN_NAMESPACE(std)
>>> ++
>>> +   const char* const* const locale::_S_categories =
>>> __gnu_cxx::category_names;
>>> +-}  // namespace std
>>> ++
>>> ++_GLIBCXX_END_NAMESPACE
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
>>> +@@ -33,16 +33,20 @@
>>> +
>>> + // Written by Benjamin Kosnik<bkoz at redhat.com>
>>> +
>>> ++#include<features.h>
>>> ++#ifdef __UCLIBC_HAS_LOCALE__
>>> + #define _LIBC
>>> + #include<locale>
>>> + #undef _LIBC
>>> ++#else
>>> ++#include<locale>
>>> ++#endif
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> +-namespace std
>>> +-{
>>> ++_GLIBCXX_BEGIN_NAMESPACE(std)
>>> ++
>>> +   // NB: The other ctype<char>  specializations are in src/locale.cc
>>> and
>>> +   // various /config/os/* files.
>>> +-  template<>
>>> +     ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
>>> +     : ctype<char>(0, false, __refs)
>>> +     {
>>> +@@ -57,6 +61,8 @@ namespace std
>>> + #endif
>>> +     }
>>> +     }
>>> ++    ctype_byname<char>::~ctype_byname()
>>> ++    { }
>>> +
>>> + #ifdef _GLIBCXX_USE_WCHAR_T
>>> +   ctype<wchar_t>::__wmask_type
>>> +@@ -138,17 +144,33 @@ namespace std
>>> +   ctype<wchar_t>::
>>> +   do_is(mask __m, wchar_t __c) const
>>> +   {
>>> +-    // Highest bitmask in ctype_base == 10, but extra in "C"
>>> +-    // library for blank.
>>> ++    // The case of __m == ctype_base::space is particularly
>>> important,
>>> ++    // due to its use in many istream functions.  Therefore we deal
>>> with
>>> ++    // it first, exploiting the knowledge that on GNU systems
>>> _M_bit[5]
>>> ++    // is the mask corresponding to ctype_base::space.  NB: an
>>> encoding
>>> ++    // change would not affect correctness!
>>> ++
>>> +     bool __ret = false;
>>> +-    const size_t __bitmasksize = 11;
>>> +-    for (size_t __bitcur = 0; __bitcur<= __bitmasksize; ++__bitcur)
>>> +-      if (__m&  _M_bit[__bitcur]
>>> +-&&  __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
>>> +-    {
>>> +-      __ret = true;
>>> +-      break;
>>> +-    }
>>> ++    if (__m == _M_bit[5])
>>> ++      __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
>>> ++    else
>>> ++      {
>>> ++    // Highest bitmask in ctype_base == 10, but extra in "C"
>>> ++    // library for blank.
>>> ++    const size_t __bitmasksize = 11;
>>> ++    for (size_t __bitcur = 0; __bitcur<= __bitmasksize; ++__bitcur)
>>> ++      if (__m&  _M_bit[__bitcur])
>>> ++        {
>>> ++          if (__iswctype_l(__c, _M_wmask[__bitcur],
>>> _M_c_locale_ctype))
>>> ++            {
>>> ++              __ret = true;
>>> ++              break;
>>> ++            }
>>> ++          else if (__m == _M_bit[__bitcur])
>>> ++            break;
>>> ++        }
>>> ++      }
>>> ++
>>> +     return __ret;
>>> +   }
>>> +
>>> +@@ -290,4 +312,5 @@ namespace std
>>> + #endif
>>> +   }
>>> + #endif //  _GLIBCXX_USE_WCHAR_T
>>> +-}
>>> ++
>>> ++_GLIBCXX_END_NAMESPACE
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/messages_members.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +@@ -53,12 +53,16 @@
>>> +   template<typename _CharT>
>>> +      messages<_CharT>::messages(__c_locale __cloc, const char* __s,
>>> +                             size_t __refs)
>>> +-     : facet(__refs),
>>> _M_c_locale_messages(_S_clone_c_locale(__cloc)),
>>> +-     _M_name_messages(__s)
>>> ++     : facet(__refs), _M_c_locale_messages(NULL),
>>> ++     _M_name_messages(NULL)
>>> +      {
>>> +-       char* __tmp = new char[std::strlen(__s) + 1];
>>> +-       std::strcpy(__tmp, __s);
>>> ++       const size_t __len = std::strlen(__s) + 1;
>>> ++       char* __tmp = new char[__len];
>>> ++       std::memcpy(__tmp, __s, __len);
>>> +        _M_name_messages = __tmp;
>>> ++
>>> ++       // Last to avoid leaking memory if new throws.
>>> ++       _M_c_locale_messages = _S_clone_c_locale(__cloc);
>>> +      }
>>> +
>>> +   template<typename _CharT>
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/monetary_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
>>> +@@ -33,9 +33,14 @@
>>> +
>>> + // Written by Benjamin Kosnik<bkoz at redhat.com>
>>> +
>>> ++#include<features.h>
>>> ++#ifdef __UCLIBC_HAS_LOCALE__
>>> + #define _LIBC
>>> + #include<locale>
>>> + #undef _LIBC
>>> ++#else
>>> ++#include<locale>
>>> ++#endif
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> +@@ -206,7 +211,7 @@ namespace std
>>> +       }
>>> +     break;
>>> +       default:
>>> +-    ;
>>> ++    __ret = pattern();
>>> +       }
>>> +     return __ret;
>>> +   }
>>> +@@ -390,7 +395,9 @@ namespace std
>>> +       __c_locale __old = __uselocale(__cloc);
>>> + #else
>>> +       // Switch to named locale so that mbsrtowcs will work.
>>> +-      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      char* __old = setlocale(LC_ALL, NULL);
>>> ++          const size_t __llen = strlen(__old) + 1;
>>> ++          char* __sav = new char[__llen];
>>> +       setlocale(LC_ALL, __name);
>>> + #endif
>>> +
>>> +@@ -477,8 +484,8 @@ namespace std
>>> + #ifdef __UCLIBC_HAS_XLOCALE__
>>> +           __uselocale(__old);
>>> + #else
>>> +-          setlocale(LC_ALL, __old);
>>> +-          free(__old);
>>> ++          setlocale(LC_ALL, __sav);
>>> ++          delete [] __sav;
>>> + #endif
>>> +           __throw_exception_again;
>>> +         }
>>> +@@ -498,8 +505,8 @@ namespace std
>>> + #ifdef __UCLIBC_HAS_XLOCALE__
>>> +       __uselocale(__old);
>>> + #else
>>> +-      setlocale(LC_ALL, __old);
>>> +-      free(__old);
>>> ++      setlocale(LC_ALL, __sav);
>>> ++      delete [] __sav;
>>> + #endif
>>> +     }
>>> +     }
>>> +@@ -545,8 +552,11 @@ namespace std
>>> +       __c_locale __old = __uselocale(__cloc);
>>> + #else
>>> +       // Switch to named locale so that mbsrtowcs will work.
>>> +-      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> +-      setlocale(LC_ALL, __name);
>>> ++          char* __old = setlocale(LC_ALL, NULL);
>>> ++          const size_t __llen = strlen(__old) + 1;
>>> ++          char* __sav = new char[__llen];
>>> ++          memcpy(__sav, __old, __llen);
>>> ++          setlocale(LC_ALL, __name);
>>> + #endif
>>> +
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> +@@ -633,8 +643,8 @@ namespace std
>>> + #ifdef __UCLIBC_HAS_XLOCALE__
>>> +           __uselocale(__old);
>>> + #else
>>> +-          setlocale(LC_ALL, __old);
>>> +-          free(__old);
>>> ++          setlocale(LC_ALL, __sav);
>>> ++          delete [] __sav;
>>> + #endif
>>> +               __throw_exception_again;
>>> +         }
>>> +@@ -653,8 +663,8 @@ namespace std
>>> + #ifdef __UCLIBC_HAS_XLOCALE__
>>> +       __uselocale(__old);
>>> + #else
>>> +-      setlocale(LC_ALL, __old);
>>> +-      free(__old);
>>> ++      setlocale(LC_ALL, __sav);
>>> ++      delete [] __sav;
>>> + #endif
>>> +     }
>>> +     }
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/numeric_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
>>> +@@ -33,9 +33,14 @@
>>> +
>>> + // Written by Benjamin Kosnik<bkoz at redhat.com>
>>> +
>>> ++#include<features.h>
>>> ++#ifdef __UCLIBC_HAS_LOCALE__
>>> + #define _LIBC
>>> + #include<locale>
>>> + #undef _LIBC
>>> ++#else
>>> ++#include<locale>
>>> ++#endif
>>> + #include<bits/c++locale_internal.h>
>>> +
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
>>> +@@ -50,12 +50,21 @@
>>> +     __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char*
>>> __s,
>>> +                                  size_t __refs)
>>> +     : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
>>> +-    _M_name_timepunct(__s)
>>> ++    _M_name_timepunct(NULL)
>>> +     {
>>> +-      char* __tmp = new char[std::strlen(__s) + 1];
>>> +-      std::strcpy(__tmp, __s);
>>> ++      const size_t __len = std::strlen(__s) + 1;
>>> ++      char* __tmp = new char[__len];
>>> ++      std::memcpy(__tmp, __s, __len);
>>> +       _M_name_timepunct = __tmp;
>>> +-      _M_initialize_timepunct(__cloc);
>>> ++
>>> ++      try
>>> ++    { _M_initialize_timepunct(__cloc); }
>>> ++      catch(...)
>>> ++    {
>>> ++      delete [] _M_name_timepunct;
>>> ++      __throw_exception_again;
>>> ++    }
>>> ++
>>> +     }
>>> +
>>> +   template<typename _CharT>
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c_locale.h
>>> +@@ -39,21 +39,23 @@
>>> + #pragma GCC system_header
>>> +
>>> + #include<cstring>               // get std::strlen
>>> +-#include<cstdio>                // get std::snprintf or std::sprintf
>>> ++#include<cstdio>                // get std::vsnprintf or
>>> std::vsprintf
>>> + #include<clocale>
>>> + #include<langinfo.h>                // For codecvt
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning fix this
>>> + #endif
>>> +-#ifdef __UCLIBC_HAS_LOCALE__
>>> ++#ifdef _GLIBCXX_USE_ICONV
>>> + #include<iconv.h>           // For codecvt using iconv, iconv_t
>>> + #endif
>>> +-#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
>>> +-#include<libintl.h>                 // For messages
>>> ++#ifdef HAVE_LIBINTL_H
>>> ++#include<libintl.h>                 // For messages
>>> + #endif
>>> ++#include<cstdarg>
>>> +
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning what is _GLIBCXX_C_LOCALE_GNU for
>>> ++// psm: used in os/gnu-linux/ctype_noninline.h
>>> + #endif
>>> + #define _GLIBCXX_C_LOCALE_GNU 1
>>> +
>>> +@@ -78,23 +80,25 @@ namespace std
>>> + #else
>>> +   typedef int*                      __c_locale;
>>> + #endif
>>> +-
>>> +-  // Convert numeric value of type _Tv to string and return length of
>>> +-  // string.  If snprintf is available use it, otherwise fall back to
>>> +-  // the unsafe sprintf which, in general, can be dangerous and
>>> should
>>> ++  // Convert numeric value of type double to string and return length
>>> of
>>> ++  // string.  If vsnprintf is available use it, otherwise fall back
>>> to
>>> ++  // the unsafe vsprintf which, in general, can be dangerous and
>>> should
>>> +   // be avoided.
>>> +-  template<typename _Tv>
>>> +-    int
>>> +-    __convert_from_v(char* __out,
>>> +-                 const int __size __attribute__ ((__unused__)),
>>> +-                 const char* __fmt,
>>> +-#ifdef __UCLIBC_HAS_XCLOCALE__
>>> +-                 _Tv __v, const __c_locale&  __cloc, int __prec)
>>> ++    inline int
>>> ++    __convert_from_v(const __c_locale&
>>> ++#ifndef __UCLIBC_HAS_XCLOCALE__
>>> ++    __cloc __attribute__ ((__unused__))
>>> ++#endif
>>> ++                 ,
>>> ++                 char* __out,
>>> ++                 const int __size,
>>> ++                 const char* __fmt, ...)
>>> +     {
>>> ++      va_list __args;
>>> ++#ifdef __UCLIBC_HAS_XCLOCALE__
>>> ++
>>> +       __c_locale __old = __gnu_cxx::__uselocale(__cloc);
>>> + #else
>>> +-                 _Tv __v, const __c_locale&, int __prec)
>>> +-    {
>>> + # ifdef __UCLIBC_HAS_LOCALE__
>>> +       char* __old = std::setlocale(LC_ALL, NULL);
>>> +       char* __sav = new char[std::strlen(__old) + 1];
>>> +@@ -103,7 +107,9 @@ namespace std
>>> + # endif
>>> + #endif
>>> +
>>> +-      const int __ret = std::snprintf(__out, __size, __fmt, __prec,
>>> __v);
>>> ++      va_start(__args, __fmt);
>>> ++      const int __ret = std::vsnprintf(__out, __size, __fmt, __args);
>>> ++      va_end(__args);
>>> +
>>> + #ifdef __UCLIBC_HAS_XCLOCALE__
>>> +       __gnu_cxx::__uselocale(__old);
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.cc
>>> +@@ -53,11 +53,14 @@ namespace std
>>> +       const size_t __len = __strftime_l(__s, __maxlen, __format,
>>> __tm,
>>> +                                     _M_c_locale_timepunct);
>>> + #else
>>> +-      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      char* __old = setlocale(LC_ALL, NULL);
>>> ++      const size_t __llen = strlen(__old) + 1;
>>> ++      char* __sav = new char[__llen];
>>> ++      memcpy(__sav, __old, __llen);
>>> +       setlocale(LC_ALL, _M_name_timepunct);
>>> +       const size_t __len = strftime(__s, __maxlen, __format, __tm);
>>> +-      setlocale(LC_ALL, __old);
>>> +-      free(__old);
>>> ++      setlocale(LC_ALL, __sav);
>>> ++      delete [] __sav;
>>> + #endif
>>> +       // Make sure __s is null terminated.
>>> +       if (__len == 0)
>>> +@@ -207,11 +210,14 @@ namespace std
>>> +       const size_t __len = __wcsftime_l(__s, __maxlen, __format,
>>> __tm,
>>> +                                     _M_c_locale_timepunct);
>>> + #else
>>> +-      char* __old = strdup(setlocale(LC_ALL, NULL));
>>> ++      char* __old = setlocale(LC_ALL, NULL);
>>> ++      const size_t __llen = strlen(__old) + 1;
>>> ++      char* __sav = new char[__llen];
>>> ++      memcpy(__sav, __old, __llen);
>>> +       setlocale(LC_ALL, _M_name_timepunct);
>>> +       const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
>>> +-      setlocale(LC_ALL, __old);
>>> +-      free(__old);
>>> ++      setlocale(LC_ALL, __sav);
>>> ++      delete [] __sav;
>>> + #endif
>>> +       // Make sure __s is null terminated.
>>> +       if (__len == 0)
>>> +Index: gcc-4.6.0/libstdc++-
>>> v3/config/locale/uclibc/c++locale_internal.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/c++locale_internal.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
>>> +@@ -31,6 +31,9 @@
>>> +
>>> + #include<bits/c++config.h>
>>> + #include<clocale>
>>> ++#include<cstdlib>
>>> ++#include<cstring>
>>> ++#include<cstddef>
>>> +
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning clean this up
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/301-missing-
>>> execinfo_h.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/301-missing-
>>> execinfo_h.patch
>>> new file mode 100644
>>> index 0000000..99bd229
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/301-missing-execinfo_h.patch
>>> @@ -0,0 +1,13 @@
>>> +Index: gcc-4.6.0/boehm-gc/include/gc.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/boehm-gc/include/gc.h
>>> ++++ gcc-4.6.0/boehm-gc/include/gc.h
>>> +@@ -503,7 +503,7 @@ GC_API GC_PTR GC_malloc_atomic_ignore_of
>>> + #if defined(__linux__) || defined(__GLIBC__)
>>> + # include<features.h>
>>> + # if (__GLIBC__ == 2&&  __GLIBC_MINOR__>= 1 || __GLIBC__>  2) \
>>> +-&&  !defined(__ia64__)
>>> ++&&  !defined(__ia64__)&&  !defined(__UCLIBC__)
>>> + #   ifndef GC_HAVE_BUILTIN_BACKTRACE
>>> + #     define GC_HAVE_BUILTIN_BACKTRACE
>>> + #   endif
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/302-c99-snprintf.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/302-c99-snprintf.patch
>>> new file mode 100644
>>> index 0000000..9f841ae
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/302-c99-snprintf.patch
>>> @@ -0,0 +1,13 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/include/c_std/cstdio
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/include/c_std/cstdio
>>> ++++ gcc-4.6.0/libstdc++-v3/include/c_std/cstdio
>>> +@@ -136,7 +136,7 @@ namespace std
>>> +   using ::vsprintf;
>>> + } // namespace std
>>> +
>>> +-#if _GLIBCXX_USE_C99
>>> ++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
>>> +
>>> + #undef snprintf
>>> + #undef vfscanf
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/303-c99-complex-ugly-
>>> hack.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/303-c99-complex-ugly-
>>> hack.patch
>>> new file mode 100644
>>> index 0000000..47ae88e
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/303-c99-complex-ugly-
>>> hack.patch
>>> @@ -0,0 +1,14 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/configure
>>> ++++ gcc-4.6.0/libstdc++-v3/configure
>>> +@@ -18302,6 +18302,9 @@ $as_echo_n "checking for ISO C99 support
>>> +     cat confdefs.h -<<_ACEOF>conftest.$ac_ext
>>> + /* end confdefs.h.  */
>>> + #include<complex.h>
>>> ++#ifdef __UCLIBC__
>>> ++#error ugly hack to make sure configure test fails here for cross
>>> until uClibc supports the complex funcs
>>> ++#endif
>>> + int
>>> + main ()
>>> + {
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/304-index_macro.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/304-index_macro.patch
>>> new file mode 100644
>>> index 0000000..f6eedb3
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/304-index_macro.patch
>>> @@ -0,0 +1,28 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/include/ext/rope
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/include/ext/rope
>>> ++++ gcc-4.6.0/libstdc++-v3/include/ext/rope
>>> +@@ -54,6 +54,9 @@
>>> + #include<bits/gthr.h>
>>> + #include<tr1/functional>
>>> +
>>> ++/* cope w/ index defined as macro, SuSv3 proposal */
>>> ++#undef index
>>> ++
>>> + # ifdef __GC
>>> + #   define __GC_CONST const
>>> + # else
>>> +Index: gcc-4.6.0/libstdc++-v3/include/ext/ropeimpl.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/include/ext/ropeimpl.h
>>> ++++ gcc-4.6.0/libstdc++-v3/include/ext/ropeimpl.h
>>> +@@ -49,6 +49,9 @@
>>> + #include<ext/memory>  // For uninitialized_copy_n
>>> + #include<ext/numeric>  // For power
>>> +
>>> ++/* cope w/ index defined as macro, SuSv3 proposal */
>>> ++#undef index
>>> ++
>>> + namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
>>> + {
>>> + _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/305-libmudflap-susv3-
>>> legacy.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/305-libmudflap-
>>> susv3-legacy.patch
>>> new file mode 100644
>>> index 0000000..4cabb36
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/305-libmudflap-susv3-
>>> legacy.patch
>>> @@ -0,0 +1,49 @@
>>> +Index: gcc-4.6.0/libmudflap/mf-hooks2.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libmudflap/mf-hooks2.c
>>> ++++ gcc-4.6.0/libmudflap/mf-hooks2.c
>>> +@@ -421,7 +421,7 @@ WRAPPER2(void, bzero, void *s, size_t n)
>>> + {
>>> +   TRACE ("%s\n", __PRETTY_FUNCTION__);
>>> +   MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region");
>>> +-  bzero (s, n);
>>> ++  memset (s, 0, n);
>>> + }
>>> +
>>> +
>>> +@@ -431,7 +431,7 @@ WRAPPER2(void, bcopy, const void *src, v
>>> +   TRACE ("%s\n", __PRETTY_FUNCTION__);
>>> +   MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src");
>>> +   MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest");
>>> +-  bcopy (src, dest, n);
>>> ++  memmove (dest, src, n);
>>> + }
>>> +
>>> +
>>> +@@ -441,7 +441,7 @@ WRAPPER2(int, bcmp, const void *s1, cons
>>> +   TRACE ("%s\n", __PRETTY_FUNCTION__);
>>> +   MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg");
>>> +   MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg");
>>> +-  return bcmp (s1, s2, n);
>>> ++  return n == 0 ? 0 : memcmp (s1, s2, n);
>>> + }
>>> +
>>> +
>>> +@@ -450,7 +450,7 @@ WRAPPER2(char *, index, const char *s, i
>>> +   size_t n = strlen (s);
>>> +   TRACE ("%s\n", __PRETTY_FUNCTION__);
>>> +   MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index
>>> region");
>>> +-  return index (s, c);
>>> ++  return strchr (s, c);
>>> + }
>>> +
>>> +
>>> +@@ -459,7 +459,7 @@ WRAPPER2(char *, rindex, const char *s,
>>> +   size_t n = strlen (s);
>>> +   TRACE ("%s\n", __PRETTY_FUNCTION__);
>>> +   MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex
>>> region");
>>> +-  return rindex (s, c);
>>> ++  return strrchr (s, c);
>>> + }
>>> +
>>> + /* XXX:  stpcpy, memccpy */
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/306-libstdc++-
>>> namespace.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/306-libstdc++-
>>> namespace.patch
>>> new file mode 100644
>>> index 0000000..1fbf043
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/306-libstdc++-namespace.patch
>>> @@ -0,0 +1,38 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-
>>> v3/config/locale/uclibc/messages_members.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/messages_members.h
>>> +@@ -32,7 +32,8 @@
>>> + //
>>> +
>>> + // Written by Benjamin Kosnik<bkoz at redhat.com>
>>> +-
>>> ++namespace std
>>> ++{
>>> + #ifdef __UCLIBC_MJN3_ONLY__
>>> + #warning fix prototypes for *textdomain funcs
>>> + #endif
>>> +@@ -116,3 +117,4 @@
>>> +        this->_S_create_c_locale(this->_M_c_locale_messages, __s);
>>> +      }
>>> +      }
>>> ++}
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/uclibc/time_members.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/uclibc/time_members.h
>>> +@@ -33,7 +33,8 @@
>>> + //
>>> +
>>> + // Written by Benjamin Kosnik<bkoz at redhat.com>
>>> +-
>>> ++namespace std
>>> ++{
>>> +   template<typename _CharT>
>>> +     __timepunct<_CharT>::__timepunct(size_t __refs)
>>> +     : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
>>> +@@ -75,3 +76,4 @@
>>> +       delete _M_data;
>>> +       _S_destroy_c_locale(_M_c_locale_timepunct);
>>> +     }
>>> ++}
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/307-
>>> locale_facets.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/307-
>>> locale_facets.patch
>>> new file mode 100644
>>> index 0000000..774fcfa
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/307-locale_facets.patch
>>> @@ -0,0 +1,19 @@
>>> +This patch fixes a bug into ostream::operator<<(double) due to the
>>> wrong size
>>> +passed into the __convert_from_v method. The wrong size is then passed
>>> to
>>> +std::snprintf function, that, on uClibc, doens't handle sized 0
>>> buffer.
>>> +
>>> +Signed-off-by: Carmelo Amoroso<carmelo.amoroso at st.com>
>>> +
>>> +Index: gcc-4.3.1/libstdc++-v3/include/bits/locale_facets.tcc
>>> +===================================================================
>>> +--- gcc-4.3.1.orig/libstdc++-v3/include/bits/locale_facets.tcc       2007-
>>> 11-26 17:59:41.000000000 -0800
>>> ++++ gcc-4.3.1/libstdc++-v3/include/bits/locale_facets.tcc    2008-08-16
>>> 02:14:48.000000000 -0700
>>> +@@ -1004,7 +1004,7 @@
>>> +     const int __cs_size = __fixed ? __max_exp + __prec + 4
>>> +                                   : __max_digits * 2 + __prec;
>>> +     char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
>>> +-    __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, __fbuf,
>>> ++    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
>>> __fbuf,
>>> +                                   __prec, __v);
>>> + #endif
>>> +
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/602-sdk-libstdc++-
>>> includes.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/602-sdk-libstdc++-
>>> includes.patch
>>> new file mode 100644
>>> index 0000000..23fce75
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/602-sdk-libstdc++-
>>> includes.patch
>>> @@ -0,0 +1,20 @@
>>> +--- gcc-4.1.0/libstdc++-v3/fragment.am       2005-03-21 11:40:14.000000000
>>> -0600
>>> ++++ gcc-4.1.0-patched/libstdc++-v3/fragment.am       2005-04-25
>>> 20:14:39.856251785 -0500
>>> +@@ -21,5 +21,5 @@
>>> +     $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
>>> +
>>> + # -I/-D flags to pass when compiling.
>>> +-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
>>> ++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
>>> +
>>> +--- gcc-4.1.0/libstdc++-v3/libmath/Makefile.am       2005-03-21
>>> 11:40:18.000000000 -0600
>>> ++++ gcc-4.1.0-patched/libstdc++-v3/libmath/Makefile.am       2005-04-25
>>> 20:14:39.682280735 -0500
>>> +@@ -35,7 +35,7 @@
>>> +
>>> + libmath_la_SOURCES = stubs.c
>>> +
>>> +-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
>>> ++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
>>> +
>>> + # Only compiling "C" sources in this directory.
>>> + LIBTOOL = @LIBTOOL@ --tag CC
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/64bithack.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/64bithack.patch
>>> new file mode 100644
>>> index 0000000..11cbbed
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/64bithack.patch
>>> @@ -0,0 +1,33 @@
>>> +By default gcc places 64 bit libs in a lib64 directory. This makes it
>>> use
>>> +"lib" instead.
>>> +
>>> +RP 25/7/10
>>> +
>>> +Index: gcc-4.6.0/gcc/config/i386/t-linux64
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config/i386/t-linux64
>>> ++++ gcc-4.6.0/gcc/config/i386/t-linux64
>>> +@@ -24,8 +24,8 @@
>>> + # MULTILIB_OSDIRNAMES according to what is found on the target.
>>> +
>>> + MULTILIB_OPTIONS = m64/m32
>>> +-MULTILIB_DIRNAMES = 64 32
>>> +-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo
>>> $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
>>> ++MULTILIB_DIRNAMES = . 32
>>> ++MULTILIB_OSDIRNAMES = . $(if $(wildcard $(shell echo
>>> $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
>>> +
>>> + LIBGCC = stmp-multilib
>>> + INSTALL_LIBGCC = install-multilib
>>> +Index: gcc-4.6.0/gcc/config/i386/linux64.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config/i386/linux64.h
>>> ++++ gcc-4.6.0/gcc/config/i386/linux64.h
>>> +@@ -63,7 +63,7 @@ see the files COPYING3 and COPYING.RUNTI
>>> +    done.  */
>>> +
>>> + #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
>>> +-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
>>> ++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux-x86-64.so.2"
>>> +
>>> + #if TARGET_64BIT_DEFAULT
>>> + #define SPEC_32 "m32"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/740-sh-pr24836.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/740-sh-pr24836.patch
>>> new file mode 100644
>>> index 0000000..89a3934
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/740-sh-pr24836.patch
>>> @@ -0,0 +1,29 @@
>>> +http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_i
>>> d=5348
>>> +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
>>> +
>>> +Index: gcc-4.6.0/gcc/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure.ac
>>> ++++ gcc-4.6.0/gcc/configure.ac
>>> +@@ -2926,7 +2926,7 @@ foo:   .long   25
>>> +     tls_first_minor=14
>>> +     tls_as_opt="-m64 -Aesame --fatal-warnings"
>>> +     ;;
>>> +-  sh-*-* | sh[34]-*-*)
>>> ++  sh-*-* | sh[34]*-*-*)
>>> +     conftest_s='
>>> +     .section ".tdata","awT", at progbits
>>> + foo:        .long   25
>>> +Index: gcc-4.6.0/gcc/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure
>>> ++++ gcc-4.6.0/gcc/configure
>>> +@@ -22756,7 +22756,7 @@ foo: .long   25
>>> +     tls_first_minor=14
>>> +     tls_as_opt="-m64 -Aesame --fatal-warnings"
>>> +     ;;
>>> +-  sh-*-* | sh[34]-*-*)
>>> ++  sh-*-* | sh[34]*-*-*)
>>> +     conftest_s='
>>> +     .section ".tdata","awT", at progbits
>>> + foo:        .long   25
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/800-arm-
>>> bigendian.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/800-arm-
>>> bigendian.patch
>>> new file mode 100644
>>> index 0000000..50088cf
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/800-arm-bigendian.patch
>>> @@ -0,0 +1,34 @@
>>> +By Lennert Buytenhek<buytenh at wantstofly.org>
>>> +Adds support for arm*b-linux* big-endian ARM targets
>>> +
>>> +See http://gcc.gnu.org/PR16350
>>> +
>>> +Index: gcc-4.6.0/gcc/config/arm/linux-elf.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config/arm/linux-elf.h
>>> ++++ gcc-4.6.0/gcc/config/arm/linux-elf.h
>>> +@@ -51,7 +51,7 @@
>>> +
>>> + #undef  MULTILIB_DEFAULTS
>>> + #define MULTILIB_DEFAULTS \
>>> +-    { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork"
>>> }
>>> ++    { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-
>>> interwork" }
>>> +
>>> + /* Now we define the strings used to build the spec file.  */
>>> + #undef  LIB_SPEC
>>> +Index: gcc-4.6.0/gcc/config.gcc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config.gcc
>>> ++++ gcc-4.6.0/gcc/config.gcc
>>> +@@ -822,6 +822,11 @@ arm*-*-linux*)                  # ARM GNU/Linux
>>> with EL
>>> +     esac
>>> +     tmake_file="${tmake_file} t-linux arm/t-arm"
>>> +     case ${target} in
>>> ++    arm*b-*)
>>> ++            tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
>>> ++            ;;
>>> ++    esac
>>> ++    case ${target} in
>>> +     arm*-*-linux-*eabi)
>>> +         tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
>>> +         tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/904-flatten-switch-
>>> stmt-00.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/904-flatten-switch-
>>> stmt-00.patch
>>> new file mode 100644
>>> index 0000000..2623313
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/904-flatten-switch-stmt-
>>> 00.patch
>>> @@ -0,0 +1,74 @@
>>> +Hi,
>>> +
>>> +The attached patch makes sure that we create smaller object code for
>>> +simple switch statements. We just make sure to flatten the switch
>>> +statement into an if-else chain, basically.
>>> +
>>> +This fixes a size-regression as compared to gcc-3.4, as can be seen
>>> +below.
>>> +
>>> +2007-04-15  Bernhard Fischer<..>
>>> +
>>> +     * stmt.c (expand_case): Do not create a complex binary tree when
>>> +     optimizing for size but rather use the simple ordered list.
>>> +     (emit_case_nodes): do not emit jumps to the default_label when
>>> +     optimizing for size.
>>> +
>>> +Not regtested so far.
>>> +Comments?
>>> +
>>> +Attached is the test switch.c mentioned below.
>>> +
>>> +$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-
>>> HEAD;do
>>> +gcc-$i  -DCHAIN -Os -o switch-CHAIN-$i.o -c switch.c ;done
>>> +$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-
>>> HEAD;do
>>> +gcc-$i  -UCHAIN -Os -o switch-$i.o -c switch.c ;done
>>> +
>>> +$ size switch-*.o
>>> +   text         data     bss     dec     hex filename
>>> +    169            0       0     169      a9 switch-
>>> 2.95.o
>>> +    115            0       0     115      73 switch-
>>> 3.3.o
>>> +    103            0       0     103      67 switch-
>>> 3.4.o
>>> +    124            0       0     124      7c switch-
>>> 4.0.o
>>> +    124            0       0     124      7c switch-
>>> 4.1.o
>>> +    124            0       0     124      7c switch-
>>> 4.2.orig-HEAD.o
>>> +     95            0       0      95      5f switch-4.3-
>>> HEAD.o
>>> +    124            0       0     124      7c switch-
>>> 4.3.orig-HEAD.o
>>> +    166            0       0     166      a6 switch-
>>> CHAIN-2.95.o
>>> +    111            0       0     111      6f switch-
>>> CHAIN-3.3.o
>>> +     95            0       0      95      5f switch-
>>> CHAIN-3.4.o
>>> +     95            0       0      95      5f switch-
>>> CHAIN-4.0.o
>>> +     95            0       0      95      5f switch-
>>> CHAIN-4.1.o
>>> +     95            0       0      95      5f switch-
>>> CHAIN-4.2.orig-HEAD.o
>>> +     95            0       0      95      5f switch-
>>> CHAIN-4.3-HEAD.o
>>> +     95            0       0      95      5f switch-
>>> CHAIN-4.3.orig-HEAD.o
>>> +
>>> +
>>> +Content-Type: text/x-diff; charset=us-ascii
>>> +Content-Disposition: attachment; filename="gcc-4.3.gcc-flatten-switch-
>>> stmt.00.diff"
>>> +
>>> +Index: gcc-4.6.0/gcc/stmt.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/stmt.c
>>> ++++ gcc-4.6.0/gcc/stmt.c
>>> +@@ -2478,7 +2478,11 @@ expand_case (gimple stmt)
>>> +          default code is emitted.  */
>>> +
>>> +       use_cost_table = estimate_case_costs (case_list);
>>> +-      balance_case_nodes (&case_list, NULL);
>>> ++      /* When optimizing for size, we want a straight list to avoid
>>> ++         jumps as much as possible. This basically creates an if-else
>>> ++         chain.  */
>>> ++      if (!optimize_size)
>>> ++        balance_case_nodes (&case_list, NULL);
>>> +       emit_case_nodes (index, case_list, default_label, index_type);
>>> +       if (default_label)
>>> +         emit_jump (default_label);
>>> +@@ -3046,6 +3050,7 @@ emit_case_nodes (rtx index, case_node_pt
>>> +         {
>>> +           if (!node_has_low_bound (node, index_type))
>>> +             {
>>> ++              if (!optimize_size) /* don't jl to the .default_label. */
>>> +               emit_cmp_and_jump_insns (index,
>>> +                                        convert_modes
>>> +                                        (mode, imode,
>>> diff --git a/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/COLLECT_GCC_OPTIONS.patch b/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/COLLECT_GCC_OPTIONS.patch
>>> new file mode 100644
>>> index 0000000..8b53b83
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/COLLECT_GCC_OPTIONS.patch
>>> @@ -0,0 +1,23 @@
>>> +#This patck added --sysroot into COLLECT_GCC_OPTIONS which is used to
>>> +#invoke collect2.
>>> +
>>> +Index: gcc-4.6.0/gcc/gcc.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/gcc.c
>>> ++++ gcc-4.6.0/gcc/gcc.c
>>> +@@ -3948,6 +3948,15 @@ set_collect_gcc_options (void)
>>> +             sizeof ("COLLECT_GCC_OPTIONS=") - 1);
>>> +
>>> +   first_time = TRUE;
>>> ++#ifdef HAVE_LD_SYSROOT
>>> ++  if (target_system_root_changed&&  target_system_root)
>>> ++    {
>>> ++      obstack_grow (&collect_obstack, "'--sysroot=", sizeof("'--
>>> sysroot=")-1);
>>> ++      obstack_grow (&collect_obstack,
>>> target_system_root,strlen(target_system_root));
>>> ++      obstack_grow (&collect_obstack, "'", 1);
>>> ++      first_time = FALSE;
>>> ++    }
>>> ++#endif
>>> +   for (i = 0; (int) i<  n_switches; i++)
>>> +     {
>>> +       const char *const *args;
>>> diff --git a/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch b/meta/recipes-
>>> devtools/gcc/gcc-4.6.0/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch
>>> new file mode 100644
>>> index 0000000..ffb2267
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch
>>> @@ -0,0 +1,33 @@
>>> +# by default c++ include directories are not relative to "--sysroot"
>>> +# which brings one trouble when using the toolchain in an environment
>>> +# where the build directory generating that toolchain doesn't exist,
>>> +# e.g. in sstate, machine specific sysroot and relocatable SDK
>>> +# toolchain. This patch now enables c++ include paths under sysroot.
>>> +# This way it's enough as long as "--sysroot" is correctly enabled
>>> +# in the new environment.
>>> +#
>>> +# Signed-off-by Kevin Tian<kevin.tian at intel.com>, 2010-12-30
>>> +
>>> +Index: gcc-4.6.0/gcc/cppdefault.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/cppdefault.c
>>> ++++ gcc-4.6.0/gcc/cppdefault.c
>>> +@@ -48,15 +48,15 @@ const struct default_include cpp_include
>>> + = {
>>> + #ifdef GPLUSPLUS_INCLUDE_DIR
>>> +     /* Pick up GNU C++ generic include files.  */
>>> +-    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
>>> ++    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 1, 0 },
>>> + #endif
>>> + #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
>>> +     /* Pick up GNU C++ target-dependent include files.  */
>>> +-    { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0, 1 },
>>> ++    { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 1, 1 },
>>> + #endif
>>> + #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
>>> +     /* Pick up GNU C++ backward and deprecated include files.  */
>>> +-    { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
>>> ++    { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 1, 0 },
>>> + #endif
>>> + #ifdef GCC_INCLUDE_DIR
>>> +     /* This is the dir for gcc's private headers.  */
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/arm-bswapsi2.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-bswapsi2.patch
>>> new file mode 100644
>>> index 0000000..7ac61a6
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-bswapsi2.patch
>>> @@ -0,0 +1,13 @@
>>> +Index: gcc-4.5/gcc/config/arm/arm.md
>>> +===================================================================
>>> +--- gcc-4.5.orig/gcc/config/arm/arm.md       2010-06-17 09:13:07.000000000
>>> -0700
>>> ++++ gcc-4.5/gcc/config/arm/arm.md    2010-06-22 08:08:45.397212002 -0700
>>> +@@ -11267,7 +11267,7 @@
>>> + (define_expand "bswapsi2"
>>> +   [(set (match_operand:SI 0 "s_register_operand" "=r")
>>> +     (bswap:SI (match_operand:SI 1 "s_register_operand" "r")))]
>>> +-"TARGET_EITHER"
>>> ++"TARGET_EITHER&&  (arm_arch6&&  !optimize_size)"
>>> + "
>>> +   if (!arm_arch6)
>>> +     {
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/arm-nolibfloat.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-nolibfloat.patch
>>> new file mode 100644
>>> index 0000000..2175519
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-nolibfloat.patch
>>> @@ -0,0 +1,24 @@
>>> +# Dimitry Andric<dimitry at andric.com>, 2004-05-01
>>> +#
>>> +# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't
>>> needed
>>> +#   anymore.  (The required functions are now in libgcc.)
>>> +#
>>> +# Fixes errors like
>>> +# arm-softfloat-linux-gnu/3.4.0/../../../../arm-softfloat-linux-
>>> gnu/bin/ld: cannot find -lfloat
>>> +# collect2: ld returned 1 exit status
>>> +# make[2]: *** [arm-softfloat-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-
>>> glibc/iconvdata/ISO8859-1.so] Error 1
>>> +# when building glibc-2.3.3 with gcc-3.4.0 for arm-softfloat
>>> +
>>> +Index: gcc-4.6.0/gcc/config/arm/linux-elf.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config/arm/linux-elf.h
>>> ++++ gcc-4.6.0/gcc/config/arm/linux-elf.h
>>> +@@ -60,7 +60,7 @@
>>> +    %{shared:-lc} \
>>> +    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
>>> +
>>> +-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-
>>> lfloat} -lgcc"
>>> ++#define LIBGCC_SPEC "-lgcc"
>>> +
>>> + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
>>> +
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/arm-softfloat.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-softfloat.patch
>>> new file mode 100644
>>> index 0000000..908e2d8
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-softfloat.patch
>>> @@ -0,0 +1,16 @@
>>> +Index: gcc-4.6.0/gcc/config/arm/t-linux
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config/arm/t-linux
>>> ++++ gcc-4.6.0/gcc/config/arm/t-linux
>>> +@@ -23,7 +23,10 @@ TARGET_LIBGCC2_CFLAGS = -fomit-frame-poi
>>> +
>>> + LIB1ASMSRC = arm/lib1funcs.asm
>>> + LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2
>>> _clzdi2 \
>>> +-    _arm_addsubdf3 _arm_addsubsf3
>>> ++    _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi
>>> _fixunsdfsi \
>>> ++    _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
>>> ++    _fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundisf
>>> _floatundidf
>>> ++#   _arm_addsubdf3 _arm_addsubsf3
>>> +
>>> + # MULTILIB_OPTIONS = mhard-float/msoft-float
>>> + # MULTILIB_DIRNAMES = hard-float soft-float
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/arm-unbreak-eabi-
>>> armv4t.dpatch b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-unbreak-eabi-
>>> armv4t.dpatch
>>> new file mode 100644
>>> index 0000000..7bb8887
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/arm-unbreak-eabi-
>>> armv4t.dpatch
>>> @@ -0,0 +1,36 @@
>>> +#! /bin/sh -e
>>> +
>>> +# DP: Fix armv4t build on ARM
>>> +
>>> +dir=
>>> +if [ $# -eq 3 -a "$2" = '-d' ]; then
>>> +    pdir="-d $3"
>>> +    dir="$3/"
>>> +elif [ $# -ne 1 ]; then
>>> +    echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +    exit 1
>>> +fi
>>> +case "$1" in
>>> +    -patch)
>>> +        patch $pdir -f --no-backup-if-mismatch -p1<  $0
>>> +        ;;
>>> +    -unpatch)
>>> +        patch $pdir -f --no-backup-if-mismatch -R -p1<  $0
>>> +        ;;
>>> +    *)
>>> +        echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +        exit 1
>>> +esac
>>> +exit 0
>>> +
>>> +--- src/gcc/config/arm/linux-eabi.h.orig     2007-11-24 12:37:38.000000000
>>> +0000
>>> ++++ src/gcc/config/arm/linux-eabi.h  2007-11-24 12:39:41.000000000
>>> +0000
>>> +@@ -44,7 +44,7 @@
>>> +    The ARM10TDMI core is the default for armv5t, so set
>>> +    SUBTARGET_CPU_DEFAULT to achieve this.  */
>>> + #undef  SUBTARGET_CPU_DEFAULT
>>> +-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
>>> ++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
>>> +
>>> + /* TARGET_BIG_ENDIAN_DEFAULT is set in
>>> +    config.gcc for big endian configurations.  */
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/cache-amnesia.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/cache-amnesia.patch
>>> new file mode 100644
>>> index 0000000..3a98b02
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/cache-amnesia.patch
>>> @@ -0,0 +1,31 @@
>>> +---
>>> + gcc/configure    |    2 +-
>>> + gcc/configure.ac |    2 +-
>>> + 2 files changed, 2 insertions(+), 2 deletions(-)
>>> +
>>> +Index: gcc-4.6.0/gcc/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure
>>> ++++ gcc-4.6.0/gcc/configure
>>> +@@ -10898,7 +10898,7 @@ else
>>> +     saved_CFLAGS="${CFLAGS}"
>>> +     CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
>>> +     LDFLAGS="${LDFLAGS_FOR_BUILD}" \
>>> +-    ${realsrcdir}/configure \
>>> ++    CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
>>> +             --enable-languages=${enable_languages-all} \
>>> +             --target=$target_alias --host=$build_alias --
>>> build=$build_alias
>>> +     CFLAGS="${saved_CFLAGS}"
>>> +Index: gcc-4.6.0/gcc/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure.ac
>>> ++++ gcc-4.6.0/gcc/configure.ac
>>> +@@ -1435,7 +1435,7 @@ else
>>> +     saved_CFLAGS="${CFLAGS}"
>>> +     CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
>>> +     LDFLAGS="${LDFLAGS_FOR_BUILD}" \
>>> +-    ${realsrcdir}/configure \
>>> ++    CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
>>> +             --enable-languages=${enable_languages-all} \
>>> +             --target=$target_alias --host=$build_alias --
>>> build=$build_alias
>>> +     CFLAGS="${saved_CFLAGS}"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/disable_relax_pic_calls_flag.patch b/meta/recipes-
>>> devtools/gcc/gcc-4.6.0/disable_relax_pic_calls_flag.patch
>>> new file mode 100644
>>> index 0000000..4f73cc8
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/disable_relax_pic_calls_flag.patch
>>> @@ -0,0 +1,46 @@
>>> +GCC: disable MASK_RELAX_PIC_CALLS bit
>>> +
>>> +The new feature added after 4.3.3
>>> +"http://www.pubbs.net/200909/gcc/94048-patch-add-support-for-
>>> rmipsjalr.html"
>>> +will cause cc1plus eat up all the system memory when build webkit-gtk.
>>> +The function mips_get_pic_call_symbol keeps on recursively calling
>>> itself.
>>> +Disable this feature to walk aside the bug.
>>> +
>>> +Signed-off-by: Dongxiao Xu<dongxiao.xu at intel.com>
>>> +
>>> +Index: gcc-4.6.0/gcc/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure
>>> ++++ gcc-4.6.0/gcc/configure
>>> +@@ -24887,13 +24887,6 @@ $as_echo_n "checking assembler and linke
>>> +         rm -f conftest.*
>>> +       fi
>>> +     fi
>>> +-    if test $gcc_cv_as_ld_jalr_reloc = yes; then
>>> +-      if test x$target_cpu_default = x; then
>>> +-        target_cpu_default=MASK_RELAX_PIC_CALLS
>>> +-      else
>>> +-
>>> target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
>>> +-      fi
>>> +-    fi
>>> +     { $as_echo "$as_me:${as_lineno-$LINENO}: result:
>>> $gcc_cv_as_ld_jalr_reloc">&5
>>> + $as_echo "$gcc_cv_as_ld_jalr_reloc">&6; }
>>> +
>>> +Index: gcc-4.6.0/gcc/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure.ac
>>> ++++ gcc-4.6.0/gcc/configure.ac
>>> +@@ -3764,13 +3764,6 @@ x:
>>> +         rm -f conftest.*
>>> +       fi
>>> +     fi
>>> +-    if test $gcc_cv_as_ld_jalr_reloc = yes; then
>>> +-      if test x$target_cpu_default = x; then
>>> +-        target_cpu_default=MASK_RELAX_PIC_CALLS
>>> +-      else
>>> +-
>>> target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
>>> +-      fi
>>> +-    fi
>>> +     AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
>>> +
>>> +     AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/fortran-cross-compile-
>>> hack.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/fortran-cross-compile-
>>> hack.patch
>>> new file mode 100644
>>> index 0000000..348c770
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/fortran-cross-compile-
>>> hack.patch
>>> @@ -0,0 +1,30 @@
>>> +* Fortran would have searched for arm-angstrom-gnueabi-gfortran but
>>> would have used
>>> +  used gfortan. For gcc_4.2.2.bb we want to use the gfortran compiler
>>> from our cross
>>> +  directory.
>>> +
>>> +Index: gcc-4.5+svnr155514/libgfortran/configure
>>> +===================================================================
>>> +--- gcc-4.5+svnr155514.orig/libgfortran/configure    2009-12-29
>>> 22:02:01.000000000 -0800
>>> ++++ gcc-4.5+svnr155514/libgfortran/configure 2009-12-30
>>> 08:12:40.889091657 -0800
>>> +@@ -11655,7 +11655,7 @@ CC="$lt_save_CC"
>>> +
>>> + # We need gfortran to compile parts of the library
>>> + #AC_PROG_FC(gfortran)
>>> +-FC="$GFORTRAN"
>>> ++#FC="$GFORTRAN"
>>> + ac_ext=${ac_fc_srcext-f}
>>> + ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext>&5'
>>> + ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS
>>> $ac_fcflags_srcext conftest.$ac_ext $LIBS>&5'
>>> +Index: gcc-4.5+svnr155514/libgfortran/configure.ac
>>> +===================================================================
>>> +--- gcc-4.5+svnr155514.orig/libgfortran/configure.ac 2009-12-29
>>> 22:02:01.000000000 -0800
>>> ++++ gcc-4.5+svnr155514/libgfortran/configure.ac      2009-12-30
>>> 08:12:13.453094218 -0800
>>> +@@ -187,7 +187,7 @@ AC_SUBST(enable_static)
>>> +
>>> + # We need gfortran to compile parts of the library
>>> + #AC_PROG_FC(gfortran)
>>> +-FC="$GFORTRAN"
>>> ++#FC="$GFORTRAN"
>>> + AC_PROG_FC(gfortran)
>>> +
>>> + # extra LD Flags which are required for targets
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.0.2-
>>> e300c2c3.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.0.2-
>>> e300c2c3.patch
>>> new file mode 100644
>>> index 0000000..d1df8b2
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.0.2-e300c2c3.patch
>>> @@ -0,0 +1,319 @@
>>> +Adds support for Freescale Power architecture e300c2 and e300c3 cores.
>>> +http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
>>> +
>>> +Leon Woestenberg<leonw at mailcan.com>
>>> +
>>> +---
>>> + gcc/config.gcc                |    2
>>> + gcc/config/rs6000/e300c2c3.md |  189
>>> ++++++++++++++++++++++++++++++++++++++++++
>>> + gcc/config/rs6000/rs6000.c    |   24 +++++
>>> + gcc/config/rs6000/rs6000.h    |    4
>>> + gcc/config/rs6000/rs6000.md   |    3
>>> + 5 files changed, 220 insertions(+), 2 deletions(-)
>>> +
>>> +Index: gcc-4.3.1/gcc/config/rs6000/e300c2c3.md
>>> +===================================================================
>>> +--- /dev/null        1970-01-01 00:00:00.000000000 +0000
>>> ++++ gcc-4.3.1/gcc/config/rs6000/e300c2c3.md  2008-08-23
>>> 16:51:33.000000000 -0700
>>> +@@ -0,0 +1,189 @@
>>> ++;; Pipeline description for Motorola PowerPC e300c3 core.
>>> ++;;   Copyright (C) 2003 Free Software Foundation, Inc.
>>> ++;;
>>> ++;; This file is part of GCC.
>>> ++
>>> ++;; GCC is free software; you can redistribute it and/or modify it
>>> ++;; under the terms of the GNU General Public License as published
>>> ++;; by the Free Software Foundation; either version 2, or (at your
>>> ++;; option) any later version.
>>> ++
>>> ++;; GCC is distributed in the hope that it will be useful, but WITHOUT
>>> ++;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
>>> ++;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
>>> ++;; License for more details.
>>> ++
>>> ++;; You should have received a copy of the GNU General Public License
>>> ++;; along with GCC; see the file COPYING.  If not, write to the
>>> ++;; Free Software Foundation, 59 Temple Place - Suite 330, Boston,
>>> ++;; MA 02111-1307, USA.
>>> ++
>>> ++(define_automaton "ppce300c3_most,ppce300c3_long,ppce300c3_retire")
>>> ++(define_cpu_unit "ppce300c3_decode_0,ppce300c3_decode_1"
>>> "ppce300c3_most")
>>> ++
>>> ++;; We don't simulate general issue queue (GIC).  If we have SU insn
>>> ++;; and then SU1 insn, they can not be issued on the same cycle
>>> ++;; (although SU1 insn and then SU insn can be issued) because the SU
>>> ++;; insn will go to SU1 from GIC0 entry.  Fortunately, the first cycle
>>> ++;; multipass insn scheduling will find the situation and issue the
>>> SU1
>>> ++;; insn and then the SU insn.
>>> ++(define_cpu_unit "ppce300c3_issue_0,ppce300c3_issue_1"
>>> "ppce300c3_most")
>>> ++
>>> ++;; We could describe completion buffers slots in combination with the
>>> ++;; retirement units and the order of completion but the result
>>> ++;; automaton would behave in the same way because we can not describe
>>> ++;; real latency time with taking in order completion into account.
>>> ++;; Actually we could define the real latency time by querying
>>> reserved
>>> ++;; automaton units but the current scheduler uses latency time before
>>> ++;; issuing insns and making any reservations.
>>> ++;;
>>> ++;; So our description is aimed to achieve a insn schedule in which
>>> the
>>> ++;; insns would not wait in the completion buffer.
>>> ++(define_cpu_unit "ppce300c3_retire_0,ppce300c3_retire_1"
>>> "ppce300c3_retire")
>>> ++
>>> ++;; Branch unit:
>>> ++(define_cpu_unit "ppce300c3_bu" "ppce300c3_most")
>>> ++
>>> ++;; IU:
>>> ++(define_cpu_unit "ppce300c3_iu0_stage0,ppce300c3_iu1_stage0"
>>> "ppce300c3_most")
>>> ++
>>> ++;; IU: This used to describe non-pipelined division.
>>> ++(define_cpu_unit "ppce300c3_mu_div" "ppce300c3_long")
>>> ++
>>> ++;; SRU:
>>> ++(define_cpu_unit "ppce300c3_sru_stage0" "ppce300c3_most")
>>> ++
>>> ++;; Here we simplified LSU unit description not describing the stages.
>>> ++(define_cpu_unit "ppce300c3_lsu" "ppce300c3_most")
>>> ++
>>> ++;; FPU:
>>> ++(define_cpu_unit "ppce300c3_fpu" "ppce300c3_most")
>>> ++
>>> ++;; The following units are used to make automata deterministic
>>> ++(define_cpu_unit "present_ppce300c3_decode_0" "ppce300c3_most")
>>> ++(define_cpu_unit "present_ppce300c3_issue_0" "ppce300c3_most")
>>> ++(define_cpu_unit "present_ppce300c3_retire_0" "ppce300c3_retire")
>>> ++(define_cpu_unit "present_ppce300c3_iu0_stage0" "ppce300c3_most")
>>> ++
>>> ++;; The following sets to make automata deterministic when option ndfa
>>> is used.
>>> ++(presence_set "present_ppce300c3_decode_0" "ppce300c3_decode_0")
>>> ++(presence_set "present_ppce300c3_issue_0" "ppce300c3_issue_0")
>>> ++(presence_set "present_ppce300c3_retire_0" "ppce300c3_retire_0")
>>> ++(presence_set "present_ppce300c3_iu0_stage0" "ppce300c3_iu0_stage0")
>>> ++
>>> ++;; Some useful abbreviations.
>>> ++(define_reservation "ppce300c3_decode"
>>> ++
>>> "ppce300c3_decode_0|ppce300c3_decode_1+present_ppce300c3_decode_0")
>>> ++(define_reservation "ppce300c3_issue"
>>> ++    "ppce300c3_issue_0|ppce300c3_issue_1+present_ppce300c3_issue_0")
>>> ++(define_reservation "ppce300c3_retire"
>>> ++
>>> "ppce300c3_retire_0|ppce300c3_retire_1+present_ppce300c3_retire_0")
>>> ++(define_reservation "ppce300c3_iu_stage0"
>>> ++
>>> "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0
>>> ")
>>> ++
>>> ++;; Compares can be executed either one of the IU or SRU
>>> ++(define_insn_reservation "ppce300c3_cmp" 1
>>> ++  (and (eq_attr "type" "cmp,compare,delayed_compare,fast_compare")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_st
>>> age0) \
>>> ++        +ppce300c3_retire")
>>> ++
>>> ++;; Other one cycle IU insns
>>> ++(define_insn_reservation "ppce300c3_iu" 1
>>> ++  (and (eq_attr "type" "integer,insert_word")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire"
>>> )
>>> ++
>>> ++;; Branch.  Actually this latency time is not used by the scheduler.
>>> ++(define_insn_reservation "ppce300c3_branch" 1
>>> ++  (and (eq_attr "type" "jmpreg,branch")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++  "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire")
>>> ++
>>> ++;; Multiply is non-pipelined but can be executed in any IU
>>> ++(define_insn_reservation "ppce300c3_multiply" 2
>>> ++  (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \
>>> ++   ppce300c3_iu_stage0+ppce300c3_retire")
>>> ++
>>> ++;; Divide.  We use the average latency time here.  We omit reserving
>>> a
>>> ++;; retire unit because of the result automata will be huge.
>>> ++(define_insn_reservation "ppce300c3_divide" 20
>>> ++  (and (eq_attr "type" "idiv")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,
>>> \
>>> ++   ppce300c3_mu_div*19")
>>> ++
>>> ++;; CR logical
>>> ++(define_insn_reservation "ppce300c3_cr_logical" 1
>>> ++  (and (eq_attr "type" "cr_logical,delayed_cr")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire
>>> ")
>>> ++
>>> ++;; Mfcr
>>> ++(define_insn_reservation "ppce300c3_mfcr" 1
>>> ++  (and (eq_attr "type" "mfcr")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire
>>> ")
>>> ++
>>> ++;; Mtcrf
>>> ++(define_insn_reservation "ppce300c3_mtcrf" 1
>>> ++  (and (eq_attr "type" "mtcr")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire
>>> ")
>>> ++
>>> ++;; Mtjmpr
>>> ++(define_insn_reservation "ppce300c3_mtjmpr" 1
>>> ++  (and (eq_attr "type" "mtjmpr,mfjmpr")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire
>>> ")
>>> ++
>>> ++;; Float point instructions
>>> ++(define_insn_reservation "ppce300c3_fpcompare" 3
>>> ++  (and (eq_attr "type" "fpcompare")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retir
>>> e")
>>> ++
>>> ++(define_insn_reservation "ppce300c3_fp" 3
>>> ++  (and (eq_attr "type" "fp")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retir
>>> e")
>>> ++
>>> ++(define_insn_reservation "ppce300c3_dmul" 4
>>> ++  (and (eq_attr "type" "dmul")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++
>>> "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu,nothing,p
>>> pce300c3_retire")
>>> ++
>>> ++; Divides are not pipelined
>>> ++(define_insn_reservation "ppce300c3_sdiv" 18
>>> ++  (and (eq_attr "type" "sdiv")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*17")
>>> ++
>>> ++(define_insn_reservation "ppce300c3_ddiv" 33
>>> ++  (and (eq_attr "type" "ddiv")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32")
>>> ++
>>> ++;; Loads
>>> ++(define_insn_reservation "ppce300c3_load" 2
>>> ++  (and (eq_attr "type"
>>> "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
>>> ++
>>> ++(define_insn_reservation "ppce300c3_fpload" 2
>>> ++  (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
>>> ++
>>> ++;; Stores.
>>> ++(define_insn_reservation "ppce300c3_store" 2
>>> ++  (and (eq_attr "type" "store,store_ux,store_u")
>>> ++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
>>> ++
>>> ++(define_insn_reservation "ppce300c3_fpstore" 2
>>> ++  (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
>>> ++       (eq_attr "cpu" "ppce300c3"))
>>> ++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
>>> +Index: gcc-4.3.1/gcc/config/rs6000/rs6000.c
>>> +===================================================================
>>> +--- gcc-4.3.1.orig/gcc/config/rs6000/rs6000.c        2008-08-23
>>> 16:49:39.000000000 -0700
>>> ++++ gcc-4.3.1/gcc/config/rs6000/rs6000.c     2008-08-23 16:54:25.000000000
>>> -0700
>>> +@@ -669,6 +669,21 @@ struct processor_costs ppc8540_cost = {
>>> +   1,                        /* prefetch streams /*/
>>> + };
>>> +
>>> ++/* Instruction costs on E300C2 and E300C3 cores.  */
>>> ++static const
>>> ++struct processor_costs ppce300c2c3_cost = {
>>> ++  COSTS_N_INSNS (4),    /* mulsi */
>>> ++  COSTS_N_INSNS (4),    /* mulsi_const */
>>> ++  COSTS_N_INSNS (4),    /* mulsi_const9 */
>>> ++  COSTS_N_INSNS (4),    /* muldi */
>>> ++  COSTS_N_INSNS (19),   /* divsi */
>>> ++  COSTS_N_INSNS (19),   /* divdi */
>>> ++  COSTS_N_INSNS (3),    /* fp */
>>> ++  COSTS_N_INSNS (4),    /* dmul */
>>> ++  COSTS_N_INSNS (18),   /* sdiv */
>>> ++  COSTS_N_INSNS (33),   /* ddiv */
>>> ++};
>>> ++
>>> + /* Instruction costs on POWER4 and POWER5 processors.  */
>>> + static const
>>> + struct processor_costs power4_cost = {
>>> +@@ -1420,6 +1435,8 @@ rs6000_override_options (const char *def
>>> +      {"8540", PROCESSOR_PPC8540, POWERPC_BASE_MASK |
>>> MASK_STRICT_ALIGN},
>>> +      /* 8548 has a dummy entry for now.  */
>>> +      {"8548", PROCESSOR_PPC8540, POWERPC_BASE_MASK |
>>> MASK_STRICT_ALIGN},
>>> ++     {"e300c2", PROCESSOR_PPCE300C2, POWERPC_BASE_MASK |
>>> MASK_SOFT_FLOAT},
>>> ++     {"e300c3", PROCESSOR_PPCE300C3, POWERPC_BASE_MASK},
>>> +      {"860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
>>> +      {"970", PROCESSOR_POWER4,
>>> +       POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF |
>>> MASK_POWERPC64},
>>> +@@ -1845,6 +1862,11 @@ rs6000_override_options (const char *def
>>> +     rs6000_cost =&ppc8540_cost;
>>> +     break;
>>> +
>>> ++      case PROCESSOR_PPCE300C2:
>>> ++      case PROCESSOR_PPCE300C3:
>>> ++    rs6000_cost =&ppce300c2c3_cost;
>>> ++    break;
>>> ++
>>> +       case PROCESSOR_POWER4:
>>> +       case PROCESSOR_POWER5:
>>> +     rs6000_cost =&power4_cost;
>>> +@@ -18606,6 +18628,8 @@ rs6000_issue_rate (void)
>>> +   case CPU_PPC7400:
>>> +   case CPU_PPC8540:
>>> +   case CPU_CELL:
>>> ++  case CPU_PPCE300C2:
>>> ++  case CPU_PPCE300C3:
>>> +     return 2;
>>> +   case CPU_RIOS2:
>>> +   case CPU_PPC604:
>>> +Index: gcc-4.3.1/gcc/config/rs6000/rs6000.h
>>> +===================================================================
>>> +--- gcc-4.3.1.orig/gcc/config/rs6000/rs6000.h        2008-01-26
>>> 09:18:35.000000000 -0800
>>> ++++ gcc-4.3.1/gcc/config/rs6000/rs6000.h     2008-08-23 16:55:30.000000000
>>> -0700
>>> +@@ -117,6 +117,8 @@
>>> + %{mcpu=G5: -mpower4 -maltivec} \
>>> + %{mcpu=8540: -me500} \
>>> + %{mcpu=8548: -me500} \
>>> ++%{mcpu=e300c2: -mppc} \
>>> ++%{mcpu=e300c3: -mppc -mpmr} \
>>> + %{maltivec: -maltivec} \
>>> + -many"
>>> +
>>> +@@ -262,6 +264,8 @@ enum processor_type
>>> +    PROCESSOR_PPC7400,
>>> +    PROCESSOR_PPC7450,
>>> +    PROCESSOR_PPC8540,
>>> ++   PROCESSOR_PPCE300C2,
>>> ++   PROCESSOR_PPCE300C3,
>>> +    PROCESSOR_POWER4,
>>> +    PROCESSOR_POWER5,
>>> +    PROCESSOR_POWER6,
>>> +Index: gcc-4.3.1/gcc/config/rs6000/rs6000.md
>>> +===================================================================
>>> +--- gcc-4.3.1.orig/gcc/config/rs6000/rs6000.md       2008-02-13
>>> 16:14:45.000000000 -0800
>>> ++++ gcc-4.3.1/gcc/config/rs6000/rs6000.md    2008-08-23
>>> 16:57:29.000000000 -0700
>>> +@@ -133,7 +133,7 @@
>>> + ;; Processor type -- this attribute must exactly match the
>>> processor_type
>>> + ;; enumeration in rs6000.h.
>>> +
>>> +-(define_attr "cpu"
>>> "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,pp
>>> c604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5,power6
>>> ,cell"
>>> ++(define_attr "cpu"
>>> "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,pp
>>> c604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5,power6
>>> ,cell,ppce300c2,ppce300c3"
>>> +   (const (symbol_ref "rs6000_cpu_attr")))
>>> +
>>> +
>>> +@@ -166,6 +166,7 @@
>>> + (include "7xx.md")
>>> + (include "7450.md")
>>> + (include "8540.md")
>>> ++(include "e300c2c3.md")
>>> + (include "power4.md")
>>> + (include "power5.md")
>>> + (include "power6.md")
>>> +Index: gcc-4.3.1/gcc/config.gcc
>>> +===================================================================
>>> +--- gcc-4.3.1.orig/gcc/config.gcc    2008-08-23 16:49:43.000000000 -0700
>>> ++++ gcc-4.3.1/gcc/config.gcc 2008-08-23 17:03:55.000000000 -0700
>>> +@@ -3144,7 +3144,7 @@ case "${target}" in
>>> +                     | rios | rios1 | rios2 | rsc | rsc1 | rs64a \
>>> +                     | 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \
>>> +                     | 601 | 602 | 603 | 603e | ec603e | 604 \
>>> +-                    | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
>>> ++                    | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 |
>>> e300c[23] \
>>> +                     | 854[08] | 801 | 821 | 823 | 860 | 970 | G3 | G4 |
>>> G5 | cell)
>>> +                             # OK
>>> +                             ;;
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.3.1-
>>> ARCH_FLAGS_FOR_TARGET.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-
>>> 4.3.1-ARCH_FLAGS_FOR_TARGET.patch
>>> new file mode 100644
>>> index 0000000..d249c1c
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.3.1-
>>> ARCH_FLAGS_FOR_TARGET.patch
>>> @@ -0,0 +1,31 @@
>>> +---
>>> + configure    |    2 +-
>>> + configure.ac |    2 +-
>>> + 2 files changed, 2 insertions(+), 2 deletions(-)
>>> +
>>> +Index: gcc-4.6.0/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/configure.ac
>>> ++++ gcc-4.6.0/configure.ac
>>> +@@ -3073,7 +3073,7 @@ fi
>>> + # for target_alias and gcc doesn't manage it consistently.
>>> + target_configargs="--cache-file=./config.cache ${target_configargs}"
>>> +
>>> +-FLAGS_FOR_TARGET=
>>> ++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
>>> + case " $target_configdirs " in
>>> +  *" newlib "*)
>>> +   case " $target_configargs " in
>>> +Index: gcc-4.6.0/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/configure
>>> ++++ gcc-4.6.0/configure
>>> +@@ -7594,7 +7594,7 @@ fi
>>> + # for target_alias and gcc doesn't manage it consistently.
>>> + target_configargs="--cache-file=./config.cache ${target_configargs}"
>>> +
>>> +-FLAGS_FOR_TARGET=
>>> ++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
>>> + case " $target_configdirs " in
>>> +  *" newlib "*)
>>> +   case " $target_configargs " in
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.3.3-
>>> SYSROOT_CFLAGS_FOR_TARGET.patch b/meta/recipes-devtools/gcc/gcc-
>>> 4.6.0/gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch
>>> new file mode 100644
>>> index 0000000..428dd08
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4.3.3-
>>> SYSROOT_CFLAGS_FOR_TARGET.patch
>>> @@ -0,0 +1,114 @@
>>> +Before committing, I noticed that PR/32161 was marked as a dup of
>>> PR/32009, but my previous patch did not fix it.
>>> +
>>> +This alternative patch is better because it lets you just use
>>> CFLAGS_FOR_TARGET to set the compilation flags for libgcc. Since
>>> bootstrapped target libraries are never compiled with the native
>>> compiler, it makes little sense to use different flags for stage1 and
>>> later stages. And it also makes little sense to use a different
>>> variable than CFLAGS_FOR_TARGET.
>>> +
>>> +Other changes I had to do include:
>>> +
>>> +- moving the creation of default CFLAGS_FOR_TARGET from Makefile.am to
>>> configure.ac, because otherwise the BOOT_CFLAGS are substituted into
>>> CFLAGS_FOR_TARGET (which is "-O2 -g $(CFLAGS)") via $(CFLAGS). It is
>>> also cleaner this way though.
>>> +
>>> +- passing the right CFLAGS to configure scripts as exported
>>> environment variables
>>> +
>>> +I also stopped passing LIBCFLAGS to configure scripts since they are
>>> unused in the whole src tree. And I updated the documentation as H-P
>>> reminded me to do.
>>> +
>>> +Bootstrapped/regtested i686-pc-linux-gnu, will commit to 4.4 shortly.
>>> Ok for 4.3?
>>> +
>>> +Paolo
>>> +
>>> +2008-02-19  Paolo Bonzini<bonzini at gnu.org>
>>> +
>>> +        PR bootstrap/32009
>>> +        PR bootstrap/32161
>>> +
>>> +     * configure.ac (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Compute
>>> here.
>>> +     * configure: Regenerate.
>>> +
>>> +     * Makefile.def: Define stage_libcflags for all bootstrap stages.
>>> +     * Makefile.tpl (BOOT_LIBCFLAGS, STAGE2_LIBCFLAGS,
>>> STAGE3_LIBCFLAGS,
>>> +     STAGE4_LIBCFLAGS): New.
>>> +     (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Subst from autoconf,
>>> without
>>> +     $(SYSROOT_CFLAGS_FOR_TARGET) and
>>> $(DEBUG_PREFIX_CFLAGS_FOR_TARGET).
>>> +     (BASE_TARGET_EXPORTS): Append them here to C{,XX}FLAGS.
>>> +     (EXTRA_TARGET_FLAGS): Append them here to {LIB,}C{,XX}FLAGS.
>>> +     (configure-stage[+id+]-[+prefix+][+module+]): Pass
>>> stage_libcflags
>>> +     for target modules.  Don't export LIBCFLAGS.
>>> +     (all-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags;
>>> pass
>>> +     $(BASE_FLAGS_TO_PASS) where [+args+] was passed, and [+args+]
>>> after
>>> +     the overridden CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
>>> +     (invocations of `all'): Replace $(TARGET_FLAGS_TO_PASS) with
>>> +     $(EXTRA_TARGET_FLAGS), $(FLAGS_TO_PASS) with $(EXTRA_HOST_FLAGS).
>>> +     * Makefile.in: Regenerate.
>>> +
>>> +config:
>>> +2008-02-19  Paolo Bonzini<bonzini at gnu.org>
>>> +
>>> +     PR bootstrap/32009
>>> +     * mh-ppc-darwin (BOOT_CFLAGS): Reenable.
>>> +
>>> +gcc:
>>> +2008-02-19  Paolo Bonzini<bonzini at gnu.org>
>>> +
>>> +     PR bootstrap/32009
>>> +     * doc/install.texi: Correct references to CFLAGS, replacing them
>>> +     with BOOT_CFLAGS.  Document flags used during bootstrap for
>>> +     target libraries.
>>> +
>>> +
>>> +---
>>> + Makefile.def           |   25
>>> + Makefile.in            | 1845 ++++++++++++++++++++++++++++++---------
>>> ----------
>>> + Makefile.tpl           |   91 +-
>>> + config/mh-ppc-darwin   |    3
>>> + configure              |   36
>>> + configure.ac           |   32
>>> + gcc/Makefile.in        |    2
>>> + gcc/configure          |    6
>>> + gcc/configure.ac       |    3
>>> + gcc/doc/install.texi   |   56 -
>>> + libiberty/Makefile.in  |  162 ++--
>>> + libiberty/configure    |   46 -
>>> + libiberty/configure.ac |   43 -
>>> + 13 files changed, 1454 insertions(+), 896 deletions(-)
>>> +
>>> +Index: gcc-4.6.0/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/configure
>>> ++++ gcc-4.6.0/configure
>>> +@@ -6785,6 +6785,38 @@ if test "x$CXXFLAGS_FOR_TARGET" = x; the
>>> + fi
>>> +
>>> +
>>> ++# During gcc bootstrap, if we use some random cc for stage1 then
>>> CFLAGS
>>> ++# might be empty or "-g".  We don't require a C++ compiler, so
>>> CXXFLAGS
>>> ++# might also be empty (or "-g", if a non-GCC C++ compiler is in the
>>> path).
>>> ++# We want to ensure that TARGET libraries (which we know are built
>>> with
>>> ++# gcc) are built with "-O2 -g", so include those options when setting
>>> ++# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET.
>>> ++if test "x$CFLAGS_FOR_TARGET" = x; then
>>> ++  CFLAGS_FOR_TARGET=$CFLAGS
>>> ++  case " $CFLAGS " in
>>> ++    *" -O2 "*) ;;
>>> ++    *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;;
>>> ++  esac
>>> ++  case " $CFLAGS " in
>>> ++    *" -g "* | *" -g3 "*) ;;
>>> ++    *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;;
>>> ++  esac
>>> ++fi
>>> ++
>>> ++
>>> ++if test "x$CXXFLAGS_FOR_TARGET" = x; then
>>> ++  CXXFLAGS_FOR_TARGET=$CXXFLAGS
>>> ++  case " $CXXFLAGS " in
>>> ++    *" -O2 "*) ;;
>>> ++    *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;;
>>> ++  esac
>>> ++  case " $CXXFLAGS " in
>>> ++    *" -g "* | *" -g3 "*) ;;
>>> ++    *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;;
>>> ++  esac
>>> ++fi
>>> ++
>>> ++
>>> + # Handle --with-headers=XXX.  If the value is not "yes", the contents
>>> of
>>> + # the named directory are copied to $(tooldir)/sys-include.
>>> + if test x"${with_headers}" != x&&  test x"${with_headers}" != xno ;
>>> then
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-arm-frename-
>>> registers.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-arm-frename-
>>> registers.patch
>>> new file mode 100644
>>> index 0000000..280b903
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-arm-frename-
>>> registers.patch
>>> @@ -0,0 +1,25 @@
>>> +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35964
>>> +Index: gcc-4.3.0/gcc/regrename.c
>>> +===================================================================
>>> +--- gcc-4.3.0.orig/gcc/regrename.c   2008-05-28 08:31:15.000000000 -0700
>>> ++++ gcc-4.3.0/gcc/regrename.c        2008-05-28 08:34:00.000000000 -0700
>>> +@@ -782,6 +782,10 @@
>>> +               || (predicated&&  recog_data.operand_type[i] ==
>>> OP_OUT))
>>> +             recog_data.operand_type[i] = OP_INOUT;
>>> +         }
>>> ++      /* Unshare dup_loc RTL */
>>> ++      for (i = 0; i<  recog_data.n_dups; i++)
>>> ++        *recog_data.dup_loc[i] = copy_rtx(*recog_data.dup_loc[i]);
>>> ++
>>> +
>>> +       /* Step 1: Close chains for which we have overlapping reads.
>>> */
>>> +       for (i = 0; i<  n_ops; i++)
>>> +@@ -813,7 +817,7 @@
>>> +                 OP_IN, 0);
>>> +
>>> +       for (i = 0; i<  recog_data.n_dups; i++)
>>> +-        *recog_data.dup_loc[i] = copy_rtx (old_dups[i]);
>>> ++        *recog_data.dup_loc[i] = old_dups[i];
>>> +       for (i = 0; i<  n_ops; i++)
>>> +         *recog_data.operand_loc[i] = old_operands[i];
>>> +       if (recog_data.n_dups)
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-flags-for-
>>> build.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-flags-for-
>>> build.patch
>>> new file mode 100644
>>> index 0000000..f7beb78
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-flags-for-build.patch
>>> @@ -0,0 +1,178 @@
>>> +Index: gcc-4.6.0/Makefile.def
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/Makefile.def
>>> ++++ gcc-4.6.0/Makefile.def
>>> +@@ -243,6 +243,7 @@ flags_to_pass = { flag= AWK ; };
>>> + flags_to_pass = { flag= BISON ; };
>>> + flags_to_pass = { flag= CC_FOR_BUILD ; };
>>> + flags_to_pass = { flag= CFLAGS_FOR_BUILD ; };
>>> ++flags_to_pass = { flag= CPPFLAGS_FOR_BUILD ; };
>>> + flags_to_pass = { flag= CXX_FOR_BUILD ; };
>>> + flags_to_pass = { flag= EXPECT ; };
>>> + flags_to_pass = { flag= FLEX ; };
>>> +Index: gcc-4.6.0/gcc/Makefile.in
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/Makefile.in
>>> ++++ gcc-4.6.0/gcc/Makefile.in
>>> +@@ -770,7 +770,7 @@ BUILD_LINKERFLAGS = $(BUILD_CFLAGS)
>>> +
>>> + # Native linker and preprocessor flags.  For x-fragment overrides.
>>> + BUILD_LDFLAGS=@BUILD_LDFLAGS@
>>> +-BUILD_CPPFLAGS=$(ALL_CPPFLAGS)
>>> ++BUILD_CPPFLAGS=$(INCLUDES) @BUILD_CPPFLAGS@ $(X_CPPFLAGS)
>>> +
>>> + # Actual name to use when installing a native compiler.
>>> + GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
>>> +Index: gcc-4.6.0/gcc/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure.ac
>>> ++++ gcc-4.6.0/gcc/configure.ac
>>> +@@ -1784,16 +1784,18 @@ AC_SUBST(inhibit_libc)
>>> + # Also, we cannot run fixincludes.
>>> +
>>> + # These are the normal (build=host) settings:
>>> +-CC_FOR_BUILD='$(CC)'                AC_SUBST(CC_FOR_BUILD)
>>> +-BUILD_CFLAGS='$(ALL_CFLAGS)'        AC_SUBST(BUILD_CFLAGS)
>>> +-BUILD_LDFLAGS='$(LDFLAGS)'  AC_SUBST(BUILD_LDFLAGS)
>>> +-STMP_FIXINC=stmp-fixinc             AC_SUBST(STMP_FIXINC)
>>> ++CC_FOR_BUILD='$(CC)'                        AC_SUBST(CC_FOR_BUILD)
>>> ++BUILD_CFLAGS='$(ALL_CFLAGS)'                AC_SUBST(BUILD_CFLAGS)
>>> ++BUILD_LDFLAGS='$(LDFLAGS)'          AC_SUBST(BUILD_LDFLAGS)
>>> ++BUILD_CPPFLAGS='$(ALL_CPPFLAGS)'    AC_SUBST(BUILD_CPPFLAGS)
>>> ++STMP_FIXINC=stmp-fixinc                     AC_SUBST(STMP_FIXINC)
>>> +
>>> + # And these apply if build != host, or we are generating coverage
>>> data
>>> + if test x$build != x$host || test "x$coverage_flags" != x
>>> + then
>>> +     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
>>> +     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
>>> ++    BUILD_CPPFLAGS='$(CPPFLAGS_FOR_BUILD)'
>>> + fi
>>> +
>>> + # Expand extra_headers to include complete path.
>>> +Index: gcc-4.6.0/Makefile.in
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/Makefile.in
>>> ++++ gcc-4.6.0/Makefile.in
>>> +@@ -338,6 +338,7 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
>>> + AS_FOR_BUILD = @AS_FOR_BUILD@
>>> + CC_FOR_BUILD = @CC_FOR_BUILD@
>>> + CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
>>> ++CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
>>> + CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
>>> + CXX_FOR_BUILD = @CXX_FOR_BUILD@
>>> + DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
>>> +@@ -691,6 +692,7 @@ BASE_FLAGS_TO_PASS = \
>>> +     "BISON=$(BISON)" \
>>> +     "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
>>> +     "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
>>> ++    "CPPFLAGS_FOR_BUILD=$(CPPFLAGS_FOR_BUILD)" \
>>> +     "CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
>>> +     "EXPECT=$(EXPECT)" \
>>> +     "FLEX=$(FLEX)" \
>>> +Index: gcc-4.6.0/gcc/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure
>>> ++++ gcc-4.6.0/gcc/configure
>>> +@@ -703,6 +703,7 @@ SED
>>> + LIBTOOL
>>> + collect2
>>> + STMP_FIXINC
>>> ++BUILD_CPPFLAGS
>>> + BUILD_LDFLAGS
>>> + BUILD_CFLAGS
>>> + CC_FOR_BUILD
>>> +@@ -11382,6 +11383,7 @@ fi
>>> + CC_FOR_BUILD='$(CC)'
>>> + BUILD_CFLAGS='$(ALL_CFLAGS)'
>>> + BUILD_LDFLAGS='$(LDFLAGS)'
>>> ++BUILD_CPPFLAGS='$(ALL_CPPFLAGS)'
>>> + STMP_FIXINC=stmp-fixinc
>>> +
>>> + # And these apply if build != host, or we are generating coverage
>>> data
>>> +@@ -11389,6 +11391,7 @@ if test x$build != x$host || test "x$cov
>>> + then
>>> +     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
>>> +     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
>>> ++    BUILD_CPPFLAGS='$(CPPFLAGS_FOR_BUILD)'
>>> + fi
>>> +
>>> + # Expand extra_headers to include complete path.
>>> +@@ -17505,7 +17508,7 @@ else
>>> +   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>> +   lt_status=$lt_dlunknown
>>> +   cat>  conftest.$ac_ext<<_LT_EOF
>>> +-#line 17508 "configure"
>>> ++#line 17511 "configure"
>>> + #include "confdefs.h"
>>> +
>>> + #if HAVE_DLFCN_H
>>> +@@ -17611,7 +17614,7 @@ else
>>> +   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>> +   lt_status=$lt_dlunknown
>>> +   cat>  conftest.$ac_ext<<_LT_EOF
>>> +-#line 17614 "configure"
>>> ++#line 17617 "configure"
>>> + #include "confdefs.h"
>>> +
>>> + #if HAVE_DLFCN_H
>>> +Index: gcc-4.6.0/Makefile.tpl
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/Makefile.tpl
>>> ++++ gcc-4.6.0/Makefile.tpl
>>> +@@ -341,6 +341,7 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
>>> + AS_FOR_BUILD = @AS_FOR_BUILD@
>>> + CC_FOR_BUILD = @CC_FOR_BUILD@
>>> + CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
>>> ++CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
>>> + CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
>>> + CXX_FOR_BUILD = @CXX_FOR_BUILD@
>>> + DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
>>> +Index: gcc-4.6.0/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/configure.ac
>>> ++++ gcc-4.6.0/configure.ac
>>> +@@ -3154,6 +3154,7 @@ esac
>>> + # our build compiler if desired.
>>> + if test x"${build}" = x"${host}" ; then
>>> +   CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
>>> ++  CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
>>> +   CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
>>> +   LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
>>> + fi
>>> +@@ -3220,6 +3221,7 @@ AC_SUBST(AR_FOR_BUILD)
>>> + AC_SUBST(AS_FOR_BUILD)
>>> + AC_SUBST(CC_FOR_BUILD)
>>> + AC_SUBST(CFLAGS_FOR_BUILD)
>>> ++AC_SUBST(CPPFLAGS_FOR_BUILD)
>>> + AC_SUBST(CXXFLAGS_FOR_BUILD)
>>> + AC_SUBST(CXX_FOR_BUILD)
>>> + AC_SUBST(DLLTOOL_FOR_BUILD)
>>> +Index: gcc-4.6.0/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/configure
>>> ++++ gcc-4.6.0/configure
>>> +@@ -617,6 +617,7 @@ GCJ_FOR_BUILD
>>> + DLLTOOL_FOR_BUILD
>>> + CXX_FOR_BUILD
>>> + CXXFLAGS_FOR_BUILD
>>> ++CPPFLAGS_FOR_BUILD
>>> + CFLAGS_FOR_BUILD
>>> + CC_FOR_BUILD
>>> + AS_FOR_BUILD
>>> +@@ -7675,6 +7676,7 @@ esac
>>> + # our build compiler if desired.
>>> + if test x"${build}" = x"${host}" ; then
>>> +   CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
>>> ++  CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
>>> +   CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
>>> +   LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
>>> + fi
>>> +@@ -7740,6 +7742,7 @@ done
>>> +
>>> +
>>> +
>>> ++
>>> +
>>> +
>>> +
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-ice-hack.dpatch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-ice-hack.dpatch
>>> new file mode 100644
>>> index 0000000..84c5ef2
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-ice-hack.dpatch
>>> @@ -0,0 +1,331 @@
>>> +#! /bin/sh -e
>>> +
>>> +# DP: Retry the build on an ice, save the calling options and
>>> preprocessed
>>> +# DP: source when the ice is reproducible.
>>> +
>>> +dir=
>>> +if [ $# -eq 3 -a "$2" = '-d' ]; then
>>> +    pdir="-d $3"
>>> +    dir="$3/"
>>> +elif [ $# -ne 1 ]; then
>>> +    echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +    exit 1
>>> +fi
>>> +case "$1" in
>>> +    -patch)
>>> +        patch $pdir -f --no-backup-if-mismatch -p0<  $0
>>> +        ;;
>>> +    -unpatch)
>>> +        patch $pdir -f --no-backup-if-mismatch -R -p0<  $0
>>> +        ;;
>>> +    *)
>>> +        echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +        exit 1
>>> +esac
>>> +exit 0
>>> +
>>> +2004-01-23  Jakub Jelinek<jakub at redhat.com>
>>> +
>>> +     * system.h (ICE_EXIT_CODE): Define.
>>> +     * gcc.c (execute): Don't free first string early, but at the end
>>> +     of the function.  Call retry_ice if compiler exited with
>>> +     ICE_EXIT_CODE.
>>> +     (retry_ice): New function.
>>> +     * diagnostic.c (diagnostic_count_diagnostic,
>>> +     diagnostic_action_after_output, error_recursion): Exit with
>>> +     ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
>>> +
>>> +--- gcc/diagnostic.c.orig    2007-09-30 10:48:13.000000000 +0000
>>> ++++ gcc/diagnostic.c 2007-09-30 10:49:57.000000000 +0000
>>> +@@ -244,7 +244,7 @@
>>> +       fnotice (stderr, "Please submit a full bug report,\n"
>>> +            "with preprocessed source if appropriate.\n"
>>> +            "See %s for instructions.\n", bug_report_url);
>>> +-      exit (ICE_EXIT_CODE);
>>> ++      exit (FATAL_EXIT_CODE);
>>> +
>>> +     case DK_FATAL:
>>> +       if (context->abort_on_error)
>>> +--- gcc/gcc.c.orig   2007-09-30 10:48:13.000000000 +0000
>>> ++++ gcc/gcc.c        2007-09-30 10:48:39.000000000 +0000
>>> +@@ -357,6 +357,9 @@
>>> + #if defined(HAVE_TARGET_OBJECT_SUFFIX) ||
>>> defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
>>> + static const char *convert_filename (const char *, int, int);
>>> + #endif
>>> ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
>>> ++static void retry_ice (const char *prog, const char **argv);
>>> ++#endif
>>> +
>>> + static const char *getenv_spec_function (int, const char **);
>>> + static const char *if_exists_spec_function (int, const char **);
>>> +@@ -2999,7 +3002,7 @@
>>> +         }
>>> +     }
>>> +
>>> +-      if (string != commands[i].prog)
>>> ++      if (i&&  string != commands[i].prog)
>>> +     free (CONST_CAST (char *, string));
>>> +     }
>>> +
>>> +@@ -3056,6 +3059,16 @@
>>> +     else if (WIFEXITED (status)
>>> +&&  WEXITSTATUS (status)>= MIN_FATAL_STATUS)
>>> +       {
>>> ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
>>> ++        /* For ICEs in cc1, cc1obj, cc1plus see if it is
>>> ++           reproducible or not.  */
>>> ++        char *p;
>>> ++        if (WEXITSTATUS (status) == ICE_EXIT_CODE
>>> ++&&  i == 0
>>> ++&&  (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
>>> ++&&  ! strncmp (p + 1, "cc1", 3))
>>> ++          retry_ice (commands[0].prog, commands[0].argv);
>>> ++#endif
>>> +         if (WEXITSTATUS (status)>  greatest_status)
>>> +           greatest_status = WEXITSTATUS (status);
>>> +         ret_code = -1;
>>> +@@ -3076,6 +3089,9 @@
>>> +       }
>>> +       }
>>> +
>>> ++    if (commands[0].argv[0] != commands[0].prog)
>>> ++      free ((PTR) commands[0].argv[0]);
>>> ++
>>> +     return ret_code;
>>> +   }
>>> + }
>>> +@@ -6016,6 +6032,224 @@
>>> +   switches[switchnum].validated = 1;
>>> + }
>>> +
>> 
>>> ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
>>> ++#define RETRY_ICE_ATTEMPTS 2
>>> ++
>>> ++static void
>>> ++retry_ice (const char *prog, const char **argv)
>>> ++{
>>> ++  int nargs, out_arg = -1, quiet = 0, attempt;
>>> ++  int pid, retries, sleep_interval;
>>> ++  const char **new_argv;
>>> ++  char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2];
>>> ++
>>> ++  if (input_filename == NULL || ! strcmp (input_filename, "-"))
>>> ++    return;
>>> ++
>>> ++  for (nargs = 0; argv[nargs] != NULL; ++nargs)
>>> ++    /* Only retry compiler ICEs, not preprocessor ones.  */
>>> ++    if (! strcmp (argv[nargs], "-E"))
>>> ++      return;
>>> ++    else if (argv[nargs][0] == '-'&&  argv[nargs][1] == 'o')
>>> ++      {
>>> ++    if (out_arg == -1)
>>> ++      out_arg = nargs;
>>> ++    else
>>> ++      return;
>>> ++      }
>>> ++    /* If the compiler is going to output any time information,
>>> ++       it might vary between invocations.  */
>>> ++    else if (! strcmp (argv[nargs], "-quiet"))
>>> ++      quiet = 1;
>>> ++    else if (! strcmp (argv[nargs], "-ftime-report"))
>>> ++      return;
>>> ++
>>> ++  if (out_arg == -1 || !quiet)
>>> ++    return;
>>> ++
>>> ++  memset (temp_filenames, '\0', sizeof (temp_filenames));
>>> ++  new_argv = alloca ((nargs + 3) * sizeof (const char *));
>>> ++  memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
>>> ++  new_argv[nargs++] = "-frandom-seed=0";
>>> ++  new_argv[nargs] = NULL;
>>> ++  if (new_argv[out_arg][2] == '\0')
>>> ++    new_argv[out_arg + 1] = "-";
>>> ++  else
>>> ++    new_argv[out_arg] = "-o-";
>>> ++
>>> ++  for (attempt = 0; attempt<  RETRY_ICE_ATTEMPTS + 1; ++attempt)
>>> ++    {
>>> ++      int fd = -1;
>>> ++      int status;
>>> ++
>>> ++      temp_filenames[attempt * 2] = make_temp_file (".out");
>>> ++      temp_filenames[attempt * 2 + 1] = make_temp_file (".err");
>>> ++
>>> ++      if (attempt == RETRY_ICE_ATTEMPTS)
>>> ++        {
>>> ++      int i;
>>> ++      int fd1, fd2;
>>> ++      struct stat st1, st2;
>>> ++      size_t n, len;
>>> ++      char *buf;
>>> ++
>>> ++      buf = xmalloc (8192);
>>> ++
>>> ++      for (i = 0; i<  2; ++i)
>>> ++        {
>>> ++          fd1 = open (temp_filenames[i], O_RDONLY);
>>> ++          fd2 = open (temp_filenames[2 + i], O_RDONLY);
>>> ++
>>> ++          if (fd1<  0 || fd2<  0)
>>> ++            {
>>> ++              i = -1;
>>> ++              close (fd1);
>>> ++              close (fd2);
>>> ++              break;
>>> ++            }
>>> ++
>>> ++          if (fstat (fd1,&st1)<  0 || fstat (fd2,&st2)<  0)
>>> ++            {
>>> ++              i = -1;
>>> ++              close (fd1);
>>> ++              close (fd2);
>>> ++              break;
>>> ++            }
>>> ++
>>> ++          if (st1.st_size != st2.st_size)
>>> ++            {
>>> ++              close (fd1);
>>> ++              close (fd2);
>>> ++              break;
>>> ++            }
>>> ++
>>> ++          len = 0;
>>> ++          for (n = st1.st_size; n; n -= len)
>>> ++            {
>>> ++              len = n;
>>> ++              if (len>  4096)
>>> ++                len = 4096;
>>> ++
>>> ++              if (read (fd1, buf, len) != (int) len
>>> ++                  || read (fd2, buf + 4096, len) != (int) len)
>>> ++                {
>>> ++                  i = -1;
>>> ++                  break;
>>> ++                }
>>> ++
>>> ++              if (memcmp (buf, buf + 4096, len) != 0)
>>> ++                break;
>>> ++            }
>>> ++
>>> ++          close (fd1);
>>> ++          close (fd2);
>>> ++
>>> ++          if (n)
>>> ++            break;
>>> ++        }
>>> ++
>>> ++      free (buf);
>>> ++      if (i == -1)
>>> ++        break;
>>> ++
>>> ++      if (i != 2)
>>> ++        {
>>> ++          notice ("The bug is not reproducible, so it is likely a
>>> hardware or OS problem.\n");
>>> ++          break;
>>> ++        }
>>> ++
>>> ++          fd = open (temp_filenames[attempt * 2], O_RDWR);
>>> ++      if (fd<  0)
>>> ++        break;
>>> ++      write (fd, "//", 2);
>>> ++      for (i = 0; i<  nargs; i++)
>>> ++        {
>>> ++          write (fd, " ", 1);
>>> ++          write (fd, new_argv[i], strlen (new_argv[i]));
>>> ++        }
>>> ++      write (fd, "\n", 1);
>>> ++      new_argv[nargs] = "-E";
>>> ++      new_argv[nargs + 1] = NULL;
>>> ++        }
>>> ++
>>> ++      /* Fork a subprocess; wait and retry if it fails.  */
>>> ++      sleep_interval = 1;
>>> ++      pid = -1;
>>> ++      for (retries = 0; retries<  4; retries++)
>>> ++    {
>>> ++      pid = fork ();
>>> ++      if (pid>= 0)
>>> ++        break;
>>> ++      sleep (sleep_interval);
>>> ++      sleep_interval *= 2;
>>> ++    }
>>> ++
>>> ++      if (pid<  0)
>>> ++    break;
>>> ++      else if (pid == 0)
>>> ++    {
>>> ++      if (attempt != RETRY_ICE_ATTEMPTS)
>>> ++        fd = open (temp_filenames[attempt * 2], O_RDWR);
>>> ++      if (fd<  0)
>>> ++        exit (-1);
>>> ++      if (fd != 1)
>>> ++        {
>>> ++          close (1);
>>> ++          dup (fd);
>>> ++          close (fd);
>>> ++        }
>>> ++
>>> ++      fd = open (temp_filenames[attempt * 2 + 1], O_RDWR);
>>> ++      if (fd<  0)
>>> ++        exit (-1);
>>> ++      if (fd != 2)
>>> ++        {
>>> ++          close (2);
>>> ++          dup (fd);
>>> ++          close (fd);
>>> ++        }
>>> ++
>>> ++      if (prog == new_argv[0])
>>> ++        execvp (prog, (char *const *) new_argv);
>>> ++      else
>>> ++        execv (new_argv[0], (char *const *) new_argv);
>>> ++      exit (-1);
>>> ++    }
>>> ++
>>> ++      if (waitpid (pid,&status, 0)<  0)
>>> ++    break;
>>> ++
>>> ++      if (attempt<  RETRY_ICE_ATTEMPTS
>>> ++&&  (! WIFEXITED (status) || WEXITSTATUS (status) !=
>>> ICE_EXIT_CODE))
>>> ++    {
>>> ++      notice ("The bug is not reproducible, so it is likely a
>>> hardware or OS problem.\n");
>>> ++      break;
>>> ++    }
>>> ++      else if (attempt == RETRY_ICE_ATTEMPTS)
>>> ++    {
>>> ++      close (fd);
>>> ++      if (WIFEXITED (status)
>>> ++&&  WEXITSTATUS (status) == SUCCESS_EXIT_CODE)
>>> ++        {
>>> ++          notice ("Preprocessed source stored into %s file, please
>>> attach this to your bugreport.\n",
>>> ++                  temp_filenames[attempt * 2]);
>>> ++          /* Make sure it is not deleted.  */
>>> ++          free (temp_filenames[attempt * 2]);
>>> ++          temp_filenames[attempt * 2] = NULL;
>>> ++          break;
>>> ++        }
>>> ++    }
>>> ++    }
>>> ++
>>> ++  for (attempt = 0; attempt<  RETRY_ICE_ATTEMPTS * 2 + 2; attempt++)
>>> ++    if (temp_filenames[attempt])
>>> ++      {
>>> ++    unlink (temp_filenames[attempt]);
>>> ++    free (temp_filenames[attempt]);
>>> ++      }
>>> ++}
>>> ++#endif
>>> ++
>> 
>>> + /* Search for a file named NAME trying various prefixes including the
>>> +    user's -B prefix and some standard ones.
>>> +    Return the absolute file name found.  If nothing is found, return
>>> NAME.  */
>>> +--- gcc/Makefile.in.orig     2007-09-30 10:48:13.000000000 +0000
>>> ++++ gcc/Makefile.in  2007-09-30 10:48:39.000000000 +0000
>>> +@@ -192,6 +192,7 @@
>>> + build/gengtype-lex.o-warn = -Wno-error
>>> + # SYSCALLS.c misses prototypes
>>> + SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
>>> ++build/gcc.o-warn = -Wno-error
>>> +
>>> + # All warnings have to be shut off in stage1 if the compiler used
>>> then
>>> + # isn't gcc; configure determines that.  WARN_CFLAGS will be either
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-dir-
>>> extend.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-dir-
>>> extend.patch
>>> new file mode 100644
>>> index 0000000..d477105
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-dir-extend.patch
>>> @@ -0,0 +1,25 @@
>>> +Add /sw/include and /opt/include based on the original
>>> +zecke-no-host-includes.patch patch.  The original patch checked for
>>> +/usr/include, /sw/include and /opt/include and then triggered a
>>> failure and
>>> +aborted.
>>> +
>>> +Instead, we add the two missing items to the current scan.  If the
>>> user
>>> +wants this to be a failure, they can add "-Werror=poison-system-
>>> directories".
>>> +
>>> +Signed-off-by: Mark Hatle<mark.hatle at windriver.com>
>>> +
>>> +Index: gcc-4.6.0/gcc/incpath.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/incpath.c
>>> ++++ gcc-4.6.0/gcc/incpath.c
>>> +@@ -363,7 +363,9 @@ merge_include_chains (const char *sysroo
>>> +          {
>>> +           if ((!strncmp (p->name, "/usr/include", 12))
>>> +               || (!strncmp (p->name, "/usr/local/include", 18))
>>> +-              || (!strncmp (p->name, "/usr/X11R6/include", 18)))
>>> ++              || (!strncmp (p->name, "/usr/X11R6/include", 18))
>>> ++              || (!strncmp (p->name, "/sw/include", 11))
>>> ++              || (!strncmp (p->name, "/opt/include", 12)))
>>> +             warning (OPT_Wpoison_system_directories,
>>> +                      "include location \"%s\" is unsafe for "
>>> +                      "cross-compilation",
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-
>>> parameters.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-
>>> parameters.patch
>>> new file mode 100644
>>> index 0000000..f36fa81
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-parameters.patch
>>> @@ -0,0 +1,74 @@
>>> +gcc: add poison parameters detection
>>> +
>>> +Add the logic that, if not configured with "--enable-target-optspace",
>>> +gcc will meet error when build target app with "-Os" option.
>>> +This could avoid potential binary crash.
>>> +
>>> +Signed-off-by: Dongxiao Xu<dongxiao.xu at intel.com>
>>> +
>>> +Index: gcc-4.6.0/gcc/config.in
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config.in
>>> ++++ gcc-4.6.0/gcc/config.in
>>> +@@ -150,6 +150,12 @@
>>> + #endif
>>> +
>>> +
>>> ++/* Define to enable target optspace support. */
>>> ++#ifndef USED_FOR_TARGET
>>> ++#undef ENABLE_TARGET_OPTSPACE
>>> ++#endif
>>> ++
>>> ++
>>> + /* Define if you want all operations on RTL (the basic data structure
>>> of the
>>> +    optimizer and back end) to be checked for dynamic type safety at
>>> runtime.
>>> +    This is quite expensive. */
>>> +Index: gcc-4.6.0/gcc/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure
>>> ++++ gcc-4.6.0/gcc/configure
>>> +@@ -26434,6 +26434,13 @@ $as_echo "#define ENABLE_LIBQUADMATH_SUP
>>> + fi
>>> +
>>> +
>>> ++if test x"$enable_target_optspace" != x; then :
>>> ++
>>> ++$as_echo "#define ENABLE_TARGET_OPTSPACE 1">>confdefs.h
>>> ++
>>> ++fi
>>> ++
>>> ++
>>> + # Configure the subdirectories
>>> + # AC_CONFIG_SUBDIRS($subdirs)
>>> +
>>> +Index: gcc-4.6.0/gcc/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure.ac
>>> ++++ gcc-4.6.0/gcc/configure.ac
>>> +@@ -4907,6 +4907,11 @@ if test "${ENABLE_LIBQUADMATH_SUPPORT}"
>>> + fi
>>> +
>>> +
>>> ++AC_SUBST(enable_target_optspace)
>>> ++if test x"$enable_target_optspace" != x; then
>>> ++  AC_DEFINE(ENABLE_TARGET_OPTSPACE, 1, [Define to enable target
>>> optspace support.])
>>> ++fi
>>> ++
>>> + # Configure the subdirectories
>>> + # AC_CONFIG_SUBDIRS($subdirs)
>>> +
>>> +Index: gcc-4.6.0/gcc/opts.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/opts.c
>>> ++++ gcc-4.6.0/gcc/opts.c
>>> +@@ -605,6 +605,10 @@ default_options_optimization (struct gcc
>>> +     maybe_set_param_value (PARAM_MIN_CROSSJUMP_INSNS,
>>> +                        default_param_value (PARAM_MIN_CROSSJUMP_INSNS),
>>> +                        opts->x_param_values, opts_set->x_param_values);
>>> ++#ifndef ENABLE_TARGET_OPTSPACE
>>> ++  if (optimize_size == 1)
>>> ++    error ("Do not use -Os option if --enable-target-optspace is not
>>> set.");
>>> ++#endif
>>> +
>>> +   /* Allow default optimizations to be specified on a per-machine
>>> basis.  */
>>> +   maybe_default_options (opts, opts_set,
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-system-
>>> directories.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-
>>> system-directories.patch
>>> new file mode 100644
>>> index 0000000..e1b7131
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-poison-system-
>>> directories.patch
>>> @@ -0,0 +1,221 @@
>>> +       gcc/
>>> +       2008-07-02  Joseph Myers<joseph at codesourcery.com>
>>> +       * c-incpath.c: Include toplev.h.
>>> +       (merge_include_chains): Use warning instead of cpp_error for
>>> +       system directory poisoning diagnostic.
>>> +       * Makefile.in (c-incpath.o): Depend on toplev.h.
>>> +       * gcc.c (LINK_COMMAND_SPEC): Pass
>>> +       --error-poison-system-directories if
>>> +       -Werror=poison-system-directories.
>>> +
>>> +       2007-06-13  Joseph Myers<joseph at codesourcery.com>
>>> +       * common.opt (--Wno-poison-system-directories): New.
>>> +       * doc/invoke.texi (-Wno-poison-system-directories): Document.
>>> +       * c-incpath.c: Include flags.h.
>>> +       (merge_include_chains): Check flag_poison_system_directories.
>>> +       * gcc.c (LINK_COMMAND_SPEC): Pass --no-poison-system-
>>> directories
>>> +       to linker if -Wno-poison-system-directories.
>>> +       * Makefile.in (c-incpath.o): Depend on $(FLAGS_H).
>>> +
>>> +       2007-03-20  Daniel Jacobowitz<dan at codesourcery.com>
>>> +                   Joseph Myers<joseph at codesourcery.com>
>>> +       * configure.ac (--enable-poison-system-directories): New
>>> option.
>>> +       * configure, config.in: Regenerate.
>>> +       * c-incpath.c (merge_include_chains): If
>>> +       ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of
>>> +       /usr/include, /usr/local/include or /usr/X11R6/include.
>>> +
>>> +Index: gcc-4.6.0/gcc/common.opt
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/common.opt
>>> ++++ gcc-4.6.0/gcc/common.opt
>>> +@@ -558,6 +558,10 @@ Wpadded
>>> + Common Var(warn_padded) Warning
>>> + Warn when padding is required to align structure members
>>> +
>>> ++Wpoison-system-directories
>>> ++Common Var(flag_poison_system_directories) Init(1) Warning
>>> ++Warn for -I and -L options using system directories if cross
>>> compiling
>>> ++
>>> + Wshadow
>>> + Common Var(warn_shadow) Warning
>>> + Warn when one local variable shadows another
>>> +Index: gcc-4.6.0/gcc/config.in
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/config.in
>>> ++++ gcc-4.6.0/gcc/config.in
>>> +@@ -144,6 +144,12 @@
>>> + #endif
>>> +
>>> +
>>> ++/* Define to warn for use of native system header directories */
>>> ++#ifndef USED_FOR_TARGET
>>> ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES
>>> ++#endif
>>> ++
>>> ++
>>> + /* Define if you want all operations on RTL (the basic data structure
>>> of the
>>> +    optimizer and back end) to be checked for dynamic type safety at
>>> runtime.
>>> +    This is quite expensive. */
>>> +Index: gcc-4.6.0/gcc/configure.ac
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure.ac
>>> ++++ gcc-4.6.0/gcc/configure.ac
>>> +@@ -4694,6 +4694,16 @@ else
>>> + fi)
>>> + AC_SUBST(slibdir)
>>> +
>>> ++AC_ARG_ENABLE([poison-system-directories],
>>> ++             AS_HELP_STRING([--enable-poison-system-directories],
>>> ++                            [warn for use of native system header
>>> directories]),,
>>> ++             [enable_poison_system_directories=no])
>>> ++if test "x${enable_poison_system_directories}" = "xyes"; then
>>> ++  AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
>>> ++           [1],
>>> ++           [Define to warn for use of native system header
>>> directories])
>>> ++fi
>>> ++
>>> + # Substitute configuration variables
>>> + AC_SUBST(subdirs)
>>> + AC_SUBST(srcdir)
>>> +Index: gcc-4.6.0/gcc/doc/invoke.texi
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/doc/invoke.texi
>>> ++++ gcc-4.6.0/gcc/doc/invoke.texi
>>> +@@ -257,6 +257,7 @@ Objective-C and Objective-C++ Dialects}.
>>> + -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
>>> @gol
>>> + -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
>>> + -Wpointer-arith  -Wno-pointer-to-int-cast @gol
>>> ++-Wno-poison-system-directories @gol
>>> + -Wredundant-decls @gol
>>> + -Wreturn-type  -Wsequence-point  -Wshadow @gol
>>> + -Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
>>> +@@ -3773,6 +3774,14 @@ headers---for that, @option{-Wunknown-pr
>>> +  for most targets, it is made up of code and thus requires the stack
>>> +  to be made executable in order for the program to work properly.
>>> +
>>> ++ at item -Wno-poison-system-directories
>>> ++ at opindex Wno-poison-system-directories
>>> ++Do not warn for @option{-I} or @option{-L} options using system
>>> ++directories such as @file{/usr/include} when cross compiling.  This
>>> ++option is intended for use in chroot environments when such
>>> ++directories contain the correct headers and libraries for the target
>>> ++system rather than the host.
>>> ++
>>> + @item -Wfloat-equal
>>> + @opindex Wfloat-equal
>>> + @opindex Wno-float-equal
>>> +Index: gcc-4.6.0/gcc/gcc.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/gcc.c
>>> ++++ gcc-4.6.0/gcc/gcc.c
>>> +@@ -659,6 +659,8 @@ proper position among the other output f
>>> +     %{flto} %{flto=*} %l " LINK_PIE_SPEC \
>>> +    "%X %{o*} %{e*} %{N} %{n} %{r}\
>>> +     %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\
>>> ++    %{Wno-poison-system-directories:--no-poison-system-directories}\
>>> ++    %{Werror=poison-system-directories:--error-poison-system-
>>> directories}\
>>> +     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
>>> +     %{fopenmp|ftree-parallelize-
>>> loops=*:%:include(libgomp.spec)%(link_gomp)}\
>>> +     %(mflib) " STACK_SPLIT_SPEC "\
>>> +Index: gcc-4.6.0/gcc/incpath.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/incpath.c
>>> ++++ gcc-4.6.0/gcc/incpath.c
>>> +@@ -353,6 +353,24 @@ merge_include_chains (const char *sysroo
>>> +     }
>>> +       fprintf (stderr, _("End of search list.\n"));
>>> +     }
>>> ++
>>> ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
>>> ++  if (flag_poison_system_directories)
>>> ++    {
>>> ++       struct cpp_dir *p;
>>> ++
>>> ++       for (p = heads[QUOTE]; p; p = p->next)
>>> ++         {
>>> ++          if ((!strncmp (p->name, "/usr/include", 12))
>>> ++              || (!strncmp (p->name, "/usr/local/include", 18))
>>> ++              || (!strncmp (p->name, "/usr/X11R6/include", 18)))
>>> ++            warning (OPT_Wpoison_system_directories,
>>> ++                     "include location \"%s\" is unsafe for "
>>> ++                     "cross-compilation",
>>> ++                     p->name);
>>> ++         }
>>> ++    }
>>> ++#endif
>>> + }
>>> +
>>> + /* Use given -I paths for #include "..." but not #include<...>, and
>>> +Index: gcc-4.6.0/gcc/Makefile.in
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/Makefile.in
>>> ++++ gcc-4.6.0/gcc/Makefile.in
>>> +@@ -2179,7 +2179,7 @@ attribs.o : attribs.c $(CONFIG_H) $(SYST
>>> +
>>> + incpath.o: incpath.c incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
>>> +             intl.h prefix.h coretypes.h $(TM_H) cppdefault.h
>>> $(TARGET_H) \
>>> +-            $(MACHMODE_H)
>>> ++            $(MACHMODE_H) $(FLAGS_H) toplev.h
>>> +
>>> + prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
>>> prefix.h \
>>> +     Makefile $(BASEVER)
>>> +Index: gcc-4.6.0/gcc/configure
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/configure
>>> ++++ gcc-4.6.0/gcc/configure
>>> +@@ -912,6 +912,7 @@ with_system_zlib
>>> + enable_maintainer_mode
>>> + enable_version_specific_runtime_libs
>>> + with_slibdir
>>> ++enable_poison_system_directories
>>> + enable_plugin
>>> + enable_libquadmath_support
>>> + '
>>> +@@ -1623,6 +1624,8 @@ Optional Features:
>>> +   --enable-version-specific-runtime-libs
>>> +                           specify that runtime libraries should be
>>> +                           installed in a compiler-specific directory
>>> ++  --enable-poison-system-directories
>>> ++                          warn for use of native system header
>>> directories
>>> +   --enable-plugin         enable plugin support
>>> +   --disable-libquadmath-support
>>> +                           disable libquadmath support for Fortran
>>> +@@ -17508,7 +17511,7 @@ else
>>> +   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>> +   lt_status=$lt_dlunknown
>>> +   cat>  conftest.$ac_ext<<_LT_EOF
>>> +-#line 17511 "configure"
>>> ++#line 17514 "configure"
>>> + #include "confdefs.h"
>>> +
>>> + #if HAVE_DLFCN_H
>>> +@@ -17614,7 +17617,7 @@ else
>>> +   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>> +   lt_status=$lt_dlunknown
>>> +   cat>  conftest.$ac_ext<<_LT_EOF
>>> +-#line 17617 "configure"
>>> ++#line 17620 "configure"
>>> + #include "confdefs.h"
>>> +
>>> + #if HAVE_DLFCN_H
>>> +@@ -26127,6 +26130,19 @@ fi
>>> +
>>> +
>>> +
>>> ++# Check whether --enable-poison-system-directories was given.
>>> ++if test "${enable_poison_system_directories+set}" = set; then :
>>> ++  enableval=$enable_poison_system_directories;
>>> ++else
>>> ++  enable_poison_system_directories=no
>>> ++fi
>>> ++
>>> ++if test "x${enable_poison_system_directories}" = "xyes"; then
>>> ++
>>> ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1">>confdefs.h
>>> ++
>>> ++fi
>>> ++
>>> + # Substitute configuration variables
>>> +
>>> +
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-uclibc-locale-
>>> ctype_touplow_t.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-uclibc-
>>> locale-ctype_touplow_t.patch
>>> new file mode 100644
>>> index 0000000..8b71e31
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-uclibc-locale-
>>> ctype_touplow_t.patch
>>> @@ -0,0 +1,70 @@
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/generic/c_locale.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.h
>>> +@@ -41,13 +41,22 @@
>>> +
>>> + #include<clocale>
>>> +
>>> ++#ifdef __UCLIBC__
>>> ++#include<features.h>
>>> ++#include<ctype.h>
>>> ++#endif
>>> ++
>>> + #define _GLIBCXX_NUM_CATEGORIES 0
>>> +
>>> + namespace std _GLIBCXX_VISIBILITY(default)
>>> + {
>>> + _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> +
>>> ++#ifdef __UCLIBC__
>>> ++  typedef __ctype_touplow_t*        __c_locale;
>>> ++#else
>>> +   typedef int*                      __c_locale;
>>> ++#endif
>>> +
>>> +   // Convert numeric value of type double and long double to string
>>> and
>>> +   // return length of string.  If vsnprintf is available use it,
>>> otherwise
>>> +Index: gcc-4.6.0/libstdc++-v3/config/os/gnu-linux/ctype_base.h
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/os/gnu-linux/ctype_base.h
>>> ++++ gcc-4.6.0/libstdc++-v3/config/os/gnu-linux/ctype_base.h
>>> +@@ -34,6 +34,11 @@
>>> +
>>> + // Information as gleaned from /usr/include/ctype.h
>>> +
>>> ++#ifdef __UCLIBC__
>>> ++#include<features.h>
>>> ++#include<ctype.h>
>>> ++#endif
>>> ++
>>> + namespace std _GLIBCXX_VISIBILITY(default)
>>> + {
>>> + _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> +@@ -42,7 +47,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> +   struct ctype_base
>>> +   {
>>> +     // Non-standard typedefs.
>>> ++#ifdef __UCLIBC__
>>> ++    typedef const __ctype_touplow_t*        __to_type;
>>> ++#else
>>> +     typedef const int*              __to_type;
>>> ++#endif
>>> +
>>> +     // NB: Offsets into ctype<char>::_M_table force a particular size
>>> +     // on the mask type. Because of this, we don't use an enum.
>>> +Index: gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.cc
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/libstdc++-v3/config/locale/generic/c_locale.cc
>>> ++++ gcc-4.6.0/libstdc++-v3/config/locale/generic/c_locale.cc
>>> +@@ -264,5 +264,10 @@ _GLIBCXX_END_NAMESPACE_VERSION
>>> + #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
>>> + #define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
>>> +   extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
>>> ++#ifdef __UCLIBC__
>>> ++// This is because __c_locale is of type __ctype_touplow_t* which is
>>> short on uclibc. for glibc its int*
>>> ++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateR
>>> KPs, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPs);
>>> ++#else
>>> +
>>> _GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP
>>> i, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
>>> ++#endif
>>> + #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/libstdc++-pic.dpatch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/libstdc++-pic.dpatch
>>> new file mode 100644
>>> index 0000000..70c9e81
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/libstdc++-pic.dpatch
>>> @@ -0,0 +1,71 @@
>>> +#! /bin/sh -e
>>> +
>>> +# DP: Build and install libstdc++_pic.a library.
>>> +
>>> +dir=
>>> +if [ $# -eq 3 -a "$2" = '-d' ]; then
>>> +    pdir="-d $3"
>>> +    dir="$3/"
>>> +elif [ $# -ne 1 ]; then
>>> +    echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +    exit 1
>>> +fi
>>> +case "$1" in
>>> +    -patch)
>>> +        patch $pdir -f --no-backup-if-mismatch -p0<  $0
>>> +        ;;
>>> +    -unpatch)
>>> +        patch $pdir -f --no-backup-if-mismatch -R -p0<  $0
>>> +        ;;
>>> +    *)
>>> +        echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +        exit 1
>>> +esac
>>> +exit 0
>>> +
>>> +diff -ur libstdc++-v3/src/Makefile.am libstdc++-v3/src/Makefile.am
>>> +--- libstdc++-v3/src/Makefile.am~    2004-04-16 21:04:05.000000000 +0200
>>> ++++ libstdc++-v3/src/Makefile.am     2004-07-03 20:22:43.000000000 +0200
>>> +@@ -210,6 +210,10 @@
>>> +       $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o
>>> $@
>>> +
>>> +
>>> ++install-exec-local:
>>> ++    $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
>>> || touch libstdc++_pic.a
>>> ++    $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
>>> ++
>>> + # Added bits to build debug library.
>>> + if GLIBCXX_BUILD_DEBUG
>>> + all-local: build_debug
>>> +diff -ur libstdc++-v3/src/Makefile.in libstdc++-v3/src/Makefile.in
>>> +--- libstdc++-v3/src/Makefile.in     2004-07-03 06:41:13.000000000 +0200
>>> ++++ libstdc++-v3/src/Makefile.in     2004-07-03 20:25:05.000000000 +0200
>>> +@@ -611,7 +611,7 @@
>>> +
>>> + install-data-am: install-data-local
>>> +
>>> +-install-exec-am: install-toolexeclibLTLIBRARIES
>>> ++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
>>> +
>>> + install-info: install-info-am
>>> +
>>> +@@ -644,6 +644,7 @@
>>> +     distclean-libtool distclean-tags distdir dvi dvi-am html \
>>> +     html-am info info-am install install-am install-data \
>>> +     install-data-am install-data-local install-exec \
>>> ++    install-exec-local \
>>> +     install-exec-am install-info install-info-am install-man \
>>> +     install-strip install-toolexeclibLTLIBRARIES installcheck \
>>> +     installcheck-am installdirs maintainer-clean \
>>> +@@ -729,6 +730,11 @@
>>> + install_debug:
>>> +     (cd ${debugdir}&&  $(MAKE) \
>>> +     toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
>>> ++
>>> ++install-exec-local:
>>> ++    $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
>>> || touch libstdc++_pic.a
>>> ++    $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
>>> ++
>>> + # Tell versions [3.59,3.63) of GNU make to not export all variables.
>>> + # Otherwise a system limit (for SysV at least) may be exceeded.
>>> + .NOEXPORT:
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/optional_libstdc.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/optional_libstdc.patch
>>> new file mode 100644
>>> index 0000000..f132fbf
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/optional_libstdc.patch
>>> @@ -0,0 +1,84 @@
>>> +gcc-runtime builds libstdc++ separately from gcc-cross-*. Its
>>> configure tests using g++
>>> +will not run correctly since by default the linker will try to link
>>> against libstdc++
>>> +which shouldn't exist yet. We need an option to disable -lstdc++
>>> +option whilst leaving -lc, -lgcc and other automatic library
>>> dependencies added by gcc
>>> +driver. This patch adds such an option which only disables the -
>>> lstdc++.
>>> +
>>> +A "standard" gcc build uses xgcc and hence avoids this. We should ask
>>> upstream how to
>>> +do this officially, the likely answer is don't build libstdc++
>>> separately.
>>> +
>>> +RP 29/6/10
>>> +
>>> +Index: gcc-4.6.0/gcc/cp/g++spec.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/cp/g++spec.c
>>> ++++ gcc-4.6.0/gcc/cp/g++spec.c
>>> +@@ -127,6 +127,7 @@ lang_specific_driver (struct cl_decoded_
>>> +       switch (decoded_options[i].opt_index)
>>> +     {
>>> +     case OPT_nostdlib:
>>> ++    case OPT_nostdlib__:
>>> +     case OPT_nodefaultlibs:
>>> +       library = -1;
>>> +       break;
>>> +Index: gcc-4.6.0/gcc/doc/invoke.texi
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/doc/invoke.texi
>>> ++++ gcc-4.6.0/gcc/doc/invoke.texi
>>> +@@ -193,7 +193,7 @@ in the following sections.
>>> + -fno-pretty-templates @gol
>>> + -frepo  -fno-rtti  -fstats  -ftemplate-depth=@var{n} @gol
>>> + -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
>>> +--fno-default-inline  -fvisibility-inlines-hidden @gol
>>> ++-nostdlib++ -fno-default-inline  -fvisibility-inlines-hidden @gol
>>> + -fvisibility-ms-compat @gol
>>> + -Wabi  -Wconversion-null  -Wctor-dtor-privacy @gol
>>> + -Wnoexcept -Wnon-virtual-dtor  -Wreorder @gol
>>> +@@ -431,7 +431,7 @@ Objective-C and Objective-C++ Dialects}.
>>> + @gccoptlist{@var{object-file-name}  -l at var{library} @gol
>>> + -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
>>> + -s  -static  -static-libgcc  -static-libstdc++ -shared  @gol
>>> +--shared-libgcc  -symbolic @gol
>>> ++-shared-libgcc  -symbolic -nostdlib++ @gol
>>> + -T @var{script}  -Wl, at var{option}  -Xlinker @var{option} @gol
>>> + -u @var{symbol}}
>>> +
>>> +@@ -9069,6 +9069,11 @@ These entries are usually resolved by en
>>> + libc.  These entry points should be supplied through some other
>>> + mechanism when this option is specified.
>>> +
>>> ++ at item -nostdlib++
>>> ++ at opindex nostdlib++
>>> ++Do not use the standard system C++ runtime libraries when linking.
>>> ++Only the libraries you specify will be passed to the linker.
>>> ++
>>> + @cindex @option{-lgcc}, use with @option{-nostdlib}
>>> + @cindex @option{-nostdlib} and unresolved references
>>> + @cindex unresolved references and @option{-nostdlib}
>>> +Index: gcc-4.6.0/gcc/c-family/c.opt
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/c-family/c.opt
>>> ++++ gcc-4.6.0/gcc/c-family/c.opt
>>> +@@ -1111,6 +1111,10 @@ nostdinc++
>>> + C++ ObjC++
>>> + Do not search standard system include directories for C++
>>> +
>>> ++nostdlib++
>>> ++Driver
>>> ++Do not link standard C++ runtime library
>>> ++
>>> + o
>>> + C ObjC C++ ObjC++ Joined Separate
>>> + ; Documented in common.opt
>>> +Index: gcc-4.6.0/gcc/gcc.c
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/gcc/gcc.c
>>> ++++ gcc-4.6.0/gcc/gcc.c
>>> +@@ -666,6 +666,7 @@ proper position among the other output f
>>> +     %(mflib) " STACK_SPLIT_SPEC "\
>>> +     %{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\
>>> +     %{!nostdlib:%{!nodefaultlibs:%(link_ssp)
>>> %(link_gcc_c_sequence)}}\
>>> ++    %{!nostdlib++:}\
>>> +     %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}"
>>> + #endif
>>> +
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/pr30961.dpatch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/pr30961.dpatch
>>> new file mode 100644
>>> index 0000000..b20fdf5
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/pr30961.dpatch
>>> @@ -0,0 +1,179 @@
>>> +#! /bin/sh -e
>>> +
>>> +# DP:<your description>
>>> +
>>> +dir=
>>> +if [ $# -eq 3 -a "$2" = '-d' ]; then
>>> +    pdir="-d $3"
>>> +    dir="$3/"
>>> +elif [ $# -ne 1 ]; then
>>> +    echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +    exit 1
>>> +fi
>>> +case "$1" in
>>> +    -patch)
>>> +        patch $pdir -f --no-backup-if-mismatch -p0<  $0
>>> +        ;;
>>> +    -unpatch)
>>> +        patch $pdir -f --no-backup-if-mismatch -R -p0<  $0
>>> +        ;;
>>> +    *)
>>> +        echo>&2 "`basename $0`: script expects -patch|-unpatch as
>>> argument"
>>> +        exit 1
>>> +esac
>>> +exit 0
>>> +
>>> +From: "H.J. Lu"<hjl at lucon.org>
>>> +Sender: gcc-patches-owner at gcc.gnu.org
>>> +To: gcc-patches at gcc.gnu.org
>>> +Subject: PATCH: PR target/30961: [4.1/4.2/4.3 regression] redundant
>>> reg/mem       stores/moves
>>> +Date: Mon, 27 Aug 2007 11:34:12 -0700
>>> +
>>> +We start with
>>> +
>>> +(note:HI 3 4 22 2 NOTE_INSN_FUNCTION_BEG)
>>> +
>>> +(insn:HI 6 3 10 2 c.c:3 (set (reg:DF 58 [<result>  ])
>>> +        (subreg:DF (reg/v:DI 59 [ in ]) 0)) 102 {*movdf_integer_rex64}
>>> (expr_list:REG_DEAD (reg/v:DI 59 [ in ])
>>> +        (nil)))
>>> +
>>> +(insn:HI 10 6 16 2 c.c:7 (set (reg/i:DF 21 xmm0 [<result>  ])
>>> +        (reg:DF 58 [<result>  ])) 102 {*movdf_integer_rex64}
>>> (expr_list:REG_DEAD (reg:DF 58 [<result>  ])
>>> +        (nil)))
>>> +
>>> +(insn:HI 16 10 0 2 c.c:7 (use (reg/i:DF 21 xmm0 [<result>  ])) -1
>>> (nil))
>>> +
>>> +we are trying to allocate registers for insn 6 and we allocate
>>> +xmm0 for the return value. Reload doesn't check if xmm0 can be used
>>> for
>>> +DF 59, it allocates xmm1 for DF 59 and generates:
>>> +
>>> +Reloads for insn # 6
>>> +Reload 0: reload_in (DF) = (reg:DF 5 di)
>>> +        SSE_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine
>>> +        reload_in_reg: (subreg:DF (reg/v:DI 5 di [orig:59 in ] [59])
>>> 0)
>>> +        reload_reg_rtx: (reg:DF 22 xmm1)
>>> +...
>>> +
>>> +(note:HI 4 1 3 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
>>> +
>>> +(note:HI 3 4 22 2 NOTE_INSN_FUNCTION_BEG)
>>> +
>>> +(insn 22 3 23 2 c.c:3 (set (mem/c:DF (plus:DI (reg/f:DI 7 sp)
>>> +                (const_int -8 [0xfffffffffffffff8])) [0 S8 A8])
>>> +        (reg:DF 5 di)) 102 {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn 23 22 6 2 c.c:3 (set (reg:DF 22 xmm1)
>>> +        (mem/c:DF (plus:DI (reg/f:DI 7 sp)
>>> +                (const_int -8 [0xfffffffffffffff8])) [0 S8 A8])) 102
>>> {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn:HI 6 23 16 2 c.c:3 (set (reg:DF 21 xmm0 [orig:58<result>  ]
>>> [58])
>>> +        (reg:DF 22 xmm1)) 102 {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn 16 6 21 2 c.c:7 (use (reg/i:DF 21 xmm0 [<result>  ])) -1 (nil))
>>> +
>>> +This patch tries to use the destination register when reloading for
>>> input. It
>>> +generates
>>> +
>>> +Reloads for insn # 6
>>> +Reload 0: reload_in (DF) = (reg:DF 5 di)
>>> +        SSE_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine
>>> +        reload_in_reg: (subreg:DF (reg/v:DI 5 di [orig:59 in ] [59])
>>> 0)
>>> +        reload_reg_rtx: (reg:DF 21 xmm0)
>>> +...
>>> +(note:HI 4 1 3 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
>>> +
>>> +(note:HI 3 4 22 2 NOTE_INSN_FUNCTION_BEG)
>>> +
>>> +(insn 22 3 23 2 c.c:3 (set (mem/c:DF (plus:DI (reg/f:DI 7 sp)
>>> +                (const_int -8 [0xfffffffffffffff8])) [0 S8 A8])
>>> +        (reg:DF 5 di)) 102 {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn 23 22 6 2 c.c:3 (set (reg:DF 21 xmm0)
>>> +        (mem/c:DF (plus:DI (reg/f:DI 7 sp)
>>> +                (const_int -8 [0xfffffffffffffff8])) [0 S8 A8])) 102
>>> {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn:HI 6 23 10 2 c.c:3 (set (reg:DF 22 xmm1 [orig:58<result>  ]
>>> [58])
>>> +        (reg:DF 21 xmm0)) 102 {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn:HI 10 6 16 2 c.c:7 (set (reg/i:DF 21 xmm0 [<result>  ])
>>> +        (reg:DF 22 xmm1 [orig:58<result>  ] [58])) 102
>>> {*movdf_integer_rex64} (nil))
>>> +
>>> +(insn 16 10 21 2 c.c:7 (use (reg/i:DF 21 xmm0 [<result>  ])) -1 (nil))
>>> +
>>> +
>>> +H.J.
>>> +----
>>> +gcc/
>>> +
>>> +2007-08-27  H.J. Lu<hongjiu.lu at intel.com>
>>> +
>>> +     PR target/30961
>>> +     * reload1.c (find_reg): Favor the hard register in destination
>>> +     if it is usable and a memory location is needed for reload
>>> +     input.
>>> +
>>> +gcc/testsuite/
>>> +
>>> +2007-08-27  H.J. Lu<hongjiu.lu at intel.com>
>>> +
>>> +     PR target/30961
>>> +     * gcc.target/i386/pr30961-1.c: New.
>>> +
>>> +--- gcc/reload1.c.second     2007-08-27 09:35:08.000000000 -0700
>>> ++++ gcc/reload1.c    2007-08-27 09:36:33.000000000 -0700
>>> +@@ -1781,6 +1781,20 @@ find_reg (struct insn_chain *chain, int
>>> +   HARD_REG_SET not_usable;
>>> +   HARD_REG_SET used_by_other_reload;
>>> +   reg_set_iterator rsi;
>>> ++#ifdef SECONDARY_MEMORY_NEEDED
>>> ++  rtx body = PATTERN (chain->insn);
>>> ++  unsigned int dest_reg = FIRST_PSEUDO_REGISTER;
>>> ++
>>> ++  if (GET_CODE (body) == SET)
>>> ++    {
>>> ++      rtx dest = SET_DEST (body);
>>> ++
>>> ++      if ((REG_P (dest)
>>> ++       || (GET_CODE (dest) == SUBREG
>>> ++&&  REG_P (SUBREG_REG (dest)))))
>>> ++    dest_reg = reg_or_subregno (dest);
>>> ++    }
>>> ++#endif
>>> +
>>> +   COPY_HARD_REG_SET (not_usable, bad_spill_regs);
>>> +   IOR_HARD_REG_SET (not_usable, bad_spill_regs_global);
>>> +@@ -1821,6 +1835,18 @@ find_reg (struct insn_chain *chain, int
>>> +         this_cost--;
>>> +       if (rl->out&&  REG_P (rl->out)&&  REGNO (rl->out) == regno)
>>> +         this_cost--;
>>> ++#ifdef SECONDARY_MEMORY_NEEDED
>>> ++      /* If a memory location is needed for rl->in and dest_reg
>>> ++         is usable, we will favor it.  */
>>> ++      else if (dest_reg == regno
>>> ++&&  rl->in
>>> ++&&  REG_P (rl->in)
>>> ++&&  REGNO (rl->in)<  FIRST_PSEUDO_REGISTER
>>> ++&&  SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (rl-
>>>> in)),
>>> ++                                           rl->class,
>>> ++                                           rl->mode))
>>> ++        this_cost = 0;
>>> ++#endif
>>> +       if (this_cost<  best_cost
>>> +           /* Among registers with equal cost, prefer caller-saved
>>> ones, or
>>> +              use REG_ALLOC_ORDER if it is defined.  */
>>> +--- gcc/testsuite/gcc.target/i386/pr30961-1.c.second 2007-08-27
>>> 11:01:59.000000000 -0700
>>> ++++ gcc/testsuite/gcc.target/i386/pr30961-1.c        2007-08-27
>>> 11:02:51.000000000 -0700
>>> +@@ -0,0 +1,13 @@
>>> ++/* { dg-do compile } */
>>> ++/* { dg-require-effective-target lp64 } */
>>> ++/* { dg-options "-O2" } */
>>> ++
>>> ++double
>>> ++convert (long long in)
>>> ++{
>>> ++  double f;
>>> ++  __builtin_memcpy(&f,&in, sizeof( in ) );
>>> ++  return f;
>>> ++}
>>> ++
>>> ++/* { dg-final { scan-assembler-not "movapd" } } */
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/pr35942.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/pr35942.patch
>>> new file mode 100644
>>> index 0000000..da610f5
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/pr35942.patch
>>> @@ -0,0 +1,38 @@
>>> +Fix PR 35942: remove -lstdc++ from libtool postdeps for CXX.
>>> +
>>> +libstdc++-v3/ChangeLog:
>>> +2010-01-04  Ralf Wildenhues<Ralf.Wildenhues at gmx.de>
>>> +
>>> +     PR libstdc++/35942
>>> +     * configure.ac: Remove -lstdc++ from libtool's postdeps_CXX.
>>> +     * configure: Regenerate.
>>> +
>>> +
>>> +Index: gcc-4.3.3/libstdc++-v3/configure
>>> +===================================================================
>>> +--- gcc-4.3.3.orig/libstdc++-v3/configure    2010-03-26
>>> 17:57:51.000000000 +0000
>>> ++++ gcc-4.3.3/libstdc++-v3/configure 2010-03-26 17:57:58.000000000
>>> +0000
>>> +@@ -13759,6 +13759,9 @@
>>> +
>>> +
>>> +
>>> ++# Eliminate -lstdc++ addition to postdeps for cross compiles.
>>> ++postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
>>> ++
>>> + # Possibly disable most of the library.
>>> + ## TODO: Consider skipping unncessary tests altogether in this case,
>>> rather
>>> + ## than just ignoring the results.  Faster /and/ more correct, win
>>> win.
>>> +Index: gcc-4.3.3/libstdc++-v3/configure.ac
>>> +===================================================================
>>> +--- gcc-4.3.3.orig/libstdc++-v3/configure.ac 2010-03-26
>>> 17:57:54.000000000 +0000
>>> ++++ gcc-4.3.3/libstdc++-v3/configure.ac      2010-03-26 17:57:58.000000000
>>> +0000
>>> +@@ -89,6 +89,9 @@
>>> + AC_SUBST(enable_shared)
>>> + AC_SUBST(enable_static)
>>> +
>>> ++# Eliminate -lstdc++ addition to postdeps for cross compiles.
>>> ++postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
>>> ++
>>> + # Possibly disable most of the library.
>>> + ## TODO: Consider skipping unncessary tests altogether in this case,
>>> rather
>>> + ## than just ignoring the results.  Faster /and/ more correct, win
>>> win.
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/zecke-xgcc-cpp.patch
>>> b/meta/recipes-devtools/gcc/gcc-4.6.0/zecke-xgcc-cpp.patch
>>> new file mode 100644
>>> index 0000000..b3f02dc
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/zecke-xgcc-cpp.patch
>>> @@ -0,0 +1,28 @@
>>> +upstream: n/a
>>> +comment: Use the preprocessor we have just compiled instead the one of
>>> +the system. There might be incompabilities between us and them.
>>> +
>>> +Index: gcc-4.6.0/Makefile.in
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/Makefile.in
>>> ++++ gcc-4.6.0/Makefile.in
>>> +@@ -270,6 +270,7 @@ BASE_TARGET_EXPORTS = \
>>> +     AR="$(AR_FOR_TARGET)"; export AR; \
>>> +     AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
>>> +     CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export
>>> CC; \
>>> ++    CPP="$(CC_FOR_TARGET) -E"; export CPP; \
>>> +     CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
>>> +     CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
>>> +     CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
>>> +Index: gcc-4.6.0/Makefile.tpl
>>> +===================================================================
>>> +--- gcc-4.6.0.orig/Makefile.tpl
>>> ++++ gcc-4.6.0/Makefile.tpl
>>> +@@ -273,6 +273,7 @@ BASE_TARGET_EXPORTS = \
>>> +     AR="$(AR_FOR_TARGET)"; export AR; \
>>> +     AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
>>> +     CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export
>>> CC; \
>>> ++    CPP="$(CC_FOR_TARGET) -E"; export CPP; \
>>> +     CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
>>> +     CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
>>> +     CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
>>> diff --git a/meta/recipes-devtools/gcc/gcc-cross-initial_4.6.0.bb
>>> b/meta/recipes-devtools/gcc/gcc-cross-initial_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..1639511
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-cross-initial_4.6.0.bb
>>> @@ -0,0 +1,2 @@
>>> +require gcc-cross_${PV}.bb
>>> +require gcc-cross-initial.inc
>>> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate_4.6.0.bb
>>> b/meta/recipes-devtools/gcc/gcc-cross-intermediate_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..42fd0f0
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate_4.6.0.bb
>>> @@ -0,0 +1,3 @@
>>> +require gcc-cross_${PV}.bb
>>> +require gcc-cross-intermediate.inc
>>> +
>>> diff --git a/meta/recipes-devtools/gcc/gcc-cross_4.6.0.bb
>>> b/meta/recipes-devtools/gcc/gcc-cross_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..97a0c81
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-cross_4.6.0.bb
>>> @@ -0,0 +1,8 @@
>>> +require gcc-${PV}.inc
>>> +require gcc-cross4.inc
>>> +
>>> +EXTRA_OECONF += "--disable-libunwind-exceptions \
>>> +                 --with-mpfr=${STAGING_DIR_NATIVE}${prefix_native} \
>>> +                 --with-system-zlib "
>>> +
>>> +ARCH_FLAGS_FOR_TARGET += "-
>>> isystem${STAGING_DIR_TARGET}${target_includedir}"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-crosssdk-initial_4.6.0.bb
>>> b/meta/recipes-devtools/gcc/gcc-crosssdk-initial_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..9708248
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-crosssdk-initial_4.6.0.bb
>>> @@ -0,0 +1,4 @@
>>> +require gcc-cross-initial_${PV}.bb
>>> +require gcc-crosssdk-initial.inc
>>> +
>>> +PR = "r4"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-crosssdk-
>>> intermediate_4.6.0.bb b/meta/recipes-devtools/gcc/gcc-crosssdk-
>>> intermediate_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..d235969
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-crosssdk-intermediate_4.6.0.bb
>>> @@ -0,0 +1,4 @@
>>> +require gcc-cross-intermediate_${PV}.bb
>>> +require gcc-crosssdk-intermediate.inc
>>> +
>>> +PR = "r4"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-runtime_4.6.0.bb
>>> b/meta/recipes-devtools/gcc/gcc-runtime_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..568b5af
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-runtime_4.6.0.bb
>>> @@ -0,0 +1,10 @@
>>> +require gcc-${PV}.inc
>>> +require gcc-configure-runtime.inc
>>> +require gcc-package-runtime.inc
>>> +
>>> +SRC_URI_append = "file://fortran-cross-compile-hack.patch"
>>> +
>>> +ARCH_FLAGS_FOR_TARGET += "-isystem${STAGING_INCDIR}"
>>> +
>>> +EXTRA_OECONF += "--disable-libunwind-exceptions"
>>> +EXTRA_OECONF_append_poky-lsb = " --enable-clocale=gnu"
>>> diff --git a/meta/recipes-devtools/gcc/gcc_4.6.0.bb b/meta/recipes-
>>> devtools/gcc/gcc_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..bfaec86
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc_4.6.0.bb
>>> @@ -0,0 +1,7 @@
>>> +require gcc-${PV}.inc
>>> +require gcc-configure-target.inc
>>> +require gcc-package-target.inc
>>> +
>>> +SRC_URI_append = "file://fortran-cross-compile-hack.patch"
>>> +
>>> +ARCH_FLAGS_FOR_TARGET += "-isystem${STAGING_INCDIR}"
>>> diff --git a/meta/recipes-devtools/gcc/libgcc_4.6.0.bb b/meta/recipes-
>>> devtools/gcc/libgcc_4.6.0.bb
>>> new file mode 100644
>>> index 0000000..b6cf268
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/libgcc_4.6.0.bb
>>> @@ -0,0 +1,46 @@
>>> +require gcc-${PV}.inc
>>> +
>>> +PR = "r0"
>>> +
>>> +INHIBIT_DEFAULT_DEPS = "1"
>>> +DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
>>> +
>>> +PACKAGES = "\
>>> +  ${PN} \
>>> +  ${PN}-dev \
>>> +  "
>>> +
>>> +FILES_${PN} = "${base_libdir}/libgcc*.so.*"
>>> +FILES_${PN}-dev = " \
>>> +  ${base_libdir}/libgcc*.so \
>>> +  ${libdir}/${TARGET_SYS}/${BINV}/crt* \
>>> +  ${libdir}/${TARGET_SYS}/${BINV}/libgcc*"
>>> +
>>> +do_fetch[noexec] = "1"
>>> +do_unpack[noexec] = "1"
>>> +do_patch[noexec] = "1"
>>> +do_configure[noexec] = "1"
>>> +do_compile[noexec] = "1"
>>> +
>>> +do_install () {
>>> +     target=`echo ${MULTIMACH_TARGET_SYS} | sed -e s#-nativesdk##`
>>> +
>>> +     # Install libgcc from our gcc-cross saved data
>>> +     install -d ${D}${base_libdir} ${D}${libdir}
>>> +     cp -fpPR ${STAGING_INCDIR_NATIVE}/gcc-build-internal-$target/*
>>> ${D}
>>> +
>>> +     # Move libgcc_s into /lib
>>> +     mkdir -p ${D}${base_libdir}
>>> +     if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then
>>> +             mv ${D}${libdir}/nof/libgcc* ${D}${base_libdir}
>>> +     else
>>> +             mv ${D}${libdir}/libgcc* ${D}${base_libdir} || true
>>> +     fi
>>> +}
>>> +
>>> +do_package_write_ipk[depends] += "virtual/libc:do_package"
>>> +do_package_write_deb[depends] += "virtual/libc:do_package"
>>> +do_package_write_rpm[depends] += "virtual/libc:do_package"
>>> +
>>> +BBCLASSEXTEND = "nativesdk"
>>> +
>>> --
>>> 1.7.4.1
>> 
>> 
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core at lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core





More information about the Openembedded-core mailing list