PERFORCE change 95912 for review

John Birrell jb at FreeBSD.org
Sat Apr 22 23:56:01 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=95912

Change 95912 by jb at jb_freebsd2 on 2006/04/22 23:55:10

	Fix a return value to match the data type.
	
	Silence an gcc uninitialised variable warning.

Affected files ...

.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_link.c#5 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_parser.c#3 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_pid.c#4 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_pragma.c#3 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_program.c#3 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_provider.c#3 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_work.c#4 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_action.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_buffer.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_difo.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dof.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dynvar.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_ecb.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_enabling.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_helper.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_ioctl.c#3 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_predicate.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probe.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probekey.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probemgmt.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/fasttrap/fasttrap.c#3 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/fasttrap/fasttrap_load.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/fasttrap/fasttrap_unload.c#2 edit

Differences ...

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_link.c#5 (text) ====

@@ -1348,6 +1348,7 @@
 				s++;
 			}
 
+printf("%s:%s(%d) call dt_provider_lookup\n",__FUNCTION__,__FILE__,__LINE__);
 			if ((pvp = dt_provider_lookup(dtp, pname)) == NULL) {
 				return (dt_link_error(dtp, elf, fd, bufs,
 				    "no such provider %s", pname));

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_parser.c#3 (text) ====

@@ -2526,6 +2526,7 @@
 	 * If not, create a new provider and set its interface-only flag.  This
 	 * flag may be cleared later by calls made to dt_probe_declare().
 	 */
+printf("%s:%s(%d) call dt_provider_lookup\n",__FUNCTION__,__FILE__,__LINE__);
 	if ((dnp->dn_provider = dt_provider_lookup(dtp, name)) != NULL)
 		dnp->dn_provred = B_TRUE;
 	else if ((dnp->dn_provider = dt_provider_create(dtp, name)) == NULL)

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_pid.c#4 (text) ====

@@ -779,6 +779,7 @@
 		 * Give DTrace a shot to the ribs to get it to check
 		 * out the newly created probes.
 		 */
+printf("%s:%s(%d) ioctl args can't be optional on FreeBSD!\n",__FUNCTION__,__FILE__,__LINE__);
 		(void) dt_ioctl(dtp, DTRACEIOC_ENABLE, NULL);
 	}
 

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_pragma.c#3 (text) ====

@@ -102,6 +102,7 @@
 		dnp = dnp->dn_list;
 		part = dnp->dn_string;
 
+printf("%s:%s(%d) call dt_provider_lookup\n",__FUNCTION__,__FILE__,__LINE__);
 		if ((pvp = dt_provider_lookup(dtp, name)) != NULL) {
 			if (strcmp(part, "provider") == 0) {
 				a = &pvp->pv_desc.dtvd_attr.dtpa_provider;
@@ -218,7 +219,10 @@
 	}
 
 	if (strcmp(cnp->dn_string, "provider") == 0)
+{
+printf("%s:%s(%d) call dt_provider_lookup\n",__FUNCTION__,__FILE__,__LINE__);
 		found = dt_provider_lookup(dtp, nnp->dn_string) != NULL;
+}
 	else if (strcmp(cnp->dn_string, "module") == 0) {
 		dt_module_t *mp = dt_module_lookup_by_name(dtp, nnp->dn_string);
 		found = mp != NULL && dt_module_getctf(dtp, mp) != NULL;

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_program.c#3 (text) ====

@@ -156,12 +156,16 @@
 	void *dof;
 	int n, err;
 
+printf("%s: call dtrace_program_info\n",__FUNCTION__);
 	dtrace_program_info(dtp, pgp, pip);
 
+printf("%s: call dtrace_dof_create\n",__FUNCTION__);
 	if ((dof = dtrace_dof_create(dtp, pgp, DTRACE_D_STRIP)) == NULL)
 		return (-1);
 
-	n = dt_ioctl(dtp, DTRACEIOC_ENABLE, dof);
+printf("%s: ioctl DTRACEIOC_ENABLE dof %p &dof %p\n",__FUNCTION__,dof,&dof);
+	n = dt_ioctl(dtp, DTRACEIOC_ENABLE, &dof);
+printf("%s: call dtrace_dof_destroy\n",__FUNCTION__);
 	dtrace_dof_destroy(dtp, dof);
 
 	if (n == -1) {
@@ -179,12 +183,14 @@
 			err = errno;
 		}
 
+printf("%s: dtrace_dof_destroy returned an error\n",__FUNCTION__);
 		return (dt_set_errno(dtp, err));
 	}
 
 	if (pip != NULL)
 		pip->dpi_matches += n;
 
+printf("%s: returns\n",__FUNCTION__);
 	return (0);
 }
 

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_provider.c#3 (text) ====

@@ -65,6 +65,7 @@
 	dtrace_providerdesc_t desc;
 	dt_provider_t *pvp;
 
+printf("dt_provider_lookup '%s'\n",name);
 	for (pvp = dtp->dt_provs[h]; pvp != NULL; pvp = pvp->pv_next) {
 		if (strcmp(pvp->pv_desc.dtvd_name, name) == 0)
 			return (pvp);
@@ -78,16 +79,19 @@
 	bzero(&desc, sizeof (desc));
 	(void) strlcpy(desc.dtvd_name, name, DTRACE_PROVNAMELEN);
 
+printf("Get the provider info...\n");
 	if (dt_ioctl(dtp, DTRACEIOC_PROVIDER, &desc) == -1) {
 		(void) dt_set_errno(dtp, errno == ESRCH ? EDT_NOPROV : errno);
 		return (NULL);
 	}
 
+printf("Create the provider object...\n");
 	if ((pvp = dt_provider_create(dtp, name)) == NULL)
 		return (NULL); /* dt_errno is set for us */
 
 	bcopy(&desc, &pvp->pv_desc, sizeof (desc));
 	pvp->pv_flags |= DT_PROVIDER_IMPL;
+printf("Return the provider object...\n");
 	return (pvp);
 }
 
@@ -674,6 +678,7 @@
 	 * If none is found and an explicit probe ID was specified, discover
 	 * that specific probe and cache its description and arguments.
 	 */
+printf("%s:%s(%d) call dt_provider_lookup in existing cache\n",__FUNCTION__,__FILE__,__LINE__);
 	if ((pvp = dt_provider_lookup(dtp, pdp->dtpd_provider)) != NULL) {
 		size_t keylen = dt_probe_keylen(pdp);
 		char *key = dt_probe_key(pdp, alloca(keylen));
@@ -708,8 +713,10 @@
 		if ((m = dtrace_probe_iter(dtp, pdp, dt_probe_desc, &pd)) < 0)
 			return (NULL); /* dt_errno is set for us */
 
+printf("%s:%s(%d) call dt_provider_lookup\n",__FUNCTION__,__FILE__,__LINE__);
 		if ((pvp = dt_provider_lookup(dtp, pd.dtpd_provider)) == NULL)
 			return (NULL); /* dt_errno is set for us */
+printf("%s:%s(%d) got a provider\n",__FUNCTION__,__FILE__,__LINE__);
 
 		/*
 		 * If more than one probe was matched, then do not report probe
@@ -758,9 +765,15 @@
 		 * the real attributes.  Otherwise grab the static declaration.
 		 */
 		if (pd.dtpd_id != DTRACE_IDNONE)
+{
+printf("%s:%s(%d) call dt_probe_discover\n",__FUNCTION__,__FILE__,__LINE__);
 			prp = dt_probe_discover(pvp, &pd);
+}
 		else
+{
+printf("%s:%s(%d) call dt_probe_lookup\n",__FUNCTION__,__FILE__,__LINE__);
 			prp = dt_probe_lookup(pvp, pd.dtpd_name);
+}
 
 		if (prp == NULL)
 			return (NULL); /* dt_errno is set for us */
@@ -790,6 +803,7 @@
 	pip->dtp_arga = pap->dtpa_args;
 	pip->dtp_argv = prp->pr_argv;
 	pip->dtp_argc = prp->pr_argc;
+printf("%s:%s(%d) return the probe pointer\n",__FUNCTION__,__FILE__,__LINE__);
 
 	return (prp);
 }

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_work.c#4 (text) ====

@@ -187,6 +187,7 @@
 	if ((dof = dtrace_getopt_dof(dtp)) == NULL)
 		return (-1); /* dt_errno has been set for us */
 
+printf("%s:%s(%d) ioctl DTRACEIOC_ENABLE\n",__FUNCTION__,__FILE__,__LINE__);
 	err = dt_ioctl(dtp, DTRACEIOC_ENABLE, dof);
 	dtrace_dof_destroy(dtp, dof);
 

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_action.c#2 (text+ko) ====

@@ -58,7 +58,10 @@
 	c[i++] = ')';
 	c[i] = '\0';
 
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	debug_enter(c);
+#endif
 }
 
 static void
@@ -101,6 +104,8 @@
 		return;
 	}
 
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	/*
 	 * raise() has a queue depth of 1 -- we ignore all subsequent
 	 * invocations of the raise() action.
@@ -110,6 +115,7 @@
 
 	curthread->t_sig_check = 1;
 	aston(curthread);
+#endif
 }
 
 static void
@@ -118,16 +124,21 @@
 	if (dtrace_destructive_disallow)
 		return;
 
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	if (!curthread->t_dtrace_stop) {
 		curthread->t_dtrace_stop = 1;
 		curthread->t_sig_check = 1;
 		aston(curthread);
 	}
+#endif
 }
 
 static void
 dtrace_action_chill(dtrace_mstate_t *mstate, hrtime_t val)
 {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	hrtime_t now;
 	volatile uint16_t *flags;
 	cpu_t *cpu = CPU;
@@ -168,12 +179,15 @@
 	 */
 	mstate->dtms_present &= ~DTRACE_MSTATE_TIMESTAMP;
 	cpu->cpu_dtrace_chilled += val;
+#endif
 }
 
 static void
 dtrace_action_ustack(dtrace_mstate_t *mstate, dtrace_state_t *state,
     uint64_t *buf, uint64_t arg)
 {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	int nframes = DTRACE_USTACK_NFRAMES(arg);
 	int strsize = DTRACE_USTACK_STRSIZE(arg);
 	uint64_t *pcs = &buf[1], *fps;
@@ -282,4 +296,5 @@
 
 out:
 	mstate->dtms_scratch_ptr = old;
+#endif
 }

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_buffer.c#2 (text+ko) ====

@@ -69,6 +69,8 @@
 dtrace_buffer_alloc(dtrace_buffer_t *bufs, size_t size, int flags,
     processorid_t cpu)
 {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	cpu_t *cp;
 	dtrace_buffer_t *buf;
 
@@ -140,6 +142,7 @@
 		buf->dtb_xamot = NULL;
 		buf->dtb_size = 0;
 	} while ((cp = cp->cpu_next) != cpu_list);
+#endif
 
 	return (ENOMEM);
 }

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#2 (text+ko) ====

@@ -51,6 +51,8 @@
 		return (mstate->dtms_arg[ndx]);
 
 	case DIF_VAR_UREGS: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		klwp_t *lwp;
 
 		if (!dtrace_priv_proc(state))
@@ -63,6 +65,9 @@
 		}
 
 		return (dtrace_getreg(lwp->lwp_regs, ndx));
+#else
+return 0;
+#endif
 	}
 
 	case DIF_VAR_CURTHREAD:
@@ -78,8 +83,13 @@
 		return (mstate->dtms_timestamp);
 
 	case DIF_VAR_VTIMESTAMP:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		ASSERT(dtrace_vtime_references != 0);
 		return (curthread->t_dtrace_vtime);
+#else
+return 0;
+#endif
 
 	case DIF_VAR_WALLTIMESTAMP:
 		if (!(mstate->dtms_present & DTRACE_MSTATE_WALLTIMESTAMP)) {
@@ -117,6 +127,8 @@
 		return (mstate->dtms_stackdepth);
 
 	case DIF_VAR_USTACKDEPTH:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		if (!dtrace_priv_proc(state))
 			return (0);
 		if (!(mstate->dtms_present & DTRACE_MSTATE_USTACKDEPTH)) {
@@ -135,6 +147,9 @@
 			mstate->dtms_present |= DTRACE_MSTATE_USTACKDEPTH;
 		}
 		return (mstate->dtms_ustackdepth);
+#else
+return 0;
+#endif
 
 	case DIF_VAR_CALLER:
 		if (!dtrace_priv_kernel(state))
@@ -185,7 +200,7 @@
 			 * uint64_t will contain the caller, which is what
 			 * we're after.
 			 */
-			ustack[2] = NULL;
+			ustack[2] = 0;
 			dtrace_getupcstack(ustack, 3);
 			mstate->dtms_ucaller = ustack[2];
 			mstate->dtms_present |= DTRACE_MSTATE_UCALLER;
@@ -222,8 +237,11 @@
 		 * always due to a high-level interrupt.  (And we're assuming
 		 * that there is only a single high level interrupt.)
 		 */
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		if (DTRACE_ANCHORED(mstate->dtms_probe) && CPU_ON_INTR(CPU))
 			return (pid0.pid_id);
+#endif
 
 		/*
 		 * It is always safe to dereference one's own t_procp pointer:
@@ -233,9 +251,16 @@
 		 * threads and processes don't clean up their own state --
 		 * they leave that task to whomever reaps them.)
 		 */
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		return ((uint64_t)curthread->t_procp->p_pidp->pid_id);
+#else
+return 0;
+#endif
 
 	case DIF_VAR_TID:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		/*
 		 * See comment in DIF_VAR_PID.
 		 */
@@ -243,8 +268,13 @@
 			return (0);
 
 		return ((uint64_t)curthread->t_tid);
+#else
+return 0;
+#endif
 
 	case DIF_VAR_EXECNAME:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		if (!dtrace_priv_proc(state))
 			return (0);
 
@@ -262,8 +292,13 @@
 		 */
 		return ((uint64_t)(uintptr_t)
 		    curthread->t_procp->p_user.u_comm);
+#else
+return 0;
+#endif
 
 	case DIF_VAR_ZONENAME:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		if (!dtrace_priv_proc(state))
 			return (0);
 
@@ -281,6 +316,9 @@
 		 */
 		return ((uint64_t)(uintptr_t)
 		    curthread->t_procp->p_zone->zone_name);
+#else
+return 0;
+#endif
 
 	default:
 		DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP);
@@ -300,6 +338,8 @@
     dtrace_key_t *tupregs, int nargs,
     dtrace_mstate_t *mstate, dtrace_state_t *state)
 {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	volatile uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
 	volatile uintptr_t *illval = &cpu_core[CPU->cpu_id].cpuc_dtrace_illval;
 
@@ -1378,6 +1418,7 @@
 		break;
 	}
 	}
+#endif
 }
 
 /*
@@ -1389,6 +1430,8 @@
 dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
     dtrace_vstate_t *vstate, dtrace_state_t *state)
 {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	const dif_instr_t *text = difo->dtdo_buf;
 	const uint_t textlen = difo->dtdo_len;
 	const char *strtab = difo->dtdo_strtab;
@@ -2123,6 +2166,7 @@
 
 	mstate->dtms_fltoffs = opc * sizeof (dif_instr_t);
 	mstate->dtms_present |= DTRACE_MSTATE_FLTOFFS;
+#endif
 
 	return (0);
 }

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_difo.c#2 (text+ko) ====

@@ -649,7 +649,7 @@
 static void
 dtrace_difo_chunksize(dtrace_difo_t *dp, dtrace_vstate_t *vstate)
 {
-	uint64_t sval;
+	uint64_t sval = 0;
 	dtrace_key_t tupregs[DIF_DTR_NREGS + 2]; /* +2 for thread and id */
 	const dif_instr_t *text = dp->dtdo_buf;
 	uint_t pc, srd = 0;
@@ -663,7 +663,7 @@
 		uint_t rd = DIF_INSTR_RD(instr);
 		uint_t r1 = DIF_INSTR_R1(instr);
 		uint_t nkeys = 0;
-		uchar_t scope;
+		uchar_t scope = 0;
 
 		dtrace_key_t *key = tupregs;
 
@@ -792,10 +792,10 @@
 
 	for (i = 0; i < dp->dtdo_varlen; i++) {
 		dtrace_difv_t *v = &dp->dtdo_vartab[i];
-		dtrace_statvar_t *svar, ***svarp;
+		dtrace_statvar_t *svar, ***svarp = NULL;
 		size_t dsize = 0;
 		uint8_t scope = v->dtdv_scope;
-		int *np;
+		int *np = NULL;
 
 		if ((id = v->dtdv_id) < DIF_VAR_OTHER_UBASE)
 			continue;
@@ -947,7 +947,7 @@
 
 	for (i = 0; i < dp->dtdo_varlen; i++) {
 		dtrace_difv_t *v = &dp->dtdo_vartab[i];
-		dtrace_statvar_t *svar, **svarp;
+		dtrace_statvar_t *svar, **svarp = NULL;
 		uint_t id;
 		uint8_t scope = v->dtdv_scope;
 		int *np;

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dof.c#2 (text+ko) ====

@@ -123,6 +123,8 @@
 static dof_hdr_t *
 dtrace_dof_property(const char *name)
 {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	uchar_t *buf;
 	uint64_t loadsz;
 	unsigned int len, i;
@@ -163,6 +165,9 @@
 	ddi_prop_free(buf);
 
 	return (dof);
+#else
+return NULL;
+#endif
 }
 
 static void
@@ -305,7 +310,7 @@
 		offsetof(dtrace_difo_t, dtdo_varlen), sizeof (dtrace_difv_t),
 		sizeof (uint_t), "multiple variable tables" },
 
-		{ DOF_SECT_NONE, 0, 0, 0, NULL }
+		{ DOF_SECT_NONE, 0, 0, 0, 0, NULL }
 	};
 
 	if (sec->dofs_type != DOF_SECT_DIFOHDR) {

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dynvar.c#2 (text+ko) ====

@@ -182,6 +182,8 @@
 	 */
 	bucket = hashval % dstate->dtds_hashsize;
 
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 	if (op == DTRACE_DYNVAR_DEALLOC) {
 		volatile uintptr_t *lockp = &hash[bucket].dtdh_lock;
 
@@ -196,6 +198,7 @@
 
 		dtrace_membar_producer();
 	}
+#endif
 
 top:
 	prev = NULL;

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_ecb.c#2 (text+ko) ====

@@ -144,7 +144,7 @@
 			 */
 			diff = offs + sizeof (dtrace_aggid_t);
 
-			if (diff = (diff & (sizeof (uint64_t) - 1)))
+			if ((diff = (diff & (sizeof (uint64_t) - 1))))
 				offs += sizeof (uint64_t) - diff;
 
 			aggbase = offs - sizeof (dtrace_aggid_t);
@@ -411,7 +411,8 @@
 	uint16_t format = 0;
 	dtrace_recdesc_t *rec;
 	dtrace_state_t *state = ecb->dte_state;
-	dtrace_optval_t *opt = state->dts_options, nframes, strsize;
+	dtrace_optval_t *opt = state->dts_options, strsize;
+	dtrace_optval_t nframes = 0;
 	uint64_t arg = desc->dtad_arg;
 
 	ASSERT(MUTEX_HELD(&dtrace_lock));
@@ -452,11 +453,11 @@
 			 * We know that our arg is a string -- turn it into a
 			 * format.
 			 */
-			if (arg == NULL) {
+			if (arg == 0) {
 				ASSERT(desc->dtad_kind == DTRACEACT_PRINTA);
 				format = 0;
 			} else {
-				ASSERT(arg != NULL);
+				ASSERT(arg != 0);
 				ASSERT(arg > KERNELBASE);
 				format = dtrace_format_add(state,
 				    (char *)(uintptr_t)arg);
@@ -894,7 +895,9 @@
 static dtrace_ecb_t *
 dtrace_epid2ecb(dtrace_state_t *state, dtrace_epid_t id)
 {
+#ifdef DEBUG
 	dtrace_ecb_t *ecb;
+#endif
 
 	ASSERT(MUTEX_HELD(&dtrace_lock));
 
@@ -910,7 +913,9 @@
 static dtrace_aggregation_t *
 dtrace_aggid2agg(dtrace_state_t *state, dtrace_aggid_t id)
 {
+#ifdef DEBUG
 	dtrace_aggregation_t *agg;
+#endif
 
 	ASSERT(MUTEX_HELD(&dtrace_lock));
 

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_enabling.c#2 (text+ko) ====

@@ -288,17 +288,24 @@
 	int i = 0;
 	int matched = 0;
 
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 	ASSERT(MUTEX_HELD(&cpu_lock));
 	ASSERT(MUTEX_HELD(&dtrace_lock));
 
+printf("%s:%s(%d): enab %p\n",__FUNCTION__,__FILE__,__LINE__,enab);
 	for (i = 0; i < enab->dten_ndesc; i++) {
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 		dtrace_ecbdesc_t *ep = enab->dten_desc[i];
 
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 		enab->dten_current = ep;
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 		enab->dten_error = 0;
 
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 		matched += dtrace_probe_enable(&ep->dted_probe, enab);
 
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 		if (enab->dten_error != 0) {
 			/*
 			 * If we get an error half-way through enabling the
@@ -313,20 +320,25 @@
 			 * it would be a result of corrupted DOF in the driver
 			 * properties.
 			 */
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 			if (nmatched == NULL) {
 				cmn_err(CE_WARN, "dtrace_enabling_match() "
 				    "error on %p: %d", (void *)ep,
 				    enab->dten_error);
 			}
 
+printf("%s:%s(%d): returns\n",__FUNCTION__,__FILE__,__LINE__);
 			return (enab->dten_error);
 		}
 	}
 
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 	enab->dten_probegen = dtrace_probegen;
+printf("%s:%s(%d): \n",__FUNCTION__,__FILE__,__LINE__);
 	if (nmatched != NULL)
 		*nmatched = matched;
 
+printf("%s:%s(%d): returns\n",__FUNCTION__,__FILE__,__LINE__);
 	return (0);
 }
 

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_helper.c#2 (text+ko) ====

@@ -70,7 +70,7 @@
 	uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
 	uint64_t sarg0 = mstate->dtms_arg[0];
 	uint64_t sarg1 = mstate->dtms_arg[1];
-	uint64_t rval;
+	uint64_t rval = 0;
 	dtrace_helpers_t *helpers = curproc->p_dtrace_helpers;
 	dtrace_helper_action_t *helper;
 	dtrace_vstate_t *vstate;
@@ -151,7 +151,7 @@
 	mstate->dtms_arg[0] = sarg0;
 	mstate->dtms_arg[1] = sarg1;
 
-	return (NULL);
+	return (0);
 }
 
 static void

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_ioctl.c#3 (text+ko) ====

@@ -44,6 +44,7 @@
 		break;
 	case DTRACEIOC_CONF: {
 		dtrace_conf_t conf;
+printf("DTRACEIOC_CONF:\n");
 		bzero(&conf, sizeof (conf));
 		conf.dtc_difversion = DIF_VERSION;
 		conf.dtc_difintregs = DIF_DIR_NREGS;
@@ -58,10 +59,76 @@
 printf("DTRACEIOC_DOFGET:\n");
 error = EINVAL;
 		break;
-	case DTRACEIOC_ENABLE:
-printf("DTRACEIOC_ENABLE:\n");
-error = EINVAL;
-		break;
+	case DTRACEIOC_ENABLE: {
+		dof_hdr_t *dof = NULL;
+#ifdef DOODAD
+		dtrace_enabling_t *enab = NULL;
+		dtrace_vstate_t *vstate;
+#endif
+		int err = 0;
+		int rval;
+		void **p = (void **) addr;
+printf("DTRACEIOC_ENABLE: p %p *p %p\n",p,*p);
+
+		/*
+		 * If a NULL argument has been passed, we take this as our
+		 * cue to reevaluate our enablings.
+		 */
+		if (*p == NULL) {
+			mutex_enter(&cpu_lock);
+			mutex_enter(&dtrace_lock);
+#ifdef DOODAD
+			err = dtrace_enabling_matchstate(state, *p);
+#endif
+			mutex_exit(&dtrace_lock);
+			mutex_exit(&cpu_lock);
+
+			return (err);
+		}
+
+		if ((dof = dtrace_dof_copyin((uintptr_t) *p, &rval)) == NULL)
+			return (rval);
+
+		mutex_enter(&cpu_lock);
+		mutex_enter(&dtrace_lock);
+#ifdef DOODAD
+		vstate = &state->dts_vstate;
+
+		if (state->dts_activity != DTRACE_ACTIVITY_INACTIVE) {
+			mutex_exit(&dtrace_lock);
+			mutex_exit(&cpu_lock);
+			dtrace_dof_destroy(dof);
+			return (EBUSY);
+		}
+
+		if (dtrace_dof_slurp(dof, vstate, td->td_ucred, &enab, 0, B_TRUE) != 0) {
+			mutex_exit(&dtrace_lock);
+			mutex_exit(&cpu_lock);
+			dtrace_dof_destroy(dof);
+			return (EINVAL);
+		}
+
+		if ((rval = dtrace_dof_options(dof, state)) != 0) {
+			dtrace_enabling_destroy(enab);
+			mutex_exit(&dtrace_lock);
+			mutex_exit(&cpu_lock);
+			dtrace_dof_destroy(dof);
+			return (rval);
+		}
+
+		if ((err = dtrace_enabling_match(enab, *p)) == 0) {
+			err = dtrace_enabling_retain(enab);
+		} else {
+			dtrace_enabling_destroy(enab);
+		}
+#endif
+
+		mutex_exit(&cpu_lock);
+		mutex_exit(&dtrace_lock);
+		dtrace_dof_destroy(dof);
+
+		return (err);
+	}
 	case DTRACEIOC_EPROBE:
 printf("DTRACEIOC_EPROBE:\n");
 error = EINVAL;
@@ -74,52 +141,99 @@
 printf("DTRACEIOC_GO:\n");
 error = EINVAL;
 		break;
-	case DTRACEIOC_PROBEARG:
+	case DTRACEIOC_PROBEARG: {
+		dtrace_argdesc_t *desc = (dtrace_argdesc_t *) addr;
+		dtrace_probe_t *probe;
+		dtrace_provider_t *prov;
 printf("DTRACEIOC_PROBEARG:\n");
-error = EINVAL;
-		break;
+
+		if (desc->dtargd_id == DTRACE_IDNONE)
+			return (EINVAL);
+
+		if (desc->dtargd_ndx == DTRACE_ARGNONE)
+			return (EINVAL);
+
+		mutex_enter(&dtrace_provider_lock);
+		mutex_enter(&mod_lock);
+		mutex_enter(&dtrace_lock);
+
+		if (desc->dtargd_id > dtrace_nprobes) {
+			mutex_exit(&dtrace_lock);
+			mutex_exit(&mod_lock);
+			mutex_exit(&dtrace_provider_lock);
+			return (EINVAL);
+		}
+
+		if ((probe = dtrace_probes[desc->dtargd_id - 1]) == NULL) {
+			mutex_exit(&dtrace_lock);
+			mutex_exit(&mod_lock);
+			mutex_exit(&dtrace_provider_lock);
+			return (EINVAL);
+		}
+
+		mutex_exit(&dtrace_lock);
+
+		prov = probe->dtpr_provider;
+
+		if (prov->dtpv_pops.dtps_getargdesc == NULL) {
+			/*
+			 * There isn't any typed information for this probe.
+			 * Set the argument number to DTRACE_ARGNONE.
+			 */
+			desc->dtargd_ndx = DTRACE_ARGNONE;
+		} else {
+			desc->dtargd_native[0] = '\0';
+			desc->dtargd_xlate[0] = '\0';
+			desc->dtargd_mapping = desc->dtargd_ndx;
+
+			prov->dtpv_pops.dtps_getargdesc(prov->dtpv_arg,
+			    probe->dtpr_id, probe->dtpr_arg, desc);
+		}
+
+		mutex_exit(&mod_lock);
+		mutex_exit(&dtrace_provider_lock);
+
+		return (0);
+	}
 	case DTRACEIOC_PROBEMATCH:
 	case DTRACEIOC_PROBES: {
-#ifdef DOODAD
+		dtrace_probedesc_t *p_desc = (dtrace_probedesc_t *) addr;
 		dtrace_probe_t *probe = NULL;
-		dtrace_probedesc_t desc;
 		dtrace_probekey_t pkey;
 		dtrace_id_t i;
 		int m = 0;
-		uint32_t priv;
-		uid_t uid;
-		zoneid_t zoneid;
+		uint32_t priv = 0;
+		uid_t uid = 0;
+		zoneid_t zoneid = 0;
+printf("%s:\n",(cmd == DTRACEIOC_PROBEMATCH) ? "DTRACEIOC_PROBEMATCH":"DTRACEIOC_PROBES");
 
-		if (copyin((void *)arg, &desc, sizeof (desc)) != 0)
-			return (EFAULT);
-
-		desc.dtpd_provider[DTRACE_PROVNAMELEN - 1] = '\0';
-		desc.dtpd_mod[DTRACE_MODNAMELEN - 1] = '\0';
-		desc.dtpd_func[DTRACE_FUNCNAMELEN - 1] = '\0';
-		desc.dtpd_name[DTRACE_NAMELEN - 1] = '\0';
+		p_desc->dtpd_provider[DTRACE_PROVNAMELEN - 1] = '\0';
+		p_desc->dtpd_mod[DTRACE_MODNAMELEN - 1] = '\0';
+		p_desc->dtpd_func[DTRACE_FUNCNAMELEN - 1] = '\0';
+		p_desc->dtpd_name[DTRACE_NAMELEN - 1] = '\0';
 
 		/*
 		 * Before we attempt to match this probe, we want to give
 		 * all providers the opportunity to provide it.
 		 */
-		if (desc.dtpd_id == DTRACE_IDNONE) {
+		if (p_desc->dtpd_id == DTRACE_IDNONE) {
 			mutex_enter(&dtrace_provider_lock);
-			dtrace_probe_provide(&desc, NULL);
+			dtrace_probe_provide(p_desc, NULL);
 			mutex_exit(&dtrace_provider_lock);
-			desc.dtpd_id++;
+			p_desc->dtpd_id++;
 		}
 
 		if (cmd == DTRACEIOC_PROBEMATCH)  {
-			dtrace_probekey(&desc, &pkey);
+			dtrace_probekey(p_desc, &pkey);
 			pkey.dtpk_id = DTRACE_IDNONE;
 		}
 
-		dtrace_cred2priv(cr, &priv, &uid, &zoneid);
+		dtrace_cred2priv(td->td_ucred, &priv, &uid, &zoneid);
 
 		mutex_enter(&dtrace_lock);
 
 		if (cmd == DTRACEIOC_PROBEMATCH) {
-			for (i = desc.dtpd_id; i <= dtrace_nprobes; i++) {
+			for (i = p_desc->dtpd_id; i <= dtrace_nprobes; i++) {
 				if ((probe = dtrace_probes[i - 1]) != NULL &&
 				    (m = dtrace_match_probe(probe, &pkey,
 				    priv, uid, zoneid)) != 0)
@@ -132,7 +246,7 @@
 			}
 
 		} else {
-			for (i = desc.dtpd_id; i <= dtrace_nprobes; i++) {
+			for (i = p_desc->dtpd_id; i <= dtrace_nprobes; i++) {
 				if ((probe = dtrace_probes[i - 1]) != NULL &&
 				    dtrace_match_priv(probe, priv, uid, zoneid))
 					break;
@@ -144,19 +258,34 @@
 			return (ESRCH);
 		}
 
-		dtrace_probe_description(probe, &desc);
+		dtrace_probe_description(probe, p_desc);
 		mutex_exit(&dtrace_lock);
 
-		if (copyout(&desc, (void *)arg, sizeof (desc)) != 0)
-			return (EFAULT);
-#endif
+		return (0);
+	}
+	case DTRACEIOC_PROVIDER: {
+		dtrace_providerdesc_t *pvd = (dtrace_providerdesc_t *) addr;
+		dtrace_provider_t *pvp;
+printf("DTRACEIOC_PROVIDER:\n");
+
+		pvd->dtvd_name[DTRACE_PROVNAMELEN - 1] = '\0';
+		mutex_enter(&dtrace_provider_lock);
+
+		for (pvp = dtrace_provider; pvp != NULL; pvp = pvp->dtpv_next) {
+			if (strcmp(pvp->dtpv_name, pvd->dtvd_name) == 0)
+				break;
+		}
+
+		mutex_exit(&dtrace_provider_lock);
+
+		if (pvp == NULL)
+			return (ESRCH);
+
+		bcopy(&pvp->dtpv_priv, &pvd->dtvd_priv, sizeof (dtrace_ppriv_t));
+		bcopy(&pvp->dtpv_attr, &pvd->dtvd_attr, sizeof (dtrace_pattr_t));
 
 		return (0);
 	}
-	case DTRACEIOC_PROVIDER:
-printf("DTRACEIOC_PROVIDER:\n");
-error = EINVAL;
-		break;
 	case DTRACEIOC_REPLICATE:
 printf("DTRACEIOC_REPLICATE:\n");
 error = EINVAL;

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_predicate.c#2 (text+ko) ====

@@ -47,7 +47,9 @@
 static void
 dtrace_predicate_release(dtrace_predicate_t *pred, dtrace_vstate_t *vstate)
 {
+#ifdef DEBUG
 	dtrace_difo_t *dp = pred->dtp_difo;
+#endif
 
 	ASSERT(MUTEX_HELD(&dtrace_lock));
 	ASSERT(dp != NULL && dp->dtdo_refcnt != 0);

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probe.c#2 (text+ko) ====

@@ -8,6 +8,7 @@
 dtrace_probe(dtrace_id_t id, uintptr_t arg0, uintptr_t arg1,
     uintptr_t arg2, uintptr_t arg3, uintptr_t arg4)
 {
+#ifdef DOODAD
 	processorid_t cpuid;
 	dtrace_icookie_t cookie;
 	dtrace_probe_t *probe;
@@ -606,4 +607,5 @@
 		curthread->t_dtrace_start = dtrace_gethrtime();
 
 	dtrace_interrupt_enable(cookie);
+#endif
 }

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probekey.c#2 (text+ko) ====

@@ -28,7 +28,7 @@
  * dtrace_match_nonzero().
  */
 static void
-dtrace_probekey(const dtrace_probedesc_t *pdp, dtrace_probekey_t *pkp)
+dtrace_probekey(dtrace_probedesc_t *pdp, dtrace_probekey_t *pkp)
 {

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list