Commit c06547d0 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarMasami 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f67f2fda
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+4 −4
Original line number Diff line number Diff line
@@ -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;