Move GDB/MI commands related to support-query to their own @node.
[deliverable/binutils-gdb.git] / bfd / format.c
index e2afa3b2b4a25b31129bdc62da7cb4c98c488e7e..b8f39ca0f0878fffbc9ff466cb5021b0088e0736 100644 (file)
@@ -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
This page took 0.024262 seconds and 4 git commands to generate.