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 <[email protected]>
-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 <[email protected]>
----
- 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 <[email protected]>
-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 <[email protected]>
----
- 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 <[email protected]>
-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 <[email protected]>
-    Cc: Ian Rogers <[email protected]>
-    Cc: Jiri Olsa <[email protected]>
-    Cc: Kan Liang <[email protected]>
-    Cc: Namhyung Kim <[email protected]>
-    Link: https://lore.kernel.org/lkml/ZqpUSKPxMwaQKORr@x1
-    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
-
-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 via email to