diff options
author | Alan Modra <amodra@gmail.com> | 2013-01-28 07:58:16 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-01-28 07:58:16 +0000 |
commit | 89d7b8aa6b05d68d2303f6ca7582947b8ad8fb0e (patch) | |
tree | 07f85854fa1e3147560dd75bfb2aeb9984a68106 /bfd/format.c | |
parent | 616e8b71634921d6ac5c425a59f9c33936147d65 (diff) | |
download | binutils-gdb-89d7b8aa6b05d68d2303f6ca7582947b8ad8fb0e.tar.gz |
* archive.c (bfd_generic_archive_p): Return target and keep
ardata on partial matches.
* format.c (bfd_check_format_matches): Adjust for above
change. Remove bfd_error_file_ambiguously_recognized dead
code.
Diffstat (limited to 'bfd/format.c')
-rw-r--r-- | bfd/format.c | 75 |
1 files changed, 37 insertions, 38 deletions
diff --git a/bfd/format.c b/bfd/format.c index 36eeb85e197..e2afa3b2b4a 100644 --- a/bfd/format.c +++ b/bfd/format.c @@ -279,7 +279,6 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) for (target = bfd_target_vector; *target != NULL; target++) { const bfd_target *temp; - bfd_error_type err; /* Don't check the default target twice. */ if (*target == &binary_vec @@ -310,47 +309,47 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) match_targ = temp; if (preserve.marker != NULL) bfd_preserve_finish (abfd, &preserve); - } - - if (temp && (abfd->format != bfd_archive || bfd_has_map (abfd))) - { - /* This format checks out as ok! */ - right_targ = temp; - - /* If this is the default target, accept it, even if other - targets might match. People who want those other targets - have to set the GNUTARGET variable. */ - if (temp == bfd_default_vector[0]) - goto ok_ret; - if (matching_vector) - matching_vector[match_count] = temp; - match_count++; - - if (temp->match_priority < best_match) + if (abfd->format != bfd_archive + || (bfd_has_map (abfd) + && bfd_get_error () != bfd_error_wrong_object_format)) { - best_match = temp->match_priority; - best_count = 0; + /* This format checks out as ok! */ + right_targ = temp; + + /* If this is the default target, accept it, even if + other targets might match. People who want those + other targets have to set the GNUTARGET variable. */ + if (temp == bfd_default_vector[0]) + goto ok_ret; + + if (matching_vector) + matching_vector[match_count] = temp; + match_count++; + + if (temp->match_priority < best_match) + { + best_match = temp->match_priority; + best_count = 0; + } + best_count++; + } + else + { + /* An archive with no armap or objects of the wrong + type. We want this target to match if we get no + better matches. */ + if (ar_right_targ != bfd_default_vector[0]) + ar_right_targ = *target; + if (matching_vector) + matching_vector[ar_match_index] = *target; + ar_match_index++; } - best_count++; - } - else if (temp - || (err = bfd_get_error ()) == bfd_error_wrong_object_format - || err == bfd_error_file_ambiguously_recognized) - { - /* An archive with no armap or objects of the wrong type, - or an ambiguous match. We want this target to match - if we get no better matches. */ - if (ar_right_targ != bfd_default_vector[0]) - ar_right_targ = *target; - if (matching_vector) - matching_vector[ar_match_index] = *target; - ar_match_index++; - } - else if (err != bfd_error_wrong_format) - goto err_ret; - if (temp && !bfd_preserve_save (abfd, &preserve)) + if (!bfd_preserve_save (abfd, &preserve)) + goto err_ret; + } + else if (bfd_get_error () != bfd_error_wrong_format) goto err_ret; } |