Lines Matching defs:dof
9474 dof_hdr_t *dof = (dof_hdr_t *)daddr;
9489 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9490 provider->dofpv_strtab * dof->dofh_secsize);
9491 prb_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9492 provider->dofpv_probes * dof->dofh_secsize);
9493 arg_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9494 provider->dofpv_prargs * dof->dofh_secsize);
9495 off_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9496 provider->dofpv_proffs * dof->dofh_secsize);
9506 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
9508 enoff_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9509 provider->dofpv_prenoffs * dof->dofh_secsize);
9563 dof_hdr_t *dof = (dof_hdr_t *)daddr;
9568 for (i = 0; i < dof->dofh_secnum; i++) {
9570 dof->dofh_secoff + i * dof->dofh_secsize);
9592 dof_hdr_t *dof = (dof_hdr_t *)daddr;
9601 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9602 provider->dofpv_strtab * dof->dofh_secsize);
9620 dof_hdr_t *dof = (dof_hdr_t *)daddr;
9625 for (i = 0; i < dof->dofh_secnum; i++) {
9627 dof->dofh_secoff + i * dof->dofh_secsize);
13201 dtrace_dof_error(dof_hdr_t *dof, const char *str)
13219 dof_hdr_t *dof;
13228 dof = kmem_zalloc(len, KM_SLEEP);
13229 dof->dofh_ident[DOF_ID_MAG0] = DOF_MAG_MAG0;
13230 dof->dofh_ident[DOF_ID_MAG1] = DOF_MAG_MAG1;
13231 dof->dofh_ident[DOF_ID_MAG2] = DOF_MAG_MAG2;
13232 dof->dofh_ident[DOF_ID_MAG3] = DOF_MAG_MAG3;
13234 dof->dofh_ident[DOF_ID_MODEL] = DOF_MODEL_NATIVE;
13235 dof->dofh_ident[DOF_ID_ENCODING] = DOF_ENCODE_NATIVE;
13236 dof->dofh_ident[DOF_ID_VERSION] = DOF_VERSION;
13237 dof->dofh_ident[DOF_ID_DIFVERS] = DIF_VERSION;
13238 dof->dofh_ident[DOF_ID_DIFIREG] = DIF_DIR_NREGS;
13239 dof->dofh_ident[DOF_ID_DIFTREG] = DIF_DTR_NREGS;
13241 dof->dofh_flags = 0;
13242 dof->dofh_hdrsize = sizeof (dof_hdr_t);
13243 dof->dofh_secsize = sizeof (dof_sec_t);
13244 dof->dofh_secnum = 1; /* only DOF_SECT_OPTDESC */
13245 dof->dofh_secoff = sizeof (dof_hdr_t);
13246 dof->dofh_loadsz = len;
13247 dof->dofh_filesz = len;
13248 dof->dofh_pad = 0;
13253 sec = (dof_sec_t *)((uintptr_t)dof + sizeof (dof_hdr_t));
13262 sec->dofs_offset = (uintptr_t)opt - (uintptr_t)dof;
13271 return (dof);
13277 dof_hdr_t hdr, *dof;
13306 dof = kmem_alloc(hdr.dofh_loadsz, KM_SLEEP);
13308 if (copyin((void *)uarg, dof, hdr.dofh_loadsz) != 0 ||
13309 dof->dofh_loadsz != hdr.dofh_loadsz) {
13310 kmem_free(dof, hdr.dofh_loadsz);
13315 return (dof);
13322 dof_hdr_t hdr, *dof;
13356 dof = kmem_alloc(loadsz, KM_SLEEP);
13358 if (proc_readmem(td, p, uarg, dof, loadsz) != loadsz ||
13359 dof->dofh_loadsz != loadsz) {
13360 kmem_free(dof, hdr.dofh_loadsz);
13365 return (dof);
13412 dof_hdr_t *dof;
13415 dof = NULL;
13466 dof = (dof_hdr_t *)dofbuf;
13467 if (bytes < dof->dofh_loadsz) {
13472 if (dof->dofh_loadsz >= dtrace_dof_maxsize) {
13477 return (dof);
13480 free(dof, M_SOLARIS);
13486 dof_hdr_t *dof;
13518 dof = kmem_alloc(loadsz, KM_SLEEP);
13519 bcopy(buf, dof, loadsz);
13522 return (dof);
13527 dtrace_dof_destroy(dof_hdr_t *dof)
13529 kmem_free(dof, dof->dofh_loadsz);
13539 dtrace_dof_sect(dof_hdr_t *dof, uint32_t type, dof_secidx_t i)
13542 ((uintptr_t)dof + dof->dofh_secoff + i * dof->dofh_secsize);
13544 if (i >= dof->dofh_secnum) {
13545 dtrace_dof_error(dof, "referenced section index is invalid");
13550 dtrace_dof_error(dof, "referenced section is not loadable");
13555 dtrace_dof_error(dof, "referenced section is the wrong type");
13563 dtrace_dof_probedesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_probedesc_t *desc)
13567 uintptr_t daddr = (uintptr_t)dof;
13572 dtrace_dof_error(dof, "invalid probe section");
13577 dtrace_dof_error(dof, "bad alignment in probe description");
13581 if (sec->dofs_offset + sizeof (dof_probedesc_t) > dof->dofh_loadsz) {
13582 dtrace_dof_error(dof, "truncated probe description");
13587 strtab = dtrace_dof_sect(dof, DOF_SECT_STRTAB, probe->dofp_strtab);
13596 dtrace_dof_error(dof, "corrupt probe provider");
13605 dtrace_dof_error(dof, "corrupt probe module");
13613 dtrace_dof_error(dof, "corrupt probe function");
13621 dtrace_dof_error(dof, "corrupt probe name");
13632 dtrace_dof_difo(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
13638 uintptr_t daddr = (uintptr_t)dof;
13670 dtrace_dof_error(dof, "invalid DIFO header section");
13675 dtrace_dof_error(dof, "bad alignment in DIFO header");
13681 dtrace_dof_error(dof, "bad size in DIFO header");
13696 if ((subsec = dtrace_dof_sect(dof, DOF_SECT_NONE,
13701 dtrace_dof_error(dof, "exceeds maximum size");
13712 dtrace_dof_error(dof, "section not loaded");
13717 dtrace_dof_error(dof, "bad alignment");
13725 dtrace_dof_error(dof, difo[i].msg);
13730 dtrace_dof_error(dof, "entry size mismatch");
13736 dtrace_dof_error(dof, "corrupt entry size");
13757 dtrace_dof_error(dof, "unrecognized DIFO subsection");
13766 dtrace_dof_error(dof, "missing DIF text");
13806 dtrace_dof_predicate(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
13811 if ((dp = dtrace_dof_difo(dof, sec, vstate, cr)) == NULL)
13818 dtrace_dof_actdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
13825 uintptr_t daddr = (uintptr_t)dof;
13830 dtrace_dof_error(dof, "invalid action section");
13834 if (sec->dofs_offset + sizeof (dof_actdesc_t) > dof->dofh_loadsz) {
13835 dtrace_dof_error(dof, "truncated action description");
13840 dtrace_dof_error(dof, "bad alignment in action description");
13845 dtrace_dof_error(dof, "section entry size exceeds total size");
13850 dtrace_dof_error(dof, "bad entry size in action description");
13855 dtrace_dof_error(dof, "actions exceed dtrace_actions_max");
13879 if ((strtab = dtrace_dof_sect(dof,
13883 str = (char *)((uintptr_t)dof +
13892 dtrace_dof_error(dof, "bogus format string");
13897 dtrace_dof_error(dof, "empty format string");
13928 if ((difosec = dtrace_dof_sect(dof,
13932 act->dtad_difo = dtrace_dof_difo(dof, difosec, vstate, cr);
13951 dtrace_dof_ecbdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
13960 dtrace_dof_error(dof, "truncated ECB description");
13965 dtrace_dof_error(dof, "bad alignment in ECB description");
13969 ecb = (dof_ecbdesc_t *)((uintptr_t)dof + (uintptr_t)sec->dofs_offset);
13970 sec = dtrace_dof_sect(dof, DOF_SECT_PROBEDESC, ecb->dofe_probes);
13979 if (dtrace_dof_probedesc(dof, sec, desc) == NULL)
13983 if ((sec = dtrace_dof_sect(dof,
13987 if ((pred = dtrace_dof_predicate(dof, sec, vstate, cr)) == NULL)
13994 if ((sec = dtrace_dof_sect(dof,
13998 ep->dted_action = dtrace_dof_actdesc(dof, sec, vstate, cr);
14020 dtrace_dof_relocate(dof_hdr_t *dof, dof_sec_t *sec, uint64_t ubase,
14023 uintptr_t daddr = (uintptr_t)dof;
14033 dtrace_dof_error(dof, "invalid relocation header");
14037 ss = dtrace_dof_sect(dof, DOF_SECT_STRTAB, dofr->dofr_strtab);
14038 rs = dtrace_dof_sect(dof, DOF_SECT_RELTAB, dofr->dofr_relsec);
14039 ts = dtrace_dof_sect(dof, DOF_SECT_NONE, dofr->dofr_tgtsec);
14047 dtrace_dof_error(dof, "invalid relocation section");
14064 dtrace_dof_error(dof, "bad relocation offset");
14069 dtrace_dof_error(dof, "bad relocation offset");
14074 dtrace_dof_error(dof, "misaligned setx relo");
14085 dtrace_dof_error(dof, "invalid relocation type");
14102 dtrace_dof_slurp(dof_hdr_t *dof, dtrace_vstate_t *vstate, cred_t *cr,
14105 uint64_t len = dof->dofh_loadsz, seclen;
14106 uintptr_t daddr = (uintptr_t)dof;
14112 ASSERT(dof->dofh_loadsz >= sizeof (dof_hdr_t));
14119 if (bcmp(&dof->dofh_ident[DOF_ID_MAG0],
14121 dtrace_dof_error(dof, "DOF magic string mismatch");
14125 if (dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_ILP32 &&
14126 dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_LP64) {
14127 dtrace_dof_error(dof, "DOF has invalid data model");
14131 if (dof->dofh_ident[DOF_ID_ENCODING] != DOF_ENCODE_NATIVE) {
14132 dtrace_dof_error(dof, "DOF encoding mismatch");
14136 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
14137 dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_2) {
14138 dtrace_dof_error(dof, "DOF version mismatch");
14142 if (dof->dofh_ident[DOF_ID_DIFVERS] != DIF_VERSION_2) {
14143 dtrace_dof_error(dof, "DOF uses unsupported instruction set");
14147 if (dof->dofh_ident[DOF_ID_DIFIREG] > DIF_DIR_NREGS) {
14148 dtrace_dof_error(dof, "DOF uses too many integer registers");
14152 if (dof->dofh_ident[DOF_ID_DIFTREG] > DIF_DTR_NREGS) {
14153 dtrace_dof_error(dof, "DOF uses too many tuple registers");
14158 if (dof->dofh_ident[i] != 0) {
14159 dtrace_dof_error(dof, "DOF has invalid ident byte set");
14164 if (dof->dofh_flags & ~DOF_FL_VALID) {
14165 dtrace_dof_error(dof, "DOF has invalid flag bits set");
14169 if (dof->dofh_secsize == 0) {
14170 dtrace_dof_error(dof, "zero section header size");
14179 seclen = (uint64_t)dof->dofh_secnum * (uint64_t)dof->dofh_secsize;
14181 if (dof->dofh_secoff > len || seclen > len ||
14182 dof->dofh_secoff + seclen > len) {
14183 dtrace_dof_error(dof, "truncated section headers");
14187 if (!IS_P2ALIGNED(dof->dofh_secoff, sizeof (uint64_t))) {
14188 dtrace_dof_error(dof, "misaligned section headers");
14192 if (!IS_P2ALIGNED(dof->dofh_secsize, sizeof (uint64_t))) {
14193 dtrace_dof_error(dof, "misaligned section size");
14202 for (i = 0; i < dof->dofh_secnum; i++) {
14204 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14212 dtrace_dof_error(dof, "illegal sections "
14220 dtrace_dof_error(dof, "loadable section with load "
14229 dtrace_dof_error(dof, "bad section alignment");
14234 dtrace_dof_error(dof, "misaligned section");
14240 dtrace_dof_error(dof, "corrupt section header");
14246 dtrace_dof_error(dof, "non-terminating string table");
14256 for (i = 0; i < dof->dofh_secnum; i++) {
14258 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14265 if (dtrace_dof_relocate(dof, sec, ubase, udaddr) != 0)
14274 for (i = 0; i < dof->dofh_secnum; i++) {
14276 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14281 if ((ep = dtrace_dof_ecbdesc(dof, sec, vstate, cr)) == NULL) {
14298 dtrace_dof_options(dof_hdr_t *dof, dtrace_state_t *state)
14305 for (i = 0; i < dof->dofh_secnum; i++) {
14306 dof_sec_t *sec = (dof_sec_t *)((uintptr_t)dof +
14307 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14313 dtrace_dof_error(dof, "bad alignment in "
14319 dtrace_dof_error(dof, "zeroed option entry size");
14324 dtrace_dof_error(dof, "bad option entry size");
14329 desc = (dof_optdesc_t *)((uintptr_t)dof +
14333 dtrace_dof_error(dof, "non-zero option string");
14338 dtrace_dof_error(dof, "unset option");
14344 dtrace_dof_error(dof, "rejected option");
15564 dof_hdr_t *dof;
15565 char c[32]; /* enough for "dof-data-" + digits */
15571 (void) snprintf(c, sizeof (c), "dof-data-%d", i);
15575 if ((dof = dtrace_dof_property(c)) == NULL) {
15590 dtrace_dof_destroy(dof);
15615 dtrace_dof_destroy(dof);
15620 rv = dtrace_dof_slurp(dof, &state->dts_vstate, CRED(),
15624 rv = dtrace_dof_options(dof, state);
15627 dtrace_dof_destroy(dof);
16146 dof_hdr_t *dof;
16148 dof = (dof_hdr_t *)(uintptr_t)hprov->dthp_prov.dofhp_dof;
16149 dtrace_dof_destroy(dof);
16157 dtrace_helper_provider_validate(dof_hdr_t *dof, dof_sec_t *sec)
16159 uintptr_t daddr = (uintptr_t)dof;
16172 dtrace_dof_error(dof, "misaligned section offset");
16181 ((dof->dofh_ident[DOF_ID_VERSION] == DOF_VERSION_1) ?
16184 dtrace_dof_error(dof, "provider section too small");
16189 str_sec = dtrace_dof_sect(dof, DOF_SECT_STRTAB, provider->dofpv_strtab);
16190 prb_sec = dtrace_dof_sect(dof, DOF_SECT_PROBES, provider->dofpv_probes);
16191 arg_sec = dtrace_dof_sect(dof, DOF_SECT_PRARGS, provider->dofpv_prargs);
16192 off_sec = dtrace_dof_sect(dof, DOF_SECT_PROFFS, provider->dofpv_proffs);
16200 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
16202 (enoff_sec = dtrace_dof_sect(dof, DOF_SECT_PRENOFFS,
16210 dtrace_dof_error(dof, "invalid provider name");
16216 dtrace_dof_error(dof, "invalid entry size");
16221 dtrace_dof_error(dof, "misaligned entry size");
16226 dtrace_dof_error(dof, "invalid entry size");
16231 dtrace_dof_error(dof, "misaligned section offset");
16236 dtrace_dof_error(dof, "invalid entry size");
16252 dtrace_dof_error(dof, "invalid function name");
16257 dtrace_dof_error(dof, "function name too long");
16269 dtrace_dof_error(dof, "invalid probe name");
16281 dtrace_dof_error(dof, "invalid probe offset");
16285 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1) {
16295 dtrace_dof_error(dof, "is-enabled "
16303 dtrace_dof_error(dof, "invalid is-enabled "
16309 dtrace_dof_error(dof, "zero probe and "
16314 dtrace_dof_error(dof, "zero probe offsets");
16322 dtrace_dof_error(dof, "invalid args");
16330 dtrace_dof_error(dof, "bad "
16337 dtrace_dof_error(dof, "native "
16349 dtrace_dof_error(dof, "bad "
16355 dtrace_dof_error(dof, "bad "
16362 dtrace_dof_error(dof, "translated argument "
16376 dtrace_helper_slurp(dof_hdr_t *dof, dof_helper_t *dhp, struct proc *p)
16382 uintptr_t daddr = (uintptr_t)dof;
16391 if ((rv = dtrace_dof_slurp(dof, vstate, NULL, &enab, dhp->dofhp_addr,
16393 dtrace_dof_destroy(dof);
16400 for (i = 0; i < dof->dofh_secnum; i++) {
16402 dof->dofh_secoff + i * dof->dofh_secsize);
16407 if (dtrace_helper_provider_validate(dof, sec) != 0) {
16409 dtrace_dof_destroy(dof);
16441 dtrace_dof_destroy(dof);
16449 dtrace_dof_error(dof, "unmatched helpers");
16461 dhp->dofhp_dof = (uint64_t)(uintptr_t)dof;
16473 dtrace_dof_destroy(dof);
17405 dof_hdr_t *dof = dtrace_dof_copyin(arg, &rval);
17407 if (dof == NULL)
17413 * dtrace_helper_slurp() takes responsibility for the dof --
17416 if ((rval = dtrace_helper_slurp(dof, dhp)) != -1) {
17668 dof_hdr_t *dof;
17685 if ((dof = dtrace_dof_copyin(arg, &rval)) == NULL)
17695 dtrace_dof_destroy(dof);
17699 if (dtrace_dof_slurp(dof, vstate, cr, &enab, 0, B_TRUE) != 0) {
17702 dtrace_dof_destroy(dof);
17706 if ((rval = dtrace_dof_options(dof, state)) != 0) {
17710 dtrace_dof_destroy(dof);
17722 dtrace_dof_destroy(dof);
17917 dof_hdr_t hdr, *dof;
17924 dof = dtrace_dof_create(state);
17927 len = MIN(hdr.dofh_loadsz, dof->dofh_loadsz);
17928 rval = copyout(dof, (void *)arg, len);
17929 dtrace_dof_destroy(dof);