From 0f126bbe84c4649a3354ea29622496cc53f11a01 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Thu, 14 Jan 2010 23:45:28 -0200 Subject: [PATCH] --- yaml --- r: 182371 b: refs/heads/master c: 18c3daa4961b9fa1f2db0711d93c0acf0c39fd12 h: refs/heads/master i: 182369: ec11e926710c5d2c325e121247d1863a55bae3ab 182367: ea8b6cbadedd32202b4abd5e8e361c8f05500a6b v: v3 --- [refs] | 2 +- trunk/tools/perf/builtin-record.c | 8 ++++++-- trunk/tools/perf/util/event.c | 11 +++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index f1b055166f90..208998a19b1c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cf4e5b0838e822dd404638ad00d35b63fffe8191 +refs/heads/master: 18c3daa4961b9fa1f2db0711d93c0acf0c39fd12 diff --git a/trunk/tools/perf/builtin-record.c b/trunk/tools/perf/builtin-record.c index c130df2676f1..614fa9a4c67c 100644 --- a/trunk/tools/perf/builtin-record.c +++ b/trunk/tools/perf/builtin-record.c @@ -117,8 +117,12 @@ static void write_event(event_t *buf, size_t size) * Add it to the list of DSOs, so that when we finish this * record session we can pick the available build-ids. */ - if (buf->header.type == PERF_RECORD_MMAP) - dsos__findnew(buf->mmap.filename); + if (buf->header.type == PERF_RECORD_MMAP) { + struct list_head *head = &dsos__user; + if (buf->mmap.header.misc == 1) + head = &dsos__kernel; + __dsos__findnew(head, buf->mmap.filename); + } write_output(buf, size); } diff --git a/trunk/tools/perf/util/event.c b/trunk/tools/perf/util/event.c index 0e9820ac4f5e..1abaefc126a8 100644 --- a/trunk/tools/perf/util/event.c +++ b/trunk/tools/perf/util/event.c @@ -110,7 +110,10 @@ static int event__synthesize_mmap_events(pid_t pid, pid_t tgid, while (1) { char bf[BUFSIZ], *pbf = bf; event_t ev = { - .header = { .type = PERF_RECORD_MMAP }, + .header = { + .type = PERF_RECORD_MMAP, + .misc = 0, /* Just like the kernel, see kernel/perf_event.c __perf_event_mmap */ + }, }; int n; size_t size; @@ -170,6 +173,7 @@ int event__synthesize_modules(event__handler_t process, size = ALIGN(pos->dso->long_name_len + 1, sizeof(u64)); memset(&ev, 0, sizeof(ev)); + ev.mmap.header.misc = 1; /* kernel uses 0 for user space maps, see kernel/perf_event.c __perf_event_mmap */ ev.mmap.header.type = PERF_RECORD_MMAP; ev.mmap.header.size = (sizeof(ev.mmap) - (sizeof(ev.mmap.filename) - size)); @@ -236,7 +240,10 @@ int event__synthesize_kernel_mmap(event__handler_t process, { size_t size; event_t ev = { - .header = { .type = PERF_RECORD_MMAP }, + .header = { + .type = PERF_RECORD_MMAP, + .misc = 1, /* kernel uses 0 for user space maps, see kernel/perf_event.c __perf_event_mmap */ + }, }; /* * We should get this from /sys/kernel/sections/.text, but till that is