diff options
author | Alan Modra <amodra@gmail.com> | 2006-08-22 12:06:10 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2006-08-22 12:06:10 +0000 |
commit | 5c5f6e17d0445d1c67dd8a0a8310231b717e776c (patch) | |
tree | a18ffa0eaf598f7a54e97bbdf51922afad2d1b0e /bfd/elf64-ppc.c | |
parent | 57da97f58cd03bfd891f5f904876c65cb1f37e4b (diff) | |
download | binutils-gdb-5c5f6e17d0445d1c67dd8a0a8310231b717e776c.tar.gz |
* elf32-ppc.c (ppc_elf_relocate_section): Correct GOT and PLT HA
reloc handling.
* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
Diffstat (limited to 'bfd/elf64-ppc.c')
-rw-r--r-- | bfd/elf64-ppc.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index de2dd792dff..4fd6bf76319 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -10928,17 +10928,10 @@ ppc64_elf_relocate_section (bfd *output_bfd, case R_PPC64_ADDR16_HA: case R_PPC64_ADDR16_HIGHERA: case R_PPC64_ADDR16_HIGHESTA: - case R_PPC64_GOT16_HA: - case R_PPC64_PLTGOT16_HA: - case R_PPC64_PLT16_HA: case R_PPC64_TOC16_HA: case R_PPC64_SECTOFF_HA: case R_PPC64_TPREL16_HA: case R_PPC64_DTPREL16_HA: - case R_PPC64_GOT_TLSGD16_HA: - case R_PPC64_GOT_TLSLD16_HA: - case R_PPC64_GOT_TPREL16_HA: - case R_PPC64_GOT_DTPREL16_HA: case R_PPC64_TPREL16_HIGHER: case R_PPC64_TPREL16_HIGHERA: case R_PPC64_TPREL16_HIGHEST: @@ -10951,10 +10944,20 @@ ppc64_elf_relocate_section (bfd *output_bfd, that's not actually defined anywhere. In that case, 'sec' would be NULL, and we should leave the symbol alone (it will be set to zero elsewhere in the link). */ - if (sec != NULL) - /* Add 0x10000 if sign bit in 0:15 is set. - Bits 0:15 are not used. */ - addend += 0x8000; + if (sec == NULL) + break; + /* Fall thru */ + + case R_PPC64_GOT16_HA: + case R_PPC64_PLTGOT16_HA: + case R_PPC64_PLT16_HA: + case R_PPC64_GOT_TLSGD16_HA: + case R_PPC64_GOT_TLSLD16_HA: + case R_PPC64_GOT_TPREL16_HA: + case R_PPC64_GOT_DTPREL16_HA: + /* Add 0x10000 if sign bit in 0:15 is set. + Bits 0:15 are not used. */ + addend += 0x8000; break; case R_PPC64_ADDR16_DS: |