https://sourceware.org/bugzilla/show_bug.cgi?id=23411

zenith432 at users dot sourceforge.net changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |zenith432 at users dot 
sourceforge
                   |                            |.net

--- Comment #10 from zenith432 at users dot sourceforge.net ---
(In reply to Alexander Monakov from comment #9)
> The ELF specification does not allow this...

Where do you read that it's disallowed?  Leaving something unspecified is not
the same as disallowing it.

(In reply to Cary Coutant from comment #8)
> ... If the linker decides, based on the archive index, to include
> an IR file, it asks the plugin to provide the symbols for the
> "closer look", but the API doesn't provide a way for the linker to
> then say, "never mind, I don't need that object after all," in the case
> where the only symbol of interest happens to be a common.

gold already demonstrates how to do this...

Pluginobj::get_symbol_resolution_info
>  if (static_cast<size_t>(nsyms) > this->symbols_.size())
>    {
>      // We never decided to include this object. We mark all symbols as
>      // preempted.
>      gold_assert(this->symbols_.size() == 0);
>      for (int i = 0; i < nsyms; i++)
>        syms[i].resolution = LDPR_PREEMPTED_REG;
>      return version > 2 ? LDPS_NO_SYMS : LDPS_OK;
>    }

It's a bug in ld.bfd that it ends up setting multiple prevailing defs in this
scenario.  The plugin api prohibits(*) setting multiple prevailing defs, and
it's not necessary to do so in order to have lto1 purge unwanted symbol defs.

(*) https://gcc.gnu.org/wiki/whopr/driver, rules for the "All Symbols Read"
event.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to