Hi Hemant,

>From: Hemant Kumar [mailto:hem...@linux.vnet.ibm.com]
>
>perf probe through debuginfo__find_probes() in util/probe-finder.c
>checks for the functions' frame descriptions in either .eh_frame section
>of an ELF or the .debug_frame. The check is based on whether either one
>of these sections is present. Depending on distro, toolchain defaults,
>architetcutre, build flags, etc., CFI might be found in either .eh_frame
>and/or .debug_frame. Sometimes, it may happen that, .eh_frame, even if
>present, may not be complete and may miss some descriptions. Therefore,
>to be sure, to find the CFI covering an address we will always have to
>investigate both if available.

OK, so we'd better check both cfi's.
 [...]
>+/* Find probe points from debuginfo */
>+static int debuginfo__find_probes(struct debuginfo *dbg,
>+                                struct probe_finder *pf)
>+{
>+      int ret = 0;
>+
>+#if _ELFUTILS_PREREQ(0, 142)
>+      Elf *elf;
>+      GElf_Ehdr ehdr;
>+      GElf_Shdr shdr;
>+
>+      if (pf->cfi_eh || pf->cfi_dbg)
>+              return debuginfo__find_probe_location(dbg, pf);
>+
>+      /* Get the call frame information from this dwarf */
>+      elf = dwarf_getelf(dbg->dbg);
>+      if (elf == NULL)
>+              return -EINVAL;
>+
>+      if (gelf_getehdr(elf, &ehdr) == NULL)
>+              return -EINVAL;
>+
>+      if (elf_section_by_name(elf, &ehdr, &shdr, ".eh_frame", NULL) &&
>+          shdr.sh_type == SHT_PROGBITS) {
>+              pf->cfi_eh = dwarf_getcfi_elf(elf);
>+      } else {
>+              pf->cfi_dbg = dwarf_getcfi(dbg->dbg);
>+      }

Hmm, if you want to check both of those cfi's, don't we have to do below?

        if (elf_section_by_name(elf, &ehdr, &shdr, ".eh_frame", NULL) &&
            shdr.sh_type == SHT_PROGBITS)
                pf->cfi_eh = dwarf_getcfi_elf(elf);

        pf->cfi_dbg = dwarf_getcfi(dbg->dbg);

Then, both of pf->cfi_* will be filled (if the elf has ".eh_frame").

Thanks!



_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to