12
12
TEXT runtime·exit(SB),7,$-4
15
MOVL $0xf1, 0xf1 // crash
15
MOVL $0xf1, 0xf1 // crash
18
18
TEXT runtime·exit1(SB),7,$-4
19
MOVL $302, AX // sys_threxit
19
MOVL $310, AX // sys__lwp_exit
22
MOVL $0xf1, 0xf1 // crash
22
MOVL $0xf1, 0xf1 // crash
25
TEXT runtime·open(SB),7,$-4
30
TEXT runtime·close(SB),7,$-4
35
TEXT runtime·read(SB),7,$-4
25
40
TEXT runtime·write(SB),7,$-4
30
TEXT runtime·usleep(SB),7,$20
45
TEXT runtime·usleep(SB),7,$24
32
47
MOVL usec+0(FP), AX
35
MOVL AX, 12(SP) // tv_sec
50
MOVL AX, 12(SP) // tv_sec - l32
51
MOVL $0, 16(SP) // tv_sec - h32
38
MOVL AX, 16(SP) // tv_nsec
54
MOVL AX, 20(SP) // tv_nsec
42
58
MOVL AX, 4(SP) // arg 1 - rqtp
43
59
MOVL $0, 8(SP) // arg 2 - rmtp
44
MOVL $240, AX // sys_nanosleep
60
MOVL $430, AX // sys_nanosleep
48
TEXT runtime·raisesigpipe(SB),7,$12
49
MOVL $299, AX // sys_getthrid
64
TEXT runtime·raise(SB),7,$12
65
MOVL $311, AX // sys__lwp_self
52
MOVL AX, 4(SP) // arg 1 - pid
53
MOVL $13, 8(SP) // arg 2 - signum == SIGPIPE
54
MOVL $37, AX // sys_kill
68
MOVL AX, 4(SP) // arg 1 - target
70
MOVL AX, 8(SP) // arg 2 - signo
71
MOVL $318, AX // sys__lwp_kill
68
85
STOSL // arg 6 - pad
69
86
MOVSL // arg 7 - offset
70
MOVL $0, AX // top 64 bits of file offset
87
MOVL $0, AX // top 32 bits of file offset
72
89
MOVL $197, AX // sys_mmap
78
93
TEXT runtime·munmap(SB),7,$-4
79
94
MOVL $73, AX // sys_munmap
82
MOVL $0xf1, 0xf1 // crash
97
MOVL $0xf1, 0xf1 // crash
100
TEXT runtime·madvise(SB),7,$-4
101
MOVL $75, AX // sys_madvise
103
// ignore failure - maybe pages are locked
85
106
TEXT runtime·setitimer(SB),7,$-4
107
MOVL $425, AX // sys_setitimer
90
111
// func now() (sec int64, nsec int32)
91
112
TEXT time·now(SB), 7, $32
114
MOVL $0, 4(SP) // arg 1 - clock_id
115
MOVL BX, 8(SP) // arg 2 - tp
116
MOVL $427, AX // sys_clock_gettime
97
MOVL 12(SP), AX // sec
98
MOVL 16(SP), BX // usec
100
// sec is in AX, usec in BX
119
MOVL 12(SP), AX // sec - l32
101
120
MOVL AX, sec+0(FP)
121
MOVL 16(SP), AX // sec - h32
124
MOVL 20(SP), BX // nsec
104
125
MOVL BX, nsec+8(FP)
107
128
// int64 nanotime(void) so really
108
129
// void nanotime(int64 *nsec)
109
130
TEXT runtime·nanotime(SB),7,$32
132
MOVL $0, 4(SP) // arg 1 - clock_id
133
MOVL BX, 8(SP) // arg 2 - tp
134
MOVL $427, AX // sys_clock_gettime
115
MOVL 12(SP), AX // sec
116
MOVL 16(SP), BX // usec
118
// sec is in AX, usec in BX
119
// convert to DX:AX nsec
137
MOVL 16(SP), CX // sec - h32
138
IMULL $1000000000, CX
140
MOVL 12(SP), AX // sec - l32
142
MULL BX // result in dx:ax
144
MOVL 20(SP), BX // nsec
146
ADCL CX, DX // add high bits with carry
126
148
MOVL ret+0(FP), DI
131
TEXT runtime·sigaction(SB),7,$-4
132
MOVL $46, AX // sys_sigaction
135
MOVL $0xf1, 0xf1 // crash
153
TEXT runtime·getcontext(SB),7,$-4
154
MOVL $307, AX // sys_getcontext
157
MOVL $0xf1, 0xf1 // crash
160
TEXT runtime·sigprocmask(SB),7,$-4
161
MOVL $293, AX // sys_sigprocmask
164
MOVL $0xf1, 0xf1 // crash
167
TEXT runtime·sigreturn_tramp(SB),7,$0
168
LEAL 140(SP), AX // Load address of ucontext
170
MOVL $308, AX // sys_setcontext
172
MOVL $-1, 4(SP) // Something failed...
173
MOVL $1, AX // sys_exit
176
TEXT runtime·sigaction(SB),7,$24
182
MOVSL // arg 3 - oact
183
LEAL runtime·sigreturn_tramp(SB), AX
184
STOSL // arg 4 - tramp
186
STOSL // arg 5 - vers
187
MOVL $340, AX // sys___sigaction_sigtramp
190
MOVL $0xf1, 0xf1 // crash
138
193
TEXT runtime·sigtramp(SB),7,$44
172
MOVL context+8(FP), AX
173
MOVL $0, 0(SP) // syscall gap
174
MOVL AX, 4(SP) // arg 1 - sigcontext
175
MOVL $103, AX // sys_sigreturn
177
MOVL $0xf1, 0xf1 // crash
180
// int32 rfork_thread(int32 flags, void *stack, M *m, G *g, void (*fn)(void));
181
TEXT runtime·rfork_thread(SB),7,$8
183
MOVL stack+12(SP), CX
185
// Copy m, g, fn off parent stack for use by child.
196
MOVL $0, 0(SP) // syscall gap
197
MOVL AX, 4(SP) // arg 1 - flags
198
MOVL $251, AX // sys_rfork
230
// int32 lwp_create(void *context, uintptr flags, void *lwpid);
231
TEXT runtime·lwp_create(SB),7,$16
233
MOVL context+0(FP), AX
234
MOVL AX, 4(SP) // arg 1 - context
236
MOVL AX, 8(SP) // arg 2 - flags
238
MOVL AX, 12(SP) // arg 3 - lwpid
239
MOVL $309, AX // sys__lwp_create
201
// Return if rfork syscall failed
207
// In parent, return.
213
// In child, on new stack.
216
// Paranoia: check that SP is as we expect.
227
// Initialize m->procid to thread ID
228
MOVL $299, AX // sys_getthrid
230
MOVL AX, m_procid(BX)
245
TEXT runtime·lwp_tramp(SB),7,$0
232
247
// Set FS to point at m->tls
233
248
LEAL m_tls(BX), BP
278
293
TEXT runtime·settls(SB),7,$16
279
294
// adjust for ELF: wants to use -8(GS) and -4(GS) for g and m
283
297
MOVL $0, 0(SP) // syscall gap
284
MOVL $9, 4(SP) // I386_SET_GSBASE (machine/sysarch.h)
285
MOVL CX, 8(SP) // pointer to base
286
MOVL $165, AX // sys_sysarch
298
MOVL CX, 4(SP) // arg 1 - ptr
299
MOVL $317, AX // sys__lwp_setprivate
289
MOVL $0xf1, 0xf1 // crash
302
MOVL $0xf1, 0xf1 // crash
292
305
TEXT runtime·osyield(SB),7,$-4
293
MOVL $298, AX // sys_sched_yield
297
TEXT runtime·thrsleep(SB),7,$-4
298
MOVL $300, AX // sys_thrsleep
302
TEXT runtime·thrwakeup(SB),7,$-4
303
MOVL $301, AX // sys_thrwakeup
306
MOVL $350, AX // sys_sched_yield
310
TEXT runtime·lwp_park(SB),7,$-4
311
MOVL $434, AX // sys__lwp_park
315
TEXT runtime·lwp_unpark(SB),7,$-4
316
MOVL $321, AX // sys__lwp_unpark
320
TEXT runtime·lwp_self(SB),7,$-4
321
MOVL $311, AX // sys__lwp_self