xref: /openbmc/linux/tools/perf/util/machine.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29d2f8e22SArnaldo Carvalho de Melo #ifndef __PERF_MACHINE_H
39d2f8e22SArnaldo Carvalho de Melo #define __PERF_MACHINE_H
49d2f8e22SArnaldo Carvalho de Melo 
59d2f8e22SArnaldo Carvalho de Melo #include <sys/types.h>
669d2591aSArnaldo Carvalho de Melo #include <linux/rbtree.h>
7c54d241bSArnaldo Carvalho de Melo #include "maps.h"
84a3cec84SArnaldo Carvalho de Melo #include "dsos.h"
90a7c74eaSArnaldo Carvalho de Melo #include "rwsem.h"
109d2f8e22SArnaldo Carvalho de Melo 
11b21484f1SGreg Price struct addr_location;
1269d2591aSArnaldo Carvalho de Melo struct branch_stack;
134a3cec84SArnaldo Carvalho de Melo struct dso;
140e3149f8SArnaldo Carvalho de Melo struct dso_id;
1532dcd021SJiri Olsa struct evsel;
1669d2591aSArnaldo Carvalho de Melo struct perf_sample;
1769d2591aSArnaldo Carvalho de Melo struct symbol;
18aeb00b1aSArnaldo Carvalho de Melo struct target;
199d2f8e22SArnaldo Carvalho de Melo struct thread;
20b0a7d1a0SArnaldo Carvalho de Melo union perf_event;
21a088031cSAdrian Hunter struct machines;
229d2f8e22SArnaldo Carvalho de Melo 
2369d2591aSArnaldo Carvalho de Melo /* Native host kernel uses -1 as pid index in machine */
2469d2591aSArnaldo Carvalho de Melo #define	HOST_KERNEL_ID			(-1)
2569d2591aSArnaldo Carvalho de Melo #define	DEFAULT_GUEST_KERNEL_ID		(0)
2669d2591aSArnaldo Carvalho de Melo 
275512cf24SAdrian Hunter extern const char *ref_reloc_sym_names[];
285512cf24SAdrian Hunter 
29d027b640SAdrian Hunter struct vdso_info;
30d027b640SAdrian Hunter 
3191e467bcSKan Liang #define THREADS__TABLE_BITS	8
3291e467bcSKan Liang #define THREADS__TABLE_SIZE	(1 << THREADS__TABLE_BITS)
3391e467bcSKan Liang 
3491e467bcSKan Liang struct threads {
35f3acb3a8SDavidlohr Bueso 	struct rb_root_cached  entries;
360a7c74eaSArnaldo Carvalho de Melo 	struct rw_semaphore    lock;
3791e467bcSKan Liang 	unsigned int	       nr;
3891e467bcSKan Liang 	struct list_head       dead;
3991e467bcSKan Liang 	struct thread	       *last_match;
4091e467bcSKan Liang };
4191e467bcSKan Liang 
4269d2591aSArnaldo Carvalho de Melo struct machine {
4369d2591aSArnaldo Carvalho de Melo 	struct rb_node	  rb_node;
4469d2591aSArnaldo Carvalho de Melo 	pid_t		  pid;
4569d2591aSArnaldo Carvalho de Melo 	u16		  id_hdr_size;
46cfe1c414SAdrian Hunter 	bool		  comm_exec;
47caf8a0d0SArnaldo Carvalho de Melo 	bool		  kptr_restrict_warned;
48ec1891afSAdrian Hunter 	bool		  single_address_space;
4969d2591aSArnaldo Carvalho de Melo 	char		  *root_dir;
508c7f1bb3SJiri Olsa 	char		  *mmap_name;
51a5367ecbSAdrian Hunter 	char		  *kallsyms_filename;
5291e467bcSKan Liang 	struct threads    threads[THREADS__TABLE_SIZE];
53d027b640SAdrian Hunter 	struct vdso_info  *vdso_info;
544cde998dSArnaldo Carvalho de Melo 	struct perf_env   *env;
553d39ac53SArnaldo Carvalho de Melo 	struct dsos	  dsos;
561a97cee6SIan Rogers 	struct maps	  *kmaps;
573183f8caSArnaldo Carvalho de Melo 	struct map	  *vmlinux_map;
58fbe2af45SAdrian Hunter 	u64		  kernel_start;
59*cc2367eeSArnaldo Carvalho de Melo 	struct {
60*cc2367eeSArnaldo Carvalho de Melo 		u64	  text_start;
61*cc2367eeSArnaldo Carvalho de Melo 		u64	  text_end;
62*cc2367eeSArnaldo Carvalho de Melo 	} sched, lock;
63b9d266baSAdrian Hunter 	pid_t		  *current_tid;
64eef8e06eSAdrian Hunter 	size_t		  current_tid_sz;
650db15b1eSAdrian Hunter 	union { /* Tool specific area */
660db15b1eSAdrian Hunter 		void	  *priv;
670db15b1eSAdrian Hunter 		u64	  db_id;
680db15b1eSAdrian Hunter 	};
69a088031cSAdrian Hunter 	struct machines   *machines;
701c5aae77SAdrian Hunter 	bool		  trampolines_mapped;
7169d2591aSArnaldo Carvalho de Melo };
7269d2591aSArnaldo Carvalho de Melo 
machine__threads(struct machine * machine,pid_t tid)7391e467bcSKan Liang static inline struct threads *machine__threads(struct machine *machine, pid_t tid)
7491e467bcSKan Liang {
7591e467bcSKan Liang 	/* Cast it to handle tid == -1 */
7691e467bcSKan Liang 	return &machine->threads[(unsigned int)tid % THREADS__TABLE_SIZE];
7791e467bcSKan Liang }
7891e467bcSKan Liang 
7968a74186SArnaldo Carvalho de Melo /*
8068a74186SArnaldo Carvalho de Melo  * The main kernel (vmlinux) map
8168a74186SArnaldo Carvalho de Melo  */
82a5e813c6SArnaldo Carvalho de Melo static inline
machine__kernel_map(struct machine * machine)83a5e813c6SArnaldo Carvalho de Melo struct map *machine__kernel_map(struct machine *machine)
84a5e813c6SArnaldo Carvalho de Melo {
853183f8caSArnaldo Carvalho de Melo 	return machine->vmlinux_map;
86a5e813c6SArnaldo Carvalho de Melo }
87a5e813c6SArnaldo Carvalho de Melo 
8868a74186SArnaldo Carvalho de Melo /*
8968a74186SArnaldo Carvalho de Melo  * kernel (the one returned by machine__kernel_map()) plus kernel modules maps
9068a74186SArnaldo Carvalho de Melo  */
9168a74186SArnaldo Carvalho de Melo static inline
machine__kernel_maps(struct machine * machine)9268a74186SArnaldo Carvalho de Melo struct maps *machine__kernel_maps(struct machine *machine)
9368a74186SArnaldo Carvalho de Melo {
941a97cee6SIan Rogers 	return machine->kmaps;
9568a74186SArnaldo Carvalho de Melo }
9668a74186SArnaldo Carvalho de Melo 
97fbe2af45SAdrian Hunter int machine__get_kernel_start(struct machine *machine);
98fbe2af45SAdrian Hunter 
machine__kernel_start(struct machine * machine)99fbe2af45SAdrian Hunter static inline u64 machine__kernel_start(struct machine *machine)
100fbe2af45SAdrian Hunter {
101fbe2af45SAdrian Hunter 	if (!machine->kernel_start)
102fbe2af45SAdrian Hunter 		machine__get_kernel_start(machine);
103fbe2af45SAdrian Hunter 	return machine->kernel_start;
104fbe2af45SAdrian Hunter }
105fbe2af45SAdrian Hunter 
machine__kernel_ip(struct machine * machine,u64 ip)106fbe2af45SAdrian Hunter static inline bool machine__kernel_ip(struct machine *machine, u64 ip)
107fbe2af45SAdrian Hunter {
108fbe2af45SAdrian Hunter 	u64 kernel_start = machine__kernel_start(machine);
109fbe2af45SAdrian Hunter 
110fbe2af45SAdrian Hunter 	return ip >= kernel_start;
111fbe2af45SAdrian Hunter }
112fbe2af45SAdrian Hunter 
1138e80ad99SAdrian Hunter u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr);
1148e80ad99SAdrian Hunter 
115d75e6097SJiri Olsa struct thread *machine__find_thread(struct machine *machine, pid_t pid,
116d75e6097SJiri Olsa 				    pid_t tid);
1173035cb6cSAdrian Hunter struct thread *machine__idle_thread(struct machine *machine);
118cfe1c414SAdrian Hunter struct comm *machine__thread_exec_comm(struct machine *machine,
119cfe1c414SAdrian Hunter 				       struct thread *thread);
1209d2f8e22SArnaldo Carvalho de Melo 
121162f0befSFrederic Weisbecker int machine__process_comm_event(struct machine *machine, union perf_event *event,
122162f0befSFrederic Weisbecker 				struct perf_sample *sample);
123162f0befSFrederic Weisbecker int machine__process_exit_event(struct machine *machine, union perf_event *event,
124162f0befSFrederic Weisbecker 				struct perf_sample *sample);
125162f0befSFrederic Weisbecker int machine__process_fork_event(struct machine *machine, union perf_event *event,
126162f0befSFrederic Weisbecker 				struct perf_sample *sample);
127162f0befSFrederic Weisbecker int machine__process_lost_event(struct machine *machine, union perf_event *event,
128162f0befSFrederic Weisbecker 				struct perf_sample *sample);
129c4937a91SKan Liang int machine__process_lost_samples_event(struct machine *machine, union perf_event *event,
130c4937a91SKan Liang 					struct perf_sample *sample);
1314a96f7a0SAdrian Hunter int machine__process_aux_event(struct machine *machine,
1324a96f7a0SAdrian Hunter 			       union perf_event *event);
1330ad21f68SAdrian Hunter int machine__process_itrace_start_event(struct machine *machine,
1340ad21f68SAdrian Hunter 					union perf_event *event);
13561750473SAdrian Hunter int machine__process_aux_output_hw_id_event(struct machine *machine,
13661750473SAdrian Hunter 					    union perf_event *event);
137b8f8eb84SArnaldo Carvalho de Melo int machine__process_switch_event(struct machine *machine,
1380286039fSAdrian Hunter 				  union perf_event *event);
139f3b3614aSHari Bathini int machine__process_namespaces_event(struct machine *machine,
140f3b3614aSHari Bathini 				      union perf_event *event,
141f3b3614aSHari Bathini 				      struct perf_sample *sample);
142ba78c1c5SNamhyung Kim int machine__process_cgroup_event(struct machine *machine,
143ba78c1c5SNamhyung Kim 				  union perf_event *event,
144ba78c1c5SNamhyung Kim 				  struct perf_sample *sample);
145162f0befSFrederic Weisbecker int machine__process_mmap_event(struct machine *machine, union perf_event *event,
146162f0befSFrederic Weisbecker 				struct perf_sample *sample);
147162f0befSFrederic Weisbecker int machine__process_mmap2_event(struct machine *machine, union perf_event *event,
148162f0befSFrederic Weisbecker 				 struct perf_sample *sample);
1499aa0bfa3SSong Liu int machine__process_ksymbol(struct machine *machine,
1509aa0bfa3SSong Liu 			     union perf_event *event,
1519aa0bfa3SSong Liu 			     struct perf_sample *sample);
152246eba8eSAdrian Hunter int machine__process_text_poke(struct machine *machine,
153246eba8eSAdrian Hunter 			       union perf_event *event,
154246eba8eSAdrian Hunter 			       struct perf_sample *sample);
155162f0befSFrederic Weisbecker int machine__process_event(struct machine *machine, union perf_event *event,
156162f0befSFrederic Weisbecker 				struct perf_sample *sample);
157b0a7d1a0SArnaldo Carvalho de Melo 
15869d2591aSArnaldo Carvalho de Melo typedef void (*machine__process_t)(struct machine *machine, void *data);
15969d2591aSArnaldo Carvalho de Melo 
160876650e6SArnaldo Carvalho de Melo struct machines {
161876650e6SArnaldo Carvalho de Melo 	struct machine host;
162f3acb3a8SDavidlohr Bueso 	struct rb_root_cached guests;
163876650e6SArnaldo Carvalho de Melo };
164876650e6SArnaldo Carvalho de Melo 
165876650e6SArnaldo Carvalho de Melo void machines__init(struct machines *machines);
166876650e6SArnaldo Carvalho de Melo void machines__exit(struct machines *machines);
167876650e6SArnaldo Carvalho de Melo 
168876650e6SArnaldo Carvalho de Melo void machines__process_guests(struct machines *machines,
16969d2591aSArnaldo Carvalho de Melo 			      machine__process_t process, void *data);
17069d2591aSArnaldo Carvalho de Melo 
171876650e6SArnaldo Carvalho de Melo struct machine *machines__add(struct machines *machines, pid_t pid,
17269d2591aSArnaldo Carvalho de Melo 			      const char *root_dir);
173876650e6SArnaldo Carvalho de Melo struct machine *machines__find(struct machines *machines, pid_t pid);
174876650e6SArnaldo Carvalho de Melo struct machine *machines__findnew(struct machines *machines, pid_t pid);
175fcda5ff7SAdrian Hunter struct machine *machines__find_guest(struct machines *machines, pid_t pid);
176096fc361SAdrian Hunter struct thread *machines__findnew_guest_code(struct machines *machines, pid_t pid);
177096fc361SAdrian Hunter struct thread *machine__findnew_guest_code(struct machine *machine, pid_t pid);
17869d2591aSArnaldo Carvalho de Melo 
179876650e6SArnaldo Carvalho de Melo void machines__set_id_hdr_size(struct machines *machines, u16 id_hdr_size);
180cfe1c414SAdrian Hunter void machines__set_comm_exec(struct machines *machines, bool comm_exec);
181611a5ce8SAdrian Hunter 
1828fb598e5SDavid Ahern struct machine *machine__new_host(void);
1837d132caaSArnaldo Carvalho de Melo struct machine *machine__new_kallsyms(void);
18469d2591aSArnaldo Carvalho de Melo int machine__init(struct machine *machine, const char *root_dir, pid_t pid);
18569d2591aSArnaldo Carvalho de Melo void machine__exit(struct machine *machine);
1863f067dcaSArnaldo Carvalho de Melo void machine__delete_threads(struct machine *machine);
18769d2591aSArnaldo Carvalho de Melo void machine__delete(struct machine *machine);
1885e78c69bSHe Kuang void machine__remove_thread(struct machine *machine, struct thread *th);
18969d2591aSArnaldo Carvalho de Melo 
190644f2df2SArnaldo Carvalho de Melo struct branch_info *sample__resolve_bstack(struct perf_sample *sample,
191644f2df2SArnaldo Carvalho de Melo 					   struct addr_location *al);
192e80faac0SArnaldo Carvalho de Melo struct mem_info *sample__resolve_mem(struct perf_sample *sample,
193e80faac0SArnaldo Carvalho de Melo 				     struct addr_location *al);
19491d7b2deSArnaldo Carvalho de Melo 
19591d7b2deSArnaldo Carvalho de Melo struct callchain_cursor;
19691d7b2deSArnaldo Carvalho de Melo 
197cc8b7c2bSArnaldo Carvalho de Melo int thread__resolve_callchain(struct thread *thread,
19891d7b2deSArnaldo Carvalho de Melo 			      struct callchain_cursor *cursor,
19932dcd021SJiri Olsa 			      struct evsel *evsel,
20069d2591aSArnaldo Carvalho de Melo 			      struct perf_sample *sample,
201b21484f1SGreg Price 			      struct symbol **parent,
20291e95617SWaiman Long 			      struct addr_location *root_al,
20391e95617SWaiman Long 			      int max_stack);
20469d2591aSArnaldo Carvalho de Melo 
20569d2591aSArnaldo Carvalho de Melo /*
20669d2591aSArnaldo Carvalho de Melo  * Default guest kernel is defined by parameter --guestkallsyms
20769d2591aSArnaldo Carvalho de Melo  * and --guestmodules
20869d2591aSArnaldo Carvalho de Melo  */
machine__is_default_guest(struct machine * machine)20969d2591aSArnaldo Carvalho de Melo static inline bool machine__is_default_guest(struct machine *machine)
21069d2591aSArnaldo Carvalho de Melo {
21169d2591aSArnaldo Carvalho de Melo 	return machine ? machine->pid == DEFAULT_GUEST_KERNEL_ID : false;
21269d2591aSArnaldo Carvalho de Melo }
21369d2591aSArnaldo Carvalho de Melo 
machine__is_host(struct machine * machine)21469d2591aSArnaldo Carvalho de Melo static inline bool machine__is_host(struct machine *machine)
21569d2591aSArnaldo Carvalho de Melo {
21669d2591aSArnaldo Carvalho de Melo 	return machine ? machine->pid == HOST_KERNEL_ID : false;
21769d2591aSArnaldo Carvalho de Melo }
21869d2591aSArnaldo Carvalho de Melo 
219*cc2367eeSArnaldo Carvalho de Melo bool machine__is_lock_function(struct machine *machine, u64 addr);
220dbbd34a6SAdrian Hunter bool machine__is(struct machine *machine, const char *arch);
221b9f6fbb3SAlexandre Truong bool machine__normalized_is(struct machine *machine, const char *arch);
2229cecca32SAdrian Hunter int machine__nr_cpus_avail(struct machine *machine);
223dbbd34a6SAdrian Hunter 
224b91fc39fSArnaldo Carvalho de Melo struct thread *__machine__findnew_thread(struct machine *machine, pid_t pid, pid_t tid);
225b91fc39fSArnaldo Carvalho de Melo struct thread *machine__findnew_thread(struct machine *machine, pid_t pid, pid_t tid);
22669d2591aSArnaldo Carvalho de Melo 
2270e3149f8SArnaldo Carvalho de Melo struct dso *machine__findnew_dso_id(struct machine *machine, const char *filename, struct dso_id *id);
228aa7cc2aeSArnaldo Carvalho de Melo struct dso *machine__findnew_dso(struct machine *machine, const char *filename);
229aa7cc2aeSArnaldo Carvalho de Melo 
23069d2591aSArnaldo Carvalho de Melo size_t machine__fprintf(struct machine *machine, FILE *fp);
23169d2591aSArnaldo Carvalho de Melo 
23269d2591aSArnaldo Carvalho de Melo static inline
machine__find_kernel_symbol(struct machine * machine,u64 addr,struct map ** mapp)2333183f8caSArnaldo Carvalho de Melo struct symbol *machine__find_kernel_symbol(struct machine *machine, u64 addr,
234be39db9fSArnaldo Carvalho de Melo 					   struct map **mapp)
23569d2591aSArnaldo Carvalho de Melo {
2361a97cee6SIan Rogers 	return maps__find_symbol(machine->kmaps, addr, mapp);
23769d2591aSArnaldo Carvalho de Melo }
23869d2591aSArnaldo Carvalho de Melo 
23969d2591aSArnaldo Carvalho de Melo static inline
machine__find_kernel_symbol_by_name(struct machine * machine,const char * name,struct map ** mapp)2408acd3da0SArnaldo Carvalho de Melo struct symbol *machine__find_kernel_symbol_by_name(struct machine *machine,
2413183f8caSArnaldo Carvalho de Melo 						   const char *name,
242be39db9fSArnaldo Carvalho de Melo 						   struct map **mapp)
2438acd3da0SArnaldo Carvalho de Melo {
2441a97cee6SIan Rogers 	return maps__find_symbol_by_name(machine->kmaps, name, mapp);
2458acd3da0SArnaldo Carvalho de Melo }
2468acd3da0SArnaldo Carvalho de Melo 
24712a6d294SThomas Richter int arch__fix_module_text_start(u64 *start, u64 *size, const char *name);
24869d2591aSArnaldo Carvalho de Melo 
2493183f8caSArnaldo Carvalho de Melo int machine__load_kallsyms(struct machine *machine, const char *filename);
250329f0adeSArnaldo Carvalho de Melo 
2511d1a2654SArnaldo Carvalho de Melo int machine__load_vmlinux_path(struct machine *machine);
25269d2591aSArnaldo Carvalho de Melo 
253417c2ff6SArnaldo Carvalho de Melo size_t machine__fprintf_dsos_buildid(struct machine *machine, FILE *fp,
254417c2ff6SArnaldo Carvalho de Melo 				     bool (skip)(struct dso *dso, int parm), int parm);
255876650e6SArnaldo Carvalho de Melo size_t machines__fprintf_dsos(struct machines *machines, FILE *fp);
256876650e6SArnaldo Carvalho de Melo size_t machines__fprintf_dsos_buildid(struct machines *machines, FILE *fp,
257417c2ff6SArnaldo Carvalho de Melo 				     bool (skip)(struct dso *dso, int parm), int parm);
25869d2591aSArnaldo Carvalho de Melo 
25969d2591aSArnaldo Carvalho de Melo void machine__destroy_kernel_maps(struct machine *machine);
26069d2591aSArnaldo Carvalho de Melo int machine__create_kernel_maps(struct machine *machine);
26169d2591aSArnaldo Carvalho de Melo 
262876650e6SArnaldo Carvalho de Melo int machines__create_kernel_maps(struct machines *machines, pid_t pid);
263876650e6SArnaldo Carvalho de Melo int machines__create_guest_kernel_maps(struct machines *machines);
264876650e6SArnaldo Carvalho de Melo void machines__destroy_kernel_maps(struct machines *machines);
26569d2591aSArnaldo Carvalho de Melo 
26669d2591aSArnaldo Carvalho de Melo size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp);
26769d2591aSArnaldo Carvalho de Melo 
268c57f5eaaSJiri Olsa typedef int (*machine__dso_t)(struct dso *dso, struct machine *machine, void *priv);
269c57f5eaaSJiri Olsa 
270c57f5eaaSJiri Olsa int machine__for_each_dso(struct machine *machine, machine__dso_t fn,
271c57f5eaaSJiri Olsa 			  void *priv);
272a6bd98c4SBlake Jones 
273a6bd98c4SBlake Jones typedef int (*machine__map_t)(struct map *map, void *priv);
274a6bd98c4SBlake Jones int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn,
275a6bd98c4SBlake Jones 				 void *priv);
276a6bd98c4SBlake Jones 
27735feee19SDavid Ahern int machine__for_each_thread(struct machine *machine,
27835feee19SDavid Ahern 			     int (*fn)(struct thread *thread, void *p),
27935feee19SDavid Ahern 			     void *priv);
280a5499b37SAdrian Hunter int machines__for_each_thread(struct machines *machines,
281a5499b37SAdrian Hunter 			      int (*fn)(struct thread *thread, void *p),
282a5499b37SAdrian Hunter 			      void *priv);
28335feee19SDavid Ahern 
284b9d266baSAdrian Hunter pid_t machine__get_current_tid(struct machine *machine, int cpu);
285b9d266baSAdrian Hunter int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid,
286b9d266baSAdrian Hunter 			     pid_t tid);
287c3168b0dSArnaldo Carvalho de Melo /*
288ece2a4f4STzvetomir Stoyanov (VMware)  * For use with libtraceevent's tep_set_function_resolver()
289c3168b0dSArnaldo Carvalho de Melo  */
290c3168b0dSArnaldo Carvalho de Melo char *machine__resolve_kernel_addr(void *vmachine, unsigned long long *addrp, char **modp);
291b9d266baSAdrian Hunter 
2921c5aae77SAdrian Hunter void machine__get_kallsyms_filename(struct machine *machine, char *buf,
2931c5aae77SAdrian Hunter 				    size_t bufsz);
2941c5aae77SAdrian Hunter 
2951c5aae77SAdrian Hunter int machine__create_extra_kernel_maps(struct machine *machine,
2961c5aae77SAdrian Hunter 				      struct dso *kernel);
2971c5aae77SAdrian Hunter 
2981c5aae77SAdrian Hunter /* Kernel-space maps for symbols that are outside the main kernel map and module maps */
2991c5aae77SAdrian Hunter struct extra_kernel_map {
3001c5aae77SAdrian Hunter 	u64 start;
3011c5aae77SAdrian Hunter 	u64 end;
3021c5aae77SAdrian Hunter 	u64 pgoff;
3031c5aae77SAdrian Hunter 	char name[KMAP_NAME_LEN];
3041c5aae77SAdrian Hunter };
3051c5aae77SAdrian Hunter 
3061c5aae77SAdrian Hunter int machine__create_extra_kernel_map(struct machine *machine,
3071c5aae77SAdrian Hunter 				     struct dso *kernel,
3081c5aae77SAdrian Hunter 				     struct extra_kernel_map *xm);
3091c5aae77SAdrian Hunter 
3104d99e413SAdrian Hunter int machine__map_x86_64_entry_trampolines(struct machine *machine,
3114d99e413SAdrian Hunter 					  struct dso *kernel);
3124d99e413SAdrian Hunter 
3137e5c6f2cSArnaldo Carvalho de Melo int machine__resolve(struct machine *machine, struct addr_location *al,
3147e5c6f2cSArnaldo Carvalho de Melo 		     struct perf_sample *sample);
3157e5c6f2cSArnaldo Carvalho de Melo 
3169d2f8e22SArnaldo Carvalho de Melo #endif /* __PERF_MACHINE_H */
317