Lines Matching refs:sym
88 const struct symbol *sym; member
104 sh->sym = s; in symbol_hole_by_offset()
138 struct symbol *sym; in find_symbol_by_index() local
140 elf_hash_for_each_possible(symbol, sym, hash, idx) { in find_symbol_by_index()
141 if (sym->idx == idx) in find_symbol_by_index()
142 return sym; in find_symbol_by_index()
197 .sym = NULL, in find_symbol_hole_containing()
212 if (!hole.sym) in find_symbol_hole_containing()
216 n = rb_next(&hole.sym->node); in find_symbol_hole_containing()
241 struct symbol *sym; in find_symbol_by_name() local
243 elf_hash_for_each_possible(symbol_name, sym, name_hash, str_hash(name)) { in find_symbol_by_name()
244 if (!strcmp(sym->name, name)) in find_symbol_by_name()
245 return sym; in find_symbol_by_name()
372 static void elf_add_symbol(struct elf *elf, struct symbol *sym) in elf_add_symbol() argument
377 INIT_LIST_HEAD(&sym->pv_target); in elf_add_symbol()
378 sym->alias = sym; in elf_add_symbol()
380 sym->type = GELF_ST_TYPE(sym->sym.st_info); in elf_add_symbol()
381 sym->bind = GELF_ST_BIND(sym->sym.st_info); in elf_add_symbol()
383 if (sym->type == STT_FILE) in elf_add_symbol()
386 sym->offset = sym->sym.st_value; in elf_add_symbol()
387 sym->len = sym->sym.st_size; in elf_add_symbol()
389 rb_add(&sym->node, &sym->sec->symbol_tree, symbol_to_offset); in elf_add_symbol()
390 pnode = rb_prev(&sym->node); in elf_add_symbol()
394 entry = &sym->sec->symbol_list; in elf_add_symbol()
395 list_add(&sym->list, entry); in elf_add_symbol()
396 elf_hash_add(symbol, &sym->hash, sym->idx); in elf_add_symbol()
397 elf_hash_add(symbol_name, &sym->name_hash, str_hash(sym->name)); in elf_add_symbol()
403 if (!sym->len) in elf_add_symbol()
404 rb_erase(&sym->node, &sym->sec->symbol_tree); in elf_add_symbol()
410 struct symbol *sym, *pfunc; in read_symbols() local
438 sym = malloc(sizeof(*sym)); in read_symbols()
439 if (!sym) { in read_symbols()
443 memset(sym, 0, sizeof(*sym)); in read_symbols()
445 sym->idx = i; in read_symbols()
447 if (!gelf_getsymshndx(symtab->data, shndx_data, i, &sym->sym, in read_symbols()
453 sym->name = elf_strptr(elf->elf, symtab->sh.sh_link, in read_symbols()
454 sym->sym.st_name); in read_symbols()
455 if (!sym->name) { in read_symbols()
460 if ((sym->sym.st_shndx > SHN_UNDEF && in read_symbols()
461 sym->sym.st_shndx < SHN_LORESERVE) || in read_symbols()
462 (shndx_data && sym->sym.st_shndx == SHN_XINDEX)) { in read_symbols()
463 if (sym->sym.st_shndx != SHN_XINDEX) in read_symbols()
464 shndx = sym->sym.st_shndx; in read_symbols()
466 sym->sec = find_section_by_index(elf, shndx); in read_symbols()
467 if (!sym->sec) { in read_symbols()
469 sym->name); in read_symbols()
472 if (GELF_ST_TYPE(sym->sym.st_info) == STT_SECTION) { in read_symbols()
473 sym->name = sym->sec->name; in read_symbols()
474 sym->sec->sym = sym; in read_symbols()
477 sym->sec = find_section_by_index(elf, 0); in read_symbols()
479 elf_add_symbol(elf, sym); in read_symbols()
489 list_for_each_entry(sym, &sec->symbol_list, list) { in read_symbols()
492 if (sym->type != STT_FUNC) in read_symbols()
495 if (sym->pfunc == NULL) in read_symbols()
496 sym->pfunc = sym; in read_symbols()
498 if (sym->cfunc == NULL) in read_symbols()
499 sym->cfunc = sym; in read_symbols()
501 coldstr = strstr(sym->name, ".cold"); in read_symbols()
505 pnamelen = coldstr - sym->name; in read_symbols()
508 sym->name, MAX_NAME_LEN); in read_symbols()
512 strncpy(pname, sym->name, pnamelen); in read_symbols()
518 sym->name); in read_symbols()
522 sym->pfunc = pfunc; in read_symbols()
523 pfunc->cfunc = sym; in read_symbols()
533 if (sym->sec == pfunc->sec && in read_symbols()
534 sym->offset >= pfunc->offset && in read_symbols()
535 sym->offset + sym->len == pfunc->offset + pfunc->len) { in read_symbols()
536 pfunc->len -= sym->len; in read_symbols()
544 free(sym); in read_symbols()
553 unsigned int type, struct symbol *sym, s64 addend) in elf_add_reloc() argument
570 reloc->sym = sym; in elf_add_reloc()
587 static void elf_dirty_reloc_sym(struct elf *elf, struct symbol *sym) in elf_dirty_reloc_sym() argument
598 if (reloc->sym == sym) { in elf_dirty_reloc_sym()
615 struct section *symtab_shndx, struct symbol *sym) in elf_update_symbol() argument
617 Elf32_Word shndx = sym->sec ? sym->sec->idx : SHN_UNDEF; in elf_update_symbol()
620 int max_idx, idx = sym->idx; in elf_update_symbol()
622 bool is_special_shndx = sym->sym.st_shndx >= SHN_LORESERVE && in elf_update_symbol()
623 sym->sym.st_shndx != SHN_XINDEX; in elf_update_symbol()
626 shndx = sym->sym.st_shndx; in elf_update_symbol()
678 shndx_data->d_buf = &sym->sec->idx; in elf_update_symbol()
713 sym->sym.st_shndx = shndx; in elf_update_symbol()
717 sym->sym.st_shndx = SHN_XINDEX; in elf_update_symbol()
724 if (!gelf_update_symshndx(symtab_data, shndx_data, idx, &sym->sym, shndx)) { in elf_update_symbol()
737 struct symbol *sym, *old; in elf_create_section_symbol() local
747 sym = calloc(1, sizeof(*sym)); in elf_create_section_symbol()
748 if (!sym) { in elf_create_section_symbol()
753 sym->name = sec->name; in elf_create_section_symbol()
754 sym->sec = sec; in elf_create_section_symbol()
757 sym->sym.st_info = GELF_ST_INFO(STB_LOCAL, STT_SECTION); in elf_create_section_symbol()
785 sym->idx = new_idx; in elf_create_section_symbol()
786 if (elf_update_symbol(elf, symtab, symtab_shndx, sym)) { in elf_create_section_symbol()
796 elf_add_symbol(elf, sym); in elf_create_section_symbol()
798 return sym; in elf_create_section_symbol()
805 struct symbol *sym = insn_sec->sym; in elf_add_reloc_to_insn() local
808 if (!sym) { in elf_add_reloc_to_insn()
815 sym = elf_create_section_symbol(elf, insn_sec); in elf_add_reloc_to_insn()
816 if (!sym) in elf_add_reloc_to_insn()
819 insn_sec->sym = sym; in elf_add_reloc_to_insn()
822 return elf_add_reloc(elf, sec, offset, type, sym, addend); in elf_add_reloc_to_insn()
898 reloc->sym = find_symbol_by_index(elf, symndx); in read_relocs()
899 if (!reloc->sym) { in read_relocs()
1189 reloc->rel.r_info = GELF_R_INFO(reloc->sym->idx, reloc->type); in elf_rebuild_rel_reloc_section()
1221 reloc->rela.r_info = GELF_R_INFO(reloc->sym->idx, reloc->type); in elf_rebuild_rela_reloc_section()
1265 reloc->rel.r_info = GELF_R_INFO(reloc->sym->idx, reloc->type); in elf_write_reloc()
1273 reloc->rela.r_info = GELF_R_INFO(reloc->sym->idx, reloc->type); in elf_write_reloc()
1337 struct symbol *sym, *tmpsym; in elf_close() local
1347 list_for_each_entry_safe(sym, tmpsym, &sec->symbol_list, list) { in elf_close()
1348 list_del(&sym->list); in elf_close()
1349 hash_del(&sym->hash); in elf_close()
1350 free(sym); in elf_close()