Setting build id for kernel dso objects when parsed
from mmap3 event.

Signed-off-by: Jiri Olsa <jo...@kernel.org>
---
 tools/perf/util/machine.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 17d6fd19ef79..863d949ef967 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -1590,7 +1590,8 @@ static int machine__process_extra_kernel_map(struct 
machine *machine,
 }
 
 static int machine__process_kernel_mmap_event(struct machine *machine,
-                                             struct extra_kernel_map *xm)
+                                             struct extra_kernel_map *xm,
+                                             __u8 *buildid)
 {
        struct map *map;
        enum dso_space_type dso_space;
@@ -1615,6 +1616,9 @@ static int machine__process_kernel_mmap_event(struct 
machine *machine,
                        goto out_problem;
 
                map->end = map->start + xm->end - xm->start;
+
+               if (build_id__is_defined(buildid))
+                       dso__set_build_id(map->dso, buildid);
        } else if (is_kernel_mmap) {
                const char *symbol_name = (xm->name + 
strlen(machine->mmap_name));
                /*
@@ -1672,6 +1676,9 @@ static int machine__process_kernel_mmap_event(struct 
machine *machine,
 
                machine__update_kernel_mmap(machine, xm->start, xm->end);
 
+               if (build_id__is_defined(buildid))
+                       dso__set_build_id(kernel, buildid);
+
                /*
                 * Avoid using a zero address (kptr_restrict) for the ref reloc
                 * symbol. Effectively having zero here means that at record
@@ -1724,7 +1731,7 @@ int machine__process_mmap3_event(struct machine *machine,
                };
 
                strlcpy(xm.name, event->mmap3.filename, KMAP_NAME_LEN);
-               ret = machine__process_kernel_mmap_event(machine, &xm);
+               ret = machine__process_kernel_mmap_event(machine, &xm, 
event->mmap3.buildid);
                if (ret < 0)
                        goto out_problem;
                return 0;
@@ -1791,7 +1798,7 @@ int machine__process_mmap2_event(struct machine *machine,
                };
 
                strlcpy(xm.name, event->mmap2.filename, KMAP_NAME_LEN);
-               ret = machine__process_kernel_mmap_event(machine, &xm);
+               ret = machine__process_kernel_mmap_event(machine, &xm, NULL);
                if (ret < 0)
                        goto out_problem;
                return 0;
@@ -1848,7 +1855,7 @@ int machine__process_mmap_event(struct machine *machine, 
union perf_event *event
                };
 
                strlcpy(xm.name, event->mmap.filename, KMAP_NAME_LEN);
-               ret = machine__process_kernel_mmap_event(machine, &xm);
+               ret = machine__process_kernel_mmap_event(machine, &xm, NULL);
                if (ret < 0)
                        goto out_problem;
                return 0;
-- 
2.26.2

Reply via email to