Home | History | Annotate | Download | only in util

Lines Matching refs:sp_die

523 static Dwarf_Die *die_find_inlinefunc(Dwarf_Die *sp_die, Dwarf_Addr addr,
528 sp_die = die_find_child(sp_die, __die_find_inline_cb, &addr, &tmp_die);
529 if (!sp_die)
533 while (sp_die) {
534 memcpy(die_mem, sp_die, sizeof(Dwarf_Die));
535 sp_die = die_find_child(sp_die, __die_find_inline_cb, &addr,
572 static int __die_walk_funclines(Dwarf_Die *sp_die,
585 lw.fname = dwarf_decl_file(sp_die);
586 if (lw.fname && dwarf_decl_line(sp_die, &lineno) == 0 &&
587 dwarf_entrypc(sp_die, &addr) == 0) {
592 die_find_child(sp_die, __die_walk_funclines_cb, &lw, &die_mem);
597 static int __die_walk_culines_cb(Dwarf_Die *sp_die, void *data)
601 lw->retval = __die_walk_funclines(sp_die, lw->handler, lw->data);
710 static Dwarf_Die *die_find_variable_at(Dwarf_Die *sp_die, const char *name,
715 return die_find_child(sp_die, __die_find_variable_cb, (void *)&fvp,
1140 static int find_variable(Dwarf_Die *sp_die, struct probe_finder *pf)
1182 if (die_find_variable_at(sp_die, pf->pvar->var, pf->addr, &vr_die))
1186 nscopes = dwarf_getscopes_die(sp_die, &scopes);
1210 static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr,
1217 name = dwarf_diename(sp_die);
1219 if (dwarf_entrypc(sp_die, &eaddr) != 0) {
1221 dwarf_diename(sp_die));
1246 static int call_probe_finder(Dwarf_Die *sp_die, struct probe_finder *pf)
1254 if (!sp_die || dwarf_tag(sp_die) != DW_TAG_subprogram) {
1255 sp_die = die_find_real_subprogram(&pf->cu_die,
1257 if (!sp_die) {
1265 dwarf_attr(sp_die, DW_AT_frame_base, &fb_attr);
1283 ret = pf->callback(sp_die, pf);
1374 static int find_probe_point_lazy(Dwarf_Die *sp_die, struct probe_finder *pf)
1386 return die_walk_lines(sp_die, probe_point_lazy_walker, pf);
1426 static int probe_point_search_cb(Dwarf_Die *sp_die, void *data)
1433 if (dwarf_tag(sp_die) != DW_TAG_subprogram ||
1434 !die_compare_name(sp_die, pp->function))
1438 if (pp->file && strtailcmp(pp->file, dwarf_decl_file(sp_die)))
1441 pf->fname = dwarf_decl_file(sp_die);
1443 dwarf_decl_line(sp_die, &pf->lno);
1446 } else if (!dwarf_func_inline(sp_die)) {
1449 param->retval = find_probe_point_lazy(sp_die, pf);
1451 if (dwarf_entrypc(sp_die, &pf->addr) != 0) {
1453 "%s.\n", dwarf_diename(sp_die));
1459 param->retval = call_probe_finder(sp_die, pf);
1465 dwarf_func_inline_instances(sp_die, probe_point_inline_cb,
1485 Dwarf_Die *sp_die;
1493 if (dwarf_offdie(dbg, gl->die_offset, param->sp_die)) {
1494 if (dwarf_tag(param->sp_die) != DW_TAG_subprogram)
1497 if (die_compare_name(param->sp_die, param->function)) {
1502 strtailcmp(param->file, dwarf_decl_file(param->sp_die)))
1547 .sp_die = &pf->sp_die,
1556 ret = probe_point_search_cb(&pf->sp_die, &probe_param);
1599 static int add_probe_trace_event(Dwarf_Die *sp_die, struct probe_finder *pf)
1614 ret = convert_to_trace_point(sp_die, pf->addr, pf->pev->point.retprobe,
1630 ret = find_variable(sp_die, pf);
1697 static int add_available_vars(Dwarf_Die *sp_die, struct probe_finder *pf)
1712 ret = convert_to_trace_point(sp_die, pf->addr, pf->pev->point.retprobe,
1725 die_find_child(sp_die, collect_variables_cb, (void *)af, &die_mem);
1732 nscopes = dwarf_getscopes_die(sp_die, &scopes);
1918 static int find_line_range_by_line(Dwarf_Die *sp_die, struct line_finder *lf)
1922 ret = die_walk_lines(sp_die ?: &lf->cu_die, line_range_walk_cb, lf);
1946 static int line_range_search_cb(Dwarf_Die *sp_die, void *data)
1953 if (lr->file && strtailcmp(lr->file, dwarf_decl_file(sp_die)))
1956 if (dwarf_tag(sp_die) == DW_TAG_subprogram &&
1957 die_compare_name(sp_die, lr->function)) {
1958 lf->fname = dwarf_decl_file(sp_die);
1959 dwarf_decl_line(sp_die, &lr->offset);
1970 if (dwarf_func_inline(sp_die)) {
1974 sp_die,
1979 param->retval = find_line_range_by_line(sp_die, lf);
2016 .cu_die = &lf.cu_die, .sp_die = &lf.sp_die, .found = 0};
2022 line_range_search_cb(&lf.sp_die, &line_range_param);