From: Alan Modra Date: Tue, 15 Oct 2002 05:10:48 +0000 (+0000) Subject: * objcopy.c (copy_file): Report ambiguous bfd_object matches, and X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=49c1257607d865a171f98f85bac9d72bcea51bbd;p=binutils-gdb.git * objcopy.c (copy_file): Report ambiguous bfd_object matches, and other object errors in preference to bfd_core errors. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 8a0da767f52..ef0f03f11a4 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2002-10-15 Alan Modra + + * objcopy.c (copy_file): Report ambiguous bfd_object matches, and + other object errors in preference to bfd_core errors. + 2002-10-14 Alan Modra * Makefile.am: Run "make dep-am". diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 1accad41931..978e9c11604 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -1418,7 +1418,8 @@ copy_file (input_filename, output_filename, input_target, output_target) const char *output_target; { bfd *ibfd; - char **matching; + char **obj_matching; + char **core_matching; /* To allow us to do "strip *" without dying on the first non-object file, failures are nonfatal. */ @@ -1441,11 +1442,10 @@ copy_file (input_filename, output_filename, input_target, output_target) copy_archive (ibfd, obfd, output_target); } - else if (bfd_check_format_matches (ibfd, bfd_object, &matching) - || bfd_check_format_matches (ibfd, bfd_core, &matching)) + else if (bfd_check_format_matches (ibfd, bfd_object, &obj_matching)) { bfd *obfd; - + do_copy: /* bfd_get_target does not return the correct value until bfd_check_format succeeds. */ if (output_target == NULL) @@ -1465,12 +1465,33 @@ copy_file (input_filename, output_filename, input_target, output_target) } else { + bfd_error_type obj_error = bfd_get_error (); + bfd_error_type core_error; + + if (bfd_check_format_matches (ibfd, bfd_core, &core_matching)) + { + /* This probably can't happen.. */ + if (obj_error == bfd_error_file_ambiguously_recognized) + free (obj_matching); + goto do_copy; + } + + core_error = bfd_get_error (); + /* Report the object error in preference to the core error. */ + if (obj_error != core_error) + bfd_set_error (obj_error); + bfd_nonfatal (input_filename); - if (bfd_get_error () == bfd_error_file_ambiguously_recognized) + if (obj_error == bfd_error_file_ambiguously_recognized) + { + list_matching_formats (obj_matching); + free (obj_matching); + } + if (core_error == bfd_error_file_ambiguously_recognized) { - list_matching_formats (matching); - free (matching); + list_matching_formats (core_matching); + free (core_matching); } status = 1;