Lines Matching refs:dof
9477 dof_hdr_t *dof = (dof_hdr_t *)daddr; local
9492 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9493 provider->dofpv_strtab * dof->dofh_secsize);
9494 prb_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9495 provider->dofpv_probes * dof->dofh_secsize);
9496 arg_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9497 provider->dofpv_prargs * dof->dofh_secsize);
9498 off_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9499 provider->dofpv_proffs * dof->dofh_secsize);
9509 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
9511 enoff_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9512 provider->dofpv_prenoffs * dof->dofh_secsize);
9566 dof_hdr_t *dof = (dof_hdr_t *)daddr; local
9571 for (i = 0; i < dof->dofh_secnum; i++) {
9573 dof->dofh_secoff + i * dof->dofh_secsize);
9595 dof_hdr_t *dof = (dof_hdr_t *)daddr; local
9604 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
9605 provider->dofpv_strtab * dof->dofh_secsize);
9623 dof_hdr_t *dof = (dof_hdr_t *)daddr; local
9628 for (i = 0; i < dof->dofh_secnum; i++) {
9630 dof->dofh_secoff + i * dof->dofh_secsize);
13210 dtrace_dof_error(dof_hdr_t *dof, const char *str) argument
13228 dof_hdr_t *dof; local
13237 dof = kmem_zalloc(len, KM_SLEEP);
13238 dof->dofh_ident[DOF_ID_MAG0] = DOF_MAG_MAG0;
13239 dof->dofh_ident[DOF_ID_MAG1] = DOF_MAG_MAG1;
13240 dof->dofh_ident[DOF_ID_MAG2] = DOF_MAG_MAG2;
13241 dof->dofh_ident[DOF_ID_MAG3] = DOF_MAG_MAG3;
13243 dof->dofh_ident[DOF_ID_MODEL] = DOF_MODEL_NATIVE;
13244 dof->dofh_ident[DOF_ID_ENCODING] = DOF_ENCODE_NATIVE;
13245 dof->dofh_ident[DOF_ID_VERSION] = DOF_VERSION;
13246 dof->dofh_ident[DOF_ID_DIFVERS] = DIF_VERSION;
13247 dof->dofh_ident[DOF_ID_DIFIREG] = DIF_DIR_NREGS;
13248 dof->dofh_ident[DOF_ID_DIFTREG] = DIF_DTR_NREGS;
13250 dof->dofh_flags = 0;
13251 dof->dofh_hdrsize = sizeof (dof_hdr_t);
13252 dof->dofh_secsize = sizeof (dof_sec_t);
13253 dof->dofh_secnum = 1; /* only DOF_SECT_OPTDESC */
13254 dof->dofh_secoff = sizeof (dof_hdr_t);
13255 dof->dofh_loadsz = len;
13256 dof->dofh_filesz = len;
13257 dof->dofh_pad = 0;
13262 sec = (dof_sec_t *)((uintptr_t)dof + sizeof (dof_hdr_t));
13271 sec->dofs_offset = (uintptr_t)opt - (uintptr_t)dof;
13280 return (dof);
13286 dof_hdr_t hdr, *dof; local
13315 dof = kmem_alloc(hdr.dofh_loadsz, KM_SLEEP);
13317 if (copyin((void *)uarg, dof, hdr.dofh_loadsz) != 0 ||
13318 dof->dofh_loadsz != hdr.dofh_loadsz) {
13319 kmem_free(dof, hdr.dofh_loadsz);
13324 return (dof);
13331 dof_hdr_t hdr, *dof; local
13365 dof = kmem_alloc(loadsz, KM_SLEEP);
13367 if (proc_readmem(td, p, uarg, dof, loadsz) != loadsz ||
13368 dof->dofh_loadsz != loadsz) {
13369 kmem_free(dof, hdr.dofh_loadsz);
13374 return (dof);
13421 dof_hdr_t *dof; local
13424 dof = NULL;
13475 dof = (dof_hdr_t *)dofbuf;
13476 if (bytes < dof->dofh_loadsz) {
13481 if (dof->dofh_loadsz >= dtrace_dof_maxsize) {
13486 return (dof);
13489 free(dof, M_SOLARIS);
13495 dof_hdr_t *dof;
13527 dof = kmem_alloc(loadsz, KM_SLEEP);
13528 bcopy(buf, dof, loadsz);
13531 return (dof);
13536 dtrace_dof_destroy(dof_hdr_t *dof) argument
13538 kmem_free(dof, dof->dofh_loadsz);
13548 dtrace_dof_sect(dof_hdr_t *dof, uint32_t type, dof_secidx_t i) argument
13551 ((uintptr_t)dof + dof->dofh_secoff + i * dof->dofh_secsize);
13553 if (i >= dof->dofh_secnum) {
13554 dtrace_dof_error(dof, "referenced section index is invalid");
13559 dtrace_dof_error(dof, "referenced section is not loadable");
13564 dtrace_dof_error(dof, "referenced section is the wrong type");
13572 dtrace_dof_probedesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_probedesc_t *desc) argument
13576 uintptr_t daddr = (uintptr_t)dof;
13581 dtrace_dof_error(dof, "invalid probe section");
13586 dtrace_dof_error(dof, "bad alignment in probe description");
13590 if (sec->dofs_offset + sizeof (dof_probedesc_t) > dof->dofh_loadsz) {
13591 dtrace_dof_error(dof, "truncated probe description");
13596 strtab = dtrace_dof_sect(dof, DOF_SECT_STRTAB, probe->dofp_strtab);
13605 dtrace_dof_error(dof, "corrupt probe provider");
13614 dtrace_dof_error(dof, "corrupt probe module");
13622 dtrace_dof_error(dof, "corrupt probe function");
13630 dtrace_dof_error(dof, "corrupt probe name");
13641 dtrace_dof_difo(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate, argument
13647 uintptr_t daddr = (uintptr_t)dof;
13679 dtrace_dof_error(dof, "invalid DIFO header section");
13684 dtrace_dof_error(dof, "bad alignment in DIFO header");
13690 dtrace_dof_error(dof, "bad size in DIFO header");
13705 if ((subsec = dtrace_dof_sect(dof, DOF_SECT_NONE,
13710 dtrace_dof_error(dof, "exceeds maximum size");
13721 dtrace_dof_error(dof, "section not loaded");
13726 dtrace_dof_error(dof, "bad alignment");
13734 dtrace_dof_error(dof, difo[i].msg);
13739 dtrace_dof_error(dof, "entry size mismatch");
13745 dtrace_dof_error(dof, "corrupt entry size");
13766 dtrace_dof_error(dof, "unrecognized DIFO subsection");
13775 dtrace_dof_error(dof, "missing DIF text");
13815 dtrace_dof_predicate(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate, argument
13820 if ((dp = dtrace_dof_difo(dof, sec, vstate, cr)) == NULL)
13827 dtrace_dof_actdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate, argument
13834 uintptr_t daddr = (uintptr_t)dof;
13839 dtrace_dof_error(dof, "invalid action section");
13843 if (sec->dofs_offset + sizeof (dof_actdesc_t) > dof->dofh_loadsz) {
13844 dtrace_dof_error(dof, "truncated action description");
13849 dtrace_dof_error(dof, "bad alignment in action description");
13854 dtrace_dof_error(dof, "section entry size exceeds total size");
13859 dtrace_dof_error(dof, "bad entry size in action description");
13864 dtrace_dof_error(dof, "actions exceed dtrace_actions_max");
13888 if ((strtab = dtrace_dof_sect(dof,
13892 str = (char *)((uintptr_t)dof +
13901 dtrace_dof_error(dof, "bogus format string");
13906 dtrace_dof_error(dof, "empty format string");
13937 if ((difosec = dtrace_dof_sect(dof,
13941 act->dtad_difo = dtrace_dof_difo(dof, difosec, vstate, cr);
13960 dtrace_dof_ecbdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate, argument
13969 dtrace_dof_error(dof, "truncated ECB description");
13974 dtrace_dof_error(dof, "bad alignment in ECB description");
13978 ecb = (dof_ecbdesc_t *)((uintptr_t)dof + (uintptr_t)sec->dofs_offset);
13979 sec = dtrace_dof_sect(dof, DOF_SECT_PROBEDESC, ecb->dofe_probes);
13988 if (dtrace_dof_probedesc(dof, sec, desc) == NULL)
13992 if ((sec = dtrace_dof_sect(dof,
13996 if ((pred = dtrace_dof_predicate(dof, sec, vstate, cr)) == NULL)
14003 if ((sec = dtrace_dof_sect(dof,
14007 ep->dted_action = dtrace_dof_actdesc(dof, sec, vstate, cr);
14029 dtrace_dof_relocate(dof_hdr_t *dof, dof_sec_t *sec, uint64_t ubase, argument
14032 uintptr_t daddr = (uintptr_t)dof;
14042 dtrace_dof_error(dof, "invalid relocation header");
14046 ss = dtrace_dof_sect(dof, DOF_SECT_STRTAB, dofr->dofr_strtab);
14047 rs = dtrace_dof_sect(dof, DOF_SECT_RELTAB, dofr->dofr_relsec);
14048 ts = dtrace_dof_sect(dof, DOF_SECT_NONE, dofr->dofr_tgtsec);
14056 dtrace_dof_error(dof, "invalid relocation section");
14073 dtrace_dof_error(dof, "bad relocation offset");
14078 dtrace_dof_error(dof, "bad relocation offset");
14083 dtrace_dof_error(dof, "misaligned setx relo");
14094 dtrace_dof_error(dof, "invalid relocation type");
14111 dtrace_dof_slurp(dof_hdr_t *dof, dtrace_vstate_t *vstate, cred_t *cr, argument
14114 uint64_t len = dof->dofh_loadsz, seclen;
14115 uintptr_t daddr = (uintptr_t)dof;
14121 ASSERT(dof->dofh_loadsz >= sizeof (dof_hdr_t));
14128 if (bcmp(&dof->dofh_ident[DOF_ID_MAG0],
14130 dtrace_dof_error(dof, "DOF magic string mismatch");
14134 if (dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_ILP32 &&
14135 dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_LP64) {
14136 dtrace_dof_error(dof, "DOF has invalid data model");
14140 if (dof->dofh_ident[DOF_ID_ENCODING] != DOF_ENCODE_NATIVE) {
14141 dtrace_dof_error(dof, "DOF encoding mismatch");
14145 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
14146 dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_2) {
14147 dtrace_dof_error(dof, "DOF version mismatch");
14151 if (dof->dofh_ident[DOF_ID_DIFVERS] != DIF_VERSION_2) {
14152 dtrace_dof_error(dof, "DOF uses unsupported instruction set");
14156 if (dof->dofh_ident[DOF_ID_DIFIREG] > DIF_DIR_NREGS) {
14157 dtrace_dof_error(dof, "DOF uses too many integer registers");
14161 if (dof->dofh_ident[DOF_ID_DIFTREG] > DIF_DTR_NREGS) {
14162 dtrace_dof_error(dof, "DOF uses too many tuple registers");
14167 if (dof->dofh_ident[i] != 0) {
14168 dtrace_dof_error(dof, "DOF has invalid ident byte set");
14173 if (dof->dofh_flags & ~DOF_FL_VALID) {
14174 dtrace_dof_error(dof, "DOF has invalid flag bits set");
14178 if (dof->dofh_secsize == 0) {
14179 dtrace_dof_error(dof, "zero section header size");
14188 seclen = (uint64_t)dof->dofh_secnum * (uint64_t)dof->dofh_secsize;
14190 if (dof->dofh_secoff > len || seclen > len ||
14191 dof->dofh_secoff + seclen > len) {
14192 dtrace_dof_error(dof, "truncated section headers");
14196 if (!IS_P2ALIGNED(dof->dofh_secoff, sizeof (uint64_t))) {
14197 dtrace_dof_error(dof, "misaligned section headers");
14201 if (!IS_P2ALIGNED(dof->dofh_secsize, sizeof (uint64_t))) {
14202 dtrace_dof_error(dof, "misaligned section size");
14211 for (i = 0; i < dof->dofh_secnum; i++) {
14213 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14221 dtrace_dof_error(dof, "illegal sections "
14229 dtrace_dof_error(dof, "loadable section with load "
14238 dtrace_dof_error(dof, "bad section alignment");
14243 dtrace_dof_error(dof, "misaligned section");
14249 dtrace_dof_error(dof, "corrupt section header");
14255 dtrace_dof_error(dof, "non-terminating string table");
14265 for (i = 0; i < dof->dofh_secnum; i++) {
14267 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14274 if (dtrace_dof_relocate(dof, sec, ubase, udaddr) != 0)
14283 for (i = 0; i < dof->dofh_secnum; i++) {
14285 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14290 if ((ep = dtrace_dof_ecbdesc(dof, sec, vstate, cr)) == NULL) {
14307 dtrace_dof_options(dof_hdr_t *dof, dtrace_state_t *state) argument
14314 for (i = 0; i < dof->dofh_secnum; i++) {
14315 dof_sec_t *sec = (dof_sec_t *)((uintptr_t)dof +
14316 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
14322 dtrace_dof_error(dof, "bad alignment in "
14328 dtrace_dof_error(dof, "zeroed option entry size");
14333 dtrace_dof_error(dof, "bad option entry size");
14338 desc = (dof_optdesc_t *)((uintptr_t)dof +
14342 dtrace_dof_error(dof, "non-zero option string");
14347 dtrace_dof_error(dof, "unset option");
14353 dtrace_dof_error(dof, "rejected option");
15573 dof_hdr_t *dof; local
15584 if ((dof = dtrace_dof_property(c)) == NULL) {
15599 dtrace_dof_destroy(dof);
15624 dtrace_dof_destroy(dof);
15629 rv = dtrace_dof_slurp(dof, &state->dts_vstate, CRED(),
15633 rv = dtrace_dof_options(dof, state);
15636 dtrace_dof_destroy(dof);
16155 dof_hdr_t *dof; local
16157 dof = (dof_hdr_t *)(uintptr_t)hprov->dthp_prov.dofhp_dof;
16158 dtrace_dof_destroy(dof);
16166 dtrace_helper_provider_validate(dof_hdr_t *dof, dof_sec_t *sec) argument
16168 uintptr_t daddr = (uintptr_t)dof;
16181 dtrace_dof_error(dof, "misaligned section offset");
16190 ((dof->dofh_ident[DOF_ID_VERSION] == DOF_VERSION_1) ?
16193 dtrace_dof_error(dof, "provider section too small");
16198 str_sec = dtrace_dof_sect(dof, DOF_SECT_STRTAB, provider->dofpv_strtab);
16199 prb_sec = dtrace_dof_sect(dof, DOF_SECT_PROBES, provider->dofpv_probes);
16200 arg_sec = dtrace_dof_sect(dof, DOF_SECT_PRARGS, provider->dofpv_prargs);
16201 off_sec = dtrace_dof_sect(dof, DOF_SECT_PROFFS, provider->dofpv_proffs);
16209 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
16211 (enoff_sec = dtrace_dof_sect(dof, DOF_SECT_PRENOFFS,
16219 dtrace_dof_error(dof, "invalid provider name");
16225 dtrace_dof_error(dof, "invalid entry size");
16230 dtrace_dof_error(dof, "misaligned entry size");
16235 dtrace_dof_error(dof, "invalid entry size");
16240 dtrace_dof_error(dof, "misaligned section offset");
16245 dtrace_dof_error(dof, "invalid entry size");
16261 dtrace_dof_error(dof, "invalid function name");
16266 dtrace_dof_error(dof, "function name too long");
16278 dtrace_dof_error(dof, "invalid probe name");
16290 dtrace_dof_error(dof, "invalid probe offset");
16294 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1) {
16304 dtrace_dof_error(dof, "is-enabled "
16312 dtrace_dof_error(dof, "invalid is-enabled "
16318 dtrace_dof_error(dof, "zero probe and "
16323 dtrace_dof_error(dof, "zero probe offsets");
16331 dtrace_dof_error(dof, "invalid args");
16339 dtrace_dof_error(dof, "bad "
16346 dtrace_dof_error(dof, "native "
16358 dtrace_dof_error(dof, "bad "
16364 dtrace_dof_error(dof, "bad "
16371 dtrace_dof_error(dof, "translated argument "
16385 dtrace_helper_slurp(dof_hdr_t *dof, dof_helper_t *dhp, struct proc *p) argument
16391 uintptr_t daddr = (uintptr_t)dof;
16400 if ((rv = dtrace_dof_slurp(dof, vstate, NULL, &enab, dhp->dofhp_addr,
16402 dtrace_dof_destroy(dof);
16409 for (i = 0; i < dof->dofh_secnum; i++) {
16411 dof->dofh_secoff + i * dof->dofh_secsize);
16416 if (dtrace_helper_provider_validate(dof, sec) != 0) {
16418 dtrace_dof_destroy(dof);
16450 dtrace_dof_destroy(dof);
16458 dtrace_dof_error(dof, "unmatched helpers");
16470 dhp->dofhp_dof = (uint64_t)(uintptr_t)dof;
16482 dtrace_dof_destroy(dof);
17414 dof_hdr_t *dof = dtrace_dof_copyin(arg, &rval); local
17416 if (dof == NULL)
17425 if ((rval = dtrace_helper_slurp(dof, dhp)) != -1) {
17677 dof_hdr_t *dof; local
17694 if ((dof = dtrace_dof_copyin(arg, &rval)) == NULL)
17704 dtrace_dof_destroy(dof);
17708 if (dtrace_dof_slurp(dof, vstate, cr, &enab, 0, B_TRUE) != 0) {
17711 dtrace_dof_destroy(dof);
17715 if ((rval = dtrace_dof_options(dof, state)) != 0) {
17719 dtrace_dof_destroy(dof);
17731 dtrace_dof_destroy(dof);
17926 dof_hdr_t hdr, *dof; local
17933 dof = dtrace_dof_create(state);
17936 len = MIN(hdr.dofh_loadsz, dof->dofh_loadsz);
17937 rval = copyout(dof, (void *)arg, len);
17938 dtrace_dof_destroy(dof);