I would like to create a new mips target triplet (mips-mti-linux-gnu). This target would be multilib by default and would have --enable-synci on by default. It would mainly be used for building mips cross compilers with glibc. I hope to extend this target to support the n32 and 64 bit ABIs in the future and add a corresponding mips-mti-elf triplet that would be like mips-sde-elf but have fewer/different multilib versions.
Other then adding the new target the only changes are to the --enable-synci default setting (enabled for mips-mti-linux-gnu, still disabled for other targets) and in mips.h to use a new macro SYNCI_SPEC so that I don't have to copy all of OPTION_DEFAULT_SPECS into mti-linux.h just to change the -msynci handling. I tested the changes by building and running the testsuite with the qemu simulator. No glibc or binutils changes were needed for this. OK to checkin? Steve Ellcey sell...@mips.com 2012-09-04 Steve Ellcey <sell...@mips.com> * config.gcc: Add mips*-mti-linux* target and make with_synci true by default for that target. * config/mips/mips.h (SYNCI_SPEC): New. (OPTION_DEFAULT_SPECS): Use new SYNCI_SPEC. * mti-linux.h: New file. * t-mti-linux: New file. diff --git a/gcc/config.gcc b/gcc/config.gcc index 9ec8a41..6923211 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1685,6 +1685,13 @@ mips*-*-netbsd*) # NetBSD/mips, either endian. tm_file="elfos.h ${tm_file} mips/elf.h netbsd.h netbsd-elf.h mips/netbsd.h" extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ;; +mips*-mti-linux*) + tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h mips/mti-linux.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h" + tmake_file="${tmake_file} mips/t-mti-linux" + gnu_ld=yes + gas=yes + test x$with_llsc != x || with_llsc=yes + ;; 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 mips/linux-common.h" tmake_file="${tmake_file} mips/t-linux64" @@ -3262,10 +3269,19 @@ case "${target}" in yes) with_synci=synci ;; - "" | no) - # No is the default. + no) with_synci=no-synci ;; + "") + case "${target}" in + mips*-mti-*) + with_synci=synci + ;; + *) + with_synci=no-synci + ;; + esac + ;; *) echo "Unknown synci type used in --with-synci" 1>&2 exit 1 diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 9ce466d..b98b434 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -748,6 +748,9 @@ struct mips_cpu_info { specified. --with-divide is ignored if -mdivide-traps or -mdivide-breaks are specified. */ +#ifndef SYNCI_SPEC +#define SYNCI_SPEC "-m%(VALUE)" +#endif #define OPTION_DEFAULT_SPECS \ {"arch", "%{" MIPS_ARCH_OPTION_SPEC ":;: -march=%(VALUE)}" }, \ {"arch_32", "%{" OPT_ARCH32 ":%{" MIPS_ARCH_OPTION_SPEC ":;: -march=%(VALUE)}}" }, \ @@ -760,7 +763,7 @@ struct mips_cpu_info { {"divide", "%{!mdivide-traps:%{!mdivide-breaks:-mdivide-%(VALUE)}}" }, \ {"llsc", "%{!mllsc:%{!mno-llsc:-m%(VALUE)}}" }, \ {"mips-plt", "%{!mplt:%{!mno-plt:-m%(VALUE)}}" }, \ - {"synci", "%{!msynci:%{!mno-synci:-m%(VALUE)}}" } + {"synci", "%{!msynci:%{!mno-synci:" SYNCI_SPEC "}}" } /* A spec that infers the -mdsp setting from an -march argument. */ diff --git a/gcc/config/mips/mti-linux.h b/gcc/config/mips/mti-linux.h new file mode 100644 index 0000000..af3d71f --- /dev/null +++ b/gcc/config/mips/mti-linux.h @@ -0,0 +1,35 @@ +/* Target macros for mips*-mti-linux* targets. + 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/>. */ + +/* Use the (o)32 ABI and the mips32r2 architecture by default. */ +#undef MIPS_ABI_DEFAULT +#define MIPS_ABI_DEFAULT ABI_32 +#undef MIPS_ISA_DEFAULT +#define MIPS_ISA_DEFAULT 33 + +/* If -msynci/-mno-synci is not specified, default to -msynci on architectures + that support it and -mno-synci on architectures that do not. */ +#undef SYNCI_SPEC +#define SYNCI_SPEC "%{!mips32:%{!mips64:-m%(VALUE)}}" + +/* This target is a multilib target, specify the sysroot paths. */ +#undef SYSROOT_SUFFIX_SPEC +#define SYSROOT_SUFFIX_SPEC \ + "%{mips32:/mips32}%{mips64:/mips64}%{mips64r2:/mips64r2}%{msoft-float:/sof}%{mel|EL:/el}%{mabi=64:/64}%{mabi=n32:/n32}" diff --git a/gcc/config/mips/t-mti-linux b/gcc/config/mips/t-mti-linux new file mode 100644 index 0000000..ba11706 --- /dev/null +++ b/gcc/config/mips/t-mti-linux @@ -0,0 +1,24 @@ +# 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/>. + +# The default build is mips32r2, hard-float big-endian. Add mips32, +# soft-float, and little-endian variations. + +MULTILIB_OPTIONS = mips32/mips64/mips64r2 msoft-float EL +MULTILIB_DIRNAMES = mips32 mips64 mips64r2 sof el +MULTILIB_MATCHES = EL=mel EB=meb