// Created by cgo -cdefs - DO NOT EDIT
// cgo -cdefs defs.go defs1.go


enum {
	PROT_NONE	= 0x0,
	PROT_READ	= 0x1,
	PROT_WRITE	= 0x2,
	PROT_EXEC	= 0x4,

	MAP_ANON	= 0x20,
	MAP_PRIVATE	= 0x2,
	MAP_FIXED	= 0x10,

	SA_RESTART	= 0x10000000,
	SA_ONSTACK	= 0x8000000,
	SA_RESTORER	= 0x4000000,
	SA_SIGINFO	= 0x4,

	SIGHUP		= 0x1,
	SIGINT		= 0x2,
	SIGQUIT		= 0x3,
	SIGILL		= 0x4,
	SIGTRAP		= 0x5,
	SIGABRT		= 0x6,
	SIGBUS		= 0x7,
	SIGFPE		= 0x8,
	SIGKILL		= 0x9,
	SIGUSR1		= 0xa,
	SIGSEGV		= 0xb,
	SIGUSR2		= 0xc,
	SIGPIPE		= 0xd,
	SIGALRM		= 0xe,
	SIGSTKFLT	= 0x10,
	SIGCHLD		= 0x11,
	SIGCONT		= 0x12,
	SIGSTOP		= 0x13,
	SIGTSTP		= 0x14,
	SIGTTIN		= 0x15,
	SIGTTOU		= 0x16,
	SIGURG		= 0x17,
	SIGXCPU		= 0x18,
	SIGXFSZ		= 0x19,
	SIGVTALRM	= 0x1a,
	SIGPROF		= 0x1b,
	SIGWINCH	= 0x1c,
	SIGIO		= 0x1d,
	SIGPWR		= 0x1e,
	SIGSYS		= 0x1f,

	FPE_INTDIV	= 0x1,
	FPE_INTOVF	= 0x2,
	FPE_FLTDIV	= 0x3,
	FPE_FLTOVF	= 0x4,
	FPE_FLTUND	= 0x5,
	FPE_FLTRES	= 0x6,
	FPE_FLTINV	= 0x7,
	FPE_FLTSUB	= 0x8,

	BUS_ADRALN	= 0x1,
	BUS_ADRERR	= 0x2,
	BUS_OBJERR	= 0x3,

	SEGV_MAPERR	= 0x1,
	SEGV_ACCERR	= 0x2,

	ITIMER_REAL	= 0x0,
	ITIMER_VIRTUAL	= 0x1,
	ITIMER_PROF	= 0x2,
};

typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Sigaction Sigaction;
typedef struct Siginfo Siginfo;
typedef struct Itimerval Itimerval;

#pragma pack on

struct Timespec {
	int64	tv_sec;
	int64	tv_nsec;
};
struct Timeval {
	int64	tv_sec;
	int64	tv_usec;
};
struct Sigaction {
	void	*sa_handler;
	uint64	sa_flags;
	void	*sa_restorer;
	uint64	sa_mask;
};
struct Siginfo {
	int32	si_signo;
	int32	si_errno;
	int32	si_code;
	byte	Pad_godefs_0[4];
	byte	_sifields[112];
};
struct Itimerval {
	Timeval	it_interval;
	Timeval	it_value;
};


#pragma pack off
// Created by cgo -cdefs - DO NOT EDIT
// cgo -cdefs defs.go defs1.go


enum {
	O_RDONLY	= 0x0,
	O_CLOEXEC	= 0x80000,
};

typedef struct Usigset Usigset;
typedef struct Fpxreg Fpxreg;
typedef struct Xmmreg Xmmreg;
typedef struct Fpstate Fpstate;
typedef struct Fpxreg1 Fpxreg1;
typedef struct Xmmreg1 Xmmreg1;
typedef struct Fpstate1 Fpstate1;
typedef struct Fpreg1 Fpreg1;
typedef struct Sigaltstack Sigaltstack;
typedef struct Mcontext Mcontext;
typedef struct Ucontext Ucontext;
typedef struct Sigcontext Sigcontext;

#pragma pack on

struct Usigset {
	uint64	__val[16];
};
struct Fpxreg {
	uint16	significand[4];
	uint16	exponent;
	uint16	padding[3];
};
struct Xmmreg {
	uint32	element[4];
};
struct Fpstate {
	uint16	cwd;
	uint16	swd;
	uint16	ftw;
	uint16	fop;
	uint64	rip;
	uint64	rdp;
	uint32	mxcsr;
	uint32	mxcr_mask;
	Fpxreg	_st[8];
	Xmmreg	_xmm[16];
	uint32	padding[24];
};
struct Fpxreg1 {
	uint16	significand[4];
	uint16	exponent;
	uint16	padding[3];
};
struct Xmmreg1 {
	uint32	element[4];
};
struct Fpstate1 {
	uint16	cwd;
	uint16	swd;
	uint16	ftw;
	uint16	fop;
	uint64	rip;
	uint64	rdp;
	uint32	mxcsr;
	uint32	mxcr_mask;
	Fpxreg1	_st[8];
	Xmmreg1	_xmm[16];
	uint32	padding[24];
};
struct Fpreg1 {
	uint16	significand[4];
	uint16	exponent;
};
struct Sigaltstack {
	byte	*ss_sp;
	int32	ss_flags;
	byte	Pad_godefs_0[4];
	uint64	ss_size;
};
struct Mcontext {
	int64	gregs[23];
	Fpstate	*fpregs;
	uint64	__reserved1[8];
};
struct Ucontext {
	uint64	uc_flags;
	Ucontext	*uc_link;
	Sigaltstack	uc_stack;
	Mcontext	uc_mcontext;
	Usigset	uc_sigmask;
	Fpstate	__fpregs_mem;
};
struct Sigcontext {
	uint64	r8;
	uint64	r9;
	uint64	r10;
	uint64	r11;
	uint64	r12;
	uint64	r13;
	uint64	r14;
	uint64	r15;
	uint64	rdi;
	uint64	rsi;
	uint64	rbp;
	uint64	rbx;
	uint64	rdx;
	uint64	rax;
	uint64	rcx;
	uint64	rsp;
	uint64	rip;
	uint64	eflags;
	uint16	cs;
	uint16	gs;
	uint16	fs;
	uint16	__pad0;
	uint64	err;
	uint64	trapno;
	uint64	oldmask;
	uint64	cr2;
	Fpstate1	*fpstate;
	uint64	__reserved1[8];
};


#pragma pack off
