Lines Matching defs:symtab
727 ctf_sect_t ctdata, symtab, strtab;
772 symtab.cts_name = fptr->file_ctf_dyn ? ".dynsym" : ".symtab";
773 symtab.cts_type = symp->sym_hdr_pri.sh_type;
774 symtab.cts_flags = symp->sym_hdr_pri.sh_flags;
775 symtab.cts_data = symp->sym_data_pri->d_buf;
776 symtab.cts_size = symp->sym_hdr_pri.sh_size;
777 symtab.cts_entsize = symp->sym_hdr_pri.sh_entsize;
778 symtab.cts_offset = symp->sym_hdr_pri.sh_offset;
788 fptr->file_ctfp = ctf_bufopen(&ctdata, &symtab, &strtab, &err);
1138 * (both dynsym and symtab), the procedure linkage table (PLT) base,
1141 * being the symtab and CTF data.
1445 symtab_getsym(sym_tbl_t *symtab, int ndx, GElf_Sym *dst)
1447 /* If index is in range of primary symtab, look it up there */
1448 if (ndx >= symtab->sym_symn_aux) {
1449 return (gelf_getsym(symtab->sym_data_pri,
1450 ndx - symtab->sym_symn_aux, dst));
1453 /* Not in primary: Look it up in the auxiliary symtab */
1454 return (gelf_getsym(symtab->sym_data_aux, ndx, dst));
1458 optimize_symtab(sym_tbl_t *symtab)
1464 if (symtab == NULL || symtab->sym_data_pri == NULL ||
1465 symtab->sym_byaddr != NULL)
1468 symn = symtab->sym_symn;
1469 strsz = symtab->sym_strsz;
1483 if (symtab_getsym(symtab, i, symp) != NULL &&
1495 symtab->sym_count = count;
1496 indexa = symtab->sym_byaddr = calloc(sizeof (uint_t), count);
1497 indexb = symtab->sym_byname = calloc(sizeof (uint_t), count);
1501 symtab->sym_count = 0;
1504 symtab->sym_byaddr = NULL;
1530 sort_strs = symtab->sym_strs;
1533 qsort(symtab->sym_byaddr, count, sizeof (uint_t), byaddr_cmp);
1534 qsort(symtab->sym_byname, count, sizeof (uint_t), byname_cmp);
1748 * for the .symtab, .dynsym, .SUNW_ldynsym, .dynamic, .plt,
1761 * only contain the dynsym (not the symtab) or the
1821 * to find: the ones in the loop above and possibly the symtab that
2171 sym_by_addr_binary(sym_tbl_t *symtab, GElf_Addr addr, GElf_Sym *symp,
2175 uint_t i, oid, *byaddr = symtab->sym_byaddr;
2178 if (symtab->sym_data_pri == NULL || symtab->sym_count == 0)
2182 max = symtab->sym_count - 1;
2193 (void) symtab_getsym(symtab, i, &sym);
2225 (void) symtab_getsym(symtab, oid, &osym);
2240 sym_by_addr_linear(sym_tbl_t *symtab, GElf_Addr addr, GElf_Sym *symbolp,
2243 size_t symn = symtab->sym_symn;
2244 char *strs = symtab->sym_strs;
2249 if (symtab->sym_data_pri == NULL || symn == 0 || strs == NULL)
2253 if ((symp = symtab_getsym(symtab, i, &sym)) != NULL) {
2286 sym_by_addr(sym_tbl_t *symtab, GElf_Addr addr, GElf_Sym *symp, uint_t *idp)
2289 return (sym_by_addr_linear(symtab, addr, symp, idp));
2291 return (sym_by_addr_binary(symtab, addr, symp, idp));
2299 sym_by_name_binary(sym_tbl_t *symtab, const char *name, GElf_Sym *symp,
2302 char *strs = symtab->sym_strs;
2303 uint_t i, *byname = symtab->sym_byname;
2306 if (symtab->sym_data_pri == NULL || strs == NULL ||
2307 symtab->sym_count == 0)
2311 max = symtab->sym_count - 1;
2317 (void) symtab_getsym(symtab, i, symp);
2338 sym_by_name_linear(sym_tbl_t *symtab, const char *name, GElf_Sym *symp,
2341 size_t symn = symtab->sym_symn;
2342 char *strs = symtab->sym_strs;
2345 if (symtab->sym_data_pri == NULL || symn == 0 || strs == NULL)
2349 if (symtab_getsym(symtab, i, symp) &&
2367 sym_by_name(sym_tbl_t *symtab, const char *name, GElf_Sym *symp, uint_t *idp)
2370 return (sym_by_name_linear(symtab, name, symp, idp));
2372 return (sym_by_name_binary(symtab, name, symp, idp));
2420 * Search both symbol tables, symtab first, then dynsym.
2514 * name in the .symtab and .dynsym of each. If we encounter a match
2772 sym_tbl_t *symtab;
2792 symtab = &fptr->file_symtab;
2796 symtab = &fptr->file_dynsym;
2807 symn = symtab->sym_symn;
2808 strs = symtab->sym_strs;
2809 strsz = symtab->sym_strsz;
2817 map = symtab->sym_byname;
2818 count = symtab->sym_count;
2821 map = symtab->sym_byaddr;
2822 count = symtab->sym_count;
2828 if (symtab->sym_data_pri == NULL || strs == NULL || count == 0)
2835 if (symtab_getsym(symtab, ndx, &sym) != NULL) {