diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 1396c7034e9..fbdd0c25b60 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2018-12-31 Alan Modra + + * elf64-ppc.c (ppc64_elf_relocate_section ): When + editing an old-style __tls_get_addr call, replace a toc restore + insn with a nop. + 2018-12-28 Alan Modra PR 24015 diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 2f4cfaaf338..e42cefcd419 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -13841,7 +13841,15 @@ ppc64_elf_relocate_section (bfd *output_bfd, bfd_put_32 (input_bfd, insn1, contents + rel->r_offset - d_offset); 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 && (tls_gd == 0 || toc_symndx != 0)) {