PERFORCE change 96533 for review

John Birrell jb at FreeBSD.org
Tue May 2 00:00:11 UTC 2006


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

Change 96533 by jb at jb_freebsd2 on 2006/05/01 23:59:55

	Work-in-progress update. Lots and lots of issues still with this
	file. At the moment I'm not sure how to get most of the commented
	out sections of this file executed. I think I need Sun's DTrace
	Test Suite for that.

Affected files ...

.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#4 edit

Differences ...

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

@@ -83,13 +83,8 @@
 		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)) {
@@ -218,7 +213,6 @@
 		return ((uint64_t)(uintptr_t)
 		    mstate->dtms_probe->dtpr_mod);
 
-	case DIF_VAR_PROBEFUNC:
 		ASSERT(mstate->dtms_present & DTRACE_MSTATE_PROBE);
 		return ((uint64_t)(uintptr_t)
 		    mstate->dtms_probe->dtpr_func);
@@ -338,11 +332,10 @@
     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;
 
+#ifdef DOODAD
 	union {
 		mutex_impl_t mi;
 		uint64_t mx;
@@ -352,6 +345,7 @@
 		krwlock_t ri;
 		uintptr_t rw;
 	} r;
+#endif
 
 	switch (subr) {
 	case DIF_SUBR_RAND:
@@ -359,48 +353,69 @@
 		break;
 
 	case DIF_SUBR_MUTEX_OWNED:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		m.mx = dtrace_load64(tupregs[0].dttk_value);
 		if (MUTEX_TYPE_ADAPTIVE(&m.mi))
 			regs[rd] = MUTEX_OWNER(&m.mi) != MUTEX_NO_OWNER;
 		else
 			regs[rd] = LOCK_HELD(&m.mi.m_spin.m_spinlock);
+#endif
 		break;
 
 	case DIF_SUBR_MUTEX_OWNER:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		m.mx = dtrace_load64(tupregs[0].dttk_value);
 		if (MUTEX_TYPE_ADAPTIVE(&m.mi) &&
 		    MUTEX_OWNER(&m.mi) != MUTEX_NO_OWNER)
 			regs[rd] = (uintptr_t)MUTEX_OWNER(&m.mi);
 		else
 			regs[rd] = 0;
+#endif
 		break;
 
 	case DIF_SUBR_MUTEX_TYPE_ADAPTIVE:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		m.mx = dtrace_load64(tupregs[0].dttk_value);
 		regs[rd] = MUTEX_TYPE_ADAPTIVE(&m.mi);
+#endif
 		break;
 
 	case DIF_SUBR_MUTEX_TYPE_SPIN:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		m.mx = dtrace_load64(tupregs[0].dttk_value);
 		regs[rd] = MUTEX_TYPE_SPIN(&m.mi);
+#endif
 		break;
 
 	case DIF_SUBR_RW_READ_HELD: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		uintptr_t tmp;
 
 		r.rw = dtrace_loadptr(tupregs[0].dttk_value);
 		regs[rd] = _RW_READ_HELD(&r.ri, tmp);
+#endif
 		break;
 	}
 
 	case DIF_SUBR_RW_WRITE_HELD:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		r.rw = dtrace_loadptr(tupregs[0].dttk_value);
 		regs[rd] = _RW_WRITE_HELD(&r.ri);
+#endif
 		break;
 
 	case DIF_SUBR_RW_ISWRITER:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		r.rw = dtrace_loadptr(tupregs[0].dttk_value);
 		regs[rd] = _RW_ISWRITER(&r.ri);
+#endif
 		break;
 
 	case DIF_SUBR_BCOPY: {
@@ -437,7 +452,7 @@
 		if (mstate->dtms_scratch_ptr + scratch_size >
 		    mstate->dtms_scratch_base + mstate->dtms_scratch_size) {
 			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOSCRATCH);
-			regs[rd] = NULL;
+			regs[rd] = 0;
 			break;
 		}
 
@@ -488,7 +503,7 @@
 		if (mstate->dtms_scratch_ptr + size >
 		    mstate->dtms_scratch_base + mstate->dtms_scratch_size) {
 			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOSCRATCH);
-			regs[rd] = NULL;
+			regs[rd] = 0;
 			break;
 		}
 
@@ -504,12 +519,14 @@
 
 	case DIF_SUBR_MSGSIZE:
 	case DIF_SUBR_MSGDSIZE: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		uintptr_t baddr = tupregs[0].dttk_value, daddr;
 		uintptr_t wptr, rptr;
 		size_t count = 0;
 		int cont = 0;
 
-		while (baddr != NULL && !(*flags & CPU_DTRACE_FAULT)) {
+		while (baddr != 0 && !(*flags & CPU_DTRACE_FAULT)) {
 			wptr = dtrace_loadptr(baddr +
 			    offsetof(mblk_t, b_wptr));
 
@@ -550,10 +567,13 @@
 		if (!(*flags & CPU_DTRACE_FAULT))
 			regs[rd] = count;
 
+#endif
 		break;
 	}
 
 	case DIF_SUBR_PROGENYOF: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		pid_t pid = tupregs[0].dttk_value;
 		proc_t *p;
 		int rval = 0;
@@ -570,6 +590,7 @@
 		DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 
 		regs[rd] = rval;
+#endif
 		break;
 	}
 
@@ -626,7 +647,7 @@
 		uintptr_t limit = addr + state->dts_options[DTRACEOPT_STRSIZE];
 		char c, target = (char)tupregs[1].dttk_value;
 
-		for (regs[rd] = NULL; addr < limit; addr++) {
+		for (regs[rd] = 0; addr < limit; addr++) {
 			if ((c = dtrace_load8(addr)) == target) {
 				regs[rd] = addr;
 
@@ -644,6 +665,8 @@
 	case DIF_SUBR_STRSTR:
 	case DIF_SUBR_INDEX:
 	case DIF_SUBR_RINDEX: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		/*
 		 * We're going to iterate over the string looking for the
 		 * specified string.  We will iterate until we have reached
@@ -777,10 +800,13 @@
 			}
 		}
 
+#endif
 		break;
 	}
 
 	case DIF_SUBR_STRTOK: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		uintptr_t addr = tupregs[0].dttk_value;
 		uintptr_t tokaddr = tupregs[1].dttk_value;
 		uint64_t size = state->dts_options[DTRACEOPT_STRSIZE];
@@ -866,10 +892,13 @@
 		regs[rd] = (uintptr_t)dest;
 		mstate->dtms_scratch_ptr += size;
 		mstate->dtms_strtok = addr;
+#endif
 		break;
 	}
 
 	case DIF_SUBR_SUBSTR: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		uintptr_t s = tupregs[0].dttk_value;
 		uint64_t size = state->dts_options[DTRACEOPT_STRSIZE];
 		char *d = (char *)mstate->dtms_scratch_ptr;
@@ -912,26 +941,35 @@
 
 		mstate->dtms_scratch_ptr += size;
 		regs[rd] = (uintptr_t)d;
+#endif
 		break;
 	}
 
 	case DIF_SUBR_GETMAJOR:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 #ifdef _LP64
 		regs[rd] = (tupregs[0].dttk_value >> NBITSMINOR64) & MAXMAJ64;
 #else
 		regs[rd] = (tupregs[0].dttk_value >> NBITSMINOR) & MAXMAJ;
 #endif
+#endif
 		break;
 
 	case DIF_SUBR_GETMINOR:
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 #ifdef _LP64
 		regs[rd] = tupregs[0].dttk_value & MAXMIN64;
 #else
 		regs[rd] = tupregs[0].dttk_value & MAXMIN;
 #endif
+#endif
 		break;
 
 	case DIF_SUBR_DDI_PATHNAME: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		/*
 		 * This one is a galactic mess.  We are going to roughly
 		 * emulate ddi_pathname(), but it's made more complicated
@@ -1111,10 +1149,13 @@
 			mstate->dtms_scratch_ptr += size;
 		}
 
+#endif
 		break;
 	}
 
 	case DIF_SUBR_STRJOIN: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		char *d = (char *)mstate->dtms_scratch_ptr;
 		uint64_t size = state->dts_options[DTRACEOPT_STRSIZE];
 		uintptr_t s1 = tupregs[0].dttk_value;
@@ -1157,10 +1198,13 @@
 			regs[rd] = (uintptr_t)d;
 		}
 
+#endif
 		break;
 	}
 
 	case DIF_SUBR_LLTOSTR: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		int64_t i = (int64_t)tupregs[0].dttk_value;
 		int64_t val = i < 0 ? i * -1 : i;
 		uint64_t size = 22;	/* enough room for 2^64 in decimal */
@@ -1184,11 +1228,14 @@
 
 		regs[rd] = (uintptr_t)end + 1;
 		mstate->dtms_scratch_ptr += size;
+#endif
 		break;
 	}
 
 	case DIF_SUBR_DIRNAME:
 	case DIF_SUBR_BASENAME: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		char *dest = (char *)mstate->dtms_scratch_ptr;
 		uint64_t size = state->dts_options[DTRACEOPT_STRSIZE];
 		uintptr_t src = tupregs[0].dttk_value;
@@ -1311,10 +1358,13 @@
 		dest[j] = '\0';
 		regs[rd] = (uintptr_t)dest;
 		mstate->dtms_scratch_ptr += size;
+#endif
 		break;
 	}
 
 	case DIF_SUBR_CLEANPATH: {
+printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+#ifdef DOODAD
 		char *dest = (char *)mstate->dtms_scratch_ptr, c;
 		uint64_t size = state->dts_options[DTRACEOPT_STRSIZE];
 		uintptr_t src = tupregs[0].dttk_value;
@@ -1415,10 +1465,10 @@
 		dest[j] = '\0';
 		regs[rd] = (uintptr_t)dest;
 		mstate->dtms_scratch_ptr += size;
+#endif
 		break;
 	}
 	}
-#endif
 }
 
 /*
@@ -1659,53 +1709,32 @@
 			regs[rd] = dtrace_load64(regs[r1]);
 			break;
 		case DIF_OP_ULDSB:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] = (int8_t)
 			    dtrace_fuword8((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_ULDSH:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] = (int16_t)
 			    dtrace_fuword16((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_ULDSW:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] = (int32_t)
 			    dtrace_fuword32((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_ULDUB:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] =
 			    dtrace_fuword8((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_ULDUH:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] =
 			    dtrace_fuword16((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_ULDUW:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] =
 			    dtrace_fuword32((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_ULDX:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
 			regs[rd] =
 			    dtrace_fuword64((void *)(uintptr_t)regs[r1]);
-#endif
 			break;
 		case DIF_OP_RET:
 			rval = regs[rd];
@@ -1894,6 +1923,7 @@
 			break;
 
 		case DIF_OP_LDTS: {
+printf("%s(%d):\n",__FUNCTION__,__LINE__);
 printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
 #ifdef DOODAD
 			dtrace_dynvar_t *dvar;


More information about the p4-projects mailing list