diff options
Diffstat (limited to 'debian/patches/bugfix/all/tools-perf-fix-compilation-error-with-new-binutils.patch')
-rw-r--r-- | debian/patches/bugfix/all/tools-perf-fix-compilation-error-with-new-binutils.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/debian/patches/bugfix/all/tools-perf-fix-compilation-error-with-new-binutils.patch b/debian/patches/bugfix/all/tools-perf-fix-compilation-error-with-new-binutils.patch new file mode 100644 index 000000000..e24915fe0 --- /dev/null +++ b/debian/patches/bugfix/all/tools-perf-fix-compilation-error-with-new-binutils.patch @@ -0,0 +1,101 @@ +From: Andres Freund <andres@anarazel.de> +Subject: [3/5] tools perf: Fix compilation error with new binutils +Date: Sun, 3 Jul 2022 14:25:49 -0700 +Origin: https://lore.kernel.org/lkml/20220703212551.1114923-4-andres@anarazel.de/ + +binutils changed the signature of init_disassemble_info(), which now causes +compilation failures for tools/perf/util/annotate.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 perf can still disassemble bpf programs by using bpftrace +under load, recording a perf trace, and then annotating the bpf "function" +with and without the changes. 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: + + 1.15 : 55:mov %rbp,%rdx + 0.00 : 58:add $0xfffffffffffffff8,%rdx + 0.00 : 5c:xor %ecx,%ecx +- 1.03 : 5e:callq 0xffffffffe12aca3c ++ 1.03 : 5e:call 0xffffffffe12aca3c + 0.00 : 63:xor %eax,%eax +- 2.18 : 65:leaveq +- 2.82 : 66:retq ++ 2.18 : 65:leave ++ 2.82 : 66:ret + +Cc: Arnaldo Carvalho de Melo <acme@redhat.com> +Cc: Sedat Dilek <sedat.dilek@gmail.com> +Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de +Signed-off-by: Andres Freund <andres@anarazel.de> +--- + tools/perf/Makefile.config | 8 ++++++++ + tools/perf/util/annotate.c | 7 ++++--- + 2 files changed, 12 insertions(+), 3 deletions(-) + +--- a/tools/perf/Makefile.config ++++ b/tools/perf/Makefile.config +@@ -298,6 +298,7 @@ FEATURE_CHECK_LDFLAGS-libpython := $(PYT + FEATURE_CHECK_LDFLAGS-libaio = -lrt + + FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl ++FEATURE_CHECK_LDFLAGS-disassembler-init-styled = -lbfd -lopcodes -ldl + + CORE_CFLAGS += -fno-omit-frame-pointer + CORE_CFLAGS += -ggdb3 +@@ -877,13 +878,16 @@ ifndef NO_LIBBFD + ifeq ($(feature-libbfd-liberty), 1) + EXTLIBS += -lbfd -lopcodes -liberty + FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl ++ FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl + else + ifeq ($(feature-libbfd-liberty-z), 1) + EXTLIBS += -lbfd -lopcodes -liberty -lz + FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl ++ FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -lz -ldl + endif + endif + $(call feature_check,disassembler-four-args) ++ $(call feature_check,disassembler-init-styled) + endif + + ifeq ($(feature-libbfd-buildid), 1) +@@ -997,6 +1001,10 @@ ifeq ($(feature-disassembler-four-args), + CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE + endif + ++ifeq ($(feature-disassembler-init-styled), 1) ++ CFLAGS += -DDISASM_INIT_STYLED ++endif ++ + ifeq (${IS_64_BIT}, 1) + ifndef NO_PERF_READ_VDSO32 + $(call feature_check,compile-32) +--- a/tools/perf/util/annotate.c ++++ b/tools/perf/util/annotate.c +@@ -41,6 +41,7 @@ + #include <linux/string.h> + #include <subcmd/parse-options.h> + #include <subcmd/run-command.h> ++#include <tools/dis-asm-compat.h> + + /* FIXME: For the HE_COLORSET */ + #include "ui/browser.h" +@@ -1762,9 +1763,9 @@ static int symbol__disassemble_bpf(struc + ret = errno; + goto out; + } +- init_disassemble_info(&info, s, +- (fprintf_ftype) fprintf); +- ++ init_disassemble_info_compat(&info, s, ++ (fprintf_ftype) fprintf, ++ fprintf_styled); + info.arch = bfd_get_arch(bfdf); + info.mach = bfd_get_mach(bfdf); + |