1 /* $NetBSD: netbsd32_machdep.h,v 1.17 2012/02/19 21:06:02 rmind 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 env87 { 137 int32_t en_cw; 138 int32_t en_sw; 139 int32_t en_tw; 140 int32_t en_fip; 141 uint16_t en_fcs; 142 uint16_t en_opcode; 143 int32_t en_foo; 144 int32_t en_fos; 145 } __packed; 146 147 struct fpacc87 { 148 uint8_t fp_bytes[10]; 149 } __packed; 150 151 struct save87 { 152 struct env87 sv_env; 153 struct fpacc87 sv_ac[8]; 154 int32_t sv_ex_sw; 155 int32_t sv_ex_tw; 156 uint8_t sv_pad[8 * 2 - 2 * 4]; 157 } __packed; 158 159 #define NETBSD32_MID_MACHINE MID_I386 160 161 int netbsd32_process_read_regs(struct lwp *, struct reg32 *); 162 int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *); 163 164 #endif /* _MACHINE_NETBSD32_H_ */ 165