Lines Matching refs:dtp
422 dt_module_create(dtrace_hdl_t *dtp, const char *name) in dt_module_create() argument
427 uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_modbuckets; in dt_module_create()
430 for (dmp = dtp->dt_mods[h]; dmp != NULL; dmp = dmp->dm_next) { in dt_module_create()
440 dt_list_append(&dtp->dt_modlist, dmp); in dt_module_create()
441 dmp->dm_next = dtp->dt_mods[h]; in dt_module_create()
442 dtp->dt_mods[h] = dmp; in dt_module_create()
443 dtp->dt_nmods++; in dt_module_create()
445 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_LP64) in dt_module_create()
463 idp = dt_idhash_lookup(dtp->dt_macros, "target"); in dt_module_create()
480 dt_module_lookup_by_name(dtrace_hdl_t *dtp, const char *name) in dt_module_lookup_by_name() argument
482 uint_t h = dt_strtab_hash(name, NULL) % dtp->dt_modbuckets; in dt_module_lookup_by_name()
485 for (dmp = dtp->dt_mods[h]; dmp != NULL; dmp = dmp->dm_next) { in dt_module_lookup_by_name()
495 dt_module_lookup_by_ctf(dtrace_hdl_t *dtp, ctf_file_t *ctfp) in dt_module_lookup_by_ctf() argument
501 dt_module_load_sect(dtrace_hdl_t *dtp, dt_module_t *dmp, ctf_sect_t *ctsp) in dt_module_load_sect() argument
510 return (dt_set_errno(dtp, EDT_NOTLOADED)); in dt_module_load_sect()
623 dt_module_load_proc(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_load_proc() argument
632 p = dt_proc_grab(dtp, dmp->dm_pid, 0, PGRAB_RDONLY | PGRAB_FORCE); in dt_module_load_proc()
635 return (dt_set_errno(dtp, EDT_CANTLOAD)); in dt_module_load_proc()
637 dt_proc_lock(dtp, p); in dt_module_load_proc()
640 arg.dpa_dtp = dtp; in dt_module_load_proc()
645 dt_proc_release(dtp, p); in dt_module_load_proc()
646 return (dt_set_errno(dtp, EDT_CANTLOAD)); in dt_module_load_proc()
651 dt_proc_unlock(dtp, p); in dt_module_load_proc()
652 dt_proc_release(dtp, p); in dt_module_load_proc()
653 return (dt_set_errno(dtp, EDT_CANTLOAD)); in dt_module_load_proc()
658 dt_proc_unlock(dtp, p); in dt_module_load_proc()
659 dt_proc_release(dtp, p); in dt_module_load_proc()
660 return (dt_set_errno(dtp, EDT_NOMEM)); in dt_module_load_proc()
667 dt_proc_unlock(dtp, p); in dt_module_load_proc()
668 dt_proc_release(dtp, p); in dt_module_load_proc()
669 return (dt_set_errno(dtp, EDT_NOMEM)); in dt_module_load_proc()
677 dt_proc_unlock(dtp, p); in dt_module_load_proc()
678 dt_module_unload(dtp, dmp); in dt_module_load_proc()
679 dt_proc_release(dtp, p); in dt_module_load_proc()
680 return (dt_set_errno(dtp, EDT_CANTLOAD)); in dt_module_load_proc()
686 dt_proc_unlock(dtp, p); in dt_module_load_proc()
687 dt_proc_release(dtp, p); in dt_module_load_proc()
694 dt_module_load(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_load() argument
700 return (dt_module_load_proc(dtp, dmp)); in dt_module_load()
733 if (dt_module_load_sect(dtp, dmp, &dmp->dm_ctdata) == -1 || in dt_module_load()
734 dt_module_load_sect(dtp, dmp, &dmp->dm_symtab) == -1 || in dt_module_load()
735 dt_module_load_sect(dtp, dmp, &dmp->dm_strtab) == -1) { in dt_module_load()
736 dt_module_unload(dtp, dmp); in dt_module_load()
756 dt_module_unload(dtp, dmp); in dt_module_load()
757 return (dt_set_errno(dtp, EDT_NOMEM)); in dt_module_load()
774 dt_module_unload(dtp, dmp); in dt_module_load()
775 return (dt_set_errno(dtp, EDT_NOMEM)); in dt_module_load()
788 dt_module_hasctf(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_hasctf() argument
792 return (dt_module_getctf(dtp, dmp) != NULL); in dt_module_hasctf()
796 dt_module_getctf(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_getctf() argument
803 if (dmp->dm_ctfp != NULL || dt_module_load(dtp, dmp) != 0) in dt_module_getctf()
817 if (dtp->dt_conf.dtc_ctfmodel != model) { in dt_module_getctf()
818 (void) dt_set_errno(dtp, EDT_DATAMODEL); in dt_module_getctf()
823 (void) dt_set_errno(dtp, EDT_NOCTF); in dt_module_getctf()
828 &dmp->dm_symtab, &dmp->dm_strtab, &dtp->dt_ctferr); in dt_module_getctf()
831 (void) dt_set_errno(dtp, EDT_CTF); in dt_module_getctf()
839 if ((pmp = dt_module_create(dtp, parent)) == NULL || in dt_module_getctf()
840 (pfp = dt_module_getctf(dtp, pmp)) == NULL) { in dt_module_getctf()
842 (void) dt_set_errno(dtp, EDT_NOMEM); in dt_module_getctf()
847 dtp->dt_ctferr = ctf_errno(dmp->dm_ctfp); in dt_module_getctf()
848 (void) dt_set_errno(dtp, EDT_CTF); in dt_module_getctf()
866 dt_module_unload(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_unload() argument
930 dt_module_destroy(dtrace_hdl_t *dtp, dt_module_t *dmp) in dt_module_destroy() argument
932 uint_t h = dt_strtab_hash(dmp->dm_name, NULL) % dtp->dt_modbuckets; in dt_module_destroy()
933 dt_module_t **dmpp = &dtp->dt_mods[h]; in dt_module_destroy()
935 dt_list_delete(&dtp->dt_modlist, dmp); in dt_module_destroy()
936 assert(dtp->dt_nmods != 0); in dt_module_destroy()
937 dtp->dt_nmods--; in dt_module_destroy()
951 dt_module_unload(dtp, dmp); in dt_module_destroy()
962 dt_module_extern(dtrace_hdl_t *dtp, dt_module_t *dmp, in dt_module_extern() argument
971 (void) dt_set_errno(dtp, EDT_NOMEM); in dt_module_extern()
976 (void) dt_set_errno(dtp, EDT_SYMOFLOW); in dt_module_extern()
981 (void) dt_set_errno(dtp, EDT_NOMEM); in dt_module_extern()
986 _dtrace_symattr, 0, &dt_idops_thaw, NULL, dtp->dt_gen); in dt_module_extern()
989 (void) dt_set_errno(dtp, EDT_NOMEM); in dt_module_extern()
1016 dt_module_getlibid(dtrace_hdl_t *dtp, dt_module_t *dmp, const ctf_file_t *fp) in dt_module_getlibid() argument
1030 dt_module_getctflib(dtrace_hdl_t *dtp, dt_module_t *dmp, const char *name) in dt_module_getctflib() argument
1047 dt_module_update(dtrace_hdl_t *dtp, const char *name) in dt_module_update() argument
1064 (dmp = dt_module_create(dtp, name)) == NULL) { in dt_module_update()
1084 dt_module_destroy(dtp, dmp); in dt_module_update()
1099 dt_module_destroy(dtp, dmp); in dt_module_update()
1147 dtrace_update(dtrace_hdl_t *dtp) in dtrace_update() argument
1152 for (dmp = dt_list_next(&dtp->dt_modlist); in dtrace_update()
1154 dt_module_unload(dtp, dmp); in dtrace_update()
1160 if (!(dtp->dt_oflags & DTRACE_O_NOSYS) && in dtrace_update()
1166 dt_module_update(dtp, dp->d_name); in dtrace_update()
1177 dt_idhash_lookup(dtp->dt_macros, "egid")->di_id = getegid(); in dtrace_update()
1178 dt_idhash_lookup(dtp->dt_macros, "euid")->di_id = geteuid(); in dtrace_update()
1179 dt_idhash_lookup(dtp->dt_macros, "gid")->di_id = getgid(); in dtrace_update()
1180 dt_idhash_lookup(dtp->dt_macros, "pid")->di_id = getpid(); in dtrace_update()
1181 dt_idhash_lookup(dtp->dt_macros, "pgid")->di_id = getpgid(0); in dtrace_update()
1182 dt_idhash_lookup(dtp->dt_macros, "ppid")->di_id = getppid(); in dtrace_update()
1183 dt_idhash_lookup(dtp->dt_macros, "projid")->di_id = getprojid(); in dtrace_update()
1184 dt_idhash_lookup(dtp->dt_macros, "sid")->di_id = getsid(0); in dtrace_update()
1185 dt_idhash_lookup(dtp->dt_macros, "taskid")->di_id = gettaskid(); in dtrace_update()
1186 dt_idhash_lookup(dtp->dt_macros, "uid")->di_id = getuid(); in dtrace_update()
1194 dtp->dt_exec = dt_module_lookup_by_name(dtp, "genunix"); in dtrace_update()
1195 dtp->dt_rtld = dt_module_lookup_by_name(dtp, "krtld"); in dtrace_update()
1196 if (dtp->dt_rtld == NULL) in dtrace_update()
1197 dtp->dt_rtld = dt_module_lookup_by_name(dtp, "unix"); in dtrace_update()
1206 if (dtp->dt_exec != NULL && in dtrace_update()
1207 dtp->dt_cdefs == NULL && dtp->dt_ddefs == NULL) { in dtrace_update()
1208 dt_list_delete(&dtp->dt_modlist, dtp->dt_exec); in dtrace_update()
1209 dt_list_prepend(&dtp->dt_modlist, dtp->dt_exec); in dtrace_update()
1214 dt_module_from_object(dtrace_hdl_t *dtp, const char *object) in dt_module_from_object() argument
1221 dmp = dtp->dt_exec; in dt_module_from_object()
1224 dmp = dtp->dt_rtld; in dt_module_from_object()
1227 dmp = dtp->dt_cdefs; in dt_module_from_object()
1230 dmp = dtp->dt_ddefs; in dt_module_from_object()
1233 dmp = dt_module_create(dtp, object); in dt_module_from_object()
1238 (void) dt_set_errno(dtp, err); in dt_module_from_object()
1248 dtrace_lookup_by_name(dtrace_hdl_t *dtp, const char *object, const char *name, in dtrace_lookup_by_name() argument
1262 if ((dmp = dt_module_from_object(dtp, object)) == NULL) in dtrace_lookup_by_name()
1265 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_name()
1275 dmp = dt_list_next(&dtp->dt_modlist); in dtrace_lookup_by_name()
1276 n = dtp->dt_nmods; in dtrace_lookup_by_name()
1286 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_name()
1322 return (dt_set_errno(dtp, EDT_NOSYM)); in dtrace_lookup_by_name()
1330 dtrace_lookup_by_addr(dtrace_hdl_t *dtp, GElf_Addr addr, in dtrace_lookup_by_addr() argument
1335 const dtrace_vector_t *v = dtp->dt_vector; in dtrace_lookup_by_addr()
1338 return (v->dtv_lookup_by_addr(dtp->dt_varg, addr, symp, sip)); in dtrace_lookup_by_addr()
1340 for (dmp = dt_list_next(&dtp->dt_modlist); dmp != NULL; in dtrace_lookup_by_addr()
1349 return (dt_set_errno(dtp, EDT_NOSYMADDR)); in dtrace_lookup_by_addr()
1351 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_addr()
1356 return (dt_set_errno(dtp, EDT_NOSYMADDR)); in dtrace_lookup_by_addr()
1376 dtrace_lookup_by_type(dtrace_hdl_t *dtp, const char *object, const char *name, in dtrace_lookup_by_type() argument
1394 if ((dmp = dt_module_from_object(dtp, object)) == NULL) in dtrace_lookup_by_type()
1397 if (dt_module_load(dtp, dmp) == -1) in dtrace_lookup_by_type()
1407 dmp = dt_list_next(&dtp->dt_modlist); in dtrace_lookup_by_type()
1408 n = dtp->dt_nmods; in dtrace_lookup_by_type()
1424 if (dt_module_hasctf(dtp, dmp) == 0) { in dtrace_lookup_by_type()
1443 return (dt_set_errno(dtp, EDT_NOMEM)); in dtrace_lookup_by_type()
1448 fp = dt_module_getctflib(dtp, dmp, buf); in dtrace_lookup_by_type()
1475 return (dt_set_errno(dtp, EDT_NOTYPE)); in dtrace_lookup_by_type()
1481 dtrace_symbol_type(dtrace_hdl_t *dtp, const GElf_Sym *symp, in dtrace_symbol_type() argument
1491 if ((dmp = dt_module_lookup_by_name(dtp, sip->dts_object)) == NULL) in dtrace_symbol_type()
1492 return (dt_set_errno(dtp, EDT_NOMOD)); in dtrace_symbol_type()
1499 return (dt_set_errno(dtp, EDT_NOSYM)); in dtrace_symbol_type()
1505 if (dt_module_getctf(dtp, dmp) == NULL) in dtrace_symbol_type()
1512 dtp->dt_ctferr = ctf_errno(tip->dtt_ctfp); in dtrace_symbol_type()
1513 return (dt_set_errno(dtp, EDT_CTF)); in dtrace_symbol_type()
1517 tip->dtt_ctfp = DT_FPTR_CTFP(dtp); in dtrace_symbol_type()
1518 tip->dtt_type = DT_FPTR_TYPE(dtp); in dtrace_symbol_type()
1549 dtrace_object_iter(dtrace_hdl_t *dtp, dtrace_obj_f *func, void *data) in dtrace_object_iter() argument
1551 const dt_module_t *dmp = dt_list_next(&dtp->dt_modlist); in dtrace_object_iter()
1556 if ((rv = (*func)(dtp, dt_module_info(dmp, &dto), data)) != 0) in dtrace_object_iter()
1564 dtrace_object_info(dtrace_hdl_t *dtp, const char *object, dtrace_objinfo_t *dto) in dtrace_object_info() argument
1570 return (dt_set_errno(dtp, EINVAL)); in dtrace_object_info()
1572 if ((dmp = dt_module_from_object(dtp, object)) == NULL) in dtrace_object_info()
1575 if (dt_module_load(dtp, dmp) == -1) in dtrace_object_info()