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/zfs compile on arm based on ...



details:   https://anonhg.NetBSD.org/src/rev/e565a35da819
branches:  trunk
changeset: 787513:e565a35da819
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Jun 21 19:16:00 2013 +0000

description:
Make dtrace/zfs compile on arm based on the diff from:
    http://people.freebsd.org/~gonzo/arm/dtrace-arm.diff
Completely untested, kernel support not added.

diffstat:

 external/cddl/osnet/dev/dtrace/arm/dtrace_asm.S        |  222 +++++++++++
 external/cddl/osnet/dev/dtrace/arm/dtrace_isa.c        |  325 +++++++++++++++++
 external/cddl/osnet/dev/dtrace/arm/dtrace_subr.c       |  187 +++++++++
 external/cddl/osnet/dev/dtrace/arm/regset.h            |   62 +++
 external/cddl/osnet/dev/lockstat/lockstat.c            |    4 +-
 external/cddl/osnet/dist/lib/libdtrace/arm/dt_isadep.c |  184 +++++++++
 external/cddl/osnet/dist/uts/arm/sys/fasttrap_isa.h    |   94 ++++
 external/cddl/osnet/lib/libdtrace/Makefile             |    6 +-
 external/cddl/osnet/lib/libzpool/Makefile              |    5 +-
 external/cddl/osnet/lib/libzpool/atomic.c              |   32 +
 10 files changed, 1117 insertions(+), 4 deletions(-)

diffs (truncated from 1191 to 300 lines):

diff -r 26941f0c7e8d -r e565a35da819 external/cddl/osnet/dev/dtrace/arm/dtrace_asm.S
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/cddl/osnet/dev/dtrace/arm/dtrace_asm.S   Fri Jun 21 19:16:00 2013 +0000
@@ -0,0 +1,222 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ * $FreeBSD$
+ */
+/*
+ * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#define _ASM
+#define _LOCORE
+#define LOCORE
+
+#include <sys/cpuvar_defs.h>
+#include <sys/dtrace.h>
+
+#include <machine/asm.h>
+
+#include "assym.s"
+
+/*
+void dtrace_membar_producer(void)
+*/
+ENTRY(dtrace_membar_producer)
+       RET
+
+/*
+void dtrace_membar_consumer(void)
+*/
+ENTRY(dtrace_membar_consumer)
+       RET
+
+/*
+dtrace_icookie_t dtrace_interrupt_disable(void)
+*/
+ENTRY(dtrace_interrupt_disable)
+       mrs     r0, cpsr
+       mov     r1, r0
+       orr     r1, r1, #(I32_bit|F32_bit)
+       msr     cpsr_c, r1
+       RET
+/*
+void dtrace_interrupt_enable(dtrace_icookie_t cookie)
+*/
+ENTRY(dtrace_interrupt_enable)
+       and     r0, r0, #(I32_bit|F32_bit)
+       mrs     r1, cpsr
+       bic     r1, r1, #(I32_bit|F32_bit)
+       orr     r1, r1, r0
+       msr     cpsr_c, r1
+       RET
+
+/*
+uint32_t dtrace_cas32(uint32_t *target, uint32_t cmp, uint32_t new)
+XXX: just disable interrupts for now, add proper implementation for
+ARMv6/ARMv7 later
+*/
+ENTRY_NP(dtrace_casptr)
+ENTRY(dtrace_cas32)
+       stmfd   sp!, {r4, r5}
+
+       mrs     r3, cpsr
+       mov     r4, r3
+       orr     r4, r4, #(I32_bit|F32_bit)
+       msr     cpsr_c, r4
+
+       ldr     r5, [r0]
+       cmp     r5, r2
+       movne   r0, #0
+       bne     2f
+
+       str     r2, [r0]
+       mov     r0, #1
+
+2:
+       msr     cpsr_c, r3
+       ldmfd   sp!, {r4, r5}
+       RET
+
+/*
+uint8_t
+dtrace_fuword8_nocheck(void *addr)
+*/
+ENTRY(dtrace_fuword8_nocheck)
+       ldrb    r3, [r0]
+       mov     r0, r3
+       RET
+
+/*
+uint16_t
+dtrace_fuword16_nocheck(void *addr)
+*/
+ENTRY(dtrace_fuword16_nocheck)
+       ldrh    r3, [r0]
+       mov     r0, r3
+       RET
+
+/*
+uint32_t
+dtrace_fuword32_nocheck(void *addr)
+*/
+ENTRY(dtrace_fuword32_nocheck)
+       ldr     r3, [r0]
+       mov     r0, r3
+       RET
+
+/*
+uint64_t
+dtrace_fuword64_nocheck(void *addr)
+XXX: add byteorder check
+*/
+ENTRY(dtrace_fuword64_nocheck)
+       ldm     r0, {r2, r3}
+
+       mov     r0, r2
+       mov     r1, r3
+#if 0
+/* little endian */
+       mov     r0, r2
+       mov     r1, r3
+/* big endian */
+       mov     r0, r3
+       mov     r1, r2
+#endif
+       RET
+
+/*
+void
+dtrace_copy(uintptr_t uaddr, uintptr_t kaddr, size_t size)
+*/
+ENTRY(dtrace_copy)
+       stmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
+       teq     r2, #0x00000000
+       mov     r5, #0x00000000
+       beq     2f
+
+1:     ldrb    r4, [r0], #0x0001
+       add     r5, r5, #0x00000001
+       strb    r4, [r1], #0x0001
+       teqne   r5, r2
+       bne     1b
+
+2:     ldmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
+       RET
+
+
+/*
+void
+dtrace_copystr(uintptr_t uaddr, uintptr_t kaddr, size_t size,
+    volatile uint16_t *flags)
+XXX: Check for flags?
+*/
+ENTRY(dtrace_copystr)
+       stmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
+       teq     r2, #0x00000000
+       mov     r5, #0x00000000
+       beq     2f
+
+1:     ldrb    r4, [r0], #0x0001
+       add     r5, r5, #0x00000001
+       teq     r4, #0x00000000
+       strb    r4, [r1], #0x0001
+       teqne   r5, r2
+       bne     1b
+
+2:     ldmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
+       RET
+
+
+/*
+void dtrace_invop_init(void)
+*/
+ENTRY(dtrace_invop_init)
+       RET
+
+/*
+void dtrace_invop_uninit(void)
+*/
+ENTRY(dtrace_invop_uninit)
+       RET
+
+/*
+void
+vpanic(const char *format, va_list alist)
+*/
+ENTRY(vpanic)                          /* Initial stack layout: */
+vpanic_common:
+       RET
+
+/*
+void
+dtrace_vpanic(const char *format, va_list alist)
+*/
+ENTRY(dtrace_vpanic)                   /* Initial stack layout: */
+       RET
+
+/*
+uintptr_t
+dtrace_caller(int aframes)
+*/
+ENTRY(dtrace_caller)
+       mov     r0, #-1
+       RET
diff -r 26941f0c7e8d -r e565a35da819 external/cddl/osnet/dev/dtrace/arm/dtrace_isa.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/cddl/osnet/dev/dtrace/arm/dtrace_isa.c   Fri Jun 21 19:16:00 2013 +0000
@@ -0,0 +1,325 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ * $FreeBSD$
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+#include <sys/cdefs.h>
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/stack.h>
+#include <sys/pcpu.h>
+
+#include <machine/frame.h>
+#include <machine/md_var.h>
+#include <machine/reg.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/pmap.h>
+
+#include <machine/db_machdep.h>
+#include <machine/md_var.h>
+#include <machine/vmparam.h>
+#include <machine/stack.h>
+#include <ddb/db_sym.h>
+#include <ddb/ddb.h>
+#include <sys/kdb.h>
+
+#include "regset.h"
+
+/*
+ * Wee need some reasonable default to prevent backtrace code
+ * from wandering too far
+ */
+#define        MAX_FUNCTION_SIZE 0x10000
+#define        MAX_PROLOGUE_SIZE 0x100
+
+
+uint8_t dtrace_fuword8_nocheck(void *);
+uint16_t dtrace_fuword16_nocheck(void *);
+uint32_t dtrace_fuword32_nocheck(void *);
+uint64_t dtrace_fuword64_nocheck(void *);
+
+void
+dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
+    uint32_t *intrpc)
+{



Home | Main Index | Thread Index | Old Index