When unwinding callchains on a different machine, vdso info should be
provided so the unwind process won't be interrupted if address falls
into vdso region. But in most cases, the addresses of sample events
are not in vdso range, the buildid of a zero hit vdso won't be stored
into perf.data.

This patch stores vdso buildid regardless of whether the vdso is hit
or not.

Signed-off-by: He Kuang <heku...@huawei.com>
---
 tools/perf/util/build-id.c | 2 +-
 tools/perf/util/dso.c      | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
index 0573c2e..bdc7580 100644
--- a/tools/perf/util/build-id.c
+++ b/tools/perf/util/build-id.c
@@ -256,7 +256,7 @@ static int machine__write_buildid_table(struct machine 
*machine, int fd)
                size_t name_len;
                bool in_kernel = false;
 
-               if (!pos->hit)
+               if (!pos->hit && !dso__is_vdso(pos))
                        continue;
 
                if (dso__is_vdso(pos)) {
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index 8e639543..b39b80c 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -7,6 +7,7 @@
 #include "auxtrace.h"
 #include "util.h"
 #include "debug.h"
+#include "vdso.h"
 
 char dso__symtab_origin(const struct dso *dso)
 {
@@ -1169,7 +1170,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool 
with_hits)
        struct dso *pos;
 
        list_for_each_entry(pos, head, node) {
-               if (with_hits && !pos->hit)
+               if (with_hits && !pos->hit && !dso__is_vdso(pos))
                        continue;
                if (pos->has_build_id) {
                        have_build_id = true;
-- 
1.8.5.2

Reply via email to