aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf-properties.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-08-17 03:54:05 -0700
committerH.J. Lu <hjl.tools@gmail.com>2018-08-17 03:54:16 -0700
commitbfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a (patch)
treeca561553a9b38085c41dd850e2678b209c860c90 /bfd/elf-properties.c
parent2ecae92e2372102ac0fa774fce4c4c0d6f8c85f5 (diff)
downloadfsf-binutils-gdb-bfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a.zip
fsf-binutils-gdb-bfb1e8c15a6b7d02cd0b9a124d01722a07ebf09a.tar.gz
fsf-binutils-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/elf-properties.c')
-rw-r--r--bfd/elf-properties.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c
index f58bdc0..0d98ef1 100644
--- a/bfd/elf-properties.c
+++ b/bfd/elf-properties.c
@@ -520,6 +520,18 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
return NULL;
}
+ /* Fix up GNU properties. */
+ if (bed->fixup_gnu_properties)
+ bed->fixup_gnu_properties (info, &elf_properties (first_pbfd));
+
+ if (elf_properties (first_pbfd) == NULL)
+ {
+ /* Discard .note.gnu.property section if all properties have
+ been removed. */
+ sec->output_section = bfd_abs_section_ptr;
+ return NULL;
+ }
+
/* Compute the section size. */
list = elf_properties (first_pbfd);
size = elf_get_gnu_property_section_size (list, align_size);