1 #ifndef __PERF_SYMBOL 2 #define __PERF_SYMBOL 1 3 4 #include <linux/types.h> 5 #include <stdbool.h> 6 #include "types.h" 7 #include <linux/list.h> 8 #include <linux/rbtree.h> 9 #include "event.h" 10 11 #ifdef HAVE_CPLUS_DEMANGLE 12 extern char *cplus_demangle(const char *, int); 13 14 static inline char *bfd_demangle(void __used *v, const char *c, int i) 15 { 16 return cplus_demangle(c, i); 17 } 18 #else 19 #ifdef NO_DEMANGLE 20 static inline char *bfd_demangle(void __used *v, const char __used *c, 21 int __used i) 22 { 23 return NULL; 24 } 25 #else 26 #include <bfd.h> 27 #endif 28 #endif 29 30 /* 31 * 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: 33 */ 34 #ifdef LIBELF_NO_MMAP 35 # define PERF_ELF_C_READ_MMAP ELF_C_READ 36 #else 37 # define PERF_ELF_C_READ_MMAP ELF_C_READ_MMAP 38 #endif 39 40 #ifndef DMGL_PARAMS 41 #define DMGL_PARAMS (1 << 0) /* Include function args */ 42 #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ 43 #endif 44 45 struct symbol { 46 struct rb_node rb_node; 47 u64 start; 48 u64 end; 49 char name[0]; 50 }; 51 52 struct symbol_conf { 53 unsigned short priv_size; 54 bool try_vmlinux_path, 55 use_modules; 56 const char *vmlinux_name; 57 }; 58 59 extern unsigned int symbol__priv_size; 60 61 static inline void *symbol__priv(struct symbol *self) 62 { 63 return ((void *)self) - symbol__priv_size; 64 } 65 66 struct addr_location { 67 struct thread *thread; 68 struct map *map; 69 struct symbol *sym; 70 u64 addr; 71 char level; 72 }; 73 74 struct dso { 75 struct list_head node; 76 struct rb_root symbols[MAP__NR_TYPES]; 77 struct symbol *(*find_symbol)(struct dso *self, 78 enum map_type type, u64 addr); 79 u8 adjust_symbols:1; 80 u8 slen_calculated:1; 81 u8 has_build_id:1; 82 u8 kernel:1; 83 unsigned char origin; 84 u8 loaded; 85 u8 build_id[BUILD_ID_SIZE]; 86 u16 long_name_len; 87 const char *short_name; 88 char *long_name; 89 char name[0]; 90 }; 91 92 struct dso *dso__new(const char *name); 93 void dso__delete(struct dso *self); 94 95 bool dso__loaded(const struct dso *self, enum map_type type); 96 97 struct dso *dsos__findnew(const char *name); 98 int dso__load(struct dso *self, struct map *map, symbol_filter_t filter); 99 void dsos__fprintf(FILE *fp); 100 size_t dsos__fprintf_buildid(FILE *fp); 101 102 size_t dso__fprintf_buildid(struct dso *self, FILE *fp); 103 size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp); 104 char dso__symtab_origin(const struct dso *self); 105 void dso__set_build_id(struct dso *self, void *build_id); 106 107 int filename__read_build_id(const char *filename, void *bf, size_t size); 108 int sysfs__read_build_id(const char *filename, void *bf, size_t size); 109 bool dsos__read_build_ids(void); 110 int build_id__sprintf(u8 *self, int len, char *bf); 111 112 size_t kernel_maps__fprintf(FILE *fp); 113 114 int symbol__init(struct symbol_conf *conf); 115 116 struct thread; 117 struct thread *kthread; 118 extern struct list_head dsos__user, dsos__kernel; 119 extern struct dso *vdso; 120 #endif /* __PERF_SYMBOL */ 121