ptrace.h revision 1.15 1 1.15 martin /* $NetBSD: ptrace.h,v 1.15 2019/11/29 12:04:32 martin 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.10 christos 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.5 matt #endif /* _KERNEL */
73 1.5 matt
74 1.15 martin #define PTRACE_ILLEGAL_ASM __asm __volatile (".long 0" : : : "memory")
75 1.15 martin
76 1.15 martin #define PTRACE_BREAKPOINT ((const uint8_t[]) { 0x7f, 0xe0, 0x00, 0x08 })
77 1.15 martin #define PTRACE_BREAKPOINT_ASM __asm __volatile("trap")
78 1.15 martin #define PTRACE_BREAKPOINT_SIZE 4
79 1.15 martin
80 1.5 matt #endif /* _POWERPC_PTRACE_H */
81