-rw-r--r-- | configure.ac | 12 | ||||
-rw-r--r-- | lib/jit_disasm.c | 19 |
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); |