perf probe: Fix debuginfo__new() to enable build-id based debuginfo
authorMasami Hiramatsu <mhriamat@kernel.org>
Sat, 3 Jul 2021 15:35:18 +0000 (00:35 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 7 Jul 2021 13:28:07 +0000 (10:28 -0300)
Fix debuginfo__new() to set the build-id to dso before
dso__read_binary_type_filename() so that it can find
DSO_BINARY_TYPE__BUILDID_DEBUGINFO debuginfo correctly.

However, this may not change the result, because elfutils (libdwfl) has
its own debuginfo finder. With/without this patch, the perf probe
correctly find the debuginfo file.

This is just a failsafe and keep code's sanity (if you use
dso__read_binary_type_filename(), you must set the build-id to the dso.)

Reported-by: Thomas Richter <tmricht@linux.ibm.com>
Acked-by: Thomas Richter <tmricht@linux.ibm.com>
Signed-off-by: Masami Hiramatsu <mhriamat@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Stefan Liebler <stli@linux.ibm.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Link: http://lore.kernel.org/lkml/162532651863.393143.11692691321219235810.stgit@devnote2
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/probe-finder.c

index b029c29..02ef0d7 100644 (file)
@@ -118,12 +118,17 @@ struct debuginfo *debuginfo__new(const char *path)
        char buf[PATH_MAX], nil = '\0';
        struct dso *dso;
        struct debuginfo *dinfo = NULL;
+       struct build_id bid;
 
        /* Try to open distro debuginfo files */
        dso = dso__new(path);
        if (!dso)
                goto out;
 
+       /* Set the build id for DSO_BINARY_TYPE__BUILDID_DEBUGINFO */
+       if (is_regular_file(path) && filename__read_build_id(path, &bid) > 0)
+               dso__set_build_id(dso, &bid);
+
        for (type = distro_dwarf_types;
             !dinfo && *type != DSO_BINARY_TYPE__NOT_FOUND;
             type++) {