Plugin target handling
authorAlan Modra <amodra@gmail.com>
Fri, 28 Jun 2019 00:48:49 +0000 (10:18 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 28 Jun 2019 00:48:49 +0000 (10:18 +0930)
commit999d6dff80fab12d22c2a8d91923db6bde7fb3e5
tree52f94654b2fd1984897dffd3a043f003e7c5b77a
parentf60c61e60e59c2bfc5fdd1b448408c2af287899e
Plugin target handling

This patch fixes failures with LTO on mingw32 targets.  Since git
commit 7cf7fcc83c all possible targets (minus binary) are matched in
bfd_check_format_matches rather than lower priority targets being
excluded once a higher priority target matches.  During linking that
results in the ld/plugin.c plugin_object_p function being called with
the input file xvec set to plugin_vec, which means
plugin_get_ir_dummy_bfd doesn't see the real format of the file
(pe-i386).  It defaults to the output format instead, which happens to
be pei-i386, and this wrong choice persists for the dummy bfd.
pei-i386 isn't recognised as a valid linker input file.

So, omit recognizing a plugin object in bfd_check_format_matches when
some other object format matches, and make sure those other object
formats are checked first.

* format.c (bfd_check_format_matches): Don't match plugin target
if another target matches.  Expand comment.
* targets.c (_bfd_target_vector): Move plugin_vec after all other
non-corefile targets, outside !SELECT_VECS.
* config.bfd: Don't handle targ=plugin here.
* configure.ac: Don't add plugin to enable_targets or handle in
target loop setting selvecs and other target vars.
* configure: Regenerate.
bfd/ChangeLog
bfd/config.bfd
bfd/configure
bfd/configure.ac
bfd/format.c
bfd/targets.c