// Copyright 2018 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.

// +build ignore

/*
Input to cgo -godefs
GOARCH=ppc64 go tool cgo -godefs defs_aix.go > defs_aix_ppc64_tmp.go

This is only an helper to create defs_aix_ppc64.go
Go runtime functions require the "linux" name of fields (ss_sp, si_addr, etc)
However, AIX structures don't provide such names and must be modified.

TODO(aix): create a script to automatise defs_aix creation.

Modifications made:
 - sigset replaced by a [4]uint64 array
 - add sigset_all variable
 - siginfo.si_addr uintptr instead of *byte
 - add (*timeval) set_usec
 - stackt.ss_sp uintptr instead of *byte
 - stackt.ss_size uintptr instead of uint64
 - sigcontext.sc_jmpbuf context64 instead of jumbuf
 - ucontext.__extctx is a uintptr because we don't need extctx struct
 - ucontext.uc_mcontext: replace jumbuf structure by context64 structure
 - sigaction.sa_handler represents union field as both are uintptr
 - tstate.* replace *byte by uintptr


*/

package runtime

/*

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/time.h>
#include <sys/signal.h>
#include <sys/mman.h>
#include <sys/thread.h>
#include <sys/resource.h>

#include <unistd.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
*/
import "C"

const (
	_EPERM     = C.EPERM
	_ENOENT    = C.ENOENT
	_EINTR     = C.EINTR
	_EAGAIN    = C.EAGAIN
	_ENOMEM    = C.ENOMEM
	_EACCES    = C.EACCES
	_EFAULT    = C.EFAULT
	_EINVAL    = C.EINVAL
	_ETIMEDOUT = C.ETIMEDOUT

	_PROT_NONE  = C.PROT_NONE
	_PROT_READ  = C.PROT_READ
	_PROT_WRITE = C.PROT_WRITE
	_PROT_EXEC  = C.PROT_EXEC

	_MAP_ANONYMOUS = C.MAP_ANONYMOUS
	_MAP_PRIVATE   = C.MAP_PRIVATE
	_MAP_FIXED     = C.MAP_FIXED
	_MADV_DONTNEED = C.MADV_DONTNEED

	_SIGHUP     = C.SIGHUP
	_SIGINT     = C.SIGINT
	_SIGQUIT    = C.SIGQUIT
	_SIGILL     = C.SIGILL
	_SIGTRAP    = C.SIGTRAP
	_SIGABRT    = C.SIGABRT
	_SIGBUS     = C.SIGBUS
	_SIGFPE     = C.SIGFPE
	_SIGKILL    = C.SIGKILL
	_SIGUSR1    = C.SIGUSR1
	_SIGSEGV    = C.SIGSEGV
	_SIGUSR2    = C.SIGUSR2
	_SIGPIPE    = C.SIGPIPE
	_SIGALRM    = C.SIGALRM
	_SIGCHLD    = C.SIGCHLD
	_SIGCONT    = C.SIGCONT
	_SIGSTOP    = C.SIGSTOP
	_SIGTSTP    = C.SIGTSTP
	_SIGTTIN    = C.SIGTTIN
	_SIGTTOU    = C.SIGTTOU
	_SIGURG     = C.SIGURG
	_SIGXCPU    = C.SIGXCPU
	_SIGXFSZ    = C.SIGXFSZ
	_SIGVTALRM  = C.SIGVTALRM
	_SIGPROF    = C.SIGPROF
	_SIGWINCH   = C.SIGWINCH
	_SIGIO      = C.SIGIO
	_SIGPWR     = C.SIGPWR
	_SIGSYS     = C.SIGSYS
	_SIGTERM    = C.SIGTERM
	_SIGEMT     = C.SIGEMT
	_SIGWAITING = C.SIGWAITING

	_FPE_INTDIV = C.FPE_INTDIV
	_FPE_INTOVF = C.FPE_INTOVF
	_FPE_FLTDIV = C.FPE_FLTDIV
	_FPE_FLTOVF = C.FPE_FLTOVF
	_FPE_FLTUND = C.FPE_FLTUND
	_FPE_FLTRES = C.FPE_FLTRES
	_FPE_FLTINV = C.FPE_FLTINV
	_FPE_FLTSUB = C.FPE_FLTSUB

	_BUS_ADRALN = C.BUS_ADRALN
	_BUS_ADRERR = C.BUS_ADRERR
	_BUS_OBJERR = C.BUS_OBJERR

	_SEGV_MAPERR = C.SEGV_MAPERR
	_SEGV_ACCERR = C.SEGV_ACCERR

	_ITIMER_REAL    = C.ITIMER_REAL
	_ITIMER_VIRTUAL = C.ITIMER_VIRTUAL
	_ITIMER_PROF    = C.ITIMER_PROF

	_O_RDONLY = C.O_RDONLY

	_SS_DISABLE  = C.SS_DISABLE
	_SI_USER     = C.SI_USER
	_SIG_BLOCK   = C.SIG_BLOCK
	_SIG_UNBLOCK = C.SIG_UNBLOCK
	_SIG_SETMASK = C.SIG_SETMASK

	_SA_SIGINFO = C.SA_SIGINFO
	_SA_RESTART = C.SA_RESTART
	_SA_ONSTACK = C.SA_ONSTACK

	_PTHREAD_CREATE_DETACHED = C.PTHREAD_CREATE_DETACHED

	__SC_PAGE_SIZE        = C._SC_PAGE_SIZE
	__SC_NPROCESSORS_ONLN = C._SC_NPROCESSORS_ONLN

	_F_SETFD    = C.F_SETFD
	_F_SETFL    = C.F_SETFL
	_F_GETFD    = C.F_GETFD
	_F_GETFL    = C.F_GETFL
	_FD_CLOEXEC = C.FD_CLOEXEC
)

type sigset C.sigset_t
type siginfo C.siginfo_t
type timespec C.struct_timespec
type timestruc C.struct_timestruc_t
type timeval C.struct_timeval
type itimerval C.struct_itimerval

type stackt C.stack_t
type sigcontext C.struct_sigcontext
type ucontext C.ucontext_t
type _Ctype_struct___extctx uint64 // ucontext use a pointer to this structure but it shouldn't be used
type jmpbuf C.struct___jmpbuf
type context64 C.struct___context64
type sigactiont C.struct_sigaction
type tstate C.struct_tstate
type rusage C.struct_rusage

type pthread C.pthread_t
type pthread_attr C.pthread_attr_t

type semt C.sem_t