mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
[PowerPC64] Nop out ld 2,24(1) after old-style __tls_get_addr
When optimising inline plt calls to __tls_get_addr without tls marker relocs, ld should zap any toc restore insn after the bctrl, to stop a load-hit-store stall. * elf64-ppc.c (ppc64_elf_relocate_section <tls_ldgd_opt>): When editing an old-style __tls_get_addr call, replace a toc restore insn with a nop.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2018-12-31 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elf64-ppc.c (ppc64_elf_relocate_section <tls_ldgd_opt>): When
|
||||||
|
editing an old-style __tls_get_addr call, replace a toc restore
|
||||||
|
insn with a nop.
|
||||||
|
|
||||||
2018-12-28 Alan Modra <amodra@gmail.com>
|
2018-12-28 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 24015
|
PR 24015
|
||||||
|
@ -13841,7 +13841,15 @@ ppc64_elf_relocate_section (bfd *output_bfd,
|
|||||||
bfd_put_32 (input_bfd, insn1,
|
bfd_put_32 (input_bfd, insn1,
|
||||||
contents + rel->r_offset - d_offset);
|
contents + rel->r_offset - d_offset);
|
||||||
if (offset != (bfd_vma) -1)
|
if (offset != (bfd_vma) -1)
|
||||||
bfd_put_32 (input_bfd, insn2, contents + offset);
|
{
|
||||||
|
bfd_put_32 (input_bfd, insn2, contents + offset);
|
||||||
|
if (offset + 8 <= input_section->size)
|
||||||
|
{
|
||||||
|
insn2 = bfd_get_32 (input_bfd, contents + offset + 4);
|
||||||
|
if (insn2 == LD_R2_0R1 + STK_TOC (htab))
|
||||||
|
bfd_put_32 (input_bfd, NOP, contents + offset + 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
if ((tls_mask & tls_gd) == 0
|
if ((tls_mask & tls_gd) == 0
|
||||||
&& (tls_gd == 0 || toc_symndx != 0))
|
&& (tls_gd == 0 || toc_symndx != 0))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user