diff mbox

[committed] MIPS/opcodes: Only call `bfd_mips_elf_get_abiflags' if BFD64

Message ID alpine.DEB.2.00.1612191121410.6743@tp.orcam.me.uk
State Committed
Headers show

Commit Message

Maciej W. Rozycki Dec. 19, 2016, 11:43 a.m. UTC
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.
---
binutils-mips-opcodes-dis-bfd64.diff
diff mbox

Patch

Index: binutils/opcodes/mips-dis.c
===================================================================
--- binutils.orig/opcodes/mips-dis.c	2016-12-19 09:48:25.000000000 +0000
+++ binutils/opcodes/mips-dis.c	2016-12-19 10:54:58.853432832 +0000
@@ -845,8 +845,15 @@  set_default_mips_dis_options (struct dis
     {
       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;