2011-04-09 Andrew Stubbs Backport from mainline: Maxim Kuvyrkov * config.sub: Recognize *-linux-android*. 2010-05-27 Maxim Kuvyrkov 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 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 gcc/ * config/arm/t-linux-androideabi: New. * config.gcc (arm*-*-linux-androideabi): Include multilib configuration. 2010-05-27 Maxim Kuvyrkov 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 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 - . */ - -/* 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 -; . - -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 + . */ + +#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 +; . + +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 ; . +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 */ -/* { 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 */ -/* { 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 @@ -104,6 +104,13 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [ #endif ], uclibc=yes, uclibc=no) + AC_EGREP_CPP([_using_bionic], [ + #include + #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 +// . + +// +// 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::_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 +// . + +/** @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:: + is(mask __m, char __c) const + { return _M_table[static_cast(__c)] & __m; } + + const char* + ctype:: + is(const char* __low, const char* __high, mask* __vec) const + { + while (__low < __high) + *__vec++ = _M_table[static_cast(*__low++)]; + return __high; + } + + const char* + ctype:: + scan_is(mask __m, const char* __low, const char* __high) const + { + while (__low < __high && !this->is(__m, *__low)) + ++__low; + return __low; + } + + const char* + ctype:: + 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 +// . + +/** @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::classic_table() throw() + { return _ctype_ + 1; } + + ctype::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::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::do_toupper(char __c) const + { + int __x = __c; + return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x); + } + + const char* + ctype::do_toupper(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = this->do_toupper(*__low); + ++__low; + } + return __high; + } + + char + ctype::do_tolower(char __c) const + { + int __x = __c; + return (this->is(ctype_base::upper, __c) ? (__x - 'A' + 'a') : __x); + } + + const char* + ctype::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 +// . + +/** @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 + #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