From nobody Tue Oct 7 00:22:43 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FEA71DF26B; Wed, 16 Jul 2025 05:01:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642061; cv=none; b=emZusaXtviDQts9NfcHYZZvCVqYEWyC5KIXikyAABgH6lphom1XvgIm3DYRzWC92WxosJ4b+EtZYoGNmSia5Q+trCcyOBVDQDP1kvaR+mc+FEEvXyNYy1KV3aSHxF/hECQTxEoClf0inCim2YoCeQTu6z7q957dgpQMNSUEinrY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642061; c=relaxed/simple; bh=frsBlwzfg3YvwYLTu9V0tNMu/cvvgLj6y79sNcrw990=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b9HzBVZIuVjKoWPm3/iwWNYvL8EkvcIb/rWt6r4xhESV3PjyQD8QEVqgMF8P4GlIysdWCZ+ha+qXoFdTglWONTZLB3b8L0VD+wLCe0WXlDGGsXG7VaNEfeBh7oVL9hJ+lNWvtM3KzPpopLjnlN2ErbTbZ6wfgeorUdmi7M9BAzU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NNZOMb8t; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NNZOMb8t" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BDA15C4CEF9; Wed, 16 Jul 2025 05:01:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642061; bh=frsBlwzfg3YvwYLTu9V0tNMu/cvvgLj6y79sNcrw990=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NNZOMb8t9iTRzIon83TGHI3QZNHY/JYZFVb2VRZ1wonh7aDD8w3bwjAxGJ4YrnevV KVTrP9CwJ+f5HxUSJT5u5rm2SsXoLcRJp7xmNTbveBOyJqzjda8dm84huuqD09G+n7 6af2DEKyM68uQ9orZ4SGC3o2q92KdvrMnMe6/HCkxn3OoBvQiZIyLsl/uUNPHxASAd f7aEDpCyfLY1mXHMuNgwSi2H5UWVPfMii/DFyuF1u2hcqzs5iGlOIh/n3CKqKVTrdx w0tOlZw8/gYow3mY+wpekjnzdFLo1ijqFDoUuoJc2wp8YQeYsdSU7G75krtfldPh7y DpMJex1igUN3w== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 1/8] perf annotate: Rename to __hist_entry__tui_annotate() Date: Tue, 15 Jul 2025 22:00:47 -0700 Message-ID: <20250716050054.14130-2-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are three different but similar functions for annotation on TUI. Rename it to __hist_entry__tui_annotate() and make sure it passes 'he'. It's not used for now but it'll be needed for later use. Also remove map_symbol__tui_annotate() which was a simple wrapper. Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/ui/browsers/annotate.c | 17 +++++++---------- tools/perf/ui/browsers/hists.c | 2 +- tools/perf/util/annotate.h | 12 ------------ tools/perf/util/hist.h | 12 +++++++----- 4 files changed, 15 insertions(+), 28 deletions(-) diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/ann= otate.c index 183902dac042ecb0..28ef146f29e8e742 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -27,6 +27,7 @@ struct annotate_browser { struct rb_node *curr_hot; struct annotation_line *selection; struct arch *arch; + struct hist_entry *he; bool searching_backwards; char search_bf[128]; }; @@ -557,7 +558,7 @@ static bool annotate_browser__callq(struct annotate_bro= wser *browser, target_ms.map =3D ms->map; target_ms.sym =3D dl->ops.target.sym; annotation__unlock(notes); - symbol__tui_annotate(&target_ms, evsel, hbt); + __hist_entry__tui_annotate(browser->he, &target_ms, evsel, hbt); sym_title(ms->sym, ms->map, title, sizeof(title), annotate_opts.percent_t= ype); ui_browser__show_title(&browser->b, title); return true; @@ -1032,12 +1033,6 @@ static int annotate_browser__run(struct annotate_bro= wser *browser, return key; } =20 -int map_symbol__tui_annotate(struct map_symbol *ms, struct evsel *evsel, - struct hist_browser_timer *hbt) -{ - return symbol__tui_annotate(ms, evsel, hbt); -} - int hist_entry__tui_annotate(struct hist_entry *he, struct evsel *evsel, struct hist_browser_timer *hbt) { @@ -1046,11 +1041,12 @@ int hist_entry__tui_annotate(struct hist_entry *he,= struct evsel *evsel, SLang_init_tty(0, 0, 0); SLtty_set_suspend_state(true); =20 - return map_symbol__tui_annotate(&he->ms, evsel, hbt); + return __hist_entry__tui_annotate(he, &he->ms, evsel, hbt); } =20 -int symbol__tui_annotate(struct map_symbol *ms, struct evsel *evsel, - struct hist_browser_timer *hbt) +int __hist_entry__tui_annotate(struct hist_entry *he, struct map_symbol *m= s, + struct evsel *evsel, + struct hist_browser_timer *hbt) { struct symbol *sym =3D ms->sym; struct annotation *notes =3D symbol__annotation(sym); @@ -1064,6 +1060,7 @@ int symbol__tui_annotate(struct map_symbol *ms, struc= t evsel *evsel, .priv =3D ms, .use_navkeypressed =3D true, }, + .he =3D he, }; struct dso *dso; int ret =3D -1, err; diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index d26b925e3d7f46af..55455c49faf01891 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c @@ -2484,8 +2484,8 @@ do_annotate(struct hist_browser *browser, struct popu= p_action *act) else evsel =3D hists_to_evsel(browser->hists); =20 - err =3D map_symbol__tui_annotate(&act->ms, evsel, browser->hbt); he =3D hist_browser__selected_entry(browser); + err =3D __hist_entry__tui_annotate(he, &act->ms, evsel, browser->hbt); /* * offer option to annotate the other branch source or target * (if they exists) when returning from annotate diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h index 8b5131d257b01e3e..0f640e4871744262 100644 --- a/tools/perf/util/annotate.h +++ b/tools/perf/util/annotate.h @@ -471,18 +471,6 @@ int hist_entry__annotate_printf(struct hist_entry *he,= struct evsel *evsel); int hist_entry__tty_annotate(struct hist_entry *he, struct evsel *evsel); int hist_entry__tty_annotate2(struct hist_entry *he, struct evsel *evsel); =20 -#ifdef HAVE_SLANG_SUPPORT -int symbol__tui_annotate(struct map_symbol *ms, struct evsel *evsel, - struct hist_browser_timer *hbt); -#else -static inline int symbol__tui_annotate(struct map_symbol *ms __maybe_unuse= d, - struct evsel *evsel __maybe_unused, - struct hist_browser_timer *hbt __maybe_unused) -{ - return 0; -} -#endif - void annotation_options__init(void); void annotation_options__exit(void); =20 diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index c64254088fc77246..11ae738772ca4f61 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h @@ -712,8 +712,9 @@ struct block_hist { #include "../ui/keysyms.h" void attr_to_script(char *buf, struct perf_event_attr *attr); =20 -int map_symbol__tui_annotate(struct map_symbol *ms, struct evsel *evsel, - struct hist_browser_timer *hbt); +int __hist_entry__tui_annotate(struct hist_entry *he, struct map_symbol *m= s, + struct evsel *evsel, + struct hist_browser_timer *hbt); =20 int hist_entry__tui_annotate(struct hist_entry *he, struct evsel *evsel, struct hist_browser_timer *hbt); @@ -741,9 +742,10 @@ int evlist__tui_browse_hists(struct evlist *evlist __m= aybe_unused, { return 0; } -static inline int map_symbol__tui_annotate(struct map_symbol *ms __maybe_u= nused, - struct evsel *evsel __maybe_unused, - struct hist_browser_timer *hbt __maybe_unused) +static inline int __hist_entry__tui_annotate(struct hist_entry *he __maybe= _unused, + struct map_symbol *ms __maybe_unused, + struct evsel *evsel __maybe_unused, + struct hist_browser_timer *hbt __maybe_unused) { return 0; } --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 097D427144B; Wed, 16 Jul 2025 05:01:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642062; cv=none; b=f8eO07FttiyQqgdSGvrt6JSNTI6DXq4yjHsS4OlsjIj8rNUBGoSet78TPuj8Fszp5Oy9OFteWxMjOuhAlzYs4jaVmENBtbcETZ+WeScurBmgzsNMy///jiP62QLreyMoPS10UXTLFSElgdq3fBBcerPe5UdGcZU4AVjuM+M0uTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642062; c=relaxed/simple; bh=ZR4FlTTBffrOf8yc2kOBjPOIFcxPv32gKjOEK9beR0w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DMBjWFJHAGfxyIYNDhyijyQwcj88YJYjYErAl5QE6pExLHQsdpU56MJW2XVjBBsfC4JSK/C75PB8mrjixh83xS5JsJgHgoHvM3CxaaODwUwBxHHtaB8ZU2J7wjvXZhUW69tX2MEuieUYDPZlCGZSHcBmi2dhEckcZKO8LJcTdFA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JJyuw8/P; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JJyuw8/P" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3EDEDC4CEF6; Wed, 16 Jul 2025 05:01:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642061; bh=ZR4FlTTBffrOf8yc2kOBjPOIFcxPv32gKjOEK9beR0w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JJyuw8/PQQXfN9K4UAZ4I5H3HFre3mW78m8mHsl30bXVIOdxlEPWG4T6PLQulBVZX GrvUf28ucLiJzwrZsQyetKUFOseC3qIqIsFNJ7Lh3Q1fRXFASetFzVxibp/QblFfut so5M7temQVTjCbJvvbjDNOMKJ0+Gfsr6zz5Ci2HFHo9ej7nkzuXOsQaFFa52WSkJEP NmsT5+CsrlxZJbW7lKZqW/66mcT5EuFiLOMlaT6UQajUBxvptQ8GwwvD48oLHTqzpx X4b7td0rbX5iVNuVNbcsYVetoyxVnqVCZaipMpxdzwnE1Qg1C0S+nkdaUA8VQDJhD5 jf+zUM7HnxJdA== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 2/8] perf annotate: Remove __annotation_line__write() Date: Tue, 15 Jul 2025 22:00:48 -0700 Message-ID: <20250716050054.14130-3-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Get rid of the internal function and convert function arguments into local variables if they are used more than once. Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/util/annotate.c | 46 ++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 0dd475a744b6dfac..69ee83052396b15e 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -1935,24 +1935,26 @@ int annotation_br_cntr_entry(char **str, int br_cnt= r_nr, return -ENOMEM; } =20 -static void __annotation_line__write(struct annotation_line *al, struct an= notation *notes, - bool first_line, bool current_entry, bool change_color, int width, - void *obj, unsigned int percent_type, - int (*obj__set_color)(void *obj, int color), - void (*obj__set_percent_color)(void *obj, double percent, bool cu= rrent), - int (*obj__set_jumps_percent_color)(void *obj, int nr, bool curr= ent), - void (*obj__printf)(void *obj, const char *fmt, ...), - void (*obj__write_graph)(void *obj, int graph)) - -{ - double percent_max =3D annotation_line__max_percent(al, percent_type); - int pcnt_width =3D annotation__pcnt_width(notes), - cycles_width =3D annotation__cycles_width(notes); +void annotation_line__write(struct annotation_line *al, struct annotation = *notes, + struct annotation_write_ops *wops) +{ + bool current_entry =3D wops->current_entry; + bool change_color =3D wops->change_color; + double percent_max =3D annotation_line__max_percent(al, annotate_opts.per= cent_type); + int width =3D wops->width; + int pcnt_width =3D annotation__pcnt_width(notes); + int cycles_width =3D annotation__cycles_width(notes); bool show_title =3D false; char bf[256]; int printed; - - if (first_line && (al->offset =3D=3D -1 || percent_max =3D=3D 0.0)) { + void *obj =3D wops->obj; + int (*obj__set_color)(void *obj, int color) =3D wops->set_color; + void (*obj__set_percent_color)(void *obj, double percent, bool current) = =3D wops->set_percent_color; + int (*obj__set_jumps_percent_color)(void *obj, int nr, bool current) =3D= wops->set_jumps_percent_color; + void (*obj__printf)(void *obj, const char *fmt, ...) =3D wops->printf; + void (*obj__write_graph)(void *obj, int graph) =3D wops->write_graph; + + if (wops->first_line && (al->offset =3D=3D -1 || percent_max =3D=3D 0.0))= { if (notes->branch && al->cycles) { if (al->cycles->ipc =3D=3D 0.0 && al->cycles->avg =3D=3D 0) show_title =3D true; @@ -1966,7 +1968,8 @@ static void __annotation_line__write(struct annotatio= n_line *al, struct annotati for (i =3D 0; i < al->data_nr; i++) { double percent; =20 - percent =3D annotation_data__percent(&al->data[i], percent_type); + percent =3D annotation_data__percent(&al->data[i], + annotate_opts.percent_type); =20 obj__set_percent_color(obj, percent, current_entry); if (symbol_conf.show_total_period) { @@ -2115,17 +2118,6 @@ static void __annotation_line__write(struct annotati= on_line *al, struct annotati =20 } =20 -void annotation_line__write(struct annotation_line *al, struct annotation = *notes, - struct annotation_write_ops *wops) -{ - __annotation_line__write(al, notes, wops->first_line, wops->current_entry, - wops->change_color, wops->width, wops->obj, - annotate_opts.percent_type, - wops->set_color, wops->set_percent_color, - wops->set_jumps_percent_color, wops->printf, - wops->write_graph); -} - int symbol__annotate2(struct map_symbol *ms, struct evsel *evsel, struct arch **parch) { --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34112274FE0; Wed, 16 Jul 2025 05:01:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642062; cv=none; b=oHoKPPrcBHebHB2h9lNvNr9e0nItUovmbwWAefA/R81Lk2IEXWd4Knh7dUlZ2wIL/+XwFu89x444X0YgmKX4oX+418sPiDBwpa8m1uuyN1nT8qKCETAIS4wqts89PNtivI/vf7n4AGZDi7siqiah7YugesvJTKDSpmXsEoqeKRQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642062; c=relaxed/simple; bh=kou3VfhcOpB9txR/N43AVmfiCtxMJG8KJTrwCzqrdXs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NlOjLDGnr8225Ge+2D2Rkp37PdxEv4W4pcc9MNYtxM68k0F1UgWyvwkXonKRfs/RccuiR6y9vHDmSKzWSuAA6cyj1kRfrXZ46eZ8JYUJDp5XeC5u6j25zfwuuHAViRAI9WZ9VeL3st2AfI0uADZK2hOa2uOcRFmdGU67takGmqM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G39D6rkA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="G39D6rkA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B841FC4CEF9; Wed, 16 Jul 2025 05:01:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642062; bh=kou3VfhcOpB9txR/N43AVmfiCtxMJG8KJTrwCzqrdXs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G39D6rkALhFRsyfb6pUI6drkzfLtKzACsPfW0AjE2tXQBVt6JnHSQLZ5zVBpRPJx5 CFfU+7V3u/WMbDev0EfOJtgcdtwJsocf0eMRpwSmwwFOyLLBA0+hd1ppN0jNR5E9gt xKuFLA0lTpq0CaEZb0II+PKLPGJclfy0aGblJOhuoCHvVm96EROTPs09HpUyCKCbhv NktzBvuad/rwgHP5BswHA7tEnHqavTAJr7jUPpNHTgaAbjWt/oxSOaUv73XoFfvYwS xlr079E89dyhsEjBKvNF4pJN1bdma20pH1l5StpYae0wgvXiIpn7HPJzUU/W8BBSZX 6OGDDXKE8s8tQ== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 3/8] perf annotate: Pass annotation_print_data to annotation_line__write() Date: Tue, 15 Jul 2025 22:00:49 -0700 Message-ID: <20250716050054.14130-4-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It will be used for data type display later. Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/ui/browsers/annotate.c | 13 ++++++++++-- tools/perf/util/annotate.c | 35 +++++++++++++++++-------------- tools/perf/util/annotate.h | 15 +++++++++++-- 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/ann= otate.c index 28ef146f29e8e742..23bea5b165774ae7 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -28,6 +28,8 @@ struct annotate_browser { struct annotation_line *selection; struct arch *arch; struct hist_entry *he; + struct debuginfo *dbg; + struct evsel *evsel; bool searching_backwards; char search_bf[128]; }; @@ -108,12 +110,18 @@ static void annotate_browser__write(struct ui_browser= *browser, void *entry, int .printf =3D annotate_browser__printf, .write_graph =3D annotate_browser__write_graph, }; + struct annotation_print_data apd =3D { + .he =3D ab->he, + .arch =3D ab->arch, + .evsel =3D ab->evsel, + .dbg =3D ab->dbg, + }; =20 /* The scroll bar isn't being used */ if (!browser->navkeypressed) ops.width +=3D 1; =20 - annotation_line__write(al, notes, &ops); + annotation_line__write(al, notes, &ops, &apd); =20 if (ops.current_entry) ab->selection =3D al; @@ -976,7 +984,7 @@ static int annotate_browser__run(struct annotate_browse= r *browser, continue; } case 'P': - map_symbol__annotation_dump(ms, evsel); + map_symbol__annotation_dump(ms, evsel, browser->he); continue; case 't': if (symbol_conf.show_total_period) { @@ -1061,6 +1069,7 @@ int __hist_entry__tui_annotate(struct hist_entry *he,= struct map_symbol *ms, .use_navkeypressed =3D true, }, .he =3D he, + .evsel =3D evsel, }; struct dso *dso; int ret =3D -1, err; diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 69ee83052396b15e..c21152710148b68c 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -765,15 +765,6 @@ __hist_entry__get_data_type(struct hist_entry *he, str= uct arch *arch, struct debuginfo *dbg, struct disasm_line *dl, int *type_offset); =20 -struct annotation_print_data { - struct hist_entry *he; - struct evsel *evsel; - struct arch *arch; - struct debuginfo *dbg; - u64 start; - int addr_fmt_width; -}; - static int annotation_line__print(struct annotation_line *al, struct annotation_print= _data *apd, struct annotation_options *opts, int printed, @@ -1230,7 +1221,6 @@ int hist_entry__annotate_printf(struct hist_entry *he= , struct evsel *evsel) struct annotation_print_data apd =3D { .he =3D he, .evsel =3D evsel, - .start =3D map__rip_2objdump(map, sym->start), }; int printed =3D 2, queue_len =3D 0; int more =3D 0; @@ -1357,7 +1347,8 @@ static void FILE__write_graph(void *fp, int graph) fputs(s, fp); } =20 -static int symbol__annotate_fprintf2(struct symbol *sym, FILE *fp) +static int symbol__annotate_fprintf2(struct symbol *sym, FILE *fp, + struct annotation_print_data *apd) { struct annotation *notes =3D symbol__annotation(sym); struct annotation_write_ops wops =3D { @@ -1374,7 +1365,7 @@ static int symbol__annotate_fprintf2(struct symbol *s= ym, FILE *fp) list_for_each_entry(al, ¬es->src->source, node) { if (annotation_line__filter(al)) continue; - annotation_line__write(al, notes, &wops); + annotation_line__write(al, notes, &wops, apd); fputc('\n', fp); wops.first_line =3D false; } @@ -1382,13 +1373,18 @@ static int symbol__annotate_fprintf2(struct symbol = *sym, FILE *fp) return 0; } =20 -int map_symbol__annotation_dump(struct map_symbol *ms, struct evsel *evsel) +int map_symbol__annotation_dump(struct map_symbol *ms, struct evsel *evsel, + struct hist_entry *he) { const char *ev_name =3D evsel__name(evsel); char buf[1024]; char *filename; int err =3D -1; FILE *fp; + struct annotation_print_data apd =3D { + .he =3D he, + .evsel =3D evsel, + }; =20 if (asprintf(&filename, "%s.annotation", ms->sym->name) < 0) return -1; @@ -1404,7 +1400,7 @@ int map_symbol__annotation_dump(struct map_symbol *ms= , struct evsel *evsel) =20 fprintf(fp, "%s() %s\nEvent: %s\n\n", ms->sym->name, dso__long_name(map__dso(ms->map)), ev_name); - symbol__annotate_fprintf2(ms->sym, fp); + symbol__annotate_fprintf2(ms->sym, fp, &apd); =20 fclose(fp); err =3D 0; @@ -1656,6 +1652,10 @@ int hist_entry__tty_annotate2(struct hist_entry *he,= struct evsel *evsel) struct symbol *sym =3D ms->sym; struct rb_root source_line =3D RB_ROOT; struct hists *hists =3D evsel__hists(evsel); + struct annotation_print_data apd =3D { + .he =3D he, + .evsel =3D evsel, + }; char buf[1024]; int err; =20 @@ -1678,7 +1678,7 @@ int hist_entry__tty_annotate2(struct hist_entry *he, = struct evsel *evsel) hists__scnprintf_title(hists, buf, sizeof(buf)); fprintf(stdout, "%s, [percent: %s]\n%s() %s\n", buf, percent_type_str(annotate_opts.percent_type), sym->name, dso__long_= name(dso)); - symbol__annotate_fprintf2(sym, stdout); + symbol__annotate_fprintf2(sym, stdout, &apd); =20 annotated_source__purge(symbol__annotation(sym)->src); =20 @@ -1936,7 +1936,8 @@ int annotation_br_cntr_entry(char **str, int br_cntr_= nr, } =20 void annotation_line__write(struct annotation_line *al, struct annotation = *notes, - struct annotation_write_ops *wops) + struct annotation_write_ops *wops, + struct annotation_print_data *apd) { bool current_entry =3D wops->current_entry; bool change_color =3D wops->change_color; @@ -2114,6 +2115,8 @@ void annotation_line__write(struct annotation_line *a= l, struct annotation *notes disasm_line__write(disasm_line(al), notes, obj, bf, sizeof(bf), obj__pri= ntf, obj__write_graph); =20 obj__printf(obj, "%-*s", width - pcnt_width - cycles_width - 3 - printed= , bf); + + (void)apd; } =20 } diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h index 0f640e4871744262..8fad464a870a2b8e 100644 --- a/tools/perf/util/annotate.h +++ b/tools/perf/util/annotate.h @@ -199,8 +199,18 @@ struct annotation_write_ops { void (*write_graph)(void *obj, int graph); }; =20 +struct annotation_print_data { + struct hist_entry *he; + struct evsel *evsel; + struct arch *arch; + struct debuginfo *dbg; + u64 start; + int addr_fmt_width; +}; + void annotation_line__write(struct annotation_line *al, struct annotation = *notes, - struct annotation_write_ops *ops); + struct annotation_write_ops *ops, + struct annotation_print_data *apd); =20 int __annotation__scnprintf_samples_period(struct annotation *notes, char *bf, size_t size, @@ -463,7 +473,8 @@ void symbol__annotate_zero_histogram(struct symbol *sym= , struct evsel *evsel); void symbol__annotate_decay_histogram(struct symbol *sym, struct evsel *ev= sel); void annotated_source__purge(struct annotated_source *as); =20 -int map_symbol__annotation_dump(struct map_symbol *ms, struct evsel *evsel= ); +int map_symbol__annotation_dump(struct map_symbol *ms, struct evsel *evsel, + struct hist_entry *he); =20 bool ui__has_annotation(void); =20 --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F29A4279DB7; Wed, 16 Jul 2025 05:01:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642063; cv=none; b=VynDTkqWOOZjeyzwzfbHm0romaOh2iKzxM6UfclCnqAz2MsU0uc9sC9XtI+Bwucf5B0SB2uxdipVU3T/VIy8D0QZFsIq/2noyGJbGMIypbtH4+MhQoBYV9gutzs4CjiJWTVWMc87GJlgIusUGFQRFUiYAbH+svV34ukXGOtV5Eo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642063; c=relaxed/simple; bh=Bw5Ss/Zw6SAJW9BPY7V2Pck+k/Id1jmEwAakql27frA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e9Juug5ip5BR2VZj29OotxEbG3OJ1UOStedfazsaMX79Mq+b86RKArVPma6f1BNLE8z11Tb/dFXdL11fFnZvjtUvgN+BrBVNn0f2dJlH2bnxKBYs+d2mxzcOTL7wqUtpsxtjXZwZfRlbAPDZchWP4/MsFqrQQMfFxqYNs2hHsGM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hZ8S124k; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hZ8S124k" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3DC8AC4CEFC; Wed, 16 Jul 2025 05:01:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642062; bh=Bw5Ss/Zw6SAJW9BPY7V2Pck+k/Id1jmEwAakql27frA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hZ8S124k99N9EDsEW3U+ZyGlq11Yj0cmMecedSmtjHVn9gZksl4no1d/ztupqJhJ4 NHhStApAaJMGZh9isn1Muy3nteaMK7E6SxYrgkM614apZjuO/ZgN8qgke8oMREnOPk V3BatEV41K9d4IjqhGgr/QQOAHWrCNfb0zIiFRplUGkLUlf658HnTXZznTJ03gExz+ LjcmSNUywhFdZxjZNwPGc+TwA3wXPNbLwVLLlWv+5X0ZwlUfSntTqgMY+FB62ngNa/ LodcpVWnRMepVdzlQo0Jzjkcr5l6S+L/1crnuZVJqJE99fERO/y0FP7c7zFfJ/KSkQ ErKZIFJExlzFA== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 4/8] perf annotate: Simplify width calculation in annotation_line__write() Date: Tue, 15 Jul 2025 22:00:50 -0700 Message-ID: <20250716050054.14130-5-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The width is updated after each part is printed. It can skip the output processing if the total printed size is bigger than the width. No function changes intended. Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/util/annotate.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index c21152710148b68c..d69e406c1bc289cd 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -1993,6 +1993,7 @@ void annotation_line__write(struct annotation_line *a= l, struct annotation *notes symbol_conf.show_nr_samples ? "Samples" : "Percent"); } } + width -=3D pcnt_width; =20 if (notes->branch) { if (al->cycles && al->cycles->ipc) @@ -2056,11 +2057,12 @@ void annotation_line__write(struct annotation_line = *al, struct annotation *notes obj__printf(obj, "%*s", ANNOTATION__AVG_IPC_WIDTH, bf); } } + width -=3D cycles_width; =20 obj__printf(obj, " "); =20 if (!*al->line) - obj__printf(obj, "%-*s", width - pcnt_width - cycles_width, " "); + obj__printf(obj, "%-*s", width, " "); else if (al->offset =3D=3D -1) { if (al->line_nr && annotate_opts.show_linenr) printed =3D scnprintf(bf, sizeof(bf), "%-*d ", @@ -2069,7 +2071,7 @@ void annotation_line__write(struct annotation_line *a= l, struct annotation *notes printed =3D scnprintf(bf, sizeof(bf), "%-*s ", notes->src->widths.addr, " "); obj__printf(obj, bf); - obj__printf(obj, "%-*s", width - printed - pcnt_width - cycles_width + 1= , al->line); + obj__printf(obj, "%-*s", width - printed + 1, al->line); } else { u64 addr =3D al->offset; int color =3D -1; @@ -2112,9 +2114,11 @@ void annotation_line__write(struct annotation_line *= al, struct annotation *notes if (change_color) obj__set_color(obj, color); =20 + width -=3D printed + 3; + disasm_line__write(disasm_line(al), notes, obj, bf, sizeof(bf), obj__pri= ntf, obj__write_graph); =20 - obj__printf(obj, "%-*s", width - pcnt_width - cycles_width - 3 - printed= , bf); + obj__printf(obj, "%-*s", width, bf); =20 (void)apd; } --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F8E927A93A; Wed, 16 Jul 2025 05:01:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642063; cv=none; b=hZTejCHlq9bpyjnjEW8ZN00KzHY/9D7xzuPCYxiaU7So/KhqaKg6zro2cjwgj6OsjyJMHOsOPrd1x6BvGuZAU2gO5TA0J2/myH53JA0w+FPe/gNaxgHBJmteDwyA+1TFsRAjxqihQidOECtmcoPGjjkDI5tfreXVAGXZ/q/g7mo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642063; c=relaxed/simple; bh=JeSj/boszSIVE8l7J12gorj7rodiVqWqiBONRrV30rM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mdDJt/9vqrD0RApdbUGDM/4VZ1QtYcYtrxxd69jNvCmQq/V6cCVmXG1ta+dZuIE807gSFyKbrqI4rM7kLn0vemXclA3hipDRxMIYVu/kE5CgbA+60ErPg4zv4w3fMlu7XalwfCcGo+WfO0tyPXNJiH3P3kPwn6zgnMQGcxHJIDg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QaxjlsJ7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QaxjlsJ7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B40DEC4CEFA; Wed, 16 Jul 2025 05:01:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642063; bh=JeSj/boszSIVE8l7J12gorj7rodiVqWqiBONRrV30rM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QaxjlsJ7T5dBT4QOtnpMsYC515yxHSwJeRa6OVmO1yq7imszKjgeepCB9seZHnzgV fjdLolQuu5bqT35UQ9dOFn2U56vUgPn4pSDIF1XUC9pC7tk3kgyu1nIpwq9hNPgpBg JGRMAqkH9x7TqUR9wHyFd2aMqe1VGRBTA9lPQk9I3c1CMpcxt6LXSXsVJVia5f7qUq xlMTZfl+7DFH00jnmMv/8Pr8Az6u4y1Le0IjdIc7AMiJ79McaD4kgX1BIucuBakrec Mx9dlwCCl5pJb3VFWzg7ULem/6O61xDDevK16sx37f7zWYOwmxET9XESkHVnQWw6rv XjsBRQpHB55CA== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 5/8] perf annotate: Add --code-with-type support for TUI Date: Tue, 15 Jul 2025 22:00:51 -0700 Message-ID: <20250716050054.14130-6-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Until now, the --code-with-type option is available only on stdio. But it was an artifical limitation because of an implemention issue. Implement the same logic in annotation_line__write() for stdio2/TUI. Make disasm_line__write() return the number of printed characters so that it can skip unnecessary operations when the screen is full. Remove the limitation and update the man page. Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/Documentation/perf-annotate.txt | 1 - tools/perf/builtin-annotate.c | 5 -- tools/perf/ui/browsers/annotate.c | 6 +++ tools/perf/util/annotate.c | 61 +++++++++++++++++++--- 4 files changed, 61 insertions(+), 12 deletions(-) diff --git a/tools/perf/Documentation/perf-annotate.txt b/tools/perf/Docume= ntation/perf-annotate.txt index 46090c5b42b4762f..547f1a2680185e3c 100644 --- a/tools/perf/Documentation/perf-annotate.txt +++ b/tools/perf/Documentation/perf-annotate.txt @@ -170,7 +170,6 @@ include::itrace.txt[] =20 --code-with-type:: Show data type info in code annotation (for memory instructions only). - Currently it only works with --stdio option. =20 =20 SEE ALSO diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 9833c2c82a2fee46..6debd725392db4a4 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -917,11 +917,6 @@ int cmd_annotate(int argc, const char **argv) symbol_conf.annotate_data_sample =3D true; } else if (annotate_opts.code_with_type) { symbol_conf.annotate_data_member =3D true; - - if (!annotate.use_stdio) { - pr_err("--code-with-type only works with --stdio.\n"); - goto out_delete; - } } =20 setup_browser(true); diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/ann= otate.c index 23bea5b165774ae7..cdee1969f3131a7c 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -4,6 +4,7 @@ #include "../ui.h" #include "../../util/annotate.h" #include "../../util/debug.h" +#include "../../util/debuginfo.h" #include "../../util/dso.h" #include "../../util/hist.h" #include "../../util/sort.h" @@ -1101,6 +1102,9 @@ int __hist_entry__tui_annotate(struct hist_entry *he,= struct map_symbol *ms, =20 ui_helpline__push("Press ESC to exit"); =20 + if (annotate_opts.code_with_type) + browser.dbg =3D debuginfo__new(dso__long_name(dso)); + browser.b.width =3D notes->src->widths.max_line_len; browser.b.nr_entries =3D notes->src->nr_entries; browser.b.entries =3D ¬es->src->source; @@ -1111,6 +1115,8 @@ int __hist_entry__tui_annotate(struct hist_entry *he,= struct map_symbol *ms, =20 ret =3D annotate_browser__run(&browser, evsel, hbt); =20 + if (annotate_opts.code_with_type) + debuginfo__delete(browser.dbg); if (not_annotated && !notes->src->tried_source) annotated_source__purge(notes->src); =20 diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index d69e406c1bc289cd..06ddc7a9f58722a4 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -1362,6 +1362,11 @@ static int symbol__annotate_fprintf2(struct symbol *= sym, FILE *fp, }; struct annotation_line *al; =20 + if (annotate_opts.code_with_type) { + evsel__get_arch(apd->evsel, &apd->arch); + apd->dbg =3D debuginfo__new(dso__long_name(map__dso(apd->he->ms.map))); + } + list_for_each_entry(al, ¬es->src->source, node) { if (annotation_line__filter(al)) continue; @@ -1370,6 +1375,9 @@ static int symbol__annotate_fprintf2(struct symbol *s= ym, FILE *fp, wops.first_line =3D false; } =20 + if (annotate_opts.code_with_type) + debuginfo__delete(apd->dbg); + return 0; } =20 @@ -1743,7 +1751,7 @@ static double annotation_line__max_percent(struct ann= otation_line *al, return percent_max; } =20 -static void disasm_line__write(struct disasm_line *dl, struct annotation *= notes, +static int disasm_line__write(struct disasm_line *dl, struct annotation *n= otes, void *obj, char *bf, size_t size, void (*obj__printf)(void *obj, const char *fmt, ...), void (*obj__write_graph)(void *obj, int graph)) @@ -1771,8 +1779,8 @@ static void disasm_line__write(struct disasm_line *dl= , struct annotation *notes, obj__printf(obj, " "); } =20 - disasm_line__scnprintf(dl, bf, size, !annotate_opts.use_offset, - notes->src->widths.max_ins_name); + return disasm_line__scnprintf(dl, bf, size, !annotate_opts.use_offset, + notes->src->widths.max_ins_name); } =20 static void ipc_coverage_string(char *bf, int size, struct annotation *not= es) @@ -2116,11 +2124,52 @@ void annotation_line__write(struct annotation_line = *al, struct annotation *notes =20 width -=3D printed + 3; =20 - disasm_line__write(disasm_line(al), notes, obj, bf, sizeof(bf), obj__pri= ntf, obj__write_graph); + printed =3D disasm_line__write(disasm_line(al), notes, obj, bf, sizeof(b= f), + obj__printf, obj__write_graph); + + obj__printf(obj, "%s", bf); + width -=3D printed; + + if (annotate_opts.code_with_type && apd->dbg) { + struct annotated_data_type *data_type; + int offset =3D 0; + + data_type =3D __hist_entry__get_data_type(apd->he, apd->arch, + apd->dbg, + disasm_line(al), + &offset); + if (data_type && data_type !=3D NO_TYPE) { + char member[256]; + + printed =3D scnprintf(bf, sizeof(bf), + "\t\t# data-type: %s", + data_type->self.type_name); =20 - obj__printf(obj, "%-*s", width, bf); + if (data_type !=3D &stackop_type && + data_type !=3D &canary_type && + sizeof(bf) > (size_t)printed) { + printed +=3D scnprintf(bf + printed, + sizeof(bf) - printed, + " +%#x", offset); + } + + if (annotated_data_type__get_member_name(data_type, + member, + sizeof(member), + offset) && + sizeof(bf) > (size_t)printed) { + printed +=3D scnprintf(bf + printed, + sizeof(bf) - printed, + " (%s)", member); + } =20 - (void)apd; + obj__printf(obj, "%-*s", width, bf); + } else { + obj__printf(obj, "%-*s", width, " "); + } + } else { + obj__printf(obj, "%-*s", width, " "); + } } =20 } --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBEB927CB04; Wed, 16 Jul 2025 05:01:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642063; cv=none; b=ccpgNmUUuhSJVujAvcQNJggiQ/sDw4pyjmchIq0zR4va9YEFM4O9GqQd2u6buHZ+Lc0Ajtqma5xCVWnTa2MJRb0PqenywigmZWE/s1rDnHSZ/LDPbfEAXCJ+ODqwiuARakKSMdBSEM350YeXnAN2C8Y4LXW0tmliWz80KMS9pAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642063; c=relaxed/simple; bh=ER0kGduABeTw/jyrOz3QLI6pC2W3uT/J4XKTt/gNfuw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t2RTUQUt05BC7uueyRFzN5YaBED6B+ltYqEpGwiLDFYmIkDvsKqccAHlgqFcMnUGGblrhs9BDJjkNdm561lpGEv1AtwZbEBr4c5af72WPHjHBf2Qa5vJ5albOObTw6xf+uhnfL+9ZEcuVol/2JtfUhE5uusCwZPYLSbgRy66vzs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Wf4ZsOzG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Wf4ZsOzG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36040C4CEF7; Wed, 16 Jul 2025 05:01:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642063; bh=ER0kGduABeTw/jyrOz3QLI6pC2W3uT/J4XKTt/gNfuw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wf4ZsOzG4gKUJcKuPgDs/kcgowYj1fNbM7t4/FHaAIyGtp+dz4EXdzEB9A7OxoH/j ZMf8kQ/qz7meT5J9hrzTe/oFI2xfDP2uNIWlHTqvQu8HF7T6QiF/gX56zORSqPQIKa AFX/BL2ELwPGBJpkWxLlF4k7naQ65Ml+49WSjyBS9N5z01w23FFbBZuGuhr49Vxz0E b8dHcZK+ARi1l9bNX9Qdk1WZoeiHOcezUTOaSo04nNscEfhlTtWLIj0YQM9cm3fjnm tn0SHuo4GYAHezd8trZUPvnD4Gln9zTnwRsYu1MQjoOQ+4UHX490iZohN+dQ93FaKt IhjDyMolmDMxg== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 6/8] perf annotate: Add 'T' hot key to toggle data type display Date: Tue, 15 Jul 2025 22:00:52 -0700 Message-ID: <20250716050054.14130-7-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Support data type display with a key press so that users can toggle the output dynamically on TUI. Also display "[Type]" in the title line if it's enabled. Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/ui/browsers/annotate.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/ann= otate.c index cdee1969f3131a7c..4b059e0bafd33fcf 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -525,9 +525,10 @@ static void ui_browser__init_asm_mode(struct ui_browse= r *browser) static int sym_title(struct symbol *sym, struct map *map, char *title, size_t sz, int percent_type) { - return snprintf(title, sz, "%s %s [Percent: %s]", sym->name, + return snprintf(title, sz, "%s %s [Percent: %s] %s", sym->name, dso__long_name(map__dso(map)), - percent_type_str(percent_type)); + percent_type_str(percent_type), + annotate_opts.code_with_type ? "[Type]" : ""); } =20 /* @@ -901,7 +902,8 @@ static int annotate_browser__run(struct annotate_browse= r *browser, "b Toggle percent base [period/hits]\n" "B Branch counter abbr list (Optional)\n" "? Search string backwards\n" - "f Toggle showing offsets to full address\n"); + "f Toggle showing offsets to full address\n" + "T Toggle data type display\n"); continue; case 'r': script_browse(NULL, NULL); @@ -1021,6 +1023,12 @@ static int annotate_browser__run(struct annotate_bro= wser *browser, case 'f': annotation__toggle_full_addr(notes, ms); continue; + case 'T': + annotate_opts.code_with_type ^=3D 1; + if (browser->dbg =3D=3D NULL) + browser->dbg =3D debuginfo__new(dso__long_name(map__dso(ms->map))); + annotate_browser__show(&browser->b, title, help); + continue; case K_LEFT: case '<': case '>': @@ -1115,8 +1123,7 @@ int __hist_entry__tui_annotate(struct hist_entry *he,= struct map_symbol *ms, =20 ret =3D annotate_browser__run(&browser, evsel, hbt); =20 - if (annotate_opts.code_with_type) - debuginfo__delete(browser.dbg); + debuginfo__delete(browser.dbg); if (not_annotated && !notes->src->tried_source) annotated_source__purge(notes->src); =20 --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2378F280A4B; Wed, 16 Jul 2025 05:01:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642064; cv=none; b=uVgtGk0PcZmnxmumpjctl0a52kG5XO4i1P9zCka53oPtlr7u5VPlJyzDK73Tn+Rw6c2A4Q1jq1279OSF/PyitEhyKvzybV8SE5geOOeE1fZlviJrE8RP0r4ef65v/n2+D53lh8oTyN1WtfaQux99shDV2ReZYjxHO4QjjAk03M0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642064; c=relaxed/simple; bh=G7ckb2oLlR8G4qHRuOuRttm8Gp1V+3JeIGF9XMTxCiE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QCpa9OPnMUEp/XLHuppDul9AgKfhmI9BKYP2LQDn2cRtFs/2L7s6tXpqBY9dNTYC/N0rALbI3N+2YvIhke+yF+dJh50jdd73nai5lF3ca2SHHSOYHxt/9MYuPBjou6QL+LIJVHuejKq6sACPgFKFgTBMOlj15C/SCBEHNRSGAOE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=H0sq7zBZ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="H0sq7zBZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AA40FC4CEF0; Wed, 16 Jul 2025 05:01:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642064; bh=G7ckb2oLlR8G4qHRuOuRttm8Gp1V+3JeIGF9XMTxCiE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H0sq7zBZfrDv6Rh7wwr3sVeyO9ht3OoVtWChhfe5Df+cZi4HM/d8FZizAl3KL6VFA lBXMetQFv/bPNgns7Z22UxI+EDeXq4ZeQvyDL1cpFDIPe6vU0b/7NQkr6mB2GFEdwj 96NGfxeCDsZgZNQMh43fYFlbeMvCdxxzxO7cfI0mKrM0hU7Psm1Il+UdLo3XWaOQJ/ Una8Ss+XBPdCaao7GDEyiTeSLXTh6axdRRnz3yT46EihSDtoYVrQeVq0n03QaiZk4T Zp/A0iRh1Roo7B+q+c/syJqgd176urB6CZjx2PNO8U7yoz9odLN7Ax2Lm5tEHUAFVF fUVkb/7FNOurg== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 7/8] perf annotate: Show warning when debuginfo is not available Date: Tue, 15 Jul 2025 22:00:53 -0700 Message-ID: <20250716050054.14130-8-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When user requests data-type annotation but no DWARF info is available, show a warning message about it. Warning: DWARF debuginfo not found. Data-type in this DSO will not be displayed. Please make sure to have debug information. Press any key... Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/ui/browsers/annotate.c | 17 +++++++++++++++++ tools/perf/util/dso.h | 11 +++++++++++ 2 files changed, 28 insertions(+) diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/ann= otate.c index 4b059e0bafd33fcf..2a4db5bdcdb7e9d8 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -804,6 +804,20 @@ static int annotate__scnprintf_title(struct hists *his= ts, char *bf, size_t size) return printed; } =20 +static void annotate_browser__debuginfo_warning(struct annotate_browser *b= rowser) +{ + struct map_symbol *ms =3D browser->b.priv; + struct dso *dso =3D map__dso(ms->map); + + if (browser->dbg =3D=3D NULL && annotate_opts.code_with_type && + !dso__debuginfo_warned(dso)) { + ui__warning("DWARF debuginfo not found.\n\n" + "Data-type in this DSO will not be displayed.\n" + "Please make sure to have debug information."); + dso__set_debuginfo_warned(dso); + } +} + static int annotate_browser__run(struct annotate_browser *browser, struct evsel *evsel, struct hist_browser_timer *hbt) @@ -834,6 +848,8 @@ static int annotate_browser__run(struct annotate_browse= r *browser, =20 annotation_br_cntr_abbr_list(&br_cntr_text, evsel, false); =20 + annotate_browser__debuginfo_warning(browser); + while (1) { key =3D ui_browser__run(&browser->b, delay_secs); =20 @@ -1028,6 +1044,7 @@ static int annotate_browser__run(struct annotate_brow= ser *browser, if (browser->dbg =3D=3D NULL) browser->dbg =3D debuginfo__new(dso__long_name(map__dso(ms->map))); annotate_browser__show(&browser->b, title, help); + annotate_browser__debuginfo_warning(browser); continue; case K_LEFT: case '<': diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h index c87564471f9b01b1..42dadcc85a0e9150 100644 --- a/tools/perf/util/dso.h +++ b/tools/perf/util/dso.h @@ -282,6 +282,7 @@ DECLARE_RC_STRUCT(dso) { u8 hit:1; u8 annotate_warned:1; u8 auxtrace_warned:1; + u8 debuginfo_warned:1; u8 short_name_allocated:1; u8 long_name_allocated:1; u8 is_64_bit:1; @@ -342,6 +343,16 @@ static inline void dso__set_annotate_warned(struct dso= *dso) RC_CHK_ACCESS(dso)->annotate_warned =3D 1; } =20 +static inline bool dso__debuginfo_warned(const struct dso *dso) +{ + return RC_CHK_ACCESS(dso)->debuginfo_warned; +} + +static inline void dso__set_debuginfo_warned(struct dso *dso) +{ + RC_CHK_ACCESS(dso)->debuginfo_warned =3D 1; +} + static inline bool dso__auxtrace_warned(const struct dso *dso) { return RC_CHK_ACCESS(dso)->auxtrace_warned; --=20 2.50.0 From nobody Tue Oct 7 00:22:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 988C6285CB4; Wed, 16 Jul 2025 05:01:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642064; cv=none; b=lD9+cu+mDRRGhwA758+pGURRuTvfSMhBLUUwhv5CerAdPaw0Rh9JWljNAiFhqywfWn0OsfZQtctKQrK+RIaCMy1cHMXViEAlpgIFWncGrFwD59d6mJEFyUJdNg4+VZlqWo/pdRqVSoFmOAqPBaqPS355DSX0zBI/fYwSNqcRobw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752642064; c=relaxed/simple; bh=dGkePWjxmc1b+xI6uDt27ho5uz1BYPXe3lQGO5In9qo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VJ/KZysgaJaCKcv/tJd1jvFXkQccorEUxlN3tYHCXU6oXf8oZRCAQsTXAHuLceynK+OxbSfRe8pwVdn9C+m9GkWfPP8U9x1f1+nOZXaNrf6COh+ltDyPvJlwmou4mVeEWbIzDfHOxZPObMoRigsszW/8rUbIm95yO4rhD1AEVcU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eLAN9u5J; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eLAN9u5J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C9BEC4CEF4; Wed, 16 Jul 2025 05:01:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752642064; bh=dGkePWjxmc1b+xI6uDt27ho5uz1BYPXe3lQGO5In9qo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eLAN9u5J62zUALQZAN5GMiJHS5WpnqH3DqN6XpU+7eiq+eaTjsaVAXtI6gzRP1c/Y 2eA9AeK03ekrw3cKN0t8bcC0608NbmljYzTJhzsjlm1iFqllPwY/90bmOw5DshannT ljX80Y+JpTFIWWHoQZ7zdSTW2bwEqpJOKsLXLmDOa+0OBNB0xkATwyLYLxuUHmjnSz CXRK5sGtaQsJdQ670wDDoKfIdxZJG8itdbN/U34BTEWW6xM8meh/x7HL/8jYH4/Amf qB7mtR0f2TB0eGxo+COCNADbXAitoCulAsaaQHuRLRWZsxWf0TFuniPolpB7d/EUZf aBS+THNEou7sw== From: Namhyung Kim To: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang Cc: Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [PATCH v3 8/8] perf annotate: Hide data-type for stack operation and canary Date: Tue, 15 Jul 2025 22:00:54 -0700 Message-ID: <20250716050054.14130-9-namhyung@kernel.org> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716050054.14130-1-namhyung@kernel.org> References: <20250716050054.14130-1-namhyung@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It's mostly unnecessary to print when it has no actual type information like in the stack operations and canary. Let's have them if -v option is given. Before: $ perf annotate --code-with-type ... : 0 0xd640 <_dl_relocate_object>: 0.00 : 0: endbr64 0.00 : 4: pushq %rbp # data-type: (stack operati= on) 0.00 : 5: movq %rsp, %rbp 0.00 : 8: pushq %r15 # data-type: (stack operati= on) 0.00 : a: pushq %r14 # data-type: (stack operati= on) 0.00 : c: pushq %r13 # data-type: (stack operati= on) 0.00 : e: pushq %r12 # data-type: (stack operati= on) 0.00 : 10: pushq %rbx # data-type: (stack operati= on) 0.00 : 11: subq $0xf8, %rsp ... 0.00 : d4: testl %eax, %eax 0.00 : d6: jne 0xf424 0.00 : dc: movq 0xf0(%r14), %rbx # data-type= : struct link_map +0xf0 0.00 : e3: testq %rbx, %rbx 0.00 : e6: jne 0xf2dd 0.00 : ec: cmpq $0, 0xf8(%r14) # data-type: struct= link_map +0xf8 ... After: : 0 0xd640 <_dl_relocate_object>: 0.00 : 0: endbr64 0.00 : 4: pushq %rbp 0.00 : 5: movq %rsp, %rbp 0.00 : 8: pushq %r15 0.00 : a: pushq %r14 0.00 : c: pushq %r13 0.00 : e: pushq %r12 0.00 : 10: pushq %rbx 0.00 : 11: subq $0xf8, %rsp ... 0.00 : d4: testl %eax, %eax 0.00 : d6: jne 0xf424 0.00 : dc: movq 0xf0(%r14), %rbx # data-type= : struct link_map +0xf0 0.00 : e3: testq %rbx, %rbx 0.00 : e6: jne 0xf2dd 0.00 : ec: cmpq $0, 0xf8(%r14) # data-type: struct= link_map +0xf8 ... Signed-off-by: Namhyung Kim Reviewed-by: Ian Rogers --- tools/perf/util/annotate.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 06ddc7a9f58722a4..6fc07971631ac8a3 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -765,6 +765,17 @@ __hist_entry__get_data_type(struct hist_entry *he, str= uct arch *arch, struct debuginfo *dbg, struct disasm_line *dl, int *type_offset); =20 +static bool needs_type_info(struct annotated_data_type *data_type) +{ + if (data_type =3D=3D NULL || data_type =3D=3D NO_TYPE) + return false; + + if (verbose) + return true; + + return (data_type !=3D &stackop_type) && (data_type !=3D &canary_type); +} + static int annotation_line__print(struct annotation_line *al, struct annotation_print= _data *apd, struct annotation_options *opts, int printed, @@ -844,7 +855,7 @@ annotation_line__print(struct annotation_line *al, stru= ct annotation_print_data =20 data_type =3D __hist_entry__get_data_type(apd->he, apd->arch, apd->dbg, dl, &offset); - if (data_type && data_type !=3D NO_TYPE) { + if (needs_type_info(data_type)) { char buf[4096]; =20 printf("\t\t# data-type: %s", @@ -2138,7 +2149,7 @@ void annotation_line__write(struct annotation_line *a= l, struct annotation *notes apd->dbg, disasm_line(al), &offset); - if (data_type && data_type !=3D NO_TYPE) { + if (needs_type_info(data_type)) { char member[256]; =20 printed =3D scnprintf(bf, sizeof(bf), --=20 2.50.0