PERFORCE change 138384 for review

John Birrell jb at FreeBSD.org
Sun Mar 23 20:40:57 UTC 2008


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

Change 138384 by jb at jb_freebsd1 on 2008/03/23 20:40:28

	Implement the stack depth.
	
	Cleanup.

Affected files ...

.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/amd64/dtrace_asm.S#4 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/amd64/dtrace_isa.c#5 edit

Differences ...

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/amd64/dtrace_asm.S#4 (text+ko) ====

@@ -426,7 +426,7 @@
 	 * they were when we entered vpanic() to the designated location in
 	 * the regs structure we allocated on the stack.
 	 */
-#ifdef DOODAD
+#ifdef notyet
 	movq	0x0(%rbx), %rcx
 	movq	%rcx, REGOFF_RDI(%rsp)
 	movq	0x8(%rbx), %rcx

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

@@ -42,11 +42,6 @@
 extern uintptr_t kernbase;
 uintptr_t kernelbase = (uintptr_t) &kernbase;
 
-struct xframe {
-	greg_t	fr_savfp;		/* saved frame pointer */
-	greg_t	fr_savpc;		/* saved program counter */
-};
-
 uint8_t dtrace_fuword8_nocheck(void *);
 uint16_t dtrace_fuword16_nocheck(void *);
 uint32_t dtrace_fuword32_nocheck(void *);
@@ -220,10 +215,10 @@
 	return (n);
 }
 
+#ifdef notyet
 void
 dtrace_getufpstack(uint64_t *pcstack, uint64_t *fpstack, int pcstack_limit)
 {
-#ifdef DOODAD
 	klwp_t *lwp = ttolwp(curthread);
 	proc_t *p = curproc;
 	struct regs *rp;
@@ -306,14 +301,12 @@
 zero:
 	while (pcstack_limit-- > 0)
 		*pcstack++ = NULL;
-#endif
 }
 
 /*ARGSUSED*/
 uint64_t
 dtrace_getarg(int arg, int aframes)
 {
-#ifdef DOODAD
 	uintptr_t val;
 	struct xframe *fp = (struct xframe *)dtrace_getfp();
 	uintptr_t *stack;
@@ -400,50 +393,44 @@
 	DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 
 	return (val);
-#else
 	return (0);
+}
 #endif
-}
 
 /*ARGSUSED*/
 int
 dtrace_getstackdepth(int aframes)
 {
-#ifdef DOODAD
 	int depth = 0;
-	struct xframe *frame;
-	vm_offset_t ebp;
+	struct amd64_frame *frame;
+	vm_offset_t rbp;
 
 	aframes++;
-	ebp = dtrace_getfp();
-	frame = (struct xframe *)ebp;
+	rbp = dtrace_getfp();
+	frame = (struct amd64_frame *)rbp;
 	depth++;
 	for(;;) {
-		if (!INKERNEL(frame))
+		if (!INKERNEL((long) frame))
 			break;
-		if (!INKERNEL(frame->fr_savpc))
+		if (!INKERNEL((long) frame->f_frame))
 			break;
 		depth++;
-		if ((struct xframe *)frame->fr_savfp < frame || 
-			(vm_offset_t)frame->fr_savfp >= 
-			(vm_offset_t)ebp + KSTACK_PAGES * PAGE_SIZE)
+		if (frame->f_frame <= frame ||
+		    (vm_offset_t)frame->f_frame >=
+		    (vm_offset_t)rbp + KSTACK_PAGES * PAGE_SIZE)
 			break;
-	
-		frame = (struct xframe *)frame->fr_savfp;
+		frame = frame->f_frame;
 	}
 	if (depth < aframes)
 		return 0;
 	else
 		return depth - aframes;
-#else
-	return (0);
-#endif
 }
 
+#ifdef notyet
 ulong_t
 dtrace_getreg(struct regs *rp, uint_t reg)
 {
-#ifdef DOODAD
 #if defined(__amd64)
 	int regmap[] = {
 		REG_GS,		/* GS */
@@ -544,10 +531,8 @@
 
 	return ((&rp->r_gs)[reg]);
 #endif
-#else
-return 0;
+}
 #endif
-}
 
 static int
 dtrace_copycheck(uintptr_t uaddr, uintptr_t kaddr, size_t size)


More information about the p4-projects mailing list