Lines Matching refs:dtp
726 set_open_errno(dtrace_hdl_t *dtp, int *errp, int err) in set_open_errno() argument
728 if (dtp != NULL) in set_open_errno()
729 dtrace_close(dtp); in set_open_errno()
822 dtrace_hdl_t *dtp = NULL; in dt_vopen() local
844 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
847 return (set_open_errno(dtp, errp, EDT_VERSION)); in dt_vopen()
861 return (set_open_errno(dtp, errp, EDT_OVERSION)); in dt_vopen()
865 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
868 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
871 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
874 return (set_open_errno(dtp, errp, EDT_ELFVERSION)); in dt_vopen()
930 return (set_open_errno(dtp, errp, err)); in dt_vopen()
937 if ((dtp = malloc(sizeof (dtrace_hdl_t))) == NULL) in dt_vopen()
938 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
940 bzero(dtp, sizeof (dtrace_hdl_t)); in dt_vopen()
941 dtp->dt_oflags = flags; in dt_vopen()
942 dtp->dt_prcmode = DT_PROC_STOP_PREINIT; in dt_vopen()
943 dtp->dt_linkmode = DT_LINK_KERNEL; in dt_vopen()
944 dtp->dt_linktype = DT_LTYP_ELF; in dt_vopen()
945 dtp->dt_xlatemode = DT_XL_STATIC; in dt_vopen()
946 dtp->dt_stdcmode = DT_STDC_XA; in dt_vopen()
947 dtp->dt_encoding = DT_ENCODING_UNSET; in dt_vopen()
948 dtp->dt_version = version; in dt_vopen()
949 dtp->dt_fd = dtfd; in dt_vopen()
950 dtp->dt_ftfd = ftfd; in dt_vopen()
951 dtp->dt_fterr = fterr; in dt_vopen()
952 dtp->dt_cdefs_fd = -1; in dt_vopen()
953 dtp->dt_ddefs_fd = -1; in dt_vopen()
954 dtp->dt_stdout_fd = -1; in dt_vopen()
955 dtp->dt_modbuckets = _dtrace_strbuckets; in dt_vopen()
956 dtp->dt_mods = calloc(dtp->dt_modbuckets, sizeof (dt_module_t *)); in dt_vopen()
957 dtp->dt_provbuckets = _dtrace_strbuckets; in dt_vopen()
958 dtp->dt_provs = calloc(dtp->dt_provbuckets, sizeof (dt_provider_t *)); in dt_vopen()
959 dt_proc_init(dtp); in dt_vopen()
960 dtp->dt_vmax = DT_VERS_LATEST; in dt_vopen()
961 dtp->dt_cpp_path = strdup(_dtrace_defcpp); in dt_vopen()
962 dtp->dt_cpp_argv = malloc(sizeof (char *)); in dt_vopen()
963 dtp->dt_cpp_argc = 1; in dt_vopen()
964 dtp->dt_cpp_args = 1; in dt_vopen()
965 dtp->dt_ld_path = strdup(_dtrace_defld); in dt_vopen()
966 dtp->dt_provmod = provmod; in dt_vopen()
967 dtp->dt_vector = vector; in dt_vopen()
968 dtp->dt_varg = arg; in dt_vopen()
969 dt_dof_init(dtp); in dt_vopen()
970 (void) uname(&dtp->dt_uts); in dt_vopen()
972 if (dtp->dt_mods == NULL || dtp->dt_provs == NULL || in dt_vopen()
973 dtp->dt_procs == NULL || dtp->dt_proc_env == NULL || in dt_vopen()
974 dtp->dt_ld_path == NULL || dtp->dt_cpp_path == NULL || in dt_vopen()
975 dtp->dt_cpp_argv == NULL) in dt_vopen()
976 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
979 dtp->dt_options[i] = DTRACEOPT_UNSET; in dt_vopen()
981 dtp->dt_cpp_argv[0] = (char *)strbasename(dtp->dt_cpp_path); in dt_vopen()
990 if (dt_cpp_add_arg(dtp, "-D__sun") == NULL || in dt_vopen()
991 dt_cpp_add_arg(dtp, "-D__unix") == NULL || in dt_vopen()
992 dt_cpp_add_arg(dtp, "-D__SVR4") == NULL || in dt_vopen()
993 dt_cpp_add_arg(dtp, "-D__SUNW_D=1") == NULL || in dt_vopen()
994 dt_cpp_add_arg(dtp, isadef) == NULL || in dt_vopen()
995 dt_cpp_add_arg(dtp, utsdef) == NULL) in dt_vopen()
996 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
999 bcopy(&_dtrace_conf, &dtp->dt_conf, sizeof (_dtrace_conf)); in dt_vopen()
1000 else if (dt_ioctl(dtp, DTRACEIOC_CONF, &dtp->dt_conf) != 0) in dt_vopen()
1001 return (set_open_errno(dtp, errp, errno)); in dt_vopen()
1004 dtp->dt_conf.dtc_ctfmodel = CTF_MODEL_LP64; in dt_vopen()
1006 dtp->dt_conf.dtc_ctfmodel = CTF_MODEL_ILP32; in dt_vopen()
1013 if (dt_cpp_add_arg(dtp, "-D__sparc") == NULL) in dt_vopen()
1014 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1016 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_LP64 && in dt_vopen()
1017 dt_cpp_add_arg(dtp, "-D__sparcv9") == NULL) in dt_vopen()
1018 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1027 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_LP64) { in dt_vopen()
1028 if (dt_cpp_add_arg(dtp, "-D__amd64") == NULL) in dt_vopen()
1029 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1031 if (dt_cpp_add_arg(dtp, "-D__i386") == NULL) in dt_vopen()
1032 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1036 if (dtp->dt_conf.dtc_difversion < DIF_VERSION) in dt_vopen()
1037 return (set_open_errno(dtp, errp, EDT_DIFVERS)); in dt_vopen()
1039 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_ILP32) in dt_vopen()
1040 bcopy(_dtrace_ints_32, dtp->dt_ints, sizeof (_dtrace_ints_32)); in dt_vopen()
1042 bcopy(_dtrace_ints_64, dtp->dt_ints, sizeof (_dtrace_ints_64)); in dt_vopen()
1044 dtp->dt_macros = dt_idhash_create("macro", NULL, 0, UINT_MAX); in dt_vopen()
1045 dtp->dt_aggs = dt_idhash_create("aggregation", NULL, in dt_vopen()
1048 dtp->dt_globals = dt_idhash_create("global", _dtrace_globals, in dt_vopen()
1051 dtp->dt_tls = dt_idhash_create("thread local", NULL, in dt_vopen()
1054 if (dtp->dt_macros == NULL || dtp->dt_aggs == NULL || in dt_vopen()
1055 dtp->dt_globals == NULL || dtp->dt_tls == NULL) in dt_vopen()
1056 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1064 if (dt_idhash_insert(dtp->dt_macros, idp->di_name, in dt_vopen()
1068 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1075 dtrace_update(dtp); in dt_vopen()
1081 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_ILP32) { in dt_vopen()
1093 if ((dmp = dtp->dt_cdefs = dt_module_create(dtp, "C")) == NULL) in dt_vopen()
1094 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1096 if ((dmp->dm_ctfp = ctf_create(&dtp->dt_ctferr)) == NULL) in dt_vopen()
1097 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1102 (void) ctf_setmodel(dmp->dm_ctfp, dtp->dt_conf.dtc_ctfmodel); in dt_vopen()
1125 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1132 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1151 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1159 if ((dmp = dtp->dt_ddefs = dt_module_create(dtp, "D")) == NULL) in dt_vopen()
1160 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1162 if ((dmp->dm_ctfp = ctf_create(&dtp->dt_ctferr)) == NULL) in dt_vopen()
1163 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1168 (void) ctf_setmodel(dmp->dm_ctfp, dtp->dt_conf.dtc_ctfmodel); in dt_vopen()
1174 if (ctf_import(dmp->dm_ctfp, dtp->dt_cdefs->dm_ctfp) == CTF_ERR) { in dt_vopen()
1177 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1192 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1205 dtp->dt_type_func = ctf_add_funcptr(dmp->dm_ctfp, in dt_vopen()
1208 dtp->dt_type_fptr = ctf_add_pointer(dmp->dm_ctfp, CTF_ADD_ROOT, NULL, in dt_vopen()
1209 dtp->dt_type_func); in dt_vopen()
1221 dtp->dt_type_str = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1224 dtp->dt_type_dyn = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1227 dtp->dt_type_stack = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1230 dtp->dt_type_symaddr = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1233 dtp->dt_type_usymaddr = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1236 if (dtp->dt_type_func == CTF_ERR || dtp->dt_type_fptr == CTF_ERR || in dt_vopen()
1237 dtp->dt_type_str == CTF_ERR || dtp->dt_type_dyn == CTF_ERR || in dt_vopen()
1238 dtp->dt_type_stack == CTF_ERR || dtp->dt_type_symaddr == CTF_ERR || in dt_vopen()
1239 dtp->dt_type_usymaddr == CTF_ERR) { in dt_vopen()
1242 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1248 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1256 for (i = 0; i < sizeof (dtp->dt_ints) / sizeof (dtp->dt_ints[0]); i++) { in dt_vopen()
1257 if (dtrace_lookup_by_type(dtp, DTRACE_OBJ_EVERY, in dt_vopen()
1258 dtp->dt_ints[i].did_name, &dtt) != 0) { in dt_vopen()
1260 dtp->dt_ints[i].did_name, in dt_vopen()
1261 dtrace_errmsg(dtp, dtrace_errno(dtp))); in dt_vopen()
1262 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1264 dtp->dt_ints[i].did_ctfp = dtt.dtt_ctfp; in dt_vopen()
1265 dtp->dt_ints[i].did_type = dtt.dtt_type; in dt_vopen()
1273 dt_list_delete(&dtp->dt_modlist, dtp->dt_ddefs); in dt_vopen()
1274 dt_list_prepend(&dtp->dt_modlist, dtp->dt_ddefs); in dt_vopen()
1276 dt_list_delete(&dtp->dt_modlist, dtp->dt_cdefs); in dt_vopen()
1277 dt_list_prepend(&dtp->dt_modlist, dtp->dt_cdefs); in dt_vopen()
1279 if (dt_pfdict_create(dtp) == -1) in dt_vopen()
1280 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1288 dtp->dt_cflags |= DTRACE_C_ZDEFS; in dt_vopen()
1294 if ((pgp = dtrace_program_strcompile(dtp, _dtrace_hardwire, in dt_vopen()
1297 dtrace_errmsg(dtp, dtrace_errno(dtp))); in dt_vopen()
1298 return (set_open_errno(dtp, errp, EDT_HARDWIRE)); in dt_vopen()
1301 dt_program_destroy(dtp, pgp); in dt_vopen()
1310 if (dtrace_setopt(dtp, "libdir", _dtrace_libdir) != 0) in dt_vopen()
1311 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1313 return (dtp); in dt_vopen()
1330 dtrace_close(dtrace_hdl_t *dtp) in dtrace_close() argument
1340 if (dtp->dt_procs != NULL) in dtrace_close()
1341 dt_proc_fini(dtp); in dtrace_close()
1343 while ((pgp = dt_list_next(&dtp->dt_programs)) != NULL) in dtrace_close()
1344 dt_program_destroy(dtp, pgp); in dtrace_close()
1346 while ((dxp = dt_list_next(&dtp->dt_xlators)) != NULL) in dtrace_close()
1347 dt_xlator_destroy(dtp, dxp); in dtrace_close()
1349 dt_free(dtp, dtp->dt_xlatormap); in dtrace_close()
1351 for (idp = dtp->dt_externs; idp != NULL; idp = ndp) { in dtrace_close()
1356 if (dtp->dt_macros != NULL) in dtrace_close()
1357 dt_idhash_destroy(dtp->dt_macros); in dtrace_close()
1358 if (dtp->dt_aggs != NULL) in dtrace_close()
1359 dt_idhash_destroy(dtp->dt_aggs); in dtrace_close()
1360 if (dtp->dt_globals != NULL) in dtrace_close()
1361 dt_idhash_destroy(dtp->dt_globals); in dtrace_close()
1362 if (dtp->dt_tls != NULL) in dtrace_close()
1363 dt_idhash_destroy(dtp->dt_tls); in dtrace_close()
1365 while ((dmp = dt_list_next(&dtp->dt_modlist)) != NULL) in dtrace_close()
1366 dt_module_destroy(dtp, dmp); in dtrace_close()
1368 while ((pvp = dt_list_next(&dtp->dt_provlist)) != NULL) in dtrace_close()
1369 dt_provider_destroy(dtp, pvp); in dtrace_close()
1371 if (dtp->dt_fd != -1) in dtrace_close()
1372 (void) close(dtp->dt_fd); in dtrace_close()
1373 if (dtp->dt_ftfd != -1) in dtrace_close()
1374 (void) close(dtp->dt_ftfd); in dtrace_close()
1375 if (dtp->dt_cdefs_fd != -1) in dtrace_close()
1376 (void) close(dtp->dt_cdefs_fd); in dtrace_close()
1377 if (dtp->dt_ddefs_fd != -1) in dtrace_close()
1378 (void) close(dtp->dt_ddefs_fd); in dtrace_close()
1379 if (dtp->dt_stdout_fd != -1) in dtrace_close()
1380 (void) close(dtp->dt_stdout_fd); in dtrace_close()
1382 dt_epid_destroy(dtp); in dtrace_close()
1383 dt_aggid_destroy(dtp); in dtrace_close()
1384 dt_format_destroy(dtp); in dtrace_close()
1385 dt_strdata_destroy(dtp); in dtrace_close()
1386 dt_buffered_destroy(dtp); in dtrace_close()
1387 dt_aggregate_destroy(dtp); in dtrace_close()
1388 dt_pfdict_destroy(dtp); in dtrace_close()
1389 dt_provmod_destroy(&dtp->dt_provmod); in dtrace_close()
1390 dt_dof_fini(dtp); in dtrace_close()
1392 for (i = 1; i < dtp->dt_cpp_argc; i++) in dtrace_close()
1393 free(dtp->dt_cpp_argv[i]); in dtrace_close()
1395 while ((dirp = dt_list_next(&dtp->dt_lib_path)) != NULL) { in dtrace_close()
1396 dt_list_delete(&dtp->dt_lib_path, dirp); in dtrace_close()
1401 free(dtp->dt_cpp_argv); in dtrace_close()
1402 free(dtp->dt_cpp_path); in dtrace_close()
1403 free(dtp->dt_ld_path); in dtrace_close()
1405 free(dtp->dt_mods); in dtrace_close()
1406 free(dtp->dt_provs); in dtrace_close()
1407 free(dtp); in dtrace_close()
1411 dtrace_provider_modules(dtrace_hdl_t *dtp, const char **mods, int nmods) in dtrace_provider_modules() argument
1416 for (prov = dtp->dt_provmod; prov != NULL; prov = prov->dp_next, i++) { in dtrace_provider_modules()
1425 dtrace_ctlfd(dtrace_hdl_t *dtp) in dtrace_ctlfd() argument
1427 return (dtp->dt_fd); in dtrace_ctlfd()