The branch main has been updated by imp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=746e31e41818e02110c5aa8df509cc438b03a2dc

commit 746e31e41818e02110c5aa8df509cc438b03a2dc
Author:     Warner Losh <[email protected]>
AuthorDate: 2022-01-07 15:59:15 +0000
Commit:     Warner Losh <[email protected]>
CommitDate: 2022-01-07 16:00:56 +0000

    Remove mips dtrace.
    
    Remove mips dtrace code. It's no longer needed.
    
    Sponsored by:           Netflix
---
 sys/cddl/dev/dtrace/mips/dtrace_asm.S  | 234 -----------
 sys/cddl/dev/dtrace/mips/dtrace_isa.c  | 724 ---------------------------------
 sys/cddl/dev/dtrace/mips/dtrace_subr.c | 289 -------------
 sys/cddl/dev/dtrace/mips/regset.h      |  62 ---
 sys/cddl/dev/fbt/mips/fbt_isa.c        | 164 --------
 sys/cddl/dev/fbt/mips/fbt_isa.h        |  30 --
 6 files changed, 1503 deletions(-)

diff --git a/sys/cddl/dev/dtrace/mips/dtrace_asm.S 
b/sys/cddl/dev/dtrace/mips/dtrace_asm.S
deleted file mode 100644
index b40336c0f114..000000000000
--- a/sys/cddl/dev/dtrace/mips/dtrace_asm.S
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * 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 <machine/cpu.h>
-#include <machine/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 --git a/sys/cddl/dev/dtrace/mips/dtrace_isa.c 
b/sys/cddl/dev/dtrace/mips/dtrace_isa.c
deleted file mode 100644
index 8d65012dadf0..000000000000
--- a/sys/cddl/dev/dtrace/mips/dtrace_isa.c
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
- * 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 <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-
-#include <machine/db_machdep.h>
-#include <machine/md_var.h>
-#include <machine/mips_opcode.h>
-#include <ddb/db_sym.h>
-#include <ddb/ddb.h>
-#include <sys/kdb.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
-
-
-
-/*
- * 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 *);
-
-static int dtrace_next_frame(register_t *pc, register_t *sp, register_t *args, 
int *valid_args);
-static int dtrace_next_uframe(register_t *pc, register_t *sp, register_t *ra);
-
-void
-dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
-    uint32_t *intrpc)
-{
-       int depth = 0;
-       vm_offset_t callpc;
-       pc_t caller = (pc_t) solaris_cpu[curcpu].cpu_dtrace_caller;
-       register_t sp, ra, pc;
-
-       if (intrpc != 0)
-               pcstack[depth++] = (pc_t) intrpc;
-
-       aframes++;
-
-       sp = (register_t)(intptr_t)__builtin_frame_address(0);
-       ra = (register_t)(intptr_t)__builtin_return_address(0);
-
-               __asm __volatile(
-               "jal 99f\n"
-               "nop\n"
-               "99:\n"
-               "move %0, $31\n" /* get ra */
-               "move $31, %1\n" /* restore ra */
-               : "=r" (pc)
-               : "r" (ra));
-
-       while (depth < pcstack_limit) {
-
-               callpc = pc;
-
-               if (aframes > 0) {
-                       aframes--;
-                       if ((aframes == 0) && (caller != 0)) {
-                               pcstack[depth++] = caller;
-                       }
-               }
-               else {
-                       pcstack[depth++] = callpc;
-               }
-
-               if (dtrace_next_frame(&pc, &sp, NULL, NULL) < 0)
-                       break;
-       }
-
-       for (; depth < pcstack_limit; depth++) {
-               pcstack[depth] = 0;
-       }
-}
-
-void
-dtrace_getupcstack(uint64_t *pcstack, int pcstack_limit)
-{
-       proc_t *p = curproc;
-       struct trapframe *tf;
-       register_t sp, ra, pc;
-       volatile uint16_t *flags =
-           (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
-
-       if (*flags & CPU_DTRACE_FAULT)
-               return;
-
-       if (pcstack_limit <= 0)
-               return;
-
-       /*
-        * If there's no user context we still need to zero the stack.
-        */
-       if (p == NULL || (tf = curthread->td_frame) == NULL)
-               goto zero;
-
-       *pcstack++ = (uint64_t)p->p_pid;
-       pcstack_limit--;
-
-       if (pcstack_limit <= 0)
-               return;
-
-       pc = (uint64_t)tf->pc;
-       sp = (uint64_t)tf->sp;
-       ra = (uint64_t)tf->ra;
-       *pcstack++ = (uint64_t)tf->pc;
-       
-       /*
-        * Unwind, and unwind, and unwind
-        */
-       while (1) {
-               if (dtrace_next_uframe(&pc, &sp, &ra) < 0)
-                       break;
-
-               *pcstack++ = pc;
-               pcstack_limit--;
-
-               if (pcstack_limit <= 0)
-                       break;
-       }
-
-zero:
-       while (pcstack_limit-- > 0)
-               *pcstack++ = 0;
-}
-
-int
-dtrace_getustackdepth(void)
-{
-       int n = 0;
-       proc_t *p = curproc;
-       struct trapframe *tf;
-       register_t sp, ra, pc;
-       volatile uint16_t *flags =
-           (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
-
-       if (*flags & CPU_DTRACE_FAULT)
-               return (0);
-
-       if (p == NULL || (tf = curthread->td_frame) == NULL)
-               return (0);
-
-       pc = (uint64_t)tf->pc;
-       sp = (uint64_t)tf->sp;
-       ra = (uint64_t)tf->ra;
-       n++;
-       
-       /*
-        * Unwind, and unwind, and unwind
-        */
-       while (1) {
-               if (dtrace_next_uframe(&pc, &sp, &ra) < 0)
-                       break;
-               n++;
-       }
-
-       return (n);
-}
-
-void
-dtrace_getufpstack(uint64_t *pcstack, uint64_t *fpstack, int pcstack_limit)
-{
-       printf("IMPLEMENT ME: %s\n", __func__);
-}
-
-/*ARGSUSED*/
-uint64_t
-dtrace_getarg(int arg, int aframes)
-{
-       int i;
-       register_t sp, ra, pc;
-       /* XXX: Fix this ugly code */
-       register_t args[8];
-       int valid[8];
-
-       sp = (register_t)(intptr_t)__builtin_frame_address(0);
-       ra = (register_t)(intptr_t)__builtin_return_address(0);
-
-               __asm __volatile(
-               "jal 99f\n"
-               "nop\n"
-               "99:\n"
-               "move %0, $31\n" /* get ra */
-               "move $31, %1\n" /* restore ra */
-               : "=r" (pc)
-               : "r" (ra));
-
-       for (i = 0; i <= aframes + 1; i++) {
-               if (dtrace_next_frame(&pc, &sp, args, valid) < 0) {
-                       printf("%s: stack ends at frame #%d\n", __func__, i);
-                       return (0);
-               }
-       }
-
-       if (arg < 8) {
-               if (valid[arg])
-                       return (args[arg]);
-               else
-                       printf("%s: request arg%d is not valid\n", __func__, 
arg);
-       }
-
-       return (0);
-}
-
-int
-dtrace_getstackdepth(int aframes)
-{
-       register_t sp, ra, pc;
-       int depth = 0;
-
-       sp = (register_t)(intptr_t)__builtin_frame_address(0);
-       ra = (register_t)(intptr_t)__builtin_return_address(0);
-
-               __asm __volatile(
-               "jal 99f\n"
-               "nop\n"
-               "99:\n"
-               "move %0, $31\n" /* get ra */
-               "move $31, %1\n" /* restore ra */
-               : "=r" (pc)
-               : "r" (ra));
-
-       for (;;) {
-               if (dtrace_next_frame(&pc, &sp, NULL, NULL) < 0)
-                       break;
-               depth++;
-       }
-
-       if (depth < aframes)
-               return 0;
-       else
-               return depth - aframes;
-}
-
-ulong_t
-dtrace_getreg(struct trapframe *rp, uint_t reg)
-{
-
-       return (0);
-}
-
-static int
-dtrace_next_frame(register_t *pc, register_t *sp,
-       register_t *args, int *valid_args)
-{
-       InstFmt i;
-       /*
-        * Arrays for a0..a3 registers and flags if content
-        * of these registers is valid, e.g. obtained from the stack
-        */
-       uintptr_t va;
-       unsigned instr, mask;
-       unsigned int frames = 0;
-       int more, stksize;
-       register_t ra = 0;
-       int arg, r;
-       vm_offset_t addr;
-
-       /*
-        * Invalidate arguments values
-        */
-       if (valid_args) {
-               for (r = 0; r < 8; r++)
-                       valid_args[r] = 0;
-       }
-
-       /* Jump here after a nonstandard (interrupt handler) frame */
-       stksize = 0;
-       if (frames++ > 100) {
-               /* return breaks stackframe-size heuristics with gcc -O2 */
-               goto error;     /* XXX */
-       }
-
-       /* check for bad SP: could foul up next frame */
-       if (!MIPS_IS_VALID_KERNELADDR(*sp)) {
-               goto error;
-       }
-
-       /* check for bad PC */
-       if (!MIPS_IS_VALID_KERNELADDR(*pc)) {
-               goto error;
-       }
-
-       /*
-        * Find the beginning of the current subroutine by scanning
-        * backwards from the current PC for the end of the previous
-        * subroutine.
-        */
-       va = *pc - sizeof(int);
-       while (1) {
-               instr = kdbpeek((int *)va);
-
-               /* [d]addiu sp,sp,-X */
-               if (((instr & 0xffff8000) == 0x27bd8000)
-                   || ((instr & 0xffff8000) == 0x67bd8000))
-                       break;
-
-               /* jr   ra */
-               if (instr == 0x03e00008) {
-                       /* skip over branch-delay slot instruction */
-                       va += 2 * sizeof(int);
-                       break;
-               }
-
-               va -= sizeof(int);
-       }
-
-       /* skip over nulls which might separate .o files */
-       while ((instr = kdbpeek((int *)va)) == 0)
-               va += sizeof(int);
-
-       /* scan forwards to find stack size and any saved registers */
-       stksize = 0;
-       more = 3;
-       mask = 0;
-       for (; more; va += sizeof(int),
-           more = (more == 3) ? 3 : more - 1) {
-               /* stop if hit our current position */
-               if (va >= *pc)
-                       break;
-               instr = kdbpeek((int *)va);
-               i.word = instr;
-               switch (i.JType.op) {
-               case OP_SPECIAL:
-                       switch (i.RType.func) {
-                       case OP_JR:
-                       case OP_JALR:
-                               more = 2;       /* stop after next instruction 
*/
-                               break;
-
-                       case OP_SYSCALL:
-                       case OP_BREAK:
-                               more = 1;       /* stop now */
-                       };
-                       break;
-
-               case OP_BCOND:
-               case OP_J:
-               case OP_JAL:
-               case OP_BEQ:
-               case OP_BNE:
-               case OP_BLEZ:
-               case OP_BGTZ:
-                       more = 2;       /* stop after next instruction */
-                       break;
-
-               case OP_COP0:
-               case OP_COP1:
-               case OP_COP2:
-               case OP_COP3:
-                       switch (i.RType.rs) {
-                       case OP_BCx:
-                       case OP_BCy:
-                               more = 2;       /* stop after next instruction 
*/
-                       };
-                       break;
-
-               case OP_SW:
-                       /* look for saved registers on the stack */
-                       if (i.IType.rs != 29)
-                               break;
-                       /* only restore the first one */
-                       if (mask & (1 << i.IType.rt))
-                               break;
-                       mask |= (1 << i.IType.rt);
-                       addr = (vm_offset_t)(*sp + (short)i.IType.imm);
-                       switch (i.IType.rt) {
-                       case 4:/* a0 */
-                       case 5:/* a1 */
-                       case 6:/* a2 */
-                       case 7:/* a3 */
-#if defined(__mips_n64) || defined(__mips_n32)
-                       case 8:/* a4 */
-                       case 9:/* a5 */
-                       case 10:/* a6 */
-                       case 11:/* a7 */
-#endif
-                               arg = i.IType.rt - 4;
-                               if (args)
-                                       args[arg] = kdbpeek((int*)addr);
-                               if (valid_args)
-                                       valid_args[arg] = 1;
-                               break;
-                       case 31:        /* ra */
-                               ra = kdbpeek((int *)addr);
-                       }
-                       break;
-
-               case OP_SD:
-                       /* look for saved registers on the stack */
-                       if (i.IType.rs != 29)
-                               break;
-                       /* only restore the first one */
-                       if (mask & (1 << i.IType.rt))
-                               break;
-                       mask |= (1 << i.IType.rt);
-                       addr = (vm_offset_t)(*sp + (short)i.IType.imm);
-                       switch (i.IType.rt) {
-                       case 4:/* a0 */
-                       case 5:/* a1 */
-                       case 6:/* a2 */
-                       case 7:/* a3 */
-#if defined(__mips_n64) || defined(__mips_n32)
-                       case 8:/* a4 */
-                       case 9:/* a5 */
-                       case 10:/* a6 */
-                       case 11:/* a7 */
-#endif
-                               arg = i.IType.rt - 4;
-                               if (args)
-                                       args[arg] = kdbpeekd((int *)addr);
-                               if (valid_args)
-                                       valid_args[arg] = 1;
-                               break;
-
-                       case 31:        /* ra */
-                               ra = kdbpeekd((int *)addr);
-                       }
-                       break;
-
-               case OP_ADDI:
-               case OP_ADDIU:
-               case OP_DADDI:
-               case OP_DADDIU:
-                       /* look for stack pointer adjustment */
-                       if (i.IType.rs != 29 || i.IType.rt != 29)
-                               break;
-                       stksize = -((short)i.IType.imm);
-               }
-       }
-
-       if (!MIPS_IS_VALID_KERNELADDR(ra)) 
-               return (-1);
-
-       *pc = ra;
-       *sp += stksize;
-
-#if defined(__mips_o32)
-       /*
-        * For MIPS32 fill out arguments 5..8 from the stack
-        */
-       for (arg = 4; arg < 8; arg++) {
-               addr = (vm_offset_t)(*sp + arg*sizeof(register_t));
-               if (args)
-                       args[arg] = kdbpeekd((int *)addr);
-               if (valid_args)
-                       valid_args[arg] = 1;
-       }
-#endif
-
-       return (0);
-error:
-       return (-1);
-}
-
-static int
-dtrace_next_uframe(register_t *pc, register_t *sp, register_t *ra)
-{
-       int offset, registers_on_stack;
-       uint32_t opcode, mask;
-       register_t function_start;
-       int stksize;
-       InstFmt i;
-
-       volatile uint16_t *flags =
-           (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
-
-       registers_on_stack = 0;
-       mask = 0;
-       function_start = 0;
-       offset = 0;
-       stksize = 0;
-
-       while (offset < MAX_FUNCTION_SIZE) {
-               opcode = dtrace_fuword32((void *)(vm_offset_t)(*pc - offset));
-
-               if (*flags & CPU_DTRACE_FAULT)
-                       goto fault;
-
-               /* [d]addiu sp, sp, -X*/
-               if (((opcode & 0xffff8000) == 0x27bd8000)
-                   || ((opcode & 0xffff8000) == 0x67bd8000)) {
-                       function_start = *pc - offset;
-                       registers_on_stack = 1;
-                       break;
-               }
-
-               /* lui gp, X */
-               if ((opcode & 0xffff8000) == 0x3c1c0000) {
-                       /*
-                        * Function might start with this instruction
-                        * Keep an eye on "jr ra" and sp correction
-                        * with positive value further on
-                        */
-                       function_start = *pc - offset;
-               }
-
-               if (function_start) {
-                       /* 
-                        * Stop looking further. Possible end of
-                        * function instruction: it means there is no
-                        * stack modifications, sp is unchanged
-                        */
-
-                       /* [d]addiu sp,sp,X */
-                       if (((opcode & 0xffff8000) == 0x27bd0000)
-                           || ((opcode & 0xffff8000) == 0x67bd0000))
-                               break;
-
-                       if (opcode == 0x03e00008)
-                               break;
-               }
-
-               offset += sizeof(int);
-       }
-
-       if (!function_start)
-               return (-1);
-
-       if (registers_on_stack) {
-               offset = 0;
-               while ((offset < MAX_PROLOGUE_SIZE) 
-                   && ((function_start + offset) < *pc)) {
-                       i.word = 
-                           dtrace_fuword32((void 
*)(vm_offset_t)(function_start + offset));
-                       switch (i.JType.op) {
-                       case OP_SW:
-                               /* look for saved registers on the stack */
-                               if (i.IType.rs != 29)
-                                       break;
-                               /* only restore the first one */
-                               if (mask & (1 << i.IType.rt))
-                                       break;
-                               mask |= (1 << i.IType.rt);
-                               if (i.IType.rt == 31)
-                                       *ra = dtrace_fuword32((void 
*)(vm_offset_t)(*sp + (short)i.IType.imm));
-                               break;
-
-                       case OP_SD:
-                               /* look for saved registers on the stack */
-                               if (i.IType.rs != 29)
-                                       break;
-                               /* only restore the first one */
-                               if (mask & (1 << i.IType.rt))
-                                       break;
-                               mask |= (1 << i.IType.rt);
-                               /* ra */
-                               if (i.IType.rt == 31)
-                                       *ra = dtrace_fuword64((void 
*)(vm_offset_t)(*sp + (short)i.IType.imm));
-                       break;
-
-                       case OP_ADDI:
-                       case OP_ADDIU:
-                       case OP_DADDI:
-                       case OP_DADDIU:
-                               /* look for stack pointer adjustment */
-                               if (i.IType.rs != 29 || i.IType.rt != 29)
-                                       break;
-                               stksize = -((short)i.IType.imm);
-                       }
-
-                       offset += sizeof(int);
-
-                       if (*flags & CPU_DTRACE_FAULT)
-                               goto fault;
-               }
-       }
-
-       /*
-        * We reached the end of backtrace
-        */
-       if (*pc == *ra)
-               return (-1);
-
-       *pc = *ra;
-       *sp += stksize;
-
-       return (0);
-fault:
-       /*
-        * We just got lost in backtrace, no big deal
-        */
-       *flags &= ~CPU_DTRACE_FAULT;
-       return (-1);
-}
-
-static int
-dtrace_copycheck(uintptr_t uaddr, uintptr_t kaddr, size_t size)
-{
-
-       if (uaddr + size > VM_MAXUSER_ADDRESS || uaddr + size < uaddr) {
-               DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = uaddr;
-               return (0);
-       }
-
-       return (1);
-}
-
-void
-dtrace_copyin(uintptr_t uaddr, uintptr_t kaddr, size_t size,
-    volatile uint16_t *flags)
-{
-       if (dtrace_copycheck(uaddr, kaddr, size))
-               dtrace_copy(uaddr, kaddr, size);
-}
-
-void
-dtrace_copyout(uintptr_t kaddr, uintptr_t uaddr, size_t size,
-    volatile uint16_t *flags)
-{
-       if (dtrace_copycheck(uaddr, kaddr, size))
-               dtrace_copy(kaddr, uaddr, size);
-}
-
-void
-dtrace_copyinstr(uintptr_t uaddr, uintptr_t kaddr, size_t size,
-    volatile uint16_t *flags)
-{
-       if (dtrace_copycheck(uaddr, kaddr, size))
-               dtrace_copystr(uaddr, kaddr, size, flags);
-}
-
-void
-dtrace_copyoutstr(uintptr_t kaddr, uintptr_t uaddr, size_t size,
-    volatile uint16_t *flags)
-{
-       if (dtrace_copycheck(uaddr, kaddr, size))
-               dtrace_copystr(kaddr, uaddr, size, flags);
-}
-
-uint8_t
-dtrace_fuword8(void *uaddr)
-{
-       if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
-               DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
-               return (0);
-       }
-       return (dtrace_fuword8_nocheck(uaddr));
-}
-
-uint16_t
-dtrace_fuword16(void *uaddr)
-{
-       if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
-               DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
-               return (0);
-       }
-       return (dtrace_fuword16_nocheck(uaddr));
-}
-
-uint32_t
-dtrace_fuword32(void *uaddr)
-{
-       if ((uintptr_t)uaddr > VM_MAXUSER_ADDRESS) {
-               DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
-               cpu_core[curcpu].cpuc_dtrace_illval = (uintptr_t)uaddr;
-               return (0);
-       }
-       return (dtrace_fuword32_nocheck(uaddr));
-}
-
-uint64_t
-dtrace_fuword64(void *uaddr)
-{
*** 576 LINES SKIPPED ***

Reply via email to