Skip searching debuginfo if we have already searched and there is no debuginfo for given file. This also reduce debuginfo mismatch warnings for listing events on same binary.
Signed-off-by: Masami Hiramatsu <[email protected]> --- tools/perf/util/probe-finder.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 5bb71e056b21..cafc3e5b9863 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -119,6 +119,8 @@ enum dso_binary_type distro_dwarf_types[] = { struct debuginfo *debuginfo__new(const char *path) { + static struct strlist *no_debuginfo_files; + u8 bid[BUILD_ID_SIZE], bid2[BUILD_ID_SIZE]; enum dso_binary_type *type; char buf[PATH_MAX], nil = '\0'; @@ -126,6 +128,12 @@ struct debuginfo *debuginfo__new(const char *path) bool have_build_id = false; struct debuginfo *dinfo = NULL; + /* Skip if we already know it has no debuginfo */ + if (!no_debuginfo_files) + no_debuginfo_files = strlist__new(NULL, NULL); + else if (strlist__find(no_debuginfo_files, path)) + return NULL; + /* Try to open distro debuginfo files */ dso = dso__new(path); if (!dso) @@ -159,7 +167,13 @@ struct debuginfo *debuginfo__new(const char *path) out: /* if failed to open all distro debuginfo, open given binary */ - return dinfo ? : __debuginfo__new(path); + if (!dinfo) { + dinfo = __debuginfo__new(path); + if (!dinfo) + strlist__add(no_debuginfo_files, path); + } + + return dinfo; } void debuginfo__delete(struct debuginfo *dbg)

