Source-Changes-HG archive

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

[src/trunk]: src/external/cddl/osnet/dev Work in progress dtrace for MIPS. M...



details:   https://anonhg.NetBSD.org/src/rev/d3aad1ee1acc
branches:  trunk
changeset: 954109:d3aad1ee1acc
user:      simonb <simonb%NetBSD.org@localhost>
date:      Mon Mar 29 05:17:09 2021 +0000

description:
Work in progress dtrace for MIPS.  MIPS support mostly copied from
FreeBSD, with NetBSD-specific changes largely based on aarch64 dtrace
support.  Working well enough for system call tracing.

diffstat:

 external/cddl/osnet/dev/dtrace/mips/dtrace_asm.S  |  233 ++++++
 external/cddl/osnet/dev/dtrace/mips/dtrace_isa.c  |  739 ++++++++++++++++++++++
 external/cddl/osnet/dev/dtrace/mips/dtrace_subr.c |  314 +++++++++
 external/cddl/osnet/dev/dtrace/mips/regset.h      |   62 +
 external/cddl/osnet/dev/fbt/mips/fbt_isa.c        |  231 ++++++
 external/cddl/osnet/dev/fbt/mips/fbt_isa.h        |   32 +
 6 files changed, 1611 insertions(+), 0 deletions(-)

diffs (truncated from 1635 to 300 lines):

diff -r 01306500e02c -r d3aad1ee1acc external/cddl/osnet/dev/dtrace/mips/dtrace_asm.S
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/cddl/osnet/dev/dtrace/mips/dtrace_asm.S  Mon Mar 29 05:17:09 2021 +0000
@@ -0,0 +1,233 @@
+/*
+ * 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
+
+#include <sys/cpuvar_defs.h>
+#include <sys/dtrace.h>
+
+#include <machine/asm.h>
+#include <mips/cpuregs.h>
+#include <machine/regnum.h>
+
+        .set    noreorder               # Noreorder is default style!
+
+/*
+ * Primitives
+ */
+
+        .text
+
+/*
+void dtrace_membar_producer(void)
+*/
+LEAF(dtrace_membar_producer)
+       j       ra
+       nop
+END(dtrace_membar_producer)
+
+/*
+void dtrace_membar_consumer(void)
+*/
+LEAF(dtrace_membar_consumer)
+       j       ra
+       nop
+END(dtrace_membar_consumer)
+
+/*
+dtrace_icookie_t dtrace_interrupt_disable(void)
+*/
+LEAF(dtrace_interrupt_disable)
+       mfc0    t0, MIPS_COP_0_STATUS
+       move    v0, t0
+       and     v0, v0, MIPS_SR_INT_IE
+       and     t0, t0, ~MIPS_SR_INT_IE
+       mtc0    t0, MIPS_COP_0_STATUS
+       j       ra
+       nop
+END(dtrace_interrupt_disable)
+
+/*
+void dtrace_interrupt_enable(dtrace_icookie_t cookie)
+*/
+LEAF(dtrace_interrupt_enable)
+       mfc0    t0, MIPS_COP_0_STATUS
+       beqz    a0, not_enabled
+       or      t0, t0, MIPS_SR_INT_IE
+       mtc0    t0, MIPS_COP_0_STATUS
+not_enabled:
+       j       ra
+       nop
+END(dtrace_interrupt_enable)
+
+/*
+uint32_t dtrace_cas32(uint32_t *target, uint32_t cmp, uint32_t new)
+*/
+LEAF(dtrace_cas32)
+1:
+       move    t1, a2
+       ll      t0, 0(a0)
+       bne     t0, a1, 2f
+       nop
+       sc      t1, 0(a0)
+       beqz    t1, 1b
+       nop
+2:     move    v0, t0
+       j       ra
+       nop
+END(dtrace_cas32)
+
+/*
+void *
+dtrace_casptr(void *target, void *cmp, void *new)
+*/
+LEAF(dtrace_casptr)
+1:
+       move    t1, a2
+       PTR_LL  t0, 0(a0)
+       bne     t0, a1, 2f
+       nop
+       PTR_SC  t1, 0(a0)
+       beqz    t1, 1b
+       nop
+2:     move    v0, t0
+       j       ra
+       nop
+END(dtrace_casptr)
+
+
+/*
+uintptr_t
+dtrace_fulword(void *addr)
+*/
+LEAF(dtrace_fulword)
+END(dtrace_fulword)
+
+/*
+uint8_t
+dtrace_fuword8_nocheck(void *addr)
+*/
+LEAF(dtrace_fuword8_nocheck)
+       lbu     v0, 0(a0)
+       j       ra
+       nop
+END(dtrace_fuword8_nocheck)
+
+/*
+uint16_t
+dtrace_fuword16_nocheck(void *addr)
+*/
+LEAF(dtrace_fuword16_nocheck)
+       lhu     v0, 0(a0)
+       j       ra
+       nop
+END(dtrace_fuword16_nocheck)
+
+/*
+uint32_t
+dtrace_fuword32_nocheck(void *addr)
+*/
+LEAF(dtrace_fuword32_nocheck)
+       lw      v0, 0(a0)
+       j       ra
+       nop
+END(dtrace_fuword32_nocheck)
+
+/*
+uint64_t
+dtrace_fuword64_nocheck(void *addr)
+*/
+LEAF(dtrace_fuword64_nocheck)
+#if defined(__mips_n64) || defined(__mips_n32)
+       ld      v0, 0(a0)
+#else
+       lw      v1,4(a0)
+       lw      v0,0(a0)
+#endif
+       j       ra
+       nop
+END(dtrace_fuword64_nocheck)
+
+/*
+XXX: unoptimized
+void
+dtrace_copy(uintptr_t src, uintptr_t dest, size_t size)
+*/
+LEAF(dtrace_copy)
+1:
+       beqz    a2, 2f
+       nop
+       lbu     t0, 0(a0)
+       sb      t0, 0(a1)
+       PTR_ADDU        a0, a0, 1
+       PTR_ADDU        a1, a1, 1
+       INT_SUBU        a2, a2, 1
+       j       1b
+       nop
+2:
+       j       ra
+       nop
+END(dtrace_copy)
+
+/*
+XXX: Unoptimized. Check for flags on page boundaries only(?)
+void
+dtrace_copystr(uintptr_t uaddr, uintptr_t kaddr, size_t size,
+    volatile uint16_t *flags)
+*/
+LEAF(dtrace_copystr)
+1:
+       lbu     t0, 0(a0)
+       sb      t0, 0(a1)
+       PTR_ADDU        a0, a0, 1
+       PTR_ADDU        a1, a1, 1
+       INT_SUBU        a2, a2, 1
+       beqz    t0, 2f
+       nop
+       lhu     t1, (a3)
+       and     t1, t1, CPU_DTRACE_BADADDR
+       bnez    t1, 2f
+       nop
+
+       bnez    a2, 1b
+       nop
+2:
+       j       ra
+       nop
+END(dtrace_copystr)
+
+/*
+uintptr_t
+dtrace_caller(int aframes)
+*/
+LEAF(dtrace_caller)
+       li      v0, -1
+       j       ra
+       nop
+END(dtrace_caller)
diff -r 01306500e02c -r d3aad1ee1acc external/cddl/osnet/dev/dtrace/mips/dtrace_isa.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/cddl/osnet/dev/dtrace/mips/dtrace_isa.c  Mon Mar 29 05:17:09 2021 +0000
@@ -0,0 +1,739 @@
+/*
+ * 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/kernel.h>
+
+#include <mips/cpuregs.h>
+#include <mips/frame.h>
+#include <mips/locore.h>
+#include <mips/reg.h>
+
+#include <machine/db_machdep.h>
+#include <machine/mips_opcode.h>
+#include <ddb/db_sym.h>
+#include <ddb/ddb.h>
+
+#include "regset.h"
+
+#ifdef __mips_n64
+#define        MIPS_IS_VALID_KERNELADDR(reg)   ((((reg) & 3) == 0) && \
+                                       ((vm_offset_t)(reg) >= MIPS_XKPHYS_START))
+#else
+#define        MIPS_IS_VALID_KERNELADDR(reg)   ((((reg) & 3) == 0) && \
+                                       ((vm_offset_t)(reg) >= MIPS_KSEG0_START))
+#endif
+
+#ifdef __FreeBSD__
+#define        CURRENT_CPU             curcpu
+#define        CURRENT_TRAPFRAME       curthread->td_frame
+#endif
+#ifdef __NetBSD__



Home | Main Index | Thread Index | Old Index