X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Fformat.c;h=c4bc94403864d70fcc0f698afe22adc0fcdc065f;hb=48e6666a0d550f290ea174682c78b0d62a027076;hp=e2afa3b2b4a25b31129bdc62da7cb4c98c488e7e;hpb=89d7b8aa6b05d68d2303f6ca7582947b8ad8fb0e;p=platform%2Fupstream%2Fbinutils.git diff --git a/bfd/format.c b/bfd/format.c index e2afa3b..c4bc944 100644 --- a/bfd/format.c +++ b/bfd/format.c @@ -1,6 +1,5 @@ /* Generic BFD support for file formats. - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2002, - 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 1990-2014 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -376,6 +375,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 +387,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 +399,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