diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-08-17 03:54:05 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-08-17 03:54:16 -0700 |
commit | bfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a (patch) | |
tree | ca561553a9b38085c41dd850e2678b209c860c90 /bfd/elfxx-x86.c | |
parent | 2ecae92e2372102ac0fa774fce4c4c0d6f8c85f5 (diff) | |
download | gdb-bfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a.zip gdb-bfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a.tar.gz gdb-bfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a.tar.bz2 |
x86: Remove empty X86_FEATURE_1_AND property
There is no need to generate .note.gnu.property section with empty
X86_FEATURE_1_AND property. This patch adds fixup_gnu_properties
to ELF linker backend so that x86 backend can remove it.
bfd/
PR ld/23515
* elf-bfd.h (elf_backend_data): Add fixup_gnu_properties.
* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Call
backend fixup_gnu_properties if it isn't NULL. Discard
.note.gnu.property section if all properties have been removed.
* elfxx-target.h (elf_backend_fixup_gnu_properties): New.
(elfNN_bed): Initialize fixup_gnu_properties.
* elfxx-x86.c (_bfd_x86_elf_link_fixup_gnu_properties): New
function.
* elfxx-x86.h (_bfd_x86_elf_link_fixup_gnu_properties): New
prototype.
(elf_backend_fixup_gnu_properties): New.
ld/
PR ld/23515
* testsuite/ld-i386/ibt-plt-2a.d: Updated.
* testsuite/ld-i386/ibt-plt-2b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2b-x32.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.
Diffstat (limited to 'bfd/elfxx-x86.c')
-rw-r--r-- | bfd/elfxx-x86.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 2d8f7b6..1a4c723 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -2959,3 +2959,31 @@ error_alignment: return pbfd; } + +/* Fix up x86 GNU properties. */ + +void +_bfd_x86_elf_link_fixup_gnu_properties + (struct bfd_link_info *info ATTRIBUTE_UNUSED, + elf_property_list **listp) +{ + elf_property_list *p; + + for (p = *listp; p; p = p->next) + switch (p->property.pr_type) + { + case GNU_PROPERTY_X86_ISA_1_USED: + case GNU_PROPERTY_X86_ISA_1_NEEDED: + case GNU_PROPERTY_X86_FEATURE_1_AND: + if (p->property.u.number == 0) + { + /* Remove empty property. */ + *listp = p->next; + continue; + } + listp = &p->next; + break; + default: + break; + } +} |