Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
linux-tools: fix build for binutils 2.39
- Loading branch information
1 parent
98920dc
commit 4a20ec1
Showing
5 changed files
with
572 additions
and
0 deletions.
There are no files selected for viewing
103 changes: 103 additions & 0 deletions
103
srcpkgs/linux-tools/patches/binutils-add-compat-check.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
From cfd59ca91467056bb2c36907b2fa67b8e1af9952 Mon Sep 17 00:00:00 2001 | ||
From: Andres Freund <andres@anarazel.de> | ||
Date: Sun, 31 Jul 2022 18:38:27 -0700 | ||
Subject: [PATCH] tools build: Add feature test for init_disassemble_info API | ||
changes | ||
|
||
binutils changed the signature of init_disassemble_info(), which now causes | ||
compilation failures for tools/{perf,bpf}, e.g. on debian unstable. | ||
|
||
Relevant binutils commit: | ||
|
||
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07 | ||
|
||
This commit adds a feature test to detect the new signature. Subsequent | ||
commits will use it to fix the build failures. | ||
|
||
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-2-andres@anarazel.de | ||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> | ||
--- | ||
tools/build/Makefile.feature | 1 + | ||
tools/build/feature/Makefile | 4 ++++ | ||
tools/build/feature/test-all.c | 4 ++++ | ||
tools/build/feature/test-disassembler-init-styled.c | 13 +++++++++++++ | ||
4 files changed, 22 insertions(+) | ||
create mode 100644 tools/build/feature/test-disassembler-init-styled.c | ||
|
||
diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature | ||
index 888a0421d43b96..8f6578e4d3249e 100644 | ||
--- a/tools/build/Makefile.feature | ||
+++ b/tools/build/Makefile.feature | ||
@@ -70,6 +70,7 @@ FEATURE_TESTS_BASIC := \ | ||
libaio \ | ||
libzstd \ | ||
disassembler-four-args \ | ||
+ disassembler-init-styled \ | ||
file-handle | ||
|
||
# FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list | ||
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile | ||
index 7c2a17e23c30ac..c3059739318a95 100644 | ||
--- a/tools/build/feature/Makefile | ||
+++ b/tools/build/feature/Makefile | ||
@@ -18,6 +18,7 @@ FILES= \ | ||
test-libbfd.bin \ | ||
test-libbfd-buildid.bin \ | ||
test-disassembler-four-args.bin \ | ||
+ test-disassembler-init-styled.bin \ | ||
test-reallocarray.bin \ | ||
test-libbfd-liberty.bin \ | ||
test-libbfd-liberty-z.bin \ | ||
@@ -248,6 +249,9 @@ $(OUTPUT)test-libbfd-buildid.bin: | ||
$(OUTPUT)test-disassembler-four-args.bin: | ||
$(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes | ||
|
||
+$(OUTPUT)test-disassembler-init-styled.bin: | ||
+ $(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes | ||
+ | ||
$(OUTPUT)test-reallocarray.bin: | ||
$(BUILD) | ||
|
||
diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c | ||
index 5ffafb967b6e49..957c02c7b163b5 100644 | ||
--- a/tools/build/feature/test-all.c | ||
+++ b/tools/build/feature/test-all.c | ||
@@ -166,6 +166,10 @@ | ||
# include "test-disassembler-four-args.c" | ||
#undef main | ||
|
||
+#define main main_test_disassembler_init_styled | ||
+# include "test-disassembler-init-styled.c" | ||
+#undef main | ||
+ | ||
#define main main_test_libzstd | ||
# include "test-libzstd.c" | ||
#undef main | ||
diff --git a/tools/build/feature/test-disassembler-init-styled.c b/tools/build/feature/test-disassembler-init-styled.c | ||
new file mode 100644 | ||
index 00000000000000..f1ce0ec3bee9d3 | ||
--- /dev/null | ||
+++ b/tools/build/feature/test-disassembler-init-styled.c | ||
@@ -0,0 +1,13 @@ | ||
+// SPDX-License-Identifier: GPL-2.0 | ||
+#include <stdio.h> | ||
+#include <dis-asm.h> | ||
+ | ||
+int main(void) | ||
+{ | ||
+ struct disassemble_info info; | ||
+ | ||
+ init_disassemble_info(&info, stdout, | ||
+ NULL, NULL); | ||
+ | ||
+ return 0; | ||
+} |
102 changes: 102 additions & 0 deletions
102
srcpkgs/linux-tools/patches/binutils-disasm-compat.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
From a45b3d6926231c3d024ea0de4f7bd967f83709ee Mon Sep 17 00:00:00 2001 | ||
From: Andres Freund <andres@anarazel.de> | ||
Date: Sun, 31 Jul 2022 18:38:29 -0700 | ||
Subject: tools include: add dis-asm-compat.h to handle version differences | ||
|
||
binutils changed the signature of init_disassemble_info(), which now causes | ||
compilation failures for tools/{perf,bpf}, e.g. on debian unstable. | ||
|
||
Relevant binutils commit: | ||
|
||
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07 | ||
|
||
This commit introduces a wrapper for init_disassemble_info(), to avoid | ||
spreading #ifdef DISASM_INIT_STYLED to a bunch of places. Subsequent | ||
commits will use it to fix the build failures. | ||
|
||
It likely is worth adding a wrapper for disassember(), to avoid the already | ||
existing DISASM_FOUR_ARGS_SIGNATURE ifdefery. | ||
|
||
Signed-off-by: Andres Freund <andres@anarazel.de> | ||
Signed-off-by: Ben Hutchings <benh@debian.org> | ||
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-4-andres@anarazel.de | ||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> | ||
--- | ||
tools/include/tools/dis-asm-compat.h | 55 ++++++++++++++++++++++++++++++++++++ | ||
1 file changed, 55 insertions(+) | ||
create mode 100644 tools/include/tools/dis-asm-compat.h | ||
|
||
(limited to 'tools/include/tools/dis-asm-compat.h') | ||
|
||
diff --git a/tools/include/tools/dis-asm-compat.h b/tools/include/tools/dis-asm-compat.h | ||
new file mode 100644 | ||
index 0000000000000..70f331e23ed3d | ||
--- /dev/null | ||
+++ b/tools/include/tools/dis-asm-compat.h | ||
@@ -0,0 +1,55 @@ | ||
+/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */ | ||
+#ifndef _TOOLS_DIS_ASM_COMPAT_H | ||
+#define _TOOLS_DIS_ASM_COMPAT_H | ||
+ | ||
+#include <stdio.h> | ||
+#include <dis-asm.h> | ||
+ | ||
+/* define types for older binutils version, to centralize ifdef'ery a bit */ | ||
+#ifndef DISASM_INIT_STYLED | ||
+enum disassembler_style {DISASSEMBLER_STYLE_NOT_EMPTY}; | ||
+typedef int (*fprintf_styled_ftype) (void *, enum disassembler_style, const char*, ...); | ||
+#endif | ||
+ | ||
+/* | ||
+ * Trivial fprintf wrapper to be used as the fprintf_styled_func argument to | ||
+ * init_disassemble_info_compat() when normal fprintf suffices. | ||
+ */ | ||
+static inline int fprintf_styled(void *out, | ||
+ enum disassembler_style style, | ||
+ const char *fmt, ...) | ||
+{ | ||
+ va_list args; | ||
+ int r; | ||
+ | ||
+ (void)style; | ||
+ | ||
+ va_start(args, fmt); | ||
+ r = vfprintf(out, fmt, args); | ||
+ va_end(args); | ||
+ | ||
+ return r; | ||
+} | ||
+ | ||
+/* | ||
+ * Wrapper for init_disassemble_info() that hides version | ||
+ * differences. Depending on binutils version and architecture either | ||
+ * fprintf_func or fprintf_styled_func will be called. | ||
+ */ | ||
+static inline void init_disassemble_info_compat(struct disassemble_info *info, | ||
+ void *stream, | ||
+ fprintf_ftype unstyled_func, | ||
+ fprintf_styled_ftype styled_func) | ||
+{ | ||
+#ifdef DISASM_INIT_STYLED | ||
+ init_disassemble_info(info, stream, | ||
+ unstyled_func, | ||
+ styled_func); | ||
+#else | ||
+ (void)styled_func; | ||
+ init_disassemble_info(info, stream, | ||
+ unstyled_func); | ||
+#endif | ||
+} | ||
+ | ||
+#endif /* _TOOLS_DIS_ASM_COMPAT_H */ | ||
-- | ||
cgit | ||
|
104 changes: 104 additions & 0 deletions
104
srcpkgs/linux-tools/patches/bpf_jit_disasm-binutils-2.39.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
From 96ed066054abf11c7d3e106e3011a51f3f1227a3 Mon Sep 17 00:00:00 2001 | ||
From: Andres Freund <andres@anarazel.de> | ||
Date: Sun, 31 Jul 2022 18:38:31 -0700 | ||
Subject: [PATCH] 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> | ||
--- | ||
tools/bpf/Makefile | 5 ++++- | ||
tools/bpf/bpf_jit_disasm.c | 5 ++++- | ||
2 files changed, 8 insertions(+), 2 deletions(-) | ||
|
||
diff --git a/tools/bpf/Makefile b/tools/bpf/Makefile | ||
index b11cfc86a3d021..664601ab1705ab 100644 | ||
--- 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 $< | ||
diff --git a/tools/bpf/bpf_jit_disasm.c b/tools/bpf/bpf_jit_disasm.c | ||
index c8ae9580472814..a90a5d110f9255 100644 | ||
--- 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, size_t len, int opcodes) | ||
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; |
Oops, something went wrong.