aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorNelson Chu <nelson.chu@sifive.com>2020-06-12 23:06:49 +0800
committerNelson Chu <nelson.chu@sifive.com>2020-06-22 10:01:14 +0800
commit39ff0b812324f4b050bb0b367b269db6d4d0cb8b (patch)
treed26141dff4583849bf6a8e99c6ea7458b9dcd0a8 /ld
parentcbd7581f343d85b4216db2eefdf601f6d988062d (diff)
downloadbinutils-39ff0b812324f4b050bb0b367b269db6d4d0cb8b.zip
binutils-39ff0b812324f4b050bb0b367b269db6d4d0cb8b.tar.gz
binutils-39ff0b812324f4b050bb0b367b269db6d4d0cb8b.tar.bz2
RISC-V: Report warning when linking the objects with different priv specs.
We do know some conflicts among different privileged specs. For linker, the safest approach is that don't allow the object linked with others which may cause conflicts. But this may cause inconvenience since not all objects with conflicting priv specs are linked will cause problems. But it is hard to know the detailed conflict cases for linker, so we probably need a option to tell linker that we do know there are no conflicts, or we are willing to take risks to link the objects with conflicted priv specs. But the option is still under discussion. Therefore, we can report warnings rather than errors when linking the objects with conflicted priv specs. This not only makes the linker more flexible, but also warns people that the conflicts may happen. We also need to update the output priv spec version once the input priv spec is newer. bfd/ * elfxx-riscv.c (struct priv_spec_t priv_specs[]): Move them from opcodes/riscv-opc.c to bfd/elfxx-riscv.c, since we need it in linker. (riscv_get_priv_spec_class): Likewise. (riscv_get_priv_spec_name): Likewise. (riscv_get_priv_spec_class_from_numbers): New function, convert the version numbers into string, then call riscv_get_priv_spec_class to get the priv spec class. * elfxx-riscv.h (riscv_get_priv_spec_class): Move forward declaration from include/opcode/riscv.h to bfd/elfxx-riscv.h. (riscv_get_priv_spec_name): Likewise. (riscv_get_priv_spec_class_from_numbers): New forward declaration. (opcode/riscv.h): Include it in the header rather than elfxx-riscv.c. * elfnn-riscv.c (riscv_merge_attributes): Get the priv spec classes of input and output objects form their priv spec attributes by riscv_get_priv_spec_class_from_numbers. Report warning rather than errors when linking objects with differnet priv spec versions. We do know v1.9.1 may have conflicts to other versions, so report the warning, too. After that, update the output priv spec version to the newest one so far. gas/ * config/tc-riscv.c (buf_size, buf): Remove the unused variables. (riscv_set_default_priv_spec): Get the priv spec version from the priv spec attributes by riscv_get_priv_spec_class_from_numbers. include/ * opcode/riscv.h (riscv_get_priv_spec_class): Move the function forward declarations to bfd/elfxx-riscv.h. (riscv_get_priv_spec_name): Likewise. opcodes/ * riscv-opc.c: Move the structures and functions to bfd/elfxx-riscv.c. * riscv-dis.c: Include elfxx-riscv.h. ld/ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d: Updated. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d: Updated. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d: Updated. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d: Updated. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d: Updated. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d: Updated.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d10
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d10
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d10
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d10
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d10
-rw-r--r--ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d10
7 files changed, 63 insertions, 6 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 5d460cf..b67cd51 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2020-06-22 Nelson Chu <nelson.chu@sifive.com>
+
+ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d: Updated.
+ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d: Updated.
+ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d: Updated.
+ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d: Updated.
+ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d: Updated.
+ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d: Updated.
+
2020-06-21 Alan Modra <amodra@gmail.com>
* ldfile.c: Replace uses of ENABLE_PLUGINS with BFD_SUPPORTS_PLUGINS.
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d
index c52ebac..0d5d6dc 100644
--- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d
@@ -2,4 +2,12 @@
#source: attr-merge-priv-spec-c.s
#as:
#ld: -r
-#error: .*use privilege spec version 1.11.0 but the output use version 1.9.1.
+#warning: .*warning: .*use privilege spec version 1.11.0 but the output use version 1.9.1.
+#warning: .*warning: .*privilege spec version 1.9.1 can not be linked with other spec versions.
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: [a-zA-Z0-9_\"].*
+ Tag_RISCV_priv_spec: 1
+ Tag_RISCV_priv_spec_minor: 11
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d
index fc00145..f0f75b2 100644
--- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d
@@ -2,4 +2,12 @@
#source: attr-merge-priv-spec-a.s
#as:
#ld: -r
-#error: .*use privilege spec version 1.9.1 but the output use version 1.11.0.
+#warning: .*warning: .*use privilege spec version 1.9.1 but the output use version 1.11.0.
+#warning: .*warning: .*privilege spec version 1.9.1 can not be linked with other spec versions.
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: [a-zA-Z0-9_\"].*
+ Tag_RISCV_priv_spec: 1
+ Tag_RISCV_priv_spec_minor: 11
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d
index 1d40e90..af51552 100644
--- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d
@@ -3,4 +3,12 @@
#source: attr-merge-priv-spec-c.s
#as:
#ld: -r
-#error: .*use privilege spec version 1.11.0 but the output use version 1.9.1.
+#warning: .*warning: .*use privilege spec version 1.11.0 but the output use version 1.9.1.
+#warning: .*warning: .*privilege spec version 1.9.1 can not be linked with other spec versions.
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: [a-zA-Z0-9_\"].*
+ Tag_RISCV_priv_spec: 1
+ Tag_RISCV_priv_spec_minor: 11
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d
index 0efee3c..2328807 100644
--- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d
@@ -3,4 +3,12 @@
#source: attr-merge-priv-spec-c.s
#as:
#ld: -r
-#error: .*use privilege spec version 1.11.0 but the output use version 1.9.1.
+#warning: .*warning: .*use privilege spec version 1.11.0 but the output use version 1.9.1.
+#warning: .*warning: .*privilege spec version 1.9.1 can not be linked with other spec versions.
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: [a-zA-Z0-9_\"].*
+ Tag_RISCV_priv_spec: 1
+ Tag_RISCV_priv_spec_minor: 11
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d
index 5b9b8d0..cabaab6 100644
--- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d
@@ -3,4 +3,12 @@
#source: attr-merge-priv-spec-a.s
#as:
#ld: -r
-#error: .*use privilege spec version 1.9.1 but the output use version 1.11.0.
+#warning: .*warning: .*use privilege spec version 1.9.1 but the output use version 1.11.0.
+#warning: .*warning: .*privilege spec version 1.9.1 can not be linked with other spec versions.
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: [a-zA-Z0-9_\"].*
+ Tag_RISCV_priv_spec: 1
+ Tag_RISCV_priv_spec_minor: 11
diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d
index dab7eb6..e774748 100644
--- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d
+++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d
@@ -3,4 +3,12 @@
#source: attr-merge-priv-spec-a.s
#as:
#ld: -r
-#error: .*use privilege spec version 1.9.1 but the output use version 1.11.0.
+#warning: .*warning: .*use privilege spec version 1.9.1 but the output use version 1.11.0.
+#warning: .*warning: .*privilege spec version 1.9.1 can not be linked with other spec versions.
+#readelf: -A
+
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: [a-zA-Z0-9_\"].*
+ Tag_RISCV_priv_spec: 1
+ Tag_RISCV_priv_spec_minor: 11