Module Name: src
Committed By: joerg
Date: Tue Jun 20 12:41:49 UTC 2017
Modified Files:
src/libexec/ld.elf_so/arch/arm: mdreloc.c
Log Message:
Expand symnum, GCC's uninitialized used tracking is too imprecise.
To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 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.40 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.41
--- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.40 Tue Jun 20 11:01:18 2017
+++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Tue Jun 20 12:41:49 2017
@@ -1,8 +1,8 @@
-/* $NetBSD: mdreloc.c,v 1.40 2017/06/20 11:01:18 joerg Exp $ */
+/* $NetBSD: mdreloc.c,v 1.41 2017/06/20 12:41:49 joerg Exp $ */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.40 2017/06/20 11:01:18 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.41 2017/06/20 12:41:49 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -128,15 +128,17 @@ _rtld_relocate_nonplt_objects(Obj_Entry
"%s: R_ARM_PC24 relocation @ %p to %s failed "
"(displacement %ld (%#lx) out of range)",
obj->path, where,
- obj->strtab + obj->symtab[symnum].st_name,
+ obj->strtab + obj->symtab[
+ ELF_R_SYM(rel->r_info)].st_name,
(long) tmp, (long) tmp);
return -1;
}
tmp >>= 2;
*where = (*where & 0xff000000) | (tmp & 0x00ffffff);
rdbg(("PC24 %s in %s --> %p @ %p in %s",
- obj->strtab + obj->symtab[symnum].st_name,
- obj->path, (void *)*where, where, defobj->path));
+ obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)]
+ .st_name, obj->path, (void *)*where, where,
+ defobj->path));
break;
}
#endif
@@ -160,8 +162,9 @@ _rtld_relocate_nonplt_objects(Obj_Entry
store_ptr(where, tmp);
}
rdbg(("ABS32/GLOB_DAT %s in %s --> %p @ %p in %s",
- obj->strtab + obj->symtab[symnum].st_name,
- obj->path, (void *)tmp, where, defobj->path));
+ obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)]
+ .st_name, obj->path, (void *)tmp, where,
+ defobj->path));
break;
case R_TYPE(RELATIVE): /* word32 B + A */
@@ -201,8 +204,8 @@ _rtld_relocate_nonplt_objects(Obj_Entry
store_ptr(where, tmp);
rdbg(("TLS_DTPOFF32 %s in %s --> %p",
- obj->strtab + obj->symtab[symnum].st_name,
- obj->path, (void *)tmp));
+ obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)]
+ .st_name, obj->path, (void *)tmp));
break;
case R_TYPE(TLS_DTPMOD32):
@@ -213,8 +216,8 @@ _rtld_relocate_nonplt_objects(Obj_Entry
store_ptr(where, tmp);
rdbg(("TLS_DTPMOD32 %s in %s --> %p",
- obj->strtab + obj->symtab[symnum].st_name,
- obj->path, (void *)tmp));
+ obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)]
+ .st_name, obj->path, (void *)tmp));
break;
@@ -230,8 +233,8 @@ _rtld_relocate_nonplt_objects(Obj_Entry
else
store_ptr(where, tmp);
rdbg(("TLS_TPOFF32 %s in %s --> %p",
- obj->strtab + obj->symtab[symnum].st_name,
- obj->path, (void *)tmp));
+ obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)]
+ .st_name, obj->path, (void *)tmp));
break;
default: