From 412857647fecd41c45fab0d9c45198a0d2cbf6d5 Mon Sep 17 00:00:00 2001 From: Nelson Chu Date: Fri, 29 May 2020 16:56:36 +0800 Subject: RISC-V: The object without priv spec attributes can be linked with any object. bfd/ * elfnn-riscv.c (riscv_merge_attributes): Add new boolean priv_may_conflict, in_priv_zero and out_priv_zero to decide whether the object can be linked according to it's priv attributes. The object without any priv spec attributes can be linked with others. If the first input object doesn't contain any priv attributes, then we need to copy the setting from the next input one. Also report more detailed error messages to user. ld/ * testsuite/ld-riscv-elf/attr-merge-priv-spec.d: Rename to attr-merge-priv-spec-01.d. * testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s: Set priv spec to 1.11. * testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s: Empty priv spec setting. * testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d: New testcase. * testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d: Likewise. * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. --- ld/ChangeLog | 15 +++++++++++++++ ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-01.d | 12 ++++++++++++ ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d | 12 ++++++++++++ ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d | 12 ++++++++++++ ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s | 2 ++ ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s | 1 + .../ld-riscv-elf/attr-merge-priv-spec-failed-01.d | 5 +++++ .../ld-riscv-elf/attr-merge-priv-spec-failed-02.d | 5 +++++ .../ld-riscv-elf/attr-merge-priv-spec-failed-03.d | 6 ++++++ .../ld-riscv-elf/attr-merge-priv-spec-failed-04.d | 6 ++++++ .../ld-riscv-elf/attr-merge-priv-spec-failed-05.d | 6 ++++++ .../ld-riscv-elf/attr-merge-priv-spec-failed-06.d | 6 ++++++ ld/testsuite/ld-riscv-elf/attr-merge-priv-spec.d | 12 ------------ ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 10 +++++++++- 14 files changed, 97 insertions(+), 13 deletions(-) create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-01.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-priv-spec.d (limited to 'ld') diff --git a/ld/ChangeLog b/ld/ChangeLog index 5b6805a..b40d36b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,20 @@ 2020-06-05 Nelson Chu + * testsuite/ld-riscv-elf/attr-merge-priv-spec.d: Rename to + attr-merge-priv-spec-01.d. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s: Set spec to 1.11. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s: Empty priv spec set. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d: New testcase. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d: Likewise. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d: Likewise. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d: Likewise. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d: Likewise. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d: Likewise. + * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d: Likewise. + * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. + +2020-06-05 Nelson Chu + * testsuite/ld-riscv-elf/attr-merge-arch-01.d: The CSR isn't used, so ignore the -mpriv-spec setting. * testsuite/ld-riscv-elf/attr-merge-arch-02.d: Likewise. diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-01.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-01.d new file mode 100644 index 0000000..0aa6fe0 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-01.d @@ -0,0 +1,12 @@ +#source: attr-merge-priv-spec-a.s +#source: attr-merge-priv-spec-b.s +#as: -march-attr +#ld: -r +#readelf: -A + +Attribute Section: riscv +File Attributes + Tag_RISCV_arch: [a-zA-Z0-9_\"].* + Tag_RISCV_priv_spec: 1 + Tag_RISCV_priv_spec_minor: 9 + Tag_RISCV_priv_spec_revision: 1 diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d new file mode 100644 index 0000000..0ac4ca7 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-02.d @@ -0,0 +1,12 @@ +#source: attr-merge-priv-spec-a.s +#source: attr-merge-priv-spec-d.s +#as: -march-attr +#ld: -r +#readelf: -A + +Attribute Section: riscv +File Attributes + Tag_RISCV_arch: [a-zA-Z0-9_\"].* + Tag_RISCV_priv_spec: 1 + Tag_RISCV_priv_spec_minor: 9 + Tag_RISCV_priv_spec_revision: 1 diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d new file mode 100644 index 0000000..6950483 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-03.d @@ -0,0 +1,12 @@ +#source: attr-merge-priv-spec-d.s +#source: attr-merge-priv-spec-a.s +#as: -march-attr +#ld: -r +#readelf: -A + +Attribute Section: riscv +File Attributes + Tag_RISCV_arch: [a-zA-Z0-9_\"].* + Tag_RISCV_priv_spec: 1 + Tag_RISCV_priv_spec_minor: 9 + Tag_RISCV_priv_spec_revision: 1 diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s new file mode 100644 index 0000000..7ea3185 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-c.s @@ -0,0 +1,2 @@ + .attribute priv_spec, 1 + .attribute priv_spec_minor, 11 diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s new file mode 100644 index 0000000..37fddd0 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-d.s @@ -0,0 +1 @@ +# Empty priv attributes setting. 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 new file mode 100644 index 0000000..c52ebac --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d @@ -0,0 +1,5 @@ +#source: attr-merge-priv-spec-a.s +#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. 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 new file mode 100644 index 0000000..fc00145 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d @@ -0,0 +1,5 @@ +#source: attr-merge-priv-spec-c.s +#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. 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 new file mode 100644 index 0000000..1d40e90 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d @@ -0,0 +1,6 @@ +#source: attr-merge-priv-spec-a.s +#source: attr-merge-priv-spec-d.s +#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. 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 new file mode 100644 index 0000000..0efee3c --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d @@ -0,0 +1,6 @@ +#source: attr-merge-priv-spec-d.s +#source: attr-merge-priv-spec-a.s +#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. 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 new file mode 100644 index 0000000..5b9b8d0 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d @@ -0,0 +1,6 @@ +#source: attr-merge-priv-spec-c.s +#source: attr-merge-priv-spec-d.s +#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. 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 new file mode 100644 index 0000000..dab7eb6 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d @@ -0,0 +1,6 @@ +#source: attr-merge-priv-spec-d.s +#source: attr-merge-priv-spec-c.s +#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. diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec.d b/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec.d deleted file mode 100644 index 0aa6fe0..0000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-priv-spec.d +++ /dev/null @@ -1,12 +0,0 @@ -#source: attr-merge-priv-spec-a.s -#source: attr-merge-priv-spec-b.s -#as: -march-attr -#ld: -r -#readelf: -A - -Attribute Section: riscv -File Attributes - Tag_RISCV_arch: [a-zA-Z0-9_\"].* - Tag_RISCV_priv_spec: 1 - Tag_RISCV_priv_spec_minor: 9 - Tag_RISCV_priv_spec_revision: 1 diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp index 0e9750e..1a0c68f 100644 --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp @@ -35,9 +35,17 @@ if [istarget "riscv*-*-*"] { run_dump_test "attr-merge-strict-align-04" run_dump_test "attr-merge-strict-align-05" run_dump_test "attr-merge-stack-align" - run_dump_test "attr-merge-priv-spec" + run_dump_test "attr-merge-priv-spec-01" + run_dump_test "attr-merge-priv-spec-02" + run_dump_test "attr-merge-priv-spec-03" run_dump_test "attr-merge-arch-failed-01" run_dump_test "attr-merge-stack-align-failed" + run_dump_test "attr-merge-priv-spec-failed-01" + run_dump_test "attr-merge-priv-spec-failed-02" + run_dump_test "attr-merge-priv-spec-failed-03" + run_dump_test "attr-merge-priv-spec-failed-04" + run_dump_test "attr-merge-priv-spec-failed-05" + run_dump_test "attr-merge-priv-spec-failed-06" run_ld_link_tests { { "Weak reference 32" "-T weakref.ld -melf32lriscv" "" "-march=rv32i -mabi=ilp32" {weakref32.s} -- cgit v1.1