blob: 5e8c7420e29d7976dc897d519f3ff8521d1e862f [file] [log] [blame]
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -04001// Copyright 2010 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
Russ Cox55889402011-12-19 15:51:13 -05005#include "zasm_GOOS_GOARCH.h"
Keith Randall0273dc12013-08-07 12:20:05 -07006#include "../../cmd/ld/textflag.h"
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -04007
8// setldt(int entry, int address, int limit)
Keith Randall0273dc12013-08-07 12:20:05 -07009TEXT runtime·setldt(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040010 RET
11
Keith Randall0273dc12013-08-07 12:20:05 -070012TEXT runtime·open(SB),NOSPLIT,$0
Yuval Pavel Zholkover09241852011-06-10 17:23:54 +100013 MOVL $14, AX
14 INT $64
15 RET
16
Keith Randall0273dc12013-08-07 12:20:05 -070017TEXT runtime·pread(SB),NOSPLIT,$0
Anthony Martin4a2d30e2011-11-17 22:09:28 -050018 MOVL $50, AX
19 INT $64
Anthony Martin528ccdc2011-10-05 12:07:44 -040020 RET
21
Keith Randall0273dc12013-08-07 12:20:05 -070022TEXT runtime·pwrite(SB),NOSPLIT,$0
Anthony Martin4a2d30e2011-11-17 22:09:28 -050023 MOVL $51, AX
24 INT $64
Anthony Martin528ccdc2011-10-05 12:07:44 -040025 RET
26
Keith Randall0273dc12013-08-07 12:20:05 -070027TEXT runtime·seek(SB),NOSPLIT,$0
Anthony Martin432f1822012-12-17 11:07:40 -050028 MOVL $39, AX
29 INT $64
30 CMPL AX, $-1
31 JNE 4(PC)
32 MOVL a+0(FP), CX
33 MOVL AX, 0(CX)
34 MOVL AX, 4(CX)
35 RET
36
Keith Randall0273dc12013-08-07 12:20:05 -070037TEXT runtime·close(SB),NOSPLIT,$0
Anthony Martin528ccdc2011-10-05 12:07:44 -040038 MOVL $4, AX
Anthony Martin432f1822012-12-17 11:07:40 -050039 INT $64
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040040 RET
41
Keith Randall0273dc12013-08-07 12:20:05 -070042TEXT runtime·exits(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040043 MOVL $8, AX
44 INT $64
45 RET
46
Keith Randall0273dc12013-08-07 12:20:05 -070047TEXT runtime·brk_(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040048 MOVL $24, AX
49 INT $64
50 RET
51
Keith Randall0273dc12013-08-07 12:20:05 -070052TEXT runtime·sleep(SB),NOSPLIT,$0
Anthony Martin528ccdc2011-10-05 12:07:44 -040053 MOVL $17, AX
54 INT $64
55 RET
56
Keith Randall0273dc12013-08-07 12:20:05 -070057TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040058 MOVL $37, AX
59 INT $64
60 RET
Akshat Kumarccdca2c2012-05-04 03:48:34 -070061
Keith Randall0273dc12013-08-07 12:20:05 -070062TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
Akshat Kumarf5752842012-05-16 15:09:28 -070063 MOVL $52, AX
64 INT $64
65 RET
66
Aram Hăvărneanua84e3ad2014-07-09 12:33:42 +020067TEXT runtime·nsec(SB),NOSPLIT,$0
68 MOVL $53, AX
69 INT $64
70 CMPL AX, $-1
71 JNE 4(PC)
72 MOVL a+0(FP), CX
73 MOVL AX, 0(CX)
74 MOVL AX, 4(CX)
75 RET
76
Keith Randall0273dc12013-08-07 12:20:05 -070077TEXT runtime·notify(SB),NOSPLIT,$0
Akshat Kumarccdca2c2012-05-04 03:48:34 -070078 MOVL $28, AX
79 INT $64
80 RET
81
Keith Randall0273dc12013-08-07 12:20:05 -070082TEXT runtime·noted(SB),NOSPLIT,$0
Akshat Kumarccdca2c2012-05-04 03:48:34 -070083 MOVL $29, AX
84 INT $64
85 RET
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040086
Keith Randall0273dc12013-08-07 12:20:05 -070087TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040088 MOVL $38, AX
89 INT $64
90 RET
91
Keith Randall0273dc12013-08-07 12:20:05 -070092TEXT runtime·rfork(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040093 MOVL $19, AX // rfork
David du Colombier56872f02014-02-14 22:27:47 +010094 MOVL stack+8(SP), CX
95 MOVL mm+12(SP), BX // m
96 MOVL gg+16(SP), DX // g
97 MOVL fn+20(SP), SI // fn
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040098 INT $64
99
100 // In parent, return.
101 CMPL AX, $0
102 JEQ 2(PC)
103 RET
104
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400105 // set SP to be on the new child stack
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400106 MOVL CX, SP
107
108 // Initialize m, g.
109 get_tls(AX)
110 MOVL DX, g(AX)
Russ Cox89f185f2014-06-26 11:54:39 -0400111 MOVL BX, g_m(DX)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400112
Russ Cox90093f02014-04-15 13:45:39 -0400113 // Initialize procid from TOS struct.
Aram Hăvărneanudecd8102014-07-02 21:04:10 +1000114 MOVL _tos(SB), AX
Russ Cox90093f02014-04-15 13:45:39 -0400115 MOVL 48(AX), AX // procid
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400116 MOVL AX, m_procid(BX) // save pid as m->procid
Yuval Pavel Zholkover7e776232011-02-11 13:39:05 -0500117
Russ Cox68b42552010-11-04 14:00:19 -0400118 CALL runtime·stackcheck(SB) // smashes AX, CX
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400119
120 MOVL 0(DX), DX // paranoia; check they are not nil
121 MOVL 0(BX), BX
122
123 // more paranoia; check that stack splitting code works
Anthony Martin4a2d30e2011-11-17 22:09:28 -0500124 PUSHL SI
Russ Cox68b42552010-11-04 14:00:19 -0400125 CALL runtime·emptyfunc(SB)
Anthony Martin4a2d30e2011-11-17 22:09:28 -0500126 POPL SI
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400127
128 CALL SI // fn()
Russ Cox68b42552010-11-04 14:00:19 -0400129 CALL runtime·exit(SB)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400130 RET
Akshat Kumar23599ca2012-10-05 16:23:30 -0400131
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800132// void sigtramp(void *ureg, int8 *note)
Keith Randall0273dc12013-08-07 12:20:05 -0700133TEXT runtime·sigtramp(SB),NOSPLIT,$0
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800134 get_tls(AX)
135
Russ Cox89f185f2014-06-26 11:54:39 -0400136 // check that g exists
137 MOVL g(AX), BX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800138 CMPL BX, $0
139 JNE 3(PC)
Shenghou Ma2f1ead72013-07-12 04:39:39 +0800140 CALL runtime·badsignal2(SB) // will exit
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800141 RET
142
143 // save args
144 MOVL ureg+4(SP), CX
145 MOVL note+8(SP), DX
146
147 // change stack
Russ Cox89f185f2014-06-26 11:54:39 -0400148 MOVL g_m(BX), BX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800149 MOVL m_gsignal(BX), BP
150 MOVL g_stackbase(BP), BP
151 MOVL BP, SP
152
153 // make room for args and g
154 SUBL $16, SP
155
156 // save g
157 MOVL g(AX), BP
158 MOVL BP, 12(SP)
159
160 // g = m->gsignal
161 MOVL m_gsignal(BX), DI
162 MOVL DI, g(AX)
163
164 // load args and call sighandler
165 MOVL CX, 0(SP)
166 MOVL DX, 4(SP)
167 MOVL BP, 8(SP)
168
169 CALL runtime·sighandler(SB)
170
171 // restore g
172 get_tls(BX)
173 MOVL 12(SP), BP
174 MOVL BP, g(BX)
175
176 // call noted(AX)
177 MOVL AX, 0(SP)
178 CALL runtime·noted(SB)
179 RET
180
Akshat Kumar23599ca2012-10-05 16:23:30 -0400181// Only used by the 64-bit runtime.
Keith Randall0273dc12013-08-07 12:20:05 -0700182TEXT runtime·setfpmasks(SB),NOSPLIT,$0
Akshat Kumar23599ca2012-10-05 16:23:30 -0400183 RET
Akshat Kumara566dea2013-03-08 00:54:44 +0100184
185#define ERRMAX 128 /* from os_plan9.h */
186
187// func errstr() String
188// Only used by package syscall.
189// Grab error string due to a syscall made
190// in entersyscall mode, without going
191// through the allocator (issue 4994).
192// See ../syscall/asm_plan9_386.s:/·Syscall/
Keith Randall0273dc12013-08-07 12:20:05 -0700193TEXT runtime·errstr(SB),NOSPLIT,$0
Akshat Kumara566dea2013-03-08 00:54:44 +0100194 get_tls(AX)
Russ Cox89f185f2014-06-26 11:54:39 -0400195 MOVL g(AX), BX
196 MOVL g_m(BX), BX
Akshat Kumara566dea2013-03-08 00:54:44 +0100197 MOVL m_errstr(BX), CX
198 MOVL CX, 4(SP)
199 MOVL $ERRMAX, 8(SP)
200 MOVL $41, AX
201 INT $64
Akshat Kumaref7705f2013-03-09 05:39:15 +0100202
203 // syscall requires caller-save
204 MOVL 4(SP), CX
205
206 // push the argument
207 PUSHL CX
Akshat Kumara566dea2013-03-08 00:54:44 +0100208 CALL runtime·findnull(SB)
Akshat Kumaref7705f2013-03-09 05:39:15 +0100209 POPL CX
Akshat Kumara566dea2013-03-08 00:54:44 +0100210 MOVL AX, 8(SP)
211 RET