Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/cddl/osnet make dtrace compile on amd64.



details:   https://anonhg.NetBSD.org/src/rev/e2f0faa2e811
branches:  trunk
changeset: 752992:e2f0faa2e811
user:      christos <christos%NetBSD.org@localhost>
date:      Sat Mar 13 22:31:15 2010 +0000

description:
make dtrace compile on amd64.

diffstat:

 external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S     |  13 +-
 external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c     |  91 ++++++++---------
 external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c    |  99 +++++++++++-------
 external/cddl/osnet/dev/dtrace/dtrace_debug.c         |   3 +-
 external/cddl/osnet/dev/dtrace/dtrace_modevent.c      |   3 +-
 external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S      |   3 +-
 external/cddl/osnet/dev/fbt/fbt.c                     |  17 ++-
 external/cddl/osnet/dev/sdt/sdt.c                     |  14 +-
 external/cddl/osnet/dist/uts/common/dtrace/dtrace.c   |  15 +-
 external/cddl/osnet/dist/uts/common/sys/ccompile.h    |   2 +-
 external/cddl/osnet/dist/uts/common/sys/ctf_api.h     |   2 +-
 external/cddl/osnet/dist/uts/common/sys/dtrace_impl.h |   2 +-
 external/cddl/osnet/dist/uts/common/sys/processor.h   |   2 +-
 external/cddl/osnet/sys/sys/cpuvar.h                  |   3 +-
 external/cddl/osnet/sys/sys/cred.h                    |   4 +-
 external/cddl/osnet/sys/sys/proc.h                    |   6 +-
 16 files changed, 152 insertions(+), 127 deletions(-)

diffs (truncated from 893 to 300 lines):

diff -r 39e7b6e16a29 -r e2f0faa2e811 external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S
--- a/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S Sat Mar 13 22:29:33 2010 +0000
+++ b/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S Sat Mar 13 22:31:15 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: dtrace_asm.S,v 1.2 2010/02/21 01:46:33 darran Exp $    */
+/*     $NetBSD: dtrace_asm.S,v 1.3 2010/03/13 22:31:15 christos Exp $  */
 
 /*
  * CDDL HEADER START
@@ -32,11 +32,14 @@
 
 #define _ASM
 
-#include <machine/asmacros.h>
+
 #include <sys/cpuvar_defs.h>
 #include <sys/dtrace.h>
+#include <machine/asm.h>
+#define END(a)
+#define MEXITCOUNT
 
-#include "assym.s"
+#include "assym.h"
 
 #define INTR_POP                               \
        MEXITCOUNT;                             \
@@ -78,7 +81,7 @@
        pushq   (%rsi)
        movq    %rsp, %rsi
        call    dtrace_invop
-       ALTENTRY(dtrace_invop_callsite)
+//     ALTENTRY(dtrace_invop_callsite)
        addq    $8, %rsp
        cmpl    $DTRACE_INVOP_PUSHL_EBP, %eax
        je      bp_push
@@ -144,7 +147,7 @@
        /*NOTREACHED*/
 
 bp_ret:
-       INTR_POP
+//     INTR_POP
        pushq   %rax                    /* push temp */
        movq    32(%rsp), %rax          /* load %rsp */
        movq    (%rax), %rax            /* load calling RIP */
diff -r 39e7b6e16a29 -r e2f0faa2e811 external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c
--- a/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c Sat Mar 13 22:29:33 2010 +0000
+++ b/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c Sat Mar 13 22:31:15 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: dtrace_isa.c,v 1.2 2010/02/21 01:46:33 darran Exp $    */
+/*     $NetBSD: dtrace_isa.c,v 1.3 2010/03/13 22:31:15 christos Exp $  */
 
 /*
  * CDDL HEADER START
@@ -32,17 +32,19 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/stack.h>
-#include <sys/pcpu.h>
+//#include <sys/stack.h>
+//#include <sys/pcpu.h>
 
 #include <machine/frame.h>
-#include <machine/md_var.h>
+//#include <machine/md_var.h>
 #include <machine/reg.h>
-#include <machine/stack.h>
+//#include <machine/stack.h>
 
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
+//#include <vm/vm.h>
+//#include <vm/vm_param.h>
+//#include <vm/pmap.h>
+#include <machine/vmparam.h>
+#include <machine/pmap.h>
 
 
 uint8_t dtrace_fuword8_nocheck(void *);
@@ -50,6 +52,19 @@
 uint32_t dtrace_fuword32_nocheck(void *);
 uint64_t dtrace_fuword64_nocheck(void *);
 
+uintptr_t kernelbase = (uintptr_t)KERNBASE;
+        
+#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK && \
+     ((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS)
+
+struct amd64_frame {     
+       struct amd64_frame      *f_frame;
+       int                      f_retaddr; 
+       int                      f_arg0;
+};
+
+typedef unsigned long vm_offset_t;
+
 void
 dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
     uint32_t *intrpc)
@@ -58,7 +73,7 @@
        register_t rbp;
        struct amd64_frame *frame;
        vm_offset_t callpc;
-       pc_t caller = (pc_t) solaris_cpu[curcpu].cpu_dtrace_caller;
+       pc_t caller = (pc_t) solaris_cpu[cpu_number()].cpu_dtrace_caller;
 
        if (intrpc != 0)
                pcstack[depth++] = (pc_t) intrpc;
@@ -89,7 +104,7 @@
 
                if (frame->f_frame <= frame ||
                    (vm_offset_t)frame->f_frame >=
-                   (vm_offset_t)rbp + KSTACK_PAGES * PAGE_SIZE)
+                   (vm_offset_t)rbp + KSTACK_SIZE)
                        break;
                frame = frame->f_frame;
        }
@@ -99,12 +114,13 @@
        }
 }
 
+#ifdef notyet
 static int
 dtrace_getustack_common(uint64_t *pcstack, int pcstack_limit, uintptr_t pc,
     uintptr_t sp)
 {
        volatile uint16_t *flags =
-           (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
+           (volatile uint16_t *)&cpu_core[cpu_number()].cpuc_dtrace_flags;
        struct amd64_frame *frame;
        int ret = 0;
 
@@ -141,11 +157,12 @@
 void
 dtrace_getupcstack(uint64_t *pcstack, int pcstack_limit)
 {
+       klwp_t *lwp = ttolwp(curthread);
        proc_t *p = curproc;
-       struct trapframe *tf;
+       struct regs *rp;
        uintptr_t pc, sp;
        volatile uint16_t *flags =
-           (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
+           (volatile uint16_t *)&cpu_core[cpu_number()].cpuc_dtrace_flags;
        int n;
 
        if (*flags & CPU_DTRACE_FAULT)
@@ -157,7 +174,7 @@
        /*
         * If there's no user context we still need to zero the stack.
         */
-       if (p == NULL || (tf = curthread->td_frame) == NULL)
+       if (lwp == NULL || p == NULL || (rp = lwp->lwp_regs) == NULL)
                goto zero;
 
        *pcstack++ = (uint64_t)p->p_pid;
@@ -166,8 +183,8 @@
        if (pcstack_limit <= 0)
                return;
 
-       pc = tf->tf_rip;
-       sp = tf->tf_rsp;
+       pc = rp->r_rip;
+       sp = rp->r_rsp;
 
        if (DTRACE_CPUFLAG_ISSET(CPU_DTRACE_ENTRY)) {
                *pcstack++ = (uint64_t)pc;
@@ -193,32 +210,8 @@
 int
 dtrace_getustackdepth(void)
 {
-       proc_t *p = curproc;
-       struct trapframe *tf;
-       uintptr_t pc, sp;
-       int n = 0;
-
-       if (p == NULL || (tf = curthread->td_frame) == NULL)
-               return (0);
-
-       if (DTRACE_CPUFLAG_ISSET(CPU_DTRACE_FAULT))
-               return (-1);
-
-       pc = tf->tf_rip;
-       sp = tf->tf_rsp;
-
-       if (DTRACE_CPUFLAG_ISSET(CPU_DTRACE_ENTRY)) {
-               n++;
-
-               pc = dtrace_fulword((void *) sp);
-       }
-
-       n += dtrace_getustack_common(NULL, 0, pc, sp);
-
-       return (n);
 }
 
-#ifdef notyet
 void
 dtrace_getufpstack(uint64_t *pcstack, uint64_t *fpstack, int pcstack_limit)
 {
@@ -227,7 +220,7 @@
        struct regs *rp;
        uintptr_t pc, sp, oldcontext;
        volatile uint16_t *flags =
-           (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
+           (volatile uint16_t *)&cpu_core[cpu_number()].cpuc_dtrace_flags;
        size_t s1, s2;
 
        if (*flags & CPU_DTRACE_FAULT)
@@ -343,9 +336,9 @@
                            sizeof (uintptr_t));
 
                        if (arg <= inreg) {
-                               stack = (uintptr_t *)&rp->r_rdi;
+                               stack = (uintptr_t *)&rp->regs[_REG_RDI];
                        } else {
-                               stack = (uintptr_t *)(rp->r_rsp);
+                               stack = (uintptr_t *)(rp->regs[_REG_RSP]);
                                arg -= inreg;
                        }
                        goto load;
@@ -404,7 +397,7 @@
                depth++;
                if (frame->f_frame <= frame ||
                    (vm_offset_t)frame->f_frame >=
-                   (vm_offset_t)rbp + KSTACK_PAGES * PAGE_SIZE)
+                   (vm_offset_t)rbp + KSTACK_SIZE)
                        break;
                frame = frame->f_frame;
        }
@@ -528,7 +521,7 @@
 
        if (uaddr + size > VM_MAXUSER_ADDRESS || uaddr + size < uaddr) {
                DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = uaddr;
+               cpu_core[cpu_number()].cpuc_dtrace_illval = uaddr;
                return (0);
        }
 
@@ -572,7 +565,7 @@
 {
        if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
                DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
+               cpu_core[cpu_number()].cpuc_dtrace_illval = (uintptr_t)uaddr;
                return (0);
        }
        return (dtrace_fuword8_nocheck(uaddr));
@@ -583,7 +576,7 @@
 {
        if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
                DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
+               cpu_core[cpu_number()].cpuc_dtrace_illval = (uintptr_t)uaddr;
                return (0);
        }
        return (dtrace_fuword16_nocheck(uaddr));
@@ -594,7 +587,7 @@
 {
        if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
                DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
+               cpu_core[cpu_number()].cpuc_dtrace_illval = (uintptr_t)uaddr;
                return (0);
        }
        return (dtrace_fuword32_nocheck(uaddr));
@@ -605,7 +598,7 @@
 {
        if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
                DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
+               cpu_core[cpu_number()].cpuc_dtrace_illval = (uintptr_t)uaddr;
                return (0);
        }
        return (dtrace_fuword64_nocheck(uaddr));
diff -r 39e7b6e16a29 -r e2f0faa2e811 external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c
--- a/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c        Sat Mar 13 22:29:33 2010 +0000
+++ b/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c        Sat Mar 13 22:31:15 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: dtrace_subr.c,v 1.2 2010/02/21 01:46:33 darran Exp $   */
+/*     $NetBSD: dtrace_subr.c,v 1.3 2010/03/13 22:31:15 christos Exp $ */
 
 /*
  * CDDL HEADER START
@@ -35,13 +35,19 @@
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <sys/kmem.h>
-#include <sys/smp.h>
+#include <sys/xcall.h>
+#include <sys/cpu.h>
+#include <sys/cpuvar.h>
+//#include <sys/smp.h>
 #include <sys/dtrace_impl.h>
 #include <sys/dtrace_bsd.h>
-#include <machine/clock.h>
 #include <machine/frame.h>
-#include <vm/pmap.h>
+#include <machine/cpu_counter.h>



Home | Main Index | Thread Index | Old Index