Richard Sandiford wrote: > > 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}" > > This is the default GNU_USER_TARGET_CC1_SPEC, so let's remove these > two lines and use GNU_USER_TARGET_CC1_SPEC... > > > -#define SUBTARGET_CC1_SPEC "%{profile:-p}" > > +#define SUBTARGET_CC1_SPEC GNU_USER_SUBTARGET_CC1_SPEC > > ...here.
Yes. > > > @@ -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}}" > > This is the default GNU_USER_TARGET_LIB_SPEC, except that the default > one has an -mieee-fp rule that would be unnecessary but > harmless on MIPS. > Let's remove this definition entirely and just have: > > > +#undef LIB_SPEC > > +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC > > ...this bit. Yes. > > > @@ -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 > > Nice reuse of GNU_USER_TARGET_ENDFILE_SPEC. More cut-&-paste > gone. :-) > > > 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}}" > > gnu-user64.h has to be included after gnu-user.h, so it looks like > this code was already redundant before your patch. Let's > just remove it. Yes. > > The config/mips parts are OK from my POV with those changes. And with > those changes this is a nice cleanup in its own right, thanks. > Here is the revised patch without unwind-dw2-fde-dip.c. I will check in this patch and the 2nd patch for unwinding soon. Thanks a lot! Regards, Chao-ying gcc/ChangeLog 2012-04-23 Chao-ying Fu <f...@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 (SUBTARGET_CC1_SPEC): Use GNU_USER_TARGET_CC1_SPEC directly. (GNU_USER_TARGET_LINK_SPEC): New define. (LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC. (LIB_SPEC): Use GNU_USER_TARGET_LIB_SPEC directly. (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 (LIB_SPEC): Remove. (LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC. (GNU_USER_TARGET_LIB_SPEC): New define. * config/mips/linux-common.h: New file. Index: config.gcc =================================================================== --- config.gcc (revision 186728) +++ 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: config/mips/gnu-user.h =================================================================== --- config/mips/gnu-user.h (revision 186728) +++ config/mips/gnu-user.h (working copy) @@ -46,7 +46,7 @@ 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}" +#define SUBTARGET_CC1_SPEC GNU_USER_TARGET_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 +54,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 +63,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 \ @@ -90,11 +92,7 @@ #undef ASM_OUTPUT_REG_POP #undef LIB_SPEC -#define LIB_SPEC "\ -%{pthread:-lpthread} \ -%{shared:-lc} \ -%{!shared: \ - %{profile:-lc_p} %{!profile:-lc}}" +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC #ifdef HAVE_AS_NO_SHARED /* Default to -mno-shared for non-PIC. */ @@ -133,7 +131,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: config/mips/gnu-user64.h =================================================================== --- config/mips/gnu-user64.h (revision 186728) +++ config/mips/gnu-user64.h (working copy) @@ -27,15 +27,8 @@ " %{!EB:%{!EL:%(endian_spec)}}" \ " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}" -#undef LIB_SPEC -#define LIB_SPEC "\ -%{pthread:-lpthread} \ -%{shared:-lc} \ -%{!shared: \ - %{profile:-lc_p} %{!profile:-lc}}" - -#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 +42,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: config/mips/linux-common.h =================================================================== --- config/mips/linux-common.h (revision 0) +++ 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_TARGET_CC1_SPEC, \ + GNU_USER_TARGET_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)