1
0
Fork 0
alistair23-linux/tools/perf/util
Masami Hiramatsu 082f96a93e perf probe: Fix perf probe to find correct variable DIE
Fix perf probe to find correct variable DIE which has location or
external instance by tracking down the lexical blocks.

Current die_find_variable() expects that the all variable DIEs
which has DW_TAG_variable have a location. However, since recent
dwarf information may have declaration variable DIEs at the
entry of function (subprogram), die_find_variable() returns it.

To solve this problem, it must track down the DIE tree to find
a DIE which has an actual location or a reference for external
instance.

e.g. finding a DIE which origin is <0xdc73>;

 <1><11496>: Abbrev Number: 95 (DW_TAG_subprogram)
    <11497>   DW_AT_abstract_origin: <0xdc42>
    <1149b>   DW_AT_low_pc      : 0x1850
[...]
 <2><114cc>: Abbrev Number: 119 (DW_TAG_variable) <- this is a declaration
    <114cd>   DW_AT_abstract_origin: <0xdc73>
 <2><114d1>: Abbrev Number: 119 (DW_TAG_variable)
[...]
 <3><115a7>: Abbrev Number: 105 (DW_TAG_lexical_block)
    <115a8>   DW_AT_ranges      : 0xaa0
 <4><115ac>: Abbrev Number: 96 (DW_TAG_variable) <- this has a location
    <115ad>   DW_AT_abstract_origin: <0xdc73>
    <115b1>   DW_AT_location    : 0x486c        (location list)

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Tested-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Acked-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/20140529121930.30879.87092.stgit@ltc230.yrl.intra.hitachi.co.jp
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
2014-06-04 14:49:20 +02:00
..
include perf tools: Remove unused simple_strtoul() function 2014-03-18 18:17:07 -03:00
scripting-engines perf tools: No need to test against NULL before calling free() 2013-12-26 15:58:52 -03:00
PERF-VERSION-GEN perf tools: Fix version when building out of tree 2013-11-07 10:40:47 -03:00
abspath.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
alias.c perf tools: Introduce zfree 2013-12-27 15:17:00 -03:00
annotate.c perf annotate: Print the evsel name in the stdio output 2014-03-18 18:17:03 -03:00
annotate.h perf annotate: Check availability of annotate when processing samples 2014-02-24 11:12:55 -03:00
bitmap.c perf tools: Add bitmap_or function into bitmap object 2012-02-13 23:28:10 -02:00
build-id.c perf symbols: Constify some DSO methods parameters 2013-12-10 16:51:10 -03:00
build-id.h perf symbols: Constify some DSO methods parameters 2013-12-10 16:51:10 -03:00
cache.h tools/perf: Turn strlcpy() into a __weak function 2013-10-09 08:48:49 +02:00
callchain.c perf tools: Remove unnecessary callchain cursor state restore on unmatch 2014-01-17 11:25:24 -03:00
callchain.h perf tools: Factor out sample__resolve_callchain() 2014-01-15 15:32:43 -03:00
cgroup.c perf evlist: Introduce evlist__for_each() & friends 2014-01-13 10:06:25 -03:00
cgroup.h perf tool: Add cgroup support 2011-02-16 13:30:48 +01:00
color.c perf diff: Color the Ratio column 2014-01-13 11:37:17 -03:00
color.h perf diff: Color the Ratio column 2014-01-13 11:37:17 -03:00
comm.c perf tools: Do proper comm override error handling 2014-01-16 16:44:39 -03:00
comm.h perf tools: Do proper comm override error handling 2014-01-16 16:44:39 -03:00
config.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
cpumap.c perf tools: Move fs.* to lib/api/fs/ 2014-02-18 09:34:49 -03:00
cpumap.h perf tools: Rename cpu_map__all() to cpu_map__empty() 2013-07-12 13:45:44 -03:00
ctype.c perf tools: ctype.c only wants util.h 2012-02-13 23:17:40 -02:00
data.c perf tools: Improve error reporting 2014-04-20 00:15:12 +02:00
data.h perf tools: Add perf_data_file__write interface 2013-12-02 09:22:46 -03:00
debug.c perf tools: Get rid of a duplicate va_end() in error reporting routine 2013-12-19 11:38:42 -03:00
debug.h perf tools: Overload pr_stat traceevent print function 2013-12-04 15:23:55 -03:00
dso.c perf symbols: Check return value of filename__read_debuglink() 2014-02-24 16:24:38 -03:00
dso.h perf probe: Allow to add events on the local functions 2014-02-18 09:38:43 -03:00
dwarf-aux.c perf probe: Fix perf probe to find correct variable DIE 2014-06-04 14:49:20 +02:00
dwarf-aux.h perf probe: Fix to find line information for probe list 2013-10-04 15:16:05 -03:00
environment.c
event.c perf tools: Fix memory leak when synthesizing thread records 2014-03-18 18:17:01 -03:00
event.h perf callchain: Add mask into struct regs_dump 2014-02-18 09:34:48 -03:00
evlist.c perf stat: Fix memory corruption of xyarray when cpumask is used 2014-01-20 16:19:09 -03:00
evlist.h perf evlist: Introduce evlist__for_each() & friends 2014-01-13 10:06:25 -03:00
evsel.c perf evsel: Update function names in debug messages 2014-03-18 18:17:05 -03:00
evsel.h perf tools: Disable user-space callchain/stack dumps for function trace events 2014-03-11 11:57:59 +01:00
exec_cmd.c perf tools: Makefile: Remove various and sundry cruft 2011-02-18 07:43:06 -02:00
exec_cmd.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
generate-cmdlist.sh tools/perf: Standardize feature support define names to: HAVE_{FEATURE}_SUPPORT 2013-10-09 08:48:28 +02:00
header.c perf tools: Ensure sscanf does not overrun the "mem" field 2014-01-20 16:19:08 -03:00
header.h perf header: Pack 'struct perf_session_env' 2014-01-13 10:06:23 -03:00
help.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
help.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
hist.c perf report: Merge al->filtered with hist_entry->filtered 2014-03-18 18:16:59 -03:00
hist.h perf symbols: Record the reason for filtering an address_location 2014-03-18 18:16:57 -03:00
hweight.c perf tools: Don't use code surrounded by __KERNEL__ 2010-05-02 12:00:44 -03:00
intlist.c perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
intlist.h perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
levenshtein.c
levenshtein.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
machine.c perf machine: Search for modules in %s/lib/modules/%s 2014-04-30 16:49:29 +02:00
machine.h perf machine: Factor machine__find_thread to take tid argument 2014-03-14 18:08:42 -03:00
map.c perf symbols: Fix symbol annotation for relocated kernel 2014-01-31 17:21:47 -03:00
map.h perf probe: Allow to add events on the local functions 2014-02-18 09:38:43 -03:00
pager.c perf tools: Fix pager on minimal-install embedded systems 2012-05-30 15:10:39 -03:00
parse-events.c perf list: Fix checking for supported events on older kernels 2014-02-10 11:34:31 -03:00
parse-events.h perf parse events: Demystify memory allocations 2013-07-12 13:52:05 -03:00
parse-events.l perf tools: Move start conditions to start of the flex file 2013-10-11 12:17:31 -03:00
parse-events.y perf parse events: Demystify memory allocations 2013-07-12 13:52:05 -03:00
parse-options.c perf kvm: introduce --list-cmds for use by scripts 2014-03-14 18:08:41 -03:00
parse-options.h perf kvm: introduce --list-cmds for use by scripts 2014-03-14 18:08:41 -03:00
path.c tools/perf: Turn strlcpy() into a __weak function 2013-10-09 08:48:49 +02:00
perf_regs.c perf callchain: Separate perf_reg_value function in perf_regs object 2014-02-18 09:34:49 -03:00
perf_regs.h perf callchain: Separate perf_reg_value function in perf_regs object 2014-02-18 09:34:49 -03:00
pmu.c perf tools: Move fs.* to lib/api/fs/ 2014-02-18 09:34:49 -03:00
pmu.h perf stat: fix NULL pointer reference bug with event unit 2014-01-20 16:19:08 -03:00
pmu.l perf tools: Add perf pmu object to access pmu format definition 2012-03-16 14:29:35 -03:00
pmu.y perf tools: Fix build with bison 2.3 and older. 2013-02-14 16:12:34 -03:00
probe-event.c perf probe: Support distro-style debuginfo for uprobe 2014-02-18 09:38:44 -03:00
probe-event.h perf probe: Replace line_list with intlist 2014-02-18 09:34:50 -03:00
probe-finder.c perf probe: Fix a segfault if asked for variable it doesn't find 2014-06-04 14:48:03 +02:00
probe-finder.h perf probe: Support distro-style debuginfo for uprobe 2014-02-18 09:38:44 -03:00
pstack.c perf tools: Stop using 'self' in pstack 2012-11-14 16:50:38 -03:00
pstack.h perf tools: Finish the removal of 'self' arguments 2013-11-05 15:32:36 -03:00
python-ext-sources perf tools: Move fs.* to lib/api/fs/ 2014-02-18 09:34:49 -03:00
python.c perf evlist: Introduce evlist__for_each() & friends 2014-01-13 10:06:25 -03:00
quote.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
quote.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
rblist.c perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
rblist.h perf util: Add findnew method to intlist 2013-10-14 10:28:48 -03:00
record.c perf tools: Move fs.* to lib/api/fs/ 2014-02-18 09:34:49 -03:00
run-command.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
run-command.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
session.c perf session: Change header.misc dump from decimal to hex 2014-03-14 18:08:39 -03:00
session.h perf symbols: Add 'machine' member to struct addr_location 2013-12-19 17:38:27 -03:00
setup.py tools/: Convert to new topic libraries 2013-12-16 16:03:27 -03:00
sigchain.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sigchain.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sort.c perf sort: Do not compare dso again 2013-12-18 14:43:04 -03:00
sort.h perf tools: Remove unneeded include 2013-11-07 11:51:19 -03:00
srcline.c perf tools: Fix build error due to zfree() cast 2014-01-15 15:10:04 -03:00
stat.c perf stats: Add max and min stats 2013-08-07 17:35:26 -03:00
stat.h perf stats: Add max and min stats 2013-08-07 17:35:26 -03:00
strbuf.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
strbuf.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
strfilter.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
strfilter.h perf tools: Finish the removal of 'self' arguments 2013-11-05 15:32:36 -03:00
string.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
strlist.c perf tools: Fix build error due to zfree() cast 2014-01-15 15:10:04 -03:00
strlist.h perf tools: Stop using 'self' in strlist 2013-01-25 12:49:28 -03:00
svghelper.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
svghelper.h perf timechart: Add --highlight option 2013-12-17 16:33:55 -03:00
symbol-elf.c perf tools: Adjust symbols in VDSO 2014-04-20 00:15:11 +02:00
symbol-minimal.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
symbol.c Merge branch 'perf/urgent' into perf/core 2014-03-11 11:53:50 +01:00
symbol.h perf symbols: Record the reason for filtering an address_location 2014-03-18 18:16:57 -03:00
target.c perf record: Make per-cpu mmaps the default. 2013-11-27 14:58:36 -03:00
target.h perf target: Move the checking of which map function to call into function. 2013-12-04 13:46:37 -03:00
thread.c perf symbols: Introduce thread__find_cpumode_addr_location 2014-03-14 18:08:40 -03:00
thread.h perf tools: Remove thread__find_map function 2014-03-18 18:17:04 -03:00
thread_map.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
thread_map.h perf evlist: Add thread_map__nr() helper 2013-03-15 13:06:02 -03:00
tool.h perf tools: Add attr->mmap2 support 2013-09-11 10:09:32 -03:00
top.c perf tools: Rename 'perf_record_opts' to 'record_opts 2013-12-19 14:43:45 -03:00
top.h perf tools: Rename 'perf_record_opts' to 'record_opts 2013-12-19 14:43:45 -03:00
trace-event-info.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
trace-event-parse.c perf tools: Fix memory leak in event_format__print function 2014-02-18 09:34:47 -03:00
trace-event-read.c perf tools: Add trace-event object 2013-12-04 15:20:52 -03:00
trace-event-scripting.c perf symbols: Add 'machine' member to struct addr_location 2013-12-19 17:38:27 -03:00
trace-event.c tools lib traceevent: Make plugin unload function receive pevent 2014-01-15 15:10:40 -03:00
trace-event.h perf symbols: Add 'machine' member to struct addr_location 2013-12-19 17:38:27 -03:00
types.h perf tools: Add union u64_swap type for swapping u64 data 2012-05-22 12:50:25 -03:00
unwind-libdw.c perf tools: Add libdw DWARF post unwind support 2014-02-24 09:29:36 -03:00
unwind-libdw.h perf tools: Add libdw DWARF post unwind support 2014-02-24 09:29:36 -03:00
unwind-libunwind.c perf callchain: Separate perf_reg_value function in perf_regs object 2014-02-18 09:34:49 -03:00
unwind.h perf callchain: Introduce HAVE_DWARF_UNWIND_SUPPORT macro 2014-02-18 09:34:48 -03:00
usage.c perf target: Introduce perf_target__parse_uid() 2012-05-07 16:46:48 -03:00
util.c perf tools: Move fs.* to lib/api/fs/ 2014-02-18 09:34:49 -03:00
util.h perf tools: Introduce zfree 2013-12-27 15:17:00 -03:00
values.c perf tools: Use zfree to help detect use after free bugs 2013-12-27 17:08:19 -03:00
values.h perf tools: Protect header files with a consistent style 2009-09-24 21:27:51 +02:00
vdso.c perf symbols: Remove open coded management of long_name_allocated member 2013-12-10 16:51:09 -03:00
vdso.h perf tools: Back [vdso] DSO with real data 2012-09-11 12:08:30 -03:00
wrapper.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
xyarray.c perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
xyarray.h perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00