1 1.25 rin /* $NetBSD: netbsd32_machdep.h,v 1.25 2019/11/27 09:16:58 rin Exp $ */ 2 1.1 fvdl 3 1.1 fvdl #ifndef _MACHINE_NETBSD32_H_ 4 1.1 fvdl #define _MACHINE_NETBSD32_H_ 5 1.1 fvdl 6 1.4 fvdl #include <sys/ucontext.h> 7 1.6 chs #include <compat/sys/ucontext.h> 8 1.7 chs #include <compat/sys/siginfo.h> 9 1.4 fvdl 10 1.25 rin #include <x86/fpu.h> 11 1.25 rin 12 1.23 mgorny /* 13 1.23 mgorny * i386 ptrace constants 14 1.23 mgorny * Please keep in sync with sys/arch/i386/include/ptrace.h. 15 1.23 mgorny */ 16 1.23 mgorny #define PT32_STEP (PT_FIRSTMACH + 0) 17 1.23 mgorny #define PT32_GETREGS (PT_FIRSTMACH + 1) 18 1.23 mgorny #define PT32_SETREGS (PT_FIRSTMACH + 2) 19 1.23 mgorny #define PT32_GETFPREGS (PT_FIRSTMACH + 3) 20 1.23 mgorny #define PT32_SETFPREGS (PT_FIRSTMACH + 4) 21 1.23 mgorny #define PT32_GETXMMREGS (PT_FIRSTMACH + 5) 22 1.23 mgorny #define PT32_SETXMMREGS (PT_FIRSTMACH + 6) 23 1.23 mgorny #define PT32_GETDBREGS (PT_FIRSTMACH + 7) 24 1.23 mgorny #define PT32_SETDBREGS (PT_FIRSTMACH + 8) 25 1.23 mgorny #define PT32_SETSTEP (PT_FIRSTMACH + 9) 26 1.23 mgorny #define PT32_CLEARSTEP (PT_FIRSTMACH + 10) 27 1.24 mgorny #define PT32_GETXSTATE (PT_FIRSTMACH + 11) 28 1.24 mgorny #define PT32_SETXSTATE (PT_FIRSTMACH + 12) 29 1.23 mgorny 30 1.12 dsl #define NETBSD32_POINTER_TYPE uint32_t 31 1.12 dsl typedef struct { NETBSD32_POINTER_TYPE i32; } netbsd32_pointer_t; 32 1.1 fvdl 33 1.13 dsl /* i386 has 32bit aligned 64bit integers */ 34 1.13 dsl #define NETBSD32_INT64_ALIGN __attribute__((__aligned__(4))) 35 1.13 dsl 36 1.1 fvdl typedef netbsd32_pointer_t netbsd32_sigcontextp_t; 37 1.1 fvdl 38 1.1 fvdl struct netbsd32_sigcontext13 { 39 1.4 fvdl uint32_t sc_gs; 40 1.4 fvdl uint32_t sc_fs; 41 1.4 fvdl uint32_t sc_es; 42 1.4 fvdl uint32_t sc_ds; 43 1.4 fvdl uint32_t sc_edi; 44 1.4 fvdl uint32_t sc_esi; 45 1.4 fvdl uint32_t sc_ebp; 46 1.4 fvdl uint32_t sc_ebx; 47 1.4 fvdl uint32_t sc_edx; 48 1.4 fvdl uint32_t sc_ecx; 49 1.4 fvdl uint32_t sc_eax; 50 1.1 fvdl /* XXX */ 51 1.4 fvdl uint32_t sc_eip; 52 1.4 fvdl uint32_t sc_cs; 53 1.4 fvdl uint32_t sc_eflags; 54 1.4 fvdl uint32_t sc_esp; 55 1.4 fvdl uint32_t sc_ss; 56 1.1 fvdl 57 1.4 fvdl uint32_t sc_onstack; /* sigstack state to restore */ 58 1.4 fvdl uint32_t sc_mask; /* signal mask to restore (old style) */ 59 1.1 fvdl 60 1.4 fvdl uint32_t sc_trapno; /* XXX should be above */ 61 1.4 fvdl uint32_t sc_err; 62 1.1 fvdl }; 63 1.1 fvdl 64 1.1 fvdl struct netbsd32_sigcontext { 65 1.4 fvdl uint32_t sc_gs; 66 1.4 fvdl uint32_t sc_fs; 67 1.4 fvdl uint32_t sc_es; 68 1.4 fvdl uint32_t sc_ds; 69 1.4 fvdl uint32_t sc_edi; 70 1.4 fvdl uint32_t sc_esi; 71 1.4 fvdl uint32_t sc_ebp; 72 1.4 fvdl uint32_t sc_ebx; 73 1.4 fvdl uint32_t sc_edx; 74 1.4 fvdl uint32_t sc_ecx; 75 1.4 fvdl uint32_t sc_eax; 76 1.1 fvdl /* XXX */ 77 1.4 fvdl uint32_t sc_eip; 78 1.4 fvdl uint32_t sc_cs; 79 1.4 fvdl uint32_t sc_eflags; 80 1.4 fvdl uint32_t sc_esp; 81 1.4 fvdl uint32_t sc_ss; 82 1.1 fvdl 83 1.4 fvdl uint32_t sc_onstack; /* sigstack state to restore */ 84 1.4 fvdl uint32_t __sc_mask13; /* signal mask to restore (old style) */ 85 1.1 fvdl 86 1.4 fvdl uint32_t sc_trapno; /* XXX should be above */ 87 1.4 fvdl uint32_t sc_err; 88 1.1 fvdl 89 1.1 fvdl sigset_t sc_mask; /* signal mask to restore (new style) */ 90 1.1 fvdl }; 91 1.1 fvdl 92 1.1 fvdl #define sc_sp sc_esp 93 1.1 fvdl #define sc_fp sc_ebp 94 1.1 fvdl #define sc_pc sc_eip 95 1.1 fvdl #define sc_ps sc_eflags 96 1.1 fvdl 97 1.4 fvdl struct netbsd32_sigframe_sigcontext { 98 1.4 fvdl uint32_t sf_ra; 99 1.4 fvdl int32_t sf_signum; 100 1.4 fvdl int32_t sf_code; 101 1.4 fvdl uint32_t sf_scp; 102 1.4 fvdl struct netbsd32_sigcontext sf_sc; 103 1.4 fvdl }; 104 1.4 fvdl 105 1.4 fvdl struct netbsd32_sigframe_siginfo { 106 1.4 fvdl uint32_t sf_ra; 107 1.4 fvdl int32_t sf_signum; 108 1.4 fvdl uint32_t sf_sip; 109 1.4 fvdl uint32_t sf_ucp; 110 1.4 fvdl siginfo32_t sf_si; 111 1.4 fvdl ucontext32_t sf_uc; 112 1.1 fvdl }; 113 1.1 fvdl 114 1.1 fvdl struct reg32 { 115 1.1 fvdl int r_eax; 116 1.1 fvdl int r_ecx; 117 1.1 fvdl int r_edx; 118 1.1 fvdl int r_ebx; 119 1.1 fvdl int r_esp; 120 1.1 fvdl int r_ebp; 121 1.1 fvdl int r_esi; 122 1.1 fvdl int r_edi; 123 1.1 fvdl int r_eip; 124 1.1 fvdl int r_eflags; 125 1.1 fvdl int r_cs; 126 1.1 fvdl int r_ss; 127 1.1 fvdl int r_ds; 128 1.1 fvdl int r_es; 129 1.1 fvdl int r_fs; 130 1.1 fvdl int r_gs; 131 1.1 fvdl }; 132 1.1 fvdl 133 1.1 fvdl struct fpreg32 { 134 1.1 fvdl char __data[108]; 135 1.1 fvdl }; 136 1.1 fvdl 137 1.22 kamil struct dbreg32 { 138 1.22 kamil int dr[8]; 139 1.22 kamil }; 140 1.22 kamil 141 1.25 rin struct xmmregs32 { 142 1.25 rin struct fxsave fxstate; 143 1.25 rin }; 144 1.25 rin __CTASSERT(sizeof(struct xmmregs32) == 512); 145 1.25 rin 146 1.21 maxv struct x86_get_ldt_args32 { 147 1.21 maxv int32_t start; 148 1.21 maxv uint32_t desc; 149 1.21 maxv int32_t num; 150 1.21 maxv }; 151 1.21 maxv 152 1.21 maxv struct x86_set_ldt_args32 { 153 1.21 maxv int32_t start; 154 1.21 maxv uint32_t desc; 155 1.21 maxv int32_t num; 156 1.21 maxv }; 157 1.21 maxv 158 1.1 fvdl struct mtrr32 { 159 1.1 fvdl uint64_t base; 160 1.1 fvdl uint64_t len; 161 1.1 fvdl uint8_t type; 162 1.1 fvdl uint8_t __pad0[3]; 163 1.1 fvdl int flags; 164 1.1 fvdl uint32_t owner; 165 1.15 perry } __packed; 166 1.1 fvdl 167 1.1 fvdl struct x86_64_get_mtrr_args32 { 168 1.1 fvdl uint32_t mtrrp; 169 1.1 fvdl uint32_t n; 170 1.1 fvdl }; 171 1.1 fvdl 172 1.1 fvdl struct x86_64_set_mtrr_args32 { 173 1.1 fvdl uint32_t mtrrp; 174 1.1 fvdl uint32_t n; 175 1.1 fvdl }; 176 1.1 fvdl 177 1.5 drochner #define NETBSD32_MID_MACHINE MID_I386 178 1.5 drochner 179 1.23 mgorny /* Translate ptrace() PT_* request from 32-bit userland to kernel. */ 180 1.23 mgorny int netbsd32_ptrace_translate_request(int); 181 1.23 mgorny 182 1.9 cube int netbsd32_process_read_regs(struct lwp *, struct reg32 *); 183 1.18 dsl int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *, size_t *); 184 1.22 kamil int netbsd32_process_read_dbregs(struct lwp *, struct dbreg32 *, size_t *); 185 1.9 cube 186 1.20 skrll int netbsd32_process_write_regs(struct lwp *, const struct reg32 *); 187 1.20 skrll int netbsd32_process_write_fpregs(struct lwp *, const struct fpreg32 *, size_t); 188 1.22 kamil int netbsd32_process_write_dbregs(struct lwp *, const struct dbreg32 *, size_t); 189 1.20 skrll 190 1.1 fvdl #endif /* _MACHINE_NETBSD32_H_ */ 191