This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH 3/5] [ARC] Update merging attributes.
- From: Claudiu Zissulescu <claziss at gmail dot com>
- To: binutils at sourceware dot org
- Cc: fbedard at synopsys dot com, claziss at synopsys dot com
- Date: Tue, 24 Jul 2018 16:26:39 +0200
- Subject: [PATCH 3/5] [ARC] Update merging attributes.
- References: <20180724142641.2678-1-claziss@gmail.com>
From: claziss <claziss@synopsys.com>
Some attributes were ignored during merging. Fix that, and add some
errors. Tests provided.
Ok to apply?
Claudiu
bfd/
2017-09-19 Claudiu Zissulescu <claziss@synopsys.com>
* elf32-arc.c (arc_elf_merge_attributes): Fix merge attributes.
ld/
2017-09-19 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/ld-arc/attr-merge-6.d: New file.
* testsuite/ld-arc/attr-merge-6a.s: Likewise.
* testsuite/ld-arc/attr-merge-6b.s: Likewise.
* testsuite/ld-arc/attr-merge-6bis.d: Likewise.
---
bfd/elf32-arc.c | 11 ++++++++---
ld/testsuite/ld-arc/attr-merge-6.d | 16 ++++++++++++++++
ld/testsuite/ld-arc/attr-merge-6a.s | 9 +++++++++
ld/testsuite/ld-arc/attr-merge-6b.s | 8 ++++++++
ld/testsuite/ld-arc/attr-merge-6bis.d | 16 ++++++++++++++++
5 files changed, 57 insertions(+), 3 deletions(-)
create mode 100644 ld/testsuite/ld-arc/attr-merge-6.d
create mode 100644 ld/testsuite/ld-arc/attr-merge-6a.s
create mode 100644 ld/testsuite/ld-arc/attr-merge-6b.s
create mode 100644 ld/testsuite/ld-arc/attr-merge-6bis.d
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index aaa2c3b990..25a1faaaaf 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -578,7 +578,6 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
bfd_boolean result = TRUE;
const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
char *tagname = NULL;
- int offset = 0;
/* Skip the linker stubs file. This preserves previous behavior
of accepting unknown attributes in the first input file - but
@@ -733,6 +732,8 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
break;
case Tag_ARC_CPU_name:
+ if (!out_attr[i].s && in_attr[i].s)
+ out_attr[i].s = _bfd_elf_attr_strdup (obfd, in_attr[i].s);
break;
case Tag_ARC_ABI_rf16:
@@ -764,7 +765,9 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
BFD_ASSERT (in_attr[i].i < 3);
BFD_ASSERT (out_attr[i].i < 3);
- if (out_attr[i].i != 0 && in_attr[i].i != 0
+ if (out_attr[i].i == 0)
+ out_attr[i].i = in_attr[i].i;
+ else if (out_attr[i].i != 0 && in_attr[i].i != 0
&& out_attr[i].i != in_attr[i].i)
{
_bfd_error_handler
@@ -789,7 +792,9 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
if (!tagname)
tagname = "ABI exceptions";
- if (out_attr[i].i != 0 && in_attr[i].i != 0
+ if (out_attr[i].i == 0)
+ out_attr[i].i = in_attr[i].i;
+ else if (out_attr[i].i != 0 && in_attr[i].i != 0
&& out_attr[i].i != in_attr[i].i)
{
_bfd_error_handler
diff --git a/ld/testsuite/ld-arc/attr-merge-6.d b/ld/testsuite/ld-arc/attr-merge-6.d
new file mode 100644
index 0000000000..c90a5033bb
--- /dev/null
+++ b/ld/testsuite/ld-arc/attr-merge-6.d
@@ -0,0 +1,16 @@
+# source: attr-merge-6a.s
+# source: attr-merge-6b.s
+# as:
+# ld: -r
+# readelf: -A
+
+Attribute Section: ARC
+File Attributes
+ Tag_ARC_PCS_config: Bare metal/newlib
+ Tag_ARC_CPU_base: ARCEM
+ Tag_ARC_CPU_variation: Core2
+ Tag_ARC_CPU_name: "arcem"
+ Tag_ARC_ABI_osver: v4
+ Tag_ARC_ABI_sda: MWDT
+ Tag_ARC_ISA_config: "CD"
+ Tag_ARC_ATR_version: 1
diff --git a/ld/testsuite/ld-arc/attr-merge-6a.s b/ld/testsuite/ld-arc/attr-merge-6a.s
new file mode 100644
index 0000000000..cbd4fb4c9d
--- /dev/null
+++ b/ld/testsuite/ld-arc/attr-merge-6a.s
@@ -0,0 +1,9 @@
+# MWDT like attribute structure
+ .cpu EM
+ .arc_attribute Tag_ARC_ATR_version, 1
+ .arc_attribute Tag_ARC_ABI_sda, 1
+ .arc_attribute Tag_ARC_ABI_enumsize, 0
+ .arc_attribute Tag_ARC_CPU_variation, 1
+ .arc_attribute Tag_ARC_ISA_mpy_option, 0
+ .arc_attribute Tag_ARC_ABI_osver, 0
+ .arc_attribute Tag_ARC_CPU_name, ""
diff --git a/ld/testsuite/ld-arc/attr-merge-6b.s b/ld/testsuite/ld-arc/attr-merge-6b.s
new file mode 100644
index 0000000000..1e1392c01e
--- /dev/null
+++ b/ld/testsuite/ld-arc/attr-merge-6b.s
@@ -0,0 +1,8 @@
+#GCC like attribute structure
+ .cpu EM
+ .arc_attribute Tag_ARC_PCS_config, 2
+ .arc_attribute Tag_ARC_CPU_variation, 2
+ .arc_attribute Tag_ARC_CPU_name, "arcem"
+ .arc_attribute Tag_ARC_ABI_osver, 4
+ .arc_attribute Tag_ARC_ISA_config, "CD"
+ .arc_attribute Tag_ARC_ATR_version, 1
diff --git a/ld/testsuite/ld-arc/attr-merge-6bis.d b/ld/testsuite/ld-arc/attr-merge-6bis.d
new file mode 100644
index 0000000000..795ac0d512
--- /dev/null
+++ b/ld/testsuite/ld-arc/attr-merge-6bis.d
@@ -0,0 +1,16 @@
+# source: attr-merge-6b.s
+# source: attr-merge-6a.s
+# as:
+# ld: -r
+# readelf: -A
+
+Attribute Section: ARC
+File Attributes
+ Tag_ARC_PCS_config: Bare metal/newlib
+ Tag_ARC_CPU_base: ARCEM
+ Tag_ARC_CPU_variation: Core2
+ Tag_ARC_CPU_name: "arcem"
+ Tag_ARC_ABI_osver: v4
+ Tag_ARC_ABI_sda: MWDT
+ Tag_ARC_ISA_config: "CD"
+ Tag_ARC_ATR_version: 1
--
2.17.1