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 Wed, Jun 14, 2017 at 8:30 PM, Alan Modra <amodra@gmail.com> wrote:
> On Wed, Jun 14, 2017 at 06:20:47AM -0700, H.J. Lu wrote:
>> 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.
>
> No, it is quite reasonable to discard these relocations, and it is a
> maintenance nightmare when symbols change state between
> allocate_dynrelocs and relocate_section.  Granted, that already
> happened for .startof. and .sizeof. symbols, but the existence of

It is normal for linker defined symbols to change state.  BFD just
has to deal with it.

> those special symbols was an undocumented feature of gas and ld.
> Making that happen for __start and __stop too just makes the problem
> worse.

The main difference is that __start_SECNAME and __stop_SECNAME
are marked as hidden.   Here is a patch to check it.

> In future please state on the mailing list which targets you tested
> against when posting global changes.  I assumed you had tested this
> change against a representative set of targets, but it's clear you
> didn't.
>

Sure.  I also have a request for you.   Please add a testcase when
you fix a global bug in the future, especially there is one in the bug
report.   It will prevent your bug fix from being accidentally bypassed later.

Thanks.

-- 
H.J.
From de2b347055d7d3f9764e7c19f3bf8913cb1b5bb9 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Thu, 15 Jun 2017 04:10:58 -0700
Subject: [PATCH] ppc: Don't discard relocs on __start_SECNAME/__stop_SECNAME

__start_SECNAME and __stop_SECNAME may be undefined and hidden.
They will be defined by linker later.

	PR ld/21562
	* elf32-ppc.c (allocate_dynrelocs): Don't discard relocs on
	__start_SECNAME and __stop_SECNAME.
---
 bfd/elf32-ppc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index a4814fc..92cc18b 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -6056,8 +6056,11 @@ 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.  */
+      /* Discard relocs on undefined symbols that must be local.
+	 start_stop is set on __start_SECNAME/__stop_SECNAME which
+	 mark section SECNAME and will be defined by linker later.  */
       if (h->root.type == bfd_link_hash_undefined
+	  && !h->start_stop
 	  && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
 	eh->dyn_relocs = NULL;
 
-- 
2.9.4


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