Lines Matching refs:dtp
844 set_open_errno(dtrace_hdl_t *dtp, int *errp, int err) in set_open_errno() argument
846 if (dtp != NULL) in set_open_errno()
847 dtrace_close(dtp); in set_open_errno()
1031 dtrace_hdl_t *dtp = NULL; in dt_vopen() local
1053 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
1056 return (set_open_errno(dtp, errp, EDT_VERSION)); in dt_vopen()
1070 return (set_open_errno(dtp, errp, EDT_OVERSION)); in dt_vopen()
1074 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
1082 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
1086 return (set_open_errno(dtp, errp, EINVAL)); in dt_vopen()
1089 return (set_open_errno(dtp, errp, EDT_ELFVERSION)); in dt_vopen()
1168 return (set_open_errno(dtp, errp, err)); in dt_vopen()
1172 if ((dtp = malloc(sizeof (dtrace_hdl_t))) == NULL) { in dt_vopen()
1174 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1177 bzero(dtp, sizeof (dtrace_hdl_t)); in dt_vopen()
1178 dtp->dt_oflags = flags; in dt_vopen()
1180 dtp->dt_prcmode = DT_PROC_STOP_PREINIT; in dt_vopen()
1182 dtp->dt_prcmode = DT_PROC_STOP_POSTINIT; in dt_vopen()
1184 dtp->dt_linkmode = DT_LINK_KERNEL; in dt_vopen()
1185 dtp->dt_linktype = DT_LTYP_ELF; in dt_vopen()
1186 dtp->dt_xlatemode = DT_XL_STATIC; in dt_vopen()
1187 dtp->dt_stdcmode = DT_STDC_XA; in dt_vopen()
1188 dtp->dt_encoding = DT_ENCODING_UNSET; in dt_vopen()
1189 dtp->dt_version = version; in dt_vopen()
1190 dtp->dt_fd = dtfd; in dt_vopen()
1191 dtp->dt_ftfd = ftfd; in dt_vopen()
1192 dtp->dt_kinstfd = -1; in dt_vopen()
1193 dtp->dt_fterr = fterr; in dt_vopen()
1194 dtp->dt_cdefs_fd = -1; in dt_vopen()
1195 dtp->dt_ddefs_fd = -1; in dt_vopen()
1197 dtp->dt_stdout_fd = -1; in dt_vopen()
1199 dtp->dt_freopen_fp = NULL; in dt_vopen()
1201 dtp->dt_modbuckets = _dtrace_strbuckets; in dt_vopen()
1202 dtp->dt_mods = calloc(dtp->dt_modbuckets, sizeof (dt_module_t *)); in dt_vopen()
1204 dtp->dt_kmods = calloc(dtp->dt_modbuckets, sizeof (dt_module_t *)); in dt_vopen()
1206 dtp->dt_provbuckets = _dtrace_strbuckets; in dt_vopen()
1207 dtp->dt_provs = calloc(dtp->dt_provbuckets, sizeof (dt_provider_t *)); in dt_vopen()
1208 dt_proc_init(dtp); in dt_vopen()
1209 dtp->dt_vmax = DT_VERS_LATEST; in dt_vopen()
1210 dtp->dt_cpp_path = strdup(_dtrace_defcpp); in dt_vopen()
1211 dtp->dt_cpp_argv = malloc(sizeof (char *)); in dt_vopen()
1212 dtp->dt_cpp_argc = 1; in dt_vopen()
1213 dtp->dt_cpp_args = 1; in dt_vopen()
1214 dtp->dt_ld_path = strdup(_dtrace_defld); in dt_vopen()
1216 dtp->dt_objcopy_path = strdup(_dtrace_defobjcopy); in dt_vopen()
1218 dtp->dt_provmod = provmod; in dt_vopen()
1219 dtp->dt_vector = vector; in dt_vopen()
1220 dtp->dt_varg = arg; in dt_vopen()
1221 dt_dof_init(dtp); in dt_vopen()
1222 (void) uname(&dtp->dt_uts); in dt_vopen()
1224 if (dtp->dt_mods == NULL || dtp->dt_provs == NULL || in dt_vopen()
1225 dtp->dt_procs == NULL || dtp->dt_proc_env == NULL || in dt_vopen()
1226 dtp->dt_ld_path == NULL || dtp->dt_cpp_path == NULL || in dt_vopen()
1228 dtp->dt_kmods == NULL || in dt_vopen()
1229 dtp->dt_objcopy_path == NULL || in dt_vopen()
1231 dtp->dt_cpp_argv == NULL) in dt_vopen()
1232 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1235 dtp->dt_options[i] = DTRACEOPT_UNSET; in dt_vopen()
1237 dtp->dt_cpp_argv[0] = (char *)strbasename(dtp->dt_cpp_path); in dt_vopen()
1247 if (dt_cpp_add_arg(dtp, "-D__sun") == NULL || in dt_vopen()
1248 dt_cpp_add_arg(dtp, "-D__unix") == NULL || in dt_vopen()
1249 dt_cpp_add_arg(dtp, "-D__SVR4") == NULL || in dt_vopen()
1250 dt_cpp_add_arg(dtp, "-D__SUNW_D=1") == NULL || in dt_vopen()
1251 dt_cpp_add_arg(dtp, isadef) == NULL || in dt_vopen()
1252 dt_cpp_add_arg(dtp, utsdef) == NULL) in dt_vopen()
1253 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1257 bcopy(&_dtrace_conf, &dtp->dt_conf, sizeof (_dtrace_conf)); in dt_vopen()
1258 else if (dt_ioctl(dtp, DTRACEIOC_CONF, &dtp->dt_conf) != 0) in dt_vopen()
1259 return (set_open_errno(dtp, errp, errno)); in dt_vopen()
1262 dtp->dt_conf.dtc_ctfmodel = CTF_MODEL_LP64; in dt_vopen()
1264 dtp->dt_conf.dtc_ctfmodel = CTF_MODEL_ILP32; in dt_vopen()
1271 if (dt_cpp_add_arg(dtp, "-D__sparc") == NULL) in dt_vopen()
1272 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1274 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_LP64 && in dt_vopen()
1275 dt_cpp_add_arg(dtp, "-D__sparcv9") == NULL) in dt_vopen()
1276 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1286 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_LP64) { in dt_vopen()
1287 if (dt_cpp_add_arg(dtp, "-D__amd64") == NULL) in dt_vopen()
1288 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1290 if (dt_cpp_add_arg(dtp, "-D__i386") == NULL) in dt_vopen()
1291 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1296 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_LP64) { in dt_vopen()
1297 if (dt_cpp_add_arg(dtp, "-m64") == NULL) in dt_vopen()
1298 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1300 if (dt_cpp_add_arg(dtp, "-m32") == NULL) in dt_vopen()
1301 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1306 if (dtp->dt_conf.dtc_difversion < DIF_VERSION) in dt_vopen()
1307 return (set_open_errno(dtp, errp, EDT_DIFVERS)); in dt_vopen()
1309 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_ILP32) in dt_vopen()
1310 bcopy(_dtrace_ints_32, dtp->dt_ints, sizeof (_dtrace_ints_32)); in dt_vopen()
1312 bcopy(_dtrace_ints_64, dtp->dt_ints, sizeof (_dtrace_ints_64)); in dt_vopen()
1346 dtp->dt_macros = dt_idhash_create("macro", NULL, 0, UINT_MAX); in dt_vopen()
1347 dtp->dt_aggs = dt_idhash_create("aggregation", NULL, in dt_vopen()
1350 dtp->dt_globals = dt_idhash_create("global", _dtrace_globals, in dt_vopen()
1353 dtp->dt_tls = dt_idhash_create("thread local", NULL, in dt_vopen()
1356 if (dtp->dt_macros == NULL || dtp->dt_aggs == NULL || in dt_vopen()
1357 dtp->dt_globals == NULL || dtp->dt_tls == NULL) in dt_vopen()
1358 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1366 if (dt_idhash_insert(dtp->dt_macros, idp->di_name, in dt_vopen()
1370 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1377 dtrace_update(dtp); in dt_vopen()
1383 if (dtp->dt_conf.dtc_ctfmodel == CTF_MODEL_ILP32) { in dt_vopen()
1395 if ((dmp = dtp->dt_cdefs = dt_module_create(dtp, "C")) == NULL) in dt_vopen()
1396 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1398 if ((dmp->dm_ctfp = ctf_create(&dtp->dt_ctferr)) == NULL) in dt_vopen()
1399 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1404 (void) ctf_setmodel(dmp->dm_ctfp, dtp->dt_conf.dtc_ctfmodel); in dt_vopen()
1427 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1434 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1453 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1461 if ((dmp = dtp->dt_ddefs = dt_module_create(dtp, "D")) == NULL) in dt_vopen()
1462 return (set_open_errno(dtp, errp, EDT_NOMEM)); in dt_vopen()
1464 if ((dmp->dm_ctfp = ctf_create(&dtp->dt_ctferr)) == NULL) in dt_vopen()
1465 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1470 (void) ctf_setmodel(dmp->dm_ctfp, dtp->dt_conf.dtc_ctfmodel); in dt_vopen()
1476 if (ctf_import(dmp->dm_ctfp, dtp->dt_cdefs->dm_ctfp) == CTF_ERR) { in dt_vopen()
1479 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1494 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1507 dtp->dt_type_func = ctf_add_function(dmp->dm_ctfp, in dt_vopen()
1510 dtp->dt_type_fptr = ctf_add_pointer(dmp->dm_ctfp, in dt_vopen()
1511 CTF_ADD_ROOT, dtp->dt_type_func); in dt_vopen()
1523 dtp->dt_type_str = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1526 dtp->dt_type_dyn = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1529 dtp->dt_type_stack = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1532 dtp->dt_type_symaddr = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1535 dtp->dt_type_usymaddr = ctf_add_typedef(dmp->dm_ctfp, CTF_ADD_ROOT, in dt_vopen()
1538 if (dtp->dt_type_func == CTF_ERR || dtp->dt_type_fptr == CTF_ERR || in dt_vopen()
1539 dtp->dt_type_str == CTF_ERR || dtp->dt_type_dyn == CTF_ERR || in dt_vopen()
1540 dtp->dt_type_stack == CTF_ERR || dtp->dt_type_symaddr == CTF_ERR || in dt_vopen()
1541 dtp->dt_type_usymaddr == CTF_ERR) { in dt_vopen()
1544 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1550 return (set_open_errno(dtp, errp, EDT_CTF)); in dt_vopen()
1558 for (i = 0; i < sizeof (dtp->dt_ints) / sizeof (dtp->dt_ints[0]); i++) { in dt_vopen()
1559 if (dtrace_lookup_by_type(dtp, DTRACE_OBJ_EVERY, in dt_vopen()
1560 dtp->dt_ints[i].did_name, &dtt) != 0) { in dt_vopen()
1562 dtp->dt_ints[i].did_name, in dt_vopen()
1563 dtrace_errmsg(dtp, dtrace_errno(dtp))); in dt_vopen()
1564 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1566 dtp->dt_ints[i].did_ctfp = dtt.dtt_ctfp; in dt_vopen()
1567 dtp->dt_ints[i].did_type = dtt.dtt_type; in dt_vopen()
1575 dt_list_delete(&dtp->dt_modlist, dtp->dt_ddefs); in dt_vopen()
1576 dt_list_prepend(&dtp->dt_modlist, dtp->dt_ddefs); in dt_vopen()
1578 dt_list_delete(&dtp->dt_modlist, dtp->dt_cdefs); in dt_vopen()
1579 dt_list_prepend(&dtp->dt_modlist, dtp->dt_cdefs); in dt_vopen()
1581 if (dt_pfdict_create(dtp) == -1) in dt_vopen()
1582 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1590 dtp->dt_cflags |= DTRACE_C_ZDEFS; in dt_vopen()
1596 if ((pgp = dtrace_program_strcompile(dtp, _dtrace_hardwire, in dt_vopen()
1599 dtrace_errmsg(dtp, dtrace_errno(dtp))); in dt_vopen()
1600 return (set_open_errno(dtp, errp, EDT_HARDWIRE)); in dt_vopen()
1603 dt_program_destroy(dtp, pgp); in dt_vopen()
1614 if ((dtp->dt_oflags & DTRACE_O_ILP32) != 0) { in dt_vopen()
1615 if (dtrace_setopt(dtp, "libdir", _dtrace_libdir32) != 0) in dt_vopen()
1616 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1619 if (dtrace_setopt(dtp, "libdir", _dtrace_libdir) != 0) in dt_vopen()
1620 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1622 if (dtrace_setopt(dtp, "libdir", _dtrace_libdir) != 0) in dt_vopen()
1623 return (set_open_errno(dtp, errp, dtp->dt_errno)); in dt_vopen()
1626 return (dtp); in dt_vopen()
1643 dtrace_close(dtrace_hdl_t *dtp) in dtrace_close() argument
1657 if (dtp->dt_procs != NULL) in dtrace_close()
1658 dt_proc_fini(dtp); in dtrace_close()
1660 while ((pgp = dt_list_next(&dtp->dt_programs)) != NULL) in dtrace_close()
1661 dt_program_destroy(dtp, pgp); in dtrace_close()
1663 while ((dxp = dt_list_next(&dtp->dt_xlators)) != NULL) in dtrace_close()
1664 dt_xlator_destroy(dtp, dxp); in dtrace_close()
1666 dt_free(dtp, dtp->dt_xlatormap); in dtrace_close()
1668 for (idp = dtp->dt_externs; idp != NULL; idp = ndp) { in dtrace_close()
1673 if (dtp->dt_macros != NULL) in dtrace_close()
1674 dt_idhash_destroy(dtp->dt_macros); in dtrace_close()
1675 if (dtp->dt_aggs != NULL) in dtrace_close()
1676 dt_idhash_destroy(dtp->dt_aggs); in dtrace_close()
1677 if (dtp->dt_globals != NULL) in dtrace_close()
1678 dt_idhash_destroy(dtp->dt_globals); in dtrace_close()
1679 if (dtp->dt_tls != NULL) in dtrace_close()
1680 dt_idhash_destroy(dtp->dt_tls); in dtrace_close()
1683 for (h = 0; h < dtp->dt_modbuckets; h++) in dtrace_close()
1684 while ((dkm = dtp->dt_kmods[h]) != NULL) { in dtrace_close()
1685 dtp->dt_kmods[h] = dkm->dkm_next; in dtrace_close()
1691 while ((dmp = dt_list_next(&dtp->dt_modlist)) != NULL) in dtrace_close()
1692 dt_module_destroy(dtp, dmp); in dtrace_close()
1694 while ((pvp = dt_list_next(&dtp->dt_provlist)) != NULL) in dtrace_close()
1695 dt_provider_destroy(dtp, pvp); in dtrace_close()
1697 if (dtp->dt_fd != -1) in dtrace_close()
1698 (void) close(dtp->dt_fd); in dtrace_close()
1699 if (dtp->dt_ftfd != -1) in dtrace_close()
1700 (void) close(dtp->dt_ftfd); in dtrace_close()
1701 if (dtp->dt_kinstfd != -1) in dtrace_close()
1702 (void) close(dtp->dt_kinstfd); in dtrace_close()
1703 if (dtp->dt_cdefs_fd != -1) in dtrace_close()
1704 (void) close(dtp->dt_cdefs_fd); in dtrace_close()
1705 if (dtp->dt_ddefs_fd != -1) in dtrace_close()
1706 (void) close(dtp->dt_ddefs_fd); in dtrace_close()
1708 if (dtp->dt_stdout_fd != -1) in dtrace_close()
1709 (void) close(dtp->dt_stdout_fd); in dtrace_close()
1711 if (dtp->dt_freopen_fp != NULL) in dtrace_close()
1712 (void) fclose(dtp->dt_freopen_fp); in dtrace_close()
1715 dt_epid_destroy(dtp); in dtrace_close()
1716 dt_aggid_destroy(dtp); in dtrace_close()
1717 dt_format_destroy(dtp); in dtrace_close()
1718 dt_strdata_destroy(dtp); in dtrace_close()
1719 dt_buffered_destroy(dtp); in dtrace_close()
1720 dt_aggregate_destroy(dtp); in dtrace_close()
1721 dt_pfdict_destroy(dtp); in dtrace_close()
1722 dt_provmod_destroy(&dtp->dt_provmod); in dtrace_close()
1723 dt_dof_fini(dtp); in dtrace_close()
1725 for (i = 1; i < dtp->dt_cpp_argc; i++) in dtrace_close()
1726 free(dtp->dt_cpp_argv[i]); in dtrace_close()
1728 while ((dirp = dt_list_next(&dtp->dt_lib_path)) != NULL) { in dtrace_close()
1729 dt_list_delete(&dtp->dt_lib_path, dirp); in dtrace_close()
1734 free(dtp->dt_cpp_argv); in dtrace_close()
1735 free(dtp->dt_cpp_path); in dtrace_close()
1736 free(dtp->dt_ld_path); in dtrace_close()
1738 free(dtp->dt_objcopy_path); in dtrace_close()
1741 free(dtp->dt_mods); in dtrace_close()
1743 free(dtp->dt_kmods); in dtrace_close()
1745 free(dtp->dt_provs); in dtrace_close()
1748 free(dtp); in dtrace_close()
1752 dtrace_provider_modules(dtrace_hdl_t *dtp, const char **mods, int nmods) in dtrace_provider_modules() argument
1757 for (prov = dtp->dt_provmod; prov != NULL; prov = prov->dp_next, i++) { in dtrace_provider_modules()
1766 dtrace_ctlfd(dtrace_hdl_t *dtp) in dtrace_ctlfd() argument
1768 return (dtp->dt_fd); in dtrace_ctlfd()