summaryrefslogtreecommitdiffstats
path: root/bfd/format.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2008-01-21 04:56:47 +0000
committerAlan Modra <amodra@gmail.com>2008-01-21 04:56:47 +0000
commitfbb3bb987c92182580d418b9bb824497912e891e (patch)
tree00429ee2b8c18a0cbf186c5e998ac3a616d09b5d /bfd/format.c
parent297d8443d0808af8481160aa1c5e20b00cc19234 (diff)
downloadppe42-binutils-fbb3bb987c92182580d418b9bb824497912e891e.tar.gz
ppe42-binutils-fbb3bb987c92182580d418b9bb824497912e891e.zip
PR 4453
* format.c (bfd_check_format_matches): Don't accept archives as fully matching unless they have a map.
Diffstat (limited to 'bfd/format.c')
-rw-r--r--bfd/format.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/bfd/format.c b/bfd/format.c
index cea9a23810..966ff84685 100644
--- a/bfd/format.c
+++ b/bfd/format.c
@@ -1,6 +1,6 @@
/* Generic BFD support for file formats.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
- 2003, 2005, 2007 Free Software Foundation, Inc.
+ 2003, 2005, 2007, 2008 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -210,7 +210,7 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
- if (temp)
+ if (temp && (abfd->format != bfd_archive || bfd_has_map (abfd)))
{
/* This format checks out as ok! */
right_targ = temp;
@@ -228,12 +228,13 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
matching_vector[match_count] = temp;
match_count++;
}
- else if ((err = bfd_get_error ()) == bfd_error_wrong_object_format
+ else if (temp
+ || (err = bfd_get_error ()) == bfd_error_wrong_object_format
|| err == bfd_error_file_ambiguously_recognized)
{
- /* An archive with objects of the wrong type, or an
- ambiguous match. We want this target to match if we get
- no better matches. */
+ /* 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)
OpenPOWER on IntegriCloud