// 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,

	MADV_DONTNEED	= 0x4,

	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_cgo_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_cgo_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
