xref: /linux/tools/perf/util/build-id.c (revision b3b77c8caef1750ebeea1054e39e358550ea9f55)
1 /*
2  * build-id.c
3  *
4  * build-id support
5  *
6  * Copyright (C) 2009, 2010 Red Hat Inc.
7  * Copyright (C) 2009, 2010 Arnaldo Carvalho de Melo <acme@redhat.com>
8  */
9 #include "build-id.h"
10 #include "event.h"
11 #include "symbol.h"
12 #include <linux/kernel.h>
13 
14 static int build_id__mark_dso_hit(event_t *event, struct perf_session *session)
15 {
16 	struct addr_location al;
17 	u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
18 	struct thread *thread = perf_session__findnew(session, event->ip.pid);
19 
20 	if (thread == NULL) {
21 		pr_err("problem processing %d event, skipping it.\n",
22 			event->header.type);
23 		return -1;
24 	}
25 
26 	thread__find_addr_map(thread, session, cpumode, MAP__FUNCTION,
27 			      event->ip.pid, event->ip.ip, &al);
28 
29 	if (al.map != NULL)
30 		al.map->dso->hit = 1;
31 
32 	return 0;
33 }
34 
35 struct perf_event_ops build_id__mark_dso_hit_ops = {
36 	.sample	= build_id__mark_dso_hit,
37 	.mmap	= event__process_mmap,
38 	.fork	= event__process_task,
39 };
40