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