mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-01-27 03:54:29 +00:00
PR ld/11047
* elf32-ppc.c (ppc_elf_relocate_section): Delete __tls_get_addr symbol reference from relocs belonging to calls that are optimized away. * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
This commit is contained in:
parent
3aec4f9c2f
commit
f58d5a2ddf
@ -1,3 +1,11 @@
|
||||
2009-12-03 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
PR ld/11047
|
||||
* elf32-ppc.c (ppc_elf_relocate_section): Delete __tls_get_addr
|
||||
symbol reference from relocs belonging to calls that are
|
||||
optimized away.
|
||||
* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
|
||||
|
||||
2009-12-02 Jerker Bäck <jerker.back@gmail.com>
|
||||
|
||||
PR binutils/11017
|
||||
|
@ -6929,9 +6929,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
||||
insn1 |= 32 << 26; /* lwz */
|
||||
if (offset != (bfd_vma) -1)
|
||||
{
|
||||
rel[1].r_info
|
||||
= ELF32_R_INFO (ELF32_R_SYM (rel[1].r_info),
|
||||
R_PPC_NONE);
|
||||
rel[1].r_info = ELF32_R_INFO (STN_UNDEF, R_PPC_NONE);
|
||||
insn2 = 0x7c631214; /* add 3,3,2 */
|
||||
bfd_put_32 (output_bfd, insn2, contents + offset);
|
||||
}
|
||||
@ -7005,8 +7003,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
||||
bfd_put_32 (output_bfd, insn2, contents + offset);
|
||||
/* Zap the reloc on the _tls_get_addr call too. */
|
||||
BFD_ASSERT (offset == rel[1].r_offset);
|
||||
rel[1].r_info = ELF32_R_INFO (ELF32_R_SYM (rel[1].r_info),
|
||||
R_PPC_NONE);
|
||||
rel[1].r_info = ELF32_R_INFO (STN_UNDEF, R_PPC_NONE);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -7035,8 +7032,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
||||
contents + rel->r_offset - d_offset);
|
||||
/* Zap the reloc on the _tls_get_addr call too. */
|
||||
BFD_ASSERT (rel->r_offset - d_offset == rel[1].r_offset);
|
||||
rel[1].r_info = ELF32_R_INFO (ELF32_R_SYM (rel[1].r_info),
|
||||
R_PPC_NONE);
|
||||
rel[1].r_info = ELF32_R_INFO (STN_UNDEF, R_PPC_NONE);
|
||||
rel--;
|
||||
continue;
|
||||
}
|
||||
|
@ -11102,8 +11102,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
|
||||
insn1 |= 58 << 26; /* ld */
|
||||
insn2 = 0x7c636a14; /* add 3,3,13 */
|
||||
if (offset != (bfd_vma) -1)
|
||||
rel[1].r_info = ELF64_R_INFO (ELF64_R_SYM (rel[1].r_info),
|
||||
R_PPC64_NONE);
|
||||
rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
|
||||
if ((tls_mask & TLS_EXPLICIT) == 0)
|
||||
r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
|
||||
+ R_PPC64_GOT_TPREL16_DS);
|
||||
@ -11202,8 +11201,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
|
||||
rel->r_info = ELF64_R_INFO (r_symndx, r_type);
|
||||
/* Zap the reloc on the _tls_get_addr call too. */
|
||||
BFD_ASSERT (offset == rel[1].r_offset);
|
||||
rel[1].r_info = ELF64_R_INFO (ELF64_R_SYM (rel[1].r_info),
|
||||
R_PPC64_NONE);
|
||||
rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
|
||||
insn3 = bfd_get_32 (output_bfd,
|
||||
contents + offset + 4);
|
||||
if (insn3 == NOP
|
||||
@ -11248,8 +11246,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
|
||||
rel->r_offset = offset + d_offset;
|
||||
/* Zap the reloc on the _tls_get_addr call too. */
|
||||
BFD_ASSERT (offset == rel[1].r_offset);
|
||||
rel[1].r_info = ELF64_R_INFO (ELF64_R_SYM (rel[1].r_info),
|
||||
R_PPC64_NONE);
|
||||
rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
|
||||
insn2 = 0x38630000; /* addi 3,3,0 */
|
||||
insn3 = bfd_get_32 (output_bfd,
|
||||
contents + offset + 4);
|
||||
|
Loading…
x
Reference in New Issue
Block a user