yann@1: 2002-08-07 Jakub Jelinek yann@1: yann@1: * elf32-i386.c (elf_i386_relocate_section): Fill in proper addend yann@1: for R_386_TLS_TPOFF32 relocs against symndx 0. yann@1: yann@1: --- binutils/bfd/elf32-i386.c.jj 2002-07-30 16:14:55.000000000 +0200 yann@1: +++ binutils/bfd/elf32-i386.c 2002-08-07 23:41:48.000000000 +0200 yann@1: @@ -2561,13 +2567,17 @@ elf_i386_relocate_section (output_bfd, i yann@1: outrel.r_offset = (htab->sgot->output_section->vma yann@1: + htab->sgot->output_offset + off); yann@1: yann@1: - bfd_put_32 (output_bfd, 0, yann@1: - htab->sgot->contents + off); yann@1: indx = h && h->dynindx != -1 ? h->dynindx : 0; yann@1: if (r_type == R_386_TLS_GD) yann@1: dr_type = R_386_TLS_DTPMOD32; yann@1: else yann@1: dr_type = R_386_TLS_TPOFF32; yann@1: + if (dr_type == R_386_TLS_TPOFF32 && indx == 0) yann@1: + bfd_put_32 (output_bfd, relocation - dtpoff_base (info), yann@1: + htab->sgot->contents + off); yann@1: + else yann@1: + bfd_put_32 (output_bfd, 0, yann@1: + htab->sgot->contents + off); yann@1: outrel.r_info = ELF32_R_INFO (indx, dr_type); yann@1: loc = (Elf32_External_Rel *) htab->srelgot->contents; yann@1: loc += htab->srelgot->reloc_count++;