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

Namhyung Kim posted 9 patches 2 months, 1 week ago
There is a newer version of this series
[PATCH v4 7/9] perf annotate: Show warning when debuginfo is not available
Posted by Namhyung Kim 2 months, 1 week ago
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@kernel.org>
---
 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);
+	}
+}
+
 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
Re: [PATCH v4 7/9] perf annotate: Show warning when debuginfo is not available
Posted by Ian Rogers 2 months, 1 week ago
On Fri, Jul 25, 2025 at 12:38 PM Namhyung Kim <namhyung@kernel.org> 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@kernel.org>
> ---
>  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
>