summaryrefslogtreecommitdiff
path: root/bfd/format.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2013-01-28 07:58:16 +0000
committerAlan Modra <amodra@gmail.com>2013-01-28 07:58:16 +0000
commit89d7b8aa6b05d68d2303f6ca7582947b8ad8fb0e (patch)
tree07f85854fa1e3147560dd75bfb2aeb9984a68106 /bfd/format.c
parent616e8b71634921d6ac5c425a59f9c33936147d65 (diff)
downloadbinutils-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.c75
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;
}