return 0;
 }
 
+/* Return innermost DIE */
+static int find_inner_scope_cb(Dwarf_Die *fn_die, void *data)
+{
+       struct find_scope_param *fsp = data;
+
+       memcpy(fsp->die_mem, fn_die, sizeof(Dwarf_Die));
+       fsp->found = true;
+       return 1;
+}
+
 /* Find an appropriate scope fits to given conditions */
 static Dwarf_Die *find_best_scope(struct probe_finder *pf, Dwarf_Die *die_mem)
 {
                .die_mem = die_mem,
                .found = false,
        };
+       int ret;
 
-       cu_walk_functions_at(&pf->cu_die, pf->addr, find_best_scope_cb, &fsp);
+       ret = cu_walk_functions_at(&pf->cu_die, pf->addr, find_best_scope_cb,
+                                  &fsp);
+       if (!ret && !fsp.found)
+               cu_walk_functions_at(&pf->cu_die, pf->addr,
+                                    find_inner_scope_cb, &fsp);
 
        return fsp.found ? die_mem : NULL;
 }