Lines Matching refs:iter
96 static int elf_sym_iter_new(struct elf_sym_iter *iter, in elf_sym_iter_new() argument
104 memset(iter, 0, sizeof(*iter)); in elf_sym_iter_new()
121 iter->strtabidx = sh.sh_link; in elf_sym_iter_new()
122 iter->syms = elf_getdata(scn, 0); in elf_sym_iter_new()
123 if (!iter->syms) { in elf_sym_iter_new()
128 iter->nr_syms = iter->syms->d_size / sh.sh_entsize; in elf_sym_iter_new()
129 iter->elf = elf; in elf_sym_iter_new()
130 iter->st_type = st_type; in elf_sym_iter_new()
139 iter->versyms = elf_getdata(scn, 0); in elf_sym_iter_new()
145 iter->verdefs = elf_getdata(scn, 0); in elf_sym_iter_new()
146 if (!iter->verdefs || !gelf_getshdr(scn, &sh)) { in elf_sym_iter_new()
150 iter->verdef_strtabidx = sh.sh_link; in elf_sym_iter_new()
155 static struct elf_sym *elf_sym_iter_next(struct elf_sym_iter *iter) in elf_sym_iter_next() argument
157 struct elf_sym *ret = &iter->sym; in elf_sym_iter_next()
164 for (idx = iter->next_sym_idx; idx < iter->nr_syms; idx++) { in elf_sym_iter_next()
165 if (!gelf_getsym(iter->syms, idx, sym)) in elf_sym_iter_next()
167 if (GELF_ST_TYPE(sym->st_info) != iter->st_type) in elf_sym_iter_next()
169 name = elf_strptr(iter->elf, iter->strtabidx, sym->st_name); in elf_sym_iter_next()
172 sym_scn = elf_getscn(iter->elf, sym->st_shndx); in elf_sym_iter_next()
178 iter->next_sym_idx = idx + 1; in elf_sym_iter_next()
183 if (iter->versyms) { in elf_sym_iter_next()
184 if (!gelf_getversym(iter->versyms, idx, &versym)) in elf_sym_iter_next()
195 static const char *elf_get_vername(struct elf_sym_iter *iter, int ver) in elf_get_vername() argument
201 if (!iter->verdefs) in elf_get_vername()
205 while (gelf_getverdef(iter->verdefs, offset, &verdef)) { in elf_get_vername()
214 if (!gelf_getverdaux(iter->verdefs, offset + verdef.vd_aux, &verdaux)) in elf_get_vername()
217 return elf_strptr(iter->elf, iter->verdef_strtabidx, verdaux.vda_name); in elf_get_vername()
223 static bool symbol_match(struct elf_sym_iter *iter, int sh_type, struct elf_sym *sym, in symbol_match() argument
248 ver_name = elf_get_vername(iter, sym->ver); in symbol_match()
312 struct elf_sym_iter iter; in elf_find_func_offset() local
317 ret = elf_sym_iter_new(&iter, elf, binary_path, sh_types[i], STT_FUNC); in elf_find_func_offset()
323 while ((sym = elf_sym_iter_next(&iter))) { in elf_find_func_offset()
324 if (!symbol_match(&iter, sh_types[i], sym, name, name_len, lib_ver)) in elf_find_func_offset()
437 struct elf_sym_iter iter; in elf_resolve_syms_offsets() local
440 err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], st_type); in elf_resolve_syms_offsets()
446 while ((sym = elf_sym_iter_next(&iter))) { in elf_resolve_syms_offsets()
518 struct elf_sym_iter iter; in elf_resolve_pattern_offsets() local
521 err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], STT_FUNC); in elf_resolve_pattern_offsets()
527 while ((sym = elf_sym_iter_next(&iter))) { in elf_resolve_pattern_offsets()