Merge branch 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / tools / perf / util / probe-finder.c
index 1c817add6ca4d902d1646e34ccae57644fb421fa..e4cff49384f411e6c6d0e34d94bd869fadc88f06 100644 (file)
@@ -637,14 +637,19 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwfl_Module *mod,
                return -EINVAL;
        }
 
-       /* Try to get actual symbol name from symtab */
-       symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
+       if (dwarf_entrypc(sp_die, &eaddr) == 0) {
+               /* If the DIE has entrypc, use it. */
+               symbol = dwarf_diename(sp_die);
+       } else {
+               /* Try to get actual symbol name and address from symtab */
+               symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
+               eaddr = sym.st_value;
+       }
        if (!symbol) {
                pr_warning("Failed to find symbol at 0x%lx\n",
                           (unsigned long)paddr);
                return -ENOENT;
        }
-       eaddr = sym.st_value;
 
        tp->offset = (unsigned long)(paddr - eaddr);
        tp->address = (unsigned long)paddr;