[PATCH] RISC-V: PR25212, Report errors for invalid march and mabi combinations.
Nelson Chu
nelson.chu@sifive.com
Mon May 24 03:49:03 GMT 2021
Committed. We can fix the problems if found in the future.
Thanks
Nelson
On Fri, May 21, 2021 at 5:11 PM Nelson Chu <nelson.chu@sifive.com> wrote:
>
> 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/
> * 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.
> ---
> gas/config/tc-riscv.c | 18 ++++++++++++++++++
> gas/testsuite/gas/riscv/mabi-attr-rv32e.s | 1 +
> .../{mabi-attr-01.s => mabi-attr-rv32i.s} | 0
> .../{mabi-attr-02.s => mabi-attr-rv32id.s} | 0
> .../{mabi-attr-03.s => mabi-attr-rv64iq.s} | 0
> gas/testsuite/gas/riscv/mabi-fail-01.d | 3 ---
> gas/testsuite/gas/riscv/mabi-fail-02.d | 3 ---
> .../gas/riscv/mabi-fail-rv32e-lp64d.d | 3 +++
> .../gas/riscv/mabi-fail-rv32e-lp64d.l | 4 ++++
> .../gas/riscv/mabi-fail-rv32e-lp64f.d | 3 +++
> .../gas/riscv/mabi-fail-rv32e-lp64f.l | 4 ++++
> .../gas/riscv/mabi-fail-rv32e-lp64q.d | 3 +++
> .../gas/riscv/mabi-fail-rv32e-lp64q.l | 4 ++++
> gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d | 3 +++
> .../{mabi-fail-01.l => mabi-fail-rv32i-lp64.l} | 0
> .../gas/riscv/mabi-fail-rv64iq-ilp32.d | 3 +++
> ...mabi-fail-02.l => mabi-fail-rv64iq-ilp32.l} | 0
> ...i-attr-01a.d => mabi-noabi-attr-rv32i-01.d} | 4 ++--
> ...i-attr-01b.d => mabi-noabi-attr-rv32i-02.d} | 4 ++--
> ...-attr-02a.d => mabi-noabi-attr-rv32id-01.d} | 2 +-
> ...-attr-02b.d => mabi-noabi-attr-rv32id-02.d} | 2 +-
> ...-attr-03a.d => mabi-noabi-attr-rv64iq-01.d} | 2 +-
> ...-attr-03b.d => mabi-noabi-attr-rv64iq-02.d} | 2 +-
> ...abi-march-01.d => mabi-noabi-march-rv32i.d} | 0
> ...bi-march-02.d => mabi-noabi-march-rv32id.d} | 2 +-
> ...bi-march-03.d => mabi-noabi-march-rv64iq.d} | 2 +-
> 26 files changed, 56 insertions(+), 16 deletions(-)
> create mode 100644 gas/testsuite/gas/riscv/mabi-attr-rv32e.s
> rename gas/testsuite/gas/riscv/{mabi-attr-01.s => mabi-attr-rv32i.s} (100%)
> rename gas/testsuite/gas/riscv/{mabi-attr-02.s => mabi-attr-rv32id.s} (100%)
> rename gas/testsuite/gas/riscv/{mabi-attr-03.s => mabi-attr-rv64iq.s} (100%)
> delete mode 100644 gas/testsuite/gas/riscv/mabi-fail-01.d
> delete mode 100644 gas/testsuite/gas/riscv/mabi-fail-02.d
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d
> rename gas/testsuite/gas/riscv/{mabi-fail-01.l => mabi-fail-rv32i-lp64.l} (100%)
> create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d
> rename gas/testsuite/gas/riscv/{mabi-fail-02.l => mabi-fail-rv64iq-ilp32.l} (100%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-attr-01a.d => mabi-noabi-attr-rv32i-01.d} (58%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-attr-01b.d => mabi-noabi-attr-rv32i-02.d} (71%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-attr-02a.d => mabi-noabi-attr-rv32id-01.d} (82%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-attr-02b.d => mabi-noabi-attr-rv32id-02.d} (86%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-attr-03a.d => mabi-noabi-attr-rv64iq-01.d} (82%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-attr-03b.d => mabi-noabi-attr-rv64iq-02.d} (86%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-march-01.d => mabi-noabi-march-rv32i.d} (100%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-march-02.d => mabi-noabi-march-rv32id.d} (85%)
> rename gas/testsuite/gas/riscv/{mabi-noabi-march-03.d => mabi-noabi-march-rv64iq.d} (84%)
>
> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
> index 3fff33e9a11..a76e53d51c3 100644
> --- a/gas/config/tc-riscv.c
> +++ b/gas/config/tc-riscv.c
> @@ -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
> index 00000000000..846c0236bcb
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-attr-rv32e.s
> @@ -0,0 +1 @@
> + .attribute arch,"rv32e"
> diff --git a/gas/testsuite/gas/riscv/mabi-attr-01.s b/gas/testsuite/gas/riscv/mabi-attr-rv32i.s
> similarity index 100%
> rename from gas/testsuite/gas/riscv/mabi-attr-01.s
> rename to gas/testsuite/gas/riscv/mabi-attr-rv32i.s
> diff --git a/gas/testsuite/gas/riscv/mabi-attr-02.s b/gas/testsuite/gas/riscv/mabi-attr-rv32id.s
> similarity index 100%
> rename from gas/testsuite/gas/riscv/mabi-attr-02.s
> rename to gas/testsuite/gas/riscv/mabi-attr-rv32id.s
> diff --git a/gas/testsuite/gas/riscv/mabi-attr-03.s b/gas/testsuite/gas/riscv/mabi-attr-rv64iq.s
> similarity index 100%
> rename from gas/testsuite/gas/riscv/mabi-attr-03.s
> rename to gas/testsuite/gas/riscv/mabi-attr-rv64iq.s
> diff --git a/gas/testsuite/gas/riscv/mabi-fail-01.d b/gas/testsuite/gas/riscv/mabi-fail-01.d
> deleted file mode 100644
> index 78049349330..00000000000
> --- a/gas/testsuite/gas/riscv/mabi-fail-01.d
> +++ /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
> index 2d6cfb02465..00000000000
> --- a/gas/testsuite/gas/riscv/mabi-fail-02.d
> +++ /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
> index 00000000000..04d402aa976
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d
> @@ -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
> index 00000000000..f7306cb24d2
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l
> @@ -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
> index 00000000000..b7a346465c7
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d
> @@ -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
> index 00000000000..706690ac9c6
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l
> @@ -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
> index 00000000000..e5d3c4e5d15
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d
> @@ -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
> index 00000000000..ab64b1546f6
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l
> @@ -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
> index 00000000000..469a53611fb
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d
> @@ -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-01.l b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.l
> similarity index 100%
> rename from gas/testsuite/gas/riscv/mabi-fail-01.l
> rename to gas/testsuite/gas/riscv/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
> index 00000000000..e3155f48956
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d
> @@ -0,0 +1,3 @@
> +#as: -march-attr -mabi=ilp32
> +#source: mabi-attr-rv64iq.s
> +#error_output: mabi-fail-rv64iq-ilp32.l
> diff --git a/gas/testsuite/gas/riscv/mabi-fail-02.l b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l
> similarity index 100%
> rename from gas/testsuite/gas/riscv/mabi-fail-02.l
> rename to gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d
> 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 11d3ed91617..b58b9043729 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d
> @@ -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:
> #...
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d
> 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 b50ac3c240a..56dcd0ff31a 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d
> @@ -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.*
>
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d
> 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 9668066aadd..425e5d15e32 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d
> @@ -1,6 +1,6 @@
> #as: -march-attr -march=rv64i
> #readelf: -h
> -#source: mabi-attr-02.s
> +#source: mabi-attr-rv32id.s
>
> ELF Header:
> #...
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d
> 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 a69d0bc8db4..8b7ee68c12d 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d
> @@ -1,6 +1,6 @@
> #as: -march-attr -march=rv64i
> #objdump: -d
> -#source: mabi-attr-02.s
> +#source: mabi-attr-rv32id.s
>
> .*:[ ]+file format elf32.*
>
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d
> 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 4392b5cf088..0251a009c84 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d
> @@ -1,6 +1,6 @@
> #as: -march-attr -march=rv32i
> #readelf: -h
> -#source: mabi-attr-03.s
> +#source: mabi-attr-rv64iq.s
>
> ELF Header:
> #...
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d
> 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 917ab8c131d..6a33ba0f15e 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d
> @@ -1,6 +1,6 @@
> #as: -march-attr -march=rv32i
> #objdump: -d
> -#source: mabi-attr-03.s
> +#source: mabi-attr-rv64iq.s
>
> .*:[ ]+file format elf64.*
>
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-01.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d
> similarity index 100%
> rename from gas/testsuite/gas/riscv/mabi-noabi-march-01.d
> rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-02.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d
> 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 453fe7b07e2..9ef28abade2 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-march-02.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d
> @@ -1,4 +1,4 @@
> -#as: -march=rv32ifd
> +#as: -march=rv32id
> #readelf: -h
> #source: empty.s
>
> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-03.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d
> 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 ab2ffc351a0..3de0eb7743b 100644
> --- a/gas/testsuite/gas/riscv/mabi-noabi-march-03.d
> +++ b/gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d
> @@ -1,4 +1,4 @@
> -#as: -march=rv64ifdq
> +#as: -march=rv64iq
> #readelf: -h
> #source: empty.s
>
> --
> 2.30.2
>
More information about the Binutils
mailing list