diff options
Diffstat (limited to 'dev-util/perf')
-rw-r--r-- | dev-util/perf/Manifest | 14 | ||||
-rw-r--r-- | dev-util/perf/files/perf-6.10-bpf-capstone.patch | 456 | ||||
-rw-r--r-- | dev-util/perf/files/perf-6.10.3-bpf-capstone.patch | 455 | ||||
-rw-r--r-- | dev-util/perf/perf-6.10.3.ebuild (renamed from dev-util/perf/perf-6.9.ebuild) | 17 | ||||
-rw-r--r-- | dev-util/perf/perf-6.10.ebuild | 2 | ||||
-rw-r--r-- | dev-util/perf/perf-6.3.ebuild | 1 | ||||
-rw-r--r-- | dev-util/perf/perf-6.7.ebuild | 1 | ||||
-rw-r--r-- | dev-util/perf/perf-6.8.ebuild | 338 |
8 files changed, 933 insertions, 351 deletions
diff --git a/dev-util/perf/Manifest b/dev-util/perf/Manifest index 56dce826dceb..a95831402e1f 100644 --- a/dev-util/perf/Manifest +++ b/dev-util/perf/Manifest @@ -1,16 +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.10.ebuild 9219 BLAKE2B 08efab0eaaeb0cc12d490dea13d4ae5e5b7e6ffe506bb9614d433ec8c1cfdaef54648bf36bd5026998c2301cd63ba4437c0bdf73ce59abd795a52dcb9aaa7aeb SHA512 dacc8ff9d4f82c5964360d2447de00b68f8be82491c7f421b749b3d9a8a9e870efa61d80a01eaa59e207765bbc6a0c9fedc6e65db4a9d93ddf98a692d2daf073 -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.3.xz 252260 BLAKE2B 65acf62ff3e326d5ebb9f47067b626a25295fde2057531cf43e537601c42b0110419c0d6eee8c7c24e5d6d88ecf30e9b76d516efb925c91817504c52780b4df1 SHA512 28ad0de2086ca4b59637f8a7c69c6f5436b53235bf52c9ee18f428748c773780c54606a5c96d71614cadd49c707a8bb11843a7393da078e15d7f554244bfb9ca +EBUILD perf-6.10.3.ebuild 9475 BLAKE2B d1e1e0eb11bfcb7ed02c00761ad21bdf377fadb0f283fa100c247bb476d0eef592c823796b3a56a3e64fb981482d5a3795d1102b0b22c5700dee3a6a35e10a9a SHA512 835d88cd1fda72f99430cbd78d9162db5b66f511c727b7f34cfdb4fb5be44764b62abe205d148e6b3a74e0464380971e86ad24605b704eab86b5bad75cae5180 +EBUILD perf-6.10.ebuild 9295 BLAKE2B a20ab3cc49bf4d646cf6047c920bd88396d8c028bf367c200382a8de3c8b90fc684a6dead227e020c85a4a32e708c2e6664522499242cd2b21eecc349535f5f3 SHA512 644ea690c8753b8ba03372c7ecfa5c8ee246dfbab04f7839ce9384f31850d9482fcc8434b79455365f26f7c70f814ed722f5a6614d196a2f486cd6fe77ca7a27 +EBUILD perf-6.3.ebuild 7885 BLAKE2B 8064f00011eaf9fbba45781a264d1f3559724e59cd246d9994fda95ecfd0d3cc58dbd42929c4a771cb3933ccd0f6757664b863e8399c3636ca9f032911b2b22f SHA512 ba5453c708de6723d1593c450864ad5b979cbbfc62fc6be117dd5c4513482bee4bae8dd89ffe0138e7436d77a466a1c401981b01ba66d503a95abf4b75a825b8 +EBUILD perf-6.7.ebuild 9095 BLAKE2B f18c9a1bff929d6dc56840ff0561e5a935f8c3e20567c1bc73a755c9fa8c762077fc7dcc5ae829eacda6267fcc89ead28eb8713567a0eef84d810e6b399fdb5a SHA512 b16a36370d306477722d8fe7f15245e6e52fad4072583e7baf360937d0f8591add503faf5cf392871fe2f8406aad3f365e4fbe22939869c155e0e709be8c5830 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.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.9.ebuild b/dev-util/perf/perf-6.10.3.ebuild index b371ff4a861a..4c50de412173 100644 --- a/dev-util/perf/perf-6.9.ebuild +++ b/dev-util/perf/perf-6.10.3.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" @@ -139,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/*/include" "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 @@ -152,8 +154,9 @@ 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 + test -s ${P}.patch + assert -n "Unpacking to ${P} from ${DISTDIR}/${LINUX_PATCH} failed" eend $? || die "filterdiff failed" eshopts_pop fi @@ -176,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 @@ -247,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}" diff --git a/dev-util/perf/perf-6.10.ebuild b/dev-util/perf/perf-6.10.ebuild index 3a49940473e4..c26fcdac95df 100644 --- a/dev-util/perf/perf-6.10.ebuild +++ b/dev-util/perf/perf-6.10.ebuild @@ -176,6 +176,7 @@ src_prepare() { 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 @@ -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..63546a59a6ca 100644 --- a/dev-util/perf/perf-6.3.ebuild +++ b/dev-util/perf/perf-6.3.ebuild @@ -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..f07ddebfbf7d 100644 --- a/dev-util/perf/perf-6.7.ebuild +++ b/dev-util/perf/perf-6.7.ebuild @@ -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}" diff --git a/dev-util/perf/perf-6.8.ebuild b/dev-util/perf/perf-6.8.ebuild deleted file mode 100644 index 71d7382d4545..000000000000 --- a/dev-util/perf/perf-6.8.ebuild +++ /dev/null @@ -1,338 +0,0 @@ -# Copyright 1999-2024 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -PYTHON_COMPAT=( python3_{10..12} ) -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 ~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" - -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 - ) - caps? ( sys-libs/libcap ) - bpf? ( - sys-devel/clang:= - sys-devel/llvm:= - ) - 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/*/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.7-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)" - 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_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_SLANG=$(puse slang) - NO_LZMA=$(puse lzma) - NO_ZLIB= - TCMALLOC=$(usex tcmalloc 1 "") - WERROR=0 - 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 -} |