1*eb82852fSsimonb /* $NetBSD: ptrace.h,v 1.23 2023/11/20 03:05:48 simonb Exp $ */ 281918bf8Sfvdl 381918bf8Sfvdl /* 481918bf8Sfvdl * Copyright (c) 1993 Christopher G. Demetriou 581918bf8Sfvdl * All rights reserved. 681918bf8Sfvdl * 781918bf8Sfvdl * Redistribution and use in source and binary forms, with or without 881918bf8Sfvdl * modification, are permitted provided that the following conditions 981918bf8Sfvdl * are met: 1081918bf8Sfvdl * 1. Redistributions of source code must retain the above copyright 1181918bf8Sfvdl * notice, this list of conditions and the following disclaimer. 1281918bf8Sfvdl * 2. Redistributions in binary form must reproduce the above copyright 1381918bf8Sfvdl * notice, this list of conditions and the following disclaimer in the 1481918bf8Sfvdl * documentation and/or other materials provided with the distribution. 1581918bf8Sfvdl * 3. All advertising materials mentioning features or use of this software 1681918bf8Sfvdl * must display the following acknowledgement: 1781918bf8Sfvdl * This product includes software developed by Christopher G. Demetriou. 1881918bf8Sfvdl * 4. The name of the author may not be used to endorse or promote products 1981918bf8Sfvdl * derived from this software without specific prior written permission 2081918bf8Sfvdl * 2181918bf8Sfvdl * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2281918bf8Sfvdl * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2381918bf8Sfvdl * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2481918bf8Sfvdl * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2581918bf8Sfvdl * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2681918bf8Sfvdl * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2781918bf8Sfvdl * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2881918bf8Sfvdl * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2981918bf8Sfvdl * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3081918bf8Sfvdl * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3181918bf8Sfvdl */ 32dbf39764Schristos #ifndef _AMD64_PTRACE_H_ 33dbf39764Schristos #define _AMD64_PTRACE_H_ 3481918bf8Sfvdl 35dbf39764Schristos #ifdef __x86_64__ 3681918bf8Sfvdl /* 371e413be5Srin * amd64-dependent ptrace definitions 3881918bf8Sfvdl */ 3981918bf8Sfvdl #define PT_STEP (PT_FIRSTMACH + 0) 4081918bf8Sfvdl #define PT_GETREGS (PT_FIRSTMACH + 1) 4181918bf8Sfvdl #define PT_SETREGS (PT_FIRSTMACH + 2) 4281918bf8Sfvdl #define PT_GETFPREGS (PT_FIRSTMACH + 3) 4381918bf8Sfvdl #define PT_SETFPREGS (PT_FIRSTMACH + 4) 44988eb7edSkamil #define PT_GETDBREGS (PT_FIRSTMACH + 5) 45988eb7edSkamil #define PT_SETDBREGS (PT_FIRSTMACH + 6) 4605ffc73cSkamil #define PT_SETSTEP (PT_FIRSTMACH + 7) 4705ffc73cSkamil #define PT_CLEARSTEP (PT_FIRSTMACH + 8) 48c2ad96ffSmgorny #define PT_GETXSTATE (PT_FIRSTMACH + 9) 49c2ad96ffSmgorny #define PT_SETXSTATE (PT_FIRSTMACH + 10) 50cad5caa8Srin #ifdef _KERNEL 51cad5caa8Srin /* 52cad5caa8Srin * Only used internally for COMPAT_NETBSD32 53cad5caa8Srin */ 54cad5caa8Srin #define PT_GETXMMREGS (PT_FIRSTMACH + 11) 55cad5caa8Srin #define PT_SETXMMREGS (PT_FIRSTMACH + 12) 56cad5caa8Srin #endif 57c2ad96ffSmgorny 58c2ad96ffSmgorny /* We have machine-dependent process tracing needs. */ 59c2ad96ffSmgorny #define __HAVE_PTRACE_MACHDEP 60209be910Scube 61052dae8cSnjoly #define PT_MACHDEP_STRINGS \ 62052dae8cSnjoly "PT_STEP", \ 63052dae8cSnjoly "PT_GETREGS", \ 64052dae8cSnjoly "PT_SETREGS", \ 65052dae8cSnjoly "PT_GETFPREGS", \ 66241cf91dSkamil "PT_SETFPREGS", \ 67988eb7edSkamil "PT_GETDBREGS", \ 6805ffc73cSkamil "PT_SETDBREGS", \ 6905ffc73cSkamil "PT_SETSTEP", \ 70c2ad96ffSmgorny "PT_CLEARSTEP", \ 71c2ad96ffSmgorny "PT_GETXSTATE", \ 72c75bb36cSkamil "PT_SETXSTATE", \ 73c75bb36cSkamil "PT_GETXMMREGS", \ 74c75bb36cSkamil "PT_SETXMMREGS" 75052dae8cSnjoly 765020ab68Schristos #include <machine/reg.h> 775020ab68Schristos #define PTRACE_REG_PC(r) (r)->regs[_REG_RIP] 78a8778fd7Skamil #define PTRACE_REG_FP(r) (r)->regs[_REG_RBP] 795020ab68Schristos #define PTRACE_REG_SET_PC(r, v) (r)->regs[_REG_RIP] = (v) 805020ab68Schristos #define PTRACE_REG_SP(r) (r)->regs[_REG_RSP] 815020ab68Schristos #define PTRACE_REG_INTRV(r) (r)->regs[_REG_RAX] 825020ab68Schristos 83f5e781bdSkamil #define PTRACE_ILLEGAL_ASM __asm __volatile ("ud2" : : : "memory") 84f5e781bdSkamil 85b88569ceSchristos #define PTRACE_BREAKPOINT ((const uint8_t[]) { 0xcc }) 8612cbcbd0Skamil #define PTRACE_BREAKPOINT_ASM __asm __volatile ("int3" : : : "memory") 87b88569ceSchristos #define PTRACE_BREAKPOINT_SIZE 1 88b88569ceSchristos #define PTRACE_BREAKPOINT_ADJ 1 89b88569ceSchristos 90c2ad96ffSmgorny #ifdef _KERNEL 91c2ad96ffSmgorny 92c2ad96ffSmgorny /* 93c2ad96ffSmgorny * These are used in sys_ptrace() to find good ptrace(2) requests. 94c2ad96ffSmgorny */ 95c2ad96ffSmgorny #define PTRACE_MACHDEP_REQUEST_CASES \ 96c2ad96ffSmgorny case PT_GETXSTATE: \ 97cad5caa8Srin case PT_SETXSTATE: \ 98cad5caa8Srin case PT_GETXMMREGS: \ 99cad5caa8Srin case PT_SETXMMREGS: 100c2ad96ffSmgorny 101c2ad96ffSmgorny int process_machdep_doxstate(struct lwp *, struct lwp *, struct uio *); 1025c7b5181Srin int process_machdep_validfpu(struct proc *); 103c2ad96ffSmgorny 1044660020bSmaxv /* 1054660020bSmaxv * The fpregs structure contains an fxsave area, which must have 16-byte 1064660020bSmaxv * alignment. 1074660020bSmaxv */ 1084660020bSmaxv #define PTRACE_REGS_ALIGN __aligned(16) 1094660020bSmaxv 110cad5caa8Srin #include <sys/module_hook.h> 111cad5caa8Srin MODULE_HOOK(netbsd32_process_doxmmregs_hook, int, 112cad5caa8Srin (struct lwp *, struct lwp *, void *, bool)); 113cad5caa8Srin 11477791248Smgorny #ifdef EXEC_ELF32 11577791248Smgorny #include <machine/netbsd32_machdep.h> 11677791248Smgorny #endif 11777791248Smgorny #define PT64_GETXSTATE PT_GETXSTATE 11877791248Smgorny #define COREDUMP_MACHDEP_LWP_NOTES(l, ns, name) \ 11977791248Smgorny { \ 120*eb82852fSsimonb struct xstate xstate; /* XXX FIXME big stack object */ \ 12177791248Smgorny memset(&xstate, 0, sizeof(xstate)); \ 12277791248Smgorny if (!process_read_xstate(l, &xstate)) \ 12377791248Smgorny { \ 12477791248Smgorny ELFNAMEEND(coredump_savenote)(ns, \ 12577791248Smgorny CONCAT(CONCAT(PT, ELFSIZE), _GETXSTATE), name, \ 12677791248Smgorny &xstate, sizeof(xstate)); \ 12777791248Smgorny } \ 12877791248Smgorny } 12977791248Smgorny 130c2ad96ffSmgorny #endif /* _KERNEL */ 131c2ad96ffSmgorny 132209be910Scube #ifdef _KERNEL_OPT 133209be910Scube #include "opt_compat_netbsd32.h" 134209be910Scube 135209be910Scube #ifdef COMPAT_NETBSD32 136209be910Scube #include <machine/netbsd32_machdep.h> 137209be910Scube 138209be910Scube #define process_read_regs32 netbsd32_process_read_regs 139209be910Scube #define process_read_fpregs32 netbsd32_process_read_fpregs 140988eb7edSkamil #define process_read_dbregs32 netbsd32_process_read_dbregs 141209be910Scube 142f2ef31cbSskrll #define process_write_regs32 netbsd32_process_write_regs 143f2ef31cbSskrll #define process_write_fpregs32 netbsd32_process_write_fpregs 144988eb7edSkamil #define process_write_dbregs32 netbsd32_process_write_dbregs 145241cf91dSkamil 146209be910Scube #define process_reg32 struct reg32 147209be910Scube #define process_fpreg32 struct fpreg32 148988eb7edSkamil #define process_dbreg32 struct dbreg32 14901cfb8b6Smgorny 15001cfb8b6Smgorny #define PTRACE_TRANSLATE_REQUEST32(x) netbsd32_ptrace_translate_request(x) 151dbf39764Schristos #endif /* COMPAT_NETBSD32 */ 152dbf39764Schristos #endif /* _KERNEL_OPT */ 153dbf39764Schristos 154dbf39764Schristos #else /* !__x86_64__ */ 155dbf39764Schristos 156dbf39764Schristos #include <i386/ptrace.h> 157dbf39764Schristos 158dbf39764Schristos #endif /* __x86_64__ */ 159dbf39764Schristos 160dbf39764Schristos #endif /* _AMD64_PTRACE_H_ */ 161