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/507bad5cfc7f
branches: trunk
changeset: 960797:507bad5cfc7f
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 dfca6ff62584 -r 507bad5cfc7f 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 dfca6ff62584 -r 507bad5cfc7f 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