// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.


typedef uintptr kevent_udata;

struct sigaction;

void	runtime·sigpanic(void);

void	runtime·setitimer(int32, Itimerval*, Itimerval*);
void	runtime·sigaction(int32, struct SigactionT*, struct SigactionT*);
void	runtime·sigaltstack(SigaltstackT*, SigaltstackT*);
void	runtime·sigprocmask(int32, Sigset*, Sigset*);
void	runtime·unblocksignals(void);
int32	runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);


void	runtime·raisesigpipe(void);
void	runtime·setsig(int32, void(*)(int32, Siginfo*, void*, G*), bool);
void	runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp);
void	runtime·sigpanic(void);

enum {
	SS_DISABLE = 2,
	SIG_BLOCK = 1,
	SIG_UNBLOCK = 2,
	SIG_SETMASK = 3,
	NSIG = 73, /* number of signals in runtime·SigTab array */
	SI_USER = 0,
	_UC_SIGMASK = 0x01,
	_UC_CPU = 0x04,
	RLIMIT_AS = 10,
};

typedef struct Rlimit Rlimit;
struct Rlimit {
	int64   rlim_cur;
	int64   rlim_max;
};
int32   runtime·getrlimit(int32, Rlimit*);

// Call an external library function described by {fn, a0, ..., an}, with
// SysV conventions, switching to os stack during the call, if necessary.
uintptr	runtime·sysvicall0(uintptr (*fn)());
uintptr	runtime·sysvicall1(uintptr (*fn)(), uintptr a1);
uintptr	runtime·sysvicall2(uintptr (*fn)(), uintptr a1, uintptr a2);
uintptr	runtime·sysvicall3(uintptr (*fn)(), uintptr a1, uintptr a2, uintptr a3);
uintptr	runtime·sysvicall4(uintptr (*fn)(), uintptr a1, uintptr a2, uintptr a3, uintptr a4);
uintptr	runtime·sysvicall5(uintptr (*fn)(), uintptr a1, uintptr a2, uintptr a3, uintptr a4, uintptr a5);
uintptr	runtime·sysvicall6(uintptr (*fn)(), uintptr a1, uintptr a2, uintptr a3, uintptr a4, uintptr a5, uintptr a6);
void	runtime·asmsysvicall6(void *c);

void	runtime·miniterrno(void *fn);
