* format.c (bfd_check_format_matches): Don't match a target in
targ_selvecs if some other target is a better match. If targets implement match priority, fall back to the first of the best matches.
This commit is contained in:
parent
2c573464eb
commit
03ae2d5e4f
2 changed files with 28 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2013-05-23 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* format.c (bfd_check_format_matches): Don't match a target in
|
||||
targ_selvecs if some other target is a better match. If
|
||||
targets implement match priority, fall back to the first of
|
||||
the best matches.
|
||||
|
||||
2013-05-22 Eric Herman <eric@freesa.org>
|
||||
|
||||
PR binutils/15462
|
||||
|
|
22
bfd/format.c
22
bfd/format.c
|
@ -376,6 +376,9 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
|
|||
}
|
||||
}
|
||||
|
||||
/* We have more than one equally good match. If any of the best
|
||||
matches is a target in config.bfd targ_defvec or targ_selvecs,
|
||||
choose it. */
|
||||
if (match_count > 1)
|
||||
{
|
||||
const bfd_target * const *assoc = bfd_associated_vector;
|
||||
|
@ -385,7 +388,8 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
|
|||
int i = match_count;
|
||||
|
||||
while (--i >= 0)
|
||||
if (matching_vector[i] == right_targ)
|
||||
if (matching_vector[i] == right_targ
|
||||
&& right_targ->match_priority <= best_match)
|
||||
break;
|
||||
|
||||
if (i >= 0)
|
||||
|
@ -396,6 +400,22 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
|
|||
}
|
||||
}
|
||||
|
||||
/* We still have more than one equally good match, and at least some
|
||||
of the targets support match priority. Choose the first of the
|
||||
best matches. */
|
||||
if (match_count > 1 && best_count != match_count)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < match_count; i++)
|
||||
{
|
||||
right_targ = matching_vector[i];
|
||||
if (right_targ->match_priority <= best_match)
|
||||
break;
|
||||
}
|
||||
match_count = 1;
|
||||
}
|
||||
|
||||
/* There is way too much undoing of half-known state here. We
|
||||
really shouldn't iterate on live bfd's. Note that saving the
|
||||
whole bfd and restoring it would be even worse; the first thing
|
||||
|
|
Loading…
Reference in a new issue