|
@@ -734,7 +734,7 @@ static int call_probe_finder(Dwarf_Die *sc_die, struct probe_finder *pf)
|
|
|
}
|
|
|
|
|
|
/* If not a real subprogram, find a real one */
|
|
|
- if (dwarf_tag(sc_die) != DW_TAG_subprogram) {
|
|
|
+ if (!die_is_func_def(sc_die)) {
|
|
|
if (!die_find_realfunc(&pf->cu_die, pf->addr, &pf->sp_die)) {
|
|
|
pr_warning("Failed to find probe point in any "
|
|
|
"functions.\n");
|
|
@@ -980,12 +980,10 @@ static int probe_point_search_cb(Dwarf_Die *sp_die, void *data)
|
|
|
struct dwarf_callback_param *param = data;
|
|
|
struct probe_finder *pf = param->data;
|
|
|
struct perf_probe_point *pp = &pf->pev->point;
|
|
|
- Dwarf_Attribute attr;
|
|
|
|
|
|
/* Check tag and diename */
|
|
|
- if (dwarf_tag(sp_die) != DW_TAG_subprogram ||
|
|
|
- !die_compare_name(sp_die, pp->function) ||
|
|
|
- dwarf_attr(sp_die, DW_AT_declaration, &attr))
|
|
|
+ if (!die_is_func_def(sp_die) ||
|
|
|
+ !die_compare_name(sp_die, pp->function))
|
|
|
return DWARF_CB_OK;
|
|
|
|
|
|
/* Check declared file */
|
|
@@ -1474,7 +1472,7 @@ static int line_range_inline_cb(Dwarf_Die *in_die, void *data)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/* Search function from function name */
|
|
|
+/* Search function definition from function name */
|
|
|
static int line_range_search_cb(Dwarf_Die *sp_die, void *data)
|
|
|
{
|
|
|
struct dwarf_callback_param *param = data;
|
|
@@ -1485,7 +1483,7 @@ static int line_range_search_cb(Dwarf_Die *sp_die, void *data)
|
|
|
if (lr->file && strtailcmp(lr->file, dwarf_decl_file(sp_die)))
|
|
|
return DWARF_CB_OK;
|
|
|
|
|
|
- if (dwarf_tag(sp_die) == DW_TAG_subprogram &&
|
|
|
+ if (die_is_func_def(sp_die) &&
|
|
|
die_compare_name(sp_die, lr->function)) {
|
|
|
lf->fname = dwarf_decl_file(sp_die);
|
|
|
dwarf_decl_line(sp_die, &lr->offset);
|