This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] opcodes: Use autoconf to check for `bfd_mips_elf_get_abiflags' in BFD


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9e76c212e6311abaee4d02473473f7d6dcad972f

commit 9e76c212e6311abaee4d02473473f7d6dcad972f
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Fri Dec 23 12:11:12 2016 +0000

    opcodes: Use autoconf to check for `bfd_mips_elf_get_abiflags' in BFD
    
    Fix a regression introduced with commit 5e7fc731f80e ("MIPS/opcodes:
    Also set disassembler's ASE flags from ELF structures"), further updated
    with commit 4df995c77118 ("MIPS/opcodes: Also set disassembler's ASE
    flags from ELF structures"), and use autoconf to check for the presence
    of `bfd_mips_elf_get_abiflags' in BFD.
    
    	opcodes/
    	* mips-dis.c (set_default_mips_dis_options): Use
    	HAVE_BFD_MIPS_ELF_GET_ABIFLAGS rather than BFD64 to guard the
    	call to `bfd_mips_elf_get_abiflags'.
    	* configure.ac: Check for `bfd_mips_elf_get_abiflags' in BFD.
    	* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add `libbfd.la'.
    	* aclocal.m4: Regenerate.
    	* configure: Regenerate.
    	* config.in: Regenerate.
    	* Makefile.in: Regenerate.

Diff:
---
 opcodes/ChangeLog    |  12 +++++++
 opcodes/Makefile.am  |   5 +--
 opcodes/Makefile.in  |  11 ++++--
 opcodes/aclocal.m4   |   1 +
 opcodes/config.in    |   3 ++
 opcodes/configure    | 100 +++++++++++++++++++++++++++++++++++++++++++++++++--
 opcodes/configure.ac |  19 ++++++++++
 opcodes/mips-dis.c   |  11 +++---
 8 files changed, 150 insertions(+), 12 deletions(-)

diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index bfd18f9..9938992 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,15 @@
+2016-12-23  Maciej W. Rozycki  <macro@imgtec.com>
+
+	* mips-dis.c (set_default_mips_dis_options): Use
+	HAVE_BFD_MIPS_ELF_GET_ABIFLAGS rather than BFD64 to guard the
+	call to `bfd_mips_elf_get_abiflags'.
+	* configure.ac: Check for `bfd_mips_elf_get_abiflags' in BFD.
+	* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add `libbfd.la'.
+	* aclocal.m4: Regenerate.
+	* configure: Regenerate.
+	* config.in: Regenerate.
+	* Makefile.in: Regenerate.
+
 2016-12-23  Tristan Gingold  <gingold@adacore.com>
 
 	* configure: Regenerate.
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
index 737e8e3..3e9dc54 100644
--- a/opcodes/Makefile.am
+++ b/opcodes/Makefile.am
@@ -300,8 +300,9 @@ ALL_MACHINES = $(TARGET_LIBOPCODES_CFILES:.c=.lo)
 
 OFILES = @BFD_MACHINES@
 
-# development.sh is used to determine -Werror default.
-CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
+# development.sh is used to determine -Werror default, libbfd.la is needed
+# for function availability checks.
+CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh ../bfd/libbfd.la
 
 AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
 
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
index cf8e5aa..0d75cd6 100644
--- a/opcodes/Makefile.in
+++ b/opcodes/Makefile.in
@@ -80,7 +80,9 @@ DIST_COMMON = ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/po/Make-in $(srcdir)/../depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
-	$(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
+	$(top_srcdir)/../bfd/warning.m4 \
+	$(top_srcdir)/../config/acinclude.m4 \
+	$(top_srcdir)/../config/acx.m4 \
 	$(top_srcdir)/../config/depstand.m4 \
 	$(top_srcdir)/../config/gettext-sister.m4 \
 	$(top_srcdir)/../config/lead-dot.m4 \
@@ -187,6 +189,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BFDHDIR = @BFDHDIR@
+BFDLIB = @BFDLIB@
 BFD_MACHINES = @BFD_MACHINES@
 BUILD_LIBS = @BUILD_LIBS@
 BUILD_LIB_DEPS = @BUILD_LIB_DEPS@
@@ -603,8 +607,9 @@ CFILES = \
 ALL_MACHINES = $(TARGET_LIBOPCODES_CFILES:.c=.lo)
 OFILES = @BFD_MACHINES@
 
-# development.sh is used to determine -Werror default.
-CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh
+# development.sh is used to determine -Werror default, libbfd.la is needed
+# for function availability checks.
+CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh ../bfd/libbfd.la
 AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(INCDIR) -I$(BFDDIR) @HDEFINES@ @INCINTL@
 libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
 # It's desirable to list ../bfd/libbfd.la in DEPENDENCIES and LIBADD.
diff --git a/opcodes/aclocal.m4 b/opcodes/aclocal.m4
index 7e5b3d2..3c2c69d 100644
--- a/opcodes/aclocal.m4
+++ b/opcodes/aclocal.m4
@@ -990,6 +990,7 @@ AC_SUBST([am__untar])
 
 m4_include([../bfd/acinclude.m4])
 m4_include([../bfd/warning.m4])
+m4_include([../config/acinclude.m4])
 m4_include([../config/acx.m4])
 m4_include([../config/depstand.m4])
 m4_include([../config/gettext-sister.m4])
diff --git a/opcodes/config.in b/opcodes/config.in
index 55a80fd..37b5d44 100644
--- a/opcodes/config.in
+++ b/opcodes/config.in
@@ -11,6 +11,9 @@
    language is requested. */
 #undef ENABLE_NLS
 
+/* Define to 1 if you have the `bfd_mips_elf_get_abiflags' function. */
+#undef HAVE_BFD_MIPS_ELF_GET_ABIFLAGS
+
 /* Define to 1 if you have the declaration of `basename', and to 0 if you
    don't. */
 #undef HAVE_DECL_BASENAME
diff --git a/opcodes/configure b/opcodes/configure
index c3aa76e..386352e 100755
--- a/opcodes/configure
+++ b/opcodes/configure
@@ -604,6 +604,8 @@ LTLIBOBJS
 LIBOBJS
 BFD_MACHINES
 archdefs
+BFDLIB
+BFDHDIR
 SHARED_DEPENDENCIES
 SHARED_LIBADD
 SHARED_LDFLAGS
@@ -11151,7 +11153,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11154 "configure"
+#line 11156 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11257,7 +11259,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11260 "configure"
+#line 11262 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12586,6 +12588,100 @@ fi
 
 # target-specific stuff:
 
+# Check if `bfd_mips_elf_get_abiflags' is present in BFD, needed by
+# `mips-dis.c'.  Avoid using AC_CHECK_LIB as it uses a cache variable
+# which could hold the wrong value if we are rerun due to the
+# `../bfd/libbfd.la' dependency for `config.status', so use a handcoded
+# sequence which is equivalent but does not use the cache.
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the bfd header in the build tree" >&5
+$as_echo_n "checking for the bfd header in the build tree... " >&6; }
+dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
+if test "${ac_cv_c_bfdh+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+for i in $dirlist; do
+    if test -f "$i/bfd/bfd.h" ; then
+	ac_cv_c_bfdh=`(cd $i/bfd; ${PWDCMD-pwd})`
+	break
+    fi
+done
+
+fi
+
+if test x"${ac_cv_c_bfdh}" != x; then
+    BFDHDIR="-I${ac_cv_c_bfdh}"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_bfdh}" >&5
+$as_echo "${ac_cv_c_bfdh}" >&6; }
+else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the bfd library in the build tree" >&5
+$as_echo_n "checking for the bfd library in the build tree... " >&6; }
+if test "${ac_cv_c_bfdlib+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+for i in $dirlist; do
+    if test -f "$i/bfd/Makefile" ; then
+	ac_cv_c_bfdlib=`(cd $i/bfd; ${PWDCMD-pwd})`
+    fi
+done
+
+fi
+
+if test x"${ac_cv_c_bfdlib}" != x; then
+    BFDLIB="-L${ac_cv_c_bfdlib} -L${ac_cv_c_bfdlib}/.libs"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_bfdlib}" >&5
+$as_echo "${ac_cv_c_bfdlib}" >&6; }
+else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_mips_elf_get_abiflags in -lbfd" >&5
+$as_echo_n "checking for bfd_mips_elf_get_abiflags in -lbfd... " >&6; }
+opcodes_save_LIBS=$LIBS
+LIBS="$BFDLIB -lbfd ../libiberty/libiberty.a `test -e ../bfd/libbfd.la && . ../bfd/libbfd.la; echo $dependency_libs`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bfd_mips_elf_get_abiflags ();
+int
+main ()
+{
+return bfd_mips_elf_get_abiflags ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  opcodes_lib_bfd_bfd_mips_elf_get_abiflags=yes
+else
+  opcodes_lib_bfd_bfd_mips_elf_get_abiflags=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$opcodes_save_LIBS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $opcodes_lib_bfd_bfd_mips_elf_get_abiflags" >&5
+$as_echo "$opcodes_lib_bfd_bfd_mips_elf_get_abiflags" >&6; }
+if test x"$opcodes_lib_bfd_bfd_mips_elf_get_abiflags" = xyes; then
+
+$as_echo "#define HAVE_BFD_MIPS_ELF_GET_ABIFLAGS 1" >>confdefs.h
+
+fi
+
 # Canonicalize the secondary target names.
 if test -n "$enable_targets" ; then
     for targ in `echo $enable_targets | sed 's/,/ /g'`
diff --git a/opcodes/configure.ac b/opcodes/configure.ac
index 3475d49..b0825be 100644
--- a/opcodes/configure.ac
+++ b/opcodes/configure.ac
@@ -210,6 +210,25 @@ AC_SUBST(SHARED_DEPENDENCIES)
 
 # target-specific stuff:
 
+# Check if `bfd_mips_elf_get_abiflags' is present in BFD, needed by
+# `mips-dis.c'.  Avoid using AC_CHECK_LIB as it uses a cache variable
+# which could hold the wrong value if we are rerun due to the
+# `../bfd/libbfd.la' dependency for `config.status', so use a handcoded
+# sequence which is equivalent but does not use the cache.
+CYG_AC_PATH_BFD
+AC_MSG_CHECKING([for bfd_mips_elf_get_abiflags in -lbfd])
+opcodes_save_LIBS=$LIBS
+LIBS="$BFDLIB -lbfd ../libiberty/libiberty.a `test -e ../bfd/libbfd.la && . ../bfd/libbfd.la; echo $dependency_libs`"
+AC_LINK_IFELSE([AC_LANG_CALL([], [bfd_mips_elf_get_abiflags])],
+               [opcodes_lib_bfd_bfd_mips_elf_get_abiflags=yes],
+               [opcodes_lib_bfd_bfd_mips_elf_get_abiflags=no])
+LIBS=$opcodes_save_LIBS
+AC_MSG_RESULT([$opcodes_lib_bfd_bfd_mips_elf_get_abiflags])
+if test x"$opcodes_lib_bfd_bfd_mips_elf_get_abiflags" = xyes; then
+  AC_DEFINE([HAVE_BFD_MIPS_ELF_GET_ABIFLAGS], [1],
+    [Define to 1 if you have the `bfd_mips_elf_get_abiflags' function.])
+fi
+
 # Canonicalize the secondary target names.
 if test -n "$enable_targets" ; then
     for targ in `echo $enable_targets | sed 's/,/ /g'`
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index 9cf737d..4bc1f59 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -847,11 +847,12 @@ set_default_mips_dis_options (struct disassemble_info *info)
       Elf_Internal_Ehdr *header = elf_elfheader (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
+      /* We won't ever get here if !HAVE_BFD_MIPS_ELF_GET_ABIFLAGS,
+	 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, or with MIPS/ECOFF configurations.  */
+#ifdef HAVE_BFD_MIPS_ELF_GET_ABIFLAGS
       abiflags = bfd_mips_elf_get_abiflags (abfd);
 #endif
       /* If an ELF "newabi" binary, use the n32/(n)64 GPR names.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]