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.
This commit is contained in:
Alan Modra 2019-11-19 19:15:20 +10:30
parent dd68a12bc4
commit 6765ee1825
2 changed files with 16 additions and 2 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -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)))