Lines Matching defs:fptr

173 	file_info_t *fptr;
178 if ((fptr = calloc(1, sizeof (file_info_t))) == NULL)
181 list_link(fptr, &P->file_head);
182 (void) strcpy(fptr->file_pname, mptr->map_pmap.pr_mapname);
183 mptr->map_file = fptr;
184 fptr->file_ref = 1;
185 fptr->file_fd = -1;
196 if ((fptr->file_saddrs = get_saddrs(P, mptr->map_pmap.pr_vaddr,
197 &fptr->file_nsaddrs)) == NULL)
198 return (fptr);
202 while (mp < P->mappings + P->map_count && i < fptr->file_nsaddrs) {
207 sstart = fptr->file_saddrs[i];
208 send = fptr->file_saddrs[i + 1];
222 mp->map_file = fptr;
223 fptr->file_ref++;
235 return (fptr);
242 file_info_free(struct ps_prochandle *P, file_info_t *fptr)
244 if (--fptr->file_ref == 0) {
245 list_unlink(fptr);
246 if (fptr->file_symtab.sym_elf) {
247 (void) elf_end(fptr->file_symtab.sym_elf);
248 free(fptr->file_symtab.sym_elfmem);
250 if (fptr->file_symtab.sym_byname)
251 free(fptr->file_symtab.sym_byname);
252 if (fptr->file_symtab.sym_byaddr)
253 free(fptr->file_symtab.sym_byaddr);
255 if (fptr->file_dynsym.sym_elf) {
256 (void) elf_end(fptr->file_dynsym.sym_elf);
257 free(fptr->file_dynsym.sym_elfmem);
259 if (fptr->file_dynsym.sym_byname)
260 free(fptr->file_dynsym.sym_byname);
261 if (fptr->file_dynsym.sym_byaddr)
262 free(fptr->file_dynsym.sym_byaddr);
264 if (fptr->file_lo)
265 free(fptr->file_lo);
266 if (fptr->file_lname)
267 free(fptr->file_lname);
268 if (fptr->file_rname)
269 free(fptr->file_rname);
270 if (fptr->file_elf)
271 (void) elf_end(fptr->file_elf);
272 if (fptr->file_elfmem != NULL)
273 free(fptr->file_elfmem);
274 if (fptr->file_fd >= 0)
275 (void) close(fptr->file_fd);
276 if (fptr->file_ctfp) {
277 ctf_close(fptr->file_ctfp);
278 free(fptr->file_ctf_buf);
280 if (fptr->file_saddrs)
281 free(fptr->file_saddrs);
282 free(fptr);
293 file_info_t *fptr;
295 if ((fptr = mptr->map_file) != NULL) {
296 if (fptr->file_map == mptr)
297 fptr->file_map = NULL;
298 file_info_free(P, fptr);
325 file_info_t *fptr;
334 if ((fptr = mptr->map_file) == NULL &&
335 (fptr = file_info_new(P, mptr)) == NULL) {
340 if ((fptr->file_lo == NULL) &&
341 (fptr->file_lo = malloc(sizeof (rd_loadobj_t))) == NULL) {
343 file_info_free(P, fptr);
347 fptr->file_map = mptr;
348 *fptr->file_lo = *lop;
350 fptr->file_lo->rl_plt_base = fptr->file_plt_base;
351 fptr->file_lo->rl_plt_size = fptr->file_plt_size;
353 if (fptr->file_lname) {
354 free(fptr->file_lname);
355 fptr->file_lname = NULL;
356 fptr->file_lbase = NULL;
358 if (fptr->file_rname) {
359 free(fptr->file_rname);
360 fptr->file_rname = NULL;
361 fptr->file_rbase = NULL;
365 if ((fptr->file_lname = strdup(buf)) != NULL)
366 fptr->file_lbase = basename(fptr->file_lname);
373 ((fptr->file_rname = strdup(buf)) != NULL))
374 fptr->file_rbase = basename(fptr->file_rname);
377 fptr->file_lname ? buf : "<NULL>", lop->rl_lmident);
384 file_info_t *fptr;
387 if ((fptr = mptr->map_file) == NULL &&
388 (fptr = file_info_new(P, mptr)) == NULL)
391 fptr->file_map = mptr;
393 if ((fptr->file_lo == NULL) &&
394 (fptr->file_lo = malloc(sizeof (rd_loadobj_t))) == NULL) {
395 file_info_free(P, fptr);
399 (void) memset(fptr->file_lo, 0, sizeof (rd_loadobj_t));
400 fptr->file_lo->rl_base = mptr->map_pmap.pr_vaddr;
401 fptr->file_lo->rl_bend =
404 fptr->file_lo->rl_plt_base = fptr->file_plt_base;
405 fptr->file_lo->rl_plt_size = fptr->file_plt_size;
407 if ((fptr->file_lname == NULL) &&
408 (fptr->file_lname = strdup(lname)) != NULL)
409 fptr->file_lbase = basename(fptr->file_lname);
412 ((fptr->file_rname = strdup(buf)) != NULL))
413 fptr->file_rbase = basename(fptr->file_rname);
580 file_info_t *fptr;
585 for (i = 0, fptr = list_next(&P->file_head); i < P->num_files;
586 i++, fptr = list_next(fptr)) {
587 Pbuild_file_symtab(P, fptr);
588 (void) Pbuild_file_ctf(P, fptr);
626 file_info_t *fptr = build_map_symtab(P, mptr);
636 if (fptr != NULL && fptr->file_lo != NULL &&
637 (fptr->file_lo->rl_data_base == NULL ||
639 fptr->file_lo->rl_data_base))
735 Pbuild_file_ctf(struct ps_prochandle *P, file_info_t *fptr)
741 if (fptr->file_ctfp != NULL)
742 return (fptr->file_ctfp);
744 Pbuild_file_symtab(P, fptr);
746 if (fptr->file_ctf_size == 0)
749 symp = fptr->file_ctf_dyn ? &fptr->file_dynsym : &fptr->file_symtab;
757 if (fptr->file_ctf_buf == NULL) {
758 fptr->file_ctf_buf = malloc(fptr->file_ctf_size);
759 if (fptr->file_ctf_buf == NULL) {
764 if (pread(fptr->file_fd, fptr->file_ctf_buf,
765 fptr->file_ctf_size, fptr->file_ctf_off) !=
766 fptr->file_ctf_size) {
767 free(fptr->file_ctf_buf);
768 fptr->file_ctf_buf = NULL;
777 ctdata.cts_data = fptr->file_ctf_buf;
778 ctdata.cts_size = fptr->file_ctf_size;
782 symtab.cts_name = fptr->file_ctf_dyn ? ".dynsym" : ".symtab";
790 strtab.cts_name = fptr->file_ctf_dyn ? ".dynstr" : ".strtab";
798 fptr->file_ctfp = ctf_bufopen(&ctdata, &symtab, &strtab, &err);
799 if (fptr->file_ctfp == NULL) {
801 free(fptr->file_ctf_buf);
802 fptr->file_ctf_buf = NULL;
807 (ulong_t)fptr->file_ctf_size, fptr->file_pname);
809 return (fptr->file_ctfp);
816 file_info_t *fptr;
822 (fptr = mptr->map_file) == NULL)
825 return (Pbuild_file_ctf(P, fptr));
832 file_info_t *fptr;
838 (fptr = mptr->map_file) == NULL)
841 return (Pbuild_file_ctf(P, fptr));
943 is_mapping_in_file(struct ps_prochandle *P, map_info_t *mptr, file_info_t *fptr)
946 rd_loadobj_t *lop = fptr->file_lo;
975 if (fptr->file_saddrs == NULL &&
976 (fptr->file_saddrs = get_saddrs(P,
977 fptr->file_map->map_pmap.pr_vaddr, &fptr->file_nsaddrs)) == NULL)
982 for (i = 0; i < fptr->file_nsaddrs; i += 2) {
984 sstart = fptr->file_saddrs[i];
985 send = fptr->file_saddrs[i + 1];
1000 file_info_t *fptr;
1003 if ((fptr = mptr->map_file) != NULL) {
1004 Pbuild_file_symtab(P, fptr);
1005 return (fptr);
1015 for (i = 0, fptr = list_next(&P->file_head); i < P->num_files;
1016 i++, fptr = list_next(fptr)) {
1017 if (strcmp(fptr->file_pname, pmap->pr_mapname) == 0 &&
1018 fptr->file_lo && is_mapping_in_file(P, mptr, fptr)) {
1019 mptr->map_file = fptr;
1020 fptr->file_ref++;
1021 Pbuild_file_symtab(P, fptr);
1022 return (fptr);
1033 if ((fptr = file_info_new(P, mptr)) == NULL)
1042 fptr->file_map = mptr;
1048 * fptr->file_map to be set in Pbuild_file_symtab. librtld_db may be
1053 if (fptr->file_map == NULL)
1054 fptr->file_map = mptr;
1056 Pbuild_file_symtab(P, fptr);
1058 return (fptr);
1205 file_differs(struct ps_prochandle *P, Elf *elf, file_info_t *fptr)
1215 if (fptr->file_map == NULL)
1265 addr = fptr->file_map->map_pmap.pr_vaddr;
1348 fake_elf(struct ps_prochandle *P, file_info_t *fptr)
1354 if (fptr->file_map == NULL)
1361 addr = fptr->file_map->map_pmap.pr_vaddr;
1371 elf = fake_elf32(P, fptr, addr, &ehdr, phnum, &phdr);
1381 elf = fake_elf64(P, fptr, addr, &ehdr, phnum, &phdr);
1591 build_fake_elf(struct ps_prochandle *P, file_info_t *fptr, GElf_Ehdr *ehdr,
1598 if ((elf = fake_elf(P, fptr)) == NULL ||
1618 Pbuild_file_symtab(struct ps_prochandle *P, file_info_t *fptr)
1637 if (fptr->file_init)
1644 fptr->file_init = 1;
1665 if (fptr->file_rname != NULL)
1666 name = fptr->file_rname;
1667 else if (fptr->file_lname != NULL)
1668 name = fptr->file_lname;
1670 name = fptr->file_pname;
1675 procfs_path, (int)P->pid, fptr->file_pname);
1687 fptr->file_pname);
1689 if ((elf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata)) ==
1693 } else if ((fptr->file_fd = open(objectfile, O_RDONLY)) < 0) {
1697 if ((elf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata)) ==
1701 } else if ((elf = elf_begin(fptr->file_fd, ELF_C_READ, NULL)) == NULL ||
1714 if ((elf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata)) ==
1718 } else if (file_differs(P, elf, fptr)) {
1728 fptr->file_pname,
1729 (ulong_t)fptr->file_map->map_pmap.pr_vaddr);
1731 if ((newelf = build_fake_elf(P, fptr, &ehdr, &nshdrs, &shdata))
1745 fptr->file_class = ehdr.e_ident[EI_CLASS];
1746 fptr->file_etype = ehdr.e_type;
1747 fptr->file_elf = elf;
1748 fptr->file_shstrs = shdata->d_buf;
1749 fptr->file_shstrsz = shdata->d_size;
1786 &fptr->file_symtab : &fptr->file_dynsym;
1815 if (fptr->file_dynsym.sym_data_aux == NULL) {
1818 fptr->file_dynsym.sym_data_aux = cp->c_data;
1819 fptr->file_dynsym.sym_symn_aux =
1821 fptr->file_dynsym.sym_symn +=
1822 fptr->file_dynsym.sym_symn_aux;
1823 fptr->file_dynsym.sym_hdr_aux = cp->c_shdr;
1855 optimize_symtab(&fptr->file_symtab);
1856 optimize_symtab(&fptr->file_dynsym);
1862 if (fptr->file_etype == ET_DYN) {
1863 fptr->file_dyn_base = fptr->file_map->map_pmap.pr_vaddr -
1864 fptr->file_map->map_pmap.pr_offset;
1866 objectfile, (long)fptr->file_dyn_base);
1873 fptr->file_ctf_off = ctf->c_shdr.sh_offset;
1874 fptr->file_ctf_size = ctf->c_shdr.sh_size;
1877 fptr->file_ctf_dyn = 1;
1880 if (fptr->file_lo == NULL)
1887 if (fptr->file_etype == ET_DYN &&
1888 fptr->file_lo->rl_base != fptr->file_dyn_base) {
1890 objectfile, (long)fptr->file_lo->rl_base);
1891 fptr->file_dyn_base = fptr->file_lo->rl_base;
1897 if (sym_by_name(&fptr->file_dynsym, "_PROCEDURE_LINKAGE_TABLE_", &s,
1899 fptr->file_plt_base = s.st_value + fptr->file_dyn_base;
1900 fptr->file_plt_size = (plt != NULL) ? plt->c_shdr.sh_size : 0;
1908 fptr->file_lo->rl_plt_base = fptr->file_plt_base;
1909 fptr->file_lo->rl_plt_size = fptr->file_plt_size;
1912 (void *)fptr->file_plt_base, (ulong_t)fptr->file_plt_size);
1919 uintptr_t dynaddr = dyn->c_shdr.sh_addr + fptr->file_dyn_base;
1931 fptr->file_jmp_rel =
1932 d.d_un.d_ptr + fptr->file_dyn_base;
1958 (void *)dynaddr, (ulong_t)ndyn, (void *)fptr->file_jmp_rel);
1970 fptr->file_elf = NULL;
1971 if (fptr->file_elfmem != NULL) {
1972 free(fptr->file_elfmem);
1973 fptr->file_elfmem = NULL;
1975 (void) close(fptr->file_fd);
1976 fptr->file_fd = -1;
2019 file_info_t *fptr;
2026 if ((fptr = mptr->map_file) != NULL &&
2027 fptr->file_lo != NULL) {
2028 base = fptr->file_lo->rl_base;
2434 file_info_t *fptr;
2439 (fptr = build_map_symtab(P, mptr)) == NULL || /* no mapped file */
2440 fptr->file_elf == NULL) /* not an ELF file */
2447 addr -= fptr->file_dyn_base;
2452 if ((sym1p = sym_by_addr(&fptr->file_symtab, addr, &sym1, &i1)) != NULL)
2453 name1 = fptr->file_symtab.sym_strs + sym1.st_name;
2454 if ((sym2p = sym_by_addr(&fptr->file_dynsym, addr, &sym2, &i2)) != NULL)
2455 name2 = fptr->file_dynsym.sym_strs + sym2.st_name;
2469 if (lmresolve && (fptr->file_rname != NULL))
2470 sip->prs_object = fptr->file_rbase;
2472 sip->prs_object = fptr->file_lbase;
2475 sip->prs_lmid = (fptr->file_lo == NULL) ? LM_ID_BASE :
2476 fptr->file_lo->rl_lmident;
2480 symbolp->st_value += fptr->file_dyn_base;
2522 file_info_t *fptr;
2534 fptr = list_next(&P->file_head);
2538 (fptr = build_map_symtab(P, mptr)) == NULL)
2549 for (; cnt > 0; cnt--, fptr = list_next(fptr)) {
2550 Pbuild_file_symtab(P, fptr);
2552 if (fptr->file_elf == NULL)
2555 if (lmid != PR_LMID_EVERY && fptr->file_lo != NULL &&
2556 lmid != fptr->file_lo->rl_lmident)
2559 if (fptr->file_symtab.sym_data_pri != NULL &&
2560 sym_by_name(&fptr->file_symtab, sname, symp, &id)) {
2566 sip->prs_lmid = fptr->file_lo == NULL ?
2567 LM_ID_BASE : fptr->file_lo->rl_lmident;
2569 } else if (fptr->file_dynsym.sym_data_pri != NULL &&
2570 sym_by_name(&fptr->file_dynsym, sname, symp, &id)) {
2576 sip->prs_lmid = fptr->file_lo == NULL ?
2577 LM_ID_BASE : fptr->file_lo->rl_lmident;
2584 symp->st_value += fptr->file_dyn_base;
2625 file_info_t *fptr;
2634 if ((fptr = mptr->map_file) == NULL)
2636 else if (lmresolve && (fptr->file_rname != NULL))
2637 object_name = fptr->file_rname;
2639 object_name = fptr->file_lname;
2666 file_info_t *fptr;
2673 for (cnt = P->num_files, fptr = list_next(&P->file_head);
2674 cnt; cnt--, fptr = list_next(fptr)) {
2677 if (lmresolve && (fptr->file_rname != NULL))
2678 lname = fptr->file_rname;
2679 else if (fptr->file_lname != NULL)
2680 lname = fptr->file_lname;
2684 if ((mptr = fptr->file_map) == NULL)
2713 file_info_t *fptr;
2722 if (((fptr = mptr->map_file) == NULL) ||
2723 (fptr->file_lname == NULL))
2725 (void) strlcpy(buffer, fptr->file_lname, bufsize);
2771 file_info_t *fptr;
2777 (fptr = mptr->map_file) != NULL && fptr->file_lo != NULL) {
2778 *lmidp = fptr->file_lo->rl_lmident;
2801 file_info_t *fptr;
2813 if ((fptr = build_map_symtab(P, mptr)) == NULL || /* no mapped file */
2814 fptr->file_elf == NULL) /* not an ELF file */
2822 symtab = &fptr->file_symtab;
2826 symtab = &fptr->file_dynsym;
2834 si.prs_lmid = fptr->file_lo == NULL ?
2835 LM_ID_BASE : fptr->file_lo->rl_lmident;
2890 sym.st_value += fptr->file_dyn_base;
2899 fptr->file_shstrs != NULL &&
2900 gelf_getshdr(elf_getscn(fptr->file_elf,
2903 shdr.sh_name < fptr->file_shstrsz)
2904 si.prs_name = fptr->file_shstrs + shdr.sh_name;