Messages in this thread Patch in this message | | | From | He Kuang <> | Subject | [PATCH v2 1/2] perf probe: Enable --range option according to libdw version | Date | Wed, 1 Jul 2015 11:53:23 +0000 |
| |
The option --range uses function dwarf_getlocations() which was first introduced to libdw in elfutils version 0.157. Without this API, there's no easy way to get locations ranges by the givin attribute.
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 <alexei.starovoitov@gmail.com> Signed-off-by: He Kuang <hekuang@huawei.com> --- 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
| |