bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
{
extern const bfd_target binary_vec;
+#if BFD_SUPPORTS_PLUGINS
+ extern const bfd_target plugin_vec;
+#endif
const bfd_target * const *target;
const bfd_target **matching_vector = NULL;
const bfd_target *save_targ, *right_targ, *ar_right_targ, *match_targ;
temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
if (temp)
{
+ int match_priority = temp->match_priority;
+#if BFD_SUPPORTS_PLUGINS
+ /* If this object can be handled by a plugin, give that the
+ lowest priority; objects both handled by a plugin and
+ with an underlying object format will be claimed
+ separately by the plugin. */
+ if (*target == &plugin_vec)
+ match_priority = (*target)->match_priority;
+#endif
+
match_targ = temp;
if (preserve.marker != NULL)
bfd_preserve_finish (abfd, &preserve);
matching_vector[match_count] = temp;
match_count++;
- if (temp->match_priority < best_match)
+ if (match_priority < best_match)
{
- best_match = temp->match_priority;
+ best_match = match_priority;
best_count = 0;
}
best_count++;