Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf symbols: Filter samples with unresolved symbol when "--symbols" option is used

Report/top commands support to only handle specific symbols with
"--symbols" option, but current code will keep those samples whose
symbol can't be resolved, which should actually be filtered.

If we run following commands:
$perf record -a tree
$perf report --symbols intel_idle -n
the output will be:

Without the patch:
==================
46.27% 156 sshd [unknown]
26.05% 48 swapper [kernel.kallsyms]
17.26% 38 tree libc-2.12.1.so
7.69% 17 tree tree
2.73% 6 tree ld-2.12.1.so

With the patch:
===============
100.00% 48 swapper [kernel.kallsyms]

Signed-off-by: Feng Tang <feng.tang@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1347007349-3102-2-git-send-email-feng.tang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Feng Tang and committed by
Arnaldo Carvalho de Melo
1500b93b 87ff50a3

+3 -2
+3 -2
tools/perf/util/event.c
··· 904 904 al->sym = map__find_symbol(al->map, al->addr, filter); 905 905 } 906 906 907 - if (symbol_conf.sym_list && al->sym && 908 - !strlist__has_entry(symbol_conf.sym_list, al->sym->name)) 907 + if (symbol_conf.sym_list && 908 + (!al->sym || !strlist__has_entry(symbol_conf.sym_list, 909 + al->sym->name))) 909 910 goto out_filtered; 910 911 911 912 return 0;