From: John David Anglin Date: Sun, 20 Oct 2019 16:28:35 +0000 (-0400) Subject: [bfd] Provide 8-byte minimum alignment for .plt section X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c65b97032bb8f8572723d4ce10d4f07c00c1734;p=thirdparty%2Fbinutils-gdb.git [bfd] Provide 8-byte minimum alignment for .plt section This change increases the default alignment for the .plt section from 4 bytes to 8 bytes. When function descriptors are 8-byte aligned, they can be updated atomically on 32-bit hppa. This helps with ordering issues on SMP machines. It also ensures that descriptors reside on the same cache line. This reduces the probability of a double TLB miss in a call. 2019-10-20 John David Anglin * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte minimum alignment for .plt section. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2aa99585265..86ce07a1c17 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,8 @@ 2019-10-20 John David Anglin + * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte + minimum alignment for .plt section. + * elf32-hppa.c: Revise import stub sequences. (LONG_BRANCH_STUB_SIZE): Define. (LONG_BRANCH_SHARED_STUB_SIZE): Define. diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index 49f0ca6cc02..cd99584f273 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -2280,10 +2280,11 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, against the .got section. */ int gotalign = bfd_section_alignment (dynobj, htab->etab.sgot); int pltalign = bfd_section_alignment (dynobj, sec); + int align = gotalign > 3 ? gotalign : 3; bfd_size_type mask; - if (gotalign > pltalign) - (void) bfd_set_section_alignment (dynobj, sec, gotalign); + if (align > pltalign) + (void) bfd_set_section_alignment (dynobj, sec, align); mask = ((bfd_size_type) 1 << gotalign) - 1; sec->size = (sec->size + sizeof (plt_stub) + mask) & ~mask; }