[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 <danglin@gcc.gnu.org> * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte minimum alignment for .plt section.
This commit is contained in:
parent
80051c7439
commit
2c9e9550ca
@ -1,3 +1,8 @@
|
||||
2019-10-20 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte
|
||||
minimum alignment for .plt section.
|
||||
|
||||
2019-10-19 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
* elf32-hppa.c: Revise import stub sequences.
|
||||
|
@ -2280,10 +2280,11 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
against the .got section. */
|
||||
int gotalign = bfd_section_alignment (htab->etab.sgot);
|
||||
int pltalign = bfd_section_alignment (sec);
|
||||
int align = gotalign > 3 ? gotalign : 3;
|
||||
bfd_size_type mask;
|
||||
|
||||
if (gotalign > pltalign)
|
||||
bfd_set_section_alignment (sec, gotalign);
|
||||
if (align > pltalign)
|
||||
bfd_set_section_alignment (sec, align);
|
||||
mask = ((bfd_size_type) 1 << gotalign) - 1;
|
||||
sec->size = (sec->size + sizeof (plt_stub) + mask) & ~mask;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user