diff --git a/sdk_container/src/third_party/portage-stable/dev-util/perf/Manifest b/sdk_container/src/third_party/portage-stable/dev-util/perf/Manifest index e2bc9f9396..977f179955 100644 --- a/sdk_container/src/third_party/portage-stable/dev-util/perf/Manifest +++ b/sdk_container/src/third_party/portage-stable/dev-util/perf/Manifest @@ -1,4 +1,4 @@ -DIST linux-6.10.tar.xz 145142812 BLAKE2B bb243ea7493b9d63aa2df2050a3f1ae2b89ee84a20015239cf157e3f4f51c7ac5efedc8a51132b2d7482f9276ac418de6624831c8a3b806130d9c2d2124c539b SHA512 baa2487954044f991d2ae254d77d14a1f0185dd62c9f0fcaff69f586c9f906823017b8db1c4588f27b076dfa3ebb606929fec859f60ea419e7974330b9289cc2 DIST linux-6.11.tar.xz 146900704 BLAKE2B e7750c0878d71a56a0ce52d4c4c912199dad5bf5e2e8f872585a6494afbb37cbd852e612a6858936d2dc9b7776a3933818f540db408d57e90d18ea5249bba7ab SHA512 329c1f94008742e3f0c2ce7e591a16316d1b2cb9ea4596d4f45604097e07b7aa2f64afa40630a07f321a858455c77aa32ba57b271932ddcf4dc27863f9081cea +DIST linux-6.12.tar.xz 147906904 BLAKE2B b2ec2fc69218cacabbbe49f78384a5d259ca581b717617c12b000b16f4a4c59ee348ea886b37147f5f70fb9a7a01c1e2c8f19021078f6b23f5bc62d1c48d5e5e SHA512 a37b1823df7b4f72542f689b65882634740ba0401a42fdcf6601d9efd2e132e5a7650e70450ba76f6cd1f13ca31180f2ccee9d54fe4df89bc0000ade4380a548 DIST linux-6.7.tar.xz 141406528 BLAKE2B cecdbd19905e43e485ab73b352ced18b37f2a138c97a6956cadcda5d3d271001117dc1cf896b166ff019fc7f405f9539e2ed0d6112b0890efb04d182adf4fd0e SHA512 de06de556191614bd9daf077ae239360352a402bab407748e67f1e5108c92fd933e451707840ab22fe0f9976db3d1e1b60ca9d41cf894f015ca09b3f652b74ad -DIST patch-6.10.4.xz 303168 BLAKE2B d38bbcdd2f730a030add5b38c1ab09c7081c311ed716d3ae976a058dd34b235078700cdff05d79dc93d9badb75c95566a3bdfc39dfa045d54857d82ee2c92e9d SHA512 5f5e8b19d114fed733c8c98a581fe339f8896e05e5da6a37deb1d7d8aa9dd83b3c80a97b1c6f3f51b6f20cca9c435b20c28c2c511da2026980d9fa72624cf420 +DIST patch-6.11.7.xz 669756 BLAKE2B f2ec79bd337eaa61c7203c00ce61b3e5afa9eee38a3e38e63a7fc9270af86674e5c369ca7ddfe4fa5f79601b1c874af1ce732bd8987529c7db2f2f9ca54ba85b SHA512 031c22e2fa7e1c7808f50dc2120a35d10a0b81d30636c5d19146fe12558999517f132213b72c39a32d8cc2c0e14e16ff64cac63ef97f8be0ebe8e709a3de8156 diff --git a/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.10-bpf-capstone.patch b/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.10-bpf-capstone.patch deleted file mode 100644 index ebae9a3ad0..0000000000 --- a/sdk_container/src/third_party/portage-stable/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 -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 ---- - 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 --#include --#include --#include --#include --#include --#include -- --#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, -- ¬es->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, ¬es->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, ¬es->src->source); -- -- zfree(&args->line); -- return 0; --} -- - #ifdef HAVE_LIBCAPSTONE_SUPPORT - #include - -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 -+#include -+ -+#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT) -+#define PACKAGE "perf" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#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, -+ ¬es->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, ¬es->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, ¬es->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/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.10-expr.patch b/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.10-expr.patch deleted file mode 100644 index b4220a062f..0000000000 --- a/sdk_container/src/third_party/portage-stable/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/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.10.3-bpf-capstone.patch b/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.10.3-bpf-capstone.patch deleted file mode 100644 index 57b298d8cc..0000000000 --- a/sdk_container/src/third_party/portage-stable/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 -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 ---- - 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 --#include --#include --#include --#include --#include --#include -- --#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, -- ¬es->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, ¬es->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, ¬es->src->source); -- -- zfree(&args->line); -- return 0; --} -- - #ifdef HAVE_LIBCAPSTONE_SUPPORT - #include - -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 -+#include -+ -+#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT) -+#define PACKAGE "perf" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#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, -+ ¬es->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, ¬es->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, ¬es->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/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.11-bpf-capstone.patch b/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.11-bpf-capstone.patch deleted file mode 100644 index 7d8b376869..0000000000 --- a/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.11-bpf-capstone.patch +++ /dev/null @@ -1,469 +0,0 @@ -commit ea59b70a8418a313d6f2ab48a957de015fc33018 -Author: Arnaldo Carvalho de Melo -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 - Cc: Ian Rogers - Cc: Jiri Olsa - Cc: Kan Liang - Cc: Namhyung Kim - Link: https://lore.kernel.org/lkml/ZqpUSKPxMwaQKORr@x1 - Signed-off-by: Arnaldo Carvalho de Melo - -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 --#include --#include --#include --#include --#include --#include -- --#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, -- ¬es->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, ¬es->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, ¬es->src->source); -- -- zfree(&args->line); -- return 0; --} -- - #ifdef HAVE_LIBCAPSTONE_SUPPORT - #include - -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 -+#include -+ -+#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT) -+#define PACKAGE "perf" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#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, -+ ¬es->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, ¬es->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, ¬es->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 */ diff --git a/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.11.7-annotate.patch b/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.11.7-annotate.patch new file mode 100644 index 0000000000..ca6e7bb07c --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/dev-util/perf/files/perf-6.11.7-annotate.patch @@ -0,0 +1,19 @@ + +Fix for bug #943203. + +https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5363c306787c88d41a41493f81b4308643696f6e + +diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c +index a18927d792afc5..3bbf173ad822bc 100644 +--- a/tools/perf/util/symbol.c ++++ b/tools/perf/util/symbol.c +@@ -1931,6 +1931,9 @@ int dso__load(struct dso *dso, struct map *map) + if (next_slot) { + ss_pos++; + ++ if (dso__binary_type(dso) == DSO_BINARY_TYPE__NOT_FOUND) ++ dso__set_binary_type(dso, symtab_type); ++ + if (syms_ss && runtime_ss) + break; + } else { diff --git a/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.10.ebuild b/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.10.ebuild deleted file mode 100644 index 7668df3a67..0000000000 --- a/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.10.ebuild +++ /dev/null @@ -1,342 +0,0 @@ -# Copyright 1999-2024 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -PYTHON_COMPAT=( python3_{10..13} ) -inherit bash-completion-r1 estack flag-o-matic linux-info llvm toolchain-funcs python-r1 - -DESCRIPTION="Userland tools for Linux Performance Counters" -HOMEPAGE="https://perf.wiki.kernel.org/" - -LINUX_V="${PV:0:1}.x" -if [[ ${PV} == *_rc* ]] ; then - LINUX_VER=$(ver_cut 1-2).$(($(ver_cut 3)-1)) - PATCH_VERSION=$(ver_cut 1-3) - LINUX_PATCH=patch-${PV//_/-}.xz - SRC_URI="https://www.kernel.org/pub/linux/kernel/v${LINUX_V}/testing/${LINUX_PATCH} - https://www.kernel.org/pub/linux/kernel/v${LINUX_V}/testing/v${PATCH_VERSION}/${LINUX_PATCH}" -elif [[ ${PV} == *.*.* ]] ; then - # stable-release series - LINUX_VER=$(ver_cut 1-2) - LINUX_PATCH=patch-${PV}.xz - SRC_URI="https://www.kernel.org/pub/linux/kernel/v${LINUX_V}/${LINUX_PATCH}" -else - LINUX_VER=${PV} -fi - -LINUX_SOURCES="linux-${LINUX_VER}.tar.xz" -SRC_URI+=" https://www.kernel.org/pub/linux/kernel/v${LINUX_V}/${LINUX_SOURCES}" - -S_K="${WORKDIR}/linux-${LINUX_VER}" -S="${S_K}/tools/perf" - -LICENSE="GPL-2" -SLOT="0" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86 ~amd64-linux ~x86-linux" -IUSE="abi_mips_o32 abi_mips_n32 abi_mips_n64 audit babeltrace capstone big-endian bpf caps crypt debug +doc gtk java libpfm +libtraceevent +libtracefs lzma numa perl python slang systemtap tcmalloc unwind zstd" - -REQUIRED_USE=" - ${PYTHON_REQUIRED_USE} -" - -# setuptools (and Python) are always needed even if not building Python bindings -BDEPEND=" - ${LINUX_PATCH+dev-util/patchutils} - ${PYTHON_DEPS} - >=app-arch/tar-1.34-r2 - dev-python/setuptools[${PYTHON_USEDEP}] - app-alternatives/yacc - app-alternatives/lex - virtual/pkgconfig - doc? ( - app-text/asciidoc - app-text/sgml-common - app-text/xmlto - sys-process/time - ) -" - -RDEPEND=" - audit? ( sys-process/audit ) - babeltrace? ( dev-util/babeltrace:0/1 ) - bpf? ( - dev-libs/libbpf - dev-util/bpftool - dev-util/pahole - sys-devel/clang:= - sys-devel/llvm:= - ) - caps? ( sys-libs/libcap ) - capstone? ( dev-libs/capstone ) - crypt? ( dev-libs/openssl:= ) - gtk? ( x11-libs/gtk+:2 ) - java? ( virtual/jre:* ) - libpfm? ( dev-libs/libpfm:= ) - libtraceevent? ( dev-libs/libtraceevent ) - libtracefs? ( dev-libs/libtracefs ) - lzma? ( app-arch/xz-utils ) - numa? ( sys-process/numactl ) - perl? ( dev-lang/perl:= ) - python? ( ${PYTHON_DEPS} ) - slang? ( sys-libs/slang ) - systemtap? ( dev-debug/systemtap ) - tcmalloc? ( dev-util/google-perftools ) - unwind? ( sys-libs/libunwind:= ) - zstd? ( app-arch/zstd:= ) - dev-libs/elfutils - sys-libs/binutils-libs:= - sys-libs/zlib - virtual/libcrypt -" - -DEPEND="${RDEPEND} - >=sys-kernel/linux-headers-5.10 - java? ( virtual/jdk ) -" - -QA_FLAGS_IGNORED=( - 'usr/bin/perf-read-vdso32' # not linked with anything except for libc - 'usr/libexec/perf-core/dlfilters/.*' # plugins -) - -pkg_pretend() { - if ! use doc ; then - ewarn "Without the doc USE flag you won't get any documentation nor man pages." - ewarn "And without man pages, you won't get any --help output for perf and its" - ewarn "sub-tools." - fi -} - -pkg_setup() { - local CONFIG_CHECK=" - ~DEBUG_INFO - ~FTRACE - ~FTRACE_SYSCALLS - ~FUNCTION_TRACER - ~KALLSYMS - ~KALLSYMS_ALL - ~KPROBES - ~KPROBE_EVENTS - ~PERF_EVENTS - ~UPROBES - ~UPROBE_EVENTS - " - - use bpf && llvm_pkg_setup - # We enable python unconditionally as libbpf always generates - # API headers using python script - python_setup - - if use bpf ; then - CONFIG_CHECK+="~BPF ~BPF_EVENTS ~BPF_SYSCALL ~DEBUG_INFO_BTF ~HAVE_EBPF_JIT" - fi - - linux-info_pkg_setup -} - -# src_unpack and src_prepare are copied to dev-util/bpftool since -# it's building from the same tarball, please keep it in sync with bpftool -src_unpack() { - local paths=( - kernel/bpf tools/{arch,bpf,build,include,lib,perf,scripts} - scripts include lib "arch/*/include" "arch/*/lib" "arch/*/tools" - ) - - # We expect the tar implementation to support the -j option (both - # GNU tar and libarchive's tar support that). - echo ">>> Unpacking ${LINUX_SOURCES} (${paths[*]}) to ${PWD}" - gtar --wildcards -xpf "${DISTDIR}"/${LINUX_SOURCES} \ - "${paths[@]/#/linux-${LINUX_VER}/}" || die - - if [[ -n ${LINUX_PATCH} ]] ; then - eshopts_push -o noglob - ebegin "Filtering partial source patch" - filterdiff -p1 ${paths[@]/#/-i } -z "${DISTDIR}"/${LINUX_PATCH} \ - > ${P}.patch - eend $? || die "filterdiff failed" - eshopts_pop - fi - - local a - for a in ${A}; do - [[ ${a} == ${LINUX_SOURCES} ]] && continue - [[ ${a} == ${LINUX_PATCH} ]] && continue - unpack ${a} - done -} - -src_prepare() { - default - if [[ -n ${LINUX_PATCH} ]] ; then - pushd "${S_K}" >/dev/null || die - eapply "${WORKDIR}"/${P}.patch - popd || die - fi - - pushd "${S_K}" >/dev/null || die - eapply "${FILESDIR}"/perf-6.4-libtracefs.patch - eapply "${FILESDIR}"/perf-6.10-bpf-capstone.patch - eapply "${FILESDIR}"/perf-6.10-expr.patch - popd || die - - # Drop some upstream too-developer-oriented flags and fix the - # Makefile in general - sed -i \ - -e "s@\$(sysconfdir_SQ)/bash_completion.d@$(get_bashcompdir)@" \ - "${S}"/Makefile.perf || die - # A few places still use -Werror w/out $(WERROR) protection. - sed -i -e 's@-Werror@@' \ - "${S}"/Makefile.perf "${S_K}"/tools/lib/bpf/Makefile \ - "${S_K}"/tools/lib/perf/Makefile || die - - # Avoid the call to make kernelversion - sed -i -e '/PERF-VERSION-GEN/d' Makefile.perf || die - echo "#define PERF_VERSION \"${PV}\"" > PERF-VERSION-FILE - - # The code likes to compile local assembly files which lack ELF markings. - find -name '*.S' -exec sed -i '$a.section .note.GNU-stack,"",%progbits' {} + -} - -puse() { usex $1 "" 1; } -perf_make() { - # The arch parsing is a bit funky. The perf tools package is integrated - # into the kernel, so it wants an ARCH that looks like the kernel arch, - # but it also wants to know about the split value -- i386/x86_64 vs just - # x86. We can get that by telling the func to use an older linux version. - # It's kind of a hack, but not that bad ... - - # LIBDIR sets a search path of perf-gtk.so. Bug 515954 - - local arch=$(tc-arch-kernel) - local java_dir - use java && java_dir="${EPREFIX}/etc/java-config-2/current-system-vm" - - # sync this with the whitelist in tools/perf/Makefile.config - local disable_libdw - if ! use amd64 && ! use x86 && \ - ! use arm && \ - ! use arm64 && \ - ! use ppc && ! use ppc64 \ - ! use s390 && \ - ! use riscv && \ - ! use loong - then - disable_libdw=1 - fi - - # perf directly invokes LD for linking without going through CC, on mips - # it is required to specify the emulation. port of below buildroot patch - # https://patchwork.ozlabs.org/project/buildroot/patch/20170217105905.32151-1-Vincent.Riera@imgtec.com/ - local linker="$(tc-getLD)" - if use mips - then - if use big-endian - then - use abi_mips_n64 && linker+=" -m elf64btsmip" - use abi_mips_n32 && linker+=" -m elf32btsmipn32" - use abi_mips_o32 && linker+=" -m elf32btsmip" - else - use abi_mips_n64 && linker+=" -m elf64ltsmip" - use abi_mips_n32 && linker+=" -m elf32ltsmipn32" - use abi_mips_o32 && linker+=" -m elf32ltsmip" - fi - fi - - # FIXME: NO_CORESIGHT - local emakeargs=( - V=1 VF=1 - HOSTCC="$(tc-getBUILD_CC)" HOSTLD="$(tc-getBUILD_LD)" - CC="$(tc-getCC)" CXX="$(tc-getCXX)" AR="$(tc-getAR)" LD="${linker}" NM="$(tc-getNM)" - CLANG="${CHOST}-clang" - PKG_CONFIG="$(tc-getPKG_CONFIG)" - prefix="${EPREFIX}/usr" bindir_relative="bin" - tipdir="share/doc/${PF}" - EXTRA_CFLAGS="${CFLAGS}" - EXTRA_LDFLAGS="${LDFLAGS}" - ARCH="${arch}" - BUILD_BPF_SKEL=$(usex bpf 1 "") \ - BUILD_NONDISTRO=1 - JDIR="${java_dir}" - CORESIGHT= - GTK2=$(usex gtk 1 "") - feature-gtk2-infobar=$(usex gtk 1 "") - NO_AUXTRACE= - NO_BACKTRACE= - NO_CAPSTONE=$(puse capstone) - NO_DEMANGLE= - NO_JEVENTS=$(puse python) - NO_JVMTI=$(puse java) - NO_LIBAUDIT=$(puse audit) - NO_LIBBABELTRACE=$(puse babeltrace) - NO_LIBBIONIC=1 - NO_LIBBPF=$(puse bpf) - NO_LIBCAP=$(puse caps) - NO_LIBCRYPTO=$(puse crypt) - NO_LIBDW_DWARF_UNWIND="${disable_libdw}" - NO_LIBELF= - NO_LIBNUMA=$(puse numa) - NO_LIBPERL=$(puse perl) - NO_LIBPFM4=$(puse libpfm) - NO_LIBPYTHON=$(puse python) - NO_LIBTRACEEVENT=$(puse libtraceevent) - NO_LIBUNWIND=$(puse unwind) - NO_LIBZSTD=$(puse zstd) - NO_SDT=$(puse systemtap) - NO_SHELLCHECK=1 - NO_SLANG=$(puse slang) - NO_LZMA=$(puse lzma) - NO_ZLIB= - TCMALLOC=$(usex tcmalloc 1 "") - WERROR=0 - DEBUG=$(usex debug 1 "") - LIBDIR="/usr/libexec/perf-core" - libdir="${EPREFIX}/usr/$(get_libdir)" - plugindir="${EPREFIX}/usr/$(get_libdir)/perf/plugins" - "$@" - ) - emake "${emakeargs[@]}" -} - -src_compile() { - filter-lto - - perf_make -f Makefile.perf - use doc && perf_make -C Documentation man -} - -src_test() { - : -} - -src_install() { - _install_python_ext() { - perf_make -f Makefile.perf install-python_ext DESTDIR="${D}" - } - - perf_make -f Makefile.perf install DESTDIR="${D}" - - if use python; then - python_foreach_impl _install_python_ext - fi - - if use gtk; then - local libdir - libdir="$(get_libdir)" - # on some arches it ends up in lib even on 64bit, ppc64 for instance. - [[ -f "${ED}"/usr/lib/libperf-gtk.so ]] && libdir="lib" - mv "${ED}"/usr/${libdir}/libperf-gtk.so \ - "${ED}"/usr/libexec/perf-core || die - fi - - dodoc CREDITS - - dodoc *txt Documentation/*.txt - - # perf needs this decompressed to print out tips for users - docompress -x /usr/share/doc/${PF}/tips.txt - - if use doc ; then - doman Documentation/*.1 - fi -} diff --git a/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.11.ebuild b/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.11.7.ebuild similarity index 98% rename from sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.11.ebuild rename to sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.11.7.ebuild index b523d8477b..9b0cb46b57 100644 --- a/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.11.ebuild +++ b/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.11.7.ebuild @@ -34,7 +34,7 @@ S="${S_K}/tools/perf" LICENSE="GPL-2" SLOT="0" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86 ~amd64-linux ~x86-linux" +KEYWORDS="~alpha amd64 ~arm arm64 ~loong ppc ppc64 ~riscv x86 ~amd64-linux ~x86-linux" IUSE="abi_mips_o32 abi_mips_n32 abi_mips_n64 audit babeltrace capstone big-endian bpf caps crypt debug +doc gtk java libpfm +libtraceevent +libtracefs lzma numa perl python slang systemtap tcmalloc unwind zstd" REQUIRED_USE=" @@ -177,11 +177,11 @@ src_prepare() { if [[ -n ${LINUX_PATCH} ]] ; then pushd "${S_K}" >/dev/null || die eapply "${WORKDIR}"/${P}.patch + eapply "${FILESDIR}"/perf-6.11.7-annotate.patch popd || die fi pushd "${S_K}" >/dev/null || die - eapply "${FILESDIR}"/perf-6.11-bpf-capstone.patch popd || die # Drop some upstream too-developer-oriented flags and fix the diff --git a/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.10.4.ebuild b/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.12.ebuild similarity index 95% rename from sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.10.4.ebuild rename to sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.12.ebuild index df1101c9dc..c3d4af9bc2 100644 --- a/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.10.4.ebuild +++ b/sdk_container/src/third_party/portage-stable/dev-util/perf/perf-6.12.ebuild @@ -3,8 +3,9 @@ EAPI=8 -PYTHON_COMPAT=( python3_{10..13} ) -inherit bash-completion-r1 estack flag-o-matic linux-info llvm toolchain-funcs python-r1 +LLVM_COMPAT=( {16..19} ) +PYTHON_COMPAT=( python3_{10..13} python3_13t) +inherit bash-completion-r1 estack flag-o-matic linux-info llvm-r1 toolchain-funcs python-r1 DESCRIPTION="Userland tools for Linux Performance Counters" HOMEPAGE="https://perf.wiki.kernel.org/" @@ -64,8 +65,10 @@ RDEPEND=" dev-libs/libbpf dev-util/bpftool dev-util/pahole - sys-devel/clang:= - sys-devel/llvm:= + $(llvm_gen_dep ' + sys-devel/clang:${LLVM_SLOT}= + sys-devel/llvm:${LLVM_SLOT}= + ') ) caps? ( sys-libs/libcap ) capstone? ( dev-libs/capstone ) @@ -110,7 +113,9 @@ pkg_pretend() { pkg_setup() { local CONFIG_CHECK=" + ~!SCHED_OMIT_FRAME_POINTER ~DEBUG_INFO + ~FRAME_POINTER ~FTRACE ~FTRACE_SYSCALLS ~FUNCTION_TRACER @@ -119,17 +124,19 @@ pkg_setup() { ~KPROBES ~KPROBE_EVENTS ~PERF_EVENTS + ~STACKTRACE + ~TRACEPOINTS ~UPROBES ~UPROBE_EVENTS " - use bpf && llvm_pkg_setup + use bpf && llvm-r1_pkg_setup # We enable python unconditionally as libbpf always generates # API headers using python script python_setup if use bpf ; then - CONFIG_CHECK+="~BPF ~BPF_EVENTS ~BPF_SYSCALL ~DEBUG_INFO_BTF ~HAVE_EBPF_JIT" + CONFIG_CHECK+="~BPF ~BPF_EVENTS ~BPF_SYSCALL ~DEBUG_INFO_BTF ~HAVE_EBPF_JIT ~UNWINDER_FRAME_POINTER" fi linux-info_pkg_setup @@ -178,9 +185,7 @@ src_prepare() { fi pushd "${S_K}" >/dev/null || die - eapply "${FILESDIR}"/perf-6.4-libtracefs.patch - eapply "${FILESDIR}"/perf-6.10-expr.patch - eapply "${FILESDIR}"/perf-6.10.3-bpf-capstone.patch + # Gentoo patches go here popd || die # Drop some upstream too-developer-oriented flags and fix the