This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Always define referenced __start_SECNAME/__stop_SECNAME


On Tue, Jun 13, 2017 at 8:50 PM, Alan Modra <amodra@gmail.com> wrote:
> I see these fails.  Please investigate and fix.  The powerpc-linux

Most of tests are supported on targets without --gc-sections support or
with a leading underscore in symbol name.  I checked in a couple patches
to address them.

> fails are due to leaving the __start and __stop symbols undefined when
> sizing dynamic sections, which is wrong.  That at least needs to be

There is no need to discard relocs on undefined symbols with
non-default visibilty, which may be defined later like __start_SECNAME
and __stop_SECNAME, or are real errors.  I am enclosing a patch here.

> fixed so that allocate_dynrelocs doesn't see an undefined hidden
> visibility symbol.
>
> bfin-elf  +FAIL: ld-elf/sizeofa
> bfin-elf  +FAIL: ld-elf/startofa
> cr16-elf  +FAIL: ld-elf/sizeofa
> cr16-elf  +FAIL: ld-elf/sizeofc
> cr16-elf  +FAIL: ld-elf/startofa
> cr16-elf  +FAIL: ld-elf/startofc
> cris-elf  +FAIL: ld-elf/sizeofa
> cris-elf  +FAIL: ld-elf/startofa
> crx-elf  +FAIL: ld-elf/sizeofa
> crx-elf  +FAIL: ld-elf/sizeofc
> crx-elf  +FAIL: ld-elf/startofa
> crx-elf  +FAIL: ld-elf/startofc
> epiphany-elf  +FAIL: ld-elf/sizeofa
> epiphany-elf  +FAIL: ld-elf/startofa
> h8300-elf  +FAIL: ld-elf/sizeofa
> h8300-elf  +FAIL: ld-elf/startofa
> hppa64-linux  +FAIL: ld-elf/pr21562a
> hppa64-linux  +FAIL: ld-elf/pr21562b
> hppa64-linux  +FAIL: ld-elf/pr21562c
> hppa64-linux  +FAIL: ld-elf/pr21562d
> hppa64-linux  +FAIL: ld-elf/pr21562i
> hppa64-linux  +FAIL: ld-elf/pr21562j
> hppa64-linux  +FAIL: ld-elf/pr21562k
> hppa64-linux  +FAIL: ld-elf/pr21562l
> hppa64-linux  +FAIL: ld-elf/pr21562m
> hppa64-linux  +FAIL: ld-elf/pr21562n
> ia64-linux  +FAIL: ld-elf/pr21562a
> ia64-linux  +FAIL: ld-elf/pr21562b
> ia64-linux  +FAIL: ld-elf/pr21562c
> ia64-linux  +FAIL: ld-elf/pr21562d
> ia64-linux  +FAIL: ld-elf/pr21562i
> ia64-linux  +FAIL: ld-elf/pr21562j
> ia64-linux  +FAIL: ld-elf/pr21562k
> ia64-linux  +FAIL: ld-elf/pr21562l
> ia64-linux  +FAIL: ld-elf/pr21562m
> ia64-linux  +FAIL: ld-elf/pr21562n
> ip2k-elf  +FAIL: ld-elf/sizeofa
> ip2k-elf  +FAIL: ld-elf/startofa
> m32c-elf  +FAIL: ld-elf/sizeofa
> m32c-elf  +FAIL: ld-elf/startofa
> metag-linux  +FAIL: ld-elf/pr21562a
> metag-linux  +FAIL: ld-elf/pr21562b
> metag-linux  +FAIL: ld-elf/pr21562c
> metag-linux  +FAIL: ld-elf/pr21562d
> metag-linux  +FAIL: ld-elf/pr21562e
> metag-linux  +FAIL: ld-elf/pr21562f
> metag-linux  +FAIL: ld-elf/pr21562g
> metag-linux  +FAIL: ld-elf/pr21562h
> metag-linux  +FAIL: ld-elf/pr21562i
> metag-linux  +FAIL: ld-elf/pr21562j
> metag-linux  +FAIL: ld-elf/pr21562k
> metag-linux  +FAIL: ld-elf/pr21562l
> metag-linux  +FAIL: ld-elf/pr21562m
> metag-linux  +FAIL: ld-elf/pr21562n
> metag-linux  +FAIL: ld-elf/sizeofa
> metag-linux  +FAIL: ld-elf/sizeofb
> metag-linux  +FAIL: ld-elf/startofa
> metag-linux  +FAIL: ld-elf/startofb
> mips64-linux  +FAIL: ld-gc/pr20022
> mipsel-linux-gnu  +FAIL: ld-gc/pr20022
> mipsisa32el-linux  +FAIL: ld-gc/pr20022
> mips-linux  +FAIL: ld-gc/pr20022
> mn10200-elf  +FAIL: ld-elf/sizeofa
> mn10200-elf  +FAIL: ld-elf/startofa
> mn10300-elf  +FAIL: ld-elf/sizeofa
> mn10300-elf  +FAIL: ld-elf/startofa
> nios2-linux  +FAIL: ld-gc/pr20022
> powerpc-eabisim  +FAIL: pr20022
> powerpc-eabivle  +FAIL: pr20022
> powerpcle-elf  +FAIL: pr20022
> powerpc-linux  +FAIL: ld-elf/pr21562a
> powerpc-linux  +FAIL: ld-elf/pr21562b
> powerpc-linux  +FAIL: ld-elf/pr21562c
> powerpc-linux  +FAIL: ld-elf/pr21562d
> powerpc-linux  +FAIL: ld-elf/pr21562e
> powerpc-linux  +FAIL: ld-elf/pr21562f
> powerpc-linux  +FAIL: ld-elf/pr21562g
> powerpc-linux  +FAIL: ld-elf/pr21562h
> powerpc-linux  +FAIL: pr20022
> rl78-elf  +FAIL: ld-elf/sizeofa
> rl78-elf  +FAIL: ld-elf/startofa
> rx-elf  +FAIL: ld-elf/sizeofa
> rx-elf  +FAIL: ld-elf/startofa
> sh-rtems  +FAIL: ld-elf/sizeofa
> sh-rtems  +FAIL: ld-elf/startofa
> v850-elf  +FAIL: ld-elf/sizeofa
> v850-elf  +FAIL: ld-elf/startofa
>
> --
> Alan Modra
> Australia Development Lab, IBM



-- 
H.J.
From 5ee4d80423a8b082022553c0bc0bbab857b5fe92 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Wed, 14 Jun 2017 03:55:51 -0700
Subject: [PATCH 1/3] ppc: Don't discard relocs on undefined symbols

Don't discard relocs on undefined symbols with non-default visibilty,
which may be defined later like __start_SECNAME and __stop_SECNAME,
or are real errors.

	PR ld/21562
	* elf32-ppc.c (allocate_dynrelocs): Don't discard relocs on
	undefined symbols with non-default visibilty.
---
 bfd/elf32-ppc.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index a4814fc..cc0976f 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -6056,14 +6056,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
      changes.  */
   else if (bfd_link_pic (info))
     {
-      /* Discard relocs on undefined symbols that must be local.  */
-      if (h->root.type == bfd_link_hash_undefined
-	  && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-	eh->dyn_relocs = NULL;
+      /* Don't discard relocs on undefined symbols with non-default
+	 visibilty, which may be defined later like __start_SECNAME
+	 and __stop_SECNAME, or are real errors.  */
 
       /* Also discard relocs on undefined weak syms with non-default
 	 visibility, or when dynamic_undefined_weak says so.  */
-      else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+      if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
 	eh->dyn_relocs = NULL;
 
       /* Relocs that use pc_count are those that appear on a call insn,
-- 
2.9.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]