Lines Matching refs:dxp

50 	dt_xlator_t *dxp = arg;
51 dtrace_hdl_t *dtp = dxp->dx_hdl;
57 enp->dn_link = dxp->dx_nodes;
58 dxp->dx_nodes = enp;
63 mnp->dn_link = dxp->dx_nodes;
64 dxp->dx_nodes = mnp;
72 enp->dn_xlator = dxp;
74 dt_node_type_assign(enp, dxp->dx_dst_ctfp, type, B_FALSE);
80 if (dxp->dx_members != NULL) {
84 dxp->dx_members = mnp;
88 dt_node_type_assign(mnp, dxp->dx_dst_ctfp, type, B_FALSE);
101 dt_xlator_t *dxp = dt_zalloc(dtp, sizeof (dt_xlator_t));
107 if (dxp == NULL)
110 dxp->dx_hdl = dtp;
111 dxp->dx_id = dtp->dt_xlatorid++;
112 dxp->dx_gen = dtp->dt_gen;
113 dxp->dx_arg = -1;
115 if ((map = dt_alloc(dtp, sizeof (void *) * (dxp->dx_id + 1))) == NULL) {
116 dt_free(dtp, dxp);
120 dt_list_append(&dtp->dt_xlators, dxp);
121 bcopy(dtp->dt_xlatormap, map, sizeof (void *) * dxp->dx_id);
124 dtp->dt_xlatormap[dxp->dx_id] = dxp;
131 dxp->dx_ident = dt_ident_create(name ? name : "T",
135 if (dxp->dx_ident == NULL)
138 dxp->dx_ident->di_ctfp = src->dtt_ctfp;
139 dxp->dx_ident->di_type = src->dtt_type;
146 dxp->dx_locals = dt_idhash_create("xlparams", NULL, 0, 0);
148 if (dxp->dx_locals == NULL)
151 dt_idhash_xinsert(dxp->dx_locals, dxp->dx_ident);
154 dxp->dx_souid.di_name = "translator";
155 dxp->dx_souid.di_kind = DT_IDENT_XLSOU;
156 dxp->dx_souid.di_flags = DT_IDFLG_REF;
157 dxp->dx_souid.di_id = dxp->dx_id;
158 dxp->dx_souid.di_attr = _dtrace_defattr;
159 dxp->dx_souid.di_ops = &dt_idops_thaw;
160 dxp->dx_souid.di_data = dxp;
161 dxp->dx_souid.di_ctfp = dst->dtt_ctfp;
162 dxp->dx_souid.di_type = dst->dtt_type;
163 dxp->dx_souid.di_gen = dtp->dt_gen;
165 dxp->dx_ptrid.di_name = "translator";
166 dxp->dx_ptrid.di_kind = DT_IDENT_XLPTR;
167 dxp->dx_ptrid.di_flags = DT_IDFLG_REF;
168 dxp->dx_ptrid.di_id = dxp->dx_id;
169 dxp->dx_ptrid.di_attr = _dtrace_defattr;
170 dxp->dx_ptrid.di_ops = &dt_idops_thaw;
171 dxp->dx_ptrid.di_data = dxp;
172 dxp->dx_ptrid.di_ctfp = ptr.dtt_ctfp;
173 dxp->dx_ptrid.di_type = ptr.dtt_type;
174 dxp->dx_ptrid.di_gen = dtp->dt_gen;
183 dtp->dt_globals->dh_defer(dtp->dt_globals, &dxp->dx_souid);
184 dxp->dx_ptrid.di_attr = dxp->dx_souid.di_attr;
185 dxp->dx_ptrid.di_vers = dxp->dx_souid.di_vers;
188 dxp->dx_src_ctfp = src->dtt_ctfp;
189 dxp->dx_src_type = src->dtt_type;
190 dxp->dx_src_base = ctf_type_resolve(src->dtt_ctfp, src->dtt_type);
192 dxp->dx_dst_ctfp = dst->dtt_ctfp;
193 dxp->dx_dst_type = dst->dtt_type;
194 dxp->dx_dst_base = ctf_type_resolve(dst->dtt_ctfp, dst->dtt_type);
196 kind = ctf_type_kind(dst->dtt_ctfp, dxp->dx_dst_base);
205 if (ctf_member_iter(dxp->dx_dst_ctfp, dxp->dx_dst_base,
206 dt_xlator_create_member, dxp) != 0)
209 dxp->dx_members = members;
210 dxp->dx_nodes = nodes;
217 for (dnp = dxp->dx_members; dnp != NULL; dnp = dnp->dn_list) {
218 dnp->dn_membxlator = dxp;
219 dnp->dn_membid = dxp->dx_nmembers++;
222 dxp->dx_membdif = dt_zalloc(dtp,
223 sizeof (dtrace_difo_t *) * dxp->dx_nmembers);
225 if (dxp->dx_membdif == NULL) {
226 dxp->dx_nmembers = 0;
230 return (dxp);
233 dt_xlator_destroy(dtp, dxp);
238 dt_xlator_destroy(dtrace_hdl_t *dtp, dt_xlator_t *dxp)
242 dt_node_link_free(&dxp->dx_nodes);
244 if (dxp->dx_locals != NULL)
245 dt_idhash_destroy(dxp->dx_locals);
246 else if (dxp->dx_ident != NULL)
247 dt_ident_destroy(dxp->dx_ident);
249 for (i = 0; i < dxp->dx_nmembers; i++)
250 dt_difo_free(dtp, dxp->dx_membdif[i]);
252 dt_free(dtp, dxp->dx_membdif);
253 dt_list_delete(&dtp->dt_xlators, dxp);
254 dt_free(dtp, dxp);
272 dt_xlator_t *dxp = NULL;
300 for (dxp = dt_list_next(&dtp->dt_xlators); dxp != NULL;
301 dxp = dt_list_next(dxp)) {
302 if (ctf_type_compat(dxp->dx_src_ctfp, dxp->dx_src_type,
304 ctf_type_compat(dxp->dx_dst_ctfp, dxp->dx_dst_base,
312 for (dxp = dt_list_next(&dtp->dt_xlators); dxp != NULL;
313 dxp = dt_list_next(dxp)) {
314 if (ctf_type_compat(dxp->dx_src_ctfp, dxp->dx_src_base,
316 ctf_type_compat(dxp->dx_dst_ctfp, dxp->dx_dst_base,
321 for (dxp = dt_list_next(&dtp->dt_xlators); dxp != NULL;
322 dxp = dt_list_next(dxp)) {
323 dt_node_type_assign(&xn, dxp->dx_src_ctfp, dxp->dx_src_type,
325 if (ctf_type_compat(dxp->dx_dst_ctfp, dxp->dx_dst_base,
331 if (ptr && dxp != NULL && dxp->dx_ptrid.di_type == CTF_ERR)
334 if (dxp != NULL || !(flags & DT_XLATE_EXTERN) ||
336 return (dxp); /* we succeeded or not allowed to extern */
361 dt_xlator_ident(dt_xlator_t *dxp, ctf_file_t *ctfp, ctf_id_t type)
364 return (&dxp->dx_ptrid);
366 return (&dxp->dx_souid);
370 dt_xlator_member(dt_xlator_t *dxp, const char *name)
374 for (dnp = dxp->dx_members; dnp != NULL; dnp = dnp->dn_list) {
383 dt_xlator_dynamic(const dt_xlator_t *dxp)
385 return (dxp->dx_locals == NULL);