From ec1a2a51fa75883e4bdf9f4f03e8fd16a261c275 Mon Sep 17 00:00:00 2001 From: Andrew Hsieh Date: Tue, 23 Oct 2012 20:16:45 +0800 Subject: Port MIPS Android support to GCC-4.6/4.7 Used to be local NDK patch at $NDK/build/tools/toolchain-patches/ gcc/0008-Port-MIPS-Android-support-to-GCC-4.6.patch Change-Id: I486ea194683b370dcb038488a92fadef7e2da1ac --- gcc-4.7/gcc/config.gcc | 6 ++++ gcc-4.7/gcc/config/mips/gnu-user.h | 52 ++++++++++++++++++++++++++------- gcc-4.7/gcc/config/mips/t-linux-android | 3 ++ 3 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 gcc-4.7/gcc/config/mips/t-linux-android (limited to 'gcc-4.7') diff --git a/gcc-4.7/gcc/config.gcc b/gcc-4.7/gcc/config.gcc index 5fcd1928c..44befba79 100644 --- a/gcc-4.7/gcc/config.gcc +++ b/gcc-4.7/gcc/config.gcc @@ -1790,6 +1790,12 @@ mips*-*-linux*) # Linux MIPS, either endian. mipsisa32*) tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32" esac + case ${target} in + *android*) + # Default to little-endian for MIPS Android + # tm_defines="${tm_defines} TARGET_ENDIAN_DEFAULT=0" + tmake_file="$tmake_file mips/t-linux-android" + esac test x$with_llsc != x || with_llsc=yes ;; mips*-*-openbsd*) diff --git a/gcc-4.7/gcc/config/mips/gnu-user.h b/gcc-4.7/gcc/config/mips/gnu-user.h index 49c459bc7..4ceb38fce 100644 --- a/gcc-4.7/gcc/config/mips/gnu-user.h +++ b/gcc-4.7/gcc/config/mips/gnu-user.h @@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see /* The GNU C++ standard library requires this. */ \ if (c_dialect_cxx ()) \ builtin_define ("_GNU_SOURCE"); \ + ANDROID_TARGET_OS_CPP_BUILTINS(); \ } while (0) #undef SUBTARGET_CPP_SPEC @@ -45,8 +46,8 @@ along with GCC; see the file COPYING3. If not see /* A standard GNU/Linux mapping. On most targets, it is included in CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC and provides this hook instead. */ -#undef SUBTARGET_CC1_SPEC -#define SUBTARGET_CC1_SPEC "%{profile:-p}" +#undef LINUX_SUBTARGET_CC1_SPEC +#define LINUX_SUBTARGET_CC1_SPEC "%{profile:-p}" /* From iris5.h */ /* -G is incompatible with -KPIC which is the default, so only allow objects @@ -55,8 +56,8 @@ along with GCC; see the file COPYING3. If not see #define MIPS_DEFAULT_GVALUE 0 /* Borrowed from sparc/linux.h */ -#undef LINK_SPEC -#define LINK_SPEC \ +#undef LINUX_SUBTARGET_LINK_SPEC +#define LINUX_SUBTARGET_LINK_SPEC \ "%(endian_spec) \ %{shared:-shared} \ %{!shared: \ @@ -90,8 +91,8 @@ along with GCC; see the file COPYING3. If not see #undef ASM_OUTPUT_REG_PUSH #undef ASM_OUTPUT_REG_POP -#undef LIB_SPEC -#define LIB_SPEC "\ +#undef LINUX_SUBTARGET_LIB_SPEC +#define LINUX_SUBTARGET_LIB_SPEC "\ %{pthread:-lpthread} \ %{shared:-lc} \ %{!shared: \ @@ -120,7 +121,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #endif #define LINUX_DRIVER_SELF_SPECS \ - NO_SHARED_SPECS \ + LINUX_OR_ANDROID_CC(NO_SHARED_SPECS, "") \ MARCH_MTUNE_NATIVE_SPECS, \ /* -mplt has no effect without -mno-shared. Simplify later \ specs handling by removing a redundant option. */ \ @@ -134,7 +135,36 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); LINUX_DRIVER_SELF_SPECS /* Similar to standard Linux, but adding -ffast-math support. */ -#undef ENDFILE_SPEC -#define ENDFILE_SPEC \ - "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ - %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" +#undef LINUX_TARGET_MATHFILE_SPEC +#define LINUX_TARGET_MATHFILE_SPEC \ + "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" + +#undef LINK_SPEC +#define LINK_SPEC \ + LINUX_OR_ANDROID_LD (LINUX_SUBTARGET_LINK_SPEC, \ + LINUX_SUBTARGET_LINK_SPEC " " ANDROID_LINK_SPEC) + +#undef SUBTARGET_CC1_SPEC +#define SUBTARGET_CC1_SPEC \ + LINUX_OR_ANDROID_CC (LINUX_SUBTARGET_CC1_SPEC, \ + LINUX_SUBTARGET_CC1_SPEC " " ANDROID_CC1_SPEC("-fpic")) + +#undef CC1PLUS_SPEC +#define CC1PLUS_SPEC \ + LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) + +#undef LIB_SPEC +#define LIB_SPEC \ + LINUX_OR_ANDROID_LD (LINUX_SUBTARGET_LIB_SPEC, \ + LINUX_SUBTARGET_LIB_SPEC " " ANDROID_LIB_SPEC) + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC \ + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, ANDROID_STARTFILE_SPEC) + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + LINUX_OR_ANDROID_LD (LINUX_TARGET_MATHFILE_SPEC " " \ + GNU_USER_TARGET_ENDFILE_SPEC, \ + LINUX_TARGET_MATHFILE_SPEC " " \ + ANDROID_ENDFILE_SPEC) diff --git a/gcc-4.7/gcc/config/mips/t-linux-android b/gcc-4.7/gcc/config/mips/t-linux-android new file mode 100644 index 000000000..298cad9d5 --- /dev/null +++ b/gcc-4.7/gcc/config/mips/t-linux-android @@ -0,0 +1,3 @@ +MULTILIB_OPTIONS = mips32r2 +MULTILIB_DIRNAMES = mips-r2 +MULTILIB_EXCLUSIONS := -- cgit v1.2.3