* sysdeps/i386/dl-machine.h (elf_machine_rel): Add to, don't clobber,

unrelocated initial value for DTPOFF32 and TPOFF32 relocs.
	Reported by Jakub Jelinek  <jakub@redhat.com>.
This commit is contained in:
Roland McGrath 2002-08-07 22:14:40 +00:00
parent 0be405c239
commit 534feaab4b
2 changed files with 9 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2002-08-07 Roland McGrath <roland@redhat.com>
* sysdeps/i386/dl-machine.h (elf_machine_rel): Add to, don't clobber,
unrelocated initial value for DTPOFF32 and TPOFF32 relocs.
Reported by Jakub Jelinek <jakub@redhat.com>.
2002-08-07 Jakub Jelinek <jakub@redhat.com> 2002-08-07 Jakub Jelinek <jakub@redhat.com>
* malloc/malloc.c (public_cALLOc): Check ELEM_SIZE != 0 before * malloc/malloc.c (public_cALLOc): Check ELEM_SIZE != 0 before

View File

@ -393,20 +393,20 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
/* During relocation all TLS symbols are defined and used. /* During relocation all TLS symbols are defined and used.
Therefore the offset is already correct. */ Therefore the offset is already correct. */
if (sym != NULL) if (sym != NULL)
*reloc_addr = sym->st_value; *reloc_addr += sym->st_value;
# endif # endif
break; break;
case R_386_TLS_TPOFF32: case R_386_TLS_TPOFF32:
/* The offset is positive, backward from the thread pointer. */ /* The offset is positive, backward from the thread pointer. */
# ifdef RTLD_BOOTSTRAP # ifdef RTLD_BOOTSTRAP
*reloc_addr = map->l_tls_offset - sym->st_value; *reloc_addr += map->l_tls_offset - sym->st_value;
# else # else
/* We know the offset of object the symbol is contained in. /* We know the offset of object the symbol is contained in.
It is a positive value which will be subtracted from the It is a positive value which will be subtracted from the
thread pointer. To get the variable position in the TLS thread pointer. To get the variable position in the TLS
block we subtract the offset from that of the TLS block. */ block we subtract the offset from that of the TLS block. */
if (sym_map != NULL && sym != NULL) if (sym_map != NULL && sym != NULL)
*reloc_addr = sym_map->l_tls_offset - sym->st_value; *reloc_addr += sym_map->l_tls_offset - sym->st_value;
# endif # endif
break; break;
#endif /* use TLS */ #endif /* use TLS */