Home | History | Annotate | Line # | Download | only in include
netbsd32_machdep.h revision 1.24
      1  1.24    mgorny /*	$NetBSD: netbsd32_machdep.h,v 1.24 2019/06/26 12:30:12 mgorny 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.23    mgorny /*
     11  1.23    mgorny  * i386 ptrace constants
     12  1.23    mgorny  * Please keep in sync with sys/arch/i386/include/ptrace.h.
     13  1.23    mgorny  */
     14  1.23    mgorny #define	PT32_STEP		(PT_FIRSTMACH + 0)
     15  1.23    mgorny #define	PT32_GETREGS		(PT_FIRSTMACH + 1)
     16  1.23    mgorny #define	PT32_SETREGS		(PT_FIRSTMACH + 2)
     17  1.23    mgorny #define	PT32_GETFPREGS		(PT_FIRSTMACH + 3)
     18  1.23    mgorny #define	PT32_SETFPREGS		(PT_FIRSTMACH + 4)
     19  1.23    mgorny #define	PT32_GETXMMREGS		(PT_FIRSTMACH + 5)
     20  1.23    mgorny #define	PT32_SETXMMREGS		(PT_FIRSTMACH + 6)
     21  1.23    mgorny #define	PT32_GETDBREGS		(PT_FIRSTMACH + 7)
     22  1.23    mgorny #define	PT32_SETDBREGS		(PT_FIRSTMACH + 8)
     23  1.23    mgorny #define	PT32_SETSTEP		(PT_FIRSTMACH + 9)
     24  1.23    mgorny #define	PT32_CLEARSTEP		(PT_FIRSTMACH + 10)
     25  1.24    mgorny #define	PT32_GETXSTATE		(PT_FIRSTMACH + 11)
     26  1.24    mgorny #define	PT32_SETXSTATE		(PT_FIRSTMACH + 12)
     27  1.23    mgorny 
     28  1.12       dsl #define NETBSD32_POINTER_TYPE uint32_t
     29  1.12       dsl typedef	struct { NETBSD32_POINTER_TYPE i32; } netbsd32_pointer_t;
     30   1.1      fvdl 
     31  1.13       dsl /* i386 has 32bit aligned 64bit integers */
     32  1.13       dsl #define NETBSD32_INT64_ALIGN __attribute__((__aligned__(4)))
     33  1.13       dsl 
     34   1.1      fvdl typedef netbsd32_pointer_t netbsd32_sigcontextp_t;
     35   1.1      fvdl 
     36   1.1      fvdl struct netbsd32_sigcontext13 {
     37   1.4      fvdl 	uint32_t	sc_gs;
     38   1.4      fvdl 	uint32_t	sc_fs;
     39   1.4      fvdl 	uint32_t	sc_es;
     40   1.4      fvdl 	uint32_t	sc_ds;
     41   1.4      fvdl 	uint32_t	sc_edi;
     42   1.4      fvdl 	uint32_t	sc_esi;
     43   1.4      fvdl 	uint32_t	sc_ebp;
     44   1.4      fvdl 	uint32_t	sc_ebx;
     45   1.4      fvdl 	uint32_t	sc_edx;
     46   1.4      fvdl 	uint32_t	sc_ecx;
     47   1.4      fvdl 	uint32_t	sc_eax;
     48   1.1      fvdl 	/* XXX */
     49   1.4      fvdl 	uint32_t	sc_eip;
     50   1.4      fvdl 	uint32_t	sc_cs;
     51   1.4      fvdl 	uint32_t	sc_eflags;
     52   1.4      fvdl 	uint32_t	sc_esp;
     53   1.4      fvdl 	uint32_t	sc_ss;
     54   1.1      fvdl 
     55   1.4      fvdl 	uint32_t	sc_onstack;	/* sigstack state to restore */
     56   1.4      fvdl 	uint32_t	sc_mask;	/* signal mask to restore (old style) */
     57   1.1      fvdl 
     58   1.4      fvdl 	uint32_t	sc_trapno;	/* XXX should be above */
     59   1.4      fvdl 	uint32_t	sc_err;
     60   1.1      fvdl };
     61   1.1      fvdl 
     62   1.1      fvdl struct netbsd32_sigcontext {
     63   1.4      fvdl 	uint32_t	sc_gs;
     64   1.4      fvdl 	uint32_t	sc_fs;
     65   1.4      fvdl 	uint32_t	sc_es;
     66   1.4      fvdl 	uint32_t	sc_ds;
     67   1.4      fvdl 	uint32_t	sc_edi;
     68   1.4      fvdl 	uint32_t	sc_esi;
     69   1.4      fvdl 	uint32_t	sc_ebp;
     70   1.4      fvdl 	uint32_t	sc_ebx;
     71   1.4      fvdl 	uint32_t	sc_edx;
     72   1.4      fvdl 	uint32_t	sc_ecx;
     73   1.4      fvdl 	uint32_t	sc_eax;
     74   1.1      fvdl 	/* XXX */
     75   1.4      fvdl 	uint32_t	sc_eip;
     76   1.4      fvdl 	uint32_t	sc_cs;
     77   1.4      fvdl 	uint32_t	sc_eflags;
     78   1.4      fvdl 	uint32_t	sc_esp;
     79   1.4      fvdl 	uint32_t	sc_ss;
     80   1.1      fvdl 
     81   1.4      fvdl 	uint32_t	sc_onstack;	/* sigstack state to restore */
     82   1.4      fvdl 	uint32_t	__sc_mask13;	/* signal mask to restore (old style) */
     83   1.1      fvdl 
     84   1.4      fvdl 	uint32_t	sc_trapno;	/* XXX should be above */
     85   1.4      fvdl 	uint32_t	sc_err;
     86   1.1      fvdl 
     87   1.1      fvdl 	sigset_t sc_mask;		/* signal mask to restore (new style) */
     88   1.1      fvdl };
     89   1.1      fvdl 
     90   1.1      fvdl #define sc_sp sc_esp
     91   1.1      fvdl #define sc_fp sc_ebp
     92   1.1      fvdl #define sc_pc sc_eip
     93   1.1      fvdl #define sc_ps sc_eflags
     94   1.1      fvdl 
     95   1.4      fvdl struct netbsd32_sigframe_sigcontext {
     96   1.4      fvdl 	uint32_t	sf_ra;
     97   1.4      fvdl 	int32_t		sf_signum;
     98   1.4      fvdl 	int32_t		sf_code;
     99   1.4      fvdl 	uint32_t	sf_scp;
    100   1.4      fvdl 	struct netbsd32_sigcontext sf_sc;
    101   1.4      fvdl };
    102   1.4      fvdl 
    103   1.4      fvdl struct netbsd32_sigframe_siginfo {
    104   1.4      fvdl 	uint32_t	sf_ra;
    105   1.4      fvdl 	int32_t		sf_signum;
    106   1.4      fvdl 	uint32_t	sf_sip;
    107   1.4      fvdl 	uint32_t	sf_ucp;
    108   1.4      fvdl 	siginfo32_t	sf_si;
    109   1.4      fvdl 	ucontext32_t	sf_uc;
    110   1.1      fvdl };
    111   1.1      fvdl 
    112   1.1      fvdl struct reg32 {
    113   1.1      fvdl 	int	r_eax;
    114   1.1      fvdl 	int	r_ecx;
    115   1.1      fvdl 	int	r_edx;
    116   1.1      fvdl 	int	r_ebx;
    117   1.1      fvdl 	int	r_esp;
    118   1.1      fvdl 	int	r_ebp;
    119   1.1      fvdl 	int	r_esi;
    120   1.1      fvdl 	int	r_edi;
    121   1.1      fvdl 	int	r_eip;
    122   1.1      fvdl 	int	r_eflags;
    123   1.1      fvdl 	int	r_cs;
    124   1.1      fvdl 	int	r_ss;
    125   1.1      fvdl 	int	r_ds;
    126   1.1      fvdl 	int	r_es;
    127   1.1      fvdl 	int	r_fs;
    128   1.1      fvdl 	int	r_gs;
    129   1.1      fvdl };
    130   1.1      fvdl 
    131   1.1      fvdl struct fpreg32 {
    132   1.1      fvdl 	char	__data[108];
    133   1.1      fvdl };
    134   1.1      fvdl 
    135  1.22     kamil struct dbreg32 {
    136  1.22     kamil 	int	dr[8];
    137  1.22     kamil };
    138  1.22     kamil 
    139  1.21      maxv struct x86_get_ldt_args32 {
    140  1.21      maxv 	int32_t start;
    141  1.21      maxv 	uint32_t desc;
    142  1.21      maxv 	int32_t num;
    143  1.21      maxv };
    144  1.21      maxv 
    145  1.21      maxv struct x86_set_ldt_args32 {
    146  1.21      maxv 	int32_t start;
    147  1.21      maxv 	uint32_t desc;
    148  1.21      maxv 	int32_t num;
    149  1.21      maxv };
    150  1.21      maxv 
    151   1.1      fvdl struct mtrr32 {
    152   1.1      fvdl 	uint64_t base;
    153   1.1      fvdl 	uint64_t len;
    154   1.1      fvdl 	uint8_t type;
    155   1.1      fvdl 	uint8_t __pad0[3];
    156   1.1      fvdl 	int flags;
    157   1.1      fvdl 	uint32_t owner;
    158  1.15     perry } __packed;
    159   1.1      fvdl 
    160   1.1      fvdl struct x86_64_get_mtrr_args32 {
    161   1.1      fvdl 	uint32_t mtrrp;
    162   1.1      fvdl 	uint32_t n;
    163   1.1      fvdl };
    164   1.1      fvdl 
    165   1.1      fvdl struct x86_64_set_mtrr_args32 {
    166   1.1      fvdl 	uint32_t mtrrp;
    167   1.1      fvdl 	uint32_t n;
    168   1.1      fvdl };
    169   1.1      fvdl 
    170   1.5  drochner #define NETBSD32_MID_MACHINE MID_I386
    171   1.5  drochner 
    172  1.23    mgorny /* Translate ptrace() PT_* request from 32-bit userland to kernel. */
    173  1.23    mgorny int netbsd32_ptrace_translate_request(int);
    174  1.23    mgorny 
    175   1.9      cube int netbsd32_process_read_regs(struct lwp *, struct reg32 *);
    176  1.18       dsl int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *, size_t *);
    177  1.22     kamil int netbsd32_process_read_dbregs(struct lwp *, struct dbreg32 *, size_t *);
    178   1.9      cube 
    179  1.20     skrll int netbsd32_process_write_regs(struct lwp *, const struct reg32 *);
    180  1.20     skrll int netbsd32_process_write_fpregs(struct lwp *, const struct fpreg32 *, size_t);
    181  1.22     kamil int netbsd32_process_write_dbregs(struct lwp *, const struct dbreg32 *, size_t);
    182  1.20     skrll 
    183   1.1      fvdl #endif /* _MACHINE_NETBSD32_H_ */
    184