lkml.org 
[lkml]   [2023]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 09/52] perf probe: Convert to check dwarf_getcfi feature
    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
    >


    --
    Masami Hiramatsu (Google) <mhiramat@kernel.org>

    \
     
     \ /
      Last update: 2023-11-20 13:55    [W:2.649 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site