mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-18 11:40:45 +00:00
Merge pull request #186318 from trofi/latest-perf-for-binutils-2.39
linuxPackages_latest.perf: apply upstream patch for binutils-2.39
This commit is contained in:
commit
7c69856537
352
pkgs/os-specific/linux/kernel/5.19-binutils-2.39-support.patch
Normal file
352
pkgs/os-specific/linux/kernel/5.19-binutils-2.39-support.patch
Normal file
|
@ -0,0 +1,352 @@
|
|||
Fetched as:
|
||||
$ wget 'https://github.com/torvalds/linux/compare/00b32625982e0c796f0abb8effcac9c05ef55bd3...600b7b26c07a070d0153daa76b3806c1e52c9e00.patch'
|
||||
|
||||
Adds support for binutils-2.39 API change around init_disassemble_info().
|
||||
--- 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
|
||||
--- 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)
|
||||
|
||||
--- 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
|
||||
--- /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;
|
||||
+}
|
||||
|
||||
--- a/tools/build/Makefile.feature
|
||||
+++ b/tools/build/Makefile.feature
|
||||
@@ -135,8 +135,7 @@ FEATURE_DISPLAY ?= \
|
||||
get_cpuid \
|
||||
bpf \
|
||||
libaio \
|
||||
- libzstd \
|
||||
- disassembler-four-args
|
||||
+ libzstd
|
||||
|
||||
# Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
|
||||
# If in the future we need per-feature checks/flags for features not
|
||||
|
||||
--- /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 */
|
||||
|
||||
--- a/tools/perf/Makefile.config
|
||||
+++ b/tools/perf/Makefile.config
|
||||
@@ -298,6 +298,7 @@ FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
|
||||
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
|
||||
@@ -924,13 +925,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)
|
||||
@@ -1044,6 +1048,10 @@ ifeq ($(feature-disassembler-four-args), 1)
|
||||
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
|
||||
@@ -1720,6 +1720,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
|
||||
#include <bpf/btf.h>
|
||||
#include <bpf/libbpf.h>
|
||||
#include <linux/btf.h>
|
||||
+#include <tools/dis-asm-compat.h>
|
||||
|
||||
static int symbol__disassemble_bpf(struct symbol *sym,
|
||||
struct annotate_args *args)
|
||||
@@ -1762,9 +1763,9 @@ static int symbol__disassemble_bpf(struct symbol *sym,
|
||||
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);
|
||||
|
||||
|
||||
--- 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, 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;
|
||||
|
||||
--- a/tools/bpf/Makefile
|
||||
+++ b/tools/bpf/Makefile
|
||||
@@ -35,7 +35,7 @@ endif
|
||||
|
||||
FEATURE_USER = .bpf
|
||||
FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
|
||||
-FEATURE_DISPLAY = libbfd disassembler-four-args
|
||||
+FEATURE_DISPLAY = libbfd
|
||||
|
||||
check_feat := 1
|
||||
NON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean resolve_btfids_clean
|
||||
|
||||
--- a/tools/bpf/bpftool/Makefile
|
||||
+++ b/tools/bpf/bpftool/Makefile
|
||||
@@ -93,7 +93,7 @@ INSTALL ?= install
|
||||
RM ?= rm -f
|
||||
|
||||
FEATURE_USER = .bpftool
|
||||
-FEATURE_TESTS = libbfd disassembler-four-args zlib libcap \
|
||||
+FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled zlib libcap \
|
||||
clang-bpf-co-re
|
||||
FEATURE_DISPLAY = libbfd disassembler-four-args zlib libcap \
|
||||
clang-bpf-co-re
|
||||
@@ -117,6 +117,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
|
||||
|
||||
LIBS = $(LIBBPF) -lelf -lz
|
||||
LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz
|
||||
--- 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, size_t size)
|
||||
}
|
||||
|
||||
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 char *fmt, ...)
|
||||
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 *image, ssize_t len, int opcodes,
|
||||
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) {
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, stdenv, kernel, elfutils, python2, python3, perl, newt, slang, asciidoc, xmlto, makeWrapper
|
||||
{ lib, stdenv, fetchpatch, kernel, elfutils, python2, python3, perl, newt, slang, asciidoc, xmlto, makeWrapper
|
||||
, docbook_xsl, docbook_xml_dtd_45, libxslt, flex, bison, pkg-config, libunwind, binutils-unwrapped
|
||||
, libiberty, audit, libbfd, libopcodes, openssl, systemtap, numactl
|
||||
, zlib
|
||||
|
@ -15,6 +15,13 @@ stdenv.mkDerivation {
|
|||
|
||||
inherit (kernel) src;
|
||||
|
||||
patches = optionals (versionAtLeast kernel.version "5.19" && versionOlder kernel.version "5.20") [
|
||||
# binutils-2.39 support around init_disassemble_info()
|
||||
# API change.
|
||||
# Will be included in 5.20.
|
||||
./5.19-binutils-2.39-support.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
cd tools/perf
|
||||
|
||||
|
|
Loading…
Reference in a new issue