aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99494.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99494.patch')
-rw-r--r--toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99494.patch1272
1 files changed, 1272 insertions, 0 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99494.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99494.patch
new file mode 100644
index 0000000000..56897e984b
--- /dev/null
+++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99494.patch
@@ -0,0 +1,1272 @@
+2011-04-09 Andrew Stubbs <ams@codesourcery.com>
+
+ Backport from mainline:
+
+ Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ * config.sub: Recognize *-linux-android*.
+
+ 2010-05-27 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ Add support for Bionic C library
+ gcc/
+ * config.gcc (LIBC_GLIBC, LIBC_BIONIC, LIBC_UCLIBC): New tm_define
+ macro.
+ (DEFAULT_LIBC): New tm_define macro set to one of LIBC_*.
+ (bfin*-uclinux, moxie-*-uclinux*, m68k-*-uclinux*): Update.
+
+ * config/linux.h (OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC): Define.
+ (LINUX_TARGET_OS_CPP_BUILTINS): Define __gnu_linux__ only for GLIBC.
+ (CHOOSE_DYNAMIC_LINKER1, CHOOSE_DYNAMIC_LINKER): Make it easier
+ to support multiple C libraries. Handle Bionic.
+ (BIONIC_DYNAMIC_LINKER, BIONIC_DYNAMIC_LINKER32,)
+ (BIONIC_DYNAMIC_LINKER64): Define.
+ (LINUX_DYNAMIC_LINKER, LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64):
+ Update.
+ (TARGET_HAS_SINCOS): Enable for Bionic.
+
+ * config/linux.opt: Rewrite to handle more than 2 C libraries. Make
+ the last option specified on command line take effect.
+ (linux_uclibc): Rename to linux_libc, initialize using DEFAULT_LIBC.
+ (mbionic): New.
+ (mglibc, muclibc): Update.
+
+ * config/alpha/linux-elf.h, config/rs6000/linux64.h,
+ * config/rs6000/sysv4.h (CHOOSE_DYNAMIC_LINKER): Update to use
+ DEFAULT_LIBC.
+
+ * doc/invoke.texi (-mglibc, -muclibc): Update.
+ (-mbionic): Document.
+
+ gcc/testsuite/
+ * gcc.dg/glibc-uclibc-1.c, gcc.dg/glibc-uclibc-2.c: Remove, no longer
+ necessary.
+
+ 2010-05-27 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ Support compilation for Android platform. Reimplement -mandroid.
+ gcc/
+ * config.gcc (*linux*): Include linux-android.h and linux-android.opt.
+ (*android*): Set ANDROID_DEFAULT.
+ (arm*-*-linux*): Include linux-android.h.
+ (arm*-*-eabi*): Don't include previous -mandroid implementation.
+ * config/arm/eabi.h: Remove, move Android-specific parts ...
+ * config/linux-android.h: ... here. New file.
+ * config/arm/eabi.opt: Rename to ...
+ * config/linux-android.opt: ... this.
+ (mandroid): Allow -mno-android option. Initialize based on
+ ANDROID_DEFAULT.
+ * config/linux.h (STARTFILE_SPEC, ENDFILE_SPEC, CC1_SPEC, LIB_SPEC):
+ Move logic to corresponding LINUX_TARGET_* macros.
+ (TARGET_OS_CPP_BUILTINS): Define __ANDROID__, when appropriate.
+ * config/linux-eabi.h (LINK_SPEC, CC1_SPEC, CC1PLUS_SPEC, LIB_SPEC,)
+ (STARTFILE_SPEC, ENDFILE_SPEC): Define to choose between Linux and
+ Android definitions.
+ (LINUX_TARGET_OS_CPP_BUILTINS): Define __ANDROID__ if TARGET_ANDROID.
+ * doc/invoke.texi (-mandroid, -tno-android-cc, -tno-android-ld):
+ Document.
+
+ 2010-06-01 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ gcc/
+ * config/arm/t-linux-androideabi: New.
+ * config.gcc (arm*-*-linux-androideabi): Include multilib configuration.
+
+ 2010-05-27 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ gcc/
+ * gthr-posix.h (pthread_cancel): Don't declare if compiling against
+ Bionic C library.
+ (__gthread_active_p): Check for pthread_create if compiling against
+ Bionic C library.
+
+ 2010-06-01 Maxim Kuvyrkov <maxim@codesourcery.com>
+
+ libstdc++-v3/
+ * acinclude.m4: Support Bionic C library.
+ Explicitly specify -fexceptions for exception check.
+ * configure.host: Support Bionic C library.
+ * configure: Regenerate.
+ * config/os/bionic/ctype_base.h, config/os/bionic/ctype_inline.h,
+ * config/os/bionic/ctype_noincline.h, config/os/bionic/os_defines.h:
+ New files, based on config/os/newlib/*.
+
+=== modified file 'config.sub'
+Index: gcc-4.5.3/config.sub
+===================================================================
+--- gcc-4.5.3.orig/config.sub
++++ gcc-4.5.3/config.sub
+@@ -4,7 +4,7 @@
+ # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ # Free Software Foundation, Inc.
+
+-timestamp='2010-03-22'
++timestamp='2010-04-23'
+
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+@@ -124,8 +124,9 @@ esac
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
++ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+@@ -1307,7 +1308,8 @@ case $os in
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
++ | -mingw32* | -linux-gnu* | -linux-android* \
++ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+Index: gcc-4.5.3/gcc/config.gcc
+===================================================================
+--- gcc-4.5.3.orig/gcc/config.gcc
++++ gcc-4.5.3/gcc/config.gcc
+@@ -513,26 +513,48 @@ case ${target} in
+ *-*-gnu*)
+ tmake_file="$tmake_file t-gnu";;
+ esac
+- # glibc / uclibc switch. uclibc isn't usable for GNU/Hurd and neither for
+- # GNU/k*BSD.
++ # Common C libraries.
++ tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
++ # glibc / uclibc / bionic switch.
++ # uclibc and bionic aren't usable for GNU/Hurd and neither for GNU/k*BSD.
+ case $target in
+ *linux*)
+ extra_options="$extra_options linux.opt";;
+ *)
+ tm_defines="$tm_defines OPTION_GLIBC=1";;
+ esac
+- case ${target} in
++ case $target in
++ *-*-*android*)
++ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_BIONIC"
++ ;;
+ *-*-*uclibc*)
+- tm_defines="${tm_defines} UCLIBC_DEFAULT=1"
++ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
+ ;;
+ *)
+- tm_defines="${tm_defines} UCLIBC_DEFAULT=0"
++ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
+ ;;
+ esac
+- # Assume that glibc or uClibc are being used and so __cxa_atexit is provided.
++ # Assume that glibc or uClibc or Bionic are being used and so __cxa_atexit
++ # is provided.
+ default_use_cxa_atexit=yes
+ use_gcc_tgmath=no
+ use_gcc_stdint=wrap
++ # Add Android userspace support to Linux targets.
++ case $target in
++ *linux*)
++ tm_file="$tm_file linux-android.h"
++ extra_options="$extra_options linux-android.opt"
++ ;;
++ esac
++ # Enable compilation for Android by default for *android* targets.
++ case $target in
++ *-*-*android*)
++ tm_defines="$tm_defines ANDROID_DEFAULT=1"
++ ;;
++ *)
++ tm_defines="$tm_defines ANDROID_DEFAULT=0"
++ ;;
++ esac
+ ;;
+ *-*-netbsd*)
+ tmake_file="t-slibgcc-elf-ver t-libc-ok t-netbsd t-libgcc-pic"
+@@ -728,7 +750,7 @@ arm*-*-netbsd*)
+ use_collect2=yes
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+- tm_file="dbxelf.h elfos.h linux.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
++ tm_file="dbxelf.h elfos.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
+ case $target in
+ arm*b-*)
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
+@@ -739,6 +761,12 @@ arm*-*-linux*) # ARM GNU/Linux with EL
+ arm*-*-linux-*eabi)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
++ # Define multilib configuration for arm-linux-androideabi.
++ case ${target} in
++ *-androideabi)
++ tmake_file="$tmake_file arm/t-linux-androideabi"
++ ;;
++ esac
+ # The BPABI long long divmod functions return a 128-bit value in
+ # registers r0-r3. Correctly modeling that requires the use of
+ # TImode.
+@@ -785,9 +813,8 @@ arm*-*-eabi* | arm*-*-symbianelf* )
+ tmake_file="arm/t-arm arm/t-arm-elf"
+ case ${target} in
+ arm*-*-eabi*)
+- tm_file="$tm_file arm/eabi.h newlib-stdint.h"
++ tm_file="$tm_file newlib-stdint.h"
+ tmake_file="${tmake_file} arm/t-bpabi"
+- extra_options="${extra_options} arm/eabi.opt"
+ use_gcc_stdint=wrap
+ ;;
+ arm*-*-symbianelf*)
+@@ -843,7 +870,7 @@ bfin*-elf*)
+ bfin*-uclinux*)
+ tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h linux.h glibc-stdint.h bfin/uclinux.h"
+ tmake_file=bfin/t-bfin-uclinux
+- tm_defines="${tm_defines} UCLIBC_DEFAULT=1"
++ tm_defines="${tm_defines} DEFAULT_LIBC=LIBC_UCLIBC"
+ extra_options="${extra_options} linux.opt"
+ use_collect2=no
+ ;;
+@@ -924,7 +951,7 @@ moxie-*-uclinux*)
+ tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h glibc-stdint.h moxie/uclinux.h"
+ extra_parts="crti.o crtn.o crtbegin.o crtend.o"
+ tmake_file="${tmake_file} moxie/t-moxie moxie/t-moxie-softfp soft-fp/t-softfp"
+- tm_defines="${tm_defines} UCLIBC_DEFAULT=1"
++ tm_defines="${tm_defines} DEFAULT_LIBC=LIBC_UCLIBC"
+ extra_options="${extra_options} linux.opt"
+ ;;
+ h8300-*-rtems*)
+@@ -1644,7 +1671,7 @@ m68k-*-uclinux*) # Motorola m68k/ColdFi
+ default_m68k_cpu=68020
+ default_cf_cpu=5206
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h glibc-stdint.h flat.h m68k/linux.h m68k/uclinux.h ./sysroot-suffix.h"
+- tm_defines="${tm_defines} MOTOROLA=1 UCLIBC_DEFAULT=1"
++ tm_defines="${tm_defines} MOTOROLA=1 DEFAULT_LIBC=LIBC_UCLIBC"
+ extra_options="${extra_options} linux.opt"
+ tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs"
+ ;;
+Index: gcc-4.5.3/gcc/config/alpha/linux-elf.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/alpha/linux-elf.h
++++ gcc-4.5.3/gcc/config/alpha/linux-elf.h
+@@ -29,10 +29,12 @@ along with GCC; see the file COPYING3.
+
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+ #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+-#if UCLIBC_DEFAULT
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
++#if DEFAULT_LIBC == LIBC_UCLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
++#elif DEFAULT_LIBC == LIBC_GLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
+ #else
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
++#error "Unsupported DEFAULT_LIBC"
+ #endif
+ #define LINUX_DYNAMIC_LINKER \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+Index: gcc-4.5.3/gcc/config/arm/eabi.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/arm/eabi.h
++++ /dev/null
+@@ -1,125 +0,0 @@
+-/* Configuration file for ARM EABI targets.
+- Copyright (C) 2008
+- Free Software Foundation, Inc.
+- Contributed by Doug Kwan (dougkwan@google.com)
+-
+- 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 3, 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 COPYING3. If not see
+- <http://www.gnu.org/licenses/>. */
+-
+-/* This file contains macro overrides for EABI targets. */
+-
+-#undef TARGET_OS_CPP_BUILTINS
+-#define TARGET_OS_CPP_BUILTINS() \
+- do \
+- { \
+- TARGET_BPABI_CPP_BUILTINS (); \
+- if (TARGET_ANDROID) \
+- builtin_define ("__ANDROID__"); \
+- } \
+- while (false)
+-
+-#undef SUBSUBTARGET_EXTRA_SPECS
+-#define SUBSUBTARGET_EXTRA_SPECS \
+- { "link_android", ANDROID_LINK_SPEC }, \
+- { "link_default", BPABI_LINK_SPEC }, \
+- { "cc1_android", ANDROID_CC1_SPEC }, \
+- { "cc1_default", CC1_DEFAULT_SPEC }, \
+- { "cc1plus_android", ANDROID_CC1PLUS_SPEC }, \
+- { "cc1plus_default", CC1PLUS_DEFAULT_SPEC }, \
+- { "lib_android", ANDROID_LIB_SPEC }, \
+- { "lib_default", LIB_DEFAULT_SPEC }, \
+- { "startfile_android", ANDROID_STARTFILE_SPEC }, \
+- { "startfile_default", UNKNOWN_ELF_STARTFILE_SPEC }, \
+- { "endfile_android", ANDROID_ENDFILE_SPEC }, \
+- { "endfile_default", UNKNOWN_ELF_ENDFILE_SPEC }, \
+-
+-#undef ANDROID_LINK_SPEC
+-#define ANDROID_LINK_SPEC \
+-"%{mbig-endian:-EB} %{mlittle-endian:-EL} " \
+-"%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \
+-"%{!static:" \
+- "%{shared: -Bsymbolic} " \
+- "%{!shared:" \
+- "%{rdynamic:-export-dynamic} " \
+- "%{!dynamic-linker:-dynamic-linker /system/bin/linker}}} " \
+-"-X" SUBTARGET_EXTRA_LINK_SPEC
+-
+-/* Override LINK_SPEC in bpabi.h. */
+-#undef LINK_SPEC
+-#define LINK_SPEC \
+-"%{mandroid: %(link_android) ;" \
+-" : %(link_default)}"
+-
+-/* Android uses -fno-exceptions by default. */
+-#undef ANDROID_CC1_SPEC
+-#define ANDROID_CC1_SPEC "%{!fexceptions:-fno-exceptions}"
+-
+-/* Default CC1_SPEC as in arm.h. */
+-#undef CC1_DEFAULT_SPEC
+-#define CC1_DEFAULT_SPEC ""
+-
+-#undef CC1_SPEC
+-#define CC1_SPEC \
+-"%{mandroid: %(cc1_android) ;" \
+-" : %(cc1_default)}"
+-
+-/* Android uses -fno-rtti by default. */
+-#undef ANDROID_CC1PLUS_SPEC
+-#define ANDROID_CC1PLUS_SPEC "%{!frtti:-fno-rtti}"
+-
+-/* Default CC1PLUS_SPEC as in gcc.c. */
+-#undef CC1PLUS_DEFAULT_SPEC
+-#define CC1PLUS_DEFAULT_SPEC ""
+-
+-#undef CC1PLUS_SPEC
+-#define CC1PLUS_SPEC \
+-"%{mandroid: %(cc1plus_android) ;" \
+-" : %(cc1plus_default)}"
+-
+-#undef ANDROID_LIB_SPEC
+-#define ANDROID_LIB_SPEC "-lc %{!static:-ldl}"
+-
+-/* Default LIB_SPEC as in gcc.c. */
+-#undef LIB_DEFAULT_SPEC
+-#define LIB_DEFAULT_SPEC \
+-"%{!shared:%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}"
+-
+-#undef LIB_SPEC
+-#define LIB_SPEC \
+-"%{mandroid: %(lib_android) ;" \
+-" : %(lib_default)}"
+-
+-#undef ANDROID_STARTFILE_SPEC
+-#define ANDROID_STARTFILE_SPEC \
+-"%{!shared:" \
+- "%{static: crtbegin_static%O%s ;" \
+- " : crtbegin_dynamic%O%s}}"
+-
+-/* Override STARTFILE_SPEC in unknown-elf.h. */
+-#undef STARTFILE_SPEC
+-#define STARTFILE_SPEC \
+-"%{mandroid: %(startfile_android) ;" \
+-" : %(startfile_default)}"
+-
+-#undef ANDROID_ENDFILE_SPEC
+-#define ANDROID_ENDFILE_SPEC "%{!shared:crtend_android%O%s}"
+-
+-/* Override ENDFILE_SPEC in unknown-elf.h. */
+-#undef ENDFILE_SPEC
+-#define ENDFILE_SPEC \
+-"%{mandroid: %(endfile_android) ;" \
+-" : %(endfile_default)}"
+-
+Index: gcc-4.5.3/gcc/config/arm/eabi.opt
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/arm/eabi.opt
++++ /dev/null
+@@ -1,23 +0,0 @@
+-; EABI specific options for ARM port of the compiler.
+-
+-; Copyright (C) 2008 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 3, 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 COPYING3. If not see
+-; <http://www.gnu.org/licenses/>.
+-
+-mandroid
+-Target Report RejectNegative Mask(ANDROID)
+-Generate code for the Android operating system.
+Index: gcc-4.5.3/gcc/config/arm/linux-eabi.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/arm/linux-eabi.h
++++ gcc-4.5.3/gcc/config/arm/linux-eabi.h
+@@ -70,7 +70,30 @@
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
+ #undef LINK_SPEC
+-#define LINK_SPEC LINUX_TARGET_LINK_SPEC BE8_LINK_SPEC TARGET_FIX_V4BX_SPEC
++#define LINK_SPEC BE8_LINK_SPEC TARGET_FIX_V4BX_SPEC \
++ LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \
++ LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC)
++
++#undef CC1_SPEC
++#define CC1_SPEC \
++ LINUX_OR_ANDROID_CC (LINUX_TARGET_CC1_SPEC, \
++ LINUX_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC)
++
++#define CC1PLUS_SPEC \
++ LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC)
++
++#undef LIB_SPEC
++#define LIB_SPEC \
++ LINUX_OR_ANDROID_LD (LINUX_TARGET_LIB_SPEC, \
++ LINUX_TARGET_LIB_SPEC " " ANDROID_LIB_SPEC)
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC \
++ LINUX_OR_ANDROID_LD (LINUX_TARGET_STARTFILE_SPEC, ANDROID_STARTFILE_SPEC)
++
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC \
++ LINUX_OR_ANDROID_LD (LINUX_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC)
+
+ /* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
+ do not use -lfloat. */
+Index: gcc-4.5.3/gcc/config/arm/t-linux-androideabi
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/gcc/config/arm/t-linux-androideabi
+@@ -0,0 +1,10 @@
++MULTILIB_OPTIONS = march=armv7-a mthumb
++MULTILIB_DIRNAMES = armv7-a thumb
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES =
++MULTILIB_OSDIRNAMES =
++
++# The "special" multilib can be used to build native applications for Android,
++# as opposed to native shared libraries that are then called via JNI.
++#MULTILIB_OPTIONS += tno-android-cc
++#MULTILIB_DIRNAMES += special
+Index: gcc-4.5.3/gcc/config/linux-android.h
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/gcc/config/linux-android.h
+@@ -0,0 +1,53 @@
++/* Configuration file for Linux Android targets.
++ Copyright (C) 2010
++ Free Software Foundation, Inc.
++ Contributed by CodeSourcery, 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 3, 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 COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++#if ANDROID_DEFAULT
++# define NOANDROID "mno-android"
++#else
++# define NOANDROID "!mandroid"
++#endif
++
++#define LINUX_OR_ANDROID_CC(LINUX_SPEC, ANDROID_SPEC) \
++ "%{" NOANDROID "|tno-android-cc:" LINUX_SPEC ";:" ANDROID_SPEC "}"
++
++#define LINUX_OR_ANDROID_LD(LINUX_SPEC, ANDROID_SPEC) \
++ "%{" NOANDROID "|tno-android-ld:" LINUX_SPEC ";:" ANDROID_SPEC "}"
++
++#define ANDROID_LINK_SPEC \
++ "%{shared: -Bsymbolic}"
++
++#define ANDROID_CC1_SPEC \
++ "%{!mglibc:%{!muclibc:%{!mbionic: -mbionic}}} " \
++ "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}}"
++
++#define ANDROID_CC1PLUS_SPEC \
++ "%{!fexceptions:%{!fno-exceptions: -fno-exceptions}} " \
++ "%{!frtti:%{!fno-rtti: -fno-rtti}}"
++
++#define ANDROID_LIB_SPEC \
++ "%{!static: -ldl}"
++
++#define ANDROID_STARTFILE_SPEC \
++ "%{!shared:" \
++ " %{static: crtbegin_static%O%s;: crtbegin_dynamic%O%s}}"
++
++#define ANDROID_ENDFILE_SPEC \
++ "%{!shared: crtend_android%O%s}"
+Index: gcc-4.5.3/gcc/config/linux-android.opt
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/gcc/config/linux-android.opt
+@@ -0,0 +1,23 @@
++; Android specific options.
++
++; Copyright (C) 2010 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 3, 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 COPYING3. If not see
++; <http://www.gnu.org/licenses/>.
++
++mandroid
++Target Report Mask(ANDROID) Var(flag_android) Init(ANDROID_DEFAULT ? OPTION_MASK_ANDROID : 0)
++Generate code for the Android platform.
+Index: gcc-4.5.3/gcc/config/linux.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/linux.h
++++ gcc-4.5.3/gcc/config/linux.h
+@@ -1,6 +1,6 @@
+ /* Definitions for Linux-based GNU systems with ELF format
+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2006,
+- 2007, 2009 Free Software Foundation, Inc.
++ 2007, 2009, 2010 Free Software Foundation, Inc.
+ Contributed by Eric Youngdale.
+ Modified for stabs-in-ELF by H.J. Lu (hjl@lucon.org).
+
+@@ -42,16 +42,17 @@ see the files COPYING3 and COPYING.RUNTI
+ provides part of the support for getting C++ file-scope static
+ object constructed before entering `main'. */
+
+-#undef STARTFILE_SPEC
+ #if defined HAVE_LD_PIE
+-#define STARTFILE_SPEC \
++#define LINUX_TARGET_STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+ #else
+-#define STARTFILE_SPEC \
++#define LINUX_TARGET_STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+ #endif
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC LINUX_TARGET_STARTFILE_SPEC
+
+ /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
+ the GNU/Linux magical crtend.o file (see crtstuff.c) which
+@@ -59,33 +60,44 @@ see the files COPYING3 and COPYING.RUNTI
+ object constructed before entering `main', followed by a normal
+ GNU/Linux "finalizer" file, `crtn.o'. */
+
+-#undef ENDFILE_SPEC
+-#define ENDFILE_SPEC \
++#define LINUX_TARGET_ENDFILE_SPEC \
+ "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC LINUX_TARGET_ENDFILE_SPEC
+
+ /* This is for -profile to use -lc_p instead of -lc. */
++#define LINUX_TARGET_CC1_SPEC "%{profile:-p}"
+ #ifndef CC1_SPEC
+-#define CC1_SPEC "%{profile:-p}"
++#define CC1_SPEC LINUX_TARGET_CC1_SPEC
+ #endif
+
+ /* The GNU C++ standard library requires that these macros be defined. */
+ #undef CPLUSPLUS_CPP_SPEC
+ #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
+
+-#undef LIB_SPEC
+-#define LIB_SPEC \
++#define LINUX_TARGET_LIB_SPEC \
+ "%{pthread:-lpthread} \
+ %{shared:-lc} \
+ %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}"
++#undef LIB_SPEC
++#define LIB_SPEC LINUX_TARGET_LIB_SPEC
++
++/* C libraries supported on Linux. */
++#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
++#define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
++#define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
+
+ #define LINUX_TARGET_OS_CPP_BUILTINS() \
+ do { \
+- builtin_define ("__gnu_linux__"); \
++ if (OPTION_GLIBC) \
++ builtin_define ("__gnu_linux__"); \
+ builtin_define_std ("linux"); \
+ builtin_define_std ("unix"); \
+ builtin_assert ("system=linux"); \
+ builtin_assert ("system=unix"); \
+ builtin_assert ("system=posix"); \
++ if (OPTION_ANDROID) \
++ builtin_define ("__ANDROID__"); \
+ } while (0)
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+@@ -105,13 +117,24 @@ see the files COPYING3 and COPYING.RUNTI
+ #endif
+
+ /* Determine which dynamic linker to use depending on whether GLIBC or
+- uClibc is the default C library and whether -muclibc or -mglibc has
+- been passed to change the default. */
+-#if UCLIBC_DEFAULT
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
++ uClibc or Bionic is the default C library and whether
++ -muclibc or -mglibc or -mbionic has been passed to change the default. */
++
++#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LD1, LD2, LD3) \
++ "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:" LD1 "}}"
++
++#if DEFAULT_LIBC == LIBC_GLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
++ CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", G, U, B)
++#elif DEFAULT_LIBC == LIBC_UCLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
++ CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", U, G, B)
++#elif DEFAULT_LIBC == LIBC_BIONIC
++#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
++ CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", B, G, U)
+ #else
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
+-#endif
++#error "Unsupported DEFAULT_LIBC"
++#endif /* DEFAULT_LIBC */
+
+ /* For most targets the following definitions suffice;
+ GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
+@@ -120,18 +143,25 @@ see the files COPYING3 and COPYING.RUNTI
+ #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+ #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
+ #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
+-#define LINUX_DYNAMIC_LINKER \
+- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+-#define LINUX_DYNAMIC_LINKER32 \
+- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
+-#define LINUX_DYNAMIC_LINKER64 \
+- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
++#define BIONIC_DYNAMIC_LINKER "/system/bin/linker"
++#define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
++#define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
++
++#define LINUX_DYNAMIC_LINKER \
++ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
++ BIONIC_DYNAMIC_LINKER)
++#define LINUX_DYNAMIC_LINKER32 \
++ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
++ BIONIC_DYNAMIC_LINKER32)
++#define LINUX_DYNAMIC_LINKER64 \
++ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
++ BIONIC_DYNAMIC_LINKER64)
+
+ /* Determine whether the entire c99 runtime
+ is present in the runtime library. */
+ #define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
+
+ /* Whether we have sincos that follows the GNU extension. */
+-#define TARGET_HAS_SINCOS (OPTION_GLIBC)
++#define TARGET_HAS_SINCOS (OPTION_GLIBC | OPTION_BIONIC)
+
+ #define TARGET_POSIX_IO
+Index: gcc-4.5.3/gcc/config/linux.opt
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/linux.opt
++++ gcc-4.5.3/gcc/config/linux.opt
+@@ -1,6 +1,6 @@
+ ; Processor-independent options for GNU/Linux.
+ ;
+-; Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
++; Copyright (C) 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+ ; Contributed by CodeSourcery.
+ ;
+ ; This file is part of GCC.
+@@ -19,10 +19,14 @@
+ ; along with GCC; see the file COPYING3. If not see
+ ; <http://www.gnu.org/licenses/>.
+
++mbionic
++Target Report RejectNegative Var(linux_libc,LIBC_BIONIC) Init(DEFAULT_LIBC) Negative(mglibc)
++Use Bionic C library
++
+ mglibc
+-Target RejectNegative Report InverseMask(UCLIBC, GLIBC) Var(linux_uclibc) Init(UCLIBC_DEFAULT ? OPTION_MASK_UCLIBC : 0)
+-Use GNU libc instead of uClibc
++Target Report RejectNegative Var(linux_libc,LIBC_GLIBC) VarExists Negative(muclibc)
++Use GNU C library
+
+ muclibc
+-Target RejectNegative Report Mask(UCLIBC) Var(linux_uclibc) VarExists
+-Use uClibc instead of GNU libc
++Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) VarExists Negative(mbionic)
++Use uClibc C library
+Index: gcc-4.5.3/gcc/config/rs6000/linux64.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/rs6000/linux64.h
++++ gcc-4.5.3/gcc/config/rs6000/linux64.h
+@@ -344,10 +344,12 @@ extern int dot_symbols;
+ #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
+ #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
+ #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
+-#if UCLIBC_DEFAULT
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
++#if DEFAULT_LIBC == LIBC_UCLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
++#elif DEFAULT_LIBC == LIBC_GLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
+ #else
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
++#error "Unsupported DEFAULT_LIBC"
+ #endif
+ #define LINUX_DYNAMIC_LINKER32 \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
+Index: gcc-4.5.3/gcc/config/rs6000/sysv4.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/config/rs6000/sysv4.h
++++ gcc-4.5.3/gcc/config/rs6000/sysv4.h
+@@ -901,10 +901,12 @@ SVR4_ASM_SPEC \
+
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+ #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+-#if UCLIBC_DEFAULT
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
++#if DEFAULT_LIBC == LIBC_UCLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
++#elif DEFAULT_LIBC == LIBC_GLIBC
++#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
+ #else
+-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
++#error "Unsupported DEFAULT_LIBC"
+ #endif
+ #define LINUX_DYNAMIC_LINKER \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+Index: gcc-4.5.3/gcc/doc/invoke.texi
+===================================================================
+--- gcc-4.5.3.orig/gcc/doc/invoke.texi
++++ gcc-4.5.3/gcc/doc/invoke.texi
+@@ -565,7 +565,8 @@ Objective-C and Objective-C++ Dialects}.
+ -mcpu=@var{cpu}}
+
+ @emph{GNU/Linux Options}
+-@gccoptlist{-muclibc}
++@gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol
++-tno-android-cc -tno-android-ld}
+
+ @emph{H8/300 Options}
+ @gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300}
+@@ -11469,13 +11470,41 @@ These @samp{-m} options are defined for
+ @table @gcctabopt
+ @item -mglibc
+ @opindex mglibc
+-Use the GNU C library instead of uClibc. This is the default except
+-on @samp{*-*-linux-*uclibc*} targets.
++Use the GNU C library. This is the default except
++on @samp{*-*-linux-*uclibc*} and @samp{*-*-linux-*android*} targets.
+
+ @item -muclibc
+ @opindex muclibc
+-Use uClibc instead of the GNU C library. This is the default on
++Use uClibc C library. This is the default on
+ @samp{*-*-linux-*uclibc*} targets.
++
++@item -mbionic
++@opindex mbionic
++Use Bionic C library. This is the default on
++@samp{*-*-linux-*android*} targets.
++
++@item -mandroid
++@opindex mandroid
++Compile code compatible with Android platform. This is the default on
++@samp{*-*-linux-*android*} targets.
++
++When compiling, this option enables @option{-mbionic}, @option{-fPIC},
++@option{-fno-exceptions} and @option{-fno-rtti} by default. When linking,
++this option makes the GCC driver pass Android-specific options to the linker.
++Finally, this option causes the preprocessor macro @code{__ANDROID__}
++to be defined.
++
++@item -tno-android-cc
++@opindex tno-android-cc
++Disable compilation effects of @option{-mandroid}, i.e., do not enable
++@option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
++@option{-fno-rtti} by default.
++
++@item -tno-android-ld
++@opindex tno-android-ld
++Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
++linking options to the linker.
++
+ @end table
+
+ @node H8/300 Options
+Index: gcc-4.5.3/gcc/gthr-posix.h
+===================================================================
+--- gcc-4.5.3.orig/gcc/gthr-posix.h
++++ gcc-4.5.3/gcc/gthr-posix.h
+@@ -124,7 +124,9 @@ __gthrw(pthread_join)
+ __gthrw(pthread_equal)
+ __gthrw(pthread_self)
+ __gthrw(pthread_detach)
++#ifndef __BIONIC__
+ __gthrw(pthread_cancel)
++#endif
+ __gthrw(sched_yield)
+
+ __gthrw(pthread_mutex_lock)
+@@ -238,7 +240,15 @@ static inline int
+ __gthread_active_p (void)
+ {
+ static void *const __gthread_active_ptr
+- = __extension__ (void *) &__gthrw_(pthread_cancel);
++ = __extension__ (void *) &__gthrw_(
++/* Android's C library does not provide pthread_cancel, check for
++ `pthread_create' instead. */
++#ifndef __BIONIC__
++ pthread_cancel
++#else
++ pthread_create
++#endif
++ );
+ return __gthread_active_ptr != 0;
+ }
+
+Index: gcc-4.5.3/gcc/testsuite/gcc.dg/glibc-uclibc-1.c
+===================================================================
+--- gcc-4.5.3.orig/gcc/testsuite/gcc.dg/glibc-uclibc-1.c
++++ /dev/null
+@@ -1,6 +0,0 @@
+-/* Test -mglibc and -muclibc not allowed together. */
+-/* Origin: Joseph Myers <joseph@codesourcery.com> */
+-/* { dg-do link { target *-*-linux* } } */
+-/* { dg-options "-mglibc -muclibc" } */
+-
+-/* { dg-message "-mglibc and -muclibc used together" "" { target *-*-* } 0 } */
+Index: gcc-4.5.3/gcc/testsuite/gcc.dg/glibc-uclibc-2.c
+===================================================================
+--- gcc-4.5.3.orig/gcc/testsuite/gcc.dg/glibc-uclibc-2.c
++++ /dev/null
+@@ -1,6 +0,0 @@
+-/* Test -mglibc and -muclibc not allowed together. */
+-/* Origin: Joseph Myers <joseph@codesourcery.com> */
+-/* { dg-do link { target *-*-linux* } } */
+-/* { dg-options "-muclibc -mglibc" } */
+-
+-/* { dg-message "-mglibc and -muclibc used together" "" { target *-*-* } 0 } */
+Index: gcc-4.5.3/libstdc++-v3/acinclude.m4
+===================================================================
+--- gcc-4.5.3.orig/libstdc++-v3/acinclude.m4
++++ gcc-4.5.3/libstdc++-v3/acinclude.m4
+@@ -95,7 +95,7 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
+ ## (Right now, this only matters for enable_wchar_t, but nothing prevents
+ ## other macros from doing the same. This should be automated.) -pme
+
+- # Check for uClibc since Linux platforms use different configuration
++ # Check for C library flavor since Linux platforms use different configuration
+ # directories depending on the C library in use.
+ AC_EGREP_CPP([_using_uclibc], [
+ #include <stdio.h>
+@@ -104,6 +104,13 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
+ #endif
+ ], uclibc=yes, uclibc=no)
+
++ AC_EGREP_CPP([_using_bionic], [
++ #include <stdio.h>
++ #if __BIONIC__
++ _using_bionic
++ #endif
++ ], bionic=yes, bionic=no)
++
+ # Find platform-specific directories containing configuration info.
+ # Also possibly modify flags used elsewhere, as needed by the platform.
+ GLIBCXX_CHECK_HOST
+@@ -2722,7 +2729,7 @@ void foo()
+ }
+ EOF
+ old_CXXFLAGS="$CXXFLAGS"
+- CXXFLAGS=-S
++ CXXFLAGS="-S -fexceptions"
+ if AC_TRY_EVAL(ac_compile); then
+ if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
+ enable_sjlj_exceptions=yes
+Index: gcc-4.5.3/libstdc++-v3/config/os/bionic/ctype_base.h
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/libstdc++-v3/config/os/bionic/ctype_base.h
+@@ -0,0 +1,57 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2010 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 3, 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.
++
++// Under Section 7 of GPL version 3, you are granted additional
++// permissions described in the GCC Runtime Library Exception, version
++// 3.1, as published by the Free Software Foundation.
++
++// You should have received a copy of the GNU General Public License and
++// a copy of the GCC Runtime Library Exception along with this program;
++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++// <http://www.gnu.org/licenses/>.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h, for solaris2.5.1
++
++// Support for Solaris 2.5.1
++
++_GLIBCXX_BEGIN_NAMESPACE(std)
++
++ /// @brief Base class for ctype.
++ struct ctype_base
++ {
++ // Non-standard typedefs.
++ typedef const int* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef char mask;
++ static const mask upper = _U;
++ static const mask lower = _L;
++ static const mask alpha = _U | _L;
++ static const mask digit = _N;
++ static const mask xdigit = _X | _N;
++ static const mask space = _S;
++ static const mask print = _P | _U | _L | _N | _B;
++ static const mask graph = _P | _U | _L | _N;
++ static const mask cntrl = _C;
++ static const mask punct = _P;
++ static const mask alnum = _U | _L | _N;
++ };
++
++_GLIBCXX_END_NAMESPACE
+Index: gcc-4.5.3/libstdc++-v3/config/os/bionic/ctype_inline.h
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/libstdc++-v3/config/os/bionic/ctype_inline.h
+@@ -0,0 +1,71 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2010 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 3, 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.
++
++// Under Section 7 of GPL version 3, you are granted additional
++// permissions described in the GCC Runtime Library Exception, version
++// 3.1, as published by the Free Software Foundation.
++
++// You should have received a copy of the GNU General Public License and
++// a copy of the GCC Runtime Library Exception along with this program;
++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++// <http://www.gnu.org/licenses/>.
++
++/** @file ctype_inline.h
++ * This is an internal header file, included by other library headers.
++ * You should not attempt to use it directly.
++ */
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++_GLIBCXX_BEGIN_NAMESPACE(std)
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high && !this->is(__m, *__low))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high && this->is(__m, *__low) != 0)
++ ++__low;
++ return __low;
++ }
++
++_GLIBCXX_END_NAMESPACE
+Index: gcc-4.5.3/libstdc++-v3/config/os/bionic/ctype_noninline.h
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/libstdc++-v3/config/os/bionic/ctype_noninline.h
+@@ -0,0 +1,98 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2010 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 3, 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.
++
++// Under Section 7 of GPL version 3, you are granted additional
++// permissions described in the GCC Runtime Library Exception, version
++// 3.1, as published by the Free Software Foundation.
++
++// You should have received a copy of the GNU General Public License and
++// a copy of the GCC Runtime Library Exception along with this program;
++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++// <http://www.gnu.org/licenses/>.
++
++/** @file ctype_noninline.h
++ * This is an internal header file, included by other library headers.
++ * You should not attempt to use it directly.
++ */
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return _ctype_ + 1; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_del(__table != 0 && __del),
++ _M_toupper(NULL), _M_tolower(NULL),
++ _M_table(__table ? __table : classic_table())
++ {
++ memset(_M_widen, 0, sizeof(_M_widen));
++ _M_widen_ok = 0;
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ _M_narrow_ok = 0;
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_del(__table != 0 && __del),
++ _M_toupper(NULL), _M_tolower(NULL),
++ _M_table(__table ? __table : classic_table())
++ {
++ memset(_M_widen, 0, sizeof(_M_widen));
++ _M_widen_ok = 0;
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ _M_narrow_ok = 0;
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ {
++ int __x = __c;
++ return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x);
++ }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = this->do_toupper(*__low);
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ {
++ int __x = __c;
++ return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x);
++ }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = this->do_tolower(*__low);
++ ++__low;
++ }
++ return __high;
++ }
++
+Index: gcc-4.5.3/libstdc++-v3/config/os/bionic/os_defines.h
+===================================================================
+--- /dev/null
++++ gcc-4.5.3/libstdc++-v3/config/os/bionic/os_defines.h
+@@ -0,0 +1,36 @@
++// Specific definitions for Bionic -*- C++ -*-
++
++// Copyright (C) 2010 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 3, 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.
++
++// Under Section 7 of GPL version 3, you are granted additional
++// permissions described in the GCC Runtime Library Exception, version
++// 3.1, as published by the Free Software Foundation.
++
++// You should have received a copy of the GNU General Public License and
++// a copy of the GCC Runtime Library Exception along with this program;
++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++// <http://www.gnu.org/licenses/>.
++
++/** @file os_defines.h
++ * This is an internal header file, included by other library headers.
++ * You should not attempt to use it directly.
++ */
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++#endif
+Index: gcc-4.5.3/libstdc++-v3/configure
+===================================================================
+--- gcc-4.5.3.orig/libstdc++-v3/configure
++++ gcc-4.5.3/libstdc++-v3/configure
+@@ -5185,7 +5185,7 @@ fi
+ ## (Right now, this only matters for enable_wchar_t, but nothing prevents
+ ## other macros from doing the same. This should be automated.) -pme
+
+- # Check for uClibc since Linux platforms use different configuration
++ # Check for C library flavor since Linux platforms use different configuration
+ # directories depending on the C library in use.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+@@ -5205,6 +5205,24 @@ fi
+ rm -f conftest*
+
+
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++ #include <stdio.h>
++ #if __BIONIC__
++ _using_bionic
++ #endif
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ $EGREP "_using_bionic" >/dev/null 2>&1; then :
++ bionic=yes
++else
++ bionic=no
++fi
++rm -f conftest*
++
++
+ # Find platform-specific directories containing configuration info.
+ # Also possibly modify flags used elsewhere, as needed by the platform.
+
+@@ -14897,7 +14915,7 @@ void foo()
+ }
+ EOF
+ old_CXXFLAGS="$CXXFLAGS"
+- CXXFLAGS=-S
++ CXXFLAGS="-S -fexceptions"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+Index: gcc-4.5.3/libstdc++-v3/configure.host
+===================================================================
+--- gcc-4.5.3.orig/libstdc++-v3/configure.host
++++ gcc-4.5.3/libstdc++-v3/configure.host
+@@ -238,6 +238,8 @@ case "${host_os}" in
+ gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
+ if [ "$uclibc" = "yes" ]; then
+ os_include_dir="os/uclibc"
++ elif [ "$bionic" = "yes" ]; then
++ os_include_dir="os/bionic"
+ else
+ os_include_dir="os/gnu-linux"
+ fi