Home | History | Annotate | Line # | Download | only in include
netbsd32_machdep.h revision 1.15
      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
     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