• A
    perf symbols: Allow lookups by symbol name too · 79406cd7
    Arnaldo Carvalho de Melo 提交于
    Configurable via symbol_conf.sort_by_name, so that the cost of an
    extra rb_node on all 'struct symbol' instances is not paid by tools
    that only want to decode addresses.
    
    How to use it:
    
    	symbol_conf.sort_by_name = true;
    	symbol_init(&symbol_conf);
    
    	struct map *map = map_groups__find_by_name(kmaps, MAP__VARIABLE, "[kernel.kallsyms]");
    
    	if (map == NULL) {
    		pr_err("couldn't find map!\n");
    		kernel_maps__fprintf(stdout);
    	} else {
    		struct symbol *sym = map__find_symbol_by_name(map, sym_filter, NULL);
    		if (sym == NULL)
    			pr_err("couldn't find symbol %s!\n", sym_filter);
    		else
    			pr_info("symbol %s: %#Lx-%#Lx \n", sym_filter, sym->start, sym->end);
    	}
    
    Looking over the vmlinux/kallsyms is common enough that I'll add a
    variable to the upcoming struct perf_session to avoid the need to
    use map_groups__find_by_name to get the main vmlinux/kallsyms map.
    
    The above example looks on the 'variable' symtab, but it is just
    like that for the functions one.
    
    Also the sort operation is done when we first use
    map__find_symbol_by_name, in a lazy way.
    Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frédéric Weisbecker <fweisbec@gmail.com>
    Cc: Masami Hiramatsu <mhiramat@redhat.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    LKML-Reference: <1260564622-12392-1-git-send-email-acme@infradead.org>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    79406cd7
symbol.h 3.1 KB