From 9171de358f230b64646bbb525a74e5f8e3dbe0dc Mon Sep 17 00:00:00 2001 From: YunQiang Su Date: Tue, 18 Apr 2023 21:49:22 +0800 Subject: [PATCH] MIPS: default output r6 obj if the triple is r6 If the triple is mipsisa32r6* or mipsisa64r6*, ld/as should output r6 objects by default. The triples with vendor `img` should do same. The examples include: as xx.s -o xx.o ld -r -b binary xx.dat -o xx.o --- bfd/config.bfd | 6 ++++++ bfd/elfxx-mips.c | 4 ++-- bfd/elfxx-mips.h | 4 ++++ gas/configure | 9 +++++++++ gas/configure.ac | 9 +++++++++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/bfd/config.bfd b/bfd/config.bfd index 1e4bea191dd..78752994456 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -1535,3 +1535,9 @@ case "${targ_defvec} ${targ_selvecs}" in targ_archs="$targ_archs bfd_iamcu_arch" ;; esac + +case "${targ}" in + mipsisa32r6* | mipsisa64r6* | mips*-img-*) + targ_cflags="$targ_cflags -DMIPS_DEFAULT_R6=1" + ;; +esac diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 13a89953293..c9cd2f8099f 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -12327,9 +12327,9 @@ mips_set_isa_flags (bfd *abfd) { default: if (ABI_N32_P (abfd) || ABI_64_P (abfd)) - val = E_MIPS_ARCH_3; + val = MIPS_DEFAULT_R6 ? E_MIPS_ARCH_64R6 : E_MIPS_ARCH_3; else - val = E_MIPS_ARCH_1; + val = MIPS_DEFAULT_R6 ? E_MIPS_ARCH_32R6 : E_MIPS_ARCH_1; break; case bfd_mach_mips3000: diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index 4addf6f5d1a..f15dceac48e 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -29,6 +29,10 @@ enum reloc_check check_shuffle }; +#ifndef MIPS_DEFAULT_R6 +#define MIPS_DEFAULT_R6 0 +#endif + extern bool _bfd_mips_elf_mkobject (bfd *); extern bool _bfd_mips_elf_close_and_cleanup diff --git a/gas/configure b/gas/configure index 868f4a911a9..0daa80d5b4c 100755 --- a/gas/configure +++ b/gas/configure @@ -12211,6 +12211,15 @@ _ACEOF use_e_mips_abi_o32=1 ;; esac + # If Vendor is IMG, then MIPSr6 is used + case ${target} in + mips*64*-img-*) + mips_cpu=mips64r6 + ;; + mips*-img-*) + mips_cpu=mips32r6 + ;; + esac # Decide whether to generate 32-bit or 64-bit code by default. # Used to resolve -march=from-abi when an embedded ABI is selected. case ${target} in diff --git a/gas/configure.ac b/gas/configure.ac index 03728ffce4d..2b91f9ec616 100644 --- a/gas/configure.ac +++ b/gas/configure.ac @@ -380,6 +380,15 @@ changequote([,])dnl use_e_mips_abi_o32=1 ;; esac + # If Vendor is IMG, then MIPSr6 is used + case ${target} in + mips*64*-img-*) + mips_cpu=mips64r6 + ;; + mips*-img-*) + mips_cpu=mips32r6 + ;; + esac # Decide whether to generate 32-bit or 64-bit code by default. # Used to resolve -march=from-abi when an embedded ABI is selected. case ${target} in -- 2.30.2