Lines Matching refs:ddo

48 	dt_dof_t *ddo = &dtp->dt_dof;
50 ddo->ddo_hdl = dtp;
51 ddo->ddo_nsecs = 0;
52 ddo->ddo_strsec = DOF_SECIDX_NONE;
53 ddo->ddo_xlimport = NULL;
54 ddo->ddo_xlexport = NULL;
56 dt_buf_create(dtp, &ddo->ddo_secs, "section headers", 0);
57 dt_buf_create(dtp, &ddo->ddo_strs, "string table", 0);
58 dt_buf_create(dtp, &ddo->ddo_ldata, "loadable data", 0);
59 dt_buf_create(dtp, &ddo->ddo_udata, "unloadable data", 0);
61 dt_buf_create(dtp, &ddo->ddo_probes, "probe data", 0);
62 dt_buf_create(dtp, &ddo->ddo_args, "probe args", 0);
63 dt_buf_create(dtp, &ddo->ddo_offs, "probe offs", 0);
64 dt_buf_create(dtp, &ddo->ddo_enoffs, "probe is-enabled offs", 0);
65 dt_buf_create(dtp, &ddo->ddo_rels, "probe rels", 0);
67 dt_buf_create(dtp, &ddo->ddo_xlms, "xlate members", 0);
73 dt_dof_t *ddo = &dtp->dt_dof;
75 dt_free(dtp, ddo->ddo_xlimport);
76 dt_free(dtp, ddo->ddo_xlexport);
78 dt_buf_destroy(dtp, &ddo->ddo_secs);
79 dt_buf_destroy(dtp, &ddo->ddo_strs);
80 dt_buf_destroy(dtp, &ddo->ddo_ldata);
81 dt_buf_destroy(dtp, &ddo->ddo_udata);
83 dt_buf_destroy(dtp, &ddo->ddo_probes);
84 dt_buf_destroy(dtp, &ddo->ddo_args);
85 dt_buf_destroy(dtp, &ddo->ddo_offs);
86 dt_buf_destroy(dtp, &ddo->ddo_enoffs);
87 dt_buf_destroy(dtp, &ddo->ddo_rels);
89 dt_buf_destroy(dtp, &ddo->ddo_xlms);
95 dt_dof_t *ddo = &dtp->dt_dof;
98 assert(ddo->ddo_hdl == dtp);
99 ddo->ddo_pgp = pgp;
101 ddo->ddo_nsecs = 0;
102 ddo->ddo_strsec = DOF_SECIDX_NONE;
104 dt_free(dtp, ddo->ddo_xlimport);
105 dt_free(dtp, ddo->ddo_xlexport);
107 ddo->ddo_xlimport = dt_alloc(dtp, sizeof (dof_secidx_t) * nx);
108 ddo->ddo_xlexport = dt_alloc(dtp, sizeof (dof_secidx_t) * nx);
110 if (nx != 0 && (ddo->ddo_xlimport == NULL || ddo->ddo_xlexport == NULL))
114 ddo->ddo_xlimport[i] = DOF_SECIDX_NONE;
115 ddo->ddo_xlexport[i] = DOF_SECIDX_NONE;
118 dt_buf_reset(dtp, &ddo->ddo_secs);
119 dt_buf_reset(dtp, &ddo->ddo_strs);
120 dt_buf_reset(dtp, &ddo->ddo_ldata);
121 dt_buf_reset(dtp, &ddo->ddo_udata);
123 dt_buf_reset(dtp, &ddo->ddo_probes);
124 dt_buf_reset(dtp, &ddo->ddo_args);
125 dt_buf_reset(dtp, &ddo->ddo_offs);
126 dt_buf_reset(dtp, &ddo->ddo_enoffs);
127 dt_buf_reset(dtp, &ddo->ddo_rels);
129 dt_buf_reset(dtp, &ddo->ddo_xlms);
139 dof_add_lsect(dt_dof_t *ddo, const void *data, uint32_t type,
142 dtrace_hdl_t *dtp = ddo->ddo_hdl;
149 s.dofs_offset = dt_buf_offset(&ddo->ddo_ldata, align);
152 dt_buf_write(dtp, &ddo->ddo_secs, &s, sizeof (s), sizeof (uint64_t));
155 dt_buf_write(dtp, &ddo->ddo_ldata, data, size, align);
157 return (ddo->ddo_nsecs++);
166 dof_add_usect(dt_dof_t *ddo, const void *data, uint32_t type,
169 dtrace_hdl_t *dtp = ddo->ddo_hdl;
176 s.dofs_offset = dt_buf_offset(&ddo->ddo_udata, align);
179 dt_buf_write(dtp, &ddo->ddo_secs, &s, sizeof (s), sizeof (uint64_t));
182 dt_buf_write(dtp, &ddo->ddo_udata, data, size, align);
184 return (ddo->ddo_nsecs++);
192 dof_add_string(dt_dof_t *ddo, const char *s)
194 dt_buf_t *bp = &ddo->ddo_strs;
200 dt_buf_write(ddo->ddo_hdl, bp, s, strlen(s) + 1, sizeof (char));
211 dof_add_difo(dt_dof_t *ddo, const dtrace_difo_t *dp)
225 dsecs[nsecs++] = dof_add_lsect(ddo, dp->dtdo_buf,
231 dsecs[nsecs++] = intsec = dof_add_lsect(ddo, dp->dtdo_inttab,
237 dsecs[nsecs++] = strsec = dof_add_lsect(ddo, dp->dtdo_strtab,
242 dsecs[nsecs++] = dof_add_lsect(ddo, dp->dtdo_vartab,
265 xlp->dofxr_xlator = ddo->ddo_xlimport[dxp->dx_id];
267 ddo->ddo_pgp->dp_xrefs[dxp->dx_id], dnp->dn_membid);
271 dsecs[nsecs++] = dof_add_lsect(ddo, xlt, DOF_SECT_XLTAB,
285 hdrsec = dof_add_lsect(ddo, dofd, DOF_SECT_DIFOHDR,
294 relsec = dof_add_lsect(ddo, dp->dtdo_kreltab, DOF_SECT_RELTAB,
307 (void) dof_add_lsect(ddo, &dofr, DOF_SECT_KRELHDR,
312 relsec = dof_add_lsect(ddo, dp->dtdo_ureltab, DOF_SECT_RELTAB,
325 (void) dof_add_lsect(ddo, &dofr, DOF_SECT_URELHDR,
333 dof_add_translator(dt_dof_t *ddo, const dt_xlator_t *dxp, uint_t type)
335 dtrace_hdl_t *dtp = ddo->ddo_hdl;
345 xst = type == DOF_SECT_XLIMPORT ? ddo->ddo_xlimport : ddo->ddo_xlexport;
350 dt_buf_reset(dtp, &ddo->ddo_xlms);
360 if (!BT_TEST(ddo->ddo_pgp->dp_xrefs[dxp->dx_id], i))
364 dofxm.dofxm_difo = dof_add_difo(ddo,
368 dofxm.dofxm_name = dof_add_string(ddo, dnp->dn_membname);
371 dt_buf_write(dtp, &ddo->ddo_xlms,
375 dofxl.dofxl_members = dof_add_lsect(ddo, NULL, DOF_SECT_XLMEMBERS,
376 sizeof (uint32_t), 0, sizeof (dofxm), dt_buf_len(&ddo->ddo_xlms));
378 dt_buf_concat(dtp, &ddo->ddo_ldata, &ddo->ddo_xlms, sizeof (uint32_t));
380 dofxl.dofxl_strtab = ddo->ddo_strsec;
381 dofxl.dofxl_argv = dof_add_string(ddo, ctf_type_name(
384 dofxl.dofxl_type = dof_add_string(ddo, ctf_type_name(
388 xst[dxp->dx_id] = dof_add_lsect(ddo, &dofxl, type,
396 dt_dof_t *ddo = data;
397 dtrace_hdl_t *dtp = ddo->ddo_hdl;
409 dofpr.dofpr_name = dof_add_string(ddo, prp->pr_name);
410 dofpr.dofpr_nargv = dt_buf_len(&ddo->ddo_strs);
413 (void) dof_add_string(ddo, ctf_type_name(dnp->dn_ctfp,
417 dofpr.dofpr_xargv = dt_buf_len(&ddo->ddo_strs);
420 (void) dof_add_string(ddo, ctf_type_name(dnp->dn_ctfp,
424 dofpr.dofpr_argidx = dt_buf_len(&ddo->ddo_args) / sizeof (uint8_t);
427 dt_buf_write(dtp, &ddo->ddo_args, &prp->pr_mapping[i],
440 dofpr.dofpr_func = dof_add_string(ddo, pip->pi_fname);
450 dt_buf_len(&ddo->ddo_offs) / sizeof (uint32_t);
452 dt_buf_write(dtp, &ddo->ddo_offs, pip->pi_offs,
456 dt_buf_len(&ddo->ddo_enoffs) / sizeof (uint32_t);
458 dt_buf_write(dtp, &ddo->ddo_enoffs, pip->pi_enoffs,
471 dofr.dofr_name = dof_add_string(ddo, pip->pi_rname);
473 dofr.dofr_offset = dt_buf_len(&ddo->ddo_probes);
476 dt_buf_write(dtp, &ddo->ddo_rels, &dofr,
479 dt_buf_write(dtp, &ddo->ddo_probes, &dofpr,
487 dof_add_provider(dt_dof_t *ddo, const dt_provider_t *pvp)
489 dtrace_hdl_t *dtp = ddo->ddo_hdl;
515 dof_add_translator(ddo,
517 dofs[xr++] = ddo->ddo_xlexport[i];
521 dt_buf_reset(dtp, &ddo->ddo_probes);
522 dt_buf_reset(dtp, &ddo->ddo_args);
523 dt_buf_reset(dtp, &ddo->ddo_offs);
524 dt_buf_reset(dtp, &ddo->ddo_enoffs);
525 dt_buf_reset(dtp, &ddo->ddo_rels);
527 (void) dt_idhash_iter(pvp->pv_probes, dof_add_probe, ddo);
529 if (dt_buf_len(&ddo->ddo_probes) == 0)
532 dofpv.dofpv_probes = dof_add_lsect(ddo, NULL, DOF_SECT_PROBES,
534 dt_buf_len(&ddo->ddo_probes));
536 dt_buf_concat(dtp, &ddo->ddo_ldata,
537 &ddo->ddo_probes, sizeof (uint64_t));
539 dofpv.dofpv_prargs = dof_add_lsect(ddo, NULL, DOF_SECT_PRARGS,
540 sizeof (uint8_t), 0, sizeof (uint8_t), dt_buf_len(&ddo->ddo_args));
542 dt_buf_concat(dtp, &ddo->ddo_ldata, &ddo->ddo_args, sizeof (uint8_t));
544 dofpv.dofpv_proffs = dof_add_lsect(ddo, NULL, DOF_SECT_PROFFS,
545 sizeof (uint_t), 0, sizeof (uint_t), dt_buf_len(&ddo->ddo_offs));
547 dt_buf_concat(dtp, &ddo->ddo_ldata, &ddo->ddo_offs, sizeof (uint_t));
549 if ((sz = dt_buf_len(&ddo->ddo_enoffs)) != 0) {
550 dofpv.dofpv_prenoffs = dof_add_lsect(ddo, NULL,
556 dt_buf_concat(dtp, &ddo->ddo_ldata, &ddo->ddo_enoffs, sizeof (uint_t));
558 dofpv.dofpv_strtab = ddo->ddo_strsec;
559 dofpv.dofpv_name = dof_add_string(ddo, pvp->pv_desc.dtvd_name);
567 dofs[0] = dof_add_lsect(ddo, &dofpv, DOF_SECT_PROVIDER,
572 dofr.dofr_relsec = dof_add_lsect(ddo, NULL, DOF_SECT_RELTAB,
574 dt_buf_len(&ddo->ddo_rels));
576 dt_buf_concat(dtp, &ddo->ddo_ldata, &ddo->ddo_rels, sizeof (uint64_t));
578 (void) dof_add_lsect(ddo, &dofr, DOF_SECT_URELHDR,
582 (void) dof_add_lsect(ddo, dofs, DOF_SECT_PREXPORT,
631 dt_dof_t *ddo = &dtp->dt_dof;
693 ddo->ddo_strsec = dof_add_lsect(ddo, NULL, DOF_SECT_STRTAB, 1, 0, 0, 0);
694 (void) dof_add_string(ddo, "");
705 dof_add_translator(ddo, dxp, DOF_SECT_XLIMPORT);
736 dofp.dofp_strtab = ddo->ddo_strsec;
737 dofp.dofp_provider = dof_add_string(ddo, pdp->dtpd_provider);
738 dofp.dofp_mod = dof_add_string(ddo, pdp->dtpd_mod);
739 dofp.dofp_func = dof_add_string(ddo, pdp->dtpd_func);
740 dofp.dofp_name = dof_add_string(ddo, pdp->dtpd_name);
743 probesec = dof_add_lsect(ddo, &dofp, DOF_SECT_PROBEDESC,
752 prdsec = dof_add_difo(ddo, edp->dted_pred.dtpdd_difo);
763 dof_add_difo(ddo, ap->dtad_difo);
778 strndx = dof_add_string(ddo, fmt);
780 strndx = dof_add_string(ddo,
794 dofa[i].dofa_strtab = ddo->ddo_strsec;
806 actsec = dof_add_lsect(ddo, dofa, DOF_SECT_ACTDESC,
821 (void) dof_add_lsect(ddo, &dofe, DOF_SECT_ECBDESC,
832 if (dof_add_provider(ddo, pvp) != 0)
842 (void) dof_add_usect(ddo, _dtrace_version, DOF_SECT_COMMENTS,
844 (void) dof_add_usect(ddo, &dtp->dt_uts, DOF_SECT_UTSNAME,
852 h.dofh_secnum = ddo->ddo_nsecs;
853 ssize = sizeof (h) + dt_buf_len(&ddo->ddo_secs);
856 dt_buf_len(&ddo->ddo_ldata) +
857 dt_buf_len(&ddo->ddo_strs);
859 if (dt_buf_len(&ddo->ddo_udata) != 0) {
861 h.dofh_filesz = lsize + dt_buf_len(&ddo->ddo_udata);
872 if ((i = dt_buf_error(&ddo->ddo_secs)) != 0) {
877 sp = dt_buf_ptr(&ddo->ddo_secs);
878 assert(sp[ddo->ddo_strsec].dofs_type == DOF_SECT_STRTAB);
879 assert(ssize == sizeof (h) + sizeof (dof_sec_t) * ddo->ddo_nsecs);
881 sp[ddo->ddo_strsec].dofs_offset = ssize + dt_buf_len(&ddo->ddo_ldata);
882 sp[ddo->ddo_strsec].dofs_size = dt_buf_len(&ddo->ddo_strs);
888 for (i = 0; i < ddo->ddo_nsecs; i++, sp++) {
889 if (i == ddo->ddo_strsec)
906 dt_buf_concat(dtp, &dof, &ddo->ddo_secs, sizeof (uint64_t));
907 dt_buf_concat(dtp, &dof, &ddo->ddo_ldata, sizeof (uint64_t));
908 dt_buf_concat(dtp, &dof, &ddo->ddo_strs, sizeof (char));
909 dt_buf_concat(dtp, &dof, &ddo->ddo_udata, sizeof (uint64_t));