]> www.infradead.org Git - users/hch/misc.git/commitdiff
perf annotate: Add dso__debuginfo() helper
authorNamhyung Kim <namhyung@kernel.org>
Sat, 16 Aug 2025 03:16:34 +0000 (20:16 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 28 Aug 2025 15:35:42 +0000 (12:35 -0300)
It'd be great if it can get the correct debug information using DSO
build-Id not just the path name.  Instead of adding new callsites of
debuginfo__new(), let's add dso__debuginfo() which can hide the access
using the pathname and help the future conversion.

Suggested-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20250816031635.25318-12-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/browsers/annotate.c
tools/perf/util/annotate.c
tools/perf/util/dso.h

index e3e7004f32251666faa50c5a4e6ccd7e4a24a6f6..9aa3c1ba22f52789d40319da8234171cd5f6fd93 100644 (file)
@@ -1050,7 +1050,7 @@ show_sup_ins:
                case 'T':
                        annotate_opts.code_with_type ^= 1;
                        if (browser->dbg == NULL)
-                               browser->dbg = debuginfo__new(dso__long_name(map__dso(ms->map)));
+                               browser->dbg = dso__debuginfo(map__dso(ms->map));
                        annotate_browser__show(&browser->b, title, help);
                        annotate_browser__debuginfo_warning(browser);
                        continue;
@@ -1146,7 +1146,7 @@ int __hist_entry__tui_annotate(struct hist_entry *he, struct map_symbol *ms,
        ui_helpline__push("Press ESC to exit");
 
        if (annotate_opts.code_with_type)
-               browser.dbg = debuginfo__new(dso__long_name(dso));
+               browser.dbg = dso__debuginfo(dso);
 
        browser.b.width = notes->src->widths.max_line_len;
        browser.b.nr_entries = notes->src->nr_entries;
index ea68b32da7ce584ae035b3cf3ee33567990ea8ab..bea3457a00632fd7cfaf2c11f4ef695592f03b73 100644 (file)
@@ -1270,7 +1270,7 @@ int hist_entry__annotate_printf(struct hist_entry *he, struct evsel *evsel)
        apd.addr_fmt_width = annotated_source__addr_fmt_width(&notes->src->source,
                                                              notes->src->start);
        evsel__get_arch(evsel, &apd.arch);
-       apd.dbg = debuginfo__new(filename);
+       apd.dbg = dso__debuginfo(dso);
 
        list_for_each_entry(pos, &notes->src->source, node) {
                int err;
@@ -1375,7 +1375,7 @@ static int symbol__annotate_fprintf2(struct symbol *sym, FILE *fp,
 
        if (annotate_opts.code_with_type) {
                evsel__get_arch(apd->evsel, &apd->arch);
-               apd->dbg = debuginfo__new(dso__long_name(map__dso(apd->he->ms.map)));
+               apd->dbg = dso__debuginfo(map__dso(apd->he->ms.map));
        }
 
        list_for_each_entry(al, &notes->src->source, node) {
@@ -2882,7 +2882,7 @@ struct annotated_data_type *hist_entry__get_data_type(struct hist_entry *he)
                di_cache.dso = dso__get(map__dso(ms->map));
 
                debuginfo__delete(di_cache.dbg);
-               di_cache.dbg = debuginfo__new(dso__long_name(di_cache.dso));
+               di_cache.dbg = dso__debuginfo(di_cache.dso);
        }
 
        if (di_cache.dbg == NULL) {
index 7df1673f08d3ddb4258124e61f7dcdbd1ec94077..fd8e95de77f78dfcb5afc5858ba0597e0ef89082 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdio.h>
 #include <linux/bitops.h>
 #include "build-id.h"
+#include "debuginfo.h"
 #include "mutex.h"
 #include <internal/rc_check.h>
 
@@ -914,4 +915,13 @@ u64 dso__findnew_global_type(struct dso *dso, u64 addr, u64 offset);
 bool perf_pid_map_tid(const char *dso_name, int *tid);
 bool is_perf_pid_map_name(const char *dso_name);
 
+/*
+ * In the future, we may get debuginfo using build-ID (w/o path).
+ * Add this helper is for the smooth conversion.
+ */
+static inline struct debuginfo *dso__debuginfo(struct dso *dso)
+{
+       return debuginfo__new(dso__long_name(dso));
+}
+
 #endif /* __PERF_DSO */