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