1// Copyright 2015 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
5//go:build (mips64 || mips64le) && linux
6
7package runtime
8
9import "unsafe"
10
11const (
12	_EINTR  = 0x4
13	_EAGAIN = 0xb
14	_ENOMEM = 0xc
15
16	_PROT_NONE  = 0x0
17	_PROT_READ  = 0x1
18	_PROT_WRITE = 0x2
19	_PROT_EXEC  = 0x4
20
21	_MAP_ANON    = 0x800
22	_MAP_PRIVATE = 0x2
23	_MAP_FIXED   = 0x10
24
25	_MADV_DONTNEED   = 0x4
26	_MADV_FREE       = 0x8
27	_MADV_HUGEPAGE   = 0xe
28	_MADV_NOHUGEPAGE = 0xf
29	_MADV_COLLAPSE   = 0x19
30
31	_SA_RESTART = 0x10000000
32	_SA_ONSTACK = 0x8000000
33	_SA_SIGINFO = 0x8
34
35	_SI_KERNEL = 0x80
36	_SI_TIMER  = -0x2
37
38	_SIGHUP    = 0x1
39	_SIGINT    = 0x2
40	_SIGQUIT   = 0x3
41	_SIGILL    = 0x4
42	_SIGTRAP   = 0x5
43	_SIGABRT   = 0x6
44	_SIGEMT    = 0x7
45	_SIGFPE    = 0x8
46	_SIGKILL   = 0x9
47	_SIGBUS    = 0xa
48	_SIGSEGV   = 0xb
49	_SIGSYS    = 0xc
50	_SIGPIPE   = 0xd
51	_SIGALRM   = 0xe
52	_SIGUSR1   = 0x10
53	_SIGUSR2   = 0x11
54	_SIGCHLD   = 0x12
55	_SIGPWR    = 0x13
56	_SIGWINCH  = 0x14
57	_SIGURG    = 0x15
58	_SIGIO     = 0x16
59	_SIGSTOP   = 0x17
60	_SIGTSTP   = 0x18
61	_SIGCONT   = 0x19
62	_SIGTTIN   = 0x1a
63	_SIGTTOU   = 0x1b
64	_SIGVTALRM = 0x1c
65	_SIGPROF   = 0x1d
66	_SIGXCPU   = 0x1e
67	_SIGXFSZ   = 0x1f
68
69	_SIGRTMIN = 0x20
70
71	_FPE_INTDIV = 0x1
72	_FPE_INTOVF = 0x2
73	_FPE_FLTDIV = 0x3
74	_FPE_FLTOVF = 0x4
75	_FPE_FLTUND = 0x5
76	_FPE_FLTRES = 0x6
77	_FPE_FLTINV = 0x7
78	_FPE_FLTSUB = 0x8
79
80	_BUS_ADRALN = 0x1
81	_BUS_ADRERR = 0x2
82	_BUS_OBJERR = 0x3
83
84	_SEGV_MAPERR = 0x1
85	_SEGV_ACCERR = 0x2
86
87	_ITIMER_REAL    = 0x0
88	_ITIMER_VIRTUAL = 0x1
89	_ITIMER_PROF    = 0x2
90
91	_CLOCK_THREAD_CPUTIME_ID = 0x3
92
93	_SIGEV_THREAD_ID = 0x4
94)
95
96//struct Sigset {
97//	uint64	sig[1];
98//};
99//typedef uint64 Sigset;
100
101type timespec struct {
102	tv_sec  int64
103	tv_nsec int64
104}
105
106//go:nosplit
107func (ts *timespec) setNsec(ns int64) {
108	ts.tv_sec = ns / 1e9
109	ts.tv_nsec = ns % 1e9
110}
111
112type timeval struct {
113	tv_sec  int64
114	tv_usec int64
115}
116
117func (tv *timeval) set_usec(x int32) {
118	tv.tv_usec = int64(x)
119}
120
121type sigactiont struct {
122	sa_flags   uint32
123	sa_handler uintptr
124	sa_mask    [2]uint64
125	// linux header does not have sa_restorer field,
126	// but it is used in setsig(). it is no harm to put it here
127	sa_restorer uintptr
128}
129
130type siginfoFields struct {
131	si_signo int32
132	si_code  int32
133	si_errno int32
134	__pad0   [1]int32
135	// below here is a union; si_addr is the only field we use
136	si_addr uint64
137}
138
139type siginfo struct {
140	siginfoFields
141
142	// Pad struct to the max size in the kernel.
143	_ [_si_max_size - unsafe.Sizeof(siginfoFields{})]byte
144}
145
146type itimerspec struct {
147	it_interval timespec
148	it_value    timespec
149}
150
151type itimerval struct {
152	it_interval timeval
153	it_value    timeval
154}
155
156type sigeventFields struct {
157	value  uintptr
158	signo  int32
159	notify int32
160	// below here is a union; sigev_notify_thread_id is the only field we use
161	sigev_notify_thread_id int32
162}
163
164type sigevent struct {
165	sigeventFields
166
167	// Pad struct to the max size in the kernel.
168	_ [_sigev_max_size - unsafe.Sizeof(sigeventFields{})]byte
169}
170
171const (
172	_O_RDONLY    = 0x0
173	_O_WRONLY    = 0x1
174	_O_CREAT     = 0x100
175	_O_TRUNC     = 0x200
176	_O_NONBLOCK  = 0x80
177	_O_CLOEXEC   = 0x80000
178	_SA_RESTORER = 0
179)
180
181type stackt struct {
182	ss_sp    *byte
183	ss_size  uintptr
184	ss_flags int32
185}
186
187type sigcontext struct {
188	sc_regs      [32]uint64
189	sc_fpregs    [32]uint64
190	sc_mdhi      uint64
191	sc_hi1       uint64
192	sc_hi2       uint64
193	sc_hi3       uint64
194	sc_mdlo      uint64
195	sc_lo1       uint64
196	sc_lo2       uint64
197	sc_lo3       uint64
198	sc_pc        uint64
199	sc_fpc_csr   uint32
200	sc_used_math uint32
201	sc_dsp       uint32
202	sc_reserved  uint32
203}
204
205type ucontext struct {
206	uc_flags    uint64
207	uc_link     *ucontext
208	uc_stack    stackt
209	uc_mcontext sigcontext
210	uc_sigmask  uint64
211}
212