PERFORCE change 98315 for review

John Birrell jb at FreeBSD.org
Fri Jun 2 06:42:36 UTC 2006


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

Change 98315 by jb at jb_freebsd2 on 2006/06/02 06:40:23

	Reference kernbase as it is initialised on FreeBSD.
	
	Use 'curcpu' directly to get the CPU number rather than some obscure
	compatibility hack.

Affected files ...

.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/i386/dtrace_isa.c#2 edit

Differences ...

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

@@ -47,16 +47,24 @@
 
 extern uintptr_t kernelbase;
 #else
+extern uintptr_t kernbase;
+uintptr_t kernelbase = (uintptr_t) &kernbase;
 struct frame {
 	greg_t	fr_savfp;		/* saved frame pointer */
 	greg_t	fr_savpc;		/* saved program counter */
 };
 #endif
 
+uint8_t dtrace_fuword8_nocheck(void *);
+uint16_t dtrace_fuword16_nocheck(void *);
+uint32_t dtrace_fuword32_nocheck(void *);
+uint64_t dtrace_fuword64_nocheck(void *);
+
 void
 dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
     uint32_t *intrpc)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 	struct frame *fp = (struct frame *)dtrace_getfp();
 	struct frame *nextfp, *minfp, *stacktop;
@@ -130,12 +138,13 @@
 dtrace_getustack_common(uint64_t *pcstack, int pcstack_limit, uintptr_t pc,
     uintptr_t sp)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 	klwp_t *lwp = ttolwp(curthread);
 	proc_t *p = curproc;
 	uintptr_t oldcontext = lwp->lwp_oldcontext;
 	volatile uint16_t *flags =
-	    (volatile uint16_t *)&cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+	    (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
 	size_t s1, s2;
 	int ret = 0;
 
@@ -210,13 +219,14 @@
 void
 dtrace_getupcstack(uint64_t *pcstack, int pcstack_limit)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 	klwp_t *lwp = ttolwp(curthread);
 	proc_t *p = curproc;
 	struct regs *rp;
 	uintptr_t pc, sp;
 	volatile uint16_t *flags =
-	    (volatile uint16_t *)&cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+	    (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
 	int n;
 
 	if (*flags & CPU_DTRACE_FAULT)
@@ -268,6 +278,7 @@
 int
 dtrace_getustackdepth(void)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 	klwp_t *lwp = ttolwp(curthread);
 	proc_t *p = curproc;
@@ -304,13 +315,14 @@
 void
 dtrace_getufpstack(uint64_t *pcstack, uint64_t *fpstack, int pcstack_limit)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 	klwp_t *lwp = ttolwp(curthread);
 	proc_t *p = curproc;
 	struct regs *rp;
 	uintptr_t pc, sp, oldcontext;
 	volatile uint16_t *flags =
-	    (volatile uint16_t *)&cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+	    (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
 	size_t s1, s2;
 
 	if (*flags & CPU_DTRACE_FAULT)
@@ -416,7 +428,6 @@
 uint64_t
 dtrace_getarg(int arg, int aframes)
 {
-#ifdef DOODAD
 	uintptr_t val;
 	struct frame *fp = (struct frame *)dtrace_getfp();
 	uintptr_t *stack;
@@ -503,15 +514,13 @@
 	DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 
 	return (val);
-#else
-return 0;
-#endif
 }
 
 /*ARGSUSED*/
 int
 dtrace_getstackdepth(int aframes)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 	struct frame *fp = (struct frame *)dtrace_getfp();
 	struct frame *nextfp, *minfp, *stacktop;
@@ -560,6 +569,7 @@
 ulong_t
 dtrace_getreg(struct regs *rp, uint_t reg)
 {
+printf("%s:\n",__FUNCTION__);
 #ifdef DOODAD
 #if defined(__amd64)
 	int regmap[] = {
@@ -669,16 +679,14 @@
 static int
 dtrace_copycheck(uintptr_t uaddr, uintptr_t kaddr, size_t size)
 {
-#ifdef DOODAD
 	ASSERT(kaddr >= kernelbase && kaddr + size >= kaddr);
 
 	if (uaddr + size >= kernelbase || uaddr + size < uaddr) {
 		DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-		cpu_core[CPU->cpu_id].cpuc_dtrace_illval = uaddr;
+		cpu_core[curcpu].cpuc_dtrace_illval = uaddr;
 		return (0);
 	}
 
-#endif
 	return (1);
 }
 
@@ -713,59 +721,43 @@
 uint8_t
 dtrace_fuword8(void *uaddr)
 {
-#ifdef DOODAD
-	extern uint8_t dtrace_fuword8_nocheck(void *);
-	if ((uintptr_t)uaddr >= _userlimit) {
+	if ((uintptr_t)uaddr >= kernelbase) {
 		DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-		cpu_core[CPU->cpu_id].cpuc_dtrace_illval = (uintptr_t)uaddr;
+		cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
 		return (0);
 	}
 	return (dtrace_fuword8_nocheck(uaddr));
-#endif
-	return 0;
 }
 
 uint16_t
 dtrace_fuword16(void *uaddr)
 {
-#ifdef DOODAD
-	extern uint16_t dtrace_fuword16_nocheck(void *);
-	if ((uintptr_t)uaddr >= _userlimit) {
+	if ((uintptr_t)uaddr >= kernelbase) {
 		DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-		cpu_core[CPU->cpu_id].cpuc_dtrace_illval = (uintptr_t)uaddr;
+		cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
 		return (0);
 	}
 	return (dtrace_fuword16_nocheck(uaddr));
-#endif
-	return 0;
 }
 
 uint32_t
 dtrace_fuword32(void *uaddr)
 {
-#ifdef DOODAD
-	extern uint32_t dtrace_fuword32_nocheck(void *);
-	if ((uintptr_t)uaddr >= _userlimit) {
+	if ((uintptr_t)uaddr >= kernelbase) {
 		DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-		cpu_core[CPU->cpu_id].cpuc_dtrace_illval = (uintptr_t)uaddr;
+		cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
 		return (0);
 	}
 	return (dtrace_fuword32_nocheck(uaddr));
-#endif
-	return 0;
 }
 
 uint64_t
 dtrace_fuword64(void *uaddr)
 {
-#ifdef DOODAD
-	extern uint64_t dtrace_fuword64_nocheck(void *);
-	if ((uintptr_t)uaddr >= _userlimit) {
+	if ((uintptr_t)uaddr >= kernelbase) {
 		DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-		cpu_core[CPU->cpu_id].cpuc_dtrace_illval = (uintptr_t)uaddr;
+		cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
 		return (0);
 	}
 	return (dtrace_fuword64_nocheck(uaddr));
-#endif
-	return 0;
 }


More information about the p4-projects mailing list