MIPS: support mips*64 as CPU and gnuabi64 as ABI
authorYunQiang Su <yunqiang.su@cipunited.com>
Tue, 18 Apr 2023 13:27:04 +0000 (21:27 +0800)
committerYunQiang Su <yunqiang.su@cipunited.com>
Sun, 23 Apr 2023 06:32:43 +0000 (14:32 +0800)
For MIPS64r6 ports, Debian as an example, `mipsisa64r6el` is
used as the cpu name in triple.
Let's recognize them by `mips*64*(el)`.

For 64bit Ports, like Debian's mips64el and mips64r6el ports,
`gnuabi64` is used as the abi section.
Let's use N64 abi by default for the triple with gnuabi64.

bfd/config.bfd
binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
gas/configure
gas/configure.ac
gold/configure.tgt
ld/configure.tgt

index 7af481048db3864e49a196247cc8fc24e3269a7c..1e4bea191dd80ccd838c1fed2ba006e266869468 100644 (file)
@@ -941,11 +941,21 @@ case "${targ}" in
     targ_defvec=mips_elf32_be_vec
     targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
     ;;
-  mips64*el-*-linux*)
+  mips*64*el-*-linux*-gnuabi64)
+    targ_defvec=mips_elf64_trad_le_vec
+    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec"
+    want64=true
+    ;;
+  mips*64*-*-linux*-gnuabi64)
+    targ_defvec=mips_elf64_trad_be_vec
+    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
+    want64=true
+    ;;
+  mips*64*el-*-linux*)
     targ_defvec=mips_elf32_ntrad_le_vec
     targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
     ;;
-  mips64*-*-linux*)
+  mips*64*-*-linux*)
     targ_defvec=mips_elf32_ntrad_be_vec
     targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
     ;;
index c2a581858ed30e5e657dd6fb197af51224ff0872..5e24e7a115eca840253dd5ddfe484ec595ad4d9d 100644 (file)
@@ -1,4 +1,5 @@
 #PROG: objcopy
+#as: -n32
 #readelf: --notes --wide
 #objcopy: --merge-notes
 #name: MIPS merge notes section (n32)
index b56836998ef05c5a0bcf2c5f3b8ac01309b15e50..868f4a911a9d261c18afeefb70726e46e56d04af 100755 (executable)
@@ -12223,7 +12223,10 @@ _ACEOF
        esac
        # Decide which ABI to target by default.
        case ${target} in
-         mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
+         mips*64*-linux-gnuabi64)
+           mips_default_abi=N64_ABI
+           ;;
+         mips*64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
          | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
            mips_default_abi=N32_ABI
            ;;
index 6a68fd7c4e6d6d8e5f5d7c5da8515f51bab9f1c0..03728ffce4de1285696577b933c734bf53d01380 100644 (file)
@@ -392,7 +392,10 @@ changequote([,])dnl
        esac
        # Decide which ABI to target by default.
        case ${target} in
-         mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
+         mips*64*-linux-gnuabi64)
+           mips_default_abi=N64_ABI
+           ;;
+         mips*64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
          | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
            mips_default_abi=N32_ABI
            ;;
index 4b54e08d27f61e128e05550350bfc1a7a9e6c49f..ef47ce079f1c15ef17162917f932364be1487f3d 100644 (file)
@@ -153,6 +153,13 @@ aarch64*-*)
  targ_big_endian=false
  targ_extra_big_endian=true
  ;;
+mips*64*el*-*-*|mips*64*le*-*-*)
+ targ_obj=mips
+ targ_machine=EM_MIPS_RS3_LE
+ targ_size=64
+ targ_big_endian=false
+ targ_extra_big_endian=true
+ ;;
 mips*el*-*-*|mips*le*-*-*)
  targ_obj=mips
  targ_machine=EM_MIPS_RS3_LE
@@ -160,6 +167,13 @@ mips*el*-*-*|mips*le*-*-*)
  targ_big_endian=false
  targ_extra_big_endian=true
  ;;
+mips*64*-*-*)
+ targ_obj=mips
+ targ_machine=EM_MIPS
+ targ_size=64
+ targ_big_endian=true
+ targ_extra_big_endian=false
+ ;;
 mips*-*-*)
  targ_obj=mips
  targ_machine=EM_MIPS
index 34c9d67c3659b47e912ab6853a3f0986524677a9..4a71f679e29c29fc0429565ae95dd05fabbf995f 100644 (file)
@@ -580,11 +580,19 @@ mips*-*-vxworks*) targ_emul=elf32ebmipvxworks
                        ;;
 mips*-*-windiss)       targ_emul=elf32mipswindiss
                        ;;
-mips64*el-*-linux-*)   targ_emul=elf32ltsmipn32
+mips*64*el-*-linux-gnuabi64)   targ_emul=elf64ltsmip
+                       targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
+                       targ_extra_libpath=$targ_extra_emuls
+                       ;;
+mips*64*el-*-linux-*)  targ_emul=elf32ltsmipn32
                        targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
                        targ_extra_libpath=$targ_extra_emuls
                        ;;
-mips64*-*-linux-*)     targ_emul=elf32btsmipn32
+mips*64*-*-linux-gnuabi64)     targ_emul=elf64btsmip
+                       targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
+                       targ_extra_libpath=$targ_extra_emuls
+                       ;;
+mips*64*-*-linux-*)    targ_emul=elf32btsmipn32
                        targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
                        targ_extra_libpath=$targ_extra_emuls
                        ;;