diff options
author | Alan Modra <amodra@gmail.com> | 2019-11-19 19:15:20 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-11-19 19:26:40 +1030 |
commit | 6765ee1825d92d25d9b3f6260de3f8a2a27e4998 (patch) | |
tree | 65c95e752439552d1b55a35312eb1724148ae505 | |
parent | dd68a12bc4b19c50c31fe357335bb8ee9a3322fc (diff) | |
download | gdb-6765ee1825d92d25d9b3f6260de3f8a2a27e4998.zip gdb-6765ee1825d92d25d9b3f6260de3f8a2a27e4998.tar.gz gdb-6765ee1825d92d25d9b3f6260de3f8a2a27e4998.tar.bz2 |
PR24968, make objcopy use output ELF arch if -B not given
This should make objcopy -B redundant for the common case of producing
ELF output where the -O target defaults to the desired arch:mach.
PR 24968
* objcopy.c (copy_object): For ELF output and non-ELF input without
arch, take arch from output file if not given by -B. Don't
bfd_get_arch_info when we already have iarch.
-rw-r--r-- | binutils/ChangeLog | 7 | ||||
-rw-r--r-- | binutils/objcopy.c | 11 |
2 files changed, 16 insertions, 2 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 4fabf0c..19f1c40 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,12 @@ 2019-11-19 Alan Modra <amodra@gmail.com> + PR 24968 + * objcopy.c (copy_object): For ELF output and non-ELF input without + arch, take arch from output file if not given by -B. Don't + bfd_get_arch_info when we already have iarch. + +2019-11-19 Alan Modra <amodra@gmail.com> + PR 25191 * objcopy.c (is_nondebug_keep_contents_section): Use bfd_get_flavour. (copy_object): Likewise. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 551378d..99cc7be 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -2646,8 +2646,7 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) imach = bfd_get_mach (ibfd); if (input_arch) { - if (bfd_get_arch_info (ibfd) == NULL - || bfd_get_arch_info (ibfd)->arch == bfd_arch_unknown) + if (iarch == bfd_arch_unknown) { iarch = input_arch->arch; imach = input_arch->mach; @@ -2656,6 +2655,14 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) non_fatal (_("Input file `%s' ignores binary architecture parameter."), bfd_get_archive_filename (ibfd)); } + if (iarch == bfd_arch_unknown + && bfd_get_flavour (ibfd) != bfd_target_elf_flavour + && bfd_get_flavour (obfd) == bfd_target_elf_flavour) + { + const struct elf_backend_data *bed = get_elf_backend_data (obfd); + iarch = bed->arch; + imach = 0; + } if (!bfd_set_arch_mach (obfd, iarch, imach) && (ibfd->target_defaulted || bfd_get_arch (ibfd) != bfd_get_arch (obfd))) |