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