Re: [PATCH v4 7/9] perf annotate: Show warning when debuginfo is not available

From: Ian Rogers
Date: Fri Jul 25 2025 - 20:39:13 EST


On Fri, Jul 25, 2025 at 12:38 PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
>
> 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 <namhyung@xxxxxxxxxx>
> ---
> 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/annotate.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 *hists, char *bf, size_t size)
> return printed;
> }
>
> +static void annotate_browser__debuginfo_warning(struct annotate_browser *browser)
> +{
> + struct map_symbol *ms = browser->b.priv;
> + struct dso *dso = map__dso(ms->map);
> +
> + if (browser->dbg == 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);

If there is a dso__debuginfo then this could be encapsulated there, ie
the browser wouldn't need to change dso variables it'd just be a
property of calling dso__debuginfo.

Thanks,
Ian

> + }
> +}
> +
> 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_browser *browser,
>
> annotation_br_cntr_abbr_list(&br_cntr_text, evsel, false);
>
> + annotate_browser__debuginfo_warning(browser);
> +
> while (1) {
> key = ui_browser__run(&browser->b, delay_secs);
>
> @@ -1028,6 +1044,7 @@ static int annotate_browser__run(struct annotate_browser *browser,
> if (browser->dbg == NULL)
> browser->dbg = 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 3457d713d3c56df6..7df1673f08d3ddb4 100644
> --- a/tools/perf/util/dso.h
> +++ b/tools/perf/util/dso.h
> @@ -299,6 +299,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;
> @@ -362,6 +363,16 @@ static inline void dso__set_annotate_warned(struct dso *dso)
> RC_CHK_ACCESS(dso)->annotate_warned = 1;
> }
>
> +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 = 1;
> +}
> +
> static inline bool dso__auxtrace_warned(const struct dso *dso)
> {
> return RC_CHK_ACCESS(dso)->auxtrace_warned;
> --
> 2.50.1
>