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