From 8b31b6c4c83c17810ff8ccdbf88c209ba354f2d5 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 11 Sep 2009 11:16:19 +0000 Subject: [PATCH] * obcopy.c (copy_object): New parameter `input_arch', architecture of input file, if not specified in input file itself; all callers updated; `binary_architecture' hack removed. (copy_archive, copy_file): New parameter `input_arch', for `copy_object' usage. (copy_main): Accept `-B' (`--binary-architecture') option also for any arch-less input ifile format, not only `binary'; remove bfd_external_binary_architecture hack; instead, add `input_arch' to calls to `copy_file'. * windres.c, windmc.c : Obsolete and useless external references to `bfd_external_binary_architecture' or `bfd_external_machine' removed. * binary.c (binary_object_p): Remove bfd_external_binary_architecture hack. objcopy `-B' (`--binary-architecture') option is now handled in a generic way. --- bfd/ChangeLog | 6 ++++ bfd/binary.c | 13 -------- binutils/ChangeLog | 17 ++++++++++ binutils/doc/binutils.texi | 6 ++-- binutils/objcopy.c | 66 ++++++++++++++++---------------------- binutils/windmc.c | 7 +--- binutils/windres.c | 5 --- 7 files changed, 54 insertions(+), 66 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a4d85b9577f..795f00d6f17 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2009-09-11 Philippe De Muyter + + * binary.c (binary_object_p): Remove bfd_external_binary_architecture + hack. objcopy `-B' (`--binary-architecture') option is now handled + in a generic way. + 2009-09-11 Nick Clifton * rs6000-core.c (read_hdr): Fix typo in recent C++ compatibility diff --git a/bfd/binary.c b/bfd/binary.c index 97407567d51..d264a09209e 100644 --- a/bfd/binary.c +++ b/bfd/binary.c @@ -42,11 +42,6 @@ a start symbol, an end symbol, and an absolute length symbol. */ #define BIN_SYMS 3 -/* Set by external programs - specifies the BFD architecture and - machine number to be uses when creating binary BFDs. */ -enum bfd_architecture bfd_external_binary_architecture = bfd_arch_unknown; -unsigned long bfd_external_machine = 0; - /* Create a binary object. Invoked via bfd_set_format. */ static bfd_boolean @@ -92,14 +87,6 @@ binary_object_p (bfd *abfd) abfd->tdata.any = (void *) sec; - if (bfd_get_arch_info (abfd) != NULL) - { - if ((bfd_get_arch_info (abfd)->arch == bfd_arch_unknown) - && (bfd_external_binary_architecture != bfd_arch_unknown)) - bfd_set_arch_info (abfd, bfd_lookup_arch - (bfd_external_binary_architecture, bfd_external_machine)); - } - return abfd->xvec; } diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 49e01359463..e7bc7127290 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,20 @@ +2009-09-11 Philippe De Muyter + + * obcopy.c (copy_object): New parameter `input_arch', architecture + of input file, if not specified in input file itself; all callers + updated; `binary_architecture' hack removed. + (copy_archive, copy_file): New parameter `input_arch', for + `copy_object' usage. + (copy_main): Accept `-B' (`--binary-architecture') option also + for any arch-less input ifile format, not only `binary'; remove + bfd_external_binary_architecture hack; instead, add `input_arch' + to calls to `copy_file'. + * windres.c, windmc.c : Obsolete and useless external references + to `bfd_external_binary_architecture' or `bfd_external_machine' + removed. + * doc/binutils.texi: Mention that -B parameter can be used for any + input file type which does not have its own architecture. + 2009-09-10 Martin Thuresson Update soruces to compile cleanly with -Wc++-compat: diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index cc015464986..f67ad134aba 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -1134,9 +1134,9 @@ translation. @xref{Target Selection}, for more information. @item -B @var{bfdarch} @itemx --binary-architecture=@var{bfdarch} -Useful when transforming a raw binary input file into an object file. -In this case the output architecture can be set to @var{bfdarch}. This -option will be ignored if the input file has a known @var{bfdarch}. You +Useful when transforming a architecture-less input file into an object file. +In this case the output architecture can be set to @var{bfdarch}. This +option will be ignored if the input file has a known @var{bfdarch}. You can access this binary data inside a program by referencing the special symbols that are created by the conversion process. These symbols are called _binary_@var{objfile}_start, _binary_@var{objfile}_end and diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 2048827f8e1..9732b86fa8c 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -442,11 +442,6 @@ extern unsigned int Chunk; on by the --srec-forceS3 command line switch. */ extern bfd_boolean S3Forced; -/* Defined in bfd/binary.c. Used to set architecture and machine of input - binary files. */ -extern enum bfd_architecture bfd_external_binary_architecture; -extern unsigned long bfd_external_machine; - /* Forward declarations. */ static void setup_section (bfd *, asection *, void *); static void setup_bfd_headers (bfd *, bfd *); @@ -466,7 +461,7 @@ copy_usage (FILE *stream, int exit_status) fprintf (stream, _("\ -I --input-target Assume input file is in format \n\ -O --output-target Create an output file in format \n\ - -B --binary-architecture Set arch of output file, when input is binary\n\ + -B --binary-architecture Set output arch, when input is arch-less\n\ -F --target Set both input and output format to \n\ --debugging Convert debugging information, if possible\n\ -p --preserve-dates Copy modified/access timestamps to the output\n\ @@ -1401,7 +1396,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd) Returns TRUE upon success, FALSE otherwise. */ static bfd_boolean -copy_object (bfd *ibfd, bfd *obfd) +copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) { bfd_vma start; long symcount; @@ -1466,6 +1461,18 @@ copy_object (bfd *ibfd, bfd *obfd) /* Copy architecture of input file to output file. */ iarch = bfd_get_arch (ibfd); imach = bfd_get_mach (ibfd); + if (input_arch) + { + if (bfd_get_arch_info (ibfd) == NULL + || bfd_get_arch_info (ibfd)->arch == bfd_arch_unknown) + { + iarch = input_arch->arch; + imach = input_arch->mach; + } + else + non_fatal (_("Input file `%s' ignores binary architecture parameter."), + bfd_get_archive_filename (ibfd)); + } if (!bfd_set_arch_mach (obfd, iarch, imach) && (ibfd->target_defaulted || bfd_get_arch (ibfd) != bfd_get_arch (obfd))) @@ -1956,7 +1963,8 @@ copy_object (bfd *ibfd, bfd *obfd) static void copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, - bfd_boolean force_output_target) + bfd_boolean force_output_target, + const bfd_arch_info_type *input_arch) { struct name_list { @@ -2050,7 +2058,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, return; } - del = ! copy_object (this_element, output_bfd); + del = ! copy_object (this_element, output_bfd, input_arch); if (! del || bfd_get_arch (this_element) != bfd_arch_unknown) @@ -2155,7 +2163,8 @@ set_long_section_mode (bfd *output_bfd, bfd *input_bfd, enum long_section_name_h static void copy_file (const char *input_filename, const char *output_filename, - const char *input_target, const char *output_target) + const char *input_target, const char *output_target, + const bfd_arch_info_type *input_arch) { bfd *ibfd; char **obj_matching; @@ -2206,7 +2215,7 @@ copy_file (const char *input_filename, const char *output_filename, /* This is a no-op on non-Coff targets. */ set_long_section_mode (obfd, ibfd, long_section_names); - copy_archive (ibfd, obfd, output_target, force_output_target); + copy_archive (ibfd, obfd, output_target, force_output_target, input_arch); } else if (bfd_check_format_matches (ibfd, bfd_object, &obj_matching)) { @@ -2228,7 +2237,7 @@ copy_file (const char *input_filename, const char *output_filename, /* This is a no-op on non-Coff targets. */ set_long_section_mode (obfd, ibfd, long_section_names); - if (! copy_object (ibfd, obfd)) + if (! copy_object (ibfd, obfd, input_arch)) status = 1; if (!bfd_close (obfd)) @@ -3009,7 +3018,7 @@ strip_main (int argc, char *argv[]) } status = 0; - copy_file (argv[i], tmpname, input_target, output_target); + copy_file (argv[i], tmpname, input_target, output_target, NULL); if (status == 0) { if (preserve_dates) @@ -3144,7 +3153,6 @@ convert_efi_target (char *efi) static int copy_main (int argc, char *argv[]) { - char * binary_architecture = NULL; char *input_filename = NULL; char *output_filename = NULL; char *tmpname; @@ -3156,6 +3164,7 @@ copy_main (int argc, char *argv[]) int c; struct section_list *p; struct stat statbuf; + const bfd_arch_info_type *input_arch = NULL; while ((c = getopt_long (argc, argv, "b:B:i:I:j:K:N:s:O:d:F:L:G:R:SpgxXHhVvW:w", copy_options, (int *) 0)) != EOF) @@ -3169,7 +3178,9 @@ copy_main (int argc, char *argv[]) break; case 'B': - binary_architecture = optarg; + input_arch = bfd_scan_arch (optarg); + if (input_arch == NULL) + fatal (_("architecture %s unknown"), optarg); break; case 'i': @@ -3824,29 +3835,6 @@ copy_main (int argc, char *argv[]) convert_efi_target (efi); } - if (binary_architecture != NULL) - { - if (input_target && strcmp (input_target, "binary") == 0) - { - const bfd_arch_info_type * temp_arch_info; - - temp_arch_info = bfd_scan_arch (binary_architecture); - - if (temp_arch_info != NULL) - { - bfd_external_binary_architecture = temp_arch_info->arch; - bfd_external_machine = temp_arch_info->mach; - } - else - fatal (_("architecture %s unknown"), binary_architecture); - } - else - { - non_fatal (_("Warning: input target 'binary' required for binary architecture parameter.")); - non_fatal (_(" Argument %s ignored"), binary_architecture); - } - } - if (preserve_dates) if (stat (input_filename, & statbuf) < 0) fatal (_("warning: could not locate '%s'. System error message: %s"), @@ -3863,7 +3851,7 @@ copy_main (int argc, char *argv[]) fatal (_("warning: could not create temporary file whilst copying '%s', (error: %s)"), input_filename, strerror (errno)); - copy_file (input_filename, tmpname, input_target, output_target); + copy_file (input_filename, tmpname, input_target, output_target, input_arch); if (status == 0) { if (preserve_dates) diff --git a/binutils/windmc.c b/binutils/windmc.c index c7aa8f8e4e9..d02bc865a27 100644 --- a/binutils/windmc.c +++ b/binutils/windmc.c @@ -1,5 +1,5 @@ /* windmc.c -- a program to compile Windows message files. - Copyright 2007, 2008 + Copyright 2007, 2008, 2009 Free Software Foundation, Inc. Written by Kai Tietz, Onevision. @@ -51,11 +51,6 @@ typedef struct mc_msg_item struct bin_messagetable_item *res; } mc_msg_item; -/* Defined in bfd/binary.c. Used to set architecture and machine of input - binary files. */ -extern enum bfd_architecture bfd_external_binary_architecture; -extern unsigned long bfd_external_machine; - int target_is_bigendian = 0; const char *def_target_arch; diff --git a/binutils/windres.c b/binutils/windres.c index c3b1f50d7e4..6fbe7b5a086 100644 --- a/binutils/windres.c +++ b/binutils/windres.c @@ -46,11 +46,6 @@ #include "obstack.h" #include "windres.h" -/* Defined in bfd/binary.c. Used to set architecture and machine of input - binary files. */ -extern enum bfd_architecture bfd_external_binary_architecture; -extern unsigned long bfd_external_machine; - /* Used by resrc.c at least. */ int verbose = 0; -- 2.30.2