PERFORCE change 138261 for review

John Birrell jb at FreeBSD.org
Fri Mar 21 23:35:10 UTC 2008


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

Change 138261 by jb at jb_freebsd8 on 2008/03/21 23:34:38

	Enable the stack() action on i386.

Affected files ...

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

Differences ...

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

@@ -32,6 +32,7 @@
 #include <sys/pcpu.h>
 
 #include <machine/md_var.h>
+#include <machine/stack.h>
 
 #include <vm/vm.h>
 #include <vm/vm_param.h>
@@ -57,26 +58,29 @@
 dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
     uint32_t *intrpc)
 {
-#ifdef DOODAD
 	int depth = 0;
+	register_t ebp;
+	struct i386_frame *frame;
 	vm_offset_t callpc;
-	register_t ebp;
-	struct frame *frame;
-	pc_t caller = (pc_t)pcpu_find(curcpu)->pc_dtrace_caller;
+	pc_t caller = (pc_t) solaris_cpu[curcpu].cpu_dtrace_caller;
 
-/*
 	if (intrpc != 0)
-		pcstack[depth++] = (pc_t)intrpc;
-*/
+		pcstack[depth++] = (pc_t) intrpc;
+
 	aframes++;
-	ebp = dtrace_getfp();
-	frame = (struct frame *)ebp;	
-	while(depth < pcstack_limit) {
+
+	__asm __volatile("movl %%ebp,%0" : "=r" (ebp));
+
+	frame = (struct i386_frame *)ebp;
+	while (depth < pcstack_limit) {
 		if (!INKERNEL(frame))
-			break; 
-		callpc = frame->fr_savpc;
+			break;
+
+		callpc = frame->f_retaddr;
+
 		if (!INKERNEL(callpc))
 			break;
+
 		if (aframes > 0) {
 			aframes--;
 			if ((aframes == 0) && (caller != 0)) {
@@ -86,18 +90,17 @@
 		else {
 			pcstack[depth++] = callpc;
 		}
-		
-		if ((struct frame *)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)ebp + KSTACK_PAGES * PAGE_SIZE)
 			break;
-		frame = (struct frame *)frame->fr_savfp; 
+		frame = frame->f_frame;
 	}
 
 	for (; depth < pcstack_limit; depth++) {
 		pcstack[depth] = 0;
 	}
-#endif
 }
 
 #ifdef DOODAD


More information about the p4-projects mailing list