Module Name: src
Committed By: snj
Date: Fri Jul 21 03:53:08 UTC 2017
Modified Files:
src/libexec/ld.elf_so [netbsd-6]: reloc.c
Log Message:
Pull up following revision(s) (requested by uwe in ticket #1450):
libexec/ld.elf_so/reloc.c: revision 1.110
PR port-macppc/47464 - Old binutils generated bogus zero-sized COPY
relocations for _SDA_BASE_ and _SDA2_BASE_ that happened to work by
accident. They no longer happen to work when old binaries are run on
newer systems. Explicitly ignore these bogus relocations.
To generate a diff of this commit:
cvs rdiff -u -r1.106 -r1.106.2.1 src/libexec/ld.elf_so/reloc.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/reloc.c
diff -u src/libexec/ld.elf_so/reloc.c:1.106 src/libexec/ld.elf_so/reloc.c:1.106.2.1
--- src/libexec/ld.elf_so/reloc.c:1.106 Fri Jan 6 10:38:56 2012
+++ src/libexec/ld.elf_so/reloc.c Fri Jul 21 03:53:08 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: reloc.c,v 1.106 2012/01/06 10:38:56 skrll Exp $ */
+/* $NetBSD: reloc.c,v 1.106.2.1 2017/07/21 03:53:08 snj Exp $ */
/*
* Copyright 1996 John D. Polstra.
@@ -39,7 +39,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: reloc.c,v 1.106 2012/01/06 10:38:56 skrll Exp $");
+__RCSID("$NetBSD: reloc.c,v 1.106.2.1 2017/07/21 03:53:08 snj Exp $");
#endif /* not lint */
#include <err.h>
@@ -73,6 +73,22 @@ _rtld_do_copy_relocation(const Obj_Entry
const Elf_Sym *srcsym = NULL;
Obj_Entry *srcobj;
+ if (__predict_false(size == 0)) {
+#if defined(__powerpc__) && !defined(__LP64) /* PR port-macppc/47464 */
+ if (strcmp(name, "_SDA_BASE_") == 0
+ || strcmp(name, "_SDA2_BASE_") == 0)
+ {
+ rdbg(("COPY %s %s --> ignoring old binutils bug",
+ dstobj->path, name));
+ return 0;
+ }
+#endif
+#if 0 /* shall we warn? */
+ xwarnx("%s: zero size COPY relocation for \"%s\"",
+ dstobj->path, name);
+#endif
+ }
+
for (srcobj = dstobj->next; srcobj != NULL; srcobj = srcobj->next) {
srcsym = _rtld_symlook_obj(name, hash, srcobj, 0,
_rtld_fetch_ventry(dstobj, ELF_R_SYM(rela->r_info)));