public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Guilherme Amadio" <amadio@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-util/perf/files/
Date: Tue, 19 Nov 2024 10:49:59 +0000 (UTC)	[thread overview]
Message-ID: <1732013305.6a78e0d02acdaa1f5583b3b9d36d87decdd5b784.amadio@gentoo> (raw)

commit:     6a78e0d02acdaa1f5583b3b9d36d87decdd5b784
Author:     Guilherme Amadio <amadio <AT> gentoo <DOT> org>
AuthorDate: Tue Nov 19 10:48:25 2024 +0000
Commit:     Guilherme Amadio <amadio <AT> gentoo <DOT> org>
CommitDate: Tue Nov 19 10:48:25 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6a78e0d0

dev-util/perf/files: drop unused patches

Signed-off-by: Guilherme Amadio <amadio <AT> gentoo.org>

 dev-util/perf/files/perf-6.10-bpf-capstone.patch   | 456 --------------------
 dev-util/perf/files/perf-6.10-expr.patch           |  22 -
 dev-util/perf/files/perf-6.10.3-bpf-capstone.patch | 455 --------------------
 dev-util/perf/files/perf-6.11-bpf-capstone.patch   | 469 ---------------------
 4 files changed, 1402 deletions(-)

diff --git a/dev-util/perf/files/perf-6.10-bpf-capstone.patch b/dev-util/perf/files/perf-6.10-bpf-capstone.patch
deleted file mode 100644
index ebae9a3ad080..000000000000
--- a/dev-util/perf/files/perf-6.10-bpf-capstone.patch
+++ /dev/null
@@ -1,456 +0,0 @@
-From a7728af2f25fe99ee72d211bb4ddec17a8601f5f Mon Sep 17 00:00:00 2001
-From: Guilherme Amadio <amadio@gentoo.org>
-Date: Tue, 6 Aug 2024 11:34:05 +0200
-Subject: [PATCH]  Fix bug #936439. Replay of upstream commit onto v6.10.
-
-Signed-off-by: Guilherme Amadio <amadio@gentoo.org>
----
- tools/perf/util/Build        |   1 +
- tools/perf/util/disasm.c     | 187 +--------------------------------
- tools/perf/util/disasm_bpf.c | 197 +++++++++++++++++++++++++++++++++++
- tools/perf/util/disasm_bpf.h |  12 +++
- 4 files changed, 211 insertions(+), 186 deletions(-)
- create mode 100644 tools/perf/util/disasm_bpf.c
- create mode 100644 tools/perf/util/disasm_bpf.h
-
-diff --git a/tools/perf/util/Build b/tools/perf/util/Build
-index da64efd8718f..384c4e06b838 100644
---- a/tools/perf/util/Build
-+++ b/tools/perf/util/Build
-@@ -13,6 +13,7 @@ perf-y += copyfile.o
- perf-y += ctype.o
- perf-y += db-export.o
- perf-y += disasm.o
-+perf-y += disasm_bpf.o
- perf-y += env.o
- perf-y += event.o
- perf-y += evlist.o
-diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c
-index 72aec8f61b94..766cbd005f32 100644
---- a/tools/perf/util/disasm.c
-+++ b/tools/perf/util/disasm.c
-@@ -15,6 +15,7 @@
- #include "build-id.h"
- #include "debug.h"
- #include "disasm.h"
-+#include "disasm_bpf.h"
- #include "dso.h"
- #include "env.h"
- #include "evsel.h"
-@@ -1164,192 +1165,6 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
- 	return 0;
- }
- 
--#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--#define PACKAGE "perf"
--#include <bfd.h>
--#include <dis-asm.h>
--#include <bpf/bpf.h>
--#include <bpf/btf.h>
--#include <bpf/libbpf.h>
--#include <linux/btf.h>
--#include <tools/dis-asm-compat.h>
--
--#include "bpf-event.h"
--#include "bpf-utils.h"
--
--static int symbol__disassemble_bpf(struct symbol *sym,
--				   struct annotate_args *args)
--{
--	struct annotation *notes = symbol__annotation(sym);
--	struct bpf_prog_linfo *prog_linfo = NULL;
--	struct bpf_prog_info_node *info_node;
--	int len = sym->end - sym->start;
--	disassembler_ftype disassemble;
--	struct map *map = args->ms.map;
--	struct perf_bpil *info_linear;
--	struct disassemble_info info;
--	struct dso *dso = map__dso(map);
--	int pc = 0, count, sub_id;
--	struct btf *btf = NULL;
--	char tpath[PATH_MAX];
--	size_t buf_size;
--	int nr_skip = 0;
--	char *buf;
--	bfd *bfdf;
--	int ret;
--	FILE *s;
--
--	if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO)
--		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
--
--	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
--		  sym->name, sym->start, sym->end - sym->start);
--
--	memset(tpath, 0, sizeof(tpath));
--	perf_exe(tpath, sizeof(tpath));
--
--	bfdf = bfd_openr(tpath, NULL);
--	if (bfdf == NULL)
--		abort();
--
--	if (!bfd_check_format(bfdf, bfd_object))
--		abort();
--
--	s = open_memstream(&buf, &buf_size);
--	if (!s) {
--		ret = errno;
--		goto out;
--	}
--	init_disassemble_info_compat(&info, s,
--				     (fprintf_ftype) fprintf,
--				     fprintf_styled);
--	info.arch = bfd_get_arch(bfdf);
--	info.mach = bfd_get_mach(bfdf);
--
--	info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env,
--						 dso->bpf_prog.id);
--	if (!info_node) {
--		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
--		goto out;
--	}
--	info_linear = info_node->info_linear;
--	sub_id = dso->bpf_prog.sub_id;
--
--	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
--	info.buffer_length = info_linear->info.jited_prog_len;
--
--	if (info_linear->info.nr_line_info)
--		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
--
--	if (info_linear->info.btf_id) {
--		struct btf_node *node;
--
--		node = perf_env__find_btf(dso->bpf_prog.env,
--					  info_linear->info.btf_id);
--		if (node)
--			btf = btf__new((__u8 *)(node->data),
--				       node->data_size);
--	}
--
--	disassemble_init_for_target(&info);
--
--#ifdef DISASM_FOUR_ARGS_SIGNATURE
--	disassemble = disassembler(info.arch,
--				   bfd_big_endian(bfdf),
--				   info.mach,
--				   bfdf);
--#else
--	disassemble = disassembler(bfdf);
--#endif
--	if (disassemble == NULL)
--		abort();
--
--	fflush(s);
--	do {
--		const struct bpf_line_info *linfo = NULL;
--		struct disasm_line *dl;
--		size_t prev_buf_size;
--		const char *srcline;
--		u64 addr;
--
--		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
--		count = disassemble(pc, &info);
--
--		if (prog_linfo)
--			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
--								addr, sub_id,
--								nr_skip);
--
--		if (linfo && btf) {
--			srcline = btf__name_by_offset(btf, linfo->line_off);
--			nr_skip++;
--		} else
--			srcline = NULL;
--
--		fprintf(s, "\n");
--		prev_buf_size = buf_size;
--		fflush(s);
--
--		if (!annotate_opts.hide_src_code && srcline) {
--			args->offset = -1;
--			args->line = strdup(srcline);
--			args->line_nr = 0;
--			args->fileloc = NULL;
--			args->ms.sym  = sym;
--			dl = disasm_line__new(args);
--			if (dl) {
--				annotation_line__add(&dl->al,
--						     &notes->src->source);
--			}
--		}
--
--		args->offset = pc;
--		args->line = buf + prev_buf_size;
--		args->line_nr = 0;
--		args->fileloc = NULL;
--		args->ms.sym  = sym;
--		dl = disasm_line__new(args);
--		if (dl)
--			annotation_line__add(&dl->al, &notes->src->source);
--
--		pc += count;
--	} while (count > 0 && pc < len);
--
--	ret = 0;
--out:
--	free(prog_linfo);
--	btf__free(btf);
--	fclose(s);
--	bfd_close(bfdf);
--	return ret;
--}
--#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--static int symbol__disassemble_bpf(struct symbol *sym __maybe_unused,
--				   struct annotate_args *args __maybe_unused)
--{
--	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
--}
--#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--
--static int
--symbol__disassemble_bpf_image(struct symbol *sym,
--			      struct annotate_args *args)
--{
--	struct annotation *notes = symbol__annotation(sym);
--	struct disasm_line *dl;
--
--	args->offset = -1;
--	args->line = strdup("to be implemented");
--	args->line_nr = 0;
--	args->fileloc = NULL;
--	dl = disasm_line__new(args);
--	if (dl)
--		annotation_line__add(&dl->al, &notes->src->source);
--
--	zfree(&args->line);
--	return 0;
--}
--
- #ifdef HAVE_LIBCAPSTONE_SUPPORT
- #include <capstone/capstone.h>
- 
-diff --git a/tools/perf/util/disasm_bpf.c b/tools/perf/util/disasm_bpf.c
-new file mode 100644
-index 000000000000..010b961c4ae9
---- /dev/null
-+++ b/tools/perf/util/disasm_bpf.c
-@@ -0,0 +1,197 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+
-+#include "util/annotate.h"
-+#include "util/disasm_bpf.h"
-+#include "util/symbol.h"
-+#include <linux/zalloc.h>
-+#include <string.h>
-+
-+#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+#define PACKAGE "perf"
-+#include <bfd.h>
-+#include <bpf/bpf.h>
-+#include <bpf/btf.h>
-+#include <bpf/libbpf.h>
-+#include <dis-asm.h>
-+#include <errno.h>
-+#include <linux/btf.h>
-+#include <tools/dis-asm-compat.h>
-+
-+#include "util/bpf-event.h"
-+#include "util/bpf-utils.h"
-+#include "util/debug.h"
-+#include "util/dso.h"
-+#include "util/map.h"
-+#include "util/env.h"
-+#include "util/util.h"
-+
-+int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args)
-+{
-+	struct annotation *notes = symbol__annotation(sym);
-+	struct bpf_prog_linfo *prog_linfo = NULL;
-+	struct bpf_prog_info_node *info_node;
-+	int len = sym->end - sym->start;
-+	disassembler_ftype disassemble;
-+	struct map *map = args->ms.map;
-+	struct perf_bpil *info_linear;
-+	struct disassemble_info info;
-+	struct dso *dso = map__dso(map);
-+	int pc = 0, count, sub_id;
-+	struct btf *btf = NULL;
-+	char tpath[PATH_MAX];
-+	size_t buf_size;
-+	int nr_skip = 0;
-+	char *buf;
-+	bfd *bfdf;
-+	int ret;
-+	FILE *s;
-+
-+	if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO)
-+		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
-+
-+	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
-+		  sym->name, sym->start, sym->end - sym->start);
-+
-+	memset(tpath, 0, sizeof(tpath));
-+	perf_exe(tpath, sizeof(tpath));
-+
-+	bfdf = bfd_openr(tpath, NULL);
-+	if (bfdf == NULL)
-+		abort();
-+
-+	if (!bfd_check_format(bfdf, bfd_object))
-+		abort();
-+
-+	s = open_memstream(&buf, &buf_size);
-+	if (!s) {
-+		ret = errno;
-+		goto out;
-+	}
-+	init_disassemble_info_compat(&info, s,
-+				     (fprintf_ftype) fprintf,
-+				     fprintf_styled);
-+	info.arch = bfd_get_arch(bfdf);
-+	info.mach = bfd_get_mach(bfdf);
-+
-+	info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env,
-+						 dso->bpf_prog.id);
-+	if (!info_node) {
-+		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
-+		goto out;
-+	}
-+	info_linear = info_node->info_linear;
-+	sub_id = dso->bpf_prog.sub_id;
-+
-+	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
-+	info.buffer_length = info_linear->info.jited_prog_len;
-+
-+	if (info_linear->info.nr_line_info)
-+		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
-+
-+	if (info_linear->info.btf_id) {
-+		struct btf_node *node;
-+
-+		node = perf_env__find_btf(dso->bpf_prog.env,
-+					  info_linear->info.btf_id);
-+		if (node)
-+			btf = btf__new((__u8 *)(node->data),
-+				       node->data_size);
-+	}
-+
-+	disassemble_init_for_target(&info);
-+
-+#ifdef DISASM_FOUR_ARGS_SIGNATURE
-+	disassemble = disassembler(info.arch,
-+				   bfd_big_endian(bfdf),
-+				   info.mach,
-+				   bfdf);
-+#else
-+	disassemble = disassembler(bfdf);
-+#endif
-+	if (disassemble == NULL)
-+		abort();
-+
-+	fflush(s);
-+	do {
-+		const struct bpf_line_info *linfo = NULL;
-+		struct disasm_line *dl;
-+		size_t prev_buf_size;
-+		const char *srcline;
-+		u64 addr;
-+
-+		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
-+		count = disassemble(pc, &info);
-+
-+		if (prog_linfo)
-+			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
-+								addr, sub_id,
-+								nr_skip);
-+
-+		if (linfo && btf) {
-+			srcline = btf__name_by_offset(btf, linfo->line_off);
-+			nr_skip++;
-+		} else
-+			srcline = NULL;
-+
-+		fprintf(s, "\n");
-+		prev_buf_size = buf_size;
-+		fflush(s);
-+
-+		if (!annotate_opts.hide_src_code && srcline) {
-+			args->offset = -1;
-+			args->line = strdup(srcline);
-+			args->line_nr = 0;
-+			args->fileloc = NULL;
-+			args->ms.sym  = sym;
-+			dl = disasm_line__new(args);
-+			if (dl) {
-+				annotation_line__add(&dl->al,
-+						     &notes->src->source);
-+			}
-+		}
-+
-+		args->offset = pc;
-+		args->line = buf + prev_buf_size;
-+		args->line_nr = 0;
-+		args->fileloc = NULL;
-+		args->ms.sym  = sym;
-+		dl = disasm_line__new(args);
-+		if (dl)
-+			annotation_line__add(&dl->al, &notes->src->source);
-+
-+		pc += count;
-+	} while (count > 0 && pc < len);
-+
-+	ret = 0;
-+out:
-+	free(prog_linfo);
-+	btf__free(btf);
-+	fclose(s);
-+	bfd_close(bfdf);
-+	return ret;
-+}
-+#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+int symbol__disassemble_bpf(struct symbol *sym __maybe_unused,
-+				   struct annotate_args *args __maybe_unused)
-+{
-+	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
-+}
-+#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+
-+int symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args)
-+{
-+	struct annotation *notes = symbol__annotation(sym);
-+	struct disasm_line *dl;
-+
-+	args->offset = -1;
-+	args->line = strdup("to be implemented");
-+	args->line_nr = 0;
-+	args->fileloc = NULL;
-+	dl = disasm_line__new(args);
-+	if (dl)
-+		annotation_line__add(&dl->al, &notes->src->source);
-+
-+	zfree(&args->line);
-+	return 0;
-+}
-+
-diff --git a/tools/perf/util/disasm_bpf.h b/tools/perf/util/disasm_bpf.h
-new file mode 100644
-index 000000000000..2ecb19545388
---- /dev/null
-+++ b/tools/perf/util/disasm_bpf.h
-@@ -0,0 +1,12 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+
-+#ifndef __PERF_DISASM_BPF_H
-+#define __PERF_DISASM_BPF_H
-+
-+struct symbol;
-+struct annotate_args;
-+
-+int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args);
-+int symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args);
-+
-+#endif /* __PERF_DISASM_BPF_H */
--- 
-2.45.2
-

diff --git a/dev-util/perf/files/perf-6.10-expr.patch b/dev-util/perf/files/perf-6.10-expr.patch
deleted file mode 100644
index b4220a062f61..000000000000
--- a/dev-util/perf/files/perf-6.10-expr.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
-index bc980fd..a7f1e1e 100644
---- a/tools/perf/Makefile.config
-+++ b/tools/perf/Makefile.config
-@@ -1184,7 +1184,7 @@ ifneq ($(NO_LIBTRACEEVENT),1)
-     CFLAGS += -DHAVE_LIBTRACEEVENT $(LIBTRACEEVENT_CFLAGS)
-     LDFLAGS += $(LIBTRACEEVENT_LDFLAGS)
-     EXTLIBS += ${TRACEEVENTLIBS}
--    LIBTRACEEVENT_VERSION := $(shell PKG_CONFIG_PATH=$(LIBTRACEEVENT_DIR) $(PKG_CONFIG) --modversion libtraceevent)
-+    LIBTRACEEVENT_VERSION := $(shell PKG_CONFIG_PATH=$(LIBTRACEEVENT_DIR) $(PKG_CONFIG) --modversion libtraceevent).0
-     LIBTRACEEVENT_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
-     LIBTRACEEVENT_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
-     LIBTRACEEVENT_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
-@@ -1198,7 +1198,7 @@ ifneq ($(NO_LIBTRACEEVENT),1)
-   $(call feature_check,libtracefs)
-   ifeq ($(feature-libtracefs), 1)
-     EXTLIBS += -ltracefs
--    LIBTRACEFS_VERSION := $(shell $(PKG_CONFIG) --modversion libtracefs)
-+    LIBTRACEFS_VERSION := $(shell $(PKG_CONFIG) --modversion libtracefs).0
-     LIBTRACEFS_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEFS_VERSION)))
-     LIBTRACEFS_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEFS_VERSION)))
-     LIBTRACEFS_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEFS_VERSION)))

diff --git a/dev-util/perf/files/perf-6.10.3-bpf-capstone.patch b/dev-util/perf/files/perf-6.10.3-bpf-capstone.patch
deleted file mode 100644
index 57b298d8ccd7..000000000000
--- a/dev-util/perf/files/perf-6.10.3-bpf-capstone.patch
+++ /dev/null
@@ -1,455 +0,0 @@
-From b382a433e0178d3840a8fb4b05ba3dbecba075fa Mon Sep 17 00:00:00 2001
-From: Guilherme Amadio <amadio@gentoo.org>
-Date: Tue, 6 Aug 2024 11:34:05 +0200
-Subject: [PATCH]  Fix bug #936439. Replay of upstream commit onto v6.10.3.
-
-Signed-off-by: Guilherme Amadio <amadio@gentoo.org>
----
- tools/perf/util/Build        |   1 +
- tools/perf/util/disasm.c     | 187 +--------------------------------
- tools/perf/util/disasm_bpf.c | 196 +++++++++++++++++++++++++++++++++++
- tools/perf/util/disasm_bpf.h |  12 +++
- 4 files changed, 210 insertions(+), 186 deletions(-)
- create mode 100644 tools/perf/util/disasm_bpf.c
- create mode 100644 tools/perf/util/disasm_bpf.h
-
-diff --git a/tools/perf/util/Build b/tools/perf/util/Build
-index da64efd8718f..384c4e06b838 100644
---- a/tools/perf/util/Build
-+++ b/tools/perf/util/Build
-@@ -13,6 +13,7 @@ perf-y += copyfile.o
- perf-y += ctype.o
- perf-y += db-export.o
- perf-y += disasm.o
-+perf-y += disasm_bpf.o
- perf-y += env.o
- perf-y += event.o
- perf-y += evlist.o
-diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c
-index e10558b79504..766cbd005f32 100644
---- a/tools/perf/util/disasm.c
-+++ b/tools/perf/util/disasm.c
-@@ -15,6 +15,7 @@
- #include "build-id.h"
- #include "debug.h"
- #include "disasm.h"
-+#include "disasm_bpf.h"
- #include "dso.h"
- #include "env.h"
- #include "evsel.h"
-@@ -1164,192 +1165,6 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
- 	return 0;
- }
- 
--#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--#define PACKAGE "perf"
--#include <bfd.h>
--#include <dis-asm.h>
--#include <bpf/bpf.h>
--#include <bpf/btf.h>
--#include <bpf/libbpf.h>
--#include <linux/btf.h>
--#include <tools/dis-asm-compat.h>
--
--#include "bpf-event.h"
--#include "bpf-utils.h"
--
--static int symbol__disassemble_bpf(struct symbol *sym,
--				   struct annotate_args *args)
--{
--	struct annotation *notes = symbol__annotation(sym);
--	struct bpf_prog_linfo *prog_linfo = NULL;
--	struct bpf_prog_info_node *info_node;
--	int len = sym->end - sym->start;
--	disassembler_ftype disassemble;
--	struct map *map = args->ms.map;
--	struct perf_bpil *info_linear;
--	struct disassemble_info info;
--	struct dso *dso = map__dso(map);
--	int pc = 0, count, sub_id;
--	struct btf *btf = NULL;
--	char tpath[PATH_MAX];
--	size_t buf_size;
--	int nr_skip = 0;
--	char *buf;
--	bfd *bfdf;
--	int ret;
--	FILE *s;
--
--	if (dso__binary_type(dso) != DSO_BINARY_TYPE__BPF_PROG_INFO)
--		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
--
--	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
--		  sym->name, sym->start, sym->end - sym->start);
--
--	memset(tpath, 0, sizeof(tpath));
--	perf_exe(tpath, sizeof(tpath));
--
--	bfdf = bfd_openr(tpath, NULL);
--	if (bfdf == NULL)
--		abort();
--
--	if (!bfd_check_format(bfdf, bfd_object))
--		abort();
--
--	s = open_memstream(&buf, &buf_size);
--	if (!s) {
--		ret = errno;
--		goto out;
--	}
--	init_disassemble_info_compat(&info, s,
--				     (fprintf_ftype) fprintf,
--				     fprintf_styled);
--	info.arch = bfd_get_arch(bfdf);
--	info.mach = bfd_get_mach(bfdf);
--
--	info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env,
--						 dso__bpf_prog(dso)->id);
--	if (!info_node) {
--		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
--		goto out;
--	}
--	info_linear = info_node->info_linear;
--	sub_id = dso__bpf_prog(dso)->sub_id;
--
--	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
--	info.buffer_length = info_linear->info.jited_prog_len;
--
--	if (info_linear->info.nr_line_info)
--		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
--
--	if (info_linear->info.btf_id) {
--		struct btf_node *node;
--
--		node = perf_env__find_btf(dso__bpf_prog(dso)->env,
--					  info_linear->info.btf_id);
--		if (node)
--			btf = btf__new((__u8 *)(node->data),
--				       node->data_size);
--	}
--
--	disassemble_init_for_target(&info);
--
--#ifdef DISASM_FOUR_ARGS_SIGNATURE
--	disassemble = disassembler(info.arch,
--				   bfd_big_endian(bfdf),
--				   info.mach,
--				   bfdf);
--#else
--	disassemble = disassembler(bfdf);
--#endif
--	if (disassemble == NULL)
--		abort();
--
--	fflush(s);
--	do {
--		const struct bpf_line_info *linfo = NULL;
--		struct disasm_line *dl;
--		size_t prev_buf_size;
--		const char *srcline;
--		u64 addr;
--
--		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
--		count = disassemble(pc, &info);
--
--		if (prog_linfo)
--			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
--								addr, sub_id,
--								nr_skip);
--
--		if (linfo && btf) {
--			srcline = btf__name_by_offset(btf, linfo->line_off);
--			nr_skip++;
--		} else
--			srcline = NULL;
--
--		fprintf(s, "\n");
--		prev_buf_size = buf_size;
--		fflush(s);
--
--		if (!annotate_opts.hide_src_code && srcline) {
--			args->offset = -1;
--			args->line = strdup(srcline);
--			args->line_nr = 0;
--			args->fileloc = NULL;
--			args->ms.sym  = sym;
--			dl = disasm_line__new(args);
--			if (dl) {
--				annotation_line__add(&dl->al,
--						     &notes->src->source);
--			}
--		}
--
--		args->offset = pc;
--		args->line = buf + prev_buf_size;
--		args->line_nr = 0;
--		args->fileloc = NULL;
--		args->ms.sym  = sym;
--		dl = disasm_line__new(args);
--		if (dl)
--			annotation_line__add(&dl->al, &notes->src->source);
--
--		pc += count;
--	} while (count > 0 && pc < len);
--
--	ret = 0;
--out:
--	free(prog_linfo);
--	btf__free(btf);
--	fclose(s);
--	bfd_close(bfdf);
--	return ret;
--}
--#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--static int symbol__disassemble_bpf(struct symbol *sym __maybe_unused,
--				   struct annotate_args *args __maybe_unused)
--{
--	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
--}
--#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--
--static int
--symbol__disassemble_bpf_image(struct symbol *sym,
--			      struct annotate_args *args)
--{
--	struct annotation *notes = symbol__annotation(sym);
--	struct disasm_line *dl;
--
--	args->offset = -1;
--	args->line = strdup("to be implemented");
--	args->line_nr = 0;
--	args->fileloc = NULL;
--	dl = disasm_line__new(args);
--	if (dl)
--		annotation_line__add(&dl->al, &notes->src->source);
--
--	zfree(&args->line);
--	return 0;
--}
--
- #ifdef HAVE_LIBCAPSTONE_SUPPORT
- #include <capstone/capstone.h>
- 
-diff --git a/tools/perf/util/disasm_bpf.c b/tools/perf/util/disasm_bpf.c
-new file mode 100644
-index 000000000000..c76a7d2be1a7
---- /dev/null
-+++ b/tools/perf/util/disasm_bpf.c
-@@ -0,0 +1,196 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+
-+#include "util/annotate.h"
-+#include "util/disasm_bpf.h"
-+#include "util/symbol.h"
-+#include <linux/zalloc.h>
-+#include <string.h>
-+
-+#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+#define PACKAGE "perf"
-+#include <bfd.h>
-+#include <bpf/bpf.h>
-+#include <bpf/btf.h>
-+#include <bpf/libbpf.h>
-+#include <dis-asm.h>
-+#include <errno.h>
-+#include <linux/btf.h>
-+#include <tools/dis-asm-compat.h>
-+
-+#include "util/bpf-event.h"
-+#include "util/bpf-utils.h"
-+#include "util/debug.h"
-+#include "util/dso.h"
-+#include "util/map.h"
-+#include "util/env.h"
-+#include "util/util.h"
-+
-+int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args)
-+{
-+	struct annotation *notes = symbol__annotation(sym);
-+	struct bpf_prog_linfo *prog_linfo = NULL;
-+	struct bpf_prog_info_node *info_node;
-+	int len = sym->end - sym->start;
-+	disassembler_ftype disassemble;
-+	struct map *map = args->ms.map;
-+	struct perf_bpil *info_linear;
-+	struct disassemble_info info;
-+	struct dso *dso = map__dso(map);
-+	int pc = 0, count, sub_id;
-+	struct btf *btf = NULL;
-+	char tpath[PATH_MAX];
-+	size_t buf_size;
-+	int nr_skip = 0;
-+	char *buf;
-+	bfd *bfdf;
-+	int ret;
-+	FILE *s;
-+
-+	if (dso__binary_type(dso) != DSO_BINARY_TYPE__BPF_PROG_INFO)
-+		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
-+
-+	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
-+		  sym->name, sym->start, sym->end - sym->start);
-+
-+	memset(tpath, 0, sizeof(tpath));
-+	perf_exe(tpath, sizeof(tpath));
-+
-+	bfdf = bfd_openr(tpath, NULL);
-+	if (bfdf == NULL)
-+		abort();
-+
-+	if (!bfd_check_format(bfdf, bfd_object))
-+		abort();
-+
-+	s = open_memstream(&buf, &buf_size);
-+	if (!s) {
-+		ret = errno;
-+		goto out;
-+	}
-+	init_disassemble_info_compat(&info, s,
-+				     (fprintf_ftype) fprintf,
-+				     fprintf_styled);
-+	info.arch = bfd_get_arch(bfdf);
-+	info.mach = bfd_get_mach(bfdf);
-+
-+	info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env,
-+						 dso__bpf_prog(dso)->id);
-+	if (!info_node) {
-+		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
-+		goto out;
-+	}
-+	info_linear = info_node->info_linear;
-+	sub_id = dso__bpf_prog(dso)->sub_id;
-+
-+	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
-+	info.buffer_length = info_linear->info.jited_prog_len;
-+
-+	if (info_linear->info.nr_line_info)
-+		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
-+
-+	if (info_linear->info.btf_id) {
-+		struct btf_node *node;
-+
-+		node = perf_env__find_btf(dso__bpf_prog(dso)->env,
-+					  info_linear->info.btf_id);
-+		if (node)
-+			btf = btf__new((__u8 *)(node->data),
-+				       node->data_size);
-+	}
-+
-+	disassemble_init_for_target(&info);
-+
-+#ifdef DISASM_FOUR_ARGS_SIGNATURE
-+	disassemble = disassembler(info.arch,
-+				   bfd_big_endian(bfdf),
-+				   info.mach,
-+				   bfdf);
-+#else
-+	disassemble = disassembler(bfdf);
-+#endif
-+	if (disassemble == NULL)
-+		abort();
-+
-+	fflush(s);
-+	do {
-+		const struct bpf_line_info *linfo = NULL;
-+		struct disasm_line *dl;
-+		size_t prev_buf_size;
-+		const char *srcline;
-+		u64 addr;
-+
-+		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
-+		count = disassemble(pc, &info);
-+
-+		if (prog_linfo)
-+			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
-+								addr, sub_id,
-+								nr_skip);
-+
-+		if (linfo && btf) {
-+			srcline = btf__name_by_offset(btf, linfo->line_off);
-+			nr_skip++;
-+		} else
-+			srcline = NULL;
-+
-+		fprintf(s, "\n");
-+		prev_buf_size = buf_size;
-+		fflush(s);
-+
-+		if (!annotate_opts.hide_src_code && srcline) {
-+			args->offset = -1;
-+			args->line = strdup(srcline);
-+			args->line_nr = 0;
-+			args->fileloc = NULL;
-+			args->ms.sym  = sym;
-+			dl = disasm_line__new(args);
-+			if (dl) {
-+				annotation_line__add(&dl->al,
-+						     &notes->src->source);
-+			}
-+		}
-+
-+		args->offset = pc;
-+		args->line = buf + prev_buf_size;
-+		args->line_nr = 0;
-+		args->fileloc = NULL;
-+		args->ms.sym  = sym;
-+		dl = disasm_line__new(args);
-+		if (dl)
-+			annotation_line__add(&dl->al, &notes->src->source);
-+
-+		pc += count;
-+	} while (count > 0 && pc < len);
-+
-+	ret = 0;
-+out:
-+	free(prog_linfo);
-+	btf__free(btf);
-+	fclose(s);
-+	bfd_close(bfdf);
-+	return ret;
-+}
-+#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+int symbol__disassemble_bpf(struct symbol *sym __maybe_unused, struct annotate_args *args __maybe_unused)
-+{
-+	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
-+}
-+#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+
-+int
-+symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args)
-+{
-+	struct annotation *notes = symbol__annotation(sym);
-+	struct disasm_line *dl;
-+
-+	args->offset = -1;
-+	args->line = strdup("to be implemented");
-+	args->line_nr = 0;
-+	args->fileloc = NULL;
-+	dl = disasm_line__new(args);
-+	if (dl)
-+		annotation_line__add(&dl->al, &notes->src->source);
-+
-+	zfree(&args->line);
-+	return 0;
-+}
-diff --git a/tools/perf/util/disasm_bpf.h b/tools/perf/util/disasm_bpf.h
-new file mode 100644
-index 000000000000..2ecb19545388
---- /dev/null
-+++ b/tools/perf/util/disasm_bpf.h
-@@ -0,0 +1,12 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+
-+#ifndef __PERF_DISASM_BPF_H
-+#define __PERF_DISASM_BPF_H
-+
-+struct symbol;
-+struct annotate_args;
-+
-+int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args);
-+int symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args);
-+
-+#endif /* __PERF_DISASM_BPF_H */
--- 
-2.45.2
-

diff --git a/dev-util/perf/files/perf-6.11-bpf-capstone.patch b/dev-util/perf/files/perf-6.11-bpf-capstone.patch
deleted file mode 100644
index 7d8b376869f3..000000000000
--- a/dev-util/perf/files/perf-6.11-bpf-capstone.patch
+++ /dev/null
@@ -1,469 +0,0 @@
-commit ea59b70a8418a313d6f2ab48a957de015fc33018
-Author: Arnaldo Carvalho de Melo <acme@redhat.com>
-Date:   Wed Jul 31 11:58:56 2024 -0300
-
-    perf bpf: Move BPF disassembly routines to separate file to avoid clash with capstone bpf headers
-    
-    There is a clash of the libbpf and capstone libraries, that ends up
-    with:
-    
-      In file included from /usr/include/capstone/capstone.h:325,
-                       from util/disasm.c:1513:
-      /usr/include/capstone/bpf.h:94:14: error: ‘bpf_insn’ defined as wrong kind of tag
-         94 | typedef enum bpf_insn {
-    
-    So far we're just trying to avoid this by not having both headers
-    included in the same .c or .h file, do it one more time by moving the
-    BPF diassembly routines from util/disasm.c to util/disasm_bpf.c.
-    
-    This is only being hit when building with BUILD_NONDISTRO=1, i.e.
-    building with binutils-devel, that isn't the in the default build due to
-    a licencing clash. We need to reimplement what is now isolated in
-    util/disasm_bpf.c using some other library to have BPF annotation
-    feature that now only is available with BUILD_NONDISTRO=1.
-    
-    Fixes: 6d17edc113de1e21 ("perf annotate: Use libcapstone to disassemble")
-    Cc: Adrian Hunter <adrian.hunter@intel.com>
-    Cc: Ian Rogers <irogers@google.com>
-    Cc: Jiri Olsa <jolsa@kernel.org>
-    Cc: Kan Liang <kan.liang@linux.intel.com>
-    Cc: Namhyung Kim <namhyung@kernel.org>
-    Link: https://lore.kernel.org/lkml/ZqpUSKPxMwaQKORr@x1
-    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-
-diff --git a/tools/perf/util/Build b/tools/perf/util/Build
-index 0f18fe81ef0b..b24360c04aae 100644
---- a/tools/perf/util/Build
-+++ b/tools/perf/util/Build
-@@ -13,6 +13,7 @@ perf-util-y += copyfile.o
- perf-util-y += ctype.o
- perf-util-y += db-export.o
- perf-util-y += disasm.o
-+perf-util-y += disasm_bpf.o
- perf-util-y += env.o
- perf-util-y += event.o
- perf-util-y += evlist.o
-diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c
-index 410e52cd9cfd..85fb0cfedf94 100644
---- a/tools/perf/util/disasm.c
-+++ b/tools/perf/util/disasm.c
-@@ -16,6 +16,7 @@
- #include "build-id.h"
- #include "debug.h"
- #include "disasm.h"
-+#include "disasm_bpf.h"
- #include "dso.h"
- #include "env.h"
- #include "evsel.h"
-@@ -1323,192 +1324,6 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
- 	return 0;
- }
- 
--#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--#define PACKAGE "perf"
--#include <bfd.h>
--#include <dis-asm.h>
--#include <bpf/bpf.h>
--#include <bpf/btf.h>
--#include <bpf/libbpf.h>
--#include <linux/btf.h>
--#include <tools/dis-asm-compat.h>
--
--#include "bpf-event.h"
--#include "bpf-utils.h"
--
--static int symbol__disassemble_bpf(struct symbol *sym,
--				   struct annotate_args *args)
--{
--	struct annotation *notes = symbol__annotation(sym);
--	struct bpf_prog_linfo *prog_linfo = NULL;
--	struct bpf_prog_info_node *info_node;
--	int len = sym->end - sym->start;
--	disassembler_ftype disassemble;
--	struct map *map = args->ms.map;
--	struct perf_bpil *info_linear;
--	struct disassemble_info info;
--	struct dso *dso = map__dso(map);
--	int pc = 0, count, sub_id;
--	struct btf *btf = NULL;
--	char tpath[PATH_MAX];
--	size_t buf_size;
--	int nr_skip = 0;
--	char *buf;
--	bfd *bfdf;
--	int ret;
--	FILE *s;
--
--	if (dso__binary_type(dso) != DSO_BINARY_TYPE__BPF_PROG_INFO)
--		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
--
--	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
--		  sym->name, sym->start, sym->end - sym->start);
--
--	memset(tpath, 0, sizeof(tpath));
--	perf_exe(tpath, sizeof(tpath));
--
--	bfdf = bfd_openr(tpath, NULL);
--	if (bfdf == NULL)
--		abort();
--
--	if (!bfd_check_format(bfdf, bfd_object))
--		abort();
--
--	s = open_memstream(&buf, &buf_size);
--	if (!s) {
--		ret = errno;
--		goto out;
--	}
--	init_disassemble_info_compat(&info, s,
--				     (fprintf_ftype) fprintf,
--				     fprintf_styled);
--	info.arch = bfd_get_arch(bfdf);
--	info.mach = bfd_get_mach(bfdf);
--
--	info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env,
--						 dso__bpf_prog(dso)->id);
--	if (!info_node) {
--		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
--		goto out;
--	}
--	info_linear = info_node->info_linear;
--	sub_id = dso__bpf_prog(dso)->sub_id;
--
--	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
--	info.buffer_length = info_linear->info.jited_prog_len;
--
--	if (info_linear->info.nr_line_info)
--		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
--
--	if (info_linear->info.btf_id) {
--		struct btf_node *node;
--
--		node = perf_env__find_btf(dso__bpf_prog(dso)->env,
--					  info_linear->info.btf_id);
--		if (node)
--			btf = btf__new((__u8 *)(node->data),
--				       node->data_size);
--	}
--
--	disassemble_init_for_target(&info);
--
--#ifdef DISASM_FOUR_ARGS_SIGNATURE
--	disassemble = disassembler(info.arch,
--				   bfd_big_endian(bfdf),
--				   info.mach,
--				   bfdf);
--#else
--	disassemble = disassembler(bfdf);
--#endif
--	if (disassemble == NULL)
--		abort();
--
--	fflush(s);
--	do {
--		const struct bpf_line_info *linfo = NULL;
--		struct disasm_line *dl;
--		size_t prev_buf_size;
--		const char *srcline;
--		u64 addr;
--
--		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
--		count = disassemble(pc, &info);
--
--		if (prog_linfo)
--			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
--								addr, sub_id,
--								nr_skip);
--
--		if (linfo && btf) {
--			srcline = btf__name_by_offset(btf, linfo->line_off);
--			nr_skip++;
--		} else
--			srcline = NULL;
--
--		fprintf(s, "\n");
--		prev_buf_size = buf_size;
--		fflush(s);
--
--		if (!annotate_opts.hide_src_code && srcline) {
--			args->offset = -1;
--			args->line = strdup(srcline);
--			args->line_nr = 0;
--			args->fileloc = NULL;
--			args->ms.sym  = sym;
--			dl = disasm_line__new(args);
--			if (dl) {
--				annotation_line__add(&dl->al,
--						     &notes->src->source);
--			}
--		}
--
--		args->offset = pc;
--		args->line = buf + prev_buf_size;
--		args->line_nr = 0;
--		args->fileloc = NULL;
--		args->ms.sym  = sym;
--		dl = disasm_line__new(args);
--		if (dl)
--			annotation_line__add(&dl->al, &notes->src->source);
--
--		pc += count;
--	} while (count > 0 && pc < len);
--
--	ret = 0;
--out:
--	free(prog_linfo);
--	btf__free(btf);
--	fclose(s);
--	bfd_close(bfdf);
--	return ret;
--}
--#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--static int symbol__disassemble_bpf(struct symbol *sym __maybe_unused,
--				   struct annotate_args *args __maybe_unused)
--{
--	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
--}
--#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
--
--static int
--symbol__disassemble_bpf_image(struct symbol *sym,
--			      struct annotate_args *args)
--{
--	struct annotation *notes = symbol__annotation(sym);
--	struct disasm_line *dl;
--
--	args->offset = -1;
--	args->line = strdup("to be implemented");
--	args->line_nr = 0;
--	args->fileloc = NULL;
--	dl = disasm_line__new(args);
--	if (dl)
--		annotation_line__add(&dl->al, &notes->src->source);
--
--	zfree(&args->line);
--	return 0;
--}
--
- #ifdef HAVE_LIBCAPSTONE_SUPPORT
- #include <capstone/capstone.h>
- 
-diff --git a/tools/perf/util/disasm_bpf.c b/tools/perf/util/disasm_bpf.c
-new file mode 100644
-index 000000000000..1fee71c79b62
---- /dev/null
-+++ b/tools/perf/util/disasm_bpf.c
-@@ -0,0 +1,195 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+
-+#include "util/annotate.h"
-+#include "util/disasm_bpf.h"
-+#include "util/symbol.h"
-+#include <linux/zalloc.h>
-+#include <string.h>
-+
-+#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+#define PACKAGE "perf"
-+#include <bfd.h>
-+#include <bpf/bpf.h>
-+#include <bpf/btf.h>
-+#include <bpf/libbpf.h>
-+#include <dis-asm.h>
-+#include <errno.h>
-+#include <linux/btf.h>
-+#include <tools/dis-asm-compat.h>
-+
-+#include "util/bpf-event.h"
-+#include "util/bpf-utils.h"
-+#include "util/debug.h"
-+#include "util/dso.h"
-+#include "util/map.h"
-+#include "util/env.h"
-+#include "util/util.h"
-+
-+int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args)
-+{
-+	struct annotation *notes = symbol__annotation(sym);
-+	struct bpf_prog_linfo *prog_linfo = NULL;
-+	struct bpf_prog_info_node *info_node;
-+	int len = sym->end - sym->start;
-+	disassembler_ftype disassemble;
-+	struct map *map = args->ms.map;
-+	struct perf_bpil *info_linear;
-+	struct disassemble_info info;
-+	struct dso *dso = map__dso(map);
-+	int pc = 0, count, sub_id;
-+	struct btf *btf = NULL;
-+	char tpath[PATH_MAX];
-+	size_t buf_size;
-+	int nr_skip = 0;
-+	char *buf;
-+	bfd *bfdf;
-+	int ret;
-+	FILE *s;
-+
-+	if (dso__binary_type(dso) != DSO_BINARY_TYPE__BPF_PROG_INFO)
-+		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
-+
-+	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
-+		  sym->name, sym->start, sym->end - sym->start);
-+
-+	memset(tpath, 0, sizeof(tpath));
-+	perf_exe(tpath, sizeof(tpath));
-+
-+	bfdf = bfd_openr(tpath, NULL);
-+	if (bfdf == NULL)
-+		abort();
-+
-+	if (!bfd_check_format(bfdf, bfd_object))
-+		abort();
-+
-+	s = open_memstream(&buf, &buf_size);
-+	if (!s) {
-+		ret = errno;
-+		goto out;
-+	}
-+	init_disassemble_info_compat(&info, s,
-+				     (fprintf_ftype) fprintf,
-+				     fprintf_styled);
-+	info.arch = bfd_get_arch(bfdf);
-+	info.mach = bfd_get_mach(bfdf);
-+
-+	info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env,
-+						 dso__bpf_prog(dso)->id);
-+	if (!info_node) {
-+		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
-+		goto out;
-+	}
-+	info_linear = info_node->info_linear;
-+	sub_id = dso__bpf_prog(dso)->sub_id;
-+
-+	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
-+	info.buffer_length = info_linear->info.jited_prog_len;
-+
-+	if (info_linear->info.nr_line_info)
-+		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
-+
-+	if (info_linear->info.btf_id) {
-+		struct btf_node *node;
-+
-+		node = perf_env__find_btf(dso__bpf_prog(dso)->env,
-+					  info_linear->info.btf_id);
-+		if (node)
-+			btf = btf__new((__u8 *)(node->data),
-+				       node->data_size);
-+	}
-+
-+	disassemble_init_for_target(&info);
-+
-+#ifdef DISASM_FOUR_ARGS_SIGNATURE
-+	disassemble = disassembler(info.arch,
-+				   bfd_big_endian(bfdf),
-+				   info.mach,
-+				   bfdf);
-+#else
-+	disassemble = disassembler(bfdf);
-+#endif
-+	if (disassemble == NULL)
-+		abort();
-+
-+	fflush(s);
-+	do {
-+		const struct bpf_line_info *linfo = NULL;
-+		struct disasm_line *dl;
-+		size_t prev_buf_size;
-+		const char *srcline;
-+		u64 addr;
-+
-+		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
-+		count = disassemble(pc, &info);
-+
-+		if (prog_linfo)
-+			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
-+								addr, sub_id,
-+								nr_skip);
-+
-+		if (linfo && btf) {
-+			srcline = btf__name_by_offset(btf, linfo->line_off);
-+			nr_skip++;
-+		} else
-+			srcline = NULL;
-+
-+		fprintf(s, "\n");
-+		prev_buf_size = buf_size;
-+		fflush(s);
-+
-+		if (!annotate_opts.hide_src_code && srcline) {
-+			args->offset = -1;
-+			args->line = strdup(srcline);
-+			args->line_nr = 0;
-+			args->fileloc = NULL;
-+			args->ms.sym  = sym;
-+			dl = disasm_line__new(args);
-+			if (dl) {
-+				annotation_line__add(&dl->al,
-+						     &notes->src->source);
-+			}
-+		}
-+
-+		args->offset = pc;
-+		args->line = buf + prev_buf_size;
-+		args->line_nr = 0;
-+		args->fileloc = NULL;
-+		args->ms.sym  = sym;
-+		dl = disasm_line__new(args);
-+		if (dl)
-+			annotation_line__add(&dl->al, &notes->src->source);
-+
-+		pc += count;
-+	} while (count > 0 && pc < len);
-+
-+	ret = 0;
-+out:
-+	free(prog_linfo);
-+	btf__free(btf);
-+	fclose(s);
-+	bfd_close(bfdf);
-+	return ret;
-+}
-+#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+int symbol__disassemble_bpf(struct symbol *sym __maybe_unused, struct annotate_args *args __maybe_unused)
-+{
-+	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
-+}
-+#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
-+
-+int symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args)
-+{
-+	struct annotation *notes = symbol__annotation(sym);
-+	struct disasm_line *dl;
-+
-+	args->offset = -1;
-+	args->line = strdup("to be implemented");
-+	args->line_nr = 0;
-+	args->fileloc = NULL;
-+	dl = disasm_line__new(args);
-+	if (dl)
-+		annotation_line__add(&dl->al, &notes->src->source);
-+
-+	zfree(&args->line);
-+	return 0;
-+}
-diff --git a/tools/perf/util/disasm_bpf.h b/tools/perf/util/disasm_bpf.h
-new file mode 100644
-index 000000000000..2ecb19545388
---- /dev/null
-+++ b/tools/perf/util/disasm_bpf.h
-@@ -0,0 +1,12 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+
-+#ifndef __PERF_DISASM_BPF_H
-+#define __PERF_DISASM_BPF_H
-+
-+struct symbol;
-+struct annotate_args;
-+
-+int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args);
-+int symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args);
-+
-+#endif /* __PERF_DISASM_BPF_H */


             reply	other threads:[~2024-11-19 10:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-19 10:49 Guilherme Amadio [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-03-18 20:00 [gentoo-commits] repo/gentoo:master commit in: dev-util/perf/files/ Conrad Kostecki
2021-02-18 23:06 Conrad Kostecki
2020-01-05  2:04 Georgy Yakovlev
2019-03-04  3:14 Aaron Bauman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1732013305.6a78e0d02acdaa1f5583b3b9d36d87decdd5b784.amadio@gentoo \
    --to=amadio@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox