[arch-commits] Commit in binutils/trunk (4 files)
Evangelos Foutras
foutrelis at archlinux.org
Sat Aug 11 15:11:38 UTC 2018
Date: Saturday, August 11, 2018 @ 15:11:37
Author: foutrelis
Revision: 331384
upgpkg: binutils 2.31.1-3
Follow-up upstream fixes for:
- PR23428: ld does not put program headers in a code-only load segment
(FS#59540)
Added:
binutils/trunk/0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch
binutils/trunk/0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
binutils/trunk/0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
Modified:
binutils/trunk/PKGBUILD
----------------------------------------------------------------------+
0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch | 78 +
0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch | 583 ++++++++++
0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch | 135 ++
PKGBUILD | 18
4 files changed, 810 insertions(+), 4 deletions(-)
Added: 0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch
===================================================================
--- 0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch (rev 0)
+++ 0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch 2018-08-11 15:11:37 UTC (rev 331384)
@@ -0,0 +1,78 @@
+From 96027b49650718ebcd20d81bd8d0fbbd36a33558 Mon Sep 17 00:00:00 2001
+From: Cary Coutant <ccoutant at gmail.com>
+Date: Tue, 7 Aug 2018 21:35:12 -0700
+Subject: [PATCH] Properly merge GNU_PROPERTY_X86_ISA_1_USED (x86_64).
+
+gold/
+ PR ld/23486
+ * x86_64.cc (Target_x86_64::Target_x86_64): Initialize
+ object_isa_1_used_.
+ (Target_x86_64::object_isa_1_used_): New data member.
+ (Target_x86_64::record_gnu_property): Save ISA_1_USED bits for object.
+ (Target_x86_64::merge_gnu_properties): Merge ISA_1_USED bits.
+---
+ gold/x86_64.cc | 22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/gold/x86_64.cc b/gold/x86_64.cc
+index 27f273d64b..ac958616c6 100644
+--- a/gold/x86_64.cc
++++ b/gold/x86_64.cc
+@@ -706,7 +706,8 @@ class Target_x86_64 : public Sized_target<size, false>
+ rela_irelative_(NULL), copy_relocs_(elfcpp::R_X86_64_COPY),
+ got_mod_index_offset_(-1U), tlsdesc_reloc_info_(),
+ tls_base_symbol_defined_(false), isa_1_used_(0), isa_1_needed_(0),
+- feature_1_(0), object_feature_1_(0), seen_first_object_(false)
++ feature_1_(0), object_isa_1_used_(0), object_feature_1_(0),
++ seen_first_object_(false)
+ { }
+
+ // Hook for a new output section.
+@@ -1381,6 +1382,11 @@ class Target_x86_64 : public Sized_target<size, false>
+ uint32_t isa_1_needed_;
+ uint32_t feature_1_;
+ // Target-specific properties from the current object.
++ // These bits get ORed into ISA_1_USED_ after all properties for the object
++ // have been processed. But if either is all zeroes (as when the property
++ // is absent from an object), the result should be all zeroes.
++ // (See PR ld/23486.)
++ uint32_t object_isa_1_used_;
+ // These bits get ANDed into FEATURE_1_ after all properties for the object
+ // have been processed.
+ uint32_t object_feature_1_;
+@@ -1609,7 +1615,7 @@ Target_x86_64<size>::record_gnu_property(
+ switch (pr_type)
+ {
+ case elfcpp::GNU_PROPERTY_X86_ISA_1_USED:
+- this->isa_1_used_ |= val;
++ this->object_isa_1_used_ |= val;
+ break;
+ case elfcpp::GNU_PROPERTY_X86_ISA_1_NEEDED:
+ this->isa_1_needed_ |= val;
+@@ -1627,12 +1633,22 @@ void
+ Target_x86_64<size>::merge_gnu_properties(const Object*)
+ {
+ if (this->seen_first_object_)
+- this->feature_1_ &= this->object_feature_1_;
++ {
++ // If any object is missing the ISA_1_USED property, we must omit
++ // it from the output file.
++ if (this->object_isa_1_used_ == 0)
++ this->isa_1_used_ = 0;
++ else if (this->isa_1_used_ != 0)
++ this->isa_1_used_ |= this->object_isa_1_used_;
++ this->feature_1_ &= this->object_feature_1_;
++ }
+ else
+ {
++ this->isa_1_used_ = this->object_isa_1_used_;
+ this->feature_1_ = this->object_feature_1_;
+ this->seen_first_object_ = true;
+ }
++ this->object_isa_1_used_ = 0;
+ this->object_feature_1_ = 0;
+ }
+
+--
+2.18.0
+
Added: 0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
===================================================================
--- 0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch (rev 0)
+++ 0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch 2018-08-11 15:11:37 UTC (rev 331384)
@@ -0,0 +1,583 @@
+From c1bb83b5fbf93b27d6a888486c09dcd34a3672be Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools at gmail.com>
+Date: Wed, 8 Aug 2018 06:09:15 -0700
+Subject: [PATCH] x86: Properly merge GNU_PROPERTY_X86_ISA_1_USED
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Without the GNU_PROPERTY_X86_ISA_1_USED property, all ISAs may be used.
+If a bit in the GNU_PROPERTY_X86_ISA_1_USED property is unset, the
+corresponding x86 instruction set isn’t used. When merging properties
+from 2 input files and one input file doesn't have the
+GNU_PROPERTY_X86_ISA_1_USED property, the output file shouldn't have
+it neither. This patch removes the GNU_PROPERTY_X86_ISA_1_USED
+property if an input file doesn't have it.
+
+This patch replaces the GNU_PROPERTY_X86_ISA_1_USED property with the
+GNU_PROPERTY_X86_ISA_1_NEEDED property which is the minimum ISA
+requirement.
+
+bfd/
+
+ PR ld/23486
+ * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Remove
+ GNU_PROPERTY_X86_ISA_1_USED if an input file doesn't have it.
+ (_bfd_x86_elf_link_setup_gnu_properties): Adding the
+ GNU_PROPERTY_X86_ISA_1_NEEDED, instead of
+ GNU_PROPERTY_X86_ISA_1_USED, property.
+
+ld/
+
+ PR ld/23486
+ * testsuite/ld-i386/i386.exp: Run PR ld/23486 tests.
+ * testsuite/ld-x86-64/x86-64.exp: Likewise.
+ * testsuite/ld-i386/pr23486a.d: New file.
+ * testsuite/ld-i386/pr23486b.d: Likewise.
+ * testsuite/ld-x86-64/pr23486a-x32.d: Likewise.
+ * testsuite/ld-x86-64/pr23486a.d: Likewise.
+ * testsuite/ld-x86-64/pr23486a.s: Likewise.
+ * testsuite/ld-x86-64/pr23486b-x32.d: Likewise.
+ * testsuite/ld-x86-64/pr23486b.d: Likewise.
+ * testsuite/ld-x86-64/pr23486b.s: Likewise.
+ * testsuite/ld-i386/property-3.r: Remove "x86 ISA used".
+ * testsuite/ld-i386/property-4.r: Likewise.
+ * testsuite/ld-i386/property-5.r: Likewise.
+ * testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
+ * testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
+ * testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
+ * testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
+ * testsuite/ld-x86-64/property-3.r: Likewise.
+ * testsuite/ld-x86-64/property-4.r: Likewise.
+ * testsuite/ld-x86-64/property-5.r: Likewise.
+ * testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
+ * testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
+---
+ bfd/elfxx-x86.c | 25 ++++++++++++----
+ ld/testsuite/ld-i386/i386.exp | 2 ++
+ ld/testsuite/ld-i386/pr23486a.d | 10 +++++++
+ ld/testsuite/ld-i386/pr23486b.d | 10 +++++++
+ ld/testsuite/ld-i386/property-3.r | 1 -
+ ld/testsuite/ld-i386/property-4.r | 1 -
+ ld/testsuite/ld-i386/property-5.r | 1 -
+ ld/testsuite/ld-i386/property-x86-ibt3a.d | 5 ++--
+ ld/testsuite/ld-i386/property-x86-ibt3b.d | 5 ++--
+ ld/testsuite/ld-i386/property-x86-shstk3a.d | 5 ++--
+ ld/testsuite/ld-i386/property-x86-shstk3b.d | 5 ++--
+ ld/testsuite/ld-x86-64/pr23486a-x32.d | 10 +++++++
+ ld/testsuite/ld-x86-64/pr23486a.d | 10 +++++++
+ ld/testsuite/ld-x86-64/pr23486a.s | 30 +++++++++++++++++++
+ ld/testsuite/ld-x86-64/pr23486b-x32.d | 10 +++++++
+ ld/testsuite/ld-x86-64/pr23486b.d | 10 +++++++
+ ld/testsuite/ld-x86-64/pr23486b.s | 30 +++++++++++++++++++
+ ld/testsuite/ld-x86-64/property-3.r | 1 -
+ ld/testsuite/ld-x86-64/property-4.r | 1 -
+ ld/testsuite/ld-x86-64/property-5.r | 1 -
+ .../ld-x86-64/property-x86-ibt3a-x32.d | 5 ++--
+ ld/testsuite/ld-x86-64/property-x86-ibt3a.d | 5 ++--
+ .../ld-x86-64/property-x86-ibt3b-x32.d | 5 ++--
+ ld/testsuite/ld-x86-64/property-x86-ibt3b.d | 5 ++--
+ .../ld-x86-64/property-x86-shstk3a-x32.d | 5 ++--
+ ld/testsuite/ld-x86-64/property-x86-shstk3a.d | 5 ++--
+ .../ld-x86-64/property-x86-shstk3b-x32.d | 5 ++--
+ ld/testsuite/ld-x86-64/property-x86-shstk3b.d | 5 ++--
+ ld/testsuite/ld-x86-64/x86-64.exp | 4 +++
+ 29 files changed, 170 insertions(+), 47 deletions(-)
+ create mode 100644 ld/testsuite/ld-i386/pr23486a.d
+ create mode 100644 ld/testsuite/ld-i386/pr23486b.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486a-x32.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486a.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486a.s
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486b-x32.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486b.d
+ create mode 100644 ld/testsuite/ld-x86-64/pr23486b.s
+
+diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
+index 2e4ff88f1f..7ccfd25815 100644
+--- a/bfd/elfxx-x86.c
++++ b/bfd/elfxx-x86.c
+@@ -2407,12 +2407,27 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
+ switch (pr_type)
+ {
+ case GNU_PROPERTY_X86_ISA_1_USED:
++ if (aprop == NULL || bprop == NULL)
++ {
++ /* Only one of APROP and BPROP can be NULL. */
++ if (aprop != NULL)
++ {
++ /* Remove this property since the other input file doesn't
++ have it. */
++ aprop->pr_kind = property_remove;
++ updated = TRUE;
++ }
++ break;
++ }
++ goto or_property;
++
+ case GNU_PROPERTY_X86_ISA_1_NEEDED:
+ if (aprop != NULL && bprop != NULL)
+ {
++or_property:
+ number = aprop->u.number;
+ aprop->u.number = number | bprop->u.number;
+- /* Remove the property if ISA bits are empty. */
++ /* Remove the property if all bits are empty. */
+ if (aprop->u.number == 0)
+ {
+ aprop->pr_kind = property_remove;
+@@ -2428,14 +2443,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
+ {
+ if (aprop->u.number == 0)
+ {
+- /* Remove APROP if ISA bits are empty. */
++ /* Remove APROP if all bits are empty. */
+ aprop->pr_kind = property_remove;
+ updated = TRUE;
+ }
+ }
+ else
+ {
+- /* Return TRUE if APROP is NULL and ISA bits of BPROP
++ /* Return TRUE if APROP is NULL and all bits of BPROP
+ aren't empty to indicate that BPROP should be added
+ to ABFD. */
+ updated = bprop->u.number != 0;
+@@ -2582,9 +2597,9 @@ _bfd_x86_elf_link_setup_gnu_properties
+ {
+ /* If the separate code program header is needed, make sure
+ that the first read-only PT_LOAD segment has no code by
+- adding a GNU_PROPERTY_X86_ISA_1_USED note. */
++ adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
+ prop = _bfd_elf_get_property (ebfd,
+- GNU_PROPERTY_X86_ISA_1_USED,
++ GNU_PROPERTY_X86_ISA_1_NEEDED,
+ 4);
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
+ prop->pr_kind = property_number;
+diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
+index 6d794fe653..78dad02579 100644
+--- a/ld/testsuite/ld-i386/i386.exp
++++ b/ld/testsuite/ld-i386/i386.exp
+@@ -462,6 +462,8 @@ run_dump_test "pr23189"
+ run_dump_test "pr23194"
+ run_dump_test "pr23372a"
+ run_dump_test "pr23372b"
++run_dump_test "pr23486a"
++run_dump_test "pr23486b"
+
+ if { !([istarget "i?86-*-linux*"]
+ || [istarget "i?86-*-gnu*"]
+diff --git a/ld/testsuite/ld-i386/pr23486a.d b/ld/testsuite/ld-i386/pr23486a.d
+new file mode 100644
+index 0000000000..41a6dcf7d5
+--- /dev/null
++++ b/ld/testsuite/ld-i386/pr23486a.d
+@@ -0,0 +1,10 @@
++#source: ../ld-x86-64/pr23486a.s
++#source: ../ld-x86-64/pr23486b.s
++#as: --32
++#ld: -r -m elf_i386
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++ Owner Data size Description
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-i386/pr23486b.d b/ld/testsuite/ld-i386/pr23486b.d
+new file mode 100644
+index 0000000000..08019b7274
+--- /dev/null
++++ b/ld/testsuite/ld-i386/pr23486b.d
+@@ -0,0 +1,10 @@
++#source: ../ld-x86-64/pr23486b.s
++#source: ../ld-x86-64/pr23486a.s
++#as: --32
++#ld: -r -m elf_i386
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++ Owner Data size Description
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-i386/property-3.r b/ld/testsuite/ld-i386/property-3.r
+index 0ed91f5922..d03203c1e5 100644
+--- a/ld/testsuite/ld-i386/property-3.r
++++ b/ld/testsuite/ld-i386/property-3.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: stack size: 0x800000
+- x86 ISA used: 586, SSE
+ x86 ISA needed: i486, 586
+ #pass
+diff --git a/ld/testsuite/ld-i386/property-4.r b/ld/testsuite/ld-i386/property-4.r
+index cb2bc15d9a..da295eb6c7 100644
+--- a/ld/testsuite/ld-i386/property-4.r
++++ b/ld/testsuite/ld-i386/property-4.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: stack size: 0x800000
+- x86 ISA used: i486, 586, SSE
+ x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-i386/property-5.r b/ld/testsuite/ld-i386/property-5.r
+index 552965058c..e4141594b3 100644
+--- a/ld/testsuite/ld-i386/property-5.r
++++ b/ld/testsuite/ld-i386/property-5.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: stack size: 0x900000
+- x86 ISA used: i486, 586, SSE
+ x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-i386/property-x86-ibt3a.d b/ld/testsuite/ld-i386/property-x86-ibt3a.d
+index 4bb35b00fb..0aedea1614 100644
+--- a/ld/testsuite/ld-i386/property-x86-ibt3a.d
++++ b/ld/testsuite/ld-i386/property-x86-ibt3a.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: i486, 586, SSE2, SSE3
+- x86 ISA needed: 586, SSE, SSE3, SSE4_1
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-i386/property-x86-ibt3b.d b/ld/testsuite/ld-i386/property-x86-ibt3b.d
+index 418d58a8f7..bd69ac6478 100644
+--- a/ld/testsuite/ld-i386/property-x86-ibt3b.d
++++ b/ld/testsuite/ld-i386/property-x86-ibt3b.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: i486, 586, SSE2, SSE3
+- x86 ISA needed: 586, SSE, SSE3, SSE4_1
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-i386/property-x86-shstk3a.d b/ld/testsuite/ld-i386/property-x86-shstk3a.d
+index e261038f60..76d2a39f2c 100644
+--- a/ld/testsuite/ld-i386/property-x86-shstk3a.d
++++ b/ld/testsuite/ld-i386/property-x86-shstk3a.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: i486, 586, SSE2, SSE3
+- x86 ISA needed: 586, SSE, SSE3, SSE4_1
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-i386/property-x86-shstk3b.d b/ld/testsuite/ld-i386/property-x86-shstk3b.d
+index 25f3d2361e..e770ecffa5 100644
+--- a/ld/testsuite/ld-i386/property-x86-shstk3b.d
++++ b/ld/testsuite/ld-i386/property-x86-shstk3b.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: i486, 586, SSE2, SSE3
+- x86 ISA needed: 586, SSE, SSE3, SSE4_1
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
+diff --git a/ld/testsuite/ld-x86-64/pr23486a-x32.d b/ld/testsuite/ld-x86-64/pr23486a-x32.d
+new file mode 100644
+index 0000000000..6d9fa68cdb
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486a-x32.d
+@@ -0,0 +1,10 @@
++#source: pr23486a.s
++#source: pr23486b.s
++#as: --x32
++#ld: -r -m elf32_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++ Owner Data size Description
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486a.d b/ld/testsuite/ld-x86-64/pr23486a.d
+new file mode 100644
+index 0000000000..dc2b7bf760
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486a.d
+@@ -0,0 +1,10 @@
++#source: pr23486a.s
++#source: pr23486b.s
++#as: --64 -defsym __64_bit__=1
++#ld: -r -m elf_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++ Owner Data size Description
++ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s
+new file mode 100644
+index 0000000000..a07d0c7ced
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486a.s
+@@ -0,0 +1,30 @@
++ .section ".note.gnu.property", "a"
++.ifdef __64_bit__
++ .p2align 3
++.else
++ .p2align 2
++.endif
++ .long 1f - 0f /* name length. */
++ .long 4f - 1f /* data length. */
++ /* NT_GNU_PROPERTY_TYPE_0 */
++ .long 5 /* note type. */
++0:
++ .asciz "GNU" /* vendor name. */
++1:
++.ifdef __64_bit__
++ .p2align 3
++.else
++ .p2align 2
++.endif
++ /* GNU_PROPERTY_X86_ISA_1_USED */
++ .long 0xc0000000 /* pr_type. */
++ .long 3f - 2f /* pr_datasz. */
++2:
++ .long 0xa
++3:
++.ifdef __64_bit__
++ .p2align 3
++.else
++ .p2align 2
++.endif
++4:
+diff --git a/ld/testsuite/ld-x86-64/pr23486b-x32.d b/ld/testsuite/ld-x86-64/pr23486b-x32.d
+new file mode 100644
+index 0000000000..0445e69d82
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486b-x32.d
+@@ -0,0 +1,10 @@
++#source: pr23486b.s
++#source: pr23486a.s
++#as: --x32
++#ld: -r -m elf32_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++ Owner Data size Description
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486b.d b/ld/testsuite/ld-x86-64/pr23486b.d
+new file mode 100644
+index 0000000000..dc2b7bf760
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486b.d
+@@ -0,0 +1,10 @@
++#source: pr23486a.s
++#source: pr23486b.s
++#as: --64 -defsym __64_bit__=1
++#ld: -r -m elf_x86_64
++#readelf: -n
++
++Displaying notes found in: .note.gnu.property
++ Owner Data size Description
++ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586
+diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s
+new file mode 100644
+index 0000000000..c5167eeb65
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/pr23486b.s
+@@ -0,0 +1,30 @@
++ .section ".note.gnu.property", "a"
++.ifdef __64_bit__
++ .p2align 3
++.else
++ .p2align 2
++.endif
++ .long 1f - 0f /* name length. */
++ .long 4f - 1f /* data length. */
++ /* NT_GNU_PROPERTY_TYPE_0 */
++ .long 5 /* note type. */
++0:
++ .asciz "GNU" /* vendor name. */
++1:
++.ifdef __64_bit__
++ .p2align 3
++.else
++ .p2align 2
++.endif
++ /* GNU_PROPERTY_X86_ISA_1_NEEDED */
++ .long 0xc0000001 /* pr_type. */
++ .long 3f - 2f /* pr_datasz. */
++2:
++ .long 0x3
++3:
++.ifdef __64_bit__
++ .p2align 3
++.else
++ .p2align 2
++.endif
++4:
+diff --git a/ld/testsuite/ld-x86-64/property-3.r b/ld/testsuite/ld-x86-64/property-3.r
+index 0ed91f5922..d03203c1e5 100644
+--- a/ld/testsuite/ld-x86-64/property-3.r
++++ b/ld/testsuite/ld-x86-64/property-3.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: stack size: 0x800000
+- x86 ISA used: 586, SSE
+ x86 ISA needed: i486, 586
+ #pass
+diff --git a/ld/testsuite/ld-x86-64/property-4.r b/ld/testsuite/ld-x86-64/property-4.r
+index cb2bc15d9a..da295eb6c7 100644
+--- a/ld/testsuite/ld-x86-64/property-4.r
++++ b/ld/testsuite/ld-x86-64/property-4.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: stack size: 0x800000
+- x86 ISA used: i486, 586, SSE
+ x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-x86-64/property-5.r b/ld/testsuite/ld-x86-64/property-5.r
+index 552965058c..e4141594b3 100644
+--- a/ld/testsuite/ld-x86-64/property-5.r
++++ b/ld/testsuite/ld-x86-64/property-5.r
+@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: stack size: 0x900000
+- x86 ISA used: i486, 586, SSE
+ x86 ISA needed: i486, 586, SSE
+ #pass
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
+index 011426f5a4..4cec728dc7 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
+index 1b4229a037..a8df49a351 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
+index 290ed6abf1..c112626711 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
+index 1142e03272..f10dffdc2c 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
++++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
+index 819542d181..0147a3c7b6 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
+index 4c5d0e0a18..1f8c2dc929 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
+index ba181e0bc5..7ca2539ca5 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
+index 5216f385dd..f66a40e449 100644
+--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
++++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
+@@ -6,6 +6,5 @@
+
+ Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
+- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
+- x86 ISA needed: i486, 586, SSE2, SSE3
++ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
++ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
+diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
+index 6edb9e86f4..ae21e554ad 100644
+--- a/ld/testsuite/ld-x86-64/x86-64.exp
++++ b/ld/testsuite/ld-x86-64/x86-64.exp
+@@ -403,6 +403,10 @@ run_dump_test "pr23372a"
+ run_dump_test "pr23372a-x32"
+ run_dump_test "pr23372b"
+ run_dump_test "pr23372b-x32"
++run_dump_test "pr23486a"
++run_dump_test "pr23486a-x32"
++run_dump_test "pr23486b"
++run_dump_test "pr23486b-x32"
+
+ if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
+ return
+--
+2.18.0
+
Added: 0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
===================================================================
--- 0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch (rev 0)
+++ 0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch 2018-08-11 15:11:37 UTC (rev 331384)
@@ -0,0 +1,135 @@
+From 03883490b51c3fe7762e73b9e6c3f3e5d71552fd Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools at gmail.com>
+Date: Sat, 11 Aug 2018 06:41:33 -0700
+Subject: [PATCH] x86: Properly add X86_ISA_1_NEEDED property
+
+Existing properties may be removed during property merging. We avoid
+adding X86_ISA_1_NEEDED property only if existing properties won't be
+removed.
+
+bfd/
+
+ PR ld/23428
+ * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't
+ add X86_ISA_1_NEEDED property only if existing properties won't
+ be removed.
+
+ld/
+
+ PR ld/23428
+ * testsuite/ld-elf/dummy.s: New file.
+ * testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property.
+ * testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428.
+---
+ bfd/elfxx-x86.c | 28 ++++++++++++++++++++++------
+ ld/testsuite/ld-elf/dummy.s | 1 +
+ ld/testsuite/ld-elf/linux-x86.S | 28 ++++++++++++++++++++++++++++
+ ld/testsuite/ld-elf/linux-x86.exp | 2 +-
+ 4 files changed, 52 insertions(+), 7 deletions(-)
+ create mode 100644 ld/testsuite/ld-elf/dummy.s
+
+diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
+index 7ccfd25815..2d8f7b640b 100644
+--- a/bfd/elfxx-x86.c
++++ b/bfd/elfxx-x86.c
+@@ -2588,7 +2588,6 @@ _bfd_x86_elf_link_setup_gnu_properties
+ prop->pr_kind = property_number;
+ }
+ else if (has_text
+- && elf_properties (ebfd) == NULL
+ && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
+ && !htab->elf.dynamic_sections_created
+ && !info->traditional_format
+@@ -2598,11 +2597,28 @@ _bfd_x86_elf_link_setup_gnu_properties
+ /* If the separate code program header is needed, make sure
+ that the first read-only PT_LOAD segment has no code by
+ adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
+- prop = _bfd_elf_get_property (ebfd,
+- GNU_PROPERTY_X86_ISA_1_NEEDED,
+- 4);
+- prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
+- prop->pr_kind = property_number;
++ elf_property_list *list;
++ bfd_boolean need_property = TRUE;
++
++ for (list = elf_properties (ebfd); list; list = list->next)
++ switch (list->property.pr_type)
++ {
++ case GNU_PROPERTY_STACK_SIZE:
++ case GNU_PROPERTY_NO_COPY_ON_PROTECTED:
++ case GNU_PROPERTY_X86_ISA_1_NEEDED:
++ /* These properties won't be removed during merging. */
++ need_property = FALSE;
++ break;
++ }
++
++ if (need_property)
++ {
++ prop = _bfd_elf_get_property (ebfd,
++ GNU_PROPERTY_X86_ISA_1_NEEDED,
++ 4);
++ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
++ prop->pr_kind = property_number;
++ }
+ }
+
+ /* Create the GNU property note section if needed. */
+diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s
+new file mode 100644
+index 0000000000..403f98000d
+--- /dev/null
++++ b/ld/testsuite/ld-elf/dummy.s
+@@ -0,0 +1 @@
++# Dummy
+diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
+index bdf40c6e01..d94abc1106 100644
+--- a/ld/testsuite/ld-elf/linux-x86.S
++++ b/ld/testsuite/ld-elf/linux-x86.S
+@@ -61,3 +61,31 @@ syscall:
+ ret /* Return to caller. */
+ .size syscall, .-syscall
+ .section .note.GNU-stack,"", at progbits
++
++ .section ".note.gnu.property", "a"
++#ifdef __LP64__
++ .p2align 3
++#else
++ .p2align 2
++#endif
++ .long 1f - 0f /* name length */
++ .long 5f - 2f /* data length */
++ .long 5 /* note type */
++0: .asciz "GNU" /* vendor name */
++1:
++#ifdef __LP64__
++ .p2align 3
++#else
++ .p2align 2
++#endif
++2: .long 0xc0000002 /* pr_type. */
++ .long 4f - 3f /* pr_datasz. */
++3:
++ .long 0x2
++4:
++#ifdef __LP64__
++ .p2align 3
++#else
++ .p2align 2
++#endif
++5:
+diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
+index 36217c6fb4..f6f5a80853 100644
+--- a/ld/testsuite/ld-elf/linux-x86.exp
++++ b/ld/testsuite/ld-elf/linux-x86.exp
+@@ -37,7 +37,7 @@ run_ld_link_exec_tests [list \
+ "Run PR ld/23428 test" \
+ "--no-dynamic-linker -z separate-code" \
+ "" \
+- { linux-x86.S pr23428.c } \
++ { linux-x86.S pr23428.c dummy.s } \
+ "pr23428" \
+ "pass.out" \
+ "$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
+--
+2.18.0
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2018-08-11 15:10:39 UTC (rev 331383)
+++ PKGBUILD 2018-08-11 15:11:37 UTC (rev 331384)
@@ -6,7 +6,7 @@
pkgname=binutils
pkgver=2.31.1
-pkgrel=2
+pkgrel=3
pkgdesc='A set of programs to assemble and manipulate binary and object files'
arch=(x86_64)
url='http://www.gnu.org/software/binutils/'
@@ -20,13 +20,19 @@
source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz{,.sig}
0001-PR23428-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
0002-PR23460-Close-resource-leaks-in-the-BFD-library-s-plugin-han.patch
- 0003-PR23460-Add-a-testcase-for-PR-binutils-23460.patch)
+ 0003-PR23460-Add-a-testcase-for-PR-binutils-23460.patch
+ 0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch
+ 0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
+ 0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch)
validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F)
md5sums=('5b7c9d4ce96f507d95c1b9a255e52418'
'SKIP'
'f2d4f2aee9ec2e25210eb132acdcf1d9'
'496e7e2d71fe558b3b85cdc27fb4638e'
- 'dd2284134542efe8e38137f5c829a371')
+ 'dd2284134542efe8e38137f5c829a371'
+ '5e4aecddbea729fd045d001e8e8db14e'
+ '02247a5f1c06f8a9ade689b7e68629ce'
+ '2764b8760bdc8d5c20698202d22b7fcf')
prepare() {
mkdir -p binutils-build
@@ -35,7 +41,11 @@
cd binutils-$pkgver
# https://sourceware.org/bugzilla/show_bug.cgi?id=23428
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=23486
patch -Np1 -i ../0001-PR23428-x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
+ patch -Np1 -i ../0004-PR23486-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED-x86_64.patch
+ patch -Np1 -i ../0005-PR23486-x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
+ patch -Np1 -i ../0006-PR23428-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
# https://sourceware.org/bugzilla/show_bug.cgi?id=23460
patch -Np1 -i ../0002-PR23460-Close-resource-leaks-in-the-BFD-library-s-plugin-han.patch
@@ -72,7 +82,7 @@
check() {
cd binutils-build
-
+
# unset LDFLAGS as testsuite makes assumptions about which ones are active
# ignore failures in gold testsuite...
make -k LDFLAGS="" check || true
More information about the arch-commits
mailing list