Lines Matching refs:dtp

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