Lines Matching defs:dof

8881 	dof_hdr_t *dof = (dof_hdr_t *)daddr;
8896 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8897 provider->dofpv_strtab * dof->dofh_secsize);
8898 prb_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8899 provider->dofpv_probes * dof->dofh_secsize);
8900 arg_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8901 provider->dofpv_prargs * dof->dofh_secsize);
8902 off_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8903 provider->dofpv_proffs * dof->dofh_secsize);
8913 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
8915 enoff_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8916 provider->dofpv_prenoffs * dof->dofh_secsize);
8966 dof_hdr_t *dof = (dof_hdr_t *)daddr;
8971 for (i = 0; i < dof->dofh_secnum; i++) {
8973 dof->dofh_secoff + i * dof->dofh_secsize);
8995 dof_hdr_t *dof = (dof_hdr_t *)daddr;
9004 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9005 provider->dofpv_strtab * dof->dofh_secsize);
9023 dof_hdr_t *dof = (dof_hdr_t *)daddr;
9028 for (i = 0; i < dof->dofh_secnum; i++) {
9030 dof->dofh_secoff + i * dof->dofh_secsize);
12471 dtrace_dof_error(dof_hdr_t *dof, const char *str)
12489 dof_hdr_t *dof;
12498 dof = kmem_zalloc(len, KM_SLEEP);
12499 dof->dofh_ident[DOF_ID_MAG0] = DOF_MAG_MAG0;
12500 dof->dofh_ident[DOF_ID_MAG1] = DOF_MAG_MAG1;
12501 dof->dofh_ident[DOF_ID_MAG2] = DOF_MAG_MAG2;
12502 dof->dofh_ident[DOF_ID_MAG3] = DOF_MAG_MAG3;
12504 dof->dofh_ident[DOF_ID_MODEL] = DOF_MODEL_NATIVE;
12505 dof->dofh_ident[DOF_ID_ENCODING] = DOF_ENCODE_NATIVE;
12506 dof->dofh_ident[DOF_ID_VERSION] = DOF_VERSION;
12507 dof->dofh_ident[DOF_ID_DIFVERS] = DIF_VERSION;
12508 dof->dofh_ident[DOF_ID_DIFIREG] = DIF_DIR_NREGS;
12509 dof->dofh_ident[DOF_ID_DIFTREG] = DIF_DTR_NREGS;
12511 dof->dofh_flags = 0;
12512 dof->dofh_hdrsize = sizeof (dof_hdr_t);
12513 dof->dofh_secsize = sizeof (dof_sec_t);
12514 dof->dofh_secnum = 1; /* only DOF_SECT_OPTDESC */
12515 dof->dofh_secoff = sizeof (dof_hdr_t);
12516 dof->dofh_loadsz = len;
12517 dof->dofh_filesz = len;
12518 dof->dofh_pad = 0;
12523 sec = (dof_sec_t *)((uintptr_t)dof + sizeof (dof_hdr_t));
12532 sec->dofs_offset = (uintptr_t)opt - (uintptr_t)dof;
12541 return (dof);
12547 dof_hdr_t hdr, *dof;
12576 dof = kmem_alloc(hdr.dofh_loadsz, KM_SLEEP);
12578 if (copyin((void *)uarg, dof, hdr.dofh_loadsz) != 0 ||
12579 dof->dofh_loadsz != hdr.dofh_loadsz) {
12580 kmem_free(dof, hdr.dofh_loadsz);
12585 return (dof);
12594 dof_hdr_t *dof;
12626 dof = kmem_alloc(loadsz, KM_SLEEP);
12627 bcopy(buf, dof, loadsz);
12630 return (dof);
12634 dtrace_dof_destroy(dof_hdr_t *dof)
12636 kmem_free(dof, dof->dofh_loadsz);
12646 dtrace_dof_sect(dof_hdr_t *dof, uint32_t type, dof_secidx_t i)
12649 ((uintptr_t)dof + dof->dofh_secoff + i * dof->dofh_secsize);
12651 if (i >= dof->dofh_secnum) {
12652 dtrace_dof_error(dof, "referenced section index is invalid");
12657 dtrace_dof_error(dof, "referenced section is not loadable");
12662 dtrace_dof_error(dof, "referenced section is the wrong type");
12670 dtrace_dof_probedesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_probedesc_t *desc)
12674 uintptr_t daddr = (uintptr_t)dof;
12679 dtrace_dof_error(dof, "invalid probe section");
12684 dtrace_dof_error(dof, "bad alignment in probe description");
12688 if (sec->dofs_offset + sizeof (dof_probedesc_t) > dof->dofh_loadsz) {
12689 dtrace_dof_error(dof, "truncated probe description");
12694 strtab = dtrace_dof_sect(dof, DOF_SECT_STRTAB, probe->dofp_strtab);
12703 dtrace_dof_error(dof, "corrupt probe provider");
12712 dtrace_dof_error(dof, "corrupt probe module");
12720 dtrace_dof_error(dof, "corrupt probe function");
12728 dtrace_dof_error(dof, "corrupt probe name");
12739 dtrace_dof_difo(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12745 uintptr_t daddr = (uintptr_t)dof;
12777 dtrace_dof_error(dof, "invalid DIFO header section");
12782 dtrace_dof_error(dof, "bad alignment in DIFO header");
12788 dtrace_dof_error(dof, "bad size in DIFO header");
12803 if ((subsec = dtrace_dof_sect(dof, DOF_SECT_NONE,
12808 dtrace_dof_error(dof, "exceeds maximum size");
12819 dtrace_dof_error(dof, "section not loaded");
12824 dtrace_dof_error(dof, "bad alignment");
12832 dtrace_dof_error(dof, difo[i].msg);
12837 dtrace_dof_error(dof, "entry size mismatch");
12843 dtrace_dof_error(dof, "corrupt entry size");
12864 dtrace_dof_error(dof, "unrecognized DIFO subsection");
12873 dtrace_dof_error(dof, "missing DIF text");
12913 dtrace_dof_predicate(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12918 if ((dp = dtrace_dof_difo(dof, sec, vstate, cr)) == NULL)
12925 dtrace_dof_actdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12932 uintptr_t daddr = (uintptr_t)dof;
12937 dtrace_dof_error(dof, "invalid action section");
12941 if (sec->dofs_offset + sizeof (dof_actdesc_t) > dof->dofh_loadsz) {
12942 dtrace_dof_error(dof, "truncated action description");
12947 dtrace_dof_error(dof, "bad alignment in action description");
12952 dtrace_dof_error(dof, "section entry size exceeds total size");
12957 dtrace_dof_error(dof, "bad entry size in action description");
12962 dtrace_dof_error(dof, "actions exceed dtrace_actions_max");
12986 if ((strtab = dtrace_dof_sect(dof,
12990 str = (char *)((uintptr_t)dof +
12999 dtrace_dof_error(dof, "bogus format string");
13004 dtrace_dof_error(dof, "empty format string");
13035 if ((difosec = dtrace_dof_sect(dof,
13039 act->dtad_difo = dtrace_dof_difo(dof, difosec, vstate, cr);
13058 dtrace_dof_ecbdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
13067 dtrace_dof_error(dof, "truncated ECB description");
13072 dtrace_dof_error(dof, "bad alignment in ECB description");
13076 ecb = (dof_ecbdesc_t *)((uintptr_t)dof + (uintptr_t)sec->dofs_offset);
13077 sec = dtrace_dof_sect(dof, DOF_SECT_PROBEDESC, ecb->dofe_probes);
13086 if (dtrace_dof_probedesc(dof, sec, desc) == NULL)
13090 if ((sec = dtrace_dof_sect(dof,
13094 if ((pred = dtrace_dof_predicate(dof, sec, vstate, cr)) == NULL)
13101 if ((sec = dtrace_dof_sect(dof,
13105 ep->dted_action = dtrace_dof_actdesc(dof, sec, vstate, cr);
13127 dtrace_dof_relocate(dof_hdr_t *dof, dof_sec_t *sec, uint64_t ubase)
13129 uintptr_t daddr = (uintptr_t)dof;
13138 dtrace_dof_error(dof, "invalid relocation header");
13142 ss = dtrace_dof_sect(dof, DOF_SECT_STRTAB, dofr->dofr_strtab);
13143 rs = dtrace_dof_sect(dof, DOF_SECT_RELTAB, dofr->dofr_relsec);
13144 ts = dtrace_dof_sect(dof, DOF_SECT_NONE, dofr->dofr_tgtsec);
13151 dtrace_dof_error(dof, "invalid relocation section");
13167 dtrace_dof_error(dof, "bad relocation offset");
13172 dtrace_dof_error(dof, "misaligned setx relo");
13179 dtrace_dof_error(dof, "invalid relocation type");
13196 dtrace_dof_slurp(dof_hdr_t *dof, dtrace_vstate_t *vstate, cred_t *cr,
13199 uint64_t len = dof->dofh_loadsz, seclen;
13200 uintptr_t daddr = (uintptr_t)dof;
13206 ASSERT(dof->dofh_loadsz >= sizeof (dof_hdr_t));
13213 if (bcmp(&dof->dofh_ident[DOF_ID_MAG0],
13215 dtrace_dof_error(dof, "DOF magic string mismatch");
13219 if (dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_ILP32 &&
13220 dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_LP64) {
13221 dtrace_dof_error(dof, "DOF has invalid data model");
13225 if (dof->dofh_ident[DOF_ID_ENCODING] != DOF_ENCODE_NATIVE) {
13226 dtrace_dof_error(dof, "DOF encoding mismatch");
13230 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
13231 dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_2) {
13232 dtrace_dof_error(dof, "DOF version mismatch");
13236 if (dof->dofh_ident[DOF_ID_DIFVERS] != DIF_VERSION_2) {
13237 dtrace_dof_error(dof, "DOF uses unsupported instruction set");
13241 if (dof->dofh_ident[DOF_ID_DIFIREG] > DIF_DIR_NREGS) {
13242 dtrace_dof_error(dof, "DOF uses too many integer registers");
13246 if (dof->dofh_ident[DOF_ID_DIFTREG] > DIF_DTR_NREGS) {
13247 dtrace_dof_error(dof, "DOF uses too many tuple registers");
13252 if (dof->dofh_ident[i] != 0) {
13253 dtrace_dof_error(dof, "DOF has invalid ident byte set");
13258 if (dof->dofh_flags & ~DOF_FL_VALID) {
13259 dtrace_dof_error(dof, "DOF has invalid flag bits set");
13263 if (dof->dofh_secsize == 0) {
13264 dtrace_dof_error(dof, "zero section header size");
13273 seclen = (uint64_t)dof->dofh_secnum * (uint64_t)dof->dofh_secsize;
13275 if (dof->dofh_secoff > len || seclen > len ||
13276 dof->dofh_secoff + seclen > len) {
13277 dtrace_dof_error(dof, "truncated section headers");
13281 if (!IS_P2ALIGNED(dof->dofh_secoff, sizeof (uint64_t))) {
13282 dtrace_dof_error(dof, "misaligned section headers");
13286 if (!IS_P2ALIGNED(dof->dofh_secsize, sizeof (uint64_t))) {
13287 dtrace_dof_error(dof, "misaligned section size");
13296 for (i = 0; i < dof->dofh_secnum; i++) {
13298 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13306 dtrace_dof_error(dof, "illegal sections "
13314 dtrace_dof_error(dof, "loadable section with load "
13323 dtrace_dof_error(dof, "bad section alignment");
13328 dtrace_dof_error(dof, "misaligned section");
13334 dtrace_dof_error(dof, "corrupt section header");
13340 dtrace_dof_error(dof, "non-terminating string table");
13350 for (i = 0; i < dof->dofh_secnum; i++) {
13352 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13359 if (dtrace_dof_relocate(dof, sec, ubase) != 0)
13368 for (i = 0; i < dof->dofh_secnum; i++) {
13370 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13375 if ((ep = dtrace_dof_ecbdesc(dof, sec, vstate, cr)) == NULL) {
13392 dtrace_dof_options(dof_hdr_t *dof, dtrace_state_t *state)
13399 for (i = 0; i < dof->dofh_secnum; i++) {
13400 dof_sec_t *sec = (dof_sec_t *)((uintptr_t)dof +
13401 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13407 dtrace_dof_error(dof, "bad alignment in "
13413 dtrace_dof_error(dof, "zeroed option entry size");
13418 dtrace_dof_error(dof, "bad option entry size");
13423 desc = (dof_optdesc_t *)((uintptr_t)dof +
13427 dtrace_dof_error(dof, "non-zero option string");
13432 dtrace_dof_error(dof, "unset option");
13438 dtrace_dof_error(dof, "rejected option");
14515 dof_hdr_t *dof;
14516 char c[32]; /* enough for "dof-data-" + digits */
14522 (void) snprintf(c, sizeof (c), "dof-data-%d", i);
14526 if ((dof = dtrace_dof_property(c)) == NULL) {
14540 dtrace_dof_destroy(dof);
14564 dtrace_dof_destroy(dof);
14569 rv = dtrace_dof_slurp(dof, &state->dts_vstate, CRED(),
14573 rv = dtrace_dof_options(dof, state);
14576 dtrace_dof_destroy(dof);
15097 dof_hdr_t *dof;
15099 dof = (dof_hdr_t *)(uintptr_t)hprov->dthp_prov.dofhp_dof;
15100 dtrace_dof_destroy(dof);
15108 dtrace_helper_provider_validate(dof_hdr_t *dof, dof_sec_t *sec)
15110 uintptr_t daddr = (uintptr_t)dof;
15123 dtrace_dof_error(dof, "misaligned section offset");
15132 ((dof->dofh_ident[DOF_ID_VERSION] == DOF_VERSION_1) ?
15135 dtrace_dof_error(dof, "provider section too small");
15140 str_sec = dtrace_dof_sect(dof, DOF_SECT_STRTAB, provider->dofpv_strtab);
15141 prb_sec = dtrace_dof_sect(dof, DOF_SECT_PROBES, provider->dofpv_probes);
15142 arg_sec = dtrace_dof_sect(dof, DOF_SECT_PRARGS, provider->dofpv_prargs);
15143 off_sec = dtrace_dof_sect(dof, DOF_SECT_PROFFS, provider->dofpv_proffs);
15151 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
15153 (enoff_sec = dtrace_dof_sect(dof, DOF_SECT_PRENOFFS,
15161 dtrace_dof_error(dof, "invalid provider name");
15167 dtrace_dof_error(dof, "invalid entry size");
15172 dtrace_dof_error(dof, "misaligned entry size");
15177 dtrace_dof_error(dof, "invalid entry size");
15182 dtrace_dof_error(dof, "misaligned section offset");
15187 dtrace_dof_error(dof, "invalid entry size");
15203 dtrace_dof_error(dof, "invalid function name");
15208 dtrace_dof_error(dof, "function name too long");
15214 dtrace_dof_error(dof, "invalid probe name");
15226 dtrace_dof_error(dof, "invalid probe offset");
15230 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1) {
15240 dtrace_dof_error(dof, "is-enabled "
15248 dtrace_dof_error(dof, "invalid is-enabled "
15254 dtrace_dof_error(dof, "zero probe and "
15259 dtrace_dof_error(dof, "zero probe offsets");
15267 dtrace_dof_error(dof, "invalid args");
15275 dtrace_dof_error(dof, "bad "
15282 dtrace_dof_error(dof, "native "
15294 dtrace_dof_error(dof, "bad "
15300 dtrace_dof_error(dof, "bad "
15307 dtrace_dof_error(dof, "translated argument "
15321 dtrace_helper_slurp(dof_hdr_t *dof, dof_helper_t *dhp)
15327 uintptr_t daddr = (uintptr_t)dof;
15336 if ((rv = dtrace_dof_slurp(dof, vstate, NULL, &enab,
15338 dtrace_dof_destroy(dof);
15346 for (i = 0; i < dof->dofh_secnum; i++) {
15348 dof->dofh_secoff + i * dof->dofh_secsize);
15353 if (dtrace_helper_provider_validate(dof, sec) != 0) {
15355 dtrace_dof_destroy(dof);
15387 dtrace_dof_destroy(dof);
15395 dtrace_dof_error(dof, "unmatched helpers");
15407 dhp->dofhp_dof = (uint64_t)(uintptr_t)dof;
15419 dtrace_dof_destroy(dof);
16219 dof_hdr_t *dof = dtrace_dof_copyin(arg, &rval);
16221 if (dof == NULL)
16227 * dtrace_helper_slurp() takes responsibility for the dof --
16230 if ((rval = dtrace_helper_slurp(dof, dhp)) != -1) {
16481 dof_hdr_t *dof;
16498 if ((dof = dtrace_dof_copyin(arg, &rval)) == NULL)
16508 dtrace_dof_destroy(dof);
16512 if (dtrace_dof_slurp(dof, vstate, cr, &enab, 0, B_TRUE) != 0) {
16515 dtrace_dof_destroy(dof);
16519 if ((rval = dtrace_dof_options(dof, state)) != 0) {
16523 dtrace_dof_destroy(dof);
16535 dtrace_dof_destroy(dof);
16730 dof_hdr_t hdr, *dof;
16737 dof = dtrace_dof_create(state);
16740 len = MIN(hdr.dofh_loadsz, dof->dofh_loadsz);
16741 rval = copyout(dof, (void *)arg, len);
16742 dtrace_dof_destroy(dof);