Hi, binutils changed the signature of init_disassemble_info(), which now causes perf and bpftool to fail to compile (e.g. on debian unstable). Relevant binutils commit: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=60a3da00bd5407f07d64dff82a4dae98230dfaac util/annotate.c: In function ‘symbol__disassemble_bpf’: util/annotate.c:1765:9: error: too few arguments to function ‘init_disassemble_info’ 1765 | init_disassemble_info(&info, s, | ^~~~~~~~~~~~~~~~~~~~~ In file included from util/annotate.c:1718: /usr/include/dis-asm.h:472:13: note: declared here 472 | extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream, | ^~~~~~~~~~~~~~~~~~~~~ with equivalent failures in tools/bpf/bpf_jit_disasm.c tools/bpf/bpftool/jit_disasm.c The fix is easy enough, add a wrapper around fprintf() that conforms to the new signature. However I assume the necessary feature test and wrapper should only be added once? I don't know the kernel stuff well enough to choose the right structure here. Attached is my local fix for perf. Obviously would need work to be a real solution. Greetings, Andres Freund
diff --git i/tools/perf/util/annotate.c w/tools/perf/util/annotate.c index 82cc396ef516..b0e364d235b4 100644 --- i/tools/perf/util/annotate.c +++ w/tools/perf/util/annotate.c @@ -1721,6 +1721,18 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil #include <bpf/libbpf.h> #include <linux/btf.h> +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; +} + static int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args) { @@ -1763,7 +1775,8 @@ static int symbol__disassemble_bpf(struct symbol *sym, goto out; } init_disassemble_info(&info, s, - (fprintf_ftype) fprintf); + (fprintf_ftype) fprintf, + fprintf_styled); info.arch = bfd_get_arch(bfdf); info.mach = bfd_get_mach(bfdf);