This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
objcopy error message
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sources dot redhat dot com
- Date: Tue, 15 Oct 2002 14:43:41 +0930
- Subject: objcopy error message
objcopy currently doesn't report ambiguous matches very well.
Fixed like this:
* objcopy.c (copy_file): Report ambiguous bfd_object matches, and
other object errors in preference to bfd_core errors.
Index: binutils/objcopy.c
===================================================================
RCS file: /cvs/src/src/binutils/objcopy.c,v
retrieving revision 1.41
diff -u -p -r1.41 objcopy.c
--- binutils/objcopy.c 13 Aug 2002 13:39:02 -0000 1.41
+++ binutils/objcopy.c 15 Oct 2002 04:53:11 -0000
@@ -1418,7 +1418,8 @@ copy_file (input_filename, output_filena
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_filena
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_filena
}
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;
--
Alan Modra
IBM OzLabs - Linux Technology Centre