Date: Sun, 23 Mar 2008 20:40:56 GMT From: John Birrell <jb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 138384 for review Message-ID: <200803232040.m2NKeuFa009205@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=138384 Change 138384 by jb@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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803232040.m2NKeuFa009205>