1/* $NetBSD: netbsd32_machdep.h,v 1.15 2007/12/25 18:33:32 perry 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 11typedef 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 16typedef netbsd32_pointer_t netbsd32_sigcontextp_t; 17 18struct 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 44struct 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 77struct 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 85struct 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 94struct 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 113struct fpreg32 { 114 char __data[108]; 115}; 116 117struct 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 126struct x86_64_get_mtrr_args32 { 127 uint32_t mtrrp; 128 uint32_t n; 129}; 130 131struct x86_64_set_mtrr_args32 { 132 uint32_t mtrrp; 133 uint32_t n; 134}; 135 136struct 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 145struct 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 156struct fpacc87 { 157 uint8_t fp_bytes[10]; 158} __packed; 159 160struct 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 170int netbsd32_process_read_regs(struct lwp *, struct reg32 *); 171int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *); 172 173#endif /* _MACHINE_NETBSD32_H_ */ 174