This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: MIPS Android patch


On 20/04/2012, at 1:34 PM, Fu, Chao-Ying wrote:

> Hi Maxim, Richard,
> 
>  I built cross-toolchains for 3 different targets as follows.
> 1. mips-linux-gnu
> 2. mips-linux-gnu --enable-targets=all
> 3. mips64-linux-gnu
> 
>  These targets are affected by this MIPS Android patch.
> 
>  Then, I checked the output from "gcc -dumpspecs" before and after applying the patch.
> The specs have 6 places of differences for Android due to new defines in linux-common.h.
> I am also building GCC natively, and will test GCC natively later.
> Any feedback?  Thanks!
> 
> Regards,
> Chao-ying
> 
> libgcc/ChangeLog
> 2012-04-19  Chao-ying Fu  <fu@mips.com>
> 
> 	* unwind-dw2-fde-dip.c: Define USE_PT_GNU_EH_FRAME for BIONIC.

This piece is trivial, so, given that Richard approved the MIPS changes, you are clear to check in after amending the patch per Richard's comments.  Please check in the patch to unwind-dw2-fde-dip.c separately, as it is a change on its own.

Thank you,

--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics



> 
> gcc/ChangeLog
> 2012-04-19  Chao-ying Fu  <fu@mips.com>
> 
> 	* config.gcc (mips64*-*-linux*): Append mips/linux-common.h to tm_file.
> 	(mips*-*-linux*): Append mips/linux-common.h to tm_file.
> 	* config/mips/gnu-user.h (GNU_USER_SUBTARGET_CC1_SPEC): New define.
> 	(SUBTARGET_CC1_SPEC): Use GNU_USER_SUBTARGET_CC1_SPEC.
> 	(GNU_USER_TARGET_LINK_SPEC): New define.
> 	(LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC.
> 	(GNU_USER_TARGET_LIB_SPEC): New define.
> 	(LIB_SPEC): Use GNU_USER_TARGET_LIB_SPEC.
> 	(GNU_USER_TARGET_MATHFILE_SPEC): New define.
> 	(ENDFILE_SPEC): Use GNU_USER_TARGET_MATHFILE_SPEC and GNU_USER_TARGET_ENDFILE_SPEC.
> 	* config/mips/gnu-user64.h (GNU_USER_TARGET_LIB_SPEC): New define.
> 	(LIB_SPEC): Use GNU_USER_TARGET_LIB_SPEC.
> 	(LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC.
> 	(GNU_USER_TARGET_LIB_SPEC): New define.
> 	* config/mips/linux-common.h: New file.
> 
> Index: libgcc/unwind-dw2-fde-dip.c
> ===================================================================
> --- libgcc/unwind-dw2-fde-dip.c	(revision 186580)
> +++ libgcc/unwind-dw2-fde-dip.c	(working copy)
> @@ -54,6 +54,11 @@
> #endif
> 
> #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
> +    && defined(__BIONIC__)
> +# define USE_PT_GNU_EH_FRAME
> +#endif
> +
> +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
>     && defined(__FreeBSD__) && __FreeBSD__ >= 7
> # define ElfW __ElfN
> # define USE_PT_GNU_EH_FRAME
> Index: gcc/config.gcc
> ===================================================================
> --- gcc/config.gcc	(revision 186580)
> +++ gcc/config.gcc	(working copy)
> @@ -1712,7 +1712,7 @@
> 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
> 	;;
> mips64*-*-linux* | mipsisa64*-*-linux*)
> -	tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h"
> +	tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h"
> 	tmake_file="${tmake_file} mips/t-linux64"
> 	tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32"
> 	case ${target} in
> @@ -1738,6 +1738,7 @@
> 		tm_file="${tm_file} mips/gnu-user64.h mips/linux64.h"
> 		tmake_file="${tmake_file} mips/t-linux64"
> 	fi
> +	tm_file="${tm_file} mips/linux-common.h"
> 	case ${target} in
>         mipsisa32r2*)
> 		tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33"
> Index: gcc/config/mips/gnu-user.h
> ===================================================================
> --- gcc/config/mips/gnu-user.h	(revision 186580)
> +++ gcc/config/mips/gnu-user.h	(working copy)
> @@ -45,8 +45,10 @@
> /* 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 GNU_USER_SUBTARGET_CC1_SPEC
> +#define GNU_USER_SUBTARGET_CC1_SPEC "%{profile:-p}"
> #undef SUBTARGET_CC1_SPEC
> -#define SUBTARGET_CC1_SPEC "%{profile:-p}"
> +#define SUBTARGET_CC1_SPEC GNU_USER_SUBTARGET_CC1_SPEC
> 
> /* -G is incompatible with -KPIC which is the default, so only allow objects
>    in the small data section if the user explicitly asks for it.  */
> @@ -54,8 +56,8 @@
> #define MIPS_DEFAULT_GVALUE 0
> 
> /* Borrowed from sparc/linux.h */
> -#undef LINK_SPEC
> -#define LINK_SPEC \
> +#undef GNU_USER_TARGET_LINK_SPEC
> +#define GNU_USER_TARGET_LINK_SPEC \
>  "%(endian_spec) \
>   %{shared:-shared} \
>   %{!shared: \
> @@ -63,6 +65,8 @@
>       %{rdynamic:-export-dynamic} \
>       -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \
>       %{static:-static}}"
> +#undef LINK_SPEC
> +#define LINK_SPEC GNU_USER_TARGET_LINK_SPEC
> 
> #undef SUBTARGET_ASM_SPEC
> #define SUBTARGET_ASM_SPEC \
> @@ -89,12 +93,14 @@
> #undef ASM_OUTPUT_REG_PUSH
> #undef ASM_OUTPUT_REG_POP
> 
> -#undef LIB_SPEC
> -#define LIB_SPEC "\
> +#undef GNU_USER_TARGET_LIB_SPEC
> +#define GNU_USER_TARGET_LIB_SPEC "\
> %{pthread:-lpthread} \
> %{shared:-lc} \
> %{!shared: \
>   %{profile:-lc_p} %{!profile:-lc}}"
> +#undef LIB_SPEC
> +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
> 
> #ifdef HAVE_AS_NO_SHARED
> /* Default to -mno-shared for non-PIC.  */
> @@ -133,7 +139,10 @@
>   LINUX_DRIVER_SELF_SPECS
> 
> /* Similar to standard Linux, but adding -ffast-math support.  */
> +#undef	GNU_USER_TARGET_MATHFILE_SPEC
> +#define GNU_USER_TARGET_MATHFILE_SPEC \
> +  "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
> #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"
> +  GNU_USER_TARGET_MATHFILE_SPEC " " \
> +  GNU_USER_TARGET_ENDFILE_SPEC
> Index: gcc/config/mips/gnu-user64.h
> ===================================================================
> --- gcc/config/mips/gnu-user64.h	(revision 186580)
> +++ gcc/config/mips/gnu-user64.h	(working copy)
> @@ -27,15 +27,17 @@
>   " %{!EB:%{!EL:%(endian_spec)}}" \
>   " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}"
> 
> -#undef LIB_SPEC
> -#define LIB_SPEC "\
> +#undef GNU_USER_TARGET_LIB_SPEC
> +#define GNU_USER_TARGET_LIB_SPEC "\
> %{pthread:-lpthread} \
> %{shared:-lc} \
> %{!shared: \
>   %{profile:-lc_p} %{!profile:-lc}}"
> +#undef LIB_SPEC
> +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
> 
> -#undef LINK_SPEC
> -#define LINK_SPEC "\
> +#undef GNU_USER_TARGET_LINK_SPEC
> +#define GNU_USER_TARGET_LINK_SPEC "\
> %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \
> %{shared} \
>  %(endian_spec) \
> @@ -49,6 +51,8 @@
> %{mabi=n32:-m" GNU_USER_LINK_EMULATIONN32 "} \
> %{mabi=64:-m" GNU_USER_LINK_EMULATION64 "} \
> %{mabi=32:-m" GNU_USER_LINK_EMULATION32 "}"
> +#undef LINK_SPEC
> +#define LINK_SPEC GNU_USER_TARGET_LINK_SPEC
> 
> #undef LOCAL_LABEL_PREFIX
> #define LOCAL_LABEL_PREFIX (TARGET_OLDABI ? "$" : ".")
> Index: gcc/config/mips/linux-common.h
> ===================================================================
> --- gcc/config/mips/linux-common.h	(revision 0)
> +++ gcc/config/mips/linux-common.h	(revision 0)
> @@ -0,0 +1,58 @@
> +/* Definitions for MIPS running Linux-based GNU systems with ELF format.
> +   Copyright (C) 2012 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/>.  */
> +
> +#undef  TARGET_OS_CPP_BUILTINS
> +#define TARGET_OS_CPP_BUILTINS()				\
> +  do {								\
> +    GNU_USER_TARGET_OS_CPP_BUILTINS();				\
> +    /* The GNU C++ standard library requires this.  */		\
> +    if (c_dialect_cxx ())					\
> +      builtin_define ("_GNU_SOURCE");				\
> +    ANDROID_TARGET_OS_CPP_BUILTINS();				\
> +  } while (0)
> +
> +#undef  LINK_SPEC
> +#define LINK_SPEC							\
> +  LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LINK_SPEC,			\
> +		       GNU_USER_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC)
> +
> +#undef  SUBTARGET_CC1_SPEC
> +#define SUBTARGET_CC1_SPEC						\
> +  LINUX_OR_ANDROID_CC (GNU_USER_SUBTARGET_CC1_SPEC,			\
> +		       GNU_USER_SUBTARGET_CC1_SPEC " " ANDROID_CC1_SPEC)
> +
> +#undef  CC1PLUS_SPEC
> +#define CC1PLUS_SPEC							\
> +  LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC)
> +
> +#undef  LIB_SPEC
> +#define LIB_SPEC							\
> +  LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC,			\
> +		       GNU_USER_TARGET_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 (GNU_USER_TARGET_MATHFILE_SPEC " "		\
> +		       GNU_USER_TARGET_ENDFILE_SPEC,			\
> +		       GNU_USER_TARGET_MATHFILE_SPEC " "		\
> +		       ANDROID_ENDFILE_SPEC)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]