Em Tue, Nov 17, 2020 at 12:00:44PM +0100, Jiri Olsa escreveu:
> Adding build id to synthesized mmap2 events for
> everything - kernel/modules/tasks.
> 
> Signed-off-by: Jiri Olsa <jo...@kernel.org>
> ---
>  tools/perf/util/synthetic-events.c | 32 ++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/tools/perf/util/synthetic-events.c 
> b/tools/perf/util/synthetic-events.c
> index a18ae502d765..91b1962d399c 100644
> --- a/tools/perf/util/synthetic-events.c
> +++ b/tools/perf/util/synthetic-events.c
> @@ -347,6 +347,31 @@ 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;
> +             event->header.misc |= PERF_RECORD_MISC_MMAP_BUILD_ID;
> +             event->__reserved_1 = 0;
> +             event->__reserved_2 = 0;
> +     } else {
> +             if (event->filename[0] == '/') {
> +                     pr_debug2("Failed to read build ID for %s\n",
> +                               event->filename);
> +             }
> +     }
> +}
> +
>  int perf_event__synthesize_mmap_events(struct perf_tool *tool,
>                                      union perf_event *event,
>                                      pid_t pid, pid_t tgid,
> @@ -453,6 +478,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);

Ditto

>               if (perf_tool__process_synth_event(tool, event, machine, 
> process) != 0) {
>                       rc = -1;
>                       break;
> @@ -630,6 +658,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 +1080,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
> 

-- 

- Arnaldo

Reply via email to