1 /* $NetBSD: netbsd32_machdep.h,v 1.16 2008/10/15 06:51:17 wrstuden Exp $ */ 2 3 #ifndef _MACHINE_NETBSD32_H_ 4 #define _MACHINE_NETBSD32_H_ 5 6 #include <sys/ucontext.h> 7 #include <compat/sys/ucontext.h> 8 #include <compat/sys/siginfo.h> 9 10 #define NETBSD32_POINTER_TYPE uint32_t 11 typedef struct { NETBSD32_POINTER_TYPE i32; } netbsd32_pointer_t; 12 13 /* i386 has 32bit aligned 64bit integers */ 14 #define NETBSD32_INT64_ALIGN __attribute__((__aligned__(4))) 15 16 typedef netbsd32_pointer_t netbsd32_sigcontextp_t; 17 18 struct netbsd32_sigcontext13 { 19 uint32_t sc_gs; 20 uint32_t sc_fs; 21 uint32_t sc_es; 22 uint32_t sc_ds; 23 uint32_t sc_edi; 24 uint32_t sc_esi; 25 uint32_t sc_ebp; 26 uint32_t sc_ebx; 27 uint32_t sc_edx; 28 uint32_t sc_ecx; 29 uint32_t sc_eax; 30 /* XXX */ 31 uint32_t sc_eip; 32 uint32_t sc_cs; 33 uint32_t sc_eflags; 34 uint32_t sc_esp; 35 uint32_t sc_ss; 36 37 uint32_t sc_onstack; /* sigstack state to restore */ 38 uint32_t sc_mask; /* signal mask to restore (old style) */ 39 40 uint32_t sc_trapno; /* XXX should be above */ 41 uint32_t sc_err; 42 }; 43 44 struct netbsd32_sigcontext { 45 uint32_t sc_gs; 46 uint32_t sc_fs; 47 uint32_t sc_es; 48 uint32_t sc_ds; 49 uint32_t sc_edi; 50 uint32_t sc_esi; 51 uint32_t sc_ebp; 52 uint32_t sc_ebx; 53 uint32_t sc_edx; 54 uint32_t sc_ecx; 55 uint32_t sc_eax; 56 /* XXX */ 57 uint32_t sc_eip; 58 uint32_t sc_cs; 59 uint32_t sc_eflags; 60 uint32_t sc_esp; 61 uint32_t sc_ss; 62 63 uint32_t sc_onstack; /* sigstack state to restore */ 64 uint32_t __sc_mask13; /* signal mask to restore (old style) */ 65 66 uint32_t sc_trapno; /* XXX should be above */ 67 uint32_t sc_err; 68 69 sigset_t sc_mask; /* signal mask to restore (new style) */ 70 }; 71 72 #define sc_sp sc_esp 73 #define sc_fp sc_ebp 74 #define sc_pc sc_eip 75 #define sc_ps sc_eflags 76 77 struct netbsd32_sigframe_sigcontext { 78 uint32_t sf_ra; 79 int32_t sf_signum; 80 int32_t sf_code; 81 uint32_t sf_scp; 82 struct netbsd32_sigcontext sf_sc; 83 }; 84 85 struct netbsd32_sigframe_siginfo { 86 uint32_t sf_ra; 87 int32_t sf_signum; 88 uint32_t sf_sip; 89 uint32_t sf_ucp; 90 siginfo32_t sf_si; 91 ucontext32_t sf_uc; 92 }; 93 94 struct reg32 { 95 int r_eax; 96 int r_ecx; 97 int r_edx; 98 int r_ebx; 99 int r_esp; 100 int r_ebp; 101 int r_esi; 102 int r_edi; 103 int r_eip; 104 int r_eflags; 105 int r_cs; 106 int r_ss; 107 int r_ds; 108 int r_es; 109 int r_fs; 110 int r_gs; 111 }; 112 113 struct fpreg32 { 114 char __data[108]; 115 }; 116 117 struct mtrr32 { 118 uint64_t base; 119 uint64_t len; 120 uint8_t type; 121 uint8_t __pad0[3]; 122 int flags; 123 uint32_t owner; 124 } __packed; 125 126 struct x86_64_get_mtrr_args32 { 127 uint32_t mtrrp; 128 uint32_t n; 129 }; 130 131 struct x86_64_set_mtrr_args32 { 132 uint32_t mtrrp; 133 uint32_t n; 134 }; 135 136 struct netbsd32_saframe { 137 int sa_ra; 138 int sa_type; 139 netbsd32_pointer_t sa_sas; 140 int sa_events; 141 int sa_interrupted; 142 netbsd32_pointer_t sa_arg; 143 }; 144 145 struct env87 { 146 int32_t en_cw; 147 int32_t en_sw; 148 int32_t en_tw; 149 int32_t en_fip; 150 uint16_t en_fcs; 151 uint16_t en_opcode; 152 int32_t en_foo; 153 int32_t en_fos; 154 } __packed; 155 156 struct fpacc87 { 157 uint8_t fp_bytes[10]; 158 } __packed; 159 160 struct save87 { 161 struct env87 sv_env; 162 struct fpacc87 sv_ac[8]; 163 int32_t sv_ex_sw; 164 int32_t sv_ex_tw; 165 uint8_t sv_pad[8 * 2 - 2 * 4]; 166 } __packed; 167 168 #define NETBSD32_MID_MACHINE MID_I386 169 170 int netbsd32_process_read_regs(struct lwp *, struct reg32 *); 171 int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *); 172 173 #endif /* _MACHINE_NETBSD32_H_ */ 174