1// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package runtime
6
7import "unsafe"
8
9// Constants
10const (
11	_EINTR  = 0x4
12	_ENOMEM = 0xc
13	_EAGAIN = 0xb
14
15	_PROT_NONE  = 0
16	_PROT_READ  = 0x1
17	_PROT_WRITE = 0x2
18	_PROT_EXEC  = 0x4
19
20	_MAP_ANON    = 0x20
21	_MAP_PRIVATE = 0x2
22	_MAP_FIXED   = 0x10
23
24	_MADV_DONTNEED   = 0x4
25	_MADV_FREE       = 0x8
26	_MADV_HUGEPAGE   = 0xe
27	_MADV_NOHUGEPAGE = 0xf
28	_MADV_COLLAPSE   = 0x19
29
30	_SA_RESTART     = 0x10000000
31	_SA_ONSTACK     = 0x8000000
32	_SA_RESTORER    = 0 // unused on ARM
33	_SA_SIGINFO     = 0x4
34	_SI_KERNEL      = 0x80
35	_SI_TIMER       = -0x2
36	_SIGHUP         = 0x1
37	_SIGINT         = 0x2
38	_SIGQUIT        = 0x3
39	_SIGILL         = 0x4
40	_SIGTRAP        = 0x5
41	_SIGABRT        = 0x6
42	_SIGBUS         = 0x7
43	_SIGFPE         = 0x8
44	_SIGKILL        = 0x9
45	_SIGUSR1        = 0xa
46	_SIGSEGV        = 0xb
47	_SIGUSR2        = 0xc
48	_SIGPIPE        = 0xd
49	_SIGALRM        = 0xe
50	_SIGSTKFLT      = 0x10
51	_SIGCHLD        = 0x11
52	_SIGCONT        = 0x12
53	_SIGSTOP        = 0x13
54	_SIGTSTP        = 0x14
55	_SIGTTIN        = 0x15
56	_SIGTTOU        = 0x16
57	_SIGURG         = 0x17
58	_SIGXCPU        = 0x18
59	_SIGXFSZ        = 0x19
60	_SIGVTALRM      = 0x1a
61	_SIGPROF        = 0x1b
62	_SIGWINCH       = 0x1c
63	_SIGIO          = 0x1d
64	_SIGPWR         = 0x1e
65	_SIGSYS         = 0x1f
66	_SIGRTMIN       = 0x20
67	_FPE_INTDIV     = 0x1
68	_FPE_INTOVF     = 0x2
69	_FPE_FLTDIV     = 0x3
70	_FPE_FLTOVF     = 0x4
71	_FPE_FLTUND     = 0x5
72	_FPE_FLTRES     = 0x6
73	_FPE_FLTINV     = 0x7
74	_FPE_FLTSUB     = 0x8
75	_BUS_ADRALN     = 0x1
76	_BUS_ADRERR     = 0x2
77	_BUS_OBJERR     = 0x3
78	_SEGV_MAPERR    = 0x1
79	_SEGV_ACCERR    = 0x2
80	_ITIMER_REAL    = 0
81	_ITIMER_PROF    = 0x2
82	_ITIMER_VIRTUAL = 0x1
83	_O_RDONLY       = 0
84	_O_WRONLY       = 0x1
85	_O_CREAT        = 0x40
86	_O_TRUNC        = 0x200
87	_O_NONBLOCK     = 0x800
88	_O_CLOEXEC      = 0x80000
89
90	_CLOCK_THREAD_CPUTIME_ID = 0x3
91
92	_SIGEV_THREAD_ID = 0x4
93
94	_AF_UNIX    = 0x1
95	_SOCK_DGRAM = 0x2
96)
97
98type timespec struct {
99	tv_sec  int32
100	tv_nsec int32
101}
102
103//go:nosplit
104func (ts *timespec) setNsec(ns int64) {
105	ts.tv_sec = timediv(ns, 1e9, &ts.tv_nsec)
106}
107
108type stackt struct {
109	ss_sp    *byte
110	ss_flags int32
111	ss_size  uintptr
112}
113
114type sigcontext struct {
115	trap_no       uint32
116	error_code    uint32
117	oldmask       uint32
118	r0            uint32
119	r1            uint32
120	r2            uint32
121	r3            uint32
122	r4            uint32
123	r5            uint32
124	r6            uint32
125	r7            uint32
126	r8            uint32
127	r9            uint32
128	r10           uint32
129	fp            uint32
130	ip            uint32
131	sp            uint32
132	lr            uint32
133	pc            uint32
134	cpsr          uint32
135	fault_address uint32
136}
137
138type ucontext struct {
139	uc_flags    uint32
140	uc_link     *ucontext
141	uc_stack    stackt
142	uc_mcontext sigcontext
143	uc_sigmask  uint32
144	__unused    [31]int32
145	uc_regspace [128]uint32
146}
147
148type timeval struct {
149	tv_sec  int32
150	tv_usec int32
151}
152
153func (tv *timeval) set_usec(x int32) {
154	tv.tv_usec = x
155}
156
157type itimerspec struct {
158	it_interval timespec
159	it_value    timespec
160}
161
162type itimerval struct {
163	it_interval timeval
164	it_value    timeval
165}
166
167type sigeventFields struct {
168	value  uintptr
169	signo  int32
170	notify int32
171	// below here is a union; sigev_notify_thread_id is the only field we use
172	sigev_notify_thread_id int32
173}
174
175type sigevent struct {
176	sigeventFields
177
178	// Pad struct to the max size in the kernel.
179	_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
180}
181
182type siginfoFields struct {
183	si_signo int32
184	si_errno int32
185	si_code  int32
186	// below here is a union; si_addr is the only field we use
187	si_addr uint32
188}
189
190type siginfo struct {
191	siginfoFields
192
193	// Pad struct to the max size in the kernel.
194	_ [_si_max_size - unsafe.Sizeof(siginfoFields{})]byte
195}
196
197type sigactiont struct {
198	sa_handler  uintptr
199	sa_flags    uint32
200	sa_restorer uintptr
201	sa_mask     uint64
202}
203
204type sockaddr_un struct {
205	family uint16
206	path   [108]byte
207}
208