This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] PR ld/19579/21306 Properly turn common symbol into definition
- From: Alan Modra <amodra at gmail dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: Binutils <binutils at sourceware dot org>
- Date: Fri, 7 Apr 2017 00:48:54 +0930
- Subject: Re: [PATCH] PR ld/19579/21306 Properly turn common symbol into definition
- Authentication-results: sourceware.org; auth=none
- References: <20170405164638.GA9413@intel.com> <20170406104357.GM16711@bubble.grove.modra.org> <CAMe9rOqP=vVyTDgF3djxTZBRNKYmZMK+AZ9Gq8LNe0XJg4g1fA@mail.gmail.com>
On Thu, Apr 06, 2017 at 07:38:54AM -0700, H.J. Lu wrote:
> On Thu, Apr 6, 2017 at 3:43 AM, Alan Modra <amodra@gmail.com> wrote:
> > On Wed, Apr 05, 2017 at 09:46:38AM -0700, H.J. Lu wrote:
> >> +bfd_boolean
> >> +_bfd_elf_define_common_symbol (bfd *output_bfd,
> >> + struct bfd_link_info *info,
> >> + struct bfd_link_hash_entry *h)
> >> +{
> >> + bfd_boolean ret
> >> + = bfd_generic_define_common_symbol (output_bfd, info, h);
> >> + if (ret)
> >> + {
> >> + /* Since def_regular may not be set if it is overridden by a
> >> + dynamic definition, we need to set def_regular when it is
> >> + converted to a defined symbol. */
> >> + struct elf_link_hash_entry *eh
> >> + = (struct elf_link_hash_entry *) h;
> >> + eh->def_regular = 1;
> >> + }
> >> + return TRUE;
> >> +}
> >
> > This fails for ELF targets using the generic linker, like d30v-elf.
>
> Does such target support shared object, which is the issue here?
No, the issue is that the above code uses a cast that is invalid. The
generic linker does not use a hash table with elf_link_hash_entry (or
superclass) elements.
> > Isn't the real bug that somewhere we have code lacking an
> > ELF_COMMON_DEF_P test?
>
> ELF targets check def_regular for definition in relocatable object.
> It should be set for all definitions in relocatable objects
Please read the ELF_COMMON_DEF_P comment. I disagree that it is
*necessary* to set def_regular when a common symbol becomes a
definition. It may be desirable to set the flag, to simplify other
code, if there is no place where we want to distinguish symbols that
actually are definitions in relocatable object files from symbols that
*become* definitions. I'd need to be convinced of that before
accepting a patch that sets def_regular for commons.
--
Alan Modra
Australia Development Lab, IBM