diff options
Diffstat (limited to 'tools/perf/util/symbol.h')
| -rw-r--r-- | tools/perf/util/symbol.h | 80 | 
1 files changed, 64 insertions, 16 deletions
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index f30a3742891..032469e4187 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -3,10 +3,11 @@  #include <linux/types.h>  #include <stdbool.h> -#include "types.h" +#include <stdint.h> +#include "map.h"  #include <linux/list.h>  #include <linux/rbtree.h> -#include "event.h" +#include <stdio.h>  #define DEBUG_CACHE_DIR ".debug" @@ -29,6 +30,9 @@ static inline char *bfd_demangle(void __used *v, const char __used *c,  #endif  #endif +int hex2u64(const char *ptr, u64 *val); +char *strxfrchar(char *s, char from, char to); +  /*   * libelf 0.8.x and earlier do not support ELF_C_READ_MMAP;   * for newer versions we can use mmap to reduce memory usage: @@ -44,10 +48,13 @@ static inline char *bfd_demangle(void __used *v, const char __used *c,  #define DMGL_ANSI        (1 << 1)       /* Include const, volatile, etc */  #endif +#define BUILD_ID_SIZE 20 +  struct symbol {  	struct rb_node	rb_node;  	u64		start;  	u64		end; +	u16		namelen;  	char		name[0];  }; @@ -63,10 +70,15 @@ struct symbol_conf {  			show_nr_samples,  			use_callchain,  			exclude_other, -			full_paths; +			full_paths, +			show_cpu_utilization;  	const char	*vmlinux_name,  			*field_sep; -	char            *dso_list_str, +	const char	*default_guest_vmlinux_name, +			*default_guest_kallsyms, +			*default_guest_modules; +	const char	*guestmount; +	const char	*dso_list_str,  			*comm_list_str,  			*sym_list_str,  			*col_width_list_str; @@ -88,6 +100,11 @@ struct ref_reloc_sym {  	u64		unrelocated_addr;  }; +struct map_symbol { +	struct map    *map; +	struct symbol *sym; +}; +  struct addr_location {  	struct thread *thread;  	struct map    *map; @@ -95,6 +112,13 @@ struct addr_location {  	u64	      addr;  	char	      level;  	bool	      filtered; +	unsigned int  cpumode; +}; + +enum dso_kernel_type { +	DSO_TYPE_USER = 0, +	DSO_TYPE_KERNEL, +	DSO_TYPE_GUEST_KERNEL  };  struct dso { @@ -104,8 +128,9 @@ struct dso {  	u8		 adjust_symbols:1;  	u8		 slen_calculated:1;  	u8		 has_build_id:1; -	u8		 kernel:1; +	enum dso_kernel_type	kernel;  	u8		 hit:1; +	u8		 annotate_warned:1;  	unsigned char	 origin;  	u8		 sorted_by_name;  	u8		 loaded; @@ -131,42 +156,65 @@ static inline void dso__set_loaded(struct dso *self, enum map_type type)  void dso__sort_by_name(struct dso *self, enum map_type type); -extern struct list_head dsos__user, dsos__kernel; -  struct dso *__dsos__findnew(struct list_head *head, const char *name); -static inline struct dso *dsos__findnew(const char *name) -{ -	return __dsos__findnew(&dsos__user, name); -} -  int dso__load(struct dso *self, struct map *map, symbol_filter_t filter);  int dso__load_vmlinux_path(struct dso *self, struct map *map,  			   symbol_filter_t filter);  int dso__load_kallsyms(struct dso *self, const char *filename, struct map *map,  		       symbol_filter_t filter); -void dsos__fprintf(FILE *fp); -size_t dsos__fprintf_buildid(FILE *fp, bool with_hits); +int machine__load_kallsyms(struct machine *self, const char *filename, +			   enum map_type type, symbol_filter_t filter); +int machine__load_vmlinux_path(struct machine *self, enum map_type type, +			       symbol_filter_t filter); + +size_t __dsos__fprintf(struct list_head *head, FILE *fp); + +size_t machines__fprintf_dsos(struct rb_root *self, FILE *fp); +size_t machines__fprintf_dsos_buildid(struct rb_root *self, FILE *fp, bool with_hits);  size_t dso__fprintf_buildid(struct dso *self, FILE *fp);  size_t dso__fprintf(struct dso *self, enum map_type type, FILE *fp); + +enum dso_origin { +	DSO__ORIG_KERNEL = 0, +	DSO__ORIG_GUEST_KERNEL, +	DSO__ORIG_JAVA_JIT, +	DSO__ORIG_BUILD_ID_CACHE, +	DSO__ORIG_FEDORA, +	DSO__ORIG_UBUNTU, +	DSO__ORIG_BUILDID, +	DSO__ORIG_DSO, +	DSO__ORIG_GUEST_KMODULE, +	DSO__ORIG_KMODULE, +	DSO__ORIG_NOT_FOUND, +}; +  char dso__symtab_origin(const struct dso *self);  void dso__set_long_name(struct dso *self, char *name);  void dso__set_build_id(struct dso *self, void *build_id); -void dso__read_running_kernel_build_id(struct dso *self); +void dso__read_running_kernel_build_id(struct dso *self, struct machine *machine);  struct symbol *dso__find_symbol(struct dso *self, enum map_type type, u64 addr);  struct symbol *dso__find_symbol_by_name(struct dso *self, enum map_type type,  					const char *name);  int filename__read_build_id(const char *filename, void *bf, size_t size);  int sysfs__read_build_id(const char *filename, void *bf, size_t size); -bool dsos__read_build_ids(bool with_hits); +bool __dsos__read_build_ids(struct list_head *head, bool with_hits);  int build_id__sprintf(const u8 *self, int len, char *bf);  int kallsyms__parse(const char *filename, void *arg,  		    int (*process_symbol)(void *arg, const char *name,  					  char type, u64 start)); +int __machine__create_kernel_maps(struct machine *self, struct dso *kernel); +int machine__create_kernel_maps(struct machine *self); + +int machines__create_kernel_maps(struct rb_root *self, pid_t pid); +int machines__create_guest_kernel_maps(struct rb_root *self); +  int symbol__init(void);  bool symbol_type__is_a(char symbol_type, enum map_type map_type); +size_t vmlinux_path__fprintf(FILE *fp); +  #endif /* __PERF_SYMBOL */  |