From 4df995c77118d07c12fb260dbba0ca2b281324f1 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Mon, 19 Dec 2016 11:32:05 +0000 Subject: [PATCH] MIPS/opcodes: Only call `bfd_mips_elf_get_abiflags' if BFD64 Complement commit 5e7fc731f80e ("MIPS/opcodes: Also set disassembler's ASE flags from ELF structures") and fix an `--enable-targets=all' GDB build regression on 32-bit hosts where the MIPS target is a secondary: ../opcodes/libopcodes.a(mips-dis.o): In function `set_default_mips_dis_options': mips-dis.c:(.text+0x906): undefined reference to `bfd_mips_elf_get_abiflags' collect2: error: ld returned 1 exit status make[2]: *** [gdb] Error 1 by avoiding making a call to the `bfd_mips_elf_get_abiflags' function, which is not available, because there is no MIPS/ELF BFD included in 32-bit BFD builds. This call is only made from a conditional code block guarded by a check against `bfd_target_elf_flavour', which is dead in such a configuration, however cannot be optimized away by the compiler. Also some other MIPS BFDs may be available, such as a.out, ECOFF or PE, so the disassembler has to remain functional. opcodes/ * mips-dis.c (set_default_mips_dis_options) [BFD64]: Only call `bfd_mips_elf_get_abiflags' here. --- opcodes/ChangeLog | 5 +++++ opcodes/mips-dis.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index d247bac90b..2618f90850 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2016-12-19 Maciej W. Rozycki + + * mips-dis.c (set_default_mips_dis_options) [BFD64]: Only call + `bfd_mips_elf_get_abiflags' here. + 2016-12-16 Nick Clifton * arm-dis.c (print_insn_thumb32): Fix compile time warning diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c index c30bbd0207..cd9893e70e 100644 --- a/opcodes/mips-dis.c +++ b/opcodes/mips-dis.c @@ -846,8 +846,15 @@ set_default_mips_dis_options (struct disassemble_info *info) { struct bfd *abfd = info->section->owner; Elf_Internal_Ehdr *header = elf_elfheader (abfd); - Elf_Internal_ABIFlags_v0 *abiflags = bfd_mips_elf_get_abiflags (abfd); + Elf_Internal_ABIFlags_v0 *abiflags = NULL; + /* We won't ever get here if !BFD64, because we won't then have + a MIPS/ELF BFD, however we need to guard against a link error + in a `--enable-targets=...' configuration with a 32-bit host, + where the MIPS target is a secondary. */ +#ifdef BFD64 + abiflags = bfd_mips_elf_get_abiflags (abfd); +#endif /* If an ELF "newabi" binary, use the n32/(n)64 GPR names. */ if (is_newabi (header)) mips_gpr_names = mips_gpr_names_newabi;