diff options
Diffstat (limited to 'dev-util/perf')
-rw-r--r-- | dev-util/perf/Manifest | 15 | ||||
-rw-r--r-- | dev-util/perf/files/perf-6.10-bpf-capstone.patch | 456 | ||||
-rw-r--r-- | dev-util/perf/files/perf-6.10-expr.patch | 22 | ||||
-rw-r--r-- | dev-util/perf/files/perf-6.10.3-bpf-capstone.patch | 455 | ||||
-rw-r--r-- | dev-util/perf/perf-6.10.4.ebuild (renamed from dev-util/perf/perf-6.8.ebuild) | 29 | ||||
-rw-r--r-- | dev-util/perf/perf-6.10.ebuild (renamed from dev-util/perf/perf-6.9.ebuild) | 8 | ||||
-rw-r--r-- | dev-util/perf/perf-6.3.ebuild | 3 | ||||
-rw-r--r-- | dev-util/perf/perf-6.7.ebuild | 3 |
8 files changed, 969 insertions, 22 deletions
diff --git a/dev-util/perf/Manifest b/dev-util/perf/Manifest index 4e6081599585..7fb1e325b8fd 100644 --- a/dev-util/perf/Manifest +++ b/dev-util/perf/Manifest @@ -1,13 +1,16 @@ AUX perf-6.0-c++17.patch 1127 BLAKE2B 923390f761b588a01935e2b36ff25f916f91e752f76fc6e02999ddc51e297a13798b38a9d3523deab327c8fd6ee2ea02e93f454a4b799f61552c11c1cad574aa SHA512 add3956108a83fd58ca949f6f6a611c44a0f29a4b4eef28c4883a1ba6058b66203064837878becbd64d8afebef57beb1cefcfcedb2a95c221f6792dffcaf38cb AUX perf-6.0-clang.patch 1862 BLAKE2B e88655e51cb785b80cd44fefb73bb7668bf6d57205e478b106a0d0fbbee4e7089850c2328e796530347c354eb8e7e46e947c18e03ded488bede41de5f74f0b8e SHA512 0e92ba2e878b2b20f6d7c30ba5fde43388378c7f8e752a7c07dd65abc66e576be8f74cf9c06abb79713cc8c1cab37c9cd678f4e5bba8bb99ed1020317f278eb2 +AUX perf-6.10-bpf-capstone.patch 11805 BLAKE2B 5e4f2942b6ab4e7c3e149b86dab9515b0a60ab73e003b59bb2623288896f4db3bd80f372110e9ef7f2da49641c925fe60989fb5e21dd5e2e13409fc7e60b3722 SHA512 ac5270276552b934736dd111eefe7019cfe091a14ed7e2fe107527b69652e82415f4142a1199db5e3a1a3e0b48b7ee0166f650bfe0fb25bdc69908b376baf3d3 +AUX perf-6.10-expr.patch 1355 BLAKE2B d4dcb3b8b79944f304fd8789cd680e91e2fb1deffaa0ac108e200130f9ab669bea6a8ad65efc66b730b3282d523f839812cc4de6861b665c86bf2ba400645743 SHA512 0b031a675c49149b0f7623c0e663e4b6c2866ab4fa7e7e29712a55ebbceccef68bdde8ebe1f70a0f3e035e75e6e8e6fb90c06d0c16d39d2866ecbded4ff0c5cc +AUX perf-6.10.3-bpf-capstone.patch 11856 BLAKE2B 17f3d66a4fd0508f3ac89d4c9d18341dac97cf4b753bde85887a1b9ee79c10a3e1e94d28bb2c77a69dd35c5db21ef7ffe83314c8adca95dcc3ca353829eff139 SHA512 c41dcee2e85676a56178a0cb9998f1a56dab1aba8c49cdac506fd05bf72065a6dc51a46d48fe968a45ab5a872235f6839aab93b3464e6cf25aa66580b92ac652 AUX perf-6.4-libtracefs.patch 780 BLAKE2B dc97e42f1d3ece03722441b5a2c1f87ab9871ca92b9cf9f57b2e44627fddfcedaf6d7f64ddf74fd103c23aa0db71c4d147f7841743eb5c5a466c9bbb150597ea SHA512 da1b69c190491dd926ba1e98a43965a5ffd543df4134e6a10d187ab544695617fcffede3190bce4cbef13b897d113dee743f67a98ff249a486f8de2d49e62f9f AUX perf-6.7-expr.patch 1257 BLAKE2B 1ff41975d84f835a343d2b2f9f049edd817bf80ca576879c7f819608506341b5d19147cf3ecd67a731ab6ecf9a45ce494a8a665aa1bff86cc14f3967a6dd12a0 SHA512 8f1a5a8412464f7623b10da562552b2ac17ca8e70eb4507a3751493662e64066828f2b7a73f1bc7546f463d8d21919f59622b978a6bacafed6a93f232a15ff0b +DIST linux-6.10.tar.xz 145142812 BLAKE2B bb243ea7493b9d63aa2df2050a3f1ae2b89ee84a20015239cf157e3f4f51c7ac5efedc8a51132b2d7482f9276ac418de6624831c8a3b806130d9c2d2124c539b SHA512 baa2487954044f991d2ae254d77d14a1f0185dd62c9f0fcaff69f586c9f906823017b8db1c4588f27b076dfa3ebb606929fec859f60ea419e7974330b9289cc2 DIST linux-6.3.tar.xz 136891752 BLAKE2B f1887c8924efa8d0cb14c4e604affd0b0168bcf20f56a37c027405c7bc11aba822a43fcb38ccb55a81a26f747d00e1ab5a6554818affbf1e1c7ef5220150fc69 SHA512 768979440f4907ba64d4481b383d6101faf208f27a0b897156123aa278c5743fe3c4f61945b2541429c532d45382aaee8899ea9d44a1d2895bfbb79bfd937f65 DIST linux-6.7.tar.xz 141406528 BLAKE2B cecdbd19905e43e485ab73b352ced18b37f2a138c97a6956cadcda5d3d271001117dc1cf896b166ff019fc7f405f9539e2ed0d6112b0890efb04d182adf4fd0e SHA512 de06de556191614bd9daf077ae239360352a402bab407748e67f1e5108c92fd933e451707840ab22fe0f9976db3d1e1b60ca9d41cf894f015ca09b3f652b74ad -DIST linux-6.8.tar.xz 142502100 BLAKE2B c6f17f816cea16e629f63e9379b98888713f57b2c5173306926471f139a9d612a0c74e119341f8075390e55e203d787d9edeb4ad5a064b18870f6f0f7ffaafb2 SHA512 5c4eb4aa1d3f7d1ea01c0f7ddeadacdece6e144fd4bdfc16b2b925d3e10dc04de3a6db69320b79a96c3560052616f001d2c09e7a1bb4f7b731e2380a7ecce068 -DIST linux-6.9.tar.xz 144034416 BLAKE2B 4cf86c3cfe6e6534745d42dfaeca59b17ea1168c4e8b615c80e6d8aac735f11283cd85fa992b440b5d4452917e94b9f08397a64af0be5894e3df23c68892377e SHA512 fed3b4cd1fbfb4d94618587c1934273d2ecc8b6e42a3d586ff8a5f24980be930f2ef803aa2923ca3bfa5e4e619f967f3af315368f24fa76f610b10443624a579 -EBUILD perf-6.3.ebuild 7858 BLAKE2B c571be537787a682baea6755bfb8df0c1ca1e62be4982ca3bb440aa513189dfe7388705720531d47fe8c18f1c6d04871e96a1804e29296181c194237efaabcea SHA512 3f1aed8b58ce5f3b2b3449e8661d596d31f7991054c86d33b836bed80ba06a042f10681a16be6b67327da1797f144926a30a383c5388c694769e48785e2f5bda -EBUILD perf-6.7.ebuild 9070 BLAKE2B b20b9e581e7ec7e5587882bb7529e172134fde86d8bde0953c1d02114c45238d3052c76b02b877f650c92dc3b5de622929ec67af756bfced9156bf0d16604139 SHA512 5dfed5bff7320a35a71d2fe84068b19d653f81ba8a1a4b38daeb0d1aaa2e8a402d65a30b659de39cc3c415e4d914bccd2824f48f77e0bdd399acc9fa9b7a60a0 -EBUILD perf-6.8.ebuild 9094 BLAKE2B 6d08a549e098b38ddc79fe12d1458725742570176720cc29156d01a171f5d1810e6704b215df121ad23a54aa7bc3f349f170189fb4fa58229c4ee3d66bc80226 SHA512 007b468f181524514ffd325789a07c4f4e640ff9137abdbe71f411b67b2b7394e154ad2aea0994966bab53877105608b7a08bebd0b454cf2504e068dadae1f04 -EBUILD perf-6.9.ebuild 9218 BLAKE2B 5042f013b883b8aeb0333c9423ff04f4663bb16337350bfff8678b108a7965805b2444f56dafdfd2fbbfa125ca64b92696bb2f1a6561b4428440c257b7c0337c SHA512 e8658f8151150bc9800d7f56bdb0d2c343f0a580144b6bdf009676622b6b04c80787d42f812174957ea47b50eb8cd3ce693775ad9aec9a8c30f7ca6bcefd37df +DIST patch-6.10.4.xz 303168 BLAKE2B d38bbcdd2f730a030add5b38c1ab09c7081c311ed716d3ae976a058dd34b235078700cdff05d79dc93d9badb75c95566a3bdfc39dfa045d54857d82ee2c92e9d SHA512 5f5e8b19d114fed733c8c98a581fe339f8896e05e5da6a37deb1d7d8aa9dd83b3c80a97b1c6f3f51b6f20cca9c435b20c28c2c511da2026980d9fa72624cf420 +EBUILD perf-6.10.4.ebuild 9495 BLAKE2B 90bf673dcd8c94531bd534e520077c5a049abca75edea00a85c21e96cffc69a449c9c1eca24072f0ea9e00c192e21fd32fd9407829001168d101e9ef6cb0695f SHA512 3aa795231a233cbc85d1dcb8e0bec426b6ffa42dca128d264f64e15b93dd6fbff83d59c1b4b66fad4b4806783dcc76bb1711a2c2dc26bfa328b3b9d349a13f28 +EBUILD perf-6.10.ebuild 9289 BLAKE2B 31127f741e6ec0ab27723ba29b54d1e6e6da2005a6be2e2ec742f03f377473ba0bdbdd309bdce61b767b737fe665b6fe4bdcb44eb46e92ad073a16e5e991b65f SHA512 a338e422d8fde71bce6e680992901fdf2008ea12e4e2bb7e06e5a135d3d61b6c7dbc74f61d1e4c5b72ee57c3bf4f86443a407b77f3d6f9fc556012f53d528d82 +EBUILD perf-6.3.ebuild 7879 BLAKE2B 8c0a0d871ba9892559e6a7456d65f3e428dc447c956e59f885c5a3690317c613c35de24e0c2638fb820d7635a291c85f4a36ce6f303e694c2895fa9e79922734 SHA512 929c052bcd742009aea8157c8316c52daa02f8fd36894df743d5a942f776ef13f683e04bb63b8568c20dbfa1b2a360e7189a99d67e8d4ad7458db790e221d50c +EBUILD perf-6.7.ebuild 9089 BLAKE2B 22ca5977135f8b1f411c423697a61e0a4a4582fb9e470c4e816d7a8022f4f90088f640ff5fb4352c963805d3ab5ff9de003f6aa0d0d7b541bc4d788c17ed3df5 SHA512 3d822becfa8100be4e597082cadd51d817358344e79ff65c722c5d1f904cc34fdda0b01ae1ff9417e5b1132b7e13a9271ac21560538bb775b30ef3d5bdd4d247 MISC metadata.xml 1732 BLAKE2B 03176060a38c63b19df545d60440a68581f637aa5533a8cf31ac1aa0412d30e73ac1fd65bd13e50d731fc2a028dda5fbe3eac92d85fa7acefb3884fb3cf490dd SHA512 2910d91429859d9ac69d275422239341dcbbd24b0010d716ee9de52272b817e72e59af0c7b524404366140e55491d3fe3b3abe14ec6df98ca064e91eab51b923 diff --git a/dev-util/perf/files/perf-6.10-bpf-capstone.patch b/dev-util/perf/files/perf-6.10-bpf-capstone.patch new file mode 100644 index 000000000000..ebae9a3ad080 --- /dev/null +++ b/dev-util/perf/files/perf-6.10-bpf-capstone.patch @@ -0,0 +1,456 @@ +From a7728af2f25fe99ee72d211bb4ddec17a8601f5f Mon Sep 17 00:00:00 2001 +From: Guilherme Amadio <amadio@gentoo.org> +Date: Tue, 6 Aug 2024 11:34:05 +0200 +Subject: [PATCH] Fix bug #936439. Replay of upstream commit onto v6.10. + +Signed-off-by: Guilherme Amadio <amadio@gentoo.org> +--- + tools/perf/util/Build | 1 + + tools/perf/util/disasm.c | 187 +-------------------------------- + tools/perf/util/disasm_bpf.c | 197 +++++++++++++++++++++++++++++++++++ + tools/perf/util/disasm_bpf.h | 12 +++ + 4 files changed, 211 insertions(+), 186 deletions(-) + create mode 100644 tools/perf/util/disasm_bpf.c + create mode 100644 tools/perf/util/disasm_bpf.h + +diff --git a/tools/perf/util/Build b/tools/perf/util/Build +index da64efd8718f..384c4e06b838 100644 +--- a/tools/perf/util/Build ++++ b/tools/perf/util/Build +@@ -13,6 +13,7 @@ perf-y += copyfile.o + perf-y += ctype.o + perf-y += db-export.o + perf-y += disasm.o ++perf-y += disasm_bpf.o + perf-y += env.o + perf-y += event.o + perf-y += evlist.o +diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c +index 72aec8f61b94..766cbd005f32 100644 +--- a/tools/perf/util/disasm.c ++++ b/tools/perf/util/disasm.c +@@ -15,6 +15,7 @@ + #include "build-id.h" + #include "debug.h" + #include "disasm.h" ++#include "disasm_bpf.h" + #include "dso.h" + #include "env.h" + #include "evsel.h" +@@ -1164,192 +1165,6 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil + return 0; + } + +-#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT) +-#define PACKAGE "perf" +-#include <bfd.h> +-#include <dis-asm.h> +-#include <bpf/bpf.h> +-#include <bpf/btf.h> +-#include <bpf/libbpf.h> +-#include <linux/btf.h> +-#include <tools/dis-asm-compat.h> +- +-#include "bpf-event.h" +-#include "bpf-utils.h" +- +-static int symbol__disassemble_bpf(struct symbol *sym, +- struct annotate_args *args) +-{ +- struct annotation *notes = symbol__annotation(sym); +- struct bpf_prog_linfo *prog_linfo = NULL; +- struct bpf_prog_info_node *info_node; +- int len = sym->end - sym->start; +- disassembler_ftype disassemble; +- struct map *map = args->ms.map; +- struct perf_bpil *info_linear; +- struct disassemble_info info; +- struct dso *dso = map__dso(map); +- int pc = 0, count, sub_id; +- struct btf *btf = NULL; +- char tpath[PATH_MAX]; +- size_t buf_size; +- int nr_skip = 0; +- char *buf; +- bfd *bfdf; +- int ret; +- FILE *s; +- +- if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO) +- return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE; +- +- pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__, +- sym->name, sym->start, sym->end - sym->start); +- +- memset(tpath, 0, sizeof(tpath)); +- perf_exe(tpath, sizeof(tpath)); +- +- bfdf = bfd_openr(tpath, NULL); +- if (bfdf == NULL) +- abort(); +- +- if (!bfd_check_format(bfdf, bfd_object)) +- abort(); +- +- s = open_memstream(&buf, &buf_size); +- if (!s) { +- ret = errno; +- goto out; +- } +- init_disassemble_info_compat(&info, s, +- (fprintf_ftype) fprintf, +- fprintf_styled); +- info.arch = bfd_get_arch(bfdf); +- info.mach = bfd_get_mach(bfdf); +- +- info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env, +- dso->bpf_prog.id); +- if (!info_node) { +- ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF; +- goto out; +- } +- info_linear = info_node->info_linear; +- sub_id = dso->bpf_prog.sub_id; +- +- info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns); +- info.buffer_length = info_linear->info.jited_prog_len; +- +- if (info_linear->info.nr_line_info) +- prog_linfo = bpf_prog_linfo__new(&info_linear->info); +- +- if (info_linear->info.btf_id) { +- struct btf_node *node; +- +- node = perf_env__find_btf(dso->bpf_prog.env, +- info_linear->info.btf_id); +- if (node) +- btf = btf__new((__u8 *)(node->data), +- node->data_size); +- } +- +- disassemble_init_for_target(&info); +- +-#ifdef DISASM_FOUR_ARGS_SIGNATURE +- disassemble = disassembler(info.arch, +- bfd_big_endian(bfdf), +- info.mach, +- bfdf); +-#else +- disassemble = disassembler(bfdf); +-#endif +- if (disassemble == NULL) +- abort(); +- +- fflush(s); +- do { +- const struct bpf_line_info *linfo = NULL; +- struct disasm_line *dl; +- size_t prev_buf_size; +- const char *srcline; +- u64 addr; +- +- addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id]; +- count = disassemble(pc, &info); +- +- if (prog_linfo) +- linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo, +- addr, sub_id, +- nr_skip); +- +- if (linfo && btf) { +- srcline = btf__name_by_offset(btf, linfo->line_off); +- nr_skip++; +- } else +- srcline = NULL; +- +- fprintf(s, "\n"); +- prev_buf_size = buf_size; +- fflush(s); +- +- if (!annotate_opts.hide_src_code && srcline) { +- args->offset = -1; +- args->line = strdup(srcline); +- args->line_nr = 0; +- args->fileloc = NULL; +- args->ms.sym = sym; +- dl = disasm_line__new(args); +- if (dl) { +- annotation_line__add(&dl->al, +- ¬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 <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, ++ ¬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/dev-util/perf/files/perf-6.10-expr.patch b/dev-util/perf/files/perf-6.10-expr.patch new file mode 100644 index 000000000000..b4220a062f61 --- /dev/null +++ b/dev-util/perf/files/perf-6.10-expr.patch @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000000..57b298d8ccd7 --- /dev/null +++ b/dev-util/perf/files/perf-6.10.3-bpf-capstone.patch @@ -0,0 +1,455 @@ +From b382a433e0178d3840a8fb4b05ba3dbecba075fa Mon Sep 17 00:00:00 2001 +From: Guilherme Amadio <amadio@gentoo.org> +Date: Tue, 6 Aug 2024 11:34:05 +0200 +Subject: [PATCH] Fix bug #936439. Replay of upstream commit onto v6.10.3. + +Signed-off-by: Guilherme Amadio <amadio@gentoo.org> +--- + tools/perf/util/Build | 1 + + tools/perf/util/disasm.c | 187 +-------------------------------- + tools/perf/util/disasm_bpf.c | 196 +++++++++++++++++++++++++++++++++++ + tools/perf/util/disasm_bpf.h | 12 +++ + 4 files changed, 210 insertions(+), 186 deletions(-) + create mode 100644 tools/perf/util/disasm_bpf.c + create mode 100644 tools/perf/util/disasm_bpf.h + +diff --git a/tools/perf/util/Build b/tools/perf/util/Build +index da64efd8718f..384c4e06b838 100644 +--- a/tools/perf/util/Build ++++ b/tools/perf/util/Build +@@ -13,6 +13,7 @@ perf-y += copyfile.o + perf-y += ctype.o + perf-y += db-export.o + perf-y += disasm.o ++perf-y += disasm_bpf.o + perf-y += env.o + perf-y += event.o + perf-y += evlist.o +diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c +index e10558b79504..766cbd005f32 100644 +--- a/tools/perf/util/disasm.c ++++ b/tools/perf/util/disasm.c +@@ -15,6 +15,7 @@ + #include "build-id.h" + #include "debug.h" + #include "disasm.h" ++#include "disasm_bpf.h" + #include "dso.h" + #include "env.h" + #include "evsel.h" +@@ -1164,192 +1165,6 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil + return 0; + } + +-#if defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT) +-#define PACKAGE "perf" +-#include <bfd.h> +-#include <dis-asm.h> +-#include <bpf/bpf.h> +-#include <bpf/btf.h> +-#include <bpf/libbpf.h> +-#include <linux/btf.h> +-#include <tools/dis-asm-compat.h> +- +-#include "bpf-event.h" +-#include "bpf-utils.h" +- +-static int symbol__disassemble_bpf(struct symbol *sym, +- struct annotate_args *args) +-{ +- struct annotation *notes = symbol__annotation(sym); +- struct bpf_prog_linfo *prog_linfo = NULL; +- struct bpf_prog_info_node *info_node; +- int len = sym->end - sym->start; +- disassembler_ftype disassemble; +- struct map *map = args->ms.map; +- struct perf_bpil *info_linear; +- struct disassemble_info info; +- struct dso *dso = map__dso(map); +- int pc = 0, count, sub_id; +- struct btf *btf = NULL; +- char tpath[PATH_MAX]; +- size_t buf_size; +- int nr_skip = 0; +- char *buf; +- bfd *bfdf; +- int ret; +- FILE *s; +- +- if (dso__binary_type(dso) != DSO_BINARY_TYPE__BPF_PROG_INFO) +- return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE; +- +- pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__, +- sym->name, sym->start, sym->end - sym->start); +- +- memset(tpath, 0, sizeof(tpath)); +- perf_exe(tpath, sizeof(tpath)); +- +- bfdf = bfd_openr(tpath, NULL); +- if (bfdf == NULL) +- abort(); +- +- if (!bfd_check_format(bfdf, bfd_object)) +- abort(); +- +- s = open_memstream(&buf, &buf_size); +- if (!s) { +- ret = errno; +- goto out; +- } +- init_disassemble_info_compat(&info, s, +- (fprintf_ftype) fprintf, +- fprintf_styled); +- info.arch = bfd_get_arch(bfdf); +- info.mach = bfd_get_mach(bfdf); +- +- info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env, +- dso__bpf_prog(dso)->id); +- if (!info_node) { +- ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF; +- goto out; +- } +- info_linear = info_node->info_linear; +- sub_id = dso__bpf_prog(dso)->sub_id; +- +- info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns); +- info.buffer_length = info_linear->info.jited_prog_len; +- +- if (info_linear->info.nr_line_info) +- prog_linfo = bpf_prog_linfo__new(&info_linear->info); +- +- if (info_linear->info.btf_id) { +- struct btf_node *node; +- +- node = perf_env__find_btf(dso__bpf_prog(dso)->env, +- info_linear->info.btf_id); +- if (node) +- btf = btf__new((__u8 *)(node->data), +- node->data_size); +- } +- +- disassemble_init_for_target(&info); +- +-#ifdef DISASM_FOUR_ARGS_SIGNATURE +- disassemble = disassembler(info.arch, +- bfd_big_endian(bfdf), +- info.mach, +- bfdf); +-#else +- disassemble = disassembler(bfdf); +-#endif +- if (disassemble == NULL) +- abort(); +- +- fflush(s); +- do { +- const struct bpf_line_info *linfo = NULL; +- struct disasm_line *dl; +- size_t prev_buf_size; +- const char *srcline; +- u64 addr; +- +- addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id]; +- count = disassemble(pc, &info); +- +- if (prog_linfo) +- linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo, +- addr, sub_id, +- nr_skip); +- +- if (linfo && btf) { +- srcline = btf__name_by_offset(btf, linfo->line_off); +- nr_skip++; +- } else +- srcline = NULL; +- +- fprintf(s, "\n"); +- prev_buf_size = buf_size; +- fflush(s); +- +- if (!annotate_opts.hide_src_code && srcline) { +- args->offset = -1; +- args->line = strdup(srcline); +- args->line_nr = 0; +- args->fileloc = NULL; +- args->ms.sym = sym; +- dl = disasm_line__new(args); +- if (dl) { +- annotation_line__add(&dl->al, +- ¬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 <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, ++ ¬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/dev-util/perf/perf-6.8.ebuild b/dev-util/perf/perf-6.10.4.ebuild index 71d7382d4545..df1101c9dc14 100644 --- a/dev-util/perf/perf-6.8.ebuild +++ b/dev-util/perf/perf-6.10.4.ebuild @@ -3,7 +3,7 @@ EAPI=8 -PYTHON_COMPAT=( python3_{10..12} ) +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" @@ -33,8 +33,8 @@ S="${S_K}/tools/perf" LICENSE="GPL-2" SLOT="0" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~x86 ~amd64-linux ~x86-linux" -IUSE="abi_mips_o32 abi_mips_n32 abi_mips_n64 audit babeltrace big-endian bpf caps crypt debug +doc gtk java libpfm +libtraceevent +libtracefs lzma numa perl python slang systemtap tcmalloc unwind zstd" +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} @@ -64,12 +64,11 @@ RDEPEND=" dev-libs/libbpf dev-util/bpftool dev-util/pahole - ) - caps? ( sys-libs/libcap ) - bpf? ( 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:* ) @@ -140,8 +139,10 @@ pkg_setup() { # 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/*/lib" "arch/*/tools" + 'arch/*/include/*' 'arch/*/lib/*' 'arch/*/tools/*' 'include/*' + 'kernel/bpf/*' 'lib/*' 'scripts/*' 'tools/arch/*' 'tools/bpf/*' + 'tools/build/*' 'tools/include/*' 'tools/lib/*' 'tools/perf/*' + 'tools/scripts/*' ) # We expect the tar implementation to support the -j option (both @@ -153,9 +154,10 @@ src_unpack() { if [[ -n ${LINUX_PATCH} ]] ; then eshopts_push -o noglob ebegin "Filtering partial source patch" - filterdiff -p1 ${paths[@]/#/-i } -z "${DISTDIR}"/${LINUX_PATCH} \ - > ${P}.patch + xzcat "${DISTDIR}"/${LINUX_PATCH} | filterdiff -p1 ${paths[@]/#/-i} > ${P}.patch + assert -n "Unpacking to ${P} from ${DISTDIR}/${LINUX_PATCH} failed" eend $? || die "filterdiff failed" + test -s ${P}.patch || die "patch is empty?!" eshopts_pop fi @@ -177,7 +179,8 @@ src_prepare() { pushd "${S_K}" >/dev/null || die eapply "${FILESDIR}"/perf-6.4-libtracefs.patch - eapply "${FILESDIR}"/perf-6.7-expr.patch + eapply "${FILESDIR}"/perf-6.10-expr.patch + eapply "${FILESDIR}"/perf-6.10.3-bpf-capstone.patch popd || die # Drop some upstream too-developer-oriented flags and fix the @@ -248,6 +251,7 @@ perf_make() { 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}" @@ -262,6 +266,7 @@ perf_make() { feature-gtk2-infobar=$(usex gtk 1 "") NO_AUXTRACE= NO_BACKTRACE= + NO_CAPSTONE=$(puse capstone) NO_DEMANGLE= NO_JEVENTS=$(puse python) NO_JVMTI=$(puse java) @@ -281,11 +286,13 @@ perf_make() { 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" diff --git a/dev-util/perf/perf-6.9.ebuild b/dev-util/perf/perf-6.10.ebuild index b371ff4a861a..7668df3a67d1 100644 --- a/dev-util/perf/perf-6.9.ebuild +++ b/dev-util/perf/perf-6.10.ebuild @@ -3,7 +3,7 @@ EAPI=8 -PYTHON_COMPAT=( python3_{10..12} ) +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" @@ -33,7 +33,7 @@ S="${S_K}/tools/perf" LICENSE="GPL-2" SLOT="0" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~mips ~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=" @@ -176,7 +176,8 @@ src_prepare() { pushd "${S_K}" >/dev/null || die eapply "${FILESDIR}"/perf-6.4-libtracefs.patch - eapply "${FILESDIR}"/perf-6.7-expr.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 @@ -247,6 +248,7 @@ perf_make() { 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}" diff --git a/dev-util/perf/perf-6.3.ebuild b/dev-util/perf/perf-6.3.ebuild index 80e9fe676047..9d36b0ce8ca7 100644 --- a/dev-util/perf/perf-6.3.ebuild +++ b/dev-util/perf/perf-6.3.ebuild @@ -33,7 +33,7 @@ S="${S_K}/tools/perf" LICENSE="GPL-2" SLOT="0" -KEYWORDS="amd64 arm arm64 ~mips ppc ppc64 ~riscv x86 ~amd64-linux ~x86-linux" +KEYWORDS="amd64 arm arm64 ppc ppc64 ~riscv x86 ~amd64-linux ~x86-linux" IUSE="audit babeltrace clang crypt debug +doc gtk java libpfm lzma numa perl python slang systemtap unwind zlib zstd" REQUIRED_USE="${PYTHON_REQUIRED_USE}" @@ -196,6 +196,7 @@ perf_make() { emake V=1 VF=1 \ HOSTCC="$(tc-getBUILD_CC)" HOSTLD="$(tc-getBUILD_LD)" \ CC="$(tc-getCC)" CXX="$(tc-getCXX)" AR="$(tc-getAR)" LD="$(tc-getLD)" NM="$(tc-getNM)" \ + CLANG="${CHOST}-clang" \ PKG_CONFIG="$(tc-getPKG_CONFIG)" \ prefix="${EPREFIX}/usr" bindir_relative="bin" \ tipdir="share/doc/${PF}" \ diff --git a/dev-util/perf/perf-6.7.ebuild b/dev-util/perf/perf-6.7.ebuild index 5d0dd06b320d..99074877b2f2 100644 --- a/dev-util/perf/perf-6.7.ebuild +++ b/dev-util/perf/perf-6.7.ebuild @@ -33,7 +33,7 @@ S="${S_K}/tools/perf" LICENSE="GPL-2" SLOT="0" -KEYWORDS="~alpha amd64 arm arm64 ~loong ~mips 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 big-endian bpf caps crypt debug +doc gtk java libpfm +libtraceevent +libtracefs lzma numa perl python slang systemtap tcmalloc unwind zstd" REQUIRED_USE=" @@ -247,6 +247,7 @@ perf_make() { 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}" |