Re: [PATCH 09/52] perf probe: Convert to check dwarf_getcfi feature

From: Google
Date: Fri Nov 10 2023 - 14:29:15 EST


On Thu, 9 Nov 2023 15:59:28 -0800
Namhyung Kim <namhyung@xxxxxxxxxx> 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@xxxxxxxxxx>

Thanks!

> Suggested-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
> Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>
> ---
> 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
>


--
Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>