]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
RISC-V: PR25212, Report errors for invalid march and mabi combinations.
authorNelson Chu <nelson.chu@sifive.com>
Fri, 21 May 2021 07:40:33 +0000 (15:40 +0800)
committerNelson Chu <nelson.chu@sifive.com>
Mon, 24 May 2021 03:47:18 +0000 (11:47 +0800)
This patch clarify the following invalid combinations of march and mabi,
* ilp32f/lp64f abi without f extension.
* ilp32d/lp64d abi without d extension.
* ilp32q/lp64q abi without q extension.
* e extension with any abi except ilp32e

GNU assembler reports errors when finding the above invalid combinations.
But LLVM-MC reports warnings and ignores these invalid cases.  It help to
set the correct ilp32/lp64/ilp32e abi according to rv32/rv64/rve.  This
looks good and convenient, so perhaps we can do the same things.  However,
if you don't set the mabi, GNU assembler also try to set the suitable
ABI according to march/elf-attribute.  Compared to LLVM-MC, we will choose
double/quad abi if d/f extension is set.

gas/
    PR 25212
    * config/tc-riscv.c (riscv_set_abi_by_arch): If -mabi isn't set, we
    will choose ilp32e abi for rv32e.  Besides, report errors for the
    invalid march and mabi combinations.
    * testsuite/gas/riscv/mabi-attr-rv32e.s: New testcase.  Only accept
    ilp32e abi for rve extension.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.
    Renamed all mabi testcases to their march-mabi settings.

27 files changed:
gas/ChangeLog
gas/config/tc-riscv.c
gas/testsuite/gas/riscv/mabi-attr-rv32e.s [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-attr-rv32i.s [moved from gas/testsuite/gas/riscv/mabi-attr-01.s with 100% similarity]
gas/testsuite/gas/riscv/mabi-attr-rv32id.s [moved from gas/testsuite/gas/riscv/mabi-attr-02.s with 100% similarity]
gas/testsuite/gas/riscv/mabi-attr-rv64iq.s [moved from gas/testsuite/gas/riscv/mabi-attr-03.s with 100% similarity]
gas/testsuite/gas/riscv/mabi-fail-01.d [deleted file]
gas/testsuite/gas/riscv/mabi-fail-02.d [deleted file]
gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.l [moved from gas/testsuite/gas/riscv/mabi-fail-01.l with 100% similarity]
gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d [new file with mode: 0644]
gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l [moved from gas/testsuite/gas/riscv/mabi-fail-02.l with 100% similarity]
gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d [moved from gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d with 58% similarity]
gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d [moved from gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d with 71% similarity]
gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d [moved from gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d with 82% similarity]
gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d [moved from gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d with 86% similarity]
gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d [moved from gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d with 82% similarity]
gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d [moved from gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d with 86% similarity]
gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d [moved from gas/testsuite/gas/riscv/mabi-noabi-march-01.d with 100% similarity]
gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d [moved from gas/testsuite/gas/riscv/mabi-noabi-march-02.d with 85% similarity]
gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d [moved from gas/testsuite/gas/riscv/mabi-noabi-march-03.d with 84% similarity]

index cf135d98d518c25cc44a8409a3caccf063f5f912..bc7a00fb223e9964c5d81541dafe3965eec23549 100644 (file)
@@ -1,3 +1,19 @@
+2021-05-24  Nelson Chu  <nelson.chu@sifive.com>
+
+       PR 25212
+       * config/tc-riscv.c (riscv_set_abi_by_arch): If -mabi isn't set, we
+       will choose ilp32e abi for rv32e.  Besides, report errors for the
+       invalid march and mabi combinations.
+       * testsuite/gas/riscv/mabi-attr-rv32e.s: New testcase.  Only accept
+       ilp32e abi for rve extension.
+       * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d: Likewise.
+       * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l: Likewise.
+       * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d: Likewise.
+       * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l: Likewise.
+       * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.
+       * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.
+       Renamed all mabi testcases to their march-mabi settings.
+
 2021-05-22  Alan Modra  <amodra@gmail.com>
 
        PR 25599
index 3fff33e9a11cefc88cde74cd37212ae22c0bfd77..a76e53d51c305cd26f242e596e582e793a8bfd12 100644 (file)
@@ -441,6 +441,8 @@ riscv_set_abi_by_arch (void)
        riscv_set_abi (xlen, FLOAT_ABI_QUAD, false);
       else if (riscv_subset_supports ("d"))
        riscv_set_abi (xlen, FLOAT_ABI_DOUBLE, false);
+      else if (riscv_subset_supports ("e"))
+       riscv_set_abi (xlen, FLOAT_ABI_SOFT, true);
       else
        riscv_set_abi (xlen, FLOAT_ABI_SOFT, false);
     }
@@ -451,6 +453,22 @@ riscv_set_abi_by_arch (void)
        as_bad ("can't have %d-bit ABI on %d-bit ISA", abi_xlen, xlen);
       else if (abi_xlen < xlen)
        as_bad ("%d-bit ABI not yet supported on %d-bit ISA", abi_xlen, xlen);
+
+      if (riscv_subset_supports ("e") && !rve_abi)
+       as_bad ("only the ilp32e ABI is supported for e extension");
+
+      if (float_abi == FLOAT_ABI_SINGLE
+         && !riscv_subset_supports ("f"))
+       as_bad ("ilp32f/lp64f ABI can't be used when f extension "
+               "isn't supported");
+      else if (float_abi == FLOAT_ABI_DOUBLE
+              && !riscv_subset_supports ("d"))
+       as_bad ("ilp32d/lp64d ABI can't be used when d extension "
+               "isn't supported");
+      else if (float_abi == FLOAT_ABI_QUAD
+              && !riscv_subset_supports ("q"))
+       as_bad ("ilp32q/lp64q ABI can't be used when q extension "
+               "isn't supported");
     }
 
   /* Update the EF_RISCV_FLOAT_ABI field of elf_flags.  */
diff --git a/gas/testsuite/gas/riscv/mabi-attr-rv32e.s b/gas/testsuite/gas/riscv/mabi-attr-rv32e.s
new file mode 100644 (file)
index 0000000..846c023
--- /dev/null
@@ -0,0 +1 @@
+       .attribute arch,"rv32e"
diff --git a/gas/testsuite/gas/riscv/mabi-fail-01.d b/gas/testsuite/gas/riscv/mabi-fail-01.d
deleted file mode 100644 (file)
index 7804934..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#as: -march-attr -mabi=lp64d
-#source: mabi-attr-01.s
-#error_output: mabi-fail-01.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-02.d b/gas/testsuite/gas/riscv/mabi-fail-02.d
deleted file mode 100644 (file)
index 2d6cfb0..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#as: -march-attr -mabi=ilp32
-#source: mabi-attr-03.s
-#error_output: mabi-fail-02.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d
new file mode 100644 (file)
index 0000000..04d402a
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march-attr -mabi=lp64d
+#source: mabi-attr-rv32e.s
+#error_output: mabi-fail-rv32e-lp64d.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l
new file mode 100644 (file)
index 0000000..f7306cb
--- /dev/null
@@ -0,0 +1,4 @@
+.*Assembler messages:
+.*Error: can't have 64-bit ABI on 32-bit ISA
+.*Error: only the ilp32e ABI is supported for e extension
+.*Error: ilp32d/lp64d ABI can't be used when d extension isn't supported
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d
new file mode 100644 (file)
index 0000000..b7a3464
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march-attr -mabi=lp64f
+#source: mabi-attr-rv32e.s
+#error_output: mabi-fail-rv32e-lp64f.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l
new file mode 100644 (file)
index 0000000..706690a
--- /dev/null
@@ -0,0 +1,4 @@
+.*Assembler messages:
+.*Error: can't have 64-bit ABI on 32-bit ISA
+.*Error: only the ilp32e ABI is supported for e extension
+.*Error: ilp32f/lp64f ABI can't be used when f extension isn't supported
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d
new file mode 100644 (file)
index 0000000..e5d3c4e
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march-attr -mabi=lp64q
+#source: mabi-attr-rv32e.s
+#error_output: mabi-fail-rv32e-lp64q.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l
new file mode 100644 (file)
index 0000000..ab64b15
--- /dev/null
@@ -0,0 +1,4 @@
+.*Assembler messages:
+.*Error: can't have 64-bit ABI on 32-bit ISA
+.*Error: only the ilp32e ABI is supported for e extension
+.*Error: ilp32q/lp64q ABI can't be used when q extension isn't supported
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d
new file mode 100644 (file)
index 0000000..469a536
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march-attr -mabi=lp64
+#source: mabi-attr-rv32i.s
+#error_output: mabi-fail-rv32i-lp64.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d
new file mode 100644 (file)
index 0000000..e3155f4
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -march-attr -mabi=ilp32
+#source: mabi-attr-rv64iq.s
+#error_output: mabi-fail-rv64iq-ilp32.l
similarity index 58%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d
index 11d3ed9161790bc17f4ca9000b08dddaf2394eb3..b58b90437292dfcc19c9780d5670a6b35dafb107 100644 (file)
@@ -1,6 +1,6 @@
-#as: -march-attr -march=rv64ifd
+#as: -march-attr -march=rv64id
 #readelf: -h
-#source: mabi-attr-01.s
+#source: mabi-attr-rv32i.s
 
 ELF Header:
 #...
similarity index 71%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d
index b50ac3c240a568d874698b5b778dd6bb7b5d4f83..56dcd0ff31ae47c844343f2742aa5296c1d7d5f2 100644 (file)
@@ -1,6 +1,6 @@
-#as: -march-attr -march=rv64ifd
+#as: -march-attr -march=rv64id
 #objdump: -d
-#source: mabi-attr-01.s
+#source: mabi-attr-rv32i.s
 
 .*:[   ]+file format elf32.*
 
similarity index 82%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d
index 9668066aaddf249df01fafb4353fb7fb59e85a61..425e5d15e32f442e292584bc0860a950b833f44e 100644 (file)
@@ -1,6 +1,6 @@
 #as: -march-attr -march=rv64i
 #readelf: -h
-#source: mabi-attr-02.s
+#source: mabi-attr-rv32id.s
 
 ELF Header:
 #...
similarity index 86%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d
index a69d0bc8db441f40d031d44ccf9a88f1d3916717..8b7ee68c12da40cac05b647c73c1eafb8ec84e4c 100644 (file)
@@ -1,6 +1,6 @@
 #as: -march-attr -march=rv64i
 #objdump: -d
-#source: mabi-attr-02.s
+#source: mabi-attr-rv32id.s
 
 .*:[   ]+file format elf32.*
 
similarity index 82%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d
index 4392b5cf08834c073ce30ae49babed464e39df9a..0251a009c84af088fee4f2d99c442edee9f71f9d 100644 (file)
@@ -1,6 +1,6 @@
 #as: -march-attr -march=rv32i
 #readelf: -h
-#source: mabi-attr-03.s
+#source: mabi-attr-rv64iq.s
 
 ELF Header:
 #...
similarity index 86%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d
index 917ab8c131d6030c3092d595cb75e911cab0ebb8..6a33ba0f15e7c56f61e479ed21d9f7d190082606 100644 (file)
@@ -1,6 +1,6 @@
 #as: -march-attr -march=rv32i
 #objdump: -d
-#source: mabi-attr-03.s
+#source: mabi-attr-rv64iq.s
 
 .*:[   ]+file format elf64.*
 
similarity index 85%
rename from gas/testsuite/gas/riscv/mabi-noabi-march-02.d
rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d
index 453fe7b07e2d3213483efcf0d3d9cbe48d490564..9ef28abade22afcf62c43f43dcf2132f432f8cc0 100644 (file)
@@ -1,4 +1,4 @@
-#as: -march=rv32ifd
+#as: -march=rv32id
 #readelf: -h
 #source: empty.s
 
similarity index 84%
rename from gas/testsuite/gas/riscv/mabi-noabi-march-03.d
rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d
index ab2ffc351a09afc599b3ea46048c4ffd132fdf25..3de0eb7743b2d69f6ec4f9317fccb0452b9cb182 100644 (file)
@@ -1,4 +1,4 @@
-#as: -march=rv64ifdq
+#as: -march=rv64iq
 #readelf: -h
 #source: empty.s