1 1.19 rin /* $NetBSD: ptrace.h,v 1.19 2021/03/06 08:08:19 rin Exp $ */ 2 1.5 matt 3 1.5 matt #ifndef _POWERPC_PTRACE_H 4 1.5 matt #define _POWERPC_PTRACE_H 5 1.2 perry 6 1.3 tsubai #define PT_STEP (PT_FIRSTMACH + 0) 7 1.3 tsubai #define PT_GETREGS (PT_FIRSTMACH + 1) 8 1.3 tsubai #define PT_SETREGS (PT_FIRSTMACH + 2) 9 1.4 tsubai #define PT_GETFPREGS (PT_FIRSTMACH + 3) 10 1.4 tsubai #define PT_SETFPREGS (PT_FIRSTMACH + 4) 11 1.5 matt #define PT_GETVECREGS (PT_FIRSTMACH + 5) 12 1.5 matt #define PT_SETVECREGS (PT_FIRSTMACH + 6) 13 1.13 kamil #define PT_SETSTEP (PT_FIRSTMACH + 7) 14 1.13 kamil #define PT_CLEARSTEP (PT_FIRSTMACH + 8) 15 1.5 matt 16 1.8 matt #define PT_MACHDEP_STRINGS \ 17 1.8 matt "PT_STEP", \ 18 1.8 matt "PT_GETREGS", "PT_SETREGS", \ 19 1.8 matt "PT_GETFPREGS", "PT_SETFPREGS", \ 20 1.13 kamil "PT_GETVECREGS", "PT_SETVECREGS", \ 21 1.13 kamil "PT_SETSTEP", "PT_CLEARSTEP", 22 1.8 matt 23 1.12 christos #include <machine/reg.h> 24 1.12 christos #define PTRACE_REG_PC(r) (r)->pc 25 1.14 kamil #define PTRACE_REG_FP(r) (r)->fixreg[31] 26 1.12 christos #define PTRACE_REG_SET_PC(r, v) (r)->pc = (v) 27 1.12 christos #define PTRACE_REG_SP(r) (r)->fixreg[1] 28 1.12 christos #define PTRACE_REG_INTRV(r) (r)->fixreg[3] 29 1.12 christos 30 1.5 matt #ifdef _KERNEL 31 1.5 matt #ifdef _KERNEL_OPT 32 1.5 matt #include "opt_altivec.h" 33 1.5 matt #endif 34 1.5 matt 35 1.11 matt #if defined(ALTIVEC) || defined(PPC_HAVE_SPE) 36 1.5 matt 37 1.5 matt /* We have machine-dependent process tracing requests. */ 38 1.5 matt #define __HAVE_PTRACE_MACHDEP 39 1.5 matt 40 1.5 matt #define PTRACE_MACHDEP_REQUEST_CASES \ 41 1.5 matt case PT_GETVECREGS: \ 42 1.5 matt case PT_SETVECREGS: 43 1.5 matt 44 1.18 mgorny int ptrace_machdep_dorequest(struct lwp *, struct lwp **, int, void *, int); 45 1.9 christos int process_machdep_dovecregs(struct lwp *, struct lwp *, struct uio *); 46 1.5 matt int process_machdep_validvecregs(struct proc *); 47 1.5 matt 48 1.5 matt /* We have machine-dependent procfs nodes. */ 49 1.5 matt #define __HAVE_PROCFS_MACHDEP 50 1.5 matt 51 1.5 matt #define PROCFS_MACHDEP_NODE_TYPES \ 52 1.5 matt Pmachdep_vecregs, /* AltiVec register set */ 53 1.5 matt 54 1.5 matt #define PROCFS_MACHDEP_NODETYPE_CASES \ 55 1.5 matt case Pmachdep_vecregs: 56 1.5 matt 57 1.5 matt #define PROCFS_MACHDEP_PROTECT_CASES \ 58 1.5 matt case Pmachdep_vecregs: 59 1.5 matt 60 1.5 matt #define PROCFS_MACHDEP_NODETYPE_DEFNS \ 61 1.5 matt { DT_REG, N("vecregs"), Pmachdep_vecregs, \ 62 1.5 matt procfs_machdep_validvecregs }, 63 1.5 matt 64 1.5 matt /* Functions used by procfs. */ 65 1.5 matt struct mount; 66 1.5 matt struct pfsnode; 67 1.9 christos int procfs_machdep_dovecregs(struct lwp *, struct lwp *, 68 1.5 matt struct pfsnode *, struct uio *); 69 1.9 christos int procfs_machdep_validvecregs(struct lwp *, struct mount *); 70 1.5 matt 71 1.11 matt #endif /* ALTIVEC || PPC_HAVE_SPE */ 72 1.19 rin 73 1.19 rin #if defined(PPC_BOOKE) || defined(PPC_IBM4XX) 74 1.19 rin int ppc_sstep(struct lwp *, int); 75 1.19 rin #endif /* PPC_BOOKE || PPC_IBM4XX */ 76 1.5 matt #endif /* _KERNEL */ 77 1.5 matt 78 1.15 martin #define PTRACE_ILLEGAL_ASM __asm __volatile (".long 0" : : : "memory") 79 1.15 martin 80 1.15 martin #define PTRACE_BREAKPOINT ((const uint8_t[]) { 0x7f, 0xe0, 0x00, 0x08 }) 81 1.15 martin #define PTRACE_BREAKPOINT_ASM __asm __volatile("trap") 82 1.15 martin #define PTRACE_BREAKPOINT_SIZE 4 83 1.15 martin 84 1.5 matt #endif /* _POWERPC_PTRACE_H */ 85