}
}
+ /* 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;
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)
}
}
+ /* 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