diff options
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.patch | 1272 |
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 |