Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 1 | // 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 Cox | 5588940 | 2011-12-19 15:51:13 -0500 | [diff] [blame] | 5 | #include "zasm_GOOS_GOARCH.h" |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 6 | #include "../../cmd/ld/textflag.h" |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 7 | |
| 8 | // setldt(int entry, int address, int limit) |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 9 | TEXT runtime·setldt(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 10 | RET |
| 11 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 12 | TEXT runtime·open(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 0924185 | 2011-06-10 17:23:54 +1000 | [diff] [blame] | 13 | MOVL $14, AX |
| 14 | INT $64 |
| 15 | RET |
| 16 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 17 | TEXT runtime·pread(SB),NOSPLIT,$0 |
Anthony Martin | 4a2d30e | 2011-11-17 22:09:28 -0500 | [diff] [blame] | 18 | MOVL $50, AX |
| 19 | INT $64 |
Anthony Martin | 528ccdc | 2011-10-05 12:07:44 -0400 | [diff] [blame] | 20 | RET |
| 21 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 22 | TEXT runtime·pwrite(SB),NOSPLIT,$0 |
Anthony Martin | 4a2d30e | 2011-11-17 22:09:28 -0500 | [diff] [blame] | 23 | MOVL $51, AX |
| 24 | INT $64 |
Anthony Martin | 528ccdc | 2011-10-05 12:07:44 -0400 | [diff] [blame] | 25 | RET |
| 26 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 27 | TEXT runtime·seek(SB),NOSPLIT,$0 |
Anthony Martin | 432f182 | 2012-12-17 11:07:40 -0500 | [diff] [blame] | 28 | 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 Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 37 | TEXT runtime·close(SB),NOSPLIT,$0 |
Anthony Martin | 528ccdc | 2011-10-05 12:07:44 -0400 | [diff] [blame] | 38 | MOVL $4, AX |
Anthony Martin | 432f182 | 2012-12-17 11:07:40 -0500 | [diff] [blame] | 39 | INT $64 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 40 | RET |
| 41 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 42 | TEXT runtime·exits(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 43 | MOVL $8, AX |
| 44 | INT $64 |
| 45 | RET |
| 46 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 47 | TEXT runtime·brk_(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 48 | MOVL $24, AX |
| 49 | INT $64 |
| 50 | RET |
| 51 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 52 | TEXT runtime·sleep(SB),NOSPLIT,$0 |
Anthony Martin | 528ccdc | 2011-10-05 12:07:44 -0400 | [diff] [blame] | 53 | MOVL $17, AX |
| 54 | INT $64 |
| 55 | RET |
| 56 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 57 | TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 58 | MOVL $37, AX |
| 59 | INT $64 |
| 60 | RET |
Akshat Kumar | ccdca2c | 2012-05-04 03:48:34 -0700 | [diff] [blame] | 61 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 62 | TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0 |
Akshat Kumar | f575284 | 2012-05-16 15:09:28 -0700 | [diff] [blame] | 63 | MOVL $52, AX |
| 64 | INT $64 |
| 65 | RET |
| 66 | |
Aram Hăvărneanu | a84e3ad | 2014-07-09 12:33:42 +0200 | [diff] [blame^] | 67 | TEXT 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 Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 77 | TEXT runtime·notify(SB),NOSPLIT,$0 |
Akshat Kumar | ccdca2c | 2012-05-04 03:48:34 -0700 | [diff] [blame] | 78 | MOVL $28, AX |
| 79 | INT $64 |
| 80 | RET |
| 81 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 82 | TEXT runtime·noted(SB),NOSPLIT,$0 |
Akshat Kumar | ccdca2c | 2012-05-04 03:48:34 -0700 | [diff] [blame] | 83 | MOVL $29, AX |
| 84 | INT $64 |
| 85 | RET |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 86 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 87 | TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 88 | MOVL $38, AX |
| 89 | INT $64 |
| 90 | RET |
| 91 | |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 92 | TEXT runtime·rfork(SB),NOSPLIT,$0 |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 93 | MOVL $19, AX // rfork |
David du Colombier | 56872f0 | 2014-02-14 22:27:47 +0100 | [diff] [blame] | 94 | 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 Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 98 | INT $64 |
| 99 | |
| 100 | // In parent, return. |
| 101 | CMPL AX, $0 |
| 102 | JEQ 2(PC) |
| 103 | RET |
| 104 | |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 105 | // set SP to be on the new child stack |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 106 | MOVL CX, SP |
| 107 | |
| 108 | // Initialize m, g. |
| 109 | get_tls(AX) |
| 110 | MOVL DX, g(AX) |
Russ Cox | 89f185f | 2014-06-26 11:54:39 -0400 | [diff] [blame] | 111 | MOVL BX, g_m(DX) |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 112 | |
Russ Cox | 90093f0 | 2014-04-15 13:45:39 -0400 | [diff] [blame] | 113 | // Initialize procid from TOS struct. |
Aram Hăvărneanu | decd810 | 2014-07-02 21:04:10 +1000 | [diff] [blame] | 114 | MOVL _tos(SB), AX |
Russ Cox | 90093f0 | 2014-04-15 13:45:39 -0400 | [diff] [blame] | 115 | MOVL 48(AX), AX // procid |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 116 | MOVL AX, m_procid(BX) // save pid as m->procid |
Yuval Pavel Zholkover | 7e77623 | 2011-02-11 13:39:05 -0500 | [diff] [blame] | 117 | |
Russ Cox | 68b4255 | 2010-11-04 14:00:19 -0400 | [diff] [blame] | 118 | CALL runtime·stackcheck(SB) // smashes AX, CX |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 119 | |
| 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 Martin | 4a2d30e | 2011-11-17 22:09:28 -0500 | [diff] [blame] | 124 | PUSHL SI |
Russ Cox | 68b4255 | 2010-11-04 14:00:19 -0400 | [diff] [blame] | 125 | CALL runtime·emptyfunc(SB) |
Anthony Martin | 4a2d30e | 2011-11-17 22:09:28 -0500 | [diff] [blame] | 126 | POPL SI |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 127 | |
| 128 | CALL SI // fn() |
Russ Cox | 68b4255 | 2010-11-04 14:00:19 -0400 | [diff] [blame] | 129 | CALL runtime·exit(SB) |
Yuval Pavel Zholkover | 99a10ef | 2010-10-18 12:32:55 -0400 | [diff] [blame] | 130 | RET |
Akshat Kumar | 23599ca | 2012-10-05 16:23:30 -0400 | [diff] [blame] | 131 | |
Akshat Kumar | c74f3c4 | 2013-01-30 02:53:56 -0800 | [diff] [blame] | 132 | // void sigtramp(void *ureg, int8 *note) |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 133 | TEXT runtime·sigtramp(SB),NOSPLIT,$0 |
Akshat Kumar | c74f3c4 | 2013-01-30 02:53:56 -0800 | [diff] [blame] | 134 | get_tls(AX) |
| 135 | |
Russ Cox | 89f185f | 2014-06-26 11:54:39 -0400 | [diff] [blame] | 136 | // check that g exists |
| 137 | MOVL g(AX), BX |
Akshat Kumar | c74f3c4 | 2013-01-30 02:53:56 -0800 | [diff] [blame] | 138 | CMPL BX, $0 |
| 139 | JNE 3(PC) |
Shenghou Ma | 2f1ead7 | 2013-07-12 04:39:39 +0800 | [diff] [blame] | 140 | CALL runtime·badsignal2(SB) // will exit |
Akshat Kumar | c74f3c4 | 2013-01-30 02:53:56 -0800 | [diff] [blame] | 141 | RET |
| 142 | |
| 143 | // save args |
| 144 | MOVL ureg+4(SP), CX |
| 145 | MOVL note+8(SP), DX |
| 146 | |
| 147 | // change stack |
Russ Cox | 89f185f | 2014-06-26 11:54:39 -0400 | [diff] [blame] | 148 | MOVL g_m(BX), BX |
Akshat Kumar | c74f3c4 | 2013-01-30 02:53:56 -0800 | [diff] [blame] | 149 | 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 Kumar | 23599ca | 2012-10-05 16:23:30 -0400 | [diff] [blame] | 181 | // Only used by the 64-bit runtime. |
Keith Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 182 | TEXT runtime·setfpmasks(SB),NOSPLIT,$0 |
Akshat Kumar | 23599ca | 2012-10-05 16:23:30 -0400 | [diff] [blame] | 183 | RET |
Akshat Kumar | a566dea | 2013-03-08 00:54:44 +0100 | [diff] [blame] | 184 | |
| 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 Randall | 0273dc1 | 2013-08-07 12:20:05 -0700 | [diff] [blame] | 193 | TEXT runtime·errstr(SB),NOSPLIT,$0 |
Akshat Kumar | a566dea | 2013-03-08 00:54:44 +0100 | [diff] [blame] | 194 | get_tls(AX) |
Russ Cox | 89f185f | 2014-06-26 11:54:39 -0400 | [diff] [blame] | 195 | MOVL g(AX), BX |
| 196 | MOVL g_m(BX), BX |
Akshat Kumar | a566dea | 2013-03-08 00:54:44 +0100 | [diff] [blame] | 197 | MOVL m_errstr(BX), CX |
| 198 | MOVL CX, 4(SP) |
| 199 | MOVL $ERRMAX, 8(SP) |
| 200 | MOVL $41, AX |
| 201 | INT $64 |
Akshat Kumar | ef7705f | 2013-03-09 05:39:15 +0100 | [diff] [blame] | 202 | |
| 203 | // syscall requires caller-save |
| 204 | MOVL 4(SP), CX |
| 205 | |
| 206 | // push the argument |
| 207 | PUSHL CX |
Akshat Kumar | a566dea | 2013-03-08 00:54:44 +0100 | [diff] [blame] | 208 | CALL runtime·findnull(SB) |
Akshat Kumar | ef7705f | 2013-03-09 05:39:15 +0100 | [diff] [blame] | 209 | POPL CX |
Akshat Kumar | a566dea | 2013-03-08 00:54:44 +0100 | [diff] [blame] | 210 | MOVL AX, 8(SP) |
| 211 | RET |