From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753481AbbGAJH1 (ORCPT ); Wed, 1 Jul 2015 05:07:27 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:27640 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753367AbbGAJG3 (ORCPT ); Wed, 1 Jul 2015 05:06:29 -0400 From: He Kuang To: , , , , , CC: , Subject: [PATCH 3/4] perf probe: Enable --range option according to libdw version Date: Wed, 1 Jul 2015 09:05:38 +0000 Message-ID: <1435741539-44100-3-git-send-email-hekuang@huawei.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1435741539-44100-1-git-send-email-hekuang@huawei.com> References: <1435741539-44100-1-git-send-email-hekuang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.210] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The option --range uses functions in libdw (elfutils version >= 1.57), this patch check if elfutils version meets the requirements before enable this feature, so that perf can be built with old libdw. Reported-by: Alexei Starovoitov Signed-off-by: He Kuang --- tools/perf/builtin-probe.c | 2 ++ tools/perf/util/dwarf-aux.c | 2 ++ tools/perf/util/dwarf-aux.h | 13 ++++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 1272559..2760c06 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -372,8 +372,10 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) "Show accessible variables on PROBEDEF", opt_show_vars), OPT_BOOLEAN('\0', "externs", &probe_conf.show_ext_vars, "Show external variables too (with --vars only)"), +#if _ELFUTILS_PREREQ(0, 157) OPT_BOOLEAN('\0', "range", &probe_conf.show_location_range, "Show variables location range in scope (with --vars only)"), +#endif OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name, "file", "vmlinux pathname"), OPT_STRING('s', "source", &symbol_conf.source_prefix, diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 57f3ef4..2cb4c82 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -950,6 +950,7 @@ int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf) return 0; } +#if _ELFUTILS_PREREQ(0, 157) /** * die_get_var_innermost_scope - Get innermost scope range of given variable DIE * @sp_die: a subprogram DIE @@ -1071,3 +1072,4 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, struct strbuf *buf) return ret; } +#endif /* _ELFUTILS_PREREQ(0, 157) */ diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h index c42ec36..ade0c50 100644 --- a/tools/perf/util/dwarf-aux.h +++ b/tools/perf/util/dwarf-aux.h @@ -125,6 +125,17 @@ extern int die_get_typename(Dwarf_Die *vr_die, struct strbuf *buf); /* Get the name and type of given variable DIE, stored as "type\tname" */ extern int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf); +#if _ELFUTILS_PREREQ(0, 157) extern int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, - struct strbuf *buf); + struct strbuf *buf); +#else +static inline +int die_get_var_range(Dwarf_Die *sp_die __maybe_unused, + Dwarf_Die *vr_die __maybe_unused, + struct strbuf *buf __maybe_unused) +{ + return -ENOTSUP; +} + +#endif /* _ELFUTILS_PREREQ(0, 157) */ #endif -- 1.8.5.2