perf symbols: Store the ELF symbol type in the symbol struct
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: af30bffa2f9aa73a648ea932ed468dc3031ac1f9 Gitweb: https://git.kernel.org/tip/af30bffa2f9aa73a648ea932ed468dc3031ac1f9 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Thu, 26 Apr 2018 11:09:10 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 26 Apr 2018 13:47:18 -0300
perf symbols: Store the ELF symbol type in the symbol struct
There is code that needs to see if a resolved address is a function, so, since we're going to ditch the MAP__{FUNCTION,VARIABLE} split, store that info in the per symbol struct.
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/tests/hists_common.c | 2 +- tools/perf/util/db-export.c | 2 +- tools/perf/util/srcline.c | 1 + tools/perf/util/symbol-elf.c | 7 ++++--- tools/perf/util/symbol.c | 7 ++++--- tools/perf/util/symbol.h | 5 +++-- 6 files changed, 14 insertions(+), 10 deletions(-)
tools/perf/tests/hists_common.c +1 -1
@@ -138,7 +138,7 @@ struct machine *setup_fake_machine(struct machines *machines)struct fake_sym *fsym = &fake_symbols[i].syms[k]; sym =symbol__new (fsym->start, fsym->length, -STB_GLOBAL , fsym->name); +STB_GLOBAL ,STT_FUNC , fsym->name);if (sym ==NULL ) {dso__put (dso); goto out;
tools/perf/util/db-export.c +1 -1
@@ -247,7 +247,7 @@ static int db_ids_from_al(struct db_export *dbe, struct addr_location *al, *dso_db_id = dso->db_id;if (!al->sym) { - al->sym =symbol__new (al->addr,0 ,0 ,"unknown" ); + al->sym =symbol__new (al->addr,0 ,0 ,0 ,"unknown" );if (al->sym)dso__insert_symbol (dso, al->map->type, al->sym); }
tools/perf/util/srcline.c +1 -0
@@ -103,6 +103,7 @@ static struct symbol *new_inline_sym(struct dso *dso, inline_sym =symbol__new (base_sym ? base_sym->start :0 , base_sym ? base_sym->end :0 , base_sym ? base_sym->binding :0 , + base_sym ? base_sym->type :0 , funcname);if (inline_sym) inline_sym->inlined =1 ;
tools/perf/util/symbol-elf.c +4 -3
@@ -364,7 +364,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss, struct map *free (demangled); f =symbol__new (plt_offset, plt_entry_size, -STB_GLOBAL , sympltname); +STB_GLOBAL ,STT_FUNC , sympltname);if (!f) goto out_elf_end;
@@ -390,7 +390,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss, struct map *free (demangled); f =symbol__new (plt_offset, plt_entry_size, -STB_GLOBAL , sympltname); +STB_GLOBAL ,STT_FUNC , sympltname);if (!f) goto out_elf_end;
@@ -1102,7 +1102,8 @@ new_symbol: elf_name = demangled; f =symbol__new (sym.st_value, sym.st_size, -GELF_ST_BIND (sym.st_info), elf_name); +GELF_ST_BIND (sym.st_info), +GELF_ST_TYPE (sym.st_info), elf_name);free (demangled);if (!f) goto out_elf_end;
tools/perf/util/symbol.c +4 -3
@@ -256,7 +256,7 @@ out_unlock:up_write (&maps->lock); } -struct symbol *symbol__new (u64 start,u64 len,u8 binding,const char *name) +struct symbol *symbol__new (u64 start,u64 len,u8 binding,u8 type,const char *name) {size_t namelen =strlen (name) +1 ; struct symbol *sym = calloc(1, (symbol_conf.priv_size +
@@ -274,6 +274,7 @@ struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name) sym->start = start; sym->end = len ? start + len : start; + sym->type = type; sym->binding = binding; sym->namelen = namelen -1 ;
@@ -682,7 +683,7 @@ static int map__process_kallsym_symbol(void *arg, const char *name,* symbols, setting length to 0, and rely on * symbols__fixup_end() to fix it up. */ - sym =symbol__new (start,0 ,kallsyms2elf_binding (type), name); + sym =symbol__new (start,0 ,kallsyms2elf_binding (type),kallsyms2elf_type (type), name);if (sym ==NULL )return -ENOMEM ;/*
@@ -1395,7 +1396,7 @@ static int dso__load_perf_map(const char *map_path, struct dso *dso,if (len +2 >= line_len)continue ; - sym =symbol__new (start, size,STB_GLOBAL , line + len); + sym =symbol__new (start, size,STB_GLOBAL ,STT_FUNC , line + len);if (sym ==NULL ) goto out_delete_line;
tools/perf/util/symbol.h +3 -2
@@ -57,7 +57,8 @@ struct symbol {u64 start;u64 end;u16 namelen; -u8 binding; + u8 type:4; + u8 binding:4; u8 idle:1; u8 ignore:1; u8 inlined:1;
@@ -292,7 +293,7 @@ void symbol__exit(void);void symbol__elf_init (void );int symbol__annotation_init (void ); -struct symbol *symbol__new (u64 start,u64 len,u8 binding,const char *name); +struct symbol *symbol__new (u64 start,u64 len,u8 binding,u8 type,const char *name); size_t __symbol__fprintf_symname_offs(const struct symbol *sym, const struct addr_location *al, bool unknown_as_addr,