Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-6]: src/libexec/ld.elf_so Pull up following revision(s) (requeste...



details:   https://anonhg.NetBSD.org/src/rev/c65b97e999fa
branches:  netbsd-6
changeset: 777188:c65b97e999fa
user:      snj <snj%NetBSD.org@localhost>
date:      Fri Jul 21 03:53:08 2017 +0000

description:
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.

diffstat:

 libexec/ld.elf_so/reloc.c |  20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diffs (41 lines):

diff -r a154be948cb3 -r c65b97e999fa libexec/ld.elf_so/reloc.c
--- a/libexec/ld.elf_so/reloc.c Fri Jul 14 06:20:55 2017 +0000
+++ b/libexec/ld.elf_so/reloc.c Fri Jul 21 03:53:08 2017 +0000
@@ -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 @@
        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)));



Home | Main Index | Thread Index | Old Index