Lines Matching defs:fptr

174 	file_info_t *fptr;
179 if ((fptr = calloc(1, sizeof (file_info_t))) == NULL)
182 list_link(fptr, &P->file_head);
183 (void) strcpy(fptr->file_pname, mptr->map_pmap.pr_mapname);
184 mptr->map_file = fptr;
185 fptr->file_ref = 1;
186 fptr->file_fd = -1;
197 if ((fptr->file_saddrs = get_saddrs(P, mptr->map_pmap.pr_vaddr,
198 &fptr->file_nsaddrs)) == NULL)
199 return (fptr);
203 while (mp < P->mappings + P->map_count && i < fptr->file_nsaddrs) {
208 sstart = fptr->file_saddrs[i];
209 send = fptr->file_saddrs[i + 1];
223 mp->map_file = fptr;
224 fptr->file_ref++;
236 return (fptr);
243 file_info_free(struct ps_prochandle *P, file_info_t *fptr)
245 if (--fptr->file_ref == 0) {
246 list_unlink(fptr);
247 if (fptr->file_symtab.sym_elf) {
248 (void) elf_end(fptr->file_symtab.sym_elf);
249 free(fptr->file_symtab.sym_elfmem);
251 if (fptr->file_symtab.sym_byname)
252 free(fptr->file_symtab.sym_byname);
253 if (fptr->file_symtab.sym_byaddr)
254 free(fptr->file_symtab.sym_byaddr);
256 if (fptr->file_dynsym.sym_elf) {
257 (void) elf_end(fptr->file_dynsym.sym_elf);
258 free(fptr->file_dynsym.sym_elfmem);
260 if (fptr->file_dynsym.sym_byname)
261 free(fptr->file_dynsym.sym_byname);
262 if (fptr->file_dynsym.sym_byaddr)
263 free(fptr->file_dynsym.sym_byaddr);
265 if (fptr->file_lo)
266 free(fptr->file_lo);
267 if (fptr->file_lname)
268 free(fptr->file_lname);
269 if (fptr->file_rname)
270 free(fptr->file_rname);
271 if (fptr->file_elf)
272 (void) elf_end(fptr->file_elf);
273 if (fptr->file_elfmem != NULL)
274 free(fptr->file_elfmem);
275 if (fptr->file_fd >= 0)
276 (void) close(fptr->file_fd);
277 if (fptr->file_ctfp) {
278 ctf_close(fptr->file_ctfp);
279 free(fptr->file_ctf_buf);
281 if (fptr->file_saddrs)
282 free(fptr->file_saddrs);
283 free(fptr);
294 file_info_t *fptr;
296 if ((fptr = mptr->map_file) != NULL) {
297 if (fptr->file_map == mptr)
298 fptr->file_map = NULL;
299 file_info_free(P, fptr);
326 file_info_t *fptr;
335 if ((fptr = mptr->map_file) == NULL &&
336 (fptr = file_info_new(P, mptr)) == NULL) {
341 if ((fptr->file_lo == NULL) &&
342 (fptr->file_lo = malloc(sizeof (rd_loadobj_t))) == NULL) {
344 file_info_free(P, fptr);
348 fptr->file_map = mptr;
349 *fptr->file_lo = *lop;
351 fptr->file_lo->rl_plt_base = fptr->file_plt_base;
352 fptr->file_lo->rl_plt_size = fptr->file_plt_size;
354 if (fptr->file_lname) {
355 free(fptr->file_lname);
356 fptr->file_lname = NULL;
357 fptr->file_lbase = NULL;
359 if (fptr->file_rname) {
360 free(fptr->file_rname);
361 fptr->file_rname = NULL;
362 fptr->file_rbase = NULL;
366 if ((fptr->file_lname = strdup(buf)) != NULL)
367 fptr->file_lbase = basename(fptr->file_lname);
374 ((fptr->file_rname = strdup(buf)) != NULL))
375 fptr->file_rbase = basename(fptr->file_rname);
378 fptr->file_lname ? buf : "<NULL>", lop->rl_lmident);
385 file_info_t *fptr;
388 if ((fptr = mptr->map_file) == NULL &&
389 (fptr = file_info_new(P, mptr)) == NULL)
392 fptr->file_map = mptr;
394 if ((fptr->file_lo == NULL) &&
395 (fptr->file_lo = malloc(sizeof (rd_loadobj_t))) == NULL) {
396 file_info_free(P, fptr);
400 (void) memset(fptr->file_lo, 0, sizeof (rd_loadobj_t));
401 fptr->file_lo->rl_base = mptr->map_pmap.pr_vaddr;
402 fptr->file_lo->rl_bend =
405 fptr->file_lo->rl_plt_base = fptr->file_plt_base;
406 fptr->file_lo->rl_plt_size = fptr->file_plt_size;
408 if ((fptr->file_lname == NULL) &&
409 (fptr->file_lname = strdup(lname)) != NULL)
410 fptr->file_lbase = basename(fptr->file_lname);
413 ((fptr->file_rname = strdup(buf)) != NULL))
414 fptr->file_rbase = basename(fptr->file_rname);
570 file_info_t *fptr;
575 for (i = 0, fptr = list_next(&P->file_head); i < P->num_files;
576 i++, fptr = list_next(fptr)) {
577 Pbuild_file_symtab(P, fptr);
578 (void) Pbuild_file_ctf(P, fptr);
616 file_info_t *fptr = build_map_symtab(P, mptr);
626 if (fptr != NULL && fptr->file_lo != NULL &&
627 (fptr->file_lo->rl_data_base == NULL ||
629 fptr->file_lo->rl_data_base))
725 Pbuild_file_ctf(struct ps_prochandle *P, file_info_t *fptr)
731 if (fptr->file_ctfp != NULL)
732 return (fptr->file_ctfp);
734 Pbuild_file_symtab(P, fptr);
736 if (fptr->file_ctf_size == 0)
739 symp = fptr->file_ctf_dyn ? &fptr->file_dynsym : &fptr->file_symtab;
747 if (fptr->file_ctf_buf == NULL) {
748 fptr->file_ctf_buf = malloc(fptr->file_ctf_size);
749 if (fptr->file_ctf_buf == NULL) {
754 if (pread(fptr->file_fd, fptr->file_ctf_buf,
755 fptr->file_ctf_size, fptr->file_ctf_off) !=
756 fptr->file_ctf_size) {
757 free(fptr->file_ctf_buf);
758 fptr->file_ctf_buf = NULL;
767 ctdata.cts_data = fptr->file_ctf_buf;
768 ctdata.cts_size = fptr->file_ctf_size;
772 symtab.cts_name = fptr->file_ctf_dyn ? ".dynsym" : ".symtab";
780 strtab.cts_name = fptr->file_ctf_dyn ? ".dynstr" : ".strtab";
788 fptr->file_ctfp = ctf_bufopen(&ctdata, &symtab, &strtab, &err);
789 if (fptr->file_ctfp == NULL) {
791 free(fptr->file_ctf_buf);
792 fptr->file_ctf_buf = NULL;
797 (ulong_t)fptr->file_ctf_size, fptr->file_pname);
799 return (fptr->file_ctfp);
806 file_info_t *fptr;
812 (fptr = mptr->map_file) == NULL)
815 return (Pbuild_file_ctf(P, fptr));
822 file_info_t *fptr;
828 (fptr = mptr->map_file) == NULL)
831 return (Pbuild_file_ctf(P, fptr));
898 is_mapping_in_file(struct ps_prochandle *P, map_info_t *mptr, file_info_t *fptr)
901 rd_loadobj_t *lop = fptr->file_lo;
930 if (fptr->file_saddrs == NULL &&
931 (fptr->file_saddrs = get_saddrs(P,
932 fptr->file_map->map_pmap.pr_vaddr, &fptr->file_nsaddrs)) == NULL)
937 for (i = 0; i < fptr->file_nsaddrs; i += 2) {
939 sstart = fptr->file_saddrs[i];
940 send = fptr->file_saddrs[i + 1];
955 file_info_t *fptr;
958 if ((fptr = mptr->map_file) != NULL) {
959 Pbuild_file_symtab(P, fptr);
960 return (fptr);
970 for (i = 0, fptr = list_next(&P->file_head); i < P->num_files;
971 i++, fptr = list_next(fptr)) {
972 if (strcmp(fptr->file_pname, pmap->pr_mapname) == 0 &&
973 fptr->file_lo && is_mapping_in_file(P, mptr, fptr)) {
974 mptr->map_file = fptr;
975 fptr->file_ref++;
976 Pbuild_file_symtab(P, fptr);
977 return (fptr);
988 if ((fptr = file_info_new(P, mptr)) == NULL)
997 fptr->file_map = mptr;
1003 * fptr->file_map to be set in Pbuild_file_symtab. librtld_db may be
1008 if (fptr->file_map == NULL)
1009 fptr->file_map = mptr;
1011 Pbuild_file_symtab(P, fptr);
1013 return (fptr);
1160 file_differs(struct ps_prochandle *P, Elf *elf, file_info_t *fptr)
1170 if (fptr->file_map == NULL)
1220 addr = fptr->file_map->map_pmap.pr_vaddr;
1303 fake_elf(struct ps_prochandle *P, file_info_t *fptr)
1309 if (fptr->file_map == NULL)
1316 addr = fptr->file_map->map_pmap.pr_vaddr;
1326 elf = fake_elf32(P, fptr, addr, &ehdr, phnum, &phdr);
1336 elf = fake_elf64(P, fptr, addr, &ehdr, phnum, &phdr);
1546 build_fake_elf(struct ps_prochandle *P, file_info_t *fptr, GElf_Ehdr *ehdr,
1553 if ((elf = fake_elf(P, fptr)) == NULL ||
1573 Pbuild_file_symtab(struct ps_prochandle *P, file_info_t *fptr)
1592 if (fptr->file_init)
1599 fptr->file_init = 1;
1620 if (fptr->file_rname != NULL)
1621 name = fptr->file_rname;
1622 else if (fptr->file_lname != NULL)
1623 name = fptr->file_lname;
1625 name = fptr->file_pname;
1630 procfs_path, (int)P->pid, fptr->file_pname);
1642 fptr->file_pname);
1644 if ((elf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata)) ==
1648 } else if ((fptr->file_fd = open(objectfile, O_RDONLY)) < 0) {
1652 if ((elf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata)) ==
1656 } else if ((elf = elf_begin(fptr->file_fd, ELF_C_READ, NULL)) == NULL ||
1669 if ((elf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata)) ==
1673 } else if (file_differs(P, elf, fptr)) {
1683 fptr->file_pname,
1684 (ulong_t)fptr->file_map->map_pmap.pr_vaddr);
1686 if ((newelf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata))
1699 if (fptr->file_rname != NULL && P->execname != NULL &&
1700 strcmp(fptr->file_rname, P->execname) == 0) {
1715 fptr->file_class = ehdr.e_ident[EI_CLASS];
1716 fptr->file_etype = ehdr.e_type;
1717 fptr->file_elf = elf;
1718 fptr->file_shstrs = shdata->d_buf;
1719 fptr->file_shstrsz = shdata->d_size;
1756 &fptr->file_symtab : &fptr->file_dynsym;
1785 if (fptr->file_dynsym.sym_data_aux == NULL) {
1788 fptr->file_dynsym.sym_data_aux = cp->c_data;
1789 fptr->file_dynsym.sym_symn_aux =
1791 fptr->file_dynsym.sym_symn +=
1792 fptr->file_dynsym.sym_symn_aux;
1793 fptr->file_dynsym.sym_hdr_aux = cp->c_shdr;
1825 optimize_symtab(&fptr->file_symtab);
1826 optimize_symtab(&fptr->file_dynsym);
1832 if (fptr->file_etype == ET_DYN) {
1833 fptr->file_dyn_base = fptr->file_map->map_pmap.pr_vaddr -
1834 fptr->file_map->map_pmap.pr_offset;
1836 objectfile, (long)fptr->file_dyn_base);
1843 fptr->file_ctf_off = ctf->c_shdr.sh_offset;
1844 fptr->file_ctf_size = ctf->c_shdr.sh_size;
1847 fptr->file_ctf_dyn = 1;
1850 if (fptr->file_lo == NULL)
1857 if (fptr->file_etype == ET_DYN &&
1858 fptr->file_lo->rl_base != fptr->file_dyn_base) {
1860 objectfile, (long)fptr->file_lo->rl_base);
1861 fptr->file_dyn_base = fptr->file_lo->rl_base;
1867 if (sym_by_name(&fptr->file_dynsym, "_PROCEDURE_LINKAGE_TABLE_", &s,
1869 fptr->file_plt_base = s.st_value + fptr->file_dyn_base;
1870 fptr->file_plt_size = (plt != NULL) ? plt->c_shdr.sh_size : 0;
1878 fptr->file_lo->rl_plt_base = fptr->file_plt_base;
1879 fptr->file_lo->rl_plt_size = fptr->file_plt_size;
1882 (void *)fptr->file_plt_base, (ulong_t)fptr->file_plt_size);
1889 uintptr_t dynaddr = dyn->c_shdr.sh_addr + fptr->file_dyn_base;
1901 fptr->file_jmp_rel =
1902 d.d_un.d_ptr + fptr->file_dyn_base;
1928 (void *)dynaddr, (ulong_t)ndyn, (void *)fptr->file_jmp_rel);
1940 fptr->file_elf = NULL;
1941 if (fptr->file_elfmem != NULL) {
1942 free(fptr->file_elfmem);
1943 fptr->file_elfmem = NULL;
1945 (void) close(fptr->file_fd);
1946 fptr->file_fd = -1;
1989 file_info_t *fptr;
1996 if ((fptr = mptr->map_file) != NULL &&
1997 fptr->file_lo != NULL) {
1998 base = fptr->file_lo->rl_base;
2404 file_info_t *fptr;
2409 (fptr = build_map_symtab(P, mptr)) == NULL || /* no mapped file */
2410 fptr->file_elf == NULL) /* not an ELF file */
2417 addr -= fptr->file_dyn_base;
2422 if ((sym1p = sym_by_addr(&fptr->file_symtab, addr, &sym1, &i1)) != NULL)
2423 name1 = fptr->file_symtab.sym_strs + sym1.st_name;
2424 if ((sym2p = sym_by_addr(&fptr->file_dynsym, addr, &sym2, &i2)) != NULL)
2425 name2 = fptr->file_dynsym.sym_strs + sym2.st_name;
2439 if (lmresolve && (fptr->file_rname != NULL))
2440 sip->prs_object = fptr->file_rbase;
2442 sip->prs_object = fptr->file_lbase;
2445 sip->prs_lmid = (fptr->file_lo == NULL) ? LM_ID_BASE :
2446 fptr->file_lo->rl_lmident;
2450 symbolp->st_value += fptr->file_dyn_base;
2492 file_info_t *fptr;
2504 fptr = list_next(&P->file_head);
2508 (fptr = build_map_symtab(P, mptr)) == NULL)
2519 for (; cnt > 0; cnt--, fptr = list_next(fptr)) {
2520 Pbuild_file_symtab(P, fptr);
2522 if (fptr->file_elf == NULL)
2525 if (lmid != PR_LMID_EVERY && fptr->file_lo != NULL &&
2526 lmid != fptr->file_lo->rl_lmident)
2529 if (fptr->file_symtab.sym_data_pri != NULL &&
2530 sym_by_name(&fptr->file_symtab, sname, symp, &id)) {
2536 sip->prs_lmid = fptr->file_lo == NULL ?
2537 LM_ID_BASE : fptr->file_lo->rl_lmident;
2539 } else if (fptr->file_dynsym.sym_data_pri != NULL &&
2540 sym_by_name(&fptr->file_dynsym, sname, symp, &id)) {
2546 sip->prs_lmid = fptr->file_lo == NULL ?
2547 LM_ID_BASE : fptr->file_lo->rl_lmident;
2554 symp->st_value += fptr->file_dyn_base;
2595 file_info_t *fptr;
2604 if ((fptr = mptr->map_file) == NULL)
2606 else if (lmresolve && (fptr->file_rname != NULL))
2607 object_name = fptr->file_rname;
2609 object_name = fptr->file_lname;
2636 file_info_t *fptr;
2643 for (cnt = P->num_files, fptr = list_next(&P->file_head);
2644 cnt; cnt--, fptr = list_next(fptr)) {
2647 if (lmresolve && (fptr->file_rname != NULL))
2648 lname = fptr->file_rname;
2649 else if (fptr->file_lname != NULL)
2650 lname = fptr->file_lname;
2654 if ((mptr = fptr->file_map) == NULL)
2683 file_info_t *fptr;
2692 if (((fptr = mptr->map_file) == NULL) ||
2693 (fptr->file_lname == NULL))
2695 (void) strlcpy(buffer, fptr->file_lname, bufsize);
2741 file_info_t *fptr;
2747 (fptr = mptr->map_file) != NULL && fptr->file_lo != NULL) {
2748 *lmidp = fptr->file_lo->rl_lmident;
2771 file_info_t *fptr;
2783 if ((fptr = build_map_symtab(P, mptr)) == NULL || /* no mapped file */
2784 fptr->file_elf == NULL) /* not an ELF file */
2792 symtab = &fptr->file_symtab;
2796 symtab = &fptr->file_dynsym;
2804 si.prs_lmid = fptr->file_lo == NULL ?
2805 LM_ID_BASE : fptr->file_lo->rl_lmident;
2860 sym.st_value += fptr->file_dyn_base;
2869 fptr->file_shstrs != NULL &&
2870 gelf_getshdr(elf_getscn(fptr->file_elf,
2873 shdr.sh_name < fptr->file_shstrsz)
2874 si.prs_name = fptr->file_shstrs + shdr.sh_name;