Lines Matching refs:sym

67 #define elf_symtab__for_each_symbol(syms, nr_syms, idx, sym) \  argument
68 for (idx = 0, gelf_getsym(syms, idx, &sym);\
70 idx++, gelf_getsym(syms, idx, &sym))
72 static inline uint8_t elf_sym__type(const GElf_Sym *sym) in elf_sym__type() argument
74 return GELF_ST_TYPE(sym->st_info); in elf_sym__type()
81 static inline int elf_sym__is_function(const GElf_Sym *sym) in elf_sym__is_function() argument
83 return (elf_sym__type(sym) == STT_FUNC || in elf_sym__is_function()
84 elf_sym__type(sym) == STT_GNU_IFUNC) && in elf_sym__is_function()
85 sym->st_name != 0 && in elf_sym__is_function()
86 sym->st_shndx != SHN_UNDEF; in elf_sym__is_function()
89 static inline bool elf_sym__is_object(const GElf_Sym *sym) in elf_sym__is_object() argument
91 return elf_sym__type(sym) == STT_OBJECT && in elf_sym__is_object()
92 sym->st_name != 0 && in elf_sym__is_object()
93 sym->st_shndx != SHN_UNDEF; in elf_sym__is_object()
96 static inline int elf_sym__is_label(const GElf_Sym *sym) in elf_sym__is_label() argument
98 return elf_sym__type(sym) == STT_NOTYPE && in elf_sym__is_label()
99 sym->st_name != 0 && in elf_sym__is_label()
100 sym->st_shndx != SHN_UNDEF && in elf_sym__is_label()
101 sym->st_shndx != SHN_ABS; in elf_sym__is_label()
104 static bool elf_sym__is_a(GElf_Sym *sym, enum map_type type) in elf_sym__is_a() argument
108 return elf_sym__is_function(sym); in elf_sym__is_a()
110 return elf_sym__is_object(sym); in elf_sym__is_a()
116 static inline const char *elf_sym__name(const GElf_Sym *sym, in elf_sym__name() argument
119 return symstrs->d_buf + sym->st_name; in elf_sym__name()
219 GElf_Sym sym; in dso__synthesize_plt_symbols() local
295 gelf_getsym(syms, symidx, &sym); in dso__synthesize_plt_symbols()
297 "%s@plt", elf_sym__name(&sym, symstrs)); in dso__synthesize_plt_symbols()
317 gelf_getsym(syms, symidx, &sym); in dso__synthesize_plt_symbols()
319 "%s@plt", elf_sym__name(&sym, symstrs)); in dso__synthesize_plt_symbols()
779 void __weak arch__elf_sym_adjust(GElf_Sym *sym __maybe_unused) { } in arch__elf_sym_adjust()
796 GElf_Sym sym; in dso__load_sym() local
859 memset(&sym, 0, sizeof(sym)); in dso__load_sym()
866 elf_symtab__for_each_symbol(syms, nr_syms, idx, sym) { in dso__load_sym()
867 const char *elf_name = elf_sym__name(&sym, symstrs); in dso__load_sym()
871 kmap->ref_reloc_sym->unrelocated_addr = sym.st_value; in dso__load_sym()
898 elf_symtab__for_each_symbol(syms, nr_syms, idx, sym) { in dso__load_sym()
900 const char *elf_name = elf_sym__name(&sym, symstrs); in dso__load_sym()
902 int is_label = elf_sym__is_label(&sym); in dso__load_sym()
906 if (!is_label && !elf_sym__is_a(&sym, map->type)) in dso__load_sym()
918 if (runtime_ss->opdsec && sym.st_shndx == runtime_ss->opdidx) { in dso__load_sym()
919 u32 offset = sym.st_value - syms_ss->opdshdr.sh_addr; in dso__load_sym()
921 sym.st_value = DSO__SWAP(dso, u64, *opd); in dso__load_sym()
922 sym.st_shndx = elf_addr_to_index(runtime_ss->elf, in dso__load_sym()
923 sym.st_value); in dso__load_sym()
935 if (sym.st_shndx == SHN_ABS) in dso__load_sym()
938 sec = elf_getscn(runtime_ss->elf, sym.st_shndx); in dso__load_sym()
953 (sym.st_value & 1)) in dso__load_sym()
954 --sym.st_value; in dso__load_sym()
956 arch__elf_sym_adjust(&sym); in dso__load_sym()
963 sym.st_value -= shdr.sh_addr - shdr.sh_offset; in dso__load_sym()
1016 u64 start = sym.st_value; in dso__load_sym()
1057 (u64)sym.st_value, (u64)shdr.sh_addr, in dso__load_sym()
1059 sym.st_value -= shdr.sh_addr - shdr.sh_offset; in dso__load_sym()
1076 f = symbol__new(sym.st_value, sym.st_size, in dso__load_sym()
1077 GELF_ST_BIND(sym.st_info), elf_name); in dso__load_sym()