Module Name: src Committed By: chs Date: Mon Jun 11 15:18:05 UTC 2012
Modified Files: src/external/cddl/osnet/dev/dtrace/amd64: dtrace_asm.S dtrace_isa.c dtrace_subr.c src/sys/arch/amd64/amd64: genassym.cf src/sys/arch/amd64/include: Makefile.inc asm.h Log Message: make dtrace work on amd64. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S \ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c cvs rdiff -u -r1.50 -r1.51 src/sys/arch/amd64/amd64/genassym.cf cvs rdiff -u -r1.3 -r1.4 src/sys/arch/amd64/include/Makefile.inc cvs rdiff -u -r1.14 -r1.15 src/sys/arch/amd64/include/asm.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S diff -u src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S:1.3 src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S:1.4 --- src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S:1.3 Sat Mar 13 22:31:15 2010 +++ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S Mon Jun 11 15:18:05 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: dtrace_asm.S,v 1.3 2010/03/13 22:31:15 christos Exp $ */ +/* $NetBSD: dtrace_asm.S,v 1.4 2012/06/11 15:18:05 chs Exp $ */ /* * CDDL HEADER START @@ -32,7 +32,6 @@ #define _ASM - #include <sys/cpuvar_defs.h> #include <sys/dtrace.h> #include <machine/asm.h> @@ -65,8 +64,6 @@ 1: addq $TF_RIP,%rsp; - .globl calltrap - .type calltrap,@function ENTRY(dtrace_invop_start) /* @@ -81,7 +78,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 @@ -147,7 +144,7 @@ bp_nop: /*NOTREACHED*/ bp_ret: -// INTR_POP + INTR_POP pushq %rax /* push temp */ movq 32(%rsp), %rax /* load %rsp */ movq (%rax), %rax /* load calling RIP */ Index: src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c diff -u src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c:1.3 src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c:1.4 --- src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c:1.3 Sat Mar 13 22:31:15 2010 +++ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_isa.c Mon Jun 11 15:18:05 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: dtrace_isa.c,v 1.3 2010/03/13 22:31:15 christos Exp $ */ +/* $NetBSD: dtrace_isa.c,v 1.4 2012/06/11 15:18:05 chs Exp $ */ /* * CDDL HEADER START @@ -52,15 +52,14 @@ uint16_t dtrace_fuword16_nocheck(void *) 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) +uintptr_t kernelbase = (uintptr_t)KERN_BASE; + +#define INKERNEL(va) ((intptr_t)(va) < 0) struct amd64_frame { struct amd64_frame *f_frame; - int f_retaddr; - int f_arg0; + uintptr_t f_retaddr; + uintptr_t f_arg0; }; typedef unsigned long vm_offset_t; Index: src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c diff -u src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:1.5 src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:1.6 --- src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:1.5 Wed Aug 31 21:57:16 2011 +++ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c Mon Jun 11 15:18:05 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: dtrace_subr.c,v 1.5 2011/08/31 21:57:16 christos Exp $ */ +/* $NetBSD: dtrace_subr.c,v 1.6 2012/06/11 15:18:05 chs Exp $ */ /* * CDDL HEADER START @@ -374,6 +374,18 @@ dtrace_safe_defer_signal(void) } #endif +#ifdef __NetBSD__ +static __inline uint64_t +dtrace_rdtsc(void) +{ + uint32_t hi, lo; + + __asm volatile("rdtsc" : "=d" (hi), "=a" (lo)); + return (((uint64_t)hi << 32) | (uint64_t) lo); +} +#define rdtsc dtrace_rdtsc +#endif + #ifdef notyet static int64_t tgt_cpu_tsc; static int64_t hst_cpu_tsc; Index: src/sys/arch/amd64/amd64/genassym.cf diff -u src/sys/arch/amd64/amd64/genassym.cf:1.50 src/sys/arch/amd64/amd64/genassym.cf:1.51 --- src/sys/arch/amd64/amd64/genassym.cf:1.50 Fri Apr 20 22:23:24 2012 +++ src/sys/arch/amd64/amd64/genassym.cf Mon Jun 11 15:18:05 2012 @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.50 2012/04/20 22:23:24 rmind Exp $ +# $NetBSD: genassym.cf,v 1.51 2012/06/11 15:18:05 chs Exp $ # # Copyright (c) 1998, 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -372,3 +372,5 @@ define PGSHIFT PGSHIFT define VM_MIN_KERNEL_ADDRESS_HIGH32 (VM_MIN_KERNEL_ADDRESS >> 32) define RESCHED_KPREEMPT RESCHED_KPREEMPT + +define SEL_RPL_MASK SEL_RPL Index: src/sys/arch/amd64/include/Makefile.inc diff -u src/sys/arch/amd64/include/Makefile.inc:1.3 src/sys/arch/amd64/include/Makefile.inc:1.4 --- src/sys/arch/amd64/include/Makefile.inc:1.3 Fri Nov 27 13:50:29 2009 +++ src/sys/arch/amd64/include/Makefile.inc Mon Jun 11 15:18:05 2012 @@ -1,10 +1,10 @@ -# $NetBSD: Makefile.inc,v 1.3 2009/11/27 13:50:29 pooka Exp $ +# $NetBSD: Makefile.inc,v 1.4 2012/06/11 15:18:05 chs Exp $ CFLAGS+= -mno-red-zone # this should really be !(RUMPKERNEL && PIC) .if !defined(RUMPKERNEL) -CFLAGS+= -mcmodel=kernel +CFLAGS+= -mcmodel=kernel -fno-omit-frame-pointer .endif USE_SSP?= yes Index: src/sys/arch/amd64/include/asm.h diff -u src/sys/arch/amd64/include/asm.h:1.14 src/sys/arch/amd64/include/asm.h:1.15 --- src/sys/arch/amd64/include/asm.h:1.14 Mon Dec 20 21:11:24 2010 +++ src/sys/arch/amd64/include/asm.h Mon Jun 11 15:18:05 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: asm.h,v 1.14 2010/12/20 21:11:24 joerg Exp $ */ +/* $NetBSD: asm.h,v 1.15 2012/06/11 15:18:05 chs Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -101,6 +101,7 @@ #define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE #define NENTRY(y) _ENTRY(_C_LABEL(y)) +#define ALTENTRY(x) NENTRY(x) #define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE #define LABEL(y) _LABEL(_C_LABEL(y))