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] PR ld/21903: Treat common symbol as undefined for --no-define-common


On Sun, Aug 06, 2017 at 07:53:33AM -0700, H.J. Lu wrote:
> On Fri, Aug 4, 2017 at 5:22 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> > When --no-define-common is used to build shared library, treat common
> > symbol as undefined so that common symbols that are referenced from a
> > shared library to be assigned addresses only in the main program.  This
> > eliminates the unused duplicate space in the shared library, and also
> > prevents any possible confusion over resolving to the wrong duplicate
> > when there are many dynamic modules with specialized search paths for
> > runtime symbol resolution.
> >
> > --no-define-common is only allowed when building a shared library.
> 
> > OK for master?
> 
> I am going to check it in.

Why the hurry?

> > --- a/bfd/elflink.c
> > +++ b/bfd/elflink.c
> > @@ -4250,6 +4250,11 @@ error_free_dyn:
> >
> >        override = FALSE;
> >
> > +      /* Treat common symbol as undefined for --no-define-common.  */
> > +      if (isym->st_shndx == SHN_COMMON
> > +         && info->inhibit_common_definition)
> > +       isym->st_shndx = SHN_UNDEF;
> > +
> >        flags = BSF_NO_FLAGS;
> >        sec = NULL;
> >        value = isym->st_value;

Surely this should be put a little later.

      common = bed->common_definition (isym);
      if (common && info->inhibit_common_definition)
	{
	  isym->st_shndx = SHN_UNDEF;
	  common = FALSE;
	}

The testcase wasn't checked very well either.  It fails on arc, cris,
and frv.  Why do you need _start and main, and wouldn't it be better
to put the ".dc.a foo" in .data?

-- 
Alan Modra
Australia Development Lab, IBM


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