symbol.h revision 7d82a4640abdcc3ffbd89c7971a11e4ac7953b7f
1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef __PERF_SYMBOL
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define __PERF_SYMBOL 1
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
47d82a4640abdcc3ffbd89c7971a11e4ac7953b7fBen Cheng/* ANDROID_CHANGE_BEGIN */
57d82a4640abdcc3ffbd89c7971a11e4ac7953b7fBen Cheng#ifndef __APPLE__
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/types.h>
77d82a4640abdcc3ffbd89c7971a11e4ac7953b7fBen Cheng#endif
87d82a4640abdcc3ffbd89c7971a11e4ac7953b7fBen Cheng/* ANDROID_CHANGE_END */
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdbool.h>
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdint.h>
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "map.h"
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_BEGIN */
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#if 0
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/list.h>
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/rbtree.h>
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/list.h"
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/rbtree.h"
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_END */
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdio.h>
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifdef HAVE_CPLUS_DEMANGLE
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern char *cplus_demangle(const char *, int);
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline char *bfd_demangle(void __used *v, const char *c, int i)
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return cplus_demangle(c, i);
29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifdef NO_DEMANGLE
32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline char *bfd_demangle(void __used *v, const char __used *c,
33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				 int __used i)
34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return NULL;
36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <bfd.h>
39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint hex2u64(const char *ptr, u64 *val);
43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengchar *strxfrchar(char *s, char from, char to);
44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/*
46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * libelf 0.8.x and earlier do not support ELF_C_READ_MMAP;
47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * for newer versions we can use mmap to reduce memory usage:
48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifdef LIBELF_NO_MMAP
50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# define PERF_ELF_C_READ_MMAP ELF_C_READ
51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# define PERF_ELF_C_READ_MMAP ELF_C_READ_MMAP
53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef DMGL_PARAMS
56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define DMGL_PARAMS      (1 << 0)       /* Include function args */
57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define DMGL_ANSI        (1 << 1)       /* Include const, volatile, etc */
58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define BUILD_ID_SIZE 20
61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/** struct symbol - symtab entry
63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @ignore - resolvable but tools ignore it (e.g. idle routines)
65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol {
67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct rb_node	rb_node;
68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u64		start;
69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u64		end;
70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u16		namelen;
71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		binding;
72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	bool		ignore;
73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	char		name[0];
74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid symbol__delete(struct symbol *sym);
77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct strlist;
79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol_conf {
81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	unsigned short	priv_size;
82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	bool		try_vmlinux_path,
83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			use_modules,
84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			sort_by_name,
85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			show_nr_samples,
86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			use_callchain,
87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			exclude_other,
88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			show_cpu_utilization,
89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			initialized,
90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			kptr_restrict;
91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	*vmlinux_name,
92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*kallsyms_name,
93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*source_prefix,
94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*field_sep;
95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	*default_guest_vmlinux_name,
96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*default_guest_kallsyms,
97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*default_guest_modules;
98e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	*guestmount;
99e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	*dso_list_str,
100e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*comm_list_str,
101e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*sym_list_str,
102e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*col_width_list_str;
103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng       struct strlist	*dso_list,
104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*comm_list,
105e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			*sym_list;
106e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	*symfs;
107e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
108e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
109e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct symbol_conf symbol_conf;
110e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
111e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void *symbol__priv(struct symbol *sym)
112e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
113e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return ((void *)sym) - symbol_conf.priv_size;
114e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
115e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
116e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct ref_reloc_sym {
117e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	*name;
118e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u64		addr;
119e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u64		unrelocated_addr;
120e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
121e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
122e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map_symbol {
123e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct map    *map;
124e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct symbol *sym;
125e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	bool	      unfolded;
126e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	bool	      has_children;
127e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
128e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
129e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct addr_location {
130e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct thread *thread;
131e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct map    *map;
132e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct symbol *sym;
133e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u64	      addr;
134e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	char	      level;
135e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	bool	      filtered;
136e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8	      cpumode;
137e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	s32	      cpu;
138e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
139e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
140e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengenum dso_kernel_type {
141e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	DSO_TYPE_USER = 0,
142e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	DSO_TYPE_KERNEL,
143e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	DSO_TYPE_GUEST_KERNEL
144e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
145e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
146e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct dso {
147e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct list_head node;
148e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct rb_root	 symbols[MAP__NR_TYPES];
149e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	struct rb_root	 symbol_names[MAP__NR_TYPES];
150e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	enum dso_kernel_type	kernel;
151e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 adjust_symbols:1;
152e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 has_build_id:1;
153e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 hit:1;
154e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 annotate_warned:1;
155e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 sname_alloc:1;
156e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 lname_alloc:1;
157e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	unsigned char	 symtab_type;
158e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 sorted_by_name;
159e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 loaded;
160e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u8		 build_id[BUILD_ID_SIZE];
161e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	const char	 *short_name;
162e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	char	 	 *long_name;
163e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u16		 long_name_len;
164e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	u16		 short_name_len;
165e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	char		 name[0];
166e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
167e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
168e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct dso *dso__new(const char *name);
169e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct dso *dso__new_kernel(const char *name);
170e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid dso__delete(struct dso *dso);
171e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
172e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint dso__name_len(const struct dso *dso);
173e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
174e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool dso__loaded(const struct dso *dso, enum map_type type);
175e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool dso__sorted_by_name(const struct dso *dso, enum map_type type);
176e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
177e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void dso__set_loaded(struct dso *dso, enum map_type type)
178e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
179e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	dso->loaded |= (1 << type);
180e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
181e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
182e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid dso__sort_by_name(struct dso *dso, enum map_type type);
183e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
184e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct dso *__dsos__findnew(struct list_head *head, const char *name);
185e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
186e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint dso__load(struct dso *dso, struct map *map, symbol_filter_t filter);
187e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint dso__load_vmlinux(struct dso *dso, struct map *map,
188e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		      const char *vmlinux, symbol_filter_t filter);
189e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint dso__load_vmlinux_path(struct dso *dso, struct map *map,
190e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			   symbol_filter_t filter);
191e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint dso__load_kallsyms(struct dso *dso, const char *filename, struct map *map,
192e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		       symbol_filter_t filter);
193e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint machine__load_kallsyms(struct machine *machine, const char *filename,
194e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			   enum map_type type, symbol_filter_t filter);
195e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint machine__load_vmlinux_path(struct machine *machine, enum map_type type,
196e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			       symbol_filter_t filter);
197e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
198e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t __dsos__fprintf(struct list_head *head, FILE *fp);
199e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
200e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t machine__fprintf_dsos_buildid(struct machine *machine,
201e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				     FILE *fp, bool with_hits);
202e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t machines__fprintf_dsos(struct rb_root *machines, FILE *fp);
203e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t machines__fprintf_dsos_buildid(struct rb_root *machines,
204e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				      FILE *fp, bool with_hits);
205e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t dso__fprintf_buildid(struct dso *dso, FILE *fp);
206e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t dso__fprintf_symbols_by_name(struct dso *dso,
207e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				    enum map_type type, FILE *fp);
208e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t dso__fprintf(struct dso *dso, enum map_type type, FILE *fp);
209e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
210e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengenum symtab_type {
211e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__KALLSYMS = 0,
212e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__GUEST_KALLSYMS,
213e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__JAVA_JIT,
214e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__BUILD_ID_CACHE,
215e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__FEDORA_DEBUGINFO,
216e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__UBUNTU_DEBUGINFO,
217e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__BUILDID_DEBUGINFO,
218e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__SYSTEM_PATH_DSO,
219e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__GUEST_KMODULE,
220e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__SYSTEM_PATH_KMODULE,
221e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	SYMTAB__NOT_FOUND,
222e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng};
223e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
224e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengchar dso__symtab_origin(const struct dso *dso);
225e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid dso__set_long_name(struct dso *dso, char *name);
226e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid dso__set_build_id(struct dso *dso, void *build_id);
227e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid dso__read_running_kernel_build_id(struct dso *dso,
228e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				       struct machine *machine);
229e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *dso__find_symbol(struct dso *dso, enum map_type type,
230e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				u64 addr);
231e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type,
232e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					const char *name);
233e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
234e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint filename__read_build_id(const char *filename, void *bf, size_t size);
235e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint sysfs__read_build_id(const char *filename, void *bf, size_t size);
236e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool __dsos__read_build_ids(struct list_head *head, bool with_hits);
237e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint build_id__sprintf(const u8 *build_id, int len, char *bf);
238e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint kallsyms__parse(const char *filename, void *arg,
239e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		    int (*process_symbol)(void *arg, const char *name,
240e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng					  char type, u64 start, u64 end));
241e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
242e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid machine__destroy_kernel_maps(struct machine *machine);
243e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint __machine__create_kernel_maps(struct machine *machine, struct dso *kernel);
244e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint machine__create_kernel_maps(struct machine *machine);
245e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
246e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint machines__create_kernel_maps(struct rb_root *machines, pid_t pid);
247e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint machines__create_guest_kernel_maps(struct rb_root *machines);
248e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid machines__destroy_guest_kernel_maps(struct rb_root *machines);
249e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
250e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint symbol__init(void);
251e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid symbol__exit(void);
252e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengbool symbol_type__is_a(char symbol_type, enum map_type map_type);
253e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
254e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp);
255e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
256e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif /* __PERF_SYMBOL */
257