[binutils-gdb] bfd_check_format: ignore errors from coff_real_object_p

Alan Modra amodra@sourceware.org
Mon Jan 6 11:45:00 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=49078ece048d0871508218203744f95e68ba5b4a

commit 49078ece048d0871508218203744f95e68ba5b4a
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Jan 6 19:51:22 2020 +1030

    bfd_check_format: ignore errors from coff_real_object_p
    
    Since 1993-11-05 git commit c188b0bec3b, bfd_check_format has failed
    if any of the target object_p functions returns false with any error
    but bfd_error_wrong_format.  That's just weird.  There is really no
    reason why coff_real_object_p should be fixed to only return that
    error instead of numerous other possible errors.  Even an out of
    memory condition for one target doesn't necessarily mean other targets
    can't match, assuming the failing target nicely returns all memory it
    might have used.
    
    	* format.c (bfd_check_format_matches): Ignore bfd_error on target
    	match failures.  Don't init to bfd_error_wrong_format before
    	calling _bfd_check_format.

Diff:
---
 bfd/ChangeLog | 6 ++++++
 bfd/format.c  | 8 --------
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4fc1345..97c9309 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
 2020-01-06  Alan Modra  <amodra@gmail.com>
 
+	* format.c (bfd_check_format_matches): Ignore bfd_error on target
+	match failures.  Don't init to bfd_error_wrong_format before
+	calling _bfd_check_format.
+
+2020-01-06  Alan Modra  <amodra@gmail.com>
+
 	* vms-alpha.c (_bfd_vms_push, _bfd_vms_pop): Return pass/fail
 	status rather than exiting on stack overflow or underflow.
 	(_bfd_vms_slurp_etir): Adjust to suit.
diff --git a/bfd/format.c b/bfd/format.c
index e53955e..a80a175 100644
--- a/bfd/format.c
+++ b/bfd/format.c
@@ -325,12 +325,6 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
       if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
 	goto err_ret;
 
-      /* If _bfd_check_format neglects to set bfd_error, assume
-	 bfd_error_wrong_format.  We didn't used to even pay any
-	 attention to bfd_error, so I suspect that some
-	 _bfd_check_format might have this problem.  */
-      bfd_set_error (bfd_error_wrong_format);
-
       temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd));
       if (temp)
 	{
@@ -389,8 +383,6 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
 		goto err_ret;
 	    }
 	}
-      else if (bfd_get_error () != bfd_error_wrong_format)
-	goto err_ret;
     }
 
   if (best_count == 1)



More information about the Binutils-cvs mailing list