PERFORCE change 97036 for review
John Birrell
jb at FreeBSD.org
Fri May 12 23:30:26 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=97036
Change 97036 by jb at jb_freebsd2 on 2006/05/12 23:29:15
Port the code for some of the special types now that I can see the
tests accessing these. This includes 'execname', 'pid', 'tid' which
are pretty fundamental to the operation of DTrace.
There are still things here that are Solaris-specific, so they
remain commented out. These pieces of code aren't being processed
because the tests tend to access Solaris-specific structures which
fail to resolve in dtrace(1), so the probes never get created and
consequently they commented out bits of code don't get accessed.
Affected files ...
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#6 edit
Differences ...
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#6 (text+ko) ====
@@ -51,7 +51,7 @@
return (mstate->dtms_arg[ndx]);
case DIF_VAR_UREGS: {
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_VAR_UREGS\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
klwp_t *lwp;
@@ -122,7 +122,7 @@
return (mstate->dtms_stackdepth);
case DIF_VAR_USTACKDEPTH:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_VAR_USTACKDEPTH\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
if (!dtrace_priv_proc(state))
return (0);
@@ -223,6 +223,7 @@
mstate->dtms_probe->dtpr_name);
case DIF_VAR_PID:
+#if defined(sun)
if (!dtrace_priv_proc(state))
return (0);
@@ -231,11 +232,8 @@
* 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:
@@ -245,16 +243,13 @@
* 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;
+ return ((uint64_t)curproc->p_pid);
#endif
case DIF_VAR_TID:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
+#if defined(sun)
/*
* See comment in DIF_VAR_PID.
*/
@@ -263,12 +258,11 @@
return ((uint64_t)curthread->t_tid);
#else
-return 0;
+ return ((uint64_t)curthread->td_tid);
#endif
case DIF_VAR_EXECNAME:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
+#if defined(sun)
if (!dtrace_priv_proc(state))
return (0);
@@ -287,12 +281,11 @@
return ((uint64_t)(uintptr_t)
curthread->t_procp->p_user.u_comm);
#else
-return 0;
+ return ((uint64_t)(uintptr_t) curproc->p_comm);
#endif
case DIF_VAR_ZONENAME:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#ifdef DOODAD
+#if defined(sun)
if (!dtrace_priv_proc(state))
return (0);
@@ -311,7 +304,7 @@
return ((uint64_t)(uintptr_t)
curthread->t_procp->p_zone->zone_name);
#else
-return 0;
+ return 0;
#endif
default:
@@ -353,7 +346,7 @@
break;
case DIF_SUBR_MUTEX_OWNED:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_MUTEX_OWNED\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
m.mx = dtrace_load64(tupregs[0].dttk_value);
if (MUTEX_TYPE_ADAPTIVE(&m.mi))
@@ -364,7 +357,7 @@
break;
case DIF_SUBR_MUTEX_OWNER:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_MUTEX_OWNER\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
m.mx = dtrace_load64(tupregs[0].dttk_value);
if (MUTEX_TYPE_ADAPTIVE(&m.mi) &&
@@ -376,7 +369,7 @@
break;
case DIF_SUBR_MUTEX_TYPE_ADAPTIVE:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_MUTEX_TYPE_ADAPTIVE\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
m.mx = dtrace_load64(tupregs[0].dttk_value);
regs[rd] = MUTEX_TYPE_ADAPTIVE(&m.mi);
@@ -384,7 +377,7 @@
break;
case DIF_SUBR_MUTEX_TYPE_SPIN:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_MUTEX_TYPE_SPIN\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
m.mx = dtrace_load64(tupregs[0].dttk_value);
regs[rd] = MUTEX_TYPE_SPIN(&m.mi);
@@ -392,7 +385,7 @@
break;
case DIF_SUBR_RW_READ_HELD: {
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_RW_READ_HELD\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
uintptr_t tmp;
@@ -403,7 +396,7 @@
}
case DIF_SUBR_RW_WRITE_HELD:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_RW_WRITE_HELD\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
r.rw = dtrace_loadptr(tupregs[0].dttk_value);
regs[rd] = _RW_WRITE_HELD(&r.ri);
@@ -411,7 +404,7 @@
break;
case DIF_SUBR_RW_ISWRITER:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_RW_ISWRITER\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
r.rw = dtrace_loadptr(tupregs[0].dttk_value);
regs[rd] = _RW_ISWRITER(&r.ri);
@@ -519,7 +512,7 @@
case DIF_SUBR_MSGSIZE:
case DIF_SUBR_MSGDSIZE: {
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_MSGSIZE or DIF_SUBR_MSGDSIZE\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
uintptr_t baddr = tupregs[0].dttk_value, daddr;
uintptr_t wptr, rptr;
@@ -572,25 +565,31 @@
}
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;
DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
+#if defined(sun)
for (p = curthread->t_procp; p != NULL; p = p->p_parent) {
if (p->p_pidp->pid_id == pid) {
rval = 1;
break;
}
}
+#else
+ for (p = curproc; p != NULL; p = p->p_pptr) {
+ if (p->p_pid == pid) {
+ rval = 1;
+ break;
+ }
+ }
+#endif
DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
regs[rd] = rval;
-#endif
break;
}
@@ -665,8 +664,6 @@
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
@@ -800,29 +797,27 @@
}
}
-#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];
uintptr_t limit, toklimit = tokaddr + size;
- uint8_t c, tokmap[32]; /* 256 / 8 */
+ uint8_t c = 0;
+ uint8_t tokmap[32]; /* 256 / 8 */
char *dest = (char *)mstate->dtms_scratch_ptr;
int i;
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;
}
- if (addr == NULL) {
+ if (addr == 0) {
/*
* If the address specified is NULL, we use our saved
* strtok pointer from the mstate. Note that this
@@ -868,8 +863,8 @@
* We return NULL in this case, and we set the saved
* address to NULL as well.
*/
- regs[rd] = NULL;
- mstate->dtms_strtok = NULL;
+ regs[rd] = 0;
+ mstate->dtms_strtok = 0;
break;
}
@@ -892,13 +887,10 @@
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;
@@ -913,7 +905,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;
}
@@ -941,12 +933,11 @@
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__);
+printf("%s:%s(%d): DIF_SUBR_GETMAJOR\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
#ifdef _LP64
regs[rd] = (tupregs[0].dttk_value >> NBITSMINOR64) & MAXMAJ64;
@@ -957,7 +948,7 @@
break;
case DIF_SUBR_GETMINOR:
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_GETMINOR\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
#ifdef _LP64
regs[rd] = tupregs[0].dttk_value & MAXMIN64;
@@ -968,7 +959,7 @@
break;
case DIF_SUBR_DDI_PATHNAME: {
-printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
+printf("%s:%s(%d): DIF_SUBR_DDI_PATHNAME\n",__FUNCTION__,__FILE__,__LINE__);
#ifdef DOODAD
/*
* This one is a galactic mess. We are going to roughly
@@ -1200,8 +1191,6 @@
}
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 */
@@ -1210,7 +1199,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;
}
@@ -1225,14 +1214,11 @@
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;
@@ -1243,7 +1229,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;
}
@@ -1355,7 +1341,6 @@
dest[j] = '\0';
regs[rd] = (uintptr_t)dest;
mstate->dtms_scratch_ptr += size;
-#endif
break;
}
More information about the p4-projects
mailing list