Lines Matching refs:dmp
68 dt_module_symhash_insert(dt_module_t *dmp, const char *name, uint_t id) in dt_module_symhash_insert() argument
70 dt_sym_t *dsp = &dmp->dm_symchains[dmp->dm_symfree]; in dt_module_symhash_insert()
73 assert(dmp->dm_symfree < dmp->dm_nsymelems + 1); in dt_module_symhash_insert()
76 h = dt_strtab_hash(name, NULL) % dmp->dm_nsymbuckets; in dt_module_symhash_insert()
77 dsp->ds_next = dmp->dm_symbuckets[h]; in dt_module_symhash_insert()
78 dmp->dm_symbuckets[h] = dmp->dm_symfree++; in dt_module_symhash_insert()
82 dt_module_syminit32(dt_module_t *dmp) in dt_module_syminit32() argument
88 Elf32_Sym *sym = dmp->dm_symtab.cts_data; in dt_module_syminit32()
89 const char *base = dmp->dm_strtab.cts_data; in dt_module_syminit32()
90 size_t ss_size = dmp->dm_strtab.cts_size; in dt_module_syminit32()
91 uint_t i, n = dmp->dm_nsymelems; in dt_module_syminit32()
98 gelf_getehdr(dmp->dm_elf, &ehdr); in dt_module_syminit32()
116 sym->st_value += (Elf_Addr) dmp->dm_reloc_offset; in dt_module_syminit32()
120 dmp->dm_sec_offsets[sym->st_shndx]; in dt_module_syminit32()
124 dt_module_symhash_insert(dmp, name, i); in dt_module_syminit32()
131 dt_module_syminit64(dt_module_t *dmp) in dt_module_syminit64() argument
137 Elf64_Sym *sym = dmp->dm_symtab.cts_data; in dt_module_syminit64()
138 const char *base = dmp->dm_strtab.cts_data; in dt_module_syminit64()
139 size_t ss_size = dmp->dm_strtab.cts_size; in dt_module_syminit64()
140 uint_t i, n = dmp->dm_nsymelems; in dt_module_syminit64()
147 gelf_getehdr(dmp->dm_elf, &ehdr); in dt_module_syminit64()
164 sym->st_value += (Elf_Addr) dmp->dm_reloc_offset; in dt_module_syminit64()
168 dmp->dm_sec_offsets[sym->st_shndx]; in dt_module_syminit64()
172 dt_module_symhash_insert(dmp, name, i); in dt_module_syminit64()
237 dt_module_symsort32(dt_module_t *dmp) in dt_module_symsort32() argument
239 Elf32_Sym *symtab = (Elf32_Sym *)dmp->dm_symtab.cts_data; in dt_module_symsort32()
240 Elf32_Sym **sympp = (Elf32_Sym **)dmp->dm_asmap; in dt_module_symsort32()
241 const dt_sym_t *dsp = dmp->dm_symchains + 1; in dt_module_symsort32()
242 uint_t i, n = dmp->dm_symfree; in dt_module_symsort32()
250 dmp->dm_aslen = (uint_t)(sympp - (Elf32_Sym **)dmp->dm_asmap); in dt_module_symsort32()
251 assert(dmp->dm_aslen <= dmp->dm_asrsv); in dt_module_symsort32()
253 dt_module_strtab = dmp->dm_strtab.cts_data; in dt_module_symsort32()
254 qsort(dmp->dm_asmap, dmp->dm_aslen, in dt_module_symsort32()
260 dt_module_symsort64(dt_module_t *dmp) in dt_module_symsort64() argument
262 Elf64_Sym *symtab = (Elf64_Sym *)dmp->dm_symtab.cts_data; in dt_module_symsort64()
263 Elf64_Sym **sympp = (Elf64_Sym **)dmp->dm_asmap; in dt_module_symsort64()
264 const dt_sym_t *dsp = dmp->dm_symchains + 1; in dt_module_symsort64()
265 uint_t i, n = dmp->dm_symfree; in dt_module_symsort64()
273 dmp->dm_aslen = (uint_t)(sympp - (Elf64_Sym **)dmp->dm_asmap); in dt_module_symsort64()
274 assert(dmp->dm_aslen <= dmp->dm_asrsv); in dt_module_symsort64()
276 dt_module_strtab = dmp->dm_strtab.cts_data; in dt_module_symsort64()
277 qsort(dmp->dm_asmap, dmp->dm_aslen, in dt_module_symsort64()
307 dt_module_symname32(dt_module_t *dmp, const char *name, in dt_module_symname32() argument
310 const Elf32_Sym *symtab = dmp->dm_symtab.cts_data; in dt_module_symname32()
311 const char *strtab = dmp->dm_strtab.cts_data; in dt_module_symname32()
317 if (dmp->dm_nsymelems == 0) in dt_module_symname32()
320 h = dt_strtab_hash(name, NULL) % dmp->dm_nsymbuckets; in dt_module_symname32()
322 for (i = dmp->dm_symbuckets[h]; i != 0; i = dsp->ds_next) { in dt_module_symname32()
323 dsp = &dmp->dm_symchains[i]; in dt_module_symname32()
337 dt_module_symname64(dt_module_t *dmp, const char *name, in dt_module_symname64() argument
340 const Elf64_Sym *symtab = dmp->dm_symtab.cts_data; in dt_module_symname64()
341 const char *strtab = dmp->dm_strtab.cts_data; in dt_module_symname64()
347 if (dmp->dm_nsymelems == 0) in dt_module_symname64()
350 h = dt_strtab_hash(name, NULL) % dmp->dm_nsymbuckets; in dt_module_symname64()
352 for (i = dmp->dm_symbuckets[h]; i != 0; i = dsp->ds_next) { in dt_module_symname64()
353 dsp = &dmp->dm_symchains[i]; in dt_module_symname64()
367 dt_module_symaddr32(dt_module_t *dmp, GElf_Addr addr, in dt_module_symaddr32() argument
370 const Elf32_Sym **asmap = (const Elf32_Sym **)dmp->dm_asmap; in dt_module_symaddr32()
371 const Elf32_Sym *symtab = dmp->dm_symtab.cts_data; in dt_module_symaddr32()
374 uint_t i, mid, lo = 0, hi = dmp->dm_aslen - 1; in dt_module_symaddr32()
377 if (dmp->dm_aslen == 0) in dt_module_symaddr32()
409 dt_module_symaddr64(dt_module_t *dmp, GElf_Addr addr, in dt_module_symaddr64() argument
412 const Elf64_Sym **asmap = (const Elf64_Sym **)dmp->dm_asmap; in dt_module_symaddr64()
413 const Elf64_Sym *symtab = dmp->dm_symtab.cts_data; in dt_module_symaddr64()
416 uint_t i, mid, lo = 0, hi = dmp->dm_aslen - 1; in dt_module_symaddr64()
419 if (dmp->dm_aslen == 0) in dt_module_symaddr64()
471 dt_module_t *dmp; in dt_module_create() local
473 for (dmp = dtp->dt_mods[h]; dmp != NULL; dmp = dmp->dm_next) { in dt_module_create()
474 if (strcmp(dmp->dm_name, name) == 0) in dt_module_create()
475 return (dmp); in dt_module_create()
478 if ((dmp = malloc(sizeof (dt_module_t))) == NULL) in dt_module_create()
481 bzero(dmp, sizeof (dt_module_t)); in dt_module_create()
482 (void) strlcpy(dmp->dm_name, name, sizeof (dmp->dm_name)); in dt_module_create()
483 dt_list_append(&dtp->dt_modlist, dmp); in dt_module_create()
484 dmp->dm_next = dtp->dt_mods[h]; in dt_module_create()
485 dtp->dt_mods[h] = dmp; in dt_module_create()
489 dmp->dm_ops = &dt_modops_64; in dt_module_create()
491 dmp->dm_ops = &dt_modops_32; in dt_module_create()
503 if (strncmp(dmp->dm_name, "pid", 3) == 0) { in dt_module_create()
505 if (dmp->dm_name[3] == '\0') { in dt_module_create()
508 dmp->dm_pid = idp->di_id; in dt_module_create()
510 pid = strtol(dmp->dm_name + 3, &eptr, 10); in dt_module_create()
512 dmp->dm_pid = (pid_t)pid; in dt_module_create()
515 "module: %s\n", dmp->dm_name); in dt_module_create()
519 return (dmp); in dt_module_create()
526 dt_module_t *dmp; in dt_module_lookup_by_name() local
528 for (dmp = dtp->dt_mods[h]; dmp != NULL; dmp = dmp->dm_next) { in dt_module_lookup_by_name()
529 if (strcmp(dmp->dm_name, name) == 0) in dt_module_lookup_by_name()
530 return (dmp); in dt_module_lookup_by_name()
560 dt_module_load_sect(dtrace_hdl_t *dtp, dt_module_t *dmp, ctf_sect_t *ctsp) in dt_module_load_sect() argument
568 if (elf_getshdrstrndx(dmp->dm_elf, &shstrs) == -1) in dt_module_load_sect()
571 for (sp = NULL; (sp = elf_nextscn(dmp->dm_elf, sp)) != NULL; ) { in dt_module_load_sect()
573 (s = elf_strptr(dmp->dm_elf, shstrs, sh.sh_name)) == NULL) in dt_module_load_sect()
599 dmp->dm_name, ctsp->cts_name, (ulong_t)ctsp->cts_size); in dt_module_load_sect()
688 dt_module_load_proc(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_load_proc() argument
697 p = dt_proc_grab(dtp, dmp->dm_pid, 0, PGRAB_RDONLY | PGRAB_FORCE); in dt_module_load_proc()
699 dt_dprintf("failed to grab pid: %d\n", (int)dmp->dm_pid); in dt_module_load_proc()
706 arg.dpa_dmp = dmp; in dt_module_load_proc()
722 dmp->dm_libctfp = calloc(arg.dpa_count, sizeof (ctf_file_t *)); in dt_module_load_proc()
723 if (dmp->dm_libctfp == NULL) { in dt_module_load_proc()
729 dmp->dm_libctfn = calloc(arg.dpa_count, sizeof (char *)); in dt_module_load_proc()
730 if (dmp->dm_libctfn == NULL) { in dt_module_load_proc()
731 free(dmp->dm_libctfp); in dt_module_load_proc()
737 dmp->dm_nctflibs = arg.dpa_count; in dt_module_load_proc()
742 dt_module_unload(dtp, dmp); in dt_module_load_proc()
746 assert(arg.dpa_count == dmp->dm_nctflibs); in dt_module_load_proc()
748 (int)dmp->dm_pid); in dt_module_load_proc()
752 dmp->dm_flags |= DT_DM_LOADED; in dt_module_load_proc()
758 dt_module_load(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_load() argument
760 if (dmp->dm_flags & DT_DM_LOADED) in dt_module_load()
763 if (dmp->dm_pid != 0) in dt_module_load()
764 return (dt_module_load_proc(dtp, dmp)); in dt_module_load()
766 dmp->dm_ctdata.cts_name = ".SUNW_ctf"; in dt_module_load()
767 dmp->dm_ctdata.cts_type = SHT_PROGBITS; in dt_module_load()
768 dmp->dm_ctdata.cts_flags = 0; in dt_module_load()
769 dmp->dm_ctdata.cts_data = NULL; in dt_module_load()
770 dmp->dm_ctdata.cts_size = 0; in dt_module_load()
771 dmp->dm_ctdata.cts_entsize = 0; in dt_module_load()
772 dmp->dm_ctdata.cts_offset = 0; in dt_module_load()
774 dmp->dm_symtab.cts_name = ".symtab"; in dt_module_load()
775 dmp->dm_symtab.cts_type = SHT_SYMTAB; in dt_module_load()
776 dmp->dm_symtab.cts_flags = 0; in dt_module_load()
777 dmp->dm_symtab.cts_data = NULL; in dt_module_load()
778 dmp->dm_symtab.cts_size = 0; in dt_module_load()
779 dmp->dm_symtab.cts_entsize = dmp->dm_ops == &dt_modops_64 ? in dt_module_load()
781 dmp->dm_symtab.cts_offset = 0; in dt_module_load()
783 dmp->dm_strtab.cts_name = ".strtab"; in dt_module_load()
784 dmp->dm_strtab.cts_type = SHT_STRTAB; in dt_module_load()
785 dmp->dm_strtab.cts_flags = 0; in dt_module_load()
786 dmp->dm_strtab.cts_data = NULL; in dt_module_load()
787 dmp->dm_strtab.cts_size = 0; in dt_module_load()
788 dmp->dm_strtab.cts_entsize = 0; in dt_module_load()
789 dmp->dm_strtab.cts_offset = 0; in dt_module_load()
797 if (dt_module_load_sect(dtp, dmp, &dmp->dm_ctdata) == -1 || in dt_module_load()
798 dt_module_load_sect(dtp, dmp, &dmp->dm_symtab) == -1 || in dt_module_load()
799 dt_module_load_sect(dtp, dmp, &dmp->dm_strtab) == -1) { in dt_module_load()
800 dt_module_unload(dtp, dmp); in dt_module_load()
810 dmp->dm_nsymelems = in dt_module_load()
811 dmp->dm_symtab.cts_size / dmp->dm_symtab.cts_entsize; in dt_module_load()
813 dmp->dm_nsymbuckets = _dtrace_strbuckets; in dt_module_load()
814 dmp->dm_symfree = 1; /* first free element is index 1 */ in dt_module_load()
816 dmp->dm_symbuckets = calloc(dmp->dm_nsymbuckets, sizeof (uint_t)); in dt_module_load()
817 dmp->dm_symchains = calloc(dmp->dm_nsymelems + 1, sizeof (dt_sym_t)); in dt_module_load()
819 if (dmp->dm_symbuckets == NULL || dmp->dm_symchains == NULL) { in dt_module_load()
820 dt_module_unload(dtp, dmp); in dt_module_load()
829 dmp->dm_asrsv = dmp->dm_ops->do_syminit(dmp); in dt_module_load()
832 dmp->dm_name, dmp->dm_symtab.cts_name, dmp->dm_symfree - 1); in dt_module_load()
834 if ((dmp->dm_asmap = malloc(sizeof (void *) * dmp->dm_asrsv)) == NULL) { in dt_module_load()
835 dt_module_unload(dtp, dmp); in dt_module_load()
839 dmp->dm_ops->do_symsort(dmp); in dt_module_load()
842 dmp->dm_name, dmp->dm_symtab.cts_name, dmp->dm_aslen); in dt_module_load()
844 dmp->dm_flags |= DT_DM_LOADED; in dt_module_load()
849 dt_module_hasctf(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_hasctf() argument
851 if (dmp->dm_pid != 0 && dmp->dm_nctflibs > 0) in dt_module_hasctf()
853 return (dt_module_getctf(dtp, dmp) != NULL); in dt_module_hasctf()
857 dt_module_getctf(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_getctf() argument
864 if (dmp->dm_ctfp != NULL || dt_module_load(dtp, dmp) != 0) in dt_module_getctf()
865 return (dmp->dm_ctfp); in dt_module_getctf()
867 if (dmp->dm_ops == &dt_modops_64) in dt_module_getctf()
883 if (dmp->dm_ctdata.cts_size == 0) { in dt_module_getctf()
888 dmp->dm_ctfp = ctf_bufopen(&dmp->dm_ctdata, in dt_module_getctf()
889 &dmp->dm_symtab, &dmp->dm_strtab, &dtp->dt_ctferr); in dt_module_getctf()
891 if (dmp->dm_ctfp == NULL) { in dt_module_getctf()
896 (void) ctf_setmodel(dmp->dm_ctfp, model); in dt_module_getctf()
897 ctf_setspecific(dmp->dm_ctfp, dmp); in dt_module_getctf()
899 if ((parent = ctf_parent_name(dmp->dm_ctfp)) != NULL) { in dt_module_getctf()
907 if (ctf_import(dmp->dm_ctfp, pfp) == CTF_ERR) { in dt_module_getctf()
908 dtp->dt_ctferr = ctf_errno(dmp->dm_ctfp); in dt_module_getctf()
915 dmp->dm_name, (void *)dmp->dm_ctfp); in dt_module_getctf()
917 return (dmp->dm_ctfp); in dt_module_getctf()
920 ctf_close(dmp->dm_ctfp); in dt_module_getctf()
921 dmp->dm_ctfp = NULL; in dt_module_getctf()
927 dt_module_unload(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_unload() argument
931 ctf_close(dmp->dm_ctfp); in dt_module_unload()
932 dmp->dm_ctfp = NULL; in dt_module_unload()
935 if (dmp->dm_ctdata.cts_data != NULL) { in dt_module_unload()
936 free(dmp->dm_ctdata.cts_data); in dt_module_unload()
938 if (dmp->dm_symtab.cts_data != NULL) { in dt_module_unload()
939 free(dmp->dm_symtab.cts_data); in dt_module_unload()
941 if (dmp->dm_strtab.cts_data != NULL) { in dt_module_unload()
942 free(dmp->dm_strtab.cts_data); in dt_module_unload()
946 if (dmp->dm_libctfp != NULL) { in dt_module_unload()
947 for (i = 0; i < dmp->dm_nctflibs; i++) { in dt_module_unload()
948 ctf_close(dmp->dm_libctfp[i]); in dt_module_unload()
949 free(dmp->dm_libctfn[i]); in dt_module_unload()
951 free(dmp->dm_libctfp); in dt_module_unload()
952 free(dmp->dm_libctfn); in dt_module_unload()
953 dmp->dm_libctfp = NULL; in dt_module_unload()
954 dmp->dm_nctflibs = 0; in dt_module_unload()
957 bzero(&dmp->dm_ctdata, sizeof (ctf_sect_t)); in dt_module_unload()
958 bzero(&dmp->dm_symtab, sizeof (ctf_sect_t)); in dt_module_unload()
959 bzero(&dmp->dm_strtab, sizeof (ctf_sect_t)); in dt_module_unload()
961 if (dmp->dm_symbuckets != NULL) { in dt_module_unload()
962 free(dmp->dm_symbuckets); in dt_module_unload()
963 dmp->dm_symbuckets = NULL; in dt_module_unload()
966 if (dmp->dm_symchains != NULL) { in dt_module_unload()
967 free(dmp->dm_symchains); in dt_module_unload()
968 dmp->dm_symchains = NULL; in dt_module_unload()
971 if (dmp->dm_asmap != NULL) { in dt_module_unload()
972 free(dmp->dm_asmap); in dt_module_unload()
973 dmp->dm_asmap = NULL; in dt_module_unload()
976 if (dmp->dm_sec_offsets != NULL) { in dt_module_unload()
977 free(dmp->dm_sec_offsets); in dt_module_unload()
978 dmp->dm_sec_offsets = NULL; in dt_module_unload()
981 dmp->dm_symfree = 0; in dt_module_unload()
982 dmp->dm_nsymbuckets = 0; in dt_module_unload()
983 dmp->dm_nsymelems = 0; in dt_module_unload()
984 dmp->dm_asrsv = 0; in dt_module_unload()
985 dmp->dm_aslen = 0; in dt_module_unload()
987 dmp->dm_text_va = 0; in dt_module_unload()
988 dmp->dm_text_size = 0; in dt_module_unload()
989 dmp->dm_data_va = 0; in dt_module_unload()
990 dmp->dm_data_size = 0; in dt_module_unload()
991 dmp->dm_bss_va = 0; in dt_module_unload()
992 dmp->dm_bss_size = 0; in dt_module_unload()
994 if (dmp->dm_extern != NULL) { in dt_module_unload()
995 dt_idhash_destroy(dmp->dm_extern); in dt_module_unload()
996 dmp->dm_extern = NULL; in dt_module_unload()
999 (void) elf_end(dmp->dm_elf); in dt_module_unload()
1000 dmp->dm_elf = NULL; in dt_module_unload()
1002 dmp->dm_pid = 0; in dt_module_unload()
1004 dmp->dm_flags &= ~DT_DM_LOADED; in dt_module_unload()
1008 dt_module_destroy(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_destroy() argument
1010 uint_t h = dt_strtab_hash(dmp->dm_name, NULL) % dtp->dt_modbuckets; in dt_module_destroy()
1013 dt_list_delete(&dtp->dt_modlist, dmp); in dt_module_destroy()
1022 while (*dmpp != dmp) { in dt_module_destroy()
1027 *dmpp = dmp->dm_next; in dt_module_destroy()
1029 dt_module_unload(dtp, dmp); in dt_module_destroy()
1030 free(dmp); in dt_module_destroy()
1040 dt_module_extern(dtrace_hdl_t *dtp, dt_module_t *dmp, in dt_module_extern() argument
1047 if (dmp->dm_extern == NULL && (dmp->dm_extern = dt_idhash_create( in dt_module_extern()
1048 "extern", NULL, dmp->dm_nsymelems, UINT_MAX)) == NULL) { in dt_module_extern()
1053 if (dt_idhash_nextid(dmp->dm_extern, &id) == -1) { in dt_module_extern()
1063 idp = dt_idhash_insert(dmp->dm_extern, name, DT_IDENT_SYMBOL, 0, id, in dt_module_extern()
1072 sip->dts_object = dmp->dm_name; in dt_module_extern()
1084 dt_module_modelname(dt_module_t *dmp) in dt_module_modelname() argument
1086 if (dmp->dm_ops == &dt_modops_64) in dt_module_modelname()
1094 dt_module_getlibid(dtrace_hdl_t *dtp, dt_module_t *dmp, const ctf_file_t *fp) in dt_module_getlibid() argument
1098 for (i = 0; i < dmp->dm_nctflibs; i++) { in dt_module_getlibid()
1099 if (dmp->dm_libctfp[i] == fp) in dt_module_getlibid()
1108 dt_module_getctflib(dtrace_hdl_t *dtp, dt_module_t *dmp, const char *name) in dt_module_getctflib() argument
1112 for (i = 0; i < dmp->dm_nctflibs; i++) { in dt_module_getctflib()
1113 if (strcmp(dmp->dm_libctfn[i], name) == 0) in dt_module_getctflib()
1114 return (dmp->dm_libctfp[i]); in dt_module_getctflib()
1137 dt_module_t *dmp; in dt_module_update() local
1154 (dmp = dt_module_create(dtp, name)) == NULL) { in dt_module_update()
1160 (void) strlcpy(dmp->dm_file, fname, sizeof(dmp->dm_file)); in dt_module_update()
1161 dmp->dm_modid = k_stat->id; in dt_module_update()
1169 dmp->dm_elf = elf_begin(fd, ELF_C_READ, NULL); in dt_module_update()
1170 err = elf_cntl(dmp->dm_elf, ELF_C_FDREAD); in dt_module_update()
1173 if (dmp->dm_elf == NULL || err == -1 || in dt_module_update()
1174 elf_getshdrstrndx(dmp->dm_elf, &shstrs) == -1) { in dt_module_update()
1177 dt_module_destroy(dtp, dmp); in dt_module_update()
1181 switch (gelf_getclass(dmp->dm_elf)) { in dt_module_update()
1183 dmp->dm_ops = &dt_modops_32; in dt_module_update()
1187 dmp->dm_ops = &dt_modops_64; in dt_module_update()
1192 dt_module_destroy(dtp, dmp); in dt_module_update()
1196 gelf_getehdr(dmp->dm_elf, &ehdr); in dt_module_update()
1199 dmp->dm_sec_offsets = in dt_module_update()
1200 malloc(ehdr.e_shnum * sizeof(*dmp->dm_sec_offsets)); in dt_module_update()
1201 if (dmp->dm_sec_offsets == NULL) { in dt_module_update()
1203 dt_module_destroy(dtp, dmp); in dt_module_update()
1211 for (sp = NULL; (sp = elf_nextscn(dmp->dm_elf, sp)) != NULL; ) { in dt_module_update()
1213 (s = elf_strptr(dmp->dm_elf, shstrs, sh.sh_name)) == NULL) in dt_module_update()
1223 dmp->dm_sec_offsets[elf_ndxscn(sp)] = sh.sh_addr; in dt_module_update()
1227 dmp->dm_text_size = sh.sh_size; in dt_module_update()
1228 dmp->dm_text_va = sh.sh_addr; in dt_module_update()
1230 dmp->dm_data_size = sh.sh_size; in dt_module_update()
1231 dmp->dm_data_va = sh.sh_addr; in dt_module_update()
1233 dmp->dm_bss_size = sh.sh_size; in dt_module_update()
1234 dmp->dm_bss_va = sh.sh_addr; in dt_module_update()
1237 bcopy(dp->d_buf, &dmp->dm_info, in dt_module_update()
1238 MIN(sh.sh_size, sizeof (dmp->dm_info))); in dt_module_update()
1242 dmp->dm_flags |= DT_DM_KERNEL; in dt_module_update()
1249 dmp->dm_text_size = dmp->dm_data_va - dmp->dm_text_va; in dt_module_update()
1257 for (i = 0; gelf_getphdr(dmp->dm_elf, i, &ph) != NULL; i++) { in dt_module_update()
1259 dmp->dm_reloc_offset = in dt_module_update()
1266 if (dmp->dm_info.objfs_info_primary) in dt_module_update()
1267 dmp->dm_flags |= DT_DM_PRIMARY; in dt_module_update()
1283 dt_module_destroy(dtp, dmp); in dt_module_update()
1290 dkmp->dkm_module = dmp; in dt_module_update()
1295 bits, dmp->dm_name, dmp->dm_file, dmp->dm_modid); in dt_module_update()
1305 dt_module_t *dmp; in dtrace_update() local
1311 for (dmp = dt_list_next(&dtp->dt_modlist); in dtrace_update()
1312 dmp != NULL; dmp = dt_list_next(dmp)) in dtrace_update()
1313 dt_module_unload(dtp, dmp); in dtrace_update()
1393 dt_module_t *dmp; in dt_module_from_object() local
1397 dmp = dtp->dt_exec; in dt_module_from_object()
1400 dmp = dtp->dt_rtld; in dt_module_from_object()
1403 dmp = dtp->dt_cdefs; in dt_module_from_object()
1406 dmp = dtp->dt_ddefs; in dt_module_from_object()
1409 dmp = dt_module_create(dtp, object); in dt_module_from_object()
1413 if (dmp == NULL) in dt_module_from_object()
1416 return (dmp); in dt_module_from_object()
1427 dt_module_t *dmp; in dtrace_lookup_by_name() local
1438 if ((dmp = dt_module_from_object(dtp, object)) == NULL) in dtrace_lookup_by_name()
1441 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_name()
1451 dmp = dt_list_next(&dtp->dt_modlist); in dtrace_lookup_by_name()
1458 for (; n > 0; n--, dmp = dt_list_next(dmp)) { in dtrace_lookup_by_name()
1459 if ((dmp->dm_flags & mask) != bits) in dtrace_lookup_by_name()
1462 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_name()
1465 if (dmp->dm_ops->do_symname(dmp, name, symp, &id) != NULL) { in dtrace_lookup_by_name()
1467 sip->dts_object = dmp->dm_name; in dtrace_lookup_by_name()
1469 dmp->dm_strtab.cts_data + symp->st_name; in dtrace_lookup_by_name()
1475 if (dmp->dm_extern != NULL && in dtrace_lookup_by_name()
1476 (idp = dt_idhash_lookup(dmp->dm_extern, name)) != NULL) { in dtrace_lookup_by_name()
1489 sip->dts_object = dmp->dm_name; in dtrace_lookup_by_name()
1509 dt_module_t *dmp; in dtrace_lookup_by_addr() local
1516 for (dmp = dt_list_next(&dtp->dt_modlist); dmp != NULL; in dtrace_lookup_by_addr()
1517 dmp = dt_list_next(dmp)) { in dtrace_lookup_by_addr()
1518 if (addr - dmp->dm_text_va < dmp->dm_text_size || in dtrace_lookup_by_addr()
1519 addr - dmp->dm_data_va < dmp->dm_data_size || in dtrace_lookup_by_addr()
1520 addr - dmp->dm_bss_va < dmp->dm_bss_size) in dtrace_lookup_by_addr()
1524 if (dmp == NULL) in dtrace_lookup_by_addr()
1527 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_addr()
1531 if (dmp->dm_ops->do_symaddr(dmp, addr, symp, &id) == NULL) in dtrace_lookup_by_addr()
1536 sip->dts_object = dmp->dm_name; in dtrace_lookup_by_addr()
1540 dmp->dm_strtab.cts_data + symp->st_name; in dtrace_lookup_by_addr()
1556 dt_module_t *dmp; in dtrace_lookup_by_type() local
1570 if ((dmp = dt_module_from_object(dtp, object)) == NULL) in dtrace_lookup_by_type()
1573 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_type()
1583 dmp = dt_list_next(&dtp->dt_modlist); in dtrace_lookup_by_type()
1591 for (; n > 0; n--, dmp = dt_list_next(dmp)) { in dtrace_lookup_by_type()
1592 if ((dmp->dm_flags & mask) != bits) in dtrace_lookup_by_type()
1600 if (dt_module_hasctf(dtp, dmp) == 0) { in dtrace_lookup_by_type()
1612 if (dmp->dm_pid == 0) { in dtrace_lookup_by_type()
1613 id = ctf_lookup_by_name(dmp->dm_ctfp, name); in dtrace_lookup_by_type()
1614 fp = dmp->dm_ctfp; in dtrace_lookup_by_type()
1624 fp = dt_module_getctflib(dtp, dmp, buf); in dtrace_lookup_by_type()
1630 for (i = 0; i < dmp->dm_nctflibs; i++) { in dtrace_lookup_by_type()
1631 fp = dmp->dm_libctfp[i]; in dtrace_lookup_by_type()
1639 tip->dtt_object = dmp->dm_name; in dtrace_lookup_by_type()
1660 dt_module_t *dmp; in dtrace_symbol_type() local
1667 if ((dmp = dt_module_lookup_by_name(dtp, sip->dts_object)) == NULL) in dtrace_symbol_type()
1670 if (symp->st_shndx == SHN_UNDEF && dmp->dm_extern != NULL) { in dtrace_symbol_type()
1672 dt_idhash_lookup(dmp->dm_extern, sip->dts_name); in dtrace_symbol_type()
1681 if (dt_module_getctf(dtp, dmp) == NULL) in dtrace_symbol_type()
1684 tip->dtt_ctfp = dmp->dm_ctfp; in dtrace_symbol_type()
1685 tip->dtt_type = ctf_lookup_by_symbol(dmp->dm_ctfp, sip->dts_id); in dtrace_symbol_type()
1697 tip->dtt_object = dmp->dm_name; in dtrace_symbol_type()
1702 dt_module_info(const dt_module_t *dmp, dtrace_objinfo_t *dto) in dt_module_info() argument
1704 dto->dto_name = dmp->dm_name; in dt_module_info()
1705 dto->dto_file = dmp->dm_file; in dt_module_info()
1706 dto->dto_id = dmp->dm_modid; in dt_module_info()
1709 if (dmp->dm_flags & DT_DM_KERNEL) in dt_module_info()
1711 if (dmp->dm_flags & DT_DM_PRIMARY) in dt_module_info()
1714 dto->dto_text_va = dmp->dm_text_va; in dt_module_info()
1715 dto->dto_text_size = dmp->dm_text_size; in dt_module_info()
1716 dto->dto_data_va = dmp->dm_data_va; in dt_module_info()
1717 dto->dto_data_size = dmp->dm_data_size; in dt_module_info()
1718 dto->dto_bss_va = dmp->dm_bss_va; in dt_module_info()
1719 dto->dto_bss_size = dmp->dm_bss_size; in dt_module_info()
1727 const dt_module_t *dmp = dt_list_next(&dtp->dt_modlist); in dtrace_object_iter() local
1731 for (; dmp != NULL; dmp = dt_list_next(dmp)) { in dtrace_object_iter()
1732 if ((rv = (*func)(dtp, dt_module_info(dmp, &dto), data)) != 0) in dtrace_object_iter()
1742 dt_module_t *dmp; in dtrace_object_info() local
1748 if ((dmp = dt_module_from_object(dtp, object)) == NULL) in dtrace_object_info()
1751 if (dt_module_load(dtp, dmp) == -1) in dtrace_object_info()
1754 (void) dt_module_info(dmp, dto); in dtrace_object_info()