9
9
#include "zasm_GOOS_GOARCH.h"
11
// int64 rfork_thread(int32 flags, void *stack, M *m, G *g, void (*fn)(void));
12
TEXT runtime·rfork_thread(SB),7,$0
16
// Copy m, g, fn off parent stack for use by child.
21
MOVL $251, AX // sys_rfork
24
// Return if rfork syscall failed
34
// In child, on new stack.
37
// Initialize m->procid to thread ID
38
MOVL $299, AX // sys_getthrid
11
// int32 lwp_create(void *context, uintptr flags, void *lwpid)
12
TEXT runtime·lwp_create(SB),7,$0
13
MOVQ context+0(FP), DI
16
MOVL $309, AX // sys__lwp_create
22
TEXT runtime·lwp_tramp(SB),7,$0
42
24
// Set FS to point at m->tls.
44
26
CALL runtime·settls(SB)
46
// In child, set up new stack
55
// It shouldn't return. If it does, exit
56
MOVL $302, AX // sys_threxit
37
// It shouldn't return. If it does, exit.
38
MOVL $310, AX // sys__lwp_exit
58
40
JMP -3(PC) // keep exiting
60
42
TEXT runtime·osyield(SB),7,$0
61
MOVL $298, AX // sys_sched_yield
65
TEXT runtime·thrsleep(SB),7,$0
66
MOVQ 8(SP), DI // arg 1 - ident
67
MOVL 16(SP), SI // arg 2 - clock_id
68
MOVQ 24(SP), DX // arg 3 - tp
69
MOVQ 32(SP), R10 // arg 4 - lock
70
MOVL $300, AX // sys_thrsleep
74
TEXT runtime·thrwakeup(SB),7,$0
75
MOVQ 8(SP), DI // arg 1 - ident
76
MOVL 16(SP), SI // arg 2 - n
77
MOVL $301, AX // sys_thrwakeup
43
MOVL $350, AX // sys_sched_yield
47
TEXT runtime·lwp_park(SB),7,$0
48
MOVQ 8(SP), DI // arg 1 - abstime
49
MOVL 16(SP), SI // arg 2 - unpark
50
MOVQ 24(SP), DX // arg 3 - hint
51
MOVQ 32(SP), R10 // arg 4 - unparkhint
52
MOVL $434, AX // sys__lwp_park
56
TEXT runtime·lwp_unpark(SB),7,$0
57
MOVQ 8(SP), DI // arg 1 - lwp
58
MOVL 16(SP), SI // arg 2 - hint
59
MOVL $321, AX // sys__lwp_unpark
63
TEXT runtime·lwp_self(SB),7,$0
64
MOVL $311, AX // sys__lwp_self
83
70
MOVL 8(SP), DI // arg 1 - exit status
84
71
MOVL $1, AX // sys_exit
86
MOVL $0xf1, 0xf1 // crash
73
MOVL $0xf1, 0xf1 // crash
89
76
TEXT runtime·exit1(SB),7,$-8
90
MOVL $302, AX // sys_threxit
92
MOVL $0xf1, 0xf1 // crash
77
MOVL $310, AX // sys__lwp_exit
79
MOVL $0xf1, 0xf1 // crash
82
TEXT runtime·open(SB),7,$-8
83
MOVQ 8(SP), DI // arg 1 pathname
84
MOVL 16(SP), SI // arg 2 flags
85
MOVL 20(SP), DX // arg 3 mode
90
TEXT runtime·close(SB),7,$-8
91
MOVL 8(SP), DI // arg 1 fd
96
TEXT runtime·read(SB),7,$-8
97
MOVL 8(SP), DI // arg 1 fd
98
MOVQ 16(SP), SI // arg 2 buf
99
MOVL 24(SP), DX // arg 3 count
95
104
TEXT runtime·write(SB),7,$-8
113
122
MOVQ SP, DI // arg 1 - rqtp
114
123
MOVQ $0, SI // arg 2 - rmtp
115
MOVL $240, AX // sys_nanosleep
124
MOVL $430, AX // sys_nanosleep
119
TEXT runtime·raisesigpipe(SB),7,$16
120
MOVL $299, AX // sys_getthrid
128
TEXT runtime·raise(SB),7,$16
129
MOVL $311, AX // sys__lwp_self
122
MOVQ AX, DI // arg 1 - pid
123
MOVQ $13, SI // arg 2 - signum == SIGPIPE
124
MOVL $37, AX // sys_kill
131
MOVQ AX, DI // arg 1 - target
132
MOVL sig+0(FP), SI // arg 2 - signo
133
MOVL $318, AX // sys__lwp_kill
129
138
MOVL 8(SP), DI // arg 1 - which
130
139
MOVQ 16(SP), SI // arg 2 - itv
131
140
MOVQ 24(SP), DX // arg 3 - oitv
132
MOVL $83, AX // sys_setitimer
141
MOVL $425, AX // sys_setitimer
136
145
// func now() (sec int64, nsec int32)
137
146
TEXT time·now(SB), 7, $32
138
LEAQ 8(SP), DI // arg 1 - tp
139
MOVQ $0, SI // arg 2 - tzp
140
MOVL $116, AX // sys_gettimeofday
147
MOVQ $0, DI // arg 1 - clock_id
148
LEAQ 8(SP), SI // arg 2 - tp
149
MOVL $427, AX // sys_clock_gettime
142
151
MOVQ 8(SP), AX // sec
143
MOVL 16(SP), DX // usec
152
MOVL 16(SP), DX // nsec
145
// sec is in AX, usec in DX
154
// sec is in AX, nsec in DX
146
155
MOVQ AX, sec+0(FP)
148
156
MOVL DX, nsec+8(FP)
151
159
TEXT runtime·nanotime(SB),7,$32
152
LEAQ 8(SP), DI // arg 1 - tp
153
MOVQ $0, SI // arg 2 - tzp
154
MOVL $116, AX // sys_gettimeofday
160
MOVQ $0, DI // arg 1 - clock_id
161
LEAQ 8(SP), SI // arg 2 - tp
162
MOVL $427, AX // sys_clock_gettime
156
164
MOVQ 8(SP), AX // sec
157
MOVL 16(SP), DX // usec
165
MOVL 16(SP), DX // nsec
159
// sec is in AX, usec in DX
167
// sec is in AX, nsec in DX
160
168
// return nsec in AX
161
169
IMULQ $1000000000, AX
173
TEXT runtime·getcontext(SB),7,$-8
174
MOVQ 8(SP), DI // arg 1 - context
175
MOVL $307, AX // sys_getcontext
178
MOVL $0xf1, 0xf1 // crash
181
TEXT runtime·sigprocmask(SB),7,$0
182
MOVL 8(SP), DI // arg 1 - how
183
MOVQ 16(SP), SI // arg 2 - set
184
MOVQ 24(SP), DX // arg 3 - oset
185
MOVL $293, AX // sys_sigprocmask
188
MOVL $0xf1, 0xf1 // crash
191
TEXT runtime·sigreturn_tramp(SB),7,$-8
192
MOVQ R15, DI // Load address of ucontext
193
MOVQ $308, AX // sys_setcontext
195
MOVQ $-1, DI // Something failed...
196
MOVL $1, AX // sys_exit
166
199
TEXT runtime·sigaction(SB),7,$-8
167
200
MOVL 8(SP), DI // arg 1 - signum
168
201
MOVQ 16(SP), SI // arg 2 - nsa
169
202
MOVQ 24(SP), DX // arg 3 - osa
204
LEAQ runtime·sigreturn_tramp(SB), R10
205
MOVQ $2, R8 // arg 5 - vers
206
MOVL $340, AX // sys___sigaction_sigtramp
173
MOVL $0xf1, 0xf1 // crash
209
MOVL $0xf1, 0xf1 // crash
176
212
TEXT runtime·sigtramp(SB),7,$64
179
215
// check that m exists
183
220
CALL runtime·badsignal(SB)
190
228
MOVQ m_gsignal(BP), BP
198
236
CALL runtime·sighandler(SB)
226
262
MOVL $73, AX // sys_munmap
229
MOVL $0xf1, 0xf1 // crash
265
MOVL $0xf1, 0xf1 // crash
269
TEXT runtime·madvise(SB),7,$0
270
MOVQ addr+0(FP), DI // arg 1 - addr
271
MOVQ len+8(FP), SI // arg 2 - len
272
MOVQ behav+16(FP), DX // arg 3 - behav
273
MOVQ $75, AX // sys_madvise
275
// ignore failure - maybe pages are locked
232
278
TEXT runtime·sigaltstack(SB),7,$-8
233
279
MOVQ new+8(SP), DI // arg 1 - nss
234
280
MOVQ old+16(SP), SI // arg 2 - oss
235
MOVQ $288, AX // sys_sigaltstack
281
MOVQ $281, AX // sys___sigaltstack14
238
MOVL $0xf1, 0xf1 // crash
284
MOVL $0xf1, 0xf1 // crash
241
287
// set tls base to DI
242
288
TEXT runtime·settls(SB),7,$8
243
289
// adjust for ELF: wants to use -16(FS) and -8(FS) for g and m
247
MOVQ $12, DI // AMD64_SET_FSBASE (machine/sysarch.h)
248
MOVQ $165, AX // sys_sysarch
290
ADDQ $16, DI // arg 1 - ptr
291
MOVQ $317, AX // sys__lwp_setprivate
251
MOVL $0xf1, 0xf1 // crash
294
MOVL $0xf1, 0xf1 // crash
254
297
TEXT runtime·sysctl(SB),7,$0