Lines Matching refs:fun

1579   struct function_info *fun;
1621 struct function_info fun[1];
1676 if (sinfo->fun[i].lo <= off)
1683 if (sinfo->fun[i].lo == off)
1686 if (global && !sinfo->fun[i].global)
1688 sinfo->fun[i].global = TRUE;
1689 sinfo->fun[i].u.h = sym_h;
1692 sinfo->fun[i].is_func = TRUE;
1693 return &sinfo->fun[i];
1696 else if (sinfo->fun[i].hi > off && size == 0)
1697 return &sinfo->fun[i];
1701 memmove (&sinfo->fun[i + 1], &sinfo->fun[i],
1702 (sinfo->num_fun - i) * sizeof (sinfo->fun[i]));
1717 sinfo->fun[i].is_func = is_func;
1718 sinfo->fun[i].global = global;
1719 sinfo->fun[i].sec = sec;
1721 sinfo->fun[i].u.h = sym_h;
1723 sinfo->fun[i].u.sym = sym_h;
1724 sinfo->fun[i].lo = off;
1725 sinfo->fun[i].hi = off + size;
1726 sinfo->fun[i].stack = -find_function_stack_adjust (sec, off);
1728 return &sinfo->fun[i];
1734 func_name (struct function_info *fun)
1740 while (fun->start != NULL)
1741 fun = fun->start;
1743 if (fun->global)
1744 return fun->u.h->root.root.string;
1746 sec = fun->sec;
1747 if (fun->u.sym->st_name == 0)
1754 (unsigned long) fun->u.sym->st_value & 0xffffffff);
1759 return bfd_elf_sym_name (ibfd, symtab_hdr, fun->u.sym, sec);
1784 insns_at_end (struct function_info *fun, bfd_vma limit)
1786 bfd_vma off = (fun->hi + 3) & -4;
1788 while (off < limit && is_nop (fun->sec, off))
1792 fun->hi = off;
1795 fun->hi = limit;
1814 if (sinfo->fun[i - 1].hi > sinfo->fun[i].lo)
1817 const char *f1 = func_name (&sinfo->fun[i - 1]);
1818 const char *f2 = func_name (&sinfo->fun[i]);
1821 sinfo->fun[i - 1].hi = sinfo->fun[i].lo;
1823 else if (insns_at_end (&sinfo->fun[i - 1], sinfo->fun[i].lo))
1830 if (sinfo->fun[0].lo != 0)
1832 if (sinfo->fun[sinfo->num_fun - 1].hi > sec->size)
1834 const char *f1 = func_name (&sinfo->fun[sinfo->num_fun - 1]);
1837 sinfo->fun[sinfo->num_fun - 1].hi = sec->size;
1839 else if (insns_at_end (&sinfo->fun[sinfo->num_fun - 1], sec->size))
1860 if (offset < sinfo->fun[mid].lo)
1862 else if (offset >= sinfo->fun[mid].hi)
1865 return &sinfo->fun[mid];
1879 if (p->fun == callee->fun)
1975 struct function_info *fun;
1988 fun = maybe_insert_function (sym_sec, sym, FALSE, is_call);
1990 fun = maybe_insert_function (sym_sec, h, TRUE, is_call);
1991 if (fun == NULL)
1994 && fun->u.sym != sym)
2006 callee->fun = find_function (sym_sec, val, info);
2007 if (callee->fun == NULL)
2013 && !callee->fun->is_func
2014 && callee->fun->stack == 0)
2021 if (callee->fun->start != NULL
2024 callee->fun->start = NULL;
2025 callee->fun->is_func = TRUE;
2028 callee->fun->start = caller;
2045 struct function_info *fun, *fun_start;
2054 fun = maybe_insert_function (sec, fake, FALSE, FALSE);
2055 if (!fun)
2068 fun->start = fun_start;
2076 fun_start = &sinfo->fun[sinfo->num_fun - 1];
2293 sinfo->fun[fun_idx].hi = hi;
2294 hi = sinfo->fun[fun_idx].lo;
2325 mark_non_root (struct function_info *fun)
2329 fun->visit1 = TRUE;
2330 for (call = fun->call_list; call; call = call->next)
2332 call->fun->non_root = TRUE;
2333 if (!call->fun->visit1)
2334 mark_non_root (call->fun);
2341 call_graph_traverse (struct function_info *fun, struct bfd_link_info *info)
2345 fun->visit2 = TRUE;
2346 fun->marking = TRUE;
2348 callp = &fun->call_list;
2351 if (!call->fun->visit2)
2352 call_graph_traverse (call->fun, info);
2353 else if (call->fun->marking)
2355 const char *f1 = func_name (fun);
2356 const char *f2 = func_name (call->fun);
2366 fun->marking = FALSE;
2408 if (sinfo->fun[i].start != NULL)
2410 struct call_info *call = sinfo->fun[i].call_list;
2415 if (!insert_callee (sinfo->fun[i].start, call))
2419 sinfo->fun[i].call_list = NULL;
2420 sinfo->fun[i].non_root = TRUE;
2446 if (!sinfo->fun[i].visit1)
2447 mark_non_root (&sinfo->fun[i]);
2472 if (!sinfo->fun[i].non_root)
2473 call_graph_traverse (&sinfo->fun[i], info);
2484 sum_stack (struct function_info *fun,
2490 bfd_vma max_stack = fun->stack;
2494 if (fun->visit3)
2497 for (call = fun->call_list; call; call = call->next)
2499 stack = sum_stack (call->fun, info, emit_stack_syms);
2501 tail calls. fun->stack here is local stack usage for
2504 stack += fun->stack;
2508 max = call->fun;
2512 f1 = func_name (fun);
2513 info->callbacks->minfo (_("%s: 0x%v 0x%v\n"), f1, fun->stack, max_stack);
2515 if (fun->call_list)
2518 for (call = fun->call_list; call; call = call->next)
2520 const char *f2 = func_name (call->fun);
2521 const char *ann1 = call->fun == max ? "*" : " ";
2528 /* Now fun->stack holds cumulative stack. */
2529 fun->stack = max_stack;
2530 fun->visit3 = TRUE;
2540 if (fun->global || ELF_ST_BIND (fun->u.sym->st_info) == STB_GLOBAL)
2543 sprintf (name, "__stack_%x_%s", fun->sec->id & 0xffffffff, f1);
2607 if (!sinfo->fun[i].non_root)
2612 stack = sum_stack (&sinfo->fun[i], info,
2614 f1 = func_name (&sinfo->fun[i]);