for binutils/ChangeLog from Alexandre Oliva * elf32-ppc.c (ppc_elf_relocate_section): Copy addend from first relocation to the second when relaxing TLS GD to LE. for ld/testsuite/ChangeLog from Alexandre Oliva * ld-powerpc/tls32.s: Verify that +32768 @plt addend is discarded. Index: bfd/elf32-ppc.c =================================================================== --- bfd/elf32-ppc.c.orig 2006-03-09 23:23:41.000000000 -0300 +++ bfd/elf32-ppc.c 2006-03-09 23:25:57.000000000 -0300 @@ -5799,13 +5799,13 @@ ppc_elf_relocate_section (bfd *output_bf /* Was an LD reloc. */ r_symndx = 0; rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; - rel[1].r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; } r_type = R_PPC_TPREL16_HA; rel->r_info = ELF32_R_INFO (r_symndx, r_type); rel[1].r_info = ELF32_R_INFO (r_symndx, R_PPC_TPREL16_LO); rel[1].r_offset += 2; + rel[1].r_addend = rel->r_addend; } bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - 2); bfd_put_32 (output_bfd, insn2, contents + offset); Index: ld/testsuite/ld-powerpc/tls32.s =================================================================== --- ld/testsuite/ld-powerpc/tls32.s.orig 2006-03-09 23:31:33.000000000 -0300 +++ ld/testsuite/ld-powerpc/tls32.s 2006-03-09 23:31:52.000000000 -0300 @@ -33,11 +33,11 @@ _start: #global syms #GD addi 3,31,gd0@got@tlsgd #R_PPC_GOT_TLSGD16 gd0 - bl __tls_get_addr@plt #R_PPC_PLTREL24 __tls_get_addr + bl __tls_get_addr+0x8000@plt #R_PPC_PLTREL24 __tls_get_addr #LD addi 3,31,ld0@got@tlsld #R_PPC_GOT_TLSLD16 ld0 - bl __tls_get_addr@plt #R_PPC_PLTREL24 __tls_get_addr + bl __tls_get_addr+0x8000@plt #R_PPC_PLTREL24 __tls_get_addr addi 9,3,ld0@dtprel #R_PPC_DTPREL16 ld0