netbsd32_machdep.h revision 1.25 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