Lines Matching refs:iter

97 static int elf_sym_iter_new(struct elf_sym_iter *iter,  in elf_sym_iter_new()  argument
105 memset(iter, 0, sizeof(*iter)); in elf_sym_iter_new()
122 iter->strtabidx = sh.sh_link; in elf_sym_iter_new()
123 iter->syms = elf_getdata(scn, 0); in elf_sym_iter_new()
124 if (!iter->syms) { in elf_sym_iter_new()
129 iter->nr_syms = iter->syms->d_size / sh.sh_entsize; in elf_sym_iter_new()
130 iter->elf = elf; in elf_sym_iter_new()
131 iter->st_type = st_type; in elf_sym_iter_new()
140 iter->versyms = elf_getdata(scn, 0); in elf_sym_iter_new()
146 iter->verdefs = elf_getdata(scn, 0); in elf_sym_iter_new()
147 if (!iter->verdefs || !gelf_getshdr(scn, &sh)) { in elf_sym_iter_new()
151 iter->verdef_strtabidx = sh.sh_link; in elf_sym_iter_new()
156 static struct elf_sym *elf_sym_iter_next(struct elf_sym_iter *iter) in elf_sym_iter_next() argument
158 struct elf_sym *ret = &iter->sym; in elf_sym_iter_next()
165 for (idx = iter->next_sym_idx; idx < iter->nr_syms; idx++) { in elf_sym_iter_next()
166 if (!gelf_getsym(iter->syms, idx, sym)) in elf_sym_iter_next()
168 if (GELF_ST_TYPE(sym->st_info) != iter->st_type) in elf_sym_iter_next()
170 name = elf_strptr(iter->elf, iter->strtabidx, sym->st_name); in elf_sym_iter_next()
173 sym_scn = elf_getscn(iter->elf, sym->st_shndx); in elf_sym_iter_next()
179 iter->next_sym_idx = idx + 1; in elf_sym_iter_next()
184 if (iter->versyms) { in elf_sym_iter_next()
185 if (!gelf_getversym(iter->versyms, idx, &versym)) in elf_sym_iter_next()
196 static const char *elf_get_vername(struct elf_sym_iter *iter, int ver) in elf_get_vername() argument
202 if (!iter->verdefs) in elf_get_vername()
206 while (gelf_getverdef(iter->verdefs, offset, &verdef)) { in elf_get_vername()
215 if (!gelf_getverdaux(iter->verdefs, offset + verdef.vd_aux, &verdaux)) in elf_get_vername()
218 return elf_strptr(iter->elf, iter->verdef_strtabidx, verdaux.vda_name); in elf_get_vername()
224 static bool symbol_match(struct elf_sym_iter *iter, int sh_type, struct elf_sym *sym, in symbol_match() argument
249 ver_name = elf_get_vername(iter, sym->ver); in symbol_match()
313 struct elf_sym_iter iter; in elf_find_func_offset() local
318 ret = elf_sym_iter_new(&iter, elf, binary_path, sh_types[i], STT_FUNC); in elf_find_func_offset()
324 while ((sym = elf_sym_iter_next(&iter))) { in elf_find_func_offset()
325 if (!symbol_match(&iter, sh_types[i], sym, name, name_len, lib_ver)) in elf_find_func_offset()
438 struct elf_sym_iter iter; in elf_resolve_syms_offsets() local
441 err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], st_type); in elf_resolve_syms_offsets()
447 while ((sym = elf_sym_iter_next(&iter))) { in elf_resolve_syms_offsets()
519 struct elf_sym_iter iter; in elf_resolve_pattern_offsets() local
522 err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], STT_FUNC); in elf_resolve_pattern_offsets()
528 while ((sym = elf_sym_iter_next(&iter))) { in elf_resolve_pattern_offsets()