Module Name: src Committed By: joerg Date: Tue Jun 16 21:02:20 UTC 2020
Modified Files: src/libexec/ld.elf_so/arch/arm: mdreloc.c Log Message: R_ARM_TLS_TPOFF32 needs to adjust the existing value, not blindly overwrite it. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/libexec/ld.elf_so/arch/arm/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/arm/mdreloc.c diff -u src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.44 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.45 --- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.44 Tue Apr 3 21:10:27 2018 +++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Tue Jun 16 21:02:20 2020 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.44 2018/04/03 21:10:27 joerg Exp $ */ +/* $NetBSD: mdreloc.c,v 1.45 2020/06/16 21:02:20 joerg Exp $ */ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.44 2018/04/03 21:10:27 joerg Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.45 2020/06/16 21:02:20 joerg Exp $"); #endif /* not lint */ #include <sys/types.h> @@ -232,8 +232,11 @@ _rtld_relocate_nonplt_objects(Obj_Entry _rtld_tls_offset_allocate(obj)) return -1; - tmp = (Elf_Addr)def->st_value + defobj->tlsoffset + - sizeof(struct tls_tcb); + if (__predict_true(RELOC_ALIGNED_P(where))) + tmp = *where; + else + tmp = load_ptr(where); + tmp += (Elf_Addr)def->st_value + defobj->tlsoffset + sizeof(struct tls_tcb); if (__predict_true(RELOC_ALIGNED_P(where))) *where = tmp; else