[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/2] jit_disasm: Add support for new binutils 2.38
From: |
Paul Cercueil |
Subject: |
[PATCH 2/2] jit_disasm: Add support for new binutils 2.38 |
Date: |
Sat, 10 Sep 2022 10:29:26 +0100 |
The INIT_DISASSEMBLE_INFO() macro changed starting from binutils 2.38.
Update the configure script to auto-detect the binutils version and use
the right format.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
configure.ac | 12 ++++++++++++
lib/jit_disasm.c | 19 +++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/configure.ac b/configure.ac
index 5b582d2..8200651 100644
--- a/configure.ac
+++ b/configure.ac
@@ -136,10 +136,22 @@ if test "x$DISASSEMBLER" != "xno"; then
return 0;
}
)], [ac_cv_test_new_disassembler=no],,)
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ #include <dis-asm.h>
+ int main(int argc, char *argv[])
+ {
+ struct disassemble_info dinfo;
+ INIT_DISASSEMBLE_INFO(dinfo, NULL, NULL, NULL);
+ return 0;
+ }
+ )],
[ac_cv_test_new_disassemble_info=yes],[ac_cv_test_new_disassemble_info=no],)
CFLAGS="$save_CFLAGS"
if test "x$ac_cv_test_new_disassembler" != "xno"; then
LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DBINUTILS_2_29=1"
fi
+ if test "x$ac_cv_test_new_disassemble_info" != "xno"; then
+ LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DBINUTILS_2_38=1"
+ fi
fi
AC_ARG_ENABLE(devel-disassembler,
diff --git a/lib/jit_disasm.c b/lib/jit_disasm.c
index b2ceba0..d61ba47 100644
--- a/lib/jit_disasm.c
+++ b/lib/jit_disasm.c
@@ -53,6 +53,20 @@ static jit_state_t *disasm_jit;
static FILE *disasm_stream;
#endif
+#if BINUTILS_2_38
+static int fprintf_styled(void *, enum disassembler_style, const char* fmt,
...)
+{
+ va_list args;
+ int r;
+
+ va_start(args, fmt);
+ r = vprintf(fmt, args);
+ va_end(args);
+
+ return r;
+}
+#endif
+
/*
* Implementation
*/
@@ -76,7 +90,12 @@ jit_init_debug(const char *progname)
bfd_check_format(disasm_bfd, bfd_archive);
if (!disasm_stream)
disasm_stream = stderr;
+
+#if BINUTILS_2_38
+ INIT_DISASSEMBLE_INFO(disasm_info, disasm_stream, fprintf, fprintf_styled);
+#else
INIT_DISASSEMBLE_INFO(disasm_info, disasm_stream, fprintf);
+#endif
disasm_info.arch = bfd_get_arch(disasm_bfd);
disasm_info.mach = bfd_get_mach(disasm_bfd);
--
2.35.1