Message ID | 057a8a56-4067-41bb-b806-e1280a0a69a2@BAMAIL02.ba.imgtec.org |
---|---|
State | New |
Headers | show |
Hi Steve, You're the lucky recipient of my first review so apologies for being slow and cautious... I tried to find a reason why the files were originally separated like this and I can't see anything obvious. I assume you also found no reason. Presumably the separation was just to avoid disturbing the 32-bit configs but I think it is a sensible move to merge them. > --- a/gcc/config/mips/gnu-user.h > +++ b/gcc/config/mips/gnu-user.h > @@ -52,16 +52,20 @@ along with GCC; see the file COPYING3. If not see > #undef MIPS_DEFAULT_GVALUE > #define MIPS_DEFAULT_GVALUE 0 > > -/* Borrowed from sparc/linux.h */ > #undef GNU_USER_TARGET_LINK_SPEC > -#define GNU_USER_TARGET_LINK_SPEC \ > - "%(endian_spec) \ > - %{shared:-shared} \ > +#define GNU_USER_TARGET_LINK_SPEC "\ > +%{G*} %{EB} %{EL} %{!EB:%{!EL:%(endian_spec)}} %{mips*} \ > +%{shared} \ Indent two lines above. The '%{!EB:%{!EL:%(endian_spec)}}' is redundant as it is covered by the DRIVER_SELF_SPEC which you have added below. The linker won't accept -mips16 so you should use MIPS_ISA_LEVEL_OPTION_SPEC to avoid passing mips16. Although we still end up with an explicit list at least there is just one copy to maintain. > %{!shared: \ > %{!static: \ > %{rdynamic:-export-dynamic} \ > - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \ > - %{static:-static}}" > + %{mabi=n32: -dynamic-linker " GNU_USER_DYNAMIC_LINKERN32 "} \ > + %{mabi=64: -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "} \ > + %{mabi=32: -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ > + %{static:-static}} \ Very much a nit but if we are going to have %{shared} above then we should have just %{static} here. > +%{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 > > @@ -122,7 +126,9 @@ extern const char *host_detect_local_cpu (int argc, > const char **argv); > specs handling by removing a redundant option. */ \ > "%{!mno-shared:%<mplt}", \ > /* -mplt likewise has no effect for -mabi=64 without -msym32. */ \ > - "%{mabi=64:%{!msym32:%<mplt}}" > + "%{mabi=64:%{!msym32:%<mplt}}" \ > + " %{!EB:%{!EL:%(endian_spec)}}" \ > + " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}" Another nit, since this code is being changed can you update this from using a leading space to be a comma separated list of strings like this: > + "%{mabi=64:%{!msym32:%<mplt}}", \ > + "%{!EB:%{!EL:%(endian_spec)}}", \ > + "%{!mabi=*: -" MULTILIB_ABI_DEFAULT "}" With those changes can you double check that a default big and default little endian build pass -EB/-EL respectively by default and are changed when using -EL/-EB explicitly? There should only be one -E* option passed to the linker theoretically, unless multiple explicit -E* options are given on the command line. Otherwise OK (assuming the link specs behave as described above). Thanks, Matthew
On Mon, 2014-10-06 at 14:25 -0700, Matthew Fortune wrote: > Hi Steve, > > You're the lucky recipient of my first review so apologies for being > slow and cautious... > > I tried to find a reason why the files were originally separated like this > and I can't see anything obvious. I assume you also found no reason. > Presumably the separation was just to avoid disturbing the 32-bit configs > but I think it is a sensible move to merge them. That was also my guess as to why it was done that way. > With those changes can you double check that a default big and default little > endian build pass -EB/-EL respectively by default and are changed when using > -EL/-EB explicitly? There should only be one -E* option passed to the linker > theoretically, unless multiple explicit -E* options are given on the command > line. I made the syntax changes, removed the '%{!EB:%{!EL:%(endian_spec)}}' part of GNU_USER_TARGET_LINK_SPEC and double checked that we still pass -EL or -EB to the linker in all cases. > Otherwise OK (assuming the link specs behave as described above). > > Thanks, > Matthew Thanks for the review, I have gone ahead and checked in the patch with those changes. Steve Ellcey sellcey@mips.com
diff --git a/gcc/config.gcc b/gcc/config.gcc index 0e50e9a..ce06656 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1941,7 +1941,7 @@ mips*-*-netbsd*) # NetBSD/mips, either endian. extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ;; mips*-mti-linux*) - tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h mips/mti-linux.h" + tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h mips/mti-linux.h" extra_options="${extra_options} linux-android.opt" tmake_file="${tmake_file} mips/t-mti-linux" tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_32" @@ -1949,7 +1949,7 @@ mips*-mti-linux*) gas=yes ;; mips64*-*-linux* | mipsisa64*-*-linux*) - tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h" + tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h" extra_options="${extra_options} linux-android.opt" tmake_file="${tmake_file} mips/t-linux64" tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32" @@ -1973,7 +1973,6 @@ mips*-*-linux*) # Linux MIPS, either endian. tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h" extra_options="${extra_options} linux-android.opt" if test x$enable_targets = xall; then - 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" diff --git a/gcc/config/mips/gnu-user.h b/gcc/config/mips/gnu-user.h index 638d7f0..3bb2248 100644 --- a/gcc/config/mips/gnu-user.h +++ b/gcc/config/mips/gnu-user.h @@ -52,16 +52,20 @@ along with GCC; see the file COPYING3. If not see #undef MIPS_DEFAULT_GVALUE #define MIPS_DEFAULT_GVALUE 0 -/* Borrowed from sparc/linux.h */ #undef GNU_USER_TARGET_LINK_SPEC -#define GNU_USER_TARGET_LINK_SPEC \ - "%(endian_spec) \ - %{shared:-shared} \ +#define GNU_USER_TARGET_LINK_SPEC "\ +%{G*} %{EB} %{EL} %{!EB:%{!EL:%(endian_spec)}} %{mips*} \ +%{shared} \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \ - %{static:-static}}" + %{mabi=n32: -dynamic-linker " GNU_USER_DYNAMIC_LINKERN32 "} \ + %{mabi=64: -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "} \ + %{mabi=32: -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ + %{static:-static}} \ +%{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 @@ -122,7 +126,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); specs handling by removing a redundant option. */ \ "%{!mno-shared:%<mplt}", \ /* -mplt likewise has no effect for -mabi=64 without -msym32. */ \ - "%{mabi=64:%{!msym32:%<mplt}}" + "%{mabi=64:%{!msym32:%<mplt}}" \ + " %{!EB:%{!EL:%(endian_spec)}}" \ + " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}" #undef DRIVER_SELF_SPECS #define DRIVER_SELF_SPECS \ @@ -137,3 +143,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define ENDFILE_SPEC \ GNU_USER_TARGET_MATHFILE_SPEC " " \ GNU_USER_TARGET_ENDFILE_SPEC + +#undef LOCAL_LABEL_PREFIX +#define LOCAL_LABEL_PREFIX (TARGET_OLDABI ? "$" : ".") diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h index e539422..a117f90 100644 --- a/gcc/config/mips/linux.h +++ b/gcc/config/mips/linux.h @@ -17,9 +17,27 @@ 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/>. */ -#define GLIBC_DYNAMIC_LINKER \ +#define GNU_USER_LINK_EMULATION32 "elf32%{EB:b}%{EL:l}tsmip" +#define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip" +#define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32" + +#define GLIBC_DYNAMIC_LINKER32 \ "%{mnan=2008:/lib/ld-linux-mipsn8.so.1;:/lib/ld.so.1}" +#define GLIBC_DYNAMIC_LINKER64 \ + "%{mnan=2008:/lib64/ld-linux-mipsn8.so.1;:/lib64/ld.so.1}" +#define GLIBC_DYNAMIC_LINKERN32 \ + "%{mnan=2008:/lib32/ld-linux-mipsn8.so.1;:/lib32/ld.so.1}" -#undef UCLIBC_DYNAMIC_LINKER -#define UCLIBC_DYNAMIC_LINKER \ +#undef UCLIBC_DYNAMIC_LINKER32 +#define UCLIBC_DYNAMIC_LINKER32 \ "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}" +#undef UCLIBC_DYNAMIC_LINKER64 +#define UCLIBC_DYNAMIC_LINKER64 \ + "%{mnan=2008:/lib/ld64-uClibc-mipsn8.so.0;:/lib/ld64-uClibc.so.0}" +#define UCLIBC_DYNAMIC_LINKERN32 \ + "%{mnan=2008:/lib32/ld-uClibc-mipsn8.so.0;:/lib32/ld-uClibc.so.0}" + +#define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32" +#define GNU_USER_DYNAMIC_LINKERN32 \ + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \ + BIONIC_DYNAMIC_LINKERN32)