mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-06-02 12:56:20 +02: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>
103 lines
3.5 KiB
Diff
103 lines
3.5 KiB
Diff
From 042e7f11769adac0736d77d76262912b90724d7d Mon Sep 17 00:00:00 2001
|
|
From: Andres Freund <andres@anarazel.de>
|
|
Date: Sun, 31 Jul 2022 18:38:31 -0700
|
|
Subject: [PATCH 4/5] tools bpf_jit_disasm: Fix compilation error with new
|
|
binutils
|
|
|
|
binutils changed the signature of init_disassemble_info(), which now causes
|
|
compilation to fail for tools/bpf/bpf_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 bpf_jit_disasm can still disassemble bpf programs, both
|
|
with the old and new dis-asm.h API. With old binutils there's no change in
|
|
output before/after this patch. 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:
|
|
|
|
f4: mov %r14,%rsi
|
|
f7: mov %r15,%rdx
|
|
fa: mov $0x2a,%ecx
|
|
- ff: callq 0xffffffffea8c4988
|
|
+ ff: call 0xffffffffea8c4988
|
|
104: test %rax,%rax
|
|
107: jge 0x0000000000000110
|
|
109: xor %eax,%eax
|
|
- 10b: jmpq 0x0000000000000073
|
|
+ 10b: jmp 0x0000000000000073
|
|
110: cmp $0x16,%rax
|
|
|
|
However, I had to use an older kernel to generate the bpf_jit_enabled =
|
|
2 output, as that has been broken since 5.18 / 1022a5498f6f745c ("bpf,
|
|
x86_64: Use bpf_jit_binary_pack_alloc").
|
|
|
|
https://lore.kernel.org/20220703030210.pmjft7qc2eajzi6c@alap3.anarazel.de
|
|
|
|
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: Daniel Borkmann <daniel@iogearbox.net>
|
|
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-6-andres@anarazel.de
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
(cherry picked from commit 96ed066054abf11c7d3e106e3011a51f3f1227a3)
|
|
---
|
|
tools/bpf/Makefile | 5 ++++-
|
|
tools/bpf/bpf_jit_disasm.c | 5 ++++-
|
|
2 files changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
--- a/tools/bpf/Makefile
|
|
+++ b/tools/bpf/Makefile
|
|
@@ -34,7 +34,7 @@ else
|
|
endif
|
|
|
|
FEATURE_USER = .bpf
|
|
-FEATURE_TESTS = libbfd disassembler-four-args
|
|
+FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
|
|
FEATURE_DISPLAY = libbfd disassembler-four-args
|
|
|
|
check_feat := 1
|
|
@@ -56,6 +56,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
|
|
|
|
$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
|
|
$(QUIET_BISON)$(YACC) -o $@ -d $<
|
|
--- a/tools/bpf/bpf_jit_disasm.c
|
|
+++ b/tools/bpf/bpf_jit_disasm.c
|
|
@@ -28,6 +28,7 @@
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <limits.h>
|
|
+#include <tools/dis-asm-compat.h>
|
|
|
|
#define CMD_ACTION_SIZE_BUFFER 10
|
|
#define CMD_ACTION_READ_ALL 3
|
|
@@ -64,7 +65,9 @@ static void get_asm_insns(uint8_t *image
|
|
assert(bfdf);
|
|
assert(bfd_check_format(bfdf, bfd_object));
|
|
|
|
- init_disassemble_info(&info, stdout, (fprintf_ftype) fprintf);
|
|
+ init_disassemble_info_compat(&info, stdout,
|
|
+ (fprintf_ftype) fprintf,
|
|
+ fprintf_styled);
|
|
info.arch = bfd_get_arch(bfdf);
|
|
info.mach = bfd_get_mach(bfdf);
|
|
info.buffer = image;
|