Lines Matching refs:iter

129 static int elf_sym_iter_new(struct elf_sym_iter *iter,pelfio_t elf, const char *binary_path, int sh_type, int st_type)
132 memset(iter, 0, sizeof(*iter));
134 iter->strtabidx = elfio_section_get_link(pSec);
135 iter->syms->d_buf = (void*)elfio_section_get_data(pSec);
136 iter->syms->d_size = elfio_section_get_size(pSec);
137 if (!iter->syms->d_buf) {
142 iter->nr_syms = iter->syms->d_size / elfio_section_get_entry_size(pSec);
143 iter->symsSec = pSec;
144 iter->elf = elf;
145 iter->st_type = st_type;
153 iter->versyms->d_buf = (void*)elfio_section_get_data(pSec);
154 iter->versyms->d_size = elfio_section_get_size(pSec);
159 iter->verdefs->d_buf = (void*)elfio_section_get_data(pSec);
160 iter->verdefs->d_size = elfio_section_get_size(pSec);
161 if (!iter->verdefs->d_buf) {
165 iter->verdef_strtabidx = elfio_section_get_link(pSec);
188 static struct elf_sym *elf_sym_iter_next(struct elf_sym_iter *iter)
190 struct elf_sym *ret = &iter->sym;
200 for (idx = iter->next_sym_idx; idx < iter->nr_syms; idx++) {
202 if (!gelf_getsym(iter->syms, idx, sym))
204 if (GELF_ST_TYPE(sym->st_info) != iter->st_type)
206 name = elf_strptr(iter->elf, iter->strtabidx, sym->st_name);
209 sym_scn = elf_getscn(iter->elf, sym->st_shndx);
215 if(memcpy(sym,iter->sysms->d_buf + idx,sizeof(GElf_Sym) == NULL) {
218 if(((sym->st_info) & 0xf) != iter->st_type) {
221 psection_t psection = elfio_get_section_by_index(iter->elf, iter->strtabidx);
229 if(!elf_sec_hdr_by_idx(iter->elf, sym->st_shndx, &ret->sh)) {
233 iter->next_sym_idx = idx + 1;
237 if (iter->versyms) {
239 if (!gelf_getversym(iter->versyms, idx, &versym))
242 versym = (GElf_Versym)iter->versysm->d_buf[idx];
252 static const char *elf_get_vername(struct elf_sym_iter *iter, int ver)
257 if (!iter->verdefs)
261 while (gelf_getverdef(iter->verdefs, offset, &verdef)) {
268 if (!gelf_getverdaux(iter->verdefs, offset + verdef.vd_aux, &verdaux))
270 return elf_strptr(iter->elf, iter->verdef_strtabidx, verdaux.vda_name);
273 while (memcpy(&verdef, (void *)iter->verdefs->d_buf + offset, sizeof(GElf_Verdef)) != NULL) {
280 if(memcpy(&verdaux, (void *)iter->verdefs->d_buf + offset + verdef.vd_aux, sizeof(GElf_Verdaux)) == NULL) {
283 psection_t psection = elfio_get_section_by_index(iter->elf, iter->verdef_strtabidx);
293 static bool symbol_match(struct elf_sym_iter *iter, int sh_type, struct elf_sym *sym,
318 ver_name = elf_get_vername(iter, sym->ver);
332 * by looking up symbol's containing section's header and using iter's virtual
390 struct elf_sym_iter iter;
395 ret = elf_sym_iter_new(&iter, elf, binary_path, sh_types[i], STT_FUNC);
401 while ((sym = elf_sym_iter_next(&iter))) {
402 if (!symbol_match(&iter, sh_types[i], sym, name, name_len, lib_ver))
514 struct elf_sym_iter iter;
517 err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], STT_FUNC);
523 while ((sym = elf_sym_iter_next(&iter))) {
595 struct elf_sym_iter iter;
598 err = elf_sym_iter_new(&iter, elf_fd.elf, binary_path, sh_types[i], STT_FUNC);
604 while ((sym = elf_sym_iter_next(&iter))) {