RISC-V: Improve the error message for the mis-matched ISA versions.

Consider the updated attr-merge-arch-failed-01.d testcase.  Extension
A's version are mis-matched between attr-merge-arch-failed-01a.s and
attr-merge-arch-failed-01b.s.  But the old binutils reports that the
mis-matched extension is M rather than A.  This commit is used to fix
the wrong mis-matched error message.

Besides, when parsing the arch string in the riscv_parse_subset, it
shouldn't be NULL or empty.  However, it might be empty when we failed
to merge the arch string in the riscv_merge_attributes.  Since we should
already issue the correct error message in another side, and the message
- ISA string must begin with rv32 or rv64 - is meaninglesss when the arch
string is empty, so do not issue it.

	bfd/
	* elfnn-riscv.c (riscv_merge_std_ext): Fix to report the correct
	error message when the versions of extension are mis-matched.
	* elfxx-riscv.c (riscv_parse_subset): Don't issue the error when
	the string is empty.

	ld/
	* testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d: Updated.
	* testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s: Likewise.
	* testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s: Likewise.
This commit is contained in:
Kito Cheng
2020-07-06 19:30:36 -07:00
committed by Nelson Chu
parent d48b742bc1
commit 72bd6912ea
7 changed files with 26 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2020-09-03 Kito Cheng <kito.cheng@sifive.com>
* elfnn-riscv.c (riscv_merge_std_ext): Fix to report the correct
error message when the versions of extension are mis-matched.
* elfxx-riscv.c (riscv_parse_subset): Don't issue the error when
the string is empty.
2020-09-03 Alan Modra <amodra@gmail.com>
* xcofflink.c (xcoff_get_archive_info): Allocate xcoff_archive_info

View File

@ -2724,7 +2724,7 @@ riscv_merge_std_ext (bfd *ibfd,
&& ((find_in->major_version != find_out->major_version)
|| (find_in->minor_version != find_out->minor_version)))
{
riscv_version_mismatch (ibfd, in, out);
riscv_version_mismatch (ibfd, find_in, find_out);
return FALSE;
}

View File

@ -1519,9 +1519,15 @@ riscv_parse_subset (riscv_parse_subset_t *rps,
}
else
{
rps->error_handler
(_("-march=%s: ISA string must begin with rv32 or rv64"),
arch);
/* Arch string shouldn't be NULL or empty here. However,
it might be empty only when we failed to merge the arch
string in the riscv_merge_attributes. We have already
issued the correct error message in another side, so do
not issue this error when the arch string is empty. */
if (strlen (arch))
rps->error_handler (
_("-march=%s: ISA string must begin with rv32 or rv64"),
arch);
return FALSE;
}

View File

@ -1,3 +1,9 @@
2020-09-03 Kito Cheng <kito.cheng@sifive.com>
* testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d: Updated.
* testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s: Likewise.
* testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s: Likewise.
2020-09-03 Alan Modra <amodra@gmail.com>
* testsuite/ld-scripts/sysroot-prefix.exp (single_sysroot_prefix_test):

View File

@ -2,4 +2,4 @@
#source: attr-merge-arch-failed-01b.s
#as: -march-attr
#ld: -r -melf32lriscv
#error: Mis-matched ISA version for 'm' extension. 3.0 vs 2.0
#error: Mis-matched ISA version for 'a' extension. 3.0 vs 2.0

View File

@ -1 +1 @@
.attribute arch, "rv32i2p0_m2p0"
.attribute arch, "rv32i2p0_m2p0_a2p0"

View File

@ -1 +1 @@
.attribute arch, "rv32i2p0_m3p0"
.attribute arch, "rv32i2p0_m2p0_a3p0"