https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85801

--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 16 May 2018, hjl.tools at gmail dot com wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85801
> 
> --- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> ---
> (In reply to Richard Biener from comment #1)
> > I think this is valid from an ELF perspective.  But ca you really expect
> > char *progname to resolve to the library copy?  In fact the linker 
> > resolution
> > here is
> > 
> > 1
> > t2.o 4
> > 207 b42c927210240321 PREVAILING_DEF main
> > 349 b42c927210240321 PREVAILING_DEF_IRONLY_EXP progname
> > 351 b42c927210240321 RESOLVED_DYN stderr
> > 347 b42c927210240321 UNDEF my_name
> > 
> > and thus it correctly(?) resolves to a non-exported local copy
> > (GNU ld 2.30 branch).  Note that without --as-needed I get
> 
> This looks normal to me and works on x86.  Linker plugin determined that
> program is defined in IR and visible externally:
> 
>  /* This is the prevailing definition of the symbol, with no
>      references from regular objects.  It is only referenced from IR
>      code, but the symbol is exported and may be referenced from
>      a dynamic object (not seen at link time).  */ 
>  LDPR_PREVAILING_DEF_IRONLY_EXP
> 
> The final resolution is performed by the non-LTO part of linker.  Since
> program is COMMOM, the definition in libxfs.so is used.  It sounds like
> a linker backend bug.

I see.  But why's the resolution dependent on --as-needed?

Reply via email to