aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/symbol.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/symbol.h')
-rw-r--r--tools/perf/util/symbol.h114
1 files changed, 97 insertions, 17 deletions
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 8aded2356f79..5e02d2c17154 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -3,10 +3,13 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5#include <stdbool.h> 5#include <stdbool.h>
6#include "types.h" 6#include <stdint.h>
7#include "map.h"
7#include <linux/list.h> 8#include <linux/list.h>
8#include <linux/rbtree.h> 9#include <linux/rbtree.h>
9#include "event.h" 10#include <stdio.h>
11
12#define DEBUG_CACHE_DIR ".debug"
10 13
11#ifdef HAVE_CPLUS_DEMANGLE 14#ifdef HAVE_CPLUS_DEMANGLE
12extern char *cplus_demangle(const char *, int); 15extern char *cplus_demangle(const char *, int);
@@ -27,6 +30,9 @@ static inline char *bfd_demangle(void __used *v, const char __used *c,
27#endif 30#endif
28#endif 31#endif
29 32
33int hex2u64(const char *ptr, u64 *val);
34char *strxfrchar(char *s, char from, char to);
35
30/* 36/*
31 * libelf 0.8.x and earlier do not support ELF_C_READ_MMAP; 37 * libelf 0.8.x and earlier do not support ELF_C_READ_MMAP;
32 * for newer versions we can use mmap to reduce memory usage: 38 * for newer versions we can use mmap to reduce memory usage:
@@ -42,13 +48,18 @@ static inline char *bfd_demangle(void __used *v, const char __used *c,
42#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ 48#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
43#endif 49#endif
44 50
51#define BUILD_ID_SIZE 20
52
45struct symbol { 53struct symbol {
46 struct rb_node rb_node; 54 struct rb_node rb_node;
47 u64 start; 55 u64 start;
48 u64 end; 56 u64 end;
57 u16 namelen;
49 char name[0]; 58 char name[0];
50}; 59};
51 60
61void symbol__delete(struct symbol *self);
62
52struct strlist; 63struct strlist;
53 64
54struct symbol_conf { 65struct symbol_conf {
@@ -58,10 +69,16 @@ struct symbol_conf {
58 sort_by_name, 69 sort_by_name,
59 show_nr_samples, 70 show_nr_samples,
60 use_callchain, 71 use_callchain,
61 exclude_other; 72 exclude_other,
73 full_paths,
74 show_cpu_utilization;
62 const char *vmlinux_name, 75 const char *vmlinux_name,
63 *field_sep; 76 *field_sep;
64 char *dso_list_str, 77 const char *default_guest_vmlinux_name,
78 *default_guest_kallsyms,
79 *default_guest_modules;
80 const char *guestmount;
81 const char *dso_list_str,
65 *comm_list_str, 82 *comm_list_str,
66 *sym_list_str, 83 *sym_list_str,
67 *col_width_list_str; 84 *col_width_list_str;
@@ -77,6 +94,17 @@ static inline void *symbol__priv(struct symbol *self)
77 return ((void *)self) - symbol_conf.priv_size; 94 return ((void *)self) - symbol_conf.priv_size;
78} 95}
79 96
97struct ref_reloc_sym {
98 const char *name;
99 u64 addr;
100 u64 unrelocated_addr;
101};
102
103struct map_symbol {
104 struct map *map;
105 struct symbol *sym;
106};
107
80struct addr_location { 108struct addr_location {
81 struct thread *thread; 109 struct thread *thread;
82 struct map *map; 110 struct map *map;
@@ -84,6 +112,13 @@ struct addr_location {
84 u64 addr; 112 u64 addr;
85 char level; 113 char level;
86 bool filtered; 114 bool filtered;
115 unsigned int cpumode;
116};
117
118enum dso_kernel_type {
119 DSO_TYPE_USER = 0,
120 DSO_TYPE_KERNEL,
121 DSO_TYPE_GUEST_KERNEL
87}; 122};
88 123
89struct dso { 124struct dso {
@@ -93,49 +128,94 @@ struct dso {
93 u8 adjust_symbols:1; 128 u8 adjust_symbols:1;
94 u8 slen_calculated:1; 129 u8 slen_calculated:1;
95 u8 has_build_id:1; 130 u8 has_build_id:1;
96 u8 kernel:1; 131 enum dso_kernel_type kernel;
132 u8 hit:1;
133 u8 annotate_warned:1;
97 unsigned char origin; 134 unsigned char origin;
98 u8 sorted_by_name; 135 u8 sorted_by_name;
99 u8 loaded; 136 u8 loaded;
100 u8 build_id[BUILD_ID_SIZE]; 137 u8 build_id[BUILD_ID_SIZE];
101 u16 long_name_len;
102 const char *short_name; 138 const char *short_name;
103 char *long_name; 139 char *long_name;
140 u16 long_name_len;
141 u16 short_name_len;
104 char name[0]; 142 char name[0];
105}; 143};
106 144
107struct dso *dso__new(const char *name); 145struct dso *dso__new(const char *name);
146struct dso *dso__new_kernel(const char *name);
108void dso__delete(struct dso *self); 147void dso__delete(struct dso *self);
109 148
110bool dso__loaded(const struct dso *self, enum map_type type); 149bool dso__loaded(const struct dso *self, enum map_type type);
111bool dso__sorted_by_name(const struct dso *self, enum map_type type); 150bool dso__sorted_by_name(const struct dso *self, enum map_type type);
112 151
152static inline void dso__set_loaded(struct dso *self, enum map_type type)
153{
154 self->loaded |= (1 << type);
155}
156
113void dso__sort_by_name(struct dso *self, enum map_type type); 157void dso__sort_by_name(struct dso *self, enum map_type type);
114 158
115struct perf_session; 159struct dso *__dsos__findnew(struct list_head *head, const char *name);
160
161int dso__load(struct dso *self, struct map *map, symbol_filter_t filter);
162int dso__load_vmlinux_path(struct dso *self, struct map *map,
163 symbol_filter_t filter);
164int dso__load_kallsyms(struct dso *self, const char *filename, struct map *map,
165 symbol_filter_t filter);
166int machine__load_kallsyms(struct machine *self, const char *filename,
167 enum map_type type, symbol_filter_t filter);
168int machine__load_vmlinux_path(struct machine *self, enum map_type type,
169 symbol_filter_t filter);
170
171size_t __dsos__fprintf(struct list_head *head, FILE *fp);
116 172
117struct dso *dsos__findnew(const char *name); 173size_t machine__fprintf_dsos_buildid(struct machine *self, FILE *fp, bool with_hits);
118int dso__load(struct dso *self, struct map *map, struct perf_session *session, 174size_t machines__fprintf_dsos(struct rb_root *self, FILE *fp);
119 symbol_filter_t filter); 175size_t machines__fprintf_dsos_buildid(struct rb_root *self, FILE *fp, bool with_hits);
120void dsos__fprintf(FILE *fp);
121size_t dsos__fprintf_buildid(FILE *fp);
122 176
123size_t dso__fprintf_buildid(struct dso *self, FILE *fp); 177size_t dso__fprintf_buildid(struct dso *self, FILE *fp);
124size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp); 178size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp);
179
180enum dso_origin {
181 DSO__ORIG_KERNEL = 0,
182 DSO__ORIG_GUEST_KERNEL,
183 DSO__ORIG_JAVA_JIT,
184 DSO__ORIG_BUILD_ID_CACHE,
185 DSO__ORIG_FEDORA,
186 DSO__ORIG_UBUNTU,
187 DSO__ORIG_BUILDID,
188 DSO__ORIG_DSO,
189 DSO__ORIG_GUEST_KMODULE,
190 DSO__ORIG_KMODULE,
191 DSO__ORIG_NOT_FOUND,
192};
193
125char dso__symtab_origin(const struct dso *self); 194char dso__symtab_origin(const struct dso *self);
195void dso__set_long_name(struct dso *self, char *name);
126void dso__set_build_id(struct dso *self, void *build_id); 196void dso__set_build_id(struct dso *self, void *build_id);
197void dso__read_running_kernel_build_id(struct dso *self, struct machine *machine);
127struct symbol *dso__find_symbol(struct dso *self, enum map_type type, u64 addr); 198struct symbol *dso__find_symbol(struct dso *self, enum map_type type, u64 addr);
128struct symbol *dso__find_symbol_by_name(struct dso *self, enum map_type type, 199struct symbol *dso__find_symbol_by_name(struct dso *self, enum map_type type,
129 const char *name); 200 const char *name);
130 201
131int filename__read_build_id(const char *filename, void *bf, size_t size); 202int filename__read_build_id(const char *filename, void *bf, size_t size);
132int sysfs__read_build_id(const char *filename, void *bf, size_t size); 203int sysfs__read_build_id(const char *filename, void *bf, size_t size);
133bool dsos__read_build_ids(void); 204bool __dsos__read_build_ids(struct list_head *head, bool with_hits);
134int build_id__sprintf(u8 *self, int len, char *bf); 205int build_id__sprintf(const u8 *self, int len, char *bf);
206int kallsyms__parse(const char *filename, void *arg,
207 int (*process_symbol)(void *arg, const char *name,
208 char type, u64 start));
209
210int __machine__create_kernel_maps(struct machine *self, struct dso *kernel);
211int machine__create_kernel_maps(struct machine *self);
212
213int machines__create_kernel_maps(struct rb_root *self, pid_t pid);
214int machines__create_guest_kernel_maps(struct rb_root *self);
135 215
136int symbol__init(void); 216int symbol__init(void);
137int perf_session__create_kernel_maps(struct perf_session *self); 217bool symbol_type__is_a(char symbol_type, enum map_type map_type);
218
219size_t machine__fprintf_vmlinux_path(struct machine *self, FILE *fp);
138 220
139extern struct list_head dsos__user, dsos__kernel;
140extern struct dso *vdso;
141#endif /* __PERF_SYMBOL */ 221#endif /* __PERF_SYMBOL */