Lines Matching refs:sym
60 struct symbol *sym; in find_symbol_by_index() local
63 hash_for_each_possible(sec->symbol_hash, sym, hash, idx) in find_symbol_by_index()
64 if (sym->idx == idx) in find_symbol_by_index()
65 return sym; in find_symbol_by_index()
72 struct symbol *sym; in find_symbol_by_offset() local
74 list_for_each_entry(sym, &sec->symbol_list, list) in find_symbol_by_offset()
75 if (sym->type != STT_SECTION && in find_symbol_by_offset()
76 sym->offset == offset) in find_symbol_by_offset()
77 return sym; in find_symbol_by_offset()
85 struct symbol *sym; in find_symbol_by_name() local
88 list_for_each_entry(sym, &sec->symbol_list, list) in find_symbol_by_name()
89 if (!strcmp(sym->name, name)) in find_symbol_by_name()
90 return sym; in find_symbol_by_name()
97 struct symbol *sym; in find_symbol_containing() local
99 list_for_each_entry(sym, &sec->symbol_list, list) in find_symbol_containing()
100 if (sym->type != STT_SECTION && in find_symbol_containing()
101 offset >= sym->offset && offset < sym->offset + sym->len) in find_symbol_containing()
102 return sym; in find_symbol_containing()
220 struct symbol *sym, *pfunc; in read_symbols() local
234 sym = malloc(sizeof(*sym)); in read_symbols()
235 if (!sym) { in read_symbols()
239 memset(sym, 0, sizeof(*sym)); in read_symbols()
241 sym->idx = i; in read_symbols()
243 if (!gelf_getsym(symtab->data, i, &sym->sym)) { in read_symbols()
248 sym->name = elf_strptr(elf->elf, symtab->sh.sh_link, in read_symbols()
249 sym->sym.st_name); in read_symbols()
250 if (!sym->name) { in read_symbols()
255 sym->type = GELF_ST_TYPE(sym->sym.st_info); in read_symbols()
256 sym->bind = GELF_ST_BIND(sym->sym.st_info); in read_symbols()
258 if (sym->sym.st_shndx > SHN_UNDEF && in read_symbols()
259 sym->sym.st_shndx < SHN_LORESERVE) { in read_symbols()
260 sym->sec = find_section_by_index(elf, in read_symbols()
261 sym->sym.st_shndx); in read_symbols()
262 if (!sym->sec) { in read_symbols()
264 sym->name); in read_symbols()
267 if (sym->type == STT_SECTION) { in read_symbols()
268 sym->name = sym->sec->name; in read_symbols()
269 sym->sec->sym = sym; in read_symbols()
272 sym->sec = find_section_by_index(elf, 0); in read_symbols()
274 sym->offset = sym->sym.st_value; in read_symbols()
275 sym->len = sym->sym.st_size; in read_symbols()
278 entry = &sym->sec->symbol_list; in read_symbols()
279 list_for_each_prev(tmp, &sym->sec->symbol_list) { in read_symbols()
284 if (sym->offset > s->offset) { in read_symbols()
289 if (sym->offset == s->offset && sym->len >= s->len) { in read_symbols()
294 list_add(&sym->list, entry); in read_symbols()
295 hash_add(sym->sec->symbol_hash, &sym->hash, sym->idx); in read_symbols()
300 list_for_each_entry(sym, &sec->symbol_list, list) { in read_symbols()
301 if (sym->type != STT_FUNC) in read_symbols()
303 sym->pfunc = sym->cfunc = sym; in read_symbols()
304 coldstr = strstr(sym->name, ".cold."); in read_symbols()
309 pfunc = find_symbol_by_name(elf, sym->name); in read_symbols()
314 sym->name); in read_symbols()
318 sym->pfunc = pfunc; in read_symbols()
319 pfunc->cfunc = sym; in read_symbols()
329 if (sym->sec == pfunc->sec && in read_symbols()
330 sym->offset >= pfunc->offset && in read_symbols()
331 sym->offset + sym->len == pfunc->offset + pfunc->len) { in read_symbols()
332 pfunc->len -= sym->len; in read_symbols()
340 free(sym); in read_symbols()
381 rela->sym = find_symbol_by_index(elf, symndx); in read_relas()
382 if (!rela->sym) { in read_relas()
611 relas[idx].r_info = GELF_R_INFO(rela->sym->idx, rela->type); in elf_rebuild_rela_section()
653 struct symbol *sym, *tmpsym; in elf_close() local
663 list_for_each_entry_safe(sym, tmpsym, &sec->symbol_list, list) { in elf_close()
664 list_del(&sym->list); in elf_close()
665 hash_del(&sym->hash); in elf_close()
666 free(sym); in elf_close()