Lines Matching defs:dof
8728 dof_hdr_t *dof = (dof_hdr_t *)daddr;
8743 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8744 provider->dofpv_strtab * dof->dofh_secsize);
8745 prb_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8746 provider->dofpv_probes * dof->dofh_secsize);
8747 arg_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8748 provider->dofpv_prargs * dof->dofh_secsize);
8749 off_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8750 provider->dofpv_proffs * dof->dofh_secsize);
8760 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
8762 enoff_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8763 provider->dofpv_prenoffs * dof->dofh_secsize);
8813 dof_hdr_t *dof = (dof_hdr_t *)daddr;
8818 for (i = 0; i < dof->dofh_secnum; i++) {
8820 dof->dofh_secoff + i * dof->dofh_secsize);
8842 dof_hdr_t *dof = (dof_hdr_t *)daddr;
8851 str_sec = (dof_sec_t *)(uintptr_t)(daddr + dof->dofh_secoff +
8852 provider->dofpv_strtab * dof->dofh_secsize);
8870 dof_hdr_t *dof = (dof_hdr_t *)daddr;
8875 for (i = 0; i < dof->dofh_secnum; i++) {
8877 dof->dofh_secoff + i * dof->dofh_secsize);
12308 dtrace_dof_error(dof_hdr_t *dof, const char *str)
12326 dof_hdr_t *dof;
12335 dof = kmem_zalloc(len, KM_SLEEP);
12336 dof->dofh_ident[DOF_ID_MAG0] = DOF_MAG_MAG0;
12337 dof->dofh_ident[DOF_ID_MAG1] = DOF_MAG_MAG1;
12338 dof->dofh_ident[DOF_ID_MAG2] = DOF_MAG_MAG2;
12339 dof->dofh_ident[DOF_ID_MAG3] = DOF_MAG_MAG3;
12341 dof->dofh_ident[DOF_ID_MODEL] = DOF_MODEL_NATIVE;
12342 dof->dofh_ident[DOF_ID_ENCODING] = DOF_ENCODE_NATIVE;
12343 dof->dofh_ident[DOF_ID_VERSION] = DOF_VERSION;
12344 dof->dofh_ident[DOF_ID_DIFVERS] = DIF_VERSION;
12345 dof->dofh_ident[DOF_ID_DIFIREG] = DIF_DIR_NREGS;
12346 dof->dofh_ident[DOF_ID_DIFTREG] = DIF_DTR_NREGS;
12348 dof->dofh_flags = 0;
12349 dof->dofh_hdrsize = sizeof (dof_hdr_t);
12350 dof->dofh_secsize = sizeof (dof_sec_t);
12351 dof->dofh_secnum = 1; /* only DOF_SECT_OPTDESC */
12352 dof->dofh_secoff = sizeof (dof_hdr_t);
12353 dof->dofh_loadsz = len;
12354 dof->dofh_filesz = len;
12355 dof->dofh_pad = 0;
12360 sec = (dof_sec_t *)((uintptr_t)dof + sizeof (dof_hdr_t));
12369 sec->dofs_offset = (uintptr_t)opt - (uintptr_t)dof;
12378 return (dof);
12384 dof_hdr_t hdr, *dof;
12413 dof = kmem_alloc(hdr.dofh_loadsz, KM_SLEEP);
12415 if (copyin((void *)uarg, dof, hdr.dofh_loadsz) != 0 ||
12416 dof->dofh_loadsz != hdr.dofh_loadsz) {
12417 kmem_free(dof, hdr.dofh_loadsz);
12422 return (dof);
12431 dof_hdr_t *dof;
12463 dof = kmem_alloc(loadsz, KM_SLEEP);
12464 bcopy(buf, dof, loadsz);
12467 return (dof);
12471 dtrace_dof_destroy(dof_hdr_t *dof)
12473 kmem_free(dof, dof->dofh_loadsz);
12483 dtrace_dof_sect(dof_hdr_t *dof, uint32_t type, dof_secidx_t i)
12486 ((uintptr_t)dof + dof->dofh_secoff + i * dof->dofh_secsize);
12488 if (i >= dof->dofh_secnum) {
12489 dtrace_dof_error(dof, "referenced section index is invalid");
12494 dtrace_dof_error(dof, "referenced section is not loadable");
12499 dtrace_dof_error(dof, "referenced section is the wrong type");
12507 dtrace_dof_probedesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_probedesc_t *desc)
12511 uintptr_t daddr = (uintptr_t)dof;
12516 dtrace_dof_error(dof, "invalid probe section");
12521 dtrace_dof_error(dof, "bad alignment in probe description");
12525 if (sec->dofs_offset + sizeof (dof_probedesc_t) > dof->dofh_loadsz) {
12526 dtrace_dof_error(dof, "truncated probe description");
12531 strtab = dtrace_dof_sect(dof, DOF_SECT_STRTAB, probe->dofp_strtab);
12540 dtrace_dof_error(dof, "corrupt probe provider");
12549 dtrace_dof_error(dof, "corrupt probe module");
12557 dtrace_dof_error(dof, "corrupt probe function");
12565 dtrace_dof_error(dof, "corrupt probe name");
12576 dtrace_dof_difo(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12582 uintptr_t daddr = (uintptr_t)dof;
12614 dtrace_dof_error(dof, "invalid DIFO header section");
12619 dtrace_dof_error(dof, "bad alignment in DIFO header");
12625 dtrace_dof_error(dof, "bad size in DIFO header");
12640 if ((subsec = dtrace_dof_sect(dof, DOF_SECT_NONE,
12645 dtrace_dof_error(dof, "exceeds maximum size");
12656 dtrace_dof_error(dof, "section not loaded");
12661 dtrace_dof_error(dof, "bad alignment");
12669 dtrace_dof_error(dof, difo[i].msg);
12674 dtrace_dof_error(dof, "entry size mismatch");
12680 dtrace_dof_error(dof, "corrupt entry size");
12701 dtrace_dof_error(dof, "unrecognized DIFO subsection");
12710 dtrace_dof_error(dof, "missing DIF text");
12750 dtrace_dof_predicate(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12755 if ((dp = dtrace_dof_difo(dof, sec, vstate, cr)) == NULL)
12762 dtrace_dof_actdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12769 uintptr_t daddr = (uintptr_t)dof;
12774 dtrace_dof_error(dof, "invalid action section");
12778 if (sec->dofs_offset + sizeof (dof_actdesc_t) > dof->dofh_loadsz) {
12779 dtrace_dof_error(dof, "truncated action description");
12784 dtrace_dof_error(dof, "bad alignment in action description");
12789 dtrace_dof_error(dof, "section entry size exceeds total size");
12794 dtrace_dof_error(dof, "bad entry size in action description");
12799 dtrace_dof_error(dof, "actions exceed dtrace_actions_max");
12823 if ((strtab = dtrace_dof_sect(dof,
12827 str = (char *)((uintptr_t)dof +
12836 dtrace_dof_error(dof, "bogus format string");
12841 dtrace_dof_error(dof, "empty format string");
12872 if ((difosec = dtrace_dof_sect(dof,
12876 act->dtad_difo = dtrace_dof_difo(dof, difosec, vstate, cr);
12895 dtrace_dof_ecbdesc(dof_hdr_t *dof, dof_sec_t *sec, dtrace_vstate_t *vstate,
12904 dtrace_dof_error(dof, "truncated ECB description");
12909 dtrace_dof_error(dof, "bad alignment in ECB description");
12913 ecb = (dof_ecbdesc_t *)((uintptr_t)dof + (uintptr_t)sec->dofs_offset);
12914 sec = dtrace_dof_sect(dof, DOF_SECT_PROBEDESC, ecb->dofe_probes);
12923 if (dtrace_dof_probedesc(dof, sec, desc) == NULL)
12927 if ((sec = dtrace_dof_sect(dof,
12931 if ((pred = dtrace_dof_predicate(dof, sec, vstate, cr)) == NULL)
12938 if ((sec = dtrace_dof_sect(dof,
12942 ep->dted_action = dtrace_dof_actdesc(dof, sec, vstate, cr);
12964 dtrace_dof_relocate(dof_hdr_t *dof, dof_sec_t *sec, uint64_t ubase)
12966 uintptr_t daddr = (uintptr_t)dof;
12975 dtrace_dof_error(dof, "invalid relocation header");
12979 ss = dtrace_dof_sect(dof, DOF_SECT_STRTAB, dofr->dofr_strtab);
12980 rs = dtrace_dof_sect(dof, DOF_SECT_RELTAB, dofr->dofr_relsec);
12981 ts = dtrace_dof_sect(dof, DOF_SECT_NONE, dofr->dofr_tgtsec);
12988 dtrace_dof_error(dof, "invalid relocation section");
13004 dtrace_dof_error(dof, "bad relocation offset");
13009 dtrace_dof_error(dof, "misaligned setx relo");
13016 dtrace_dof_error(dof, "invalid relocation type");
13033 dtrace_dof_slurp(dof_hdr_t *dof, dtrace_vstate_t *vstate, cred_t *cr,
13036 uint64_t len = dof->dofh_loadsz, seclen;
13037 uintptr_t daddr = (uintptr_t)dof;
13043 ASSERT(dof->dofh_loadsz >= sizeof (dof_hdr_t));
13050 if (bcmp(&dof->dofh_ident[DOF_ID_MAG0],
13052 dtrace_dof_error(dof, "DOF magic string mismatch");
13056 if (dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_ILP32 &&
13057 dof->dofh_ident[DOF_ID_MODEL] != DOF_MODEL_LP64) {
13058 dtrace_dof_error(dof, "DOF has invalid data model");
13062 if (dof->dofh_ident[DOF_ID_ENCODING] != DOF_ENCODE_NATIVE) {
13063 dtrace_dof_error(dof, "DOF encoding mismatch");
13067 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
13068 dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_2) {
13069 dtrace_dof_error(dof, "DOF version mismatch");
13073 if (dof->dofh_ident[DOF_ID_DIFVERS] != DIF_VERSION_2) {
13074 dtrace_dof_error(dof, "DOF uses unsupported instruction set");
13078 if (dof->dofh_ident[DOF_ID_DIFIREG] > DIF_DIR_NREGS) {
13079 dtrace_dof_error(dof, "DOF uses too many integer registers");
13083 if (dof->dofh_ident[DOF_ID_DIFTREG] > DIF_DTR_NREGS) {
13084 dtrace_dof_error(dof, "DOF uses too many tuple registers");
13089 if (dof->dofh_ident[i] != 0) {
13090 dtrace_dof_error(dof, "DOF has invalid ident byte set");
13095 if (dof->dofh_flags & ~DOF_FL_VALID) {
13096 dtrace_dof_error(dof, "DOF has invalid flag bits set");
13100 if (dof->dofh_secsize == 0) {
13101 dtrace_dof_error(dof, "zero section header size");
13110 seclen = (uint64_t)dof->dofh_secnum * (uint64_t)dof->dofh_secsize;
13112 if (dof->dofh_secoff > len || seclen > len ||
13113 dof->dofh_secoff + seclen > len) {
13114 dtrace_dof_error(dof, "truncated section headers");
13118 if (!IS_P2ALIGNED(dof->dofh_secoff, sizeof (uint64_t))) {
13119 dtrace_dof_error(dof, "misaligned section headers");
13123 if (!IS_P2ALIGNED(dof->dofh_secsize, sizeof (uint64_t))) {
13124 dtrace_dof_error(dof, "misaligned section size");
13133 for (i = 0; i < dof->dofh_secnum; i++) {
13135 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13143 dtrace_dof_error(dof, "illegal sections "
13151 dtrace_dof_error(dof, "loadable section with load "
13160 dtrace_dof_error(dof, "bad section alignment");
13165 dtrace_dof_error(dof, "misaligned section");
13171 dtrace_dof_error(dof, "corrupt section header");
13177 dtrace_dof_error(dof, "non-terminating string table");
13187 for (i = 0; i < dof->dofh_secnum; i++) {
13189 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13196 if (dtrace_dof_relocate(dof, sec, ubase) != 0)
13205 for (i = 0; i < dof->dofh_secnum; i++) {
13207 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13212 if ((ep = dtrace_dof_ecbdesc(dof, sec, vstate, cr)) == NULL) {
13229 dtrace_dof_options(dof_hdr_t *dof, dtrace_state_t *state)
13236 for (i = 0; i < dof->dofh_secnum; i++) {
13237 dof_sec_t *sec = (dof_sec_t *)((uintptr_t)dof +
13238 (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
13244 dtrace_dof_error(dof, "bad alignment in "
13250 dtrace_dof_error(dof, "zeroed option entry size");
13255 dtrace_dof_error(dof, "bad option entry size");
13260 desc = (dof_optdesc_t *)((uintptr_t)dof +
13264 dtrace_dof_error(dof, "non-zero option string");
13269 dtrace_dof_error(dof, "unset option");
13275 dtrace_dof_error(dof, "rejected option");
14352 dof_hdr_t *dof;
14353 char c[32]; /* enough for "dof-data-" + digits */
14359 (void) snprintf(c, sizeof (c), "dof-data-%d", i);
14363 if ((dof = dtrace_dof_property(c)) == NULL) {
14377 dtrace_dof_destroy(dof);
14401 dtrace_dof_destroy(dof);
14406 rv = dtrace_dof_slurp(dof, &state->dts_vstate, CRED(),
14410 rv = dtrace_dof_options(dof, state);
14413 dtrace_dof_destroy(dof);
14934 dof_hdr_t *dof;
14936 dof = (dof_hdr_t *)(uintptr_t)hprov->dthp_prov.dofhp_dof;
14937 dtrace_dof_destroy(dof);
14945 dtrace_helper_provider_validate(dof_hdr_t *dof, dof_sec_t *sec)
14947 uintptr_t daddr = (uintptr_t)dof;
14960 dtrace_dof_error(dof, "misaligned section offset");
14969 ((dof->dofh_ident[DOF_ID_VERSION] == DOF_VERSION_1) ?
14972 dtrace_dof_error(dof, "provider section too small");
14977 str_sec = dtrace_dof_sect(dof, DOF_SECT_STRTAB, provider->dofpv_strtab);
14978 prb_sec = dtrace_dof_sect(dof, DOF_SECT_PROBES, provider->dofpv_probes);
14979 arg_sec = dtrace_dof_sect(dof, DOF_SECT_PRARGS, provider->dofpv_prargs);
14980 off_sec = dtrace_dof_sect(dof, DOF_SECT_PROFFS, provider->dofpv_proffs);
14988 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1 &&
14990 (enoff_sec = dtrace_dof_sect(dof, DOF_SECT_PRENOFFS,
14998 dtrace_dof_error(dof, "invalid provider name");
15004 dtrace_dof_error(dof, "invalid entry size");
15009 dtrace_dof_error(dof, "misaligned entry size");
15014 dtrace_dof_error(dof, "invalid entry size");
15019 dtrace_dof_error(dof, "misaligned section offset");
15024 dtrace_dof_error(dof, "invalid entry size");
15040 dtrace_dof_error(dof, "invalid function name");
15045 dtrace_dof_error(dof, "function name too long");
15051 dtrace_dof_error(dof, "invalid probe name");
15063 dtrace_dof_error(dof, "invalid probe offset");
15067 if (dof->dofh_ident[DOF_ID_VERSION] != DOF_VERSION_1) {
15077 dtrace_dof_error(dof, "is-enabled "
15085 dtrace_dof_error(dof, "invalid is-enabled "
15091 dtrace_dof_error(dof, "zero probe and "
15096 dtrace_dof_error(dof, "zero probe offsets");
15104 dtrace_dof_error(dof, "invalid args");
15112 dtrace_dof_error(dof, "bad "
15119 dtrace_dof_error(dof, "native "
15131 dtrace_dof_error(dof, "bad "
15137 dtrace_dof_error(dof, "bad "
15144 dtrace_dof_error(dof, "translated argument "
15158 dtrace_helper_slurp(dof_hdr_t *dof, dof_helper_t *dhp)
15164 uintptr_t daddr = (uintptr_t)dof;
15173 if ((rv = dtrace_dof_slurp(dof, vstate, NULL, &enab,
15175 dtrace_dof_destroy(dof);
15183 for (i = 0; i < dof->dofh_secnum; i++) {
15185 dof->dofh_secoff + i * dof->dofh_secsize);
15190 if (dtrace_helper_provider_validate(dof, sec) != 0) {
15192 dtrace_dof_destroy(dof);
15224 dtrace_dof_destroy(dof);
15232 dtrace_dof_error(dof, "unmatched helpers");
15244 dhp->dofhp_dof = (uint64_t)(uintptr_t)dof;
15256 dtrace_dof_destroy(dof);
16046 dof_hdr_t *dof = dtrace_dof_copyin(arg, &rval);
16048 if (dof == NULL)
16054 * dtrace_helper_slurp() takes responsibility for the dof --
16057 if ((rval = dtrace_helper_slurp(dof, dhp)) != -1) {
16308 dof_hdr_t *dof;
16325 if ((dof = dtrace_dof_copyin(arg, &rval)) == NULL)
16335 dtrace_dof_destroy(dof);
16339 if (dtrace_dof_slurp(dof, vstate, cr, &enab, 0, B_TRUE) != 0) {
16342 dtrace_dof_destroy(dof);
16346 if ((rval = dtrace_dof_options(dof, state)) != 0) {
16350 dtrace_dof_destroy(dof);
16362 dtrace_dof_destroy(dof);
16557 dof_hdr_t hdr, *dof;
16564 dof = dtrace_dof_create(state);
16567 len = MIN(hdr.dofh_loadsz, dof->dofh_loadsz);
16568 rval = copyout(dof, (void *)arg, len);
16569 dtrace_dof_destroy(dof);