perf probe: Convert to check dwarf_getcfi feature
Now it has a feature check for the dwarf_getcfi(), use it and convert the code to check HAVE_DWARF_CFI_SUPPORT definition. Suggested-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: linux-toolchains@vger.kernel.org Cc: linux-trace-devel@vger.kernel.org Link: https://lore.kernel.org/r/20231110000012.3538610-10-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f67f2fda7d
commit
c06547d020
2 changed files with 9 additions and 4 deletions
|
@ -476,6 +476,11 @@ else
|
|||
else
|
||||
CFLAGS += -DHAVE_DWARF_GETLOCATIONS_SUPPORT
|
||||
endif # dwarf_getlocations
|
||||
ifneq ($(feature-dwarf_getcfi), 1)
|
||||
msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.142);
|
||||
else
|
||||
CFLAGS += -DHAVE_DWARF_CFI_SUPPORT
|
||||
endif # dwarf_getcfi
|
||||
endif # Dwarf support
|
||||
endif # libelf support
|
||||
endif # NO_LIBELF
|
||||
|
|
|
@ -604,7 +604,7 @@ static int call_probe_finder(Dwarf_Die *sc_die, struct probe_finder *pf)
|
|||
ret = dwarf_getlocation_addr(&fb_attr, pf->addr, &pf->fb_ops, &nops, 1);
|
||||
if (ret <= 0 || nops == 0) {
|
||||
pf->fb_ops = NULL;
|
||||
#if _ELFUTILS_PREREQ(0, 142)
|
||||
#ifdef HAVE_DWARF_CFI_SUPPORT
|
||||
} else if (nops == 1 && pf->fb_ops[0].atom == DW_OP_call_frame_cfa &&
|
||||
(pf->cfi_eh != NULL || pf->cfi_dbg != NULL)) {
|
||||
if ((dwarf_cfi_addrframe(pf->cfi_eh, pf->addr, &frame) != 0 &&
|
||||
|
@ -615,7 +615,7 @@ static int call_probe_finder(Dwarf_Die *sc_die, struct probe_finder *pf)
|
|||
free(frame);
|
||||
return -ENOENT;
|
||||
}
|
||||
#endif
|
||||
#endif /* HAVE_DWARF_CFI_SUPPORT */
|
||||
}
|
||||
|
||||
/* Call finder's callback handler */
|
||||
|
@ -1140,7 +1140,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
|
|||
|
||||
pf->machine = ehdr.e_machine;
|
||||
|
||||
#if _ELFUTILS_PREREQ(0, 142)
|
||||
#ifdef HAVE_DWARF_CFI_SUPPORT
|
||||
do {
|
||||
GElf_Shdr shdr;
|
||||
|
||||
|
@ -1150,7 +1150,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
|
|||
|
||||
pf->cfi_dbg = dwarf_getcfi(dbg->dbg);
|
||||
} while (0);
|
||||
#endif
|
||||
#endif /* HAVE_DWARF_CFI_SUPPORT */
|
||||
|
||||
ret = debuginfo__find_probe_location(dbg, pf);
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Reference in a new issue