aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-12-04 06:00:57 -0800
committerH.J. Lu <hjl.tools@gmail.com>2018-12-04 06:01:14 -0800
commitfde51dd189a1f8a63896bcb845ef36ea5e1917d5 (patch)
tree04aefd91f07745df41d7d60ebeebde6ce2008fac
parentf4238194a211a6a27598a7fdf9ad63f9b5d6fbaa (diff)
downloadgdb-fde51dd189a1f8a63896bcb845ef36ea5e1917d5.zip
gdb-fde51dd189a1f8a63896bcb845ef36ea5e1917d5.tar.gz
gdb-fde51dd189a1f8a63896bcb845ef36ea5e1917d5.tar.bz2
x86: Don't remove empty GNU_PROPERTY_X86_UINT32_OR_AND properties
For GNU_PROPERTY_X86_COMPAT_ISA_1_USED and GNU_PROPERTY_X86_UINT32_OR_AND properties, a bit in the output pr_data field is set if it is set in any relocatable input pr_data fields and this property is present in all relocatable input files. A missing property implies that its bits have unknown values. When all bits in the the output pr_data field are zero, this property should not be removed from output to indicate it has zero in all bits. bfd/ PR ld/23372 * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Don't remove empty properties for GNU_PROPERTY_X86_COMPAT_ISA_1_USED and GNU_PROPERTY_X86_UINT32_OR_AND. (_bfd_x86_elf_link_fixup_gnu_properties): Likewise. ld/ PR ld/23372 * testsuite/ld-i386/pr23372a.d: Updated. * testsuite/ld-i386/pr23372c.d: Likewise. * testsuite/ld-x86-64/pr23372a-x32.d: Likewise. * testsuite/ld-x86-64/pr23372a.d: Likewise. * testsuite/ld-x86-64/pr23372c-x32.d: Likewise. * testsuite/ld-x86-64/pr23372c.d: Likewise.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elfxx-x86.c17
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/testsuite/ld-i386/pr23372a.d5
-rw-r--r--ld/testsuite/ld-i386/pr23372c.d5
-rw-r--r--ld/testsuite/ld-x86-64/pr23372a-x32.d5
-rw-r--r--ld/testsuite/ld-x86-64/pr23372a.d5
-rw-r--r--ld/testsuite/ld-x86-64/pr23372c-x32.d5
-rw-r--r--ld/testsuite/ld-x86-64/pr23372c.d5
9 files changed, 61 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 30616eb..618126f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2018-12-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/23372
+ * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Don't remove
+ empty properties for GNU_PROPERTY_X86_COMPAT_ISA_1_USED and
+ GNU_PROPERTY_X86_UINT32_OR_AND.
+ (_bfd_x86_elf_link_fixup_gnu_properties): Likewise.
+
2018-12-03 Kito Cheng <kito@andestech.com>
* elfxx-riscv.h (RISCV_DONT_CARE_VERSION): New macro.
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index 40aac66..eaa1a82 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -2422,9 +2422,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
aprop->pr_kind = property_remove;
updated = TRUE;
}
- return updated;
}
- goto or_property;
+ else
+ {
+ number = aprop->u.number;
+ aprop->u.number = number | bprop->u.number;
+ updated = number != (unsigned int) aprop->u.number;
+ }
+ return updated;
}
else if (pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED
|| (pr_type >= GNU_PROPERTY_X86_UINT32_OR_LO
@@ -2432,7 +2437,6 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
{
if (aprop != NULL && bprop != NULL)
{
-or_property:
number = aprop->u.number;
aprop->u.number = number | bprop->u.number;
/* Remove the property if all bits are empty. */
@@ -2957,7 +2961,12 @@ _bfd_x86_elf_link_fixup_gnu_properties (struct bfd_link_info *info,
|| (type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO
&& type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI))
{
- if (p->property.u.number == 0)
+ if (p->property.u.number == 0
+ && (type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED
+ || (type >= GNU_PROPERTY_X86_UINT32_AND_LO
+ && type <= GNU_PROPERTY_X86_UINT32_AND_HI)
+ || (type >= GNU_PROPERTY_X86_UINT32_OR_LO
+ && type <= GNU_PROPERTY_X86_UINT32_OR_HI)))
{
/* Remove empty property. */
*listp = p->next;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 80fd06c..5138225 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,13 @@
+2018-12-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/23372
+ * testsuite/ld-i386/pr23372a.d: Updated.
+ * testsuite/ld-i386/pr23372c.d: Likewise.
+ * testsuite/ld-x86-64/pr23372a-x32.d: Likewise.
+ * testsuite/ld-x86-64/pr23372a.d: Likewise.
+ * testsuite/ld-x86-64/pr23372c-x32.d: Likewise.
+ * testsuite/ld-x86-64/pr23372c.d: Likewise.
+
2018-12-01 H.J. Lu <hongjiu.lu@intel.com>
PR ld/23930
diff --git a/ld/testsuite/ld-i386/pr23372a.d b/ld/testsuite/ld-i386/pr23372a.d
index b75523b..7af7efb 100644
--- a/ld/testsuite/ld-i386/pr23372a.d
+++ b/ld/testsuite/ld-i386/pr23372a.d
@@ -3,3 +3,8 @@
#as: --32
#ld: -r -m elf_i386
#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used:
diff --git a/ld/testsuite/ld-i386/pr23372c.d b/ld/testsuite/ld-i386/pr23372c.d
index 987ae4c..d5bcc4d 100644
--- a/ld/testsuite/ld-i386/pr23372c.d
+++ b/ld/testsuite/ld-i386/pr23372c.d
@@ -3,3 +3,8 @@
#as: --32
#ld: -r -m elf_i386
#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used:
diff --git a/ld/testsuite/ld-x86-64/pr23372a-x32.d b/ld/testsuite/ld-x86-64/pr23372a-x32.d
index 9f93642..84e4602 100644
--- a/ld/testsuite/ld-x86-64/pr23372a-x32.d
+++ b/ld/testsuite/ld-x86-64/pr23372a-x32.d
@@ -3,3 +3,8 @@
#as: --x32
#ld: -r -m elf32_x86_64
#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used:
diff --git a/ld/testsuite/ld-x86-64/pr23372a.d b/ld/testsuite/ld-x86-64/pr23372a.d
index ee688fc..d988a6a 100644
--- a/ld/testsuite/ld-x86-64/pr23372a.d
+++ b/ld/testsuite/ld-x86-64/pr23372a.d
@@ -3,3 +3,8 @@
#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 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used:
diff --git a/ld/testsuite/ld-x86-64/pr23372c-x32.d b/ld/testsuite/ld-x86-64/pr23372c-x32.d
index 863f4b7..efd6e84 100644
--- a/ld/testsuite/ld-x86-64/pr23372c-x32.d
+++ b/ld/testsuite/ld-x86-64/pr23372c-x32.d
@@ -3,3 +3,8 @@
#as: --x32
#ld: -r -m elf32_x86_64
#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used:
diff --git a/ld/testsuite/ld-x86-64/pr23372c.d b/ld/testsuite/ld-x86-64/pr23372c.d
index 23bdaa7..f56859a 100644
--- a/ld/testsuite/ld-x86-64/pr23372c.d
+++ b/ld/testsuite/ld-x86-64/pr23372c.d
@@ -3,3 +3,8 @@
#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 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used: