mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 08:21:14 +00:00
fb06f533b3
Backport patches from kernel 6.0 which are fixing building of perf with binutils 2.40. perf with kernel 5.10 is also not building but the backporting is more complicated and only a few targets are still using kernel 5.10. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
147 lines
4.3 KiB
Diff
147 lines
4.3 KiB
Diff
From a82db18ab34ba7f9d38319e8cc01ffe382e3e55e Mon Sep 17 00:00:00 2001
|
|
From: Andres Freund <andres@anarazel.de>
|
|
Date: Sun, 31 Jul 2022 18:38:33 -0700
|
|
Subject: [PATCH 5/5] tools bpftool: Fix compilation error with new binutils
|
|
|
|
binutils changed the signature of init_disassemble_info(), which now causes
|
|
compilation to fail for tools/bpf/bpftool/jit_disasm.c, e.g. on debian
|
|
unstable.
|
|
|
|
Relevant binutils commit:
|
|
|
|
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
|
|
|
|
Wire up the feature test and switch to init_disassemble_info_compat(),
|
|
which were introduced in prior commits, fixing the compilation failure.
|
|
|
|
I verified that bpftool can still disassemble bpf programs, both with an
|
|
old and new dis-asm.h API. There are no output changes for plain and json
|
|
formats. When comparing the output from old binutils (2.35)
|
|
to new bintuils with the patch (upstream snapshot) there are a few output
|
|
differences, but they are unrelated to this patch. An example hunk is:
|
|
|
|
2f: pop %r14
|
|
31: pop %r13
|
|
33: pop %rbx
|
|
- 34: leaveq
|
|
- 35: retq
|
|
+ 34: leave
|
|
+ 35: ret
|
|
|
|
Signed-off-by: Andres Freund <andres@anarazel.de>
|
|
Acked-by: Quentin Monnet <quentin@isovalent.com>
|
|
Cc: Alexei Starovoitov <ast@kernel.org>
|
|
Cc: Ben Hutchings <benh@debian.org>
|
|
Cc: Jiri Olsa <jolsa@kernel.org>
|
|
Cc: Quentin Monnet <quentin@isovalent.com>
|
|
Cc: Sedat Dilek <sedat.dilek@gmail.com>
|
|
Cc: bpf@vger.kernel.org
|
|
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
|
|
Link: https://lore.kernel.org/r/20220801013834.156015-8-andres@anarazel.de
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
(cherry picked from commit 600b7b26c07a070d0153daa76b3806c1e52c9e00)
|
|
---
|
|
tools/bpf/bpftool/Makefile | 5 +++-
|
|
tools/bpf/bpftool/jit_disasm.c | 42 +++++++++++++++++++++++++++-------
|
|
2 files changed, 38 insertions(+), 9 deletions(-)
|
|
|
|
--- a/tools/bpf/bpftool/Makefile
|
|
+++ b/tools/bpf/bpftool/Makefile
|
|
@@ -76,7 +76,7 @@ INSTALL ?= install
|
|
RM ?= rm -f
|
|
|
|
FEATURE_USER = .bpftool
|
|
-FEATURE_TESTS = libbfd disassembler-four-args reallocarray zlib libcap \
|
|
+FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled reallocarray zlib libcap \
|
|
clang-bpf-co-re
|
|
FEATURE_DISPLAY = libbfd disassembler-four-args zlib libcap \
|
|
clang-bpf-co-re
|
|
@@ -100,6 +100,9 @@ endif
|
|
ifeq ($(feature-disassembler-four-args), 1)
|
|
CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
|
|
endif
|
|
+ifeq ($(feature-disassembler-init-styled), 1)
|
|
+ CFLAGS += -DDISASM_INIT_STYLED
|
|
+endif
|
|
|
|
ifeq ($(feature-reallocarray), 0)
|
|
CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
|
|
--- a/tools/bpf/bpftool/jit_disasm.c
|
|
+++ b/tools/bpf/bpftool/jit_disasm.c
|
|
@@ -24,6 +24,7 @@
|
|
#include <sys/stat.h>
|
|
#include <limits.h>
|
|
#include <bpf/libbpf.h>
|
|
+#include <tools/dis-asm-compat.h>
|
|
|
|
#include "json_writer.h"
|
|
#include "main.h"
|
|
@@ -39,15 +40,12 @@ static void get_exec_path(char *tpath, s
|
|
}
|
|
|
|
static int oper_count;
|
|
-static int fprintf_json(void *out, const char *fmt, ...)
|
|
+static int printf_json(void *out, const char *fmt, va_list ap)
|
|
{
|
|
- va_list ap;
|
|
char *s;
|
|
int err;
|
|
|
|
- va_start(ap, fmt);
|
|
err = vasprintf(&s, fmt, ap);
|
|
- va_end(ap);
|
|
if (err < 0)
|
|
return -1;
|
|
|
|
@@ -73,6 +71,32 @@ static int fprintf_json(void *out, const
|
|
return 0;
|
|
}
|
|
|
|
+static int fprintf_json(void *out, const char *fmt, ...)
|
|
+{
|
|
+ va_list ap;
|
|
+ int r;
|
|
+
|
|
+ va_start(ap, fmt);
|
|
+ r = printf_json(out, fmt, ap);
|
|
+ va_end(ap);
|
|
+
|
|
+ return r;
|
|
+}
|
|
+
|
|
+static int fprintf_json_styled(void *out,
|
|
+ enum disassembler_style style __maybe_unused,
|
|
+ const char *fmt, ...)
|
|
+{
|
|
+ va_list ap;
|
|
+ int r;
|
|
+
|
|
+ va_start(ap, fmt);
|
|
+ r = printf_json(out, fmt, ap);
|
|
+ va_end(ap);
|
|
+
|
|
+ return r;
|
|
+}
|
|
+
|
|
void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes,
|
|
const char *arch, const char *disassembler_options,
|
|
const struct btf *btf,
|
|
@@ -99,11 +123,13 @@ void disasm_print_insn(unsigned char *im
|
|
assert(bfd_check_format(bfdf, bfd_object));
|
|
|
|
if (json_output)
|
|
- init_disassemble_info(&info, stdout,
|
|
- (fprintf_ftype) fprintf_json);
|
|
+ init_disassemble_info_compat(&info, stdout,
|
|
+ (fprintf_ftype) fprintf_json,
|
|
+ fprintf_json_styled);
|
|
else
|
|
- init_disassemble_info(&info, stdout,
|
|
- (fprintf_ftype) fprintf);
|
|
+ init_disassemble_info_compat(&info, stdout,
|
|
+ (fprintf_ftype) fprintf,
|
|
+ fprintf_styled);
|
|
|
|
/* Update architecture info for offload. */
|
|
if (arch) {
|