Message ID | 20231110000012.3538610-10-namhyung@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | perf tools: Introduce data type profiling (v2) | expand |
On Thu, 9 Nov 2023 15:59:28 -0800 Namhyung Kim <namhyung@kernel.org> wrote: > Now it has a feature check for the dwarf_getcfi(), use it and convert > the code to check HAVE_DWARF_CFI_SUPPORT definition. > Looks good to me! Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Thanks! > Suggested-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > tools/perf/Makefile.config | 5 +++++ > tools/perf/util/probe-finder.c | 8 ++++---- > 2 files changed, 9 insertions(+), 4 deletions(-) > > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config > index 8b6cffbc4858..aa55850fbc21 100644 > --- a/tools/perf/Makefile.config > +++ b/tools/perf/Makefile.config > @@ -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 > diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c > index 8d3dd85f9ff4..c8923375e30d 100644 > --- a/tools/perf/util/probe-finder.c > +++ b/tools/perf/util/probe-finder.c > @@ -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; > -- > 2.42.0.869.gea05f2083d-goog >
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config index 8b6cffbc4858..aa55850fbc21 100644 --- a/tools/perf/Makefile.config +++ b/tools/perf/Makefile.config @@ -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 diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 8d3dd85f9ff4..c8923375e30d 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -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;
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> --- tools/perf/Makefile.config | 5 +++++ tools/perf/util/probe-finder.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-)