Lines Matching refs:sym
50 struct symbol *sym; in find_symbol_by_index() local
53 hash_for_each_possible(sec->symbol_hash, sym, hash, idx) in find_symbol_by_index()
54 if (sym->idx == idx) in find_symbol_by_index()
55 return sym; in find_symbol_by_index()
62 struct symbol *sym; in find_symbol_by_offset() local
64 list_for_each_entry(sym, &sec->symbol_list, list) in find_symbol_by_offset()
65 if (sym->type != STT_SECTION && in find_symbol_by_offset()
66 sym->offset == offset) in find_symbol_by_offset()
67 return sym; in find_symbol_by_offset()
75 struct symbol *sym; in find_symbol_by_name() local
78 list_for_each_entry(sym, &sec->symbol_list, list) in find_symbol_by_name()
79 if (!strcmp(sym->name, name)) in find_symbol_by_name()
80 return sym; in find_symbol_by_name()
87 struct symbol *sym; in find_symbol_containing() local
89 list_for_each_entry(sym, &sec->symbol_list, list) in find_symbol_containing()
90 if (sym->type != STT_SECTION && in find_symbol_containing()
91 offset >= sym->offset && offset < sym->offset + sym->len) in find_symbol_containing()
92 return sym; in find_symbol_containing()
210 struct symbol *sym, *pfunc, *alias; in read_symbols() local
224 sym = malloc(sizeof(*sym)); in read_symbols()
225 if (!sym) { in read_symbols()
229 memset(sym, 0, sizeof(*sym)); in read_symbols()
230 alias = sym; in read_symbols()
232 sym->idx = i; in read_symbols()
234 if (!gelf_getsym(symtab->data, i, &sym->sym)) { in read_symbols()
239 sym->name = elf_strptr(elf->elf, symtab->sh.sh_link, in read_symbols()
240 sym->sym.st_name); in read_symbols()
241 if (!sym->name) { in read_symbols()
246 sym->type = GELF_ST_TYPE(sym->sym.st_info); in read_symbols()
247 sym->bind = GELF_ST_BIND(sym->sym.st_info); in read_symbols()
249 if (sym->sym.st_shndx > SHN_UNDEF && in read_symbols()
250 sym->sym.st_shndx < SHN_LORESERVE) { in read_symbols()
251 sym->sec = find_section_by_index(elf, in read_symbols()
252 sym->sym.st_shndx); in read_symbols()
253 if (!sym->sec) { in read_symbols()
255 sym->name); in read_symbols()
258 if (sym->type == STT_SECTION) { in read_symbols()
259 sym->name = sym->sec->name; in read_symbols()
260 sym->sec->sym = sym; in read_symbols()
263 sym->sec = find_section_by_index(elf, 0); in read_symbols()
265 sym->offset = sym->sym.st_value; in read_symbols()
266 sym->len = sym->sym.st_size; in read_symbols()
269 entry = &sym->sec->symbol_list; in read_symbols()
270 list_for_each_prev(tmp, &sym->sec->symbol_list) { in read_symbols()
275 if (sym->offset > s->offset) { in read_symbols()
280 if (sym->offset == s->offset) { in read_symbols()
281 if (sym->len && sym->len == s->len && alias == sym) in read_symbols()
284 if (sym->len >= s->len) { in read_symbols()
290 sym->alias = alias; in read_symbols()
291 list_add(&sym->list, entry); in read_symbols()
292 hash_add(sym->sec->symbol_hash, &sym->hash, sym->idx); in read_symbols()
297 list_for_each_entry(sym, &sec->symbol_list, list) { in read_symbols()
300 if (sym->type != STT_FUNC) in read_symbols()
302 sym->pfunc = sym->cfunc = sym; in read_symbols()
303 coldstr = strstr(sym->name, ".cold"); in read_symbols()
307 pnamelen = coldstr - sym->name; in read_symbols()
310 sym->name, MAX_NAME_LEN); in read_symbols()
314 strncpy(pname, sym->name, pnamelen); in read_symbols()
320 sym->name); in read_symbols()
324 sym->pfunc = pfunc; in read_symbols()
325 pfunc->cfunc = sym; in read_symbols()
335 if (sym->sec == pfunc->sec && in read_symbols()
336 sym->offset >= pfunc->offset && in read_symbols()
337 sym->offset + sym->len == pfunc->offset + pfunc->len) { in read_symbols()
338 pfunc->len -= sym->len; in read_symbols()
346 free(sym); in read_symbols()
387 rela->sym = find_symbol_by_index(elf, symndx); in read_relas()
389 if (!rela->sym) { in read_relas()
618 relas[idx].r_info = GELF_R_INFO(rela->sym->idx, rela->type); in elf_rebuild_rela_section()
660 struct symbol *sym, *tmpsym; in elf_close() local
670 list_for_each_entry_safe(sym, tmpsym, &sec->symbol_list, list) { in elf_close()
671 list_del(&sym->list); in elf_close()
672 hash_del(&sym->hash); in elf_close()
673 free(sym); in elf_close()