diff options
Diffstat (limited to 'debian/patches/bugfix/all/tools-include-add-dis-asm-compat.h-to-handle-version-differences.patch')
-rw-r--r-- | debian/patches/bugfix/all/tools-include-add-dis-asm-compat.h-to-handle-version-differences.patch | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/debian/patches/bugfix/all/tools-include-add-dis-asm-compat.h-to-handle-version-differences.patch b/debian/patches/bugfix/all/tools-include-add-dis-asm-compat.h-to-handle-version-differences.patch new file mode 100644 index 000000000..026e69dc4 --- /dev/null +++ b/debian/patches/bugfix/all/tools-include-add-dis-asm-compat.h-to-handle-version-differences.patch @@ -0,0 +1,87 @@ +From: Andres Freund <andres@anarazel.de> +Subject: [2/5] tools include: add dis-asm-compat.h to handle version differences +Date: Sun, 3 Jul 2022 14:25:48 -0700 +Origin: https://lore.kernel.org/lkml/20220703212551.1114923-3-andres@anarazel.de/ + +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. + +Cc: Alexei Starovoitov <ast@kernel.org> +Cc: Arnaldo Carvalho de Melo <acme@redhat.com> +Cc: Sedat Dilek <sedat.dilek@gmail.com> +Cc: Quentin Monnet <quentin@isovalent.com> +Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de +Signed-off-by: Andres Freund <andres@anarazel.de> +--- + tools/include/tools/dis-asm-compat.h | 53 ++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + create mode 100644 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 000000000000..d1d003ee3e2f +--- /dev/null ++++ b/tools/include/tools/dis-asm-compat.h +@@ -0,0 +1,53 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _TOOLS_DIS_ASM_COMPAT_H ++#define _TOOLS_DIS_ASM_COMPAT_H ++ ++#include <stdio.h> ++#include <linux/compiler.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 __maybe_unused, ++ const char *fmt, ...) ++{ ++ va_list args; ++ int r; ++ ++ 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 __maybe_unused) ++{ ++#ifdef DISASM_INIT_STYLED ++ init_disassemble_info(info, stream, ++ unstyled_func, ++ styled_func); ++#else ++ init_disassemble_info(info, stream, ++ unstyled_func); ++#endif ++} ++ ++#endif /* _TOOLS_DIS_ASM_COMPAT_H */ |