diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-04-05 10:33:41 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-05-12 10:26:59 -0400 |
commit | 4924734570a073049450b11f7c59ce5992b03343 (patch) | |
tree | 7fbf3af95e3702b0dca4a0cb213f2ebbba44671f /tools/perf | |
parent | 62aa0e177d278462145a29c30d3c8501ae57e200 (diff) |
perf probe: Check if dwarf_getlocations() is available
If not, tell the user that:
config/Makefile:273: Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157
And return -ENOTSUPP in die_get_var_range(), failing features that
need it, like the one pointed out above.
This fixes the build on older systems, such as Ubuntu 12.04.5.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Vinson Lee <vlee@freedesktop.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-9l7luqkq4gfnx7vrklkq4obs@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/config/Makefile | 6 | ||||
-rw-r--r-- | tools/perf/util/dwarf-aux.c | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index f7d7f5a1cad5..6f8f6430f2bf 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile | |||
@@ -268,6 +268,12 @@ else | |||
268 | ifneq ($(feature-dwarf), 1) | 268 | ifneq ($(feature-dwarf), 1) |
269 | msg := $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev); | 269 | msg := $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev); |
270 | NO_DWARF := 1 | 270 | NO_DWARF := 1 |
271 | else | ||
272 | ifneq ($(feature-dwarf_getlocations), 1) | ||
273 | msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157); | ||
274 | else | ||
275 | CFLAGS += -DHAVE_DWARF_GETLOCATIONS | ||
276 | endif # dwarf_getlocations | ||
271 | endif # Dwarf support | 277 | endif # Dwarf support |
272 | endif # libelf support | 278 | endif # libelf support |
273 | endif # NO_LIBELF | 279 | endif # NO_LIBELF |
diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 577e600c8eb1..aea189b41cc8 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c | |||
@@ -959,6 +959,7 @@ int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf) | |||
959 | return 0; | 959 | return 0; |
960 | } | 960 | } |
961 | 961 | ||
962 | #ifdef HAVE_DWARF_GETLOCATIONS | ||
962 | /** | 963 | /** |
963 | * die_get_var_innermost_scope - Get innermost scope range of given variable DIE | 964 | * die_get_var_innermost_scope - Get innermost scope range of given variable DIE |
964 | * @sp_die: a subprogram DIE | 965 | * @sp_die: a subprogram DIE |
@@ -1080,3 +1081,11 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, struct strbuf *buf) | |||
1080 | 1081 | ||
1081 | return ret; | 1082 | return ret; |
1082 | } | 1083 | } |
1084 | #else | ||
1085 | int die_get_var_range(Dwarf_Die *sp_die __maybe_unused, | ||
1086 | Dwarf_Die *vr_die __maybe_unused, | ||
1087 | struct strbuf *buf __maybe_unused) | ||
1088 | { | ||
1089 | return -ENOTSUP; | ||
1090 | } | ||
1091 | #endif | ||