Module Name: src Committed By: msaitoh Date: Sun Nov 18 18:50:56 UTC 2012
Modified Files: src/libexec/ld.elf_so/arch/i386 [netbsd-6]: mdreloc.c Log Message: Pull up following revision(s) (requested by apb in ticket #667): libexec/ld.elf_so/arch/i386/mdreloc.c: revision 1.35 Add support in ld.elf_so for relocation type R_386_TLS_TPOFF32. Fixes PR#47061. To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.34.6.1 src/libexec/ld.elf_so/arch/i386/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/libexec/ld.elf_so/arch/i386/mdreloc.c diff -u src/libexec/ld.elf_so/arch/i386/mdreloc.c:1.34 src/libexec/ld.elf_so/arch/i386/mdreloc.c:1.34.6.1 --- src/libexec/ld.elf_so/arch/i386/mdreloc.c:1.34 Fri Mar 25 18:07:05 2011 +++ src/libexec/ld.elf_so/arch/i386/mdreloc.c Sun Nov 18 18:50:56 2012 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.34 2011/03/25 18:07:05 joerg Exp $ */ +/* $NetBSD: mdreloc.c,v 1.34.6.1 2012/11/18 18:50:56 msaitoh Exp $ */ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.34 2011/03/25 18:07:05 joerg Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.34.6.1 2012/11/18 18:50:56 msaitoh Exp $"); #endif /* not lint */ #include <sys/types.h> @@ -129,13 +129,28 @@ _rtld_relocate_nonplt_objects(Obj_Entry _rtld_tls_offset_allocate(obj)) return -1; - *where = (Elf_Addr)(def->st_value - defobj->tlsoffset); + *where += (Elf_Addr)(def->st_value - defobj->tlsoffset); rdbg(("TLS_TPOFF %s in %s --> %p", obj->strtab + obj->symtab[symnum].st_name, obj->path, (void *)*where)); break; + case R_TYPE(TLS_TPOFF32): + def = _rtld_find_symdef(symnum, obj, &defobj, false); + if (def == NULL) + return -1; + + if (!defobj->tls_done && + _rtld_tls_offset_allocate(obj)) + return -1; + + *where += (Elf_Addr)(defobj->tlsoffset - def->st_value); + rdbg(("TLS_TPOFF32 %s in %s --> %p", + obj->strtab + obj->symtab[symnum].st_name, + obj->path, (void *)*where)); + break; + case R_TYPE(TLS_DTPMOD32): def = _rtld_find_symdef(symnum, obj, &defobj, false); if (def == NULL)