Messages in this thread | | | Date | Fri, 13 Nov 2020 13:32:22 +0900 | From | Namhyung Kim <> | Subject | Re: [PATCH 15/24] perf tools: Synthesize build id for kernel/modules/tasks |
| |
On Mon, Nov 09, 2020 at 10:54:06PM +0100, Jiri Olsa wrote: > Adding build id to synthesized mmap2 events for > everything - kernel/modules/tasks. > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > --- > tools/perf/util/synthetic-events.c | 33 ++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c > index a18ae502d765..a9d5d1ff2cad 100644 > --- a/tools/perf/util/synthetic-events.c > +++ b/tools/perf/util/synthetic-events.c > @@ -347,6 +347,32 @@ static bool read_proc_maps_line(struct io *io, __u64 *start, __u64 *end, > } > } > > +static void perf_record_mmap2__read_build_id(struct perf_record_mmap2 *event, > + bool is_kernel) > +{ > + struct build_id bid; > + int rc; > + > + if (is_kernel) > + rc = sysfs__read_build_id("/sys/kernel/notes", &bid); > + else > + rc = filename__read_build_id(event->filename, &bid) > 0 ? 0 : -1; > + > + if (rc == 0) { > + memcpy(event->build_id, bid.data, sizeof(bid.data)); > + event->build_id_size = (u8) bid.size; > + } else { > + if (event->filename[0] == '/') { > + pr_debug2("Failed to read build ID for %s\n", > + event->filename); > + } > + memset(event->build_id, 0x0, sizeof(event->build_id));
Likewise, we should not set the misc bit here IMHO.
Thanks, Namhyung
> + } > + event->header.misc |= PERF_RECORD_MISC_BUILD_ID; > + event->__reserved_1 = 0; > + event->__reserved_2 = 0; > +} > + > int perf_event__synthesize_mmap_events(struct perf_tool *tool, > union perf_event *event, > pid_t pid, pid_t tgid, > @@ -453,6 +479,9 @@ int perf_event__synthesize_mmap_events(struct perf_tool *tool, > event->mmap2.pid = tgid; > event->mmap2.tid = pid; > > + if (symbol_conf.buildid_mmap2) > + perf_record_mmap2__read_build_id(&event->mmap2, false); > + > if (perf_tool__process_synth_event(tool, event, machine, process) != 0) { > rc = -1; > break; > @@ -630,6 +659,8 @@ int perf_event__synthesize_modules(struct perf_tool *tool, perf_event__handler_t > > memcpy(event->mmap2.filename, pos->dso->long_name, > pos->dso->long_name_len + 1); > + > + perf_record_mmap2__read_build_id(&event->mmap2, false); > } else { > size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64)); > event->mmap.header.type = PERF_RECORD_MMAP; > @@ -1050,6 +1081,8 @@ static int __perf_event__synthesize_kernel_mmap(struct perf_tool *tool, > event->mmap2.start = map->start; > event->mmap2.len = map->end - event->mmap.start; > event->mmap2.pid = machine->pid; > + > + perf_record_mmap2__read_build_id(&event->mmap2, true); > } else { > size = snprintf(event->mmap.filename, sizeof(event->mmap.filename), > "%s%s", machine->mmap_name, kmap->ref_reloc_sym->name) + 1; > -- > 2.26.2 >
| |