Commit 0273dc13 authored by Keith Randall's avatar Keith Randall

runtime: convert .s textflags from numbers to symbolic constants.

Remove NOPROF/DUPOK from everything.

Edits done with a script, except pclinetest.asm which depended
on the DUPOK flag on main().

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/12613044
parent a08b1d13
TEXT linefrompc(SB),7,$0 // Each byte stores its line delta TEXT linefrompc(SB),4,$0 // Each byte stores its line delta
BYTE $2; BYTE $2;
BYTE $1; BYTE $1;
BYTE $1; BYTE $0; BYTE $1; BYTE $0;
...@@ -28,7 +28,7 @@ BYTE $2; ...@@ -28,7 +28,7 @@ BYTE $2;
BYTE $2; BYTE $2;
BYTE $255; BYTE $255;
TEXT pcfromline(SB),7,$0 // Each record stores its line delta, then n, then n more bytes TEXT pcfromline(SB),4,$0 // Each record stores its line delta, then n, then n more bytes
BYTE $32; BYTE $0; BYTE $32; BYTE $0;
BYTE $1; BYTE $1; BYTE $0; BYTE $1; BYTE $1; BYTE $0;
BYTE $1; BYTE $0; BYTE $1; BYTE $0;
...@@ -47,14 +47,12 @@ BYTE $3; BYTE $3; BYTE $0; BYTE $0; BYTE $0; ...@@ -47,14 +47,12 @@ BYTE $3; BYTE $3; BYTE $0; BYTE $0; BYTE $0;
BYTE $4; BYTE $3; BYTE $0; BYTE $0; BYTE $0; BYTE $4; BYTE $3; BYTE $0; BYTE $0; BYTE $0;
BYTE $255; BYTE $255;
TEXT main(SB),7,$0
// Prevent GC of our test symbols
CALL linefrompc(SB)
CALL pcfromline(SB)
// Keep the linker happy // Keep the linker happy
TEXT main·main(SB),7,$0 TEXT main·main(SB),4,$0
RET RET
TEXT main·init(SB),7,$0 TEXT main·init(SB),4,$0
// Prevent GC of our test symbols
CALL linefrompc(SB)
CALL pcfromline(SB)
RET RET
...@@ -23,12 +23,14 @@ ...@@ -23,12 +23,14 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
#include "../../cmd/ld/textflag.h"
TO = 8 TO = 8
TOE = 11 TOE = 11
N = 12 N = 12
TMP = 12 /* N and TMP don't overlap */ TMP = 12 /* N and TMP don't overlap */
TEXT runtime·memclr(SB),7,$0-8 TEXT runtime·memclr(SB),NOSPLIT,$0-8
MOVW ptr+0(FP), R(TO) MOVW ptr+0(FP), R(TO)
MOVW n+4(FP), R(N) MOVW n+4(FP), R(N)
MOVW $0, R(0) MOVW $0, R(0)
......
...@@ -23,7 +23,9 @@ ...@@ -23,7 +23,9 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
TEXT runtime·memmove(SB), 7, $0-12 #include "../../cmd/ld/textflag.h"
TEXT runtime·memmove(SB), NOSPLIT, $0-12
MOVL to+0(FP), DI MOVL to+0(FP), DI
MOVL fr+4(FP), SI MOVL fr+4(FP), SI
MOVL n+8(FP), BX MOVL n+8(FP), BX
......
...@@ -23,8 +23,10 @@ ...@@ -23,8 +23,10 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
#include "../../cmd/ld/textflag.h"
// void runtime·memmove(void*, void*, uintptr) // void runtime·memmove(void*, void*, uintptr)
TEXT runtime·memmove(SB), 7, $0-24 TEXT runtime·memmove(SB), NOSPLIT, $0-24
MOVQ to+0(FP), DI MOVQ to+0(FP), DI
MOVQ fr+8(FP), SI MOVQ fr+8(FP), SI
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
#include "../../cmd/ld/textflag.h"
// TE or TS are spilled to the stack during bulk register moves. // TE or TS are spilled to the stack during bulk register moves.
TS = 0 TS = 0
TE = 8 TE = 8
...@@ -56,7 +58,7 @@ FR2 = 4 ...@@ -56,7 +58,7 @@ FR2 = 4
FW3 = 4 FW3 = 4
FR3 = 8 /* shared with TE */ FR3 = 8 /* shared with TE */
TEXT runtime·memmove(SB), 7, $4-12 TEXT runtime·memmove(SB), NOSPLIT, $4-12
_memmove: _memmove:
MOVW to+0(FP), R(TS) MOVW to+0(FP), R(TS)
MOVW from+4(FP), R(FROM) MOVW from+4(FP), R(FROM)
......
...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
// +build race // +build race
#include "../../cmd/ld/textflag.h"
// func runtime·racefuncenter(pc uintptr) // func runtime·racefuncenter(pc uintptr)
TEXT runtime·racefuncenter(SB), 7, $16-8 TEXT runtime·racefuncenter(SB), NOSPLIT, $16-8
MOVQ DX, saved-8(SP) // save function entry context (for closures) MOVQ DX, saved-8(SP) // save function entry context (for closures)
MOVQ pc+0(FP), DX MOVQ pc+0(FP), DX
MOVQ DX, arg-16(SP) MOVQ DX, arg-16(SP)
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_darwin(SB),7,$8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_darwin(SB),NOSPLIT,$8
MOVL 8(SP), AX MOVL 8(SP), AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL AX, 0(SP) MOVL AX, 0(SP)
...@@ -10,5 +12,5 @@ TEXT _rt0_386_darwin(SB),7,$8 ...@@ -10,5 +12,5 @@ TEXT _rt0_386_darwin(SB),7,$8
CALL main(SB) CALL main(SB)
INT $3 INT $3
TEXT main(SB),7,$0 TEXT main(SB),NOSPLIT,$0
JMP _rt0_go(SB) JMP _rt0_go(SB)
...@@ -2,12 +2,14 @@ ...@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_amd64_darwin(SB),7,$-8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_darwin(SB),NOSPLIT,$-8
LEAQ 8(SP), SI // argv LEAQ 8(SP), SI // argv
MOVQ 0(SP), DI // argc MOVQ 0(SP), DI // argc
MOVQ $main(SB), AX MOVQ $main(SB), AX
JMP AX JMP AX
TEXT main(SB),7,$-8 TEXT main(SB),NOSPLIT,$-8
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
JMP AX JMP AX
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_freebsd(SB),7,$8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_freebsd(SB),NOSPLIT,$8
MOVL 8(SP), AX MOVL 8(SP), AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL AX, 0(SP) MOVL AX, 0(SP)
...@@ -10,5 +12,5 @@ TEXT _rt0_386_freebsd(SB),7,$8 ...@@ -10,5 +12,5 @@ TEXT _rt0_386_freebsd(SB),7,$8
CALL main(SB) CALL main(SB)
INT $3 INT $3
TEXT main(SB),7,$0 TEXT main(SB),NOSPLIT,$0
JMP _rt0_go(SB) JMP _rt0_go(SB)
...@@ -2,12 +2,14 @@ ...@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_amd64_freebsd(SB),7,$-8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_freebsd(SB),NOSPLIT,$-8
LEAQ 8(DI), SI // argv LEAQ 8(DI), SI // argv
MOVQ 0(DI), DI // argc MOVQ 0(DI), DI // argc
MOVQ $main(SB), AX MOVQ $main(SB), AX
JMP AX JMP AX
TEXT main(SB),7,$-8 TEXT main(SB),NOSPLIT,$-8
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
JMP AX JMP AX
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "../../cmd/ld/textflag.h"
// FreeBSD and Linux use the same linkage to main // FreeBSD and Linux use the same linkage to main
TEXT _rt0_arm_freebsd(SB),7,$-4 TEXT _rt0_arm_freebsd(SB),NOSPLIT,$-4
B _rt0_go(SB) B _rt0_go(SB)
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_linux(SB),7,$8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_linux(SB),NOSPLIT,$8
MOVL 8(SP), AX MOVL 8(SP), AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL AX, 0(SP) MOVL AX, 0(SP)
...@@ -11,10 +13,10 @@ TEXT _rt0_386_linux(SB),7,$8 ...@@ -11,10 +13,10 @@ TEXT _rt0_386_linux(SB),7,$8
CALL main(SB) CALL main(SB)
INT $3 INT $3
TEXT main(SB),7,$0 TEXT main(SB),NOSPLIT,$0
JMP _rt0_go(SB) JMP _rt0_go(SB)
TEXT _fallback_vdso(SB),7,$0 TEXT _fallback_vdso(SB),NOSPLIT,$0
INT $0x80 INT $0x80
RET RET
......
...@@ -2,12 +2,14 @@ ...@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_amd64_linux(SB),7,$-8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8
LEAQ 8(SP), SI // argv LEAQ 8(SP), SI // argv
MOVQ 0(SP), DI // argc MOVQ 0(SP), DI // argc
MOVQ $main(SB), AX MOVQ $main(SB), AX
JMP AX JMP AX
TEXT main(SB),7,$-8 TEXT main(SB),NOSPLIT,$-8
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
JMP AX JMP AX
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_arm_linux(SB),7,$-4 #include "../../cmd/ld/textflag.h"
TEXT _rt0_arm_linux(SB),NOSPLIT,$-4
// We first need to detect the kernel ABI, and warn the user // We first need to detect the kernel ABI, and warn the user
// if the system only supports OABI // if the system only supports OABI
// The strategy here is to call some EABI syscall to see if // The strategy here is to call some EABI syscall to see if
...@@ -43,7 +45,7 @@ TEXT _rt0_arm_linux(SB),7,$-4 ...@@ -43,7 +45,7 @@ TEXT _rt0_arm_linux(SB),7,$-4
ADD $4, R13 ADD $4, R13
B _rt0_go(SB) B _rt0_go(SB)
TEXT bad_abi<>(SB),7,$-4 TEXT bad_abi<>(SB),NOSPLIT,$-4
// give diagnosis and exit // give diagnosis and exit
MOVW $2, R0 // stderr MOVW $2, R0 // stderr
MOVW $bad_abi_msg(SB), R1 // data MOVW $bad_abi_msg(SB), R1 // data
...@@ -64,7 +66,7 @@ DATA bad_abi_msg+0x28(SB)/4, $"nels" ...@@ -64,7 +66,7 @@ DATA bad_abi_msg+0x28(SB)/4, $"nels"
DATA bad_abi_msg+0x2c(SB)/1, $0xa DATA bad_abi_msg+0x2c(SB)/1, $0xa
GLOBL bad_abi_msg(SB), $45 GLOBL bad_abi_msg(SB), $45
TEXT oabi_syscall<>(SB),7,$-4 TEXT oabi_syscall<>(SB),NOSPLIT,$-4
ADD $1, PC, R4 ADD $1, PC, R4
WORD $0xe12fff14 //BX (R4) // enter thumb mode WORD $0xe12fff14 //BX (R4) // enter thumb mode
// TODO(minux): only supports little-endian CPUs // TODO(minux): only supports little-endian CPUs
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_netbsd(SB),7,$8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_netbsd(SB),NOSPLIT,$8
MOVL 8(SP), AX MOVL 8(SP), AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL AX, 0(SP) MOVL AX, 0(SP)
...@@ -10,5 +12,5 @@ TEXT _rt0_386_netbsd(SB),7,$8 ...@@ -10,5 +12,5 @@ TEXT _rt0_386_netbsd(SB),7,$8
CALL main(SB) CALL main(SB)
INT $3 INT $3
TEXT main(SB),7,$0 TEXT main(SB),NOSPLIT,$0
JMP _rt0_go(SB) JMP _rt0_go(SB)
...@@ -2,12 +2,14 @@ ...@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_amd64_netbsd(SB),7,$-8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_netbsd(SB),NOSPLIT,$-8
LEAQ 8(SP), SI // argv LEAQ 8(SP), SI // argv
MOVQ 0(SP), DI // argc MOVQ 0(SP), DI // argc
MOVQ $main(SB), AX MOVQ $main(SB), AX
JMP AX JMP AX
TEXT main(SB),7,$-8 TEXT main(SB),NOSPLIT,$-8
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
JMP AX JMP AX
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "../../cmd/ld/textflag.h"
// FreeBSD/NetBSD and Linux use the same linkage to main // FreeBSD/NetBSD and Linux use the same linkage to main
TEXT _rt0_arm_netbsd(SB),7,$-4 TEXT _rt0_arm_netbsd(SB),NOSPLIT,$-4
B _rt0_go(SB) B _rt0_go(SB)
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_openbsd(SB),7,$8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_openbsd(SB),NOSPLIT,$8
MOVL 8(SP), AX MOVL 8(SP), AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL AX, 0(SP) MOVL AX, 0(SP)
...@@ -10,5 +12,5 @@ TEXT _rt0_386_openbsd(SB),7,$8 ...@@ -10,5 +12,5 @@ TEXT _rt0_386_openbsd(SB),7,$8
CALL main(SB) CALL main(SB)
INT $3 INT $3
TEXT main(SB),7,$0 TEXT main(SB),NOSPLIT,$0
JMP _rt0_go(SB) JMP _rt0_go(SB)
...@@ -2,12 +2,14 @@ ...@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_amd64_openbsd(SB),7,$-8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_openbsd(SB),NOSPLIT,$-8
LEAQ 8(SP), SI // argv LEAQ 8(SP), SI // argv
MOVQ 0(SP), DI // argc MOVQ 0(SP), DI // argc
MOVQ $main(SB), AX MOVQ $main(SB), AX
JMP AX JMP AX
TEXT main(SB),7,$-8 TEXT main(SB),NOSPLIT,$-8
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
JMP AX JMP AX
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_plan9(SB),7, $0 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_plan9(SB),NOSPLIT, $0
MOVL AX, _tos(SB) MOVL AX, _tos(SB)
// move arguments down to make room for // move arguments down to make room for
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_amd64_plan9(SB),7,$-8 #include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_plan9(SB),NOSPLIT,$-8
LEAQ 8(SP), SI // argv LEAQ 8(SP), SI // argv
MOVQ 0(SP), DI // argc MOVQ 0(SP), DI // argc
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
TEXT _rt0_386_windows(SB),7,$12 #include "../../cmd/ld/textflag.h"
TEXT _rt0_386_windows(SB),NOSPLIT,$12
MOVL 12(SP), AX MOVL 12(SP), AX
LEAL 16(SP), BX LEAL 16(SP), BX
MOVL AX, 4(SP) MOVL AX, 4(SP)
...@@ -10,7 +12,7 @@ TEXT _rt0_386_windows(SB),7,$12 ...@@ -10,7 +12,7 @@ TEXT _rt0_386_windows(SB),7,$12
MOVL $-1, 0(SP) // return PC for main MOVL $-1, 0(SP) // return PC for main
JMP main(SB) JMP main(SB)
TEXT main(SB),7,$0 TEXT main(SB),NOSPLIT,$0
JMP _rt0_go(SB) JMP _rt0_go(SB)
......
...@@ -3,14 +3,15 @@ ...@@ -3,14 +3,15 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
TEXT _rt0_amd64_windows(SB),7,$-8 TEXT _rt0_amd64_windows(SB),NOSPLIT,$-8
LEAQ 8(SP), SI // argv LEAQ 8(SP), SI // argv
MOVQ 0(SP), DI // argc MOVQ 0(SP), DI // argc
MOVQ $main(SB), AX MOVQ $main(SB), AX
JMP AX JMP AX
TEXT main(SB),7,$-8 TEXT main(SB),NOSPLIT,$-8
MOVQ $_rt0_go(SB), AX MOVQ $_rt0_go(SB), AX
JMP AX JMP AX
......
...@@ -7,9 +7,10 @@ ...@@ -7,9 +7,10 @@
// or /usr/include/sys/syscall.h (on a Mac) for system call numbers. // or /usr/include/sys/syscall.h (on a Mac) for system call numbers.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$0 TEXT runtime·exit(SB),NOSPLIT,$0
MOVL $1, AX MOVL $1, AX
INT $0x80 INT $0x80
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
...@@ -17,34 +18,34 @@ TEXT runtime·exit(SB),7,$0 ...@@ -17,34 +18,34 @@ TEXT runtime·exit(SB),7,$0
// Exit this OS thread (like pthread_exit, which eventually // Exit this OS thread (like pthread_exit, which eventually
// calls __bsdthread_terminate). // calls __bsdthread_terminate).
TEXT runtime·exit1(SB),7,$0 TEXT runtime·exit1(SB),NOSPLIT,$0
MOVL $361, AX MOVL $361, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$0 TEXT runtime·open(SB),NOSPLIT,$0
MOVL $5, AX MOVL $5, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·close(SB),7,$0 TEXT runtime·close(SB),NOSPLIT,$0
MOVL $6, AX MOVL $6, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·read(SB),7,$0 TEXT runtime·read(SB),NOSPLIT,$0
MOVL $3, AX MOVL $3, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·write(SB),7,$0 TEXT runtime·write(SB),NOSPLIT,$0
MOVL $4, AX MOVL $4, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·raise(SB),7,$16 TEXT runtime·raise(SB),NOSPLIT,$16
MOVL $20, AX // getpid MOVL $20, AX // getpid
INT $0x80 INT $0x80
MOVL AX, 4(SP) // pid MOVL AX, 4(SP) // pid
...@@ -55,25 +56,25 @@ TEXT runtime·raise(SB),7,$16 ...@@ -55,25 +56,25 @@ TEXT runtime·raise(SB),7,$16
INT $0x80 INT $0x80
RET RET
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVL $197, AX MOVL $197, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVL $75, AX MOVL $75, AX
INT $0x80 INT $0x80
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVL $73, AX MOVL $73, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·setitimer(SB),7,$0 TEXT runtime·setitimer(SB),NOSPLIT,$0
MOVL $83, AX MOVL $83, AX
INT $0x80 INT $0x80
RET RET
...@@ -94,7 +95,7 @@ TEXT runtime·setitimer(SB),7,$0 ...@@ -94,7 +95,7 @@ TEXT runtime·setitimer(SB),7,$0
// 64-bit unix nanoseconds returned in DX:AX. // 64-bit unix nanoseconds returned in DX:AX.
// I'd much rather write this in C but we need // I'd much rather write this in C but we need
// assembly for the 96-bit multiply and RDTSC. // assembly for the 96-bit multiply and RDTSC.
TEXT runtime·now(SB),7,$40 TEXT runtime·now(SB),NOSPLIT,$40
MOVL $0xffff0000, BP /* comm page base */ MOVL $0xffff0000, BP /* comm page base */
// Test for slow CPU. If so, the math is completely // Test for slow CPU. If so, the math is completely
...@@ -192,7 +193,7 @@ systime: ...@@ -192,7 +193,7 @@ systime:
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB),7,$0 TEXT time·now(SB),NOSPLIT,$0
CALL runtime·now(SB) CALL runtime·now(SB)
MOVL $1000000000, CX MOVL $1000000000, CX
DIVL CX DIVL CX
...@@ -203,21 +204,21 @@ TEXT time·now(SB),7,$0 ...@@ -203,21 +204,21 @@ TEXT time·now(SB),7,$0
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB),7,$0 TEXT runtime·nanotime(SB),NOSPLIT,$0
CALL runtime·now(SB) CALL runtime·now(SB)
MOVL ret+0(FP), DI MOVL ret+0(FP), DI
MOVL AX, 0(DI) MOVL AX, 0(DI)
MOVL DX, 4(DI) MOVL DX, 4(DI)
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVL $329, AX // pthread_sigmask (on OS X, sigprocmask==entire process) MOVL $329, AX // pthread_sigmask (on OS X, sigprocmask==entire process)
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaction(SB),7,$0 TEXT runtime·sigaction(SB),NOSPLIT,$0
MOVL $46, AX MOVL $46, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -232,7 +233,7 @@ TEXT runtime·sigaction(SB),7,$0 ...@@ -232,7 +233,7 @@ TEXT runtime·sigaction(SB),7,$0
// 12(FP) siginfo style // 12(FP) siginfo style
// 16(FP) siginfo // 16(FP) siginfo
// 20(FP) context // 20(FP) context
TEXT runtime·sigtramp(SB),7,$40 TEXT runtime·sigtramp(SB),NOSPLIT,$40
get_tls(CX) get_tls(CX)
// check that m exists // check that m exists
...@@ -282,14 +283,14 @@ sigtramp_ret: ...@@ -282,14 +283,14 @@ sigtramp_ret:
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaltstack(SB),7,$0 TEXT runtime·sigaltstack(SB),NOSPLIT,$0
MOVL $53, AX MOVL $53, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·usleep(SB),7,$32 TEXT runtime·usleep(SB),NOSPLIT,$32
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -311,7 +312,7 @@ TEXT runtime·usleep(SB),7,$32 ...@@ -311,7 +312,7 @@ TEXT runtime·usleep(SB),7,$32
// void bsdthread_create(void *stk, M *mp, G *gp, void (*fn)(void)) // void bsdthread_create(void *stk, M *mp, G *gp, void (*fn)(void))
// System call args are: func arg stack pthread flags. // System call args are: func arg stack pthread flags.
TEXT runtime·bsdthread_create(SB),7,$32 TEXT runtime·bsdthread_create(SB),NOSPLIT,$32
MOVL $360, AX MOVL $360, AX
// 0(SP) is where the caller PC would be; kernel skips it // 0(SP) is where the caller PC would be; kernel skips it
MOVL func+12(FP), BX MOVL func+12(FP), BX
...@@ -340,7 +341,7 @@ TEXT runtime·bsdthread_create(SB),7,$32 ...@@ -340,7 +341,7 @@ TEXT runtime·bsdthread_create(SB),7,$32
// DI = stack top // DI = stack top
// SI = flags (= 0x1000000) // SI = flags (= 0x1000000)
// SP = stack - C_32_STK_ALIGN // SP = stack - C_32_STK_ALIGN
TEXT runtime·bsdthread_start(SB),7,$0 TEXT runtime·bsdthread_start(SB),NOSPLIT,$0
// set up ldt 7+id to point at m->tls. // set up ldt 7+id to point at m->tls.
// m->tls is at m+40. newosproc left // m->tls is at m+40. newosproc left
// the m->id in tls[0]. // the m->id in tls[0].
...@@ -371,7 +372,7 @@ TEXT runtime·bsdthread_start(SB),7,$0 ...@@ -371,7 +372,7 @@ TEXT runtime·bsdthread_start(SB),7,$0
// void bsdthread_register(void) // void bsdthread_register(void)
// registers callbacks for threadstart (see bsdthread_create above // registers callbacks for threadstart (see bsdthread_create above
// and wqthread and pthsize (not used). returns 0 on success. // and wqthread and pthsize (not used). returns 0 on success.
TEXT runtime·bsdthread_register(SB),7,$40 TEXT runtime·bsdthread_register(SB),NOSPLIT,$40
MOVL $366, AX MOVL $366, AX
// 0(SP) is where kernel expects caller PC; ignored // 0(SP) is where kernel expects caller PC; ignored
MOVL $runtime·bsdthread_start(SB), 4(SP) // threadstart MOVL $runtime·bsdthread_start(SB), 4(SP) // threadstart
...@@ -398,23 +399,23 @@ TEXT runtime·bsdthread_register(SB),7,$40 ...@@ -398,23 +399,23 @@ TEXT runtime·bsdthread_register(SB),7,$40
// in the high 16 bits that seems to be the // in the high 16 bits that seems to be the
// argument count in bytes but is not always. // argument count in bytes but is not always.
// INT $0x80 works fine for those. // INT $0x80 works fine for those.
TEXT runtime·sysenter(SB),7,$0 TEXT runtime·sysenter(SB),NOSPLIT,$0
POPL DX POPL DX
MOVL SP, CX MOVL SP, CX
BYTE $0x0F; BYTE $0x34; // SYSENTER BYTE $0x0F; BYTE $0x34; // SYSENTER
// returns to DX with SP set to CX // returns to DX with SP set to CX
TEXT runtime·mach_msg_trap(SB),7,$0 TEXT runtime·mach_msg_trap(SB),NOSPLIT,$0
MOVL $-31, AX MOVL $-31, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
TEXT runtime·mach_reply_port(SB),7,$0 TEXT runtime·mach_reply_port(SB),NOSPLIT,$0
MOVL $-26, AX MOVL $-26, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
TEXT runtime·mach_task_self(SB),7,$0 TEXT runtime·mach_task_self(SB),NOSPLIT,$0
MOVL $-28, AX MOVL $-28, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
...@@ -423,32 +424,32 @@ TEXT runtime·mach_task_self(SB),7,$0 ...@@ -423,32 +424,32 @@ TEXT runtime·mach_task_self(SB),7,$0
// instead of requiring the use of RPC. // instead of requiring the use of RPC.
// uint32 mach_semaphore_wait(uint32) // uint32 mach_semaphore_wait(uint32)
TEXT runtime·mach_semaphore_wait(SB),7,$0 TEXT runtime·mach_semaphore_wait(SB),NOSPLIT,$0
MOVL $-36, AX MOVL $-36, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
// uint32 mach_semaphore_timedwait(uint32, uint32, uint32) // uint32 mach_semaphore_timedwait(uint32, uint32, uint32)
TEXT runtime·mach_semaphore_timedwait(SB),7,$0 TEXT runtime·mach_semaphore_timedwait(SB),NOSPLIT,$0
MOVL $-38, AX MOVL $-38, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
// uint32 mach_semaphore_signal(uint32) // uint32 mach_semaphore_signal(uint32)
TEXT runtime·mach_semaphore_signal(SB),7,$0 TEXT runtime·mach_semaphore_signal(SB),NOSPLIT,$0
MOVL $-33, AX MOVL $-33, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
// uint32 mach_semaphore_signal_all(uint32) // uint32 mach_semaphore_signal_all(uint32)
TEXT runtime·mach_semaphore_signal_all(SB),7,$0 TEXT runtime·mach_semaphore_signal_all(SB),NOSPLIT,$0
MOVL $-34, AX MOVL $-34, AX
CALL runtime·sysenter(SB) CALL runtime·sysenter(SB)
RET RET
// setldt(int entry, int address, int limit) // setldt(int entry, int address, int limit)
// entry and limit are ignored. // entry and limit are ignored.
TEXT runtime·setldt(SB),7,$32 TEXT runtime·setldt(SB),NOSPLIT,$32
MOVL address+4(FP), BX // aka base MOVL address+4(FP), BX // aka base
/* /*
...@@ -483,7 +484,7 @@ TEXT runtime·setldt(SB),7,$32 ...@@ -483,7 +484,7 @@ TEXT runtime·setldt(SB),7,$32
MOVW GS, AX MOVW GS, AX
RET RET
TEXT runtime·sysctl(SB),7,$0 TEXT runtime·sysctl(SB),NOSPLIT,$0
MOVL $202, AX MOVL $202, AX
INT $0x80 INT $0x80
JAE 3(PC) JAE 3(PC)
...@@ -493,7 +494,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -493,7 +494,7 @@ TEXT runtime·sysctl(SB),7,$0
RET RET
// int32 runtime·kqueue(void); // int32 runtime·kqueue(void);
TEXT runtime·kqueue(SB),7,$0 TEXT runtime·kqueue(SB),NOSPLIT,$0
MOVL $362, AX MOVL $362, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -501,7 +502,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -501,7 +502,7 @@ TEXT runtime·kqueue(SB),7,$0
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
TEXT runtime·kevent(SB),7,$0 TEXT runtime·kevent(SB),NOSPLIT,$0
MOVL $363, AX MOVL $363, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -509,7 +510,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -509,7 +510,7 @@ TEXT runtime·kevent(SB),7,$0
RET RET
// int32 runtime·closeonexec(int32 fd); // int32 runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$32 TEXT runtime·closeonexec(SB),NOSPLIT,$32
MOVL $92, AX // fcntl MOVL $92, AX // fcntl
// 0(SP) is where the caller PC would be; kernel skips it // 0(SP) is where the caller PC would be; kernel skips it
MOVL fd+0(FP), BX MOVL fd+0(FP), BX
......
...@@ -12,9 +12,10 @@ ...@@ -12,9 +12,10 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$0 TEXT runtime·exit(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 exit status MOVL 8(SP), DI // arg 1 exit status
MOVL $(0x2000000+1), AX // syscall entry MOVL $(0x2000000+1), AX // syscall entry
SYSCALL SYSCALL
...@@ -23,14 +24,14 @@ TEXT runtime·exit(SB),7,$0 ...@@ -23,14 +24,14 @@ TEXT runtime·exit(SB),7,$0
// Exit this OS thread (like pthread_exit, which eventually // Exit this OS thread (like pthread_exit, which eventually
// calls __bsdthread_terminate). // calls __bsdthread_terminate).
TEXT runtime·exit1(SB),7,$0 TEXT runtime·exit1(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 exit status MOVL 8(SP), DI // arg 1 exit status
MOVL $(0x2000000+361), AX // syscall entry MOVL $(0x2000000+361), AX // syscall entry
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$0 TEXT runtime·open(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 pathname MOVQ 8(SP), DI // arg 1 pathname
MOVL 16(SP), SI // arg 2 flags MOVL 16(SP), SI // arg 2 flags
MOVL 20(SP), DX // arg 3 mode MOVL 20(SP), DX // arg 3 mode
...@@ -38,13 +39,13 @@ TEXT runtime·open(SB),7,$0 ...@@ -38,13 +39,13 @@ TEXT runtime·open(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·close(SB),7,$0 TEXT runtime·close(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVL $(0x2000000+6), AX // syscall entry MOVL $(0x2000000+6), AX // syscall entry
SYSCALL SYSCALL
RET RET
TEXT runtime·read(SB),7,$0 TEXT runtime·read(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVQ 16(SP), SI // arg 2 buf MOVQ 16(SP), SI // arg 2 buf
MOVL 24(SP), DX // arg 3 count MOVL 24(SP), DX // arg 3 count
...@@ -52,7 +53,7 @@ TEXT runtime·read(SB),7,$0 ...@@ -52,7 +53,7 @@ TEXT runtime·read(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·write(SB),7,$0 TEXT runtime·write(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVQ 16(SP), SI // arg 2 buf MOVQ 16(SP), SI // arg 2 buf
MOVL 24(SP), DX // arg 3 count MOVL 24(SP), DX // arg 3 count
...@@ -60,7 +61,7 @@ TEXT runtime·write(SB),7,$0 ...@@ -60,7 +61,7 @@ TEXT runtime·write(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·raise(SB),7,$24 TEXT runtime·raise(SB),NOSPLIT,$24
MOVL $(0x2000000+20), AX // getpid MOVL $(0x2000000+20), AX // getpid
SYSCALL SYSCALL
MOVQ AX, DI // arg 1 - pid MOVQ AX, DI // arg 1 - pid
...@@ -70,7 +71,7 @@ TEXT runtime·raise(SB),7,$24 ...@@ -70,7 +71,7 @@ TEXT runtime·raise(SB),7,$24
SYSCALL SYSCALL
RET RET
TEXT runtime·setitimer(SB), 7, $0 TEXT runtime·setitimer(SB), NOSPLIT, $0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -78,7 +79,7 @@ TEXT runtime·setitimer(SB), 7, $0 ...@@ -78,7 +79,7 @@ TEXT runtime·setitimer(SB), 7, $0
SYSCALL SYSCALL
RET RET
TEXT runtime·madvise(SB), 7, $0 TEXT runtime·madvise(SB), NOSPLIT, $0
MOVQ 8(SP), DI // arg 1 addr MOVQ 8(SP), DI // arg 1 addr
MOVQ 16(SP), SI // arg 2 len MOVQ 16(SP), SI // arg 2 len
MOVL 24(SP), DX // arg 3 advice MOVL 24(SP), DX // arg 3 advice
...@@ -99,7 +100,7 @@ TEXT runtime·madvise(SB), 7, $0 ...@@ -99,7 +100,7 @@ TEXT runtime·madvise(SB), 7, $0
#define gtod_sec_base 0x78 #define gtod_sec_base 0x78
// int64 nanotime(void) // int64 nanotime(void)
TEXT runtime·nanotime(SB), 7, $32 TEXT runtime·nanotime(SB), NOSPLIT, $32
MOVQ $0x7fffffe00000, BP /* comm page base */ MOVQ $0x7fffffe00000, BP /* comm page base */
// Loop trying to take a consistent snapshot // Loop trying to take a consistent snapshot
// of the time parameters. // of the time parameters.
...@@ -149,7 +150,7 @@ systime: ...@@ -149,7 +150,7 @@ systime:
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB),7,$0 TEXT time·now(SB),NOSPLIT,$0
CALL runtime·nanotime(SB) CALL runtime·nanotime(SB)
// generated code for // generated code for
...@@ -167,7 +168,7 @@ TEXT time·now(SB),7,$0 ...@@ -167,7 +168,7 @@ TEXT time·now(SB),7,$0
MOVL CX, nsec+8(FP) MOVL CX, nsec+8(FP)
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -177,7 +178,7 @@ TEXT runtime·sigprocmask(SB),7,$0 ...@@ -177,7 +178,7 @@ TEXT runtime·sigprocmask(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaction(SB),7,$0 TEXT runtime·sigaction(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 sig MOVL 8(SP), DI // arg 1 sig
MOVQ 16(SP), SI // arg 2 act MOVQ 16(SP), SI // arg 2 act
MOVQ 24(SP), DX // arg 3 oact MOVQ 24(SP), DX // arg 3 oact
...@@ -189,7 +190,7 @@ TEXT runtime·sigaction(SB),7,$0 ...@@ -189,7 +190,7 @@ TEXT runtime·sigaction(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigtramp(SB),7,$64 TEXT runtime·sigtramp(SB),NOSPLIT,$64
get_tls(BX) get_tls(BX)
MOVQ R8, 32(SP) // save ucontext MOVQ R8, 32(SP) // save ucontext
...@@ -232,7 +233,7 @@ sigtramp_ret: ...@@ -232,7 +233,7 @@ sigtramp_ret:
SYSCALL SYSCALL
INT $3 // not reached INT $3 // not reached
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 addr MOVQ 8(SP), DI // arg 1 addr
MOVQ 16(SP), SI // arg 2 len MOVQ 16(SP), SI // arg 2 len
MOVL 24(SP), DX // arg 3 prot MOVL 24(SP), DX // arg 3 prot
...@@ -243,7 +244,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -243,7 +244,7 @@ TEXT runtime·mmap(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 addr MOVQ 8(SP), DI // arg 1 addr
MOVQ 16(SP), SI // arg 2 len MOVQ 16(SP), SI // arg 2 len
MOVL $(0x2000000+73), AX // syscall entry MOVL $(0x2000000+73), AX // syscall entry
...@@ -252,7 +253,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -252,7 +253,7 @@ TEXT runtime·munmap(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaltstack(SB),7,$0 TEXT runtime·sigaltstack(SB),NOSPLIT,$0
MOVQ new+8(SP), DI MOVQ new+8(SP), DI
MOVQ old+16(SP), SI MOVQ old+16(SP), SI
MOVQ $(0x2000000+53), AX MOVQ $(0x2000000+53), AX
...@@ -261,7 +262,7 @@ TEXT runtime·sigaltstack(SB),7,$0 ...@@ -261,7 +262,7 @@ TEXT runtime·sigaltstack(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -280,7 +281,7 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -280,7 +281,7 @@ TEXT runtime·usleep(SB),7,$16
RET RET
// void bsdthread_create(void *stk, M *mp, G *gp, void (*fn)(void)) // void bsdthread_create(void *stk, M *mp, G *gp, void (*fn)(void))
TEXT runtime·bsdthread_create(SB),7,$0 TEXT runtime·bsdthread_create(SB),NOSPLIT,$0
// Set up arguments to bsdthread_create system call. // Set up arguments to bsdthread_create system call.
// The ones in quotes pass through to the thread callback // The ones in quotes pass through to the thread callback
// uninterpreted, so we can put whatever we want there. // uninterpreted, so we can put whatever we want there.
...@@ -308,7 +309,7 @@ TEXT runtime·bsdthread_create(SB),7,$0 ...@@ -308,7 +309,7 @@ TEXT runtime·bsdthread_create(SB),7,$0
// R8 = stack // R8 = stack
// R9 = flags (= 0) // R9 = flags (= 0)
// SP = stack - C_64_REDZONE_LEN (= stack - 128) // SP = stack - C_64_REDZONE_LEN (= stack - 128)
TEXT runtime·bsdthread_start(SB),7,$0 TEXT runtime·bsdthread_start(SB),NOSPLIT,$0
MOVQ R8, SP // empirically, SP is very wrong but R8 is right MOVQ R8, SP // empirically, SP is very wrong but R8 is right
PUSHQ DX PUSHQ DX
...@@ -336,7 +337,7 @@ TEXT runtime·bsdthread_start(SB),7,$0 ...@@ -336,7 +337,7 @@ TEXT runtime·bsdthread_start(SB),7,$0
// void bsdthread_register(void) // void bsdthread_register(void)
// registers callbacks for threadstart (see bsdthread_create above // registers callbacks for threadstart (see bsdthread_create above
// and wqthread and pthsize (not used). returns 0 on success. // and wqthread and pthsize (not used). returns 0 on success.
TEXT runtime·bsdthread_register(SB),7,$0 TEXT runtime·bsdthread_register(SB),NOSPLIT,$0
MOVQ $runtime·bsdthread_start(SB), DI // threadstart MOVQ $runtime·bsdthread_start(SB), DI // threadstart
MOVQ $0, SI // wqthread, not used by us MOVQ $0, SI // wqthread, not used by us
MOVQ $0, DX // pthsize, not used by us MOVQ $0, DX // pthsize, not used by us
...@@ -354,7 +355,7 @@ TEXT runtime·bsdthread_register(SB),7,$0 ...@@ -354,7 +355,7 @@ TEXT runtime·bsdthread_register(SB),7,$0
// Mach system calls use 0x1000000 instead of the BSD's 0x2000000. // Mach system calls use 0x1000000 instead of the BSD's 0x2000000.
// uint32 mach_msg_trap(void*, uint32, uint32, uint32, uint32, uint32, uint32) // uint32 mach_msg_trap(void*, uint32, uint32, uint32, uint32, uint32, uint32)
TEXT runtime·mach_msg_trap(SB),7,$0 TEXT runtime·mach_msg_trap(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVL 16(SP), SI MOVL 16(SP), SI
MOVL 20(SP), DX MOVL 20(SP), DX
...@@ -368,17 +369,17 @@ TEXT runtime·mach_msg_trap(SB),7,$0 ...@@ -368,17 +369,17 @@ TEXT runtime·mach_msg_trap(SB),7,$0
POPQ R11 POPQ R11
RET RET
TEXT runtime·mach_task_self(SB),7,$0 TEXT runtime·mach_task_self(SB),NOSPLIT,$0
MOVL $(0x1000000+28), AX // task_self_trap MOVL $(0x1000000+28), AX // task_self_trap
SYSCALL SYSCALL
RET RET
TEXT runtime·mach_thread_self(SB),7,$0 TEXT runtime·mach_thread_self(SB),NOSPLIT,$0
MOVL $(0x1000000+27), AX // thread_self_trap MOVL $(0x1000000+27), AX // thread_self_trap
SYSCALL SYSCALL
RET RET
TEXT runtime·mach_reply_port(SB),7,$0 TEXT runtime·mach_reply_port(SB),NOSPLIT,$0
MOVL $(0x1000000+26), AX // mach_reply_port MOVL $(0x1000000+26), AX // mach_reply_port
SYSCALL SYSCALL
RET RET
...@@ -387,14 +388,14 @@ TEXT runtime·mach_reply_port(SB),7,$0 ...@@ -387,14 +388,14 @@ TEXT runtime·mach_reply_port(SB),7,$0
// instead of requiring the use of RPC. // instead of requiring the use of RPC.
// uint32 mach_semaphore_wait(uint32) // uint32 mach_semaphore_wait(uint32)
TEXT runtime·mach_semaphore_wait(SB),7,$0 TEXT runtime·mach_semaphore_wait(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $(0x1000000+36), AX // semaphore_wait_trap MOVL $(0x1000000+36), AX // semaphore_wait_trap
SYSCALL SYSCALL
RET RET
// uint32 mach_semaphore_timedwait(uint32, uint32, uint32) // uint32 mach_semaphore_timedwait(uint32, uint32, uint32)
TEXT runtime·mach_semaphore_timedwait(SB),7,$0 TEXT runtime·mach_semaphore_timedwait(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL 12(SP), SI MOVL 12(SP), SI
MOVL 16(SP), DX MOVL 16(SP), DX
...@@ -403,21 +404,21 @@ TEXT runtime·mach_semaphore_timedwait(SB),7,$0 ...@@ -403,21 +404,21 @@ TEXT runtime·mach_semaphore_timedwait(SB),7,$0
RET RET
// uint32 mach_semaphore_signal(uint32) // uint32 mach_semaphore_signal(uint32)
TEXT runtime·mach_semaphore_signal(SB),7,$0 TEXT runtime·mach_semaphore_signal(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $(0x1000000+33), AX // semaphore_signal_trap MOVL $(0x1000000+33), AX // semaphore_signal_trap
SYSCALL SYSCALL
RET RET
// uint32 mach_semaphore_signal_all(uint32) // uint32 mach_semaphore_signal_all(uint32)
TEXT runtime·mach_semaphore_signal_all(SB),7,$0 TEXT runtime·mach_semaphore_signal_all(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $(0x1000000+34), AX // semaphore_signal_all_trap MOVL $(0x1000000+34), AX // semaphore_signal_all_trap
SYSCALL SYSCALL
RET RET
// set tls base to DI // set tls base to DI
TEXT runtime·settls(SB),7,$32 TEXT runtime·settls(SB),NOSPLIT,$32
/* /*
* Same as in sys_darwin_386.s:/ugliness, different constant. * Same as in sys_darwin_386.s:/ugliness, different constant.
* See cgo/gcc_darwin_amd64.c for the derivation * See cgo/gcc_darwin_amd64.c for the derivation
...@@ -429,7 +430,7 @@ TEXT runtime·settls(SB),7,$32 ...@@ -429,7 +430,7 @@ TEXT runtime·settls(SB),7,$32
SYSCALL SYSCALL
RET RET
TEXT runtime·sysctl(SB),7,$0 TEXT runtime·sysctl(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVL 16(SP), SI MOVL 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -445,7 +446,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -445,7 +446,7 @@ TEXT runtime·sysctl(SB),7,$0
RET RET
// int32 runtime·kqueue(void); // int32 runtime·kqueue(void);
TEXT runtime·kqueue(SB),7,$0 TEXT runtime·kqueue(SB),NOSPLIT,$0
MOVQ $0, DI MOVQ $0, DI
MOVQ $0, SI MOVQ $0, SI
MOVQ $0, DX MOVQ $0, DX
...@@ -456,7 +457,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -456,7 +457,7 @@ TEXT runtime·kqueue(SB),7,$0
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
TEXT runtime·kevent(SB),7,$0 TEXT runtime·kevent(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL 24(SP), DX MOVL 24(SP), DX
...@@ -470,7 +471,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -470,7 +471,7 @@ TEXT runtime·kevent(SB),7,$0
RET RET
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$0 TEXT runtime·closeonexec(SB),NOSPLIT,$0
MOVL 8(SP), DI // fd MOVL 8(SP), DI // fd
MOVQ $2, SI // F_SETFD MOVQ $2, SI // F_SETFD
MOVQ $1, DX // FD_CLOEXEC MOVQ $1, DX // FD_CLOEXEC
......
...@@ -7,18 +7,19 @@ ...@@ -7,18 +7,19 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
TEXT runtime·sys_umtx_op(SB),7,$-4 TEXT runtime·sys_umtx_op(SB),NOSPLIT,$-4
MOVL $454, AX MOVL $454, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·thr_new(SB),7,$-4 TEXT runtime·thr_new(SB),NOSPLIT,$-4
MOVL $455, AX MOVL $455, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·thr_start(SB),7,$0 TEXT runtime·thr_start(SB),NOSPLIT,$0
MOVL mm+0(FP), AX MOVL mm+0(FP), AX
MOVL m_g0(AX), BX MOVL m_g0(AX), BX
LEAL m_tls(AX), BP LEAL m_tls(AX), BP
...@@ -43,45 +44,45 @@ TEXT runtime·thr_start(SB),7,$0 ...@@ -43,45 +44,45 @@ TEXT runtime·thr_start(SB),7,$0
MOVL 0, AX // crash (not reached) MOVL 0, AX // crash (not reached)
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-4 TEXT runtime·exit(SB),NOSPLIT,$-4
MOVL $1, AX MOVL $1, AX
INT $0x80 INT $0x80
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·exit1(SB),7,$-4 TEXT runtime·exit1(SB),NOSPLIT,$-4
MOVL $431, AX MOVL $431, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$-4 TEXT runtime·open(SB),NOSPLIT,$-4
MOVL $5, AX MOVL $5, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·close(SB),7,$-4 TEXT runtime·close(SB),NOSPLIT,$-4
MOVL $6, AX MOVL $6, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·read(SB),7,$-4 TEXT runtime·read(SB),NOSPLIT,$-4
MOVL $3, AX MOVL $3, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·write(SB),7,$-4 TEXT runtime·write(SB),NOSPLIT,$-4
MOVL $4, AX MOVL $4, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·getrlimit(SB),7,$-4 TEXT runtime·getrlimit(SB),NOSPLIT,$-4
MOVL $194, AX MOVL $194, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·raise(SB),7,$16 TEXT runtime·raise(SB),NOSPLIT,$16
// thr_self(&8(SP)) // thr_self(&8(SP))
LEAL 8(SP), AX LEAL 8(SP), AX
MOVL AX, 4(SP) MOVL AX, 4(SP)
...@@ -96,7 +97,7 @@ TEXT runtime·raise(SB),7,$16 ...@@ -96,7 +97,7 @@ TEXT runtime·raise(SB),7,$16
INT $0x80 INT $0x80
RET RET
TEXT runtime·mmap(SB),7,$32 TEXT runtime·mmap(SB),NOSPLIT,$32
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
...@@ -112,26 +113,26 @@ TEXT runtime·mmap(SB),7,$32 ...@@ -112,26 +113,26 @@ TEXT runtime·mmap(SB),7,$32
INT $0x80 INT $0x80
RET RET
TEXT runtime·munmap(SB),7,$-4 TEXT runtime·munmap(SB),NOSPLIT,$-4
MOVL $73, AX MOVL $73, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·madvise(SB),7,$-4 TEXT runtime·madvise(SB),NOSPLIT,$-4
MOVL $75, AX // madvise MOVL $75, AX // madvise
INT $0x80 INT $0x80
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·setitimer(SB), 7, $-4 TEXT runtime·setitimer(SB), NOSPLIT, $-4
MOVL $83, AX MOVL $83, AX
INT $0x80 INT $0x80
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVL $232, AX MOVL $232, AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL $0, 4(SP) MOVL $0, 4(SP)
...@@ -148,7 +149,7 @@ TEXT time·now(SB), 7, $32 ...@@ -148,7 +149,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB), 7, $32 TEXT runtime·nanotime(SB), NOSPLIT, $32
MOVL $232, AX MOVL $232, AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL $0, 4(SP) MOVL $0, 4(SP)
...@@ -170,14 +171,14 @@ TEXT runtime·nanotime(SB), 7, $32 ...@@ -170,14 +171,14 @@ TEXT runtime·nanotime(SB), 7, $32
RET RET
TEXT runtime·sigaction(SB),7,$-4 TEXT runtime·sigaction(SB),NOSPLIT,$-4
MOVL $416, AX MOVL $416, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigtramp(SB),7,$44 TEXT runtime·sigtramp(SB),NOSPLIT,$44
get_tls(CX) get_tls(CX)
// check that m exists // check that m exists
...@@ -224,14 +225,14 @@ sigtramp_ret: ...@@ -224,14 +225,14 @@ sigtramp_ret:
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigaltstack(SB),7,$0 TEXT runtime·sigaltstack(SB),NOSPLIT,$0
MOVL $53, AX MOVL $53, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·usleep(SB),7,$20 TEXT runtime·usleep(SB),NOSPLIT,$20
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -266,7 +267,7 @@ int i386_set_ldt(int, const union ldt_entry *, int); ...@@ -266,7 +267,7 @@ int i386_set_ldt(int, const union ldt_entry *, int);
*/ */
// setldt(int entry, int address, int limit) // setldt(int entry, int address, int limit)
TEXT runtime·setldt(SB),7,$32 TEXT runtime·setldt(SB),NOSPLIT,$32
MOVL address+4(FP), BX // aka base MOVL address+4(FP), BX // aka base
// see comment in sys_linux_386.s; freebsd is similar // see comment in sys_linux_386.s; freebsd is similar
ADDL $0x8, BX ADDL $0x8, BX
...@@ -299,7 +300,7 @@ TEXT runtime·setldt(SB),7,$32 ...@@ -299,7 +300,7 @@ TEXT runtime·setldt(SB),7,$32
MOVW AX, GS MOVW AX, GS
RET RET
TEXT runtime·i386_set_ldt(SB),7,$16 TEXT runtime·i386_set_ldt(SB),NOSPLIT,$16
LEAL args+0(FP), AX // 0(FP) == 4(SP) before SP got moved LEAL args+0(FP), AX // 0(FP) == 4(SP) before SP got moved
MOVL $0, 0(SP) // syscall gap MOVL $0, 0(SP) // syscall gap
MOVL $1, 4(SP) MOVL $1, 4(SP)
...@@ -311,7 +312,7 @@ TEXT runtime·i386_set_ldt(SB),7,$16 ...@@ -311,7 +312,7 @@ TEXT runtime·i386_set_ldt(SB),7,$16
INT $3 INT $3
RET RET
TEXT runtime·sysctl(SB),7,$28 TEXT runtime·sysctl(SB),NOSPLIT,$28
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
...@@ -329,12 +330,12 @@ TEXT runtime·sysctl(SB),7,$28 ...@@ -329,12 +330,12 @@ TEXT runtime·sysctl(SB),7,$28
MOVL $0, AX MOVL $0, AX
RET RET
TEXT runtime·osyield(SB),7,$-4 TEXT runtime·osyield(SB),NOSPLIT,$-4
MOVL $331, AX // sys_sched_yield MOVL $331, AX // sys_sched_yield
INT $0x80 INT $0x80
RET RET
TEXT runtime·sigprocmask(SB),7,$16 TEXT runtime·sigprocmask(SB),NOSPLIT,$16
MOVL $0, 0(SP) // syscall gap MOVL $0, 0(SP) // syscall gap
MOVL $3, 4(SP) // arg 1 - how (SIG_SETMASK) MOVL $3, 4(SP) // arg 1 - how (SIG_SETMASK)
MOVL args+0(FP), AX MOVL args+0(FP), AX
...@@ -348,7 +349,7 @@ TEXT runtime·sigprocmask(SB),7,$16 ...@@ -348,7 +349,7 @@ TEXT runtime·sigprocmask(SB),7,$16
RET RET
// int32 runtime·kqueue(void); // int32 runtime·kqueue(void);
TEXT runtime·kqueue(SB),7,$0 TEXT runtime·kqueue(SB),NOSPLIT,$0
MOVL $269, AX MOVL $269, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -356,7 +357,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -356,7 +357,7 @@ TEXT runtime·kqueue(SB),7,$0
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
TEXT runtime·kevent(SB),7,$0 TEXT runtime·kevent(SB),NOSPLIT,$0
MOVL $270, AX MOVL $270, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -364,7 +365,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -364,7 +365,7 @@ TEXT runtime·kevent(SB),7,$0
RET RET
// int32 runtime·closeonexec(int32 fd); // int32 runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$32 TEXT runtime·closeonexec(SB),NOSPLIT,$32
MOVL $92, AX // fcntl MOVL $92, AX // fcntl
// 0(SP) is where the caller PC would be; kernel skips it // 0(SP) is where the caller PC would be; kernel skips it
MOVL fd+0(FP), BX MOVL fd+0(FP), BX
......
...@@ -7,8 +7,9 @@ ...@@ -7,8 +7,9 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
TEXT runtime·sys_umtx_op(SB),7,$0 TEXT runtime·sys_umtx_op(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVL 16(SP), SI MOVL 16(SP), SI
MOVL 20(SP), DX MOVL 20(SP), DX
...@@ -18,14 +19,14 @@ TEXT runtime·sys_umtx_op(SB),7,$0 ...@@ -18,14 +19,14 @@ TEXT runtime·sys_umtx_op(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·thr_new(SB),7,$0 TEXT runtime·thr_new(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL $455, AX MOVL $455, AX
SYSCALL SYSCALL
RET RET
TEXT runtime·thr_start(SB),7,$0 TEXT runtime·thr_start(SB),NOSPLIT,$0
MOVQ DI, R13 // m MOVQ DI, R13 // m
// set up FS to point at m->tls // set up FS to point at m->tls
...@@ -44,21 +45,21 @@ TEXT runtime·thr_start(SB),7,$0 ...@@ -44,21 +45,21 @@ TEXT runtime·thr_start(SB),7,$0
MOVQ 0, AX // crash (not reached) MOVQ 0, AX // crash (not reached)
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-8 TEXT runtime·exit(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 exit status MOVL 8(SP), DI // arg 1 exit status
MOVL $1, AX MOVL $1, AX
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·exit1(SB),7,$-8 TEXT runtime·exit1(SB),NOSPLIT,$-8
MOVQ 8(SP), DI // arg 1 exit status MOVQ 8(SP), DI // arg 1 exit status
MOVL $431, AX MOVL $431, AX
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$-8 TEXT runtime·open(SB),NOSPLIT,$-8
MOVQ 8(SP), DI // arg 1 pathname MOVQ 8(SP), DI // arg 1 pathname
MOVL 16(SP), SI // arg 2 flags MOVL 16(SP), SI // arg 2 flags
MOVL 20(SP), DX // arg 3 mode MOVL 20(SP), DX // arg 3 mode
...@@ -66,13 +67,13 @@ TEXT runtime·open(SB),7,$-8 ...@@ -66,13 +67,13 @@ TEXT runtime·open(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·close(SB),7,$-8 TEXT runtime·close(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVL $6, AX MOVL $6, AX
SYSCALL SYSCALL
RET RET
TEXT runtime·read(SB),7,$-8 TEXT runtime·read(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVQ 16(SP), SI // arg 2 buf MOVQ 16(SP), SI // arg 2 buf
MOVL 24(SP), DX // arg 3 count MOVL 24(SP), DX // arg 3 count
...@@ -80,7 +81,7 @@ TEXT runtime·read(SB),7,$-8 ...@@ -80,7 +81,7 @@ TEXT runtime·read(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·write(SB),7,$-8 TEXT runtime·write(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVQ 16(SP), SI // arg 2 buf MOVQ 16(SP), SI // arg 2 buf
MOVL 24(SP), DX // arg 3 count MOVL 24(SP), DX // arg 3 count
...@@ -88,14 +89,14 @@ TEXT runtime·write(SB),7,$-8 ...@@ -88,14 +89,14 @@ TEXT runtime·write(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·getrlimit(SB),7,$-8 TEXT runtime·getrlimit(SB),NOSPLIT,$-8
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL $194, AX MOVL $194, AX
SYSCALL SYSCALL
RET RET
TEXT runtime·raise(SB),7,$16 TEXT runtime·raise(SB),NOSPLIT,$16
// thr_self(&8(SP)) // thr_self(&8(SP))
LEAQ 8(SP), DI // arg 1 &8(SP) LEAQ 8(SP), DI // arg 1 &8(SP)
MOVL $432, AX MOVL $432, AX
...@@ -107,7 +108,7 @@ TEXT runtime·raise(SB),7,$16 ...@@ -107,7 +108,7 @@ TEXT runtime·raise(SB),7,$16
SYSCALL SYSCALL
RET RET
TEXT runtime·setitimer(SB), 7, $-8 TEXT runtime·setitimer(SB), NOSPLIT, $-8
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -116,7 +117,7 @@ TEXT runtime·setitimer(SB), 7, $-8 ...@@ -116,7 +117,7 @@ TEXT runtime·setitimer(SB), 7, $-8
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVL $232, AX MOVL $232, AX
MOVQ $0, DI MOVQ $0, DI
LEAQ 8(SP), SI LEAQ 8(SP), SI
...@@ -129,7 +130,7 @@ TEXT time·now(SB), 7, $32 ...@@ -129,7 +130,7 @@ TEXT time·now(SB), 7, $32
MOVL DX, nsec+8(FP) MOVL DX, nsec+8(FP)
RET RET
TEXT runtime·nanotime(SB), 7, $32 TEXT runtime·nanotime(SB), NOSPLIT, $32
MOVL $232, AX MOVL $232, AX
MOVQ $0, DI MOVQ $0, DI
LEAQ 8(SP), SI LEAQ 8(SP), SI
...@@ -143,7 +144,7 @@ TEXT runtime·nanotime(SB), 7, $32 ...@@ -143,7 +144,7 @@ TEXT runtime·nanotime(SB), 7, $32
ADDQ DX, AX ADDQ DX, AX
RET RET
TEXT runtime·sigaction(SB),7,$-8 TEXT runtime·sigaction(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 sig MOVL 8(SP), DI // arg 1 sig
MOVQ 16(SP), SI // arg 2 act MOVQ 16(SP), SI // arg 2 act
MOVQ 24(SP), DX // arg 3 oact MOVQ 24(SP), DX // arg 3 oact
...@@ -153,7 +154,7 @@ TEXT runtime·sigaction(SB),7,$-8 ...@@ -153,7 +154,7 @@ TEXT runtime·sigaction(SB),7,$-8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigtramp(SB),7,$64 TEXT runtime·sigtramp(SB),NOSPLIT,$64
get_tls(BX) get_tls(BX)
// check that m exists // check that m exists
...@@ -186,7 +187,7 @@ TEXT runtime·sigtramp(SB),7,$64 ...@@ -186,7 +187,7 @@ TEXT runtime·sigtramp(SB),7,$64
MOVQ R10, g(BX) MOVQ R10, g(BX)
RET RET
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 addr MOVQ 8(SP), DI // arg 1 addr
MOVQ 16(SP), SI // arg 2 len MOVQ 16(SP), SI // arg 2 len
MOVL 24(SP), DX // arg 3 prot MOVL 24(SP), DX // arg 3 prot
...@@ -197,7 +198,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -197,7 +198,7 @@ TEXT runtime·mmap(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 addr MOVQ 8(SP), DI // arg 1 addr
MOVQ 16(SP), SI // arg 2 len MOVQ 16(SP), SI // arg 2 len
MOVL $73, AX MOVL $73, AX
...@@ -206,7 +207,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -206,7 +207,7 @@ TEXT runtime·munmap(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -215,7 +216,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -215,7 +216,7 @@ TEXT runtime·madvise(SB),7,$0
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVQ new+8(SP), DI MOVQ new+8(SP), DI
MOVQ old+16(SP), SI MOVQ old+16(SP), SI
MOVQ $53, AX MOVQ $53, AX
...@@ -224,7 +225,7 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -224,7 +225,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -241,7 +242,7 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -241,7 +242,7 @@ TEXT runtime·usleep(SB),7,$16
RET RET
// set tls base to DI // set tls base to DI
TEXT runtime·settls(SB),7,$8 TEXT runtime·settls(SB),NOSPLIT,$8
ADDQ $16, DI // adjust for ELF: wants to use -16(FS) and -8(FS) for g and m ADDQ $16, DI // adjust for ELF: wants to use -16(FS) and -8(FS) for g and m
MOVQ DI, 0(SP) MOVQ DI, 0(SP)
MOVQ SP, SI MOVQ SP, SI
...@@ -252,7 +253,7 @@ TEXT runtime·settls(SB),7,$8 ...@@ -252,7 +253,7 @@ TEXT runtime·settls(SB),7,$8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sysctl(SB),7,$0 TEXT runtime·sysctl(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - name MOVQ 8(SP), DI // arg 1 - name
MOVL 16(SP), SI // arg 2 - namelen MOVL 16(SP), SI // arg 2 - namelen
MOVQ 24(SP), DX // arg 3 - oldp MOVQ 24(SP), DX // arg 3 - oldp
...@@ -267,12 +268,12 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -267,12 +268,12 @@ TEXT runtime·sysctl(SB),7,$0
MOVL $0, AX MOVL $0, AX
RET RET
TEXT runtime·osyield(SB),7,$-4 TEXT runtime·osyield(SB),NOSPLIT,$-4
MOVL $331, AX // sys_sched_yield MOVL $331, AX // sys_sched_yield
SYSCALL SYSCALL
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVL $3, DI // arg 1 - how (SIG_SETMASK) MOVL $3, DI // arg 1 - how (SIG_SETMASK)
MOVQ 8(SP), SI // arg 2 - set MOVQ 8(SP), SI // arg 2 - set
MOVQ 16(SP), DX // arg 3 - oset MOVQ 16(SP), DX // arg 3 - oset
...@@ -283,7 +284,7 @@ TEXT runtime·sigprocmask(SB),7,$0 ...@@ -283,7 +284,7 @@ TEXT runtime·sigprocmask(SB),7,$0
RET RET
// int32 runtime·kqueue(void); // int32 runtime·kqueue(void);
TEXT runtime·kqueue(SB),7,$0 TEXT runtime·kqueue(SB),NOSPLIT,$0
MOVQ $0, DI MOVQ $0, DI
MOVQ $0, SI MOVQ $0, SI
MOVQ $0, DX MOVQ $0, DX
...@@ -294,7 +295,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -294,7 +295,7 @@ TEXT runtime·kqueue(SB),7,$0
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
TEXT runtime·kevent(SB),7,$0 TEXT runtime·kevent(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL 24(SP), DX MOVL 24(SP), DX
...@@ -308,7 +309,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -308,7 +309,7 @@ TEXT runtime·kevent(SB),7,$0
RET RET
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$0 TEXT runtime·closeonexec(SB),NOSPLIT,$0
MOVL 8(SP), DI // fd MOVL 8(SP), DI // fd
MOVQ $2, SI // F_SETFD MOVQ $2, SI // F_SETFD
MOVQ $1, DX // FD_CLOEXEC MOVQ $1, DX // FD_CLOEXEC
......
...@@ -7,8 +7,9 @@ ...@@ -7,8 +7,9 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
TEXT runtime·sys_umtx_op(SB),7,$0 TEXT runtime·sys_umtx_op(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -19,13 +20,13 @@ TEXT runtime·sys_umtx_op(SB),7,$0 ...@@ -19,13 +20,13 @@ TEXT runtime·sys_umtx_op(SB),7,$0
// BCS error // BCS error
RET RET
TEXT runtime·thr_new(SB),7,$0 TEXT runtime·thr_new(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
SWI $455 SWI $455
RET RET
TEXT runtime·thr_start(SB),7,$0 TEXT runtime·thr_start(SB),NOSPLIT,$0
MOVW R0, m MOVW R0, m
// set up g // set up g
...@@ -38,54 +39,54 @@ TEXT runtime·thr_start(SB),7,$0 ...@@ -38,54 +39,54 @@ TEXT runtime·thr_start(SB),7,$0
RET RET
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-8 TEXT runtime·exit(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 exit status MOVW 0(FP), R0 // arg 1 exit status
SWI $1 SWI $1
MOVW.CS $0, R8 // crash on syscall failure MOVW.CS $0, R8 // crash on syscall failure
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·exit1(SB),7,$-8 TEXT runtime·exit1(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 exit status MOVW 0(FP), R0 // arg 1 exit status
SWI $431 SWI $431
MOVW.CS $0, R8 // crash on syscall failure MOVW.CS $0, R8 // crash on syscall failure
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·open(SB),7,$-8 TEXT runtime·open(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 name MOVW 0(FP), R0 // arg 1 name
MOVW 4(FP), R1 // arg 2 mode MOVW 4(FP), R1 // arg 2 mode
MOVW 8(FP), R2 // arg 3 perm MOVW 8(FP), R2 // arg 3 perm
SWI $5 SWI $5
RET RET
TEXT runtime·read(SB),7,$-8 TEXT runtime·read(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 fd MOVW 0(FP), R0 // arg 1 fd
MOVW 4(FP), R1 // arg 2 buf MOVW 4(FP), R1 // arg 2 buf
MOVW 8(FP), R2 // arg 3 count MOVW 8(FP), R2 // arg 3 count
SWI $3 SWI $3
RET RET
TEXT runtime·write(SB),7,$-8 TEXT runtime·write(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 fd MOVW 0(FP), R0 // arg 1 fd
MOVW 4(FP), R1 // arg 2 buf MOVW 4(FP), R1 // arg 2 buf
MOVW 8(FP), R2 // arg 3 count MOVW 8(FP), R2 // arg 3 count
SWI $4 SWI $4
RET RET
TEXT runtime·close(SB),7,$-8 TEXT runtime·close(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 fd MOVW 0(FP), R0 // arg 1 fd
SWI $6 SWI $6
RET RET
TEXT runtime·getrlimit(SB),7,$-8 TEXT runtime·getrlimit(SB),NOSPLIT,$-8
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
SWI $194 SWI $194
RET RET
TEXT runtime·raise(SB),7,$8 TEXT runtime·raise(SB),NOSPLIT,$8
// thr_self(&4(R13)) // thr_self(&4(R13))
MOVW $4(R13), R0 // arg 1 &4(R13) MOVW $4(R13), R0 // arg 1 &4(R13)
SWI $432 SWI $432
...@@ -95,7 +96,7 @@ TEXT runtime·raise(SB),7,$8 ...@@ -95,7 +96,7 @@ TEXT runtime·raise(SB),7,$8
SWI $433 SWI $433
RET RET
TEXT runtime·setitimer(SB), 7, $-8 TEXT runtime·setitimer(SB), NOSPLIT, $-8
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -103,7 +104,7 @@ TEXT runtime·setitimer(SB), 7, $-8 ...@@ -103,7 +104,7 @@ TEXT runtime·setitimer(SB), 7, $-8
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVW $0, R0 // CLOCK_REALTIME MOVW $0, R0 // CLOCK_REALTIME
MOVW $8(R13), R1 MOVW $8(R13), R1
SWI $232 // clock_gettime SWI $232 // clock_gettime
...@@ -119,7 +120,7 @@ TEXT time·now(SB), 7, $32 ...@@ -119,7 +120,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB), 7, $32 TEXT runtime·nanotime(SB), NOSPLIT, $32
MOVW $0, R0 // CLOCK_REALTIME MOVW $0, R0 // CLOCK_REALTIME
MOVW $8(R13), R1 MOVW $8(R13), R1
SWI $232 // clock_gettime SWI $232 // clock_gettime
...@@ -139,7 +140,7 @@ TEXT runtime·nanotime(SB), 7, $32 ...@@ -139,7 +140,7 @@ TEXT runtime·nanotime(SB), 7, $32
MOVW R1, 4(R3) MOVW R1, 4(R3)
RET RET
TEXT runtime·sigaction(SB),7,$-8 TEXT runtime·sigaction(SB),NOSPLIT,$-8
MOVW 0(FP), R0 // arg 1 sig MOVW 0(FP), R0 // arg 1 sig
MOVW 4(FP), R1 // arg 2 act MOVW 4(FP), R1 // arg 2 act
MOVW 8(FP), R2 // arg 3 oact MOVW 8(FP), R2 // arg 3 oact
...@@ -148,7 +149,7 @@ TEXT runtime·sigaction(SB),7,$-8 ...@@ -148,7 +149,7 @@ TEXT runtime·sigaction(SB),7,$-8
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·sigtramp(SB),7,$24 TEXT runtime·sigtramp(SB),NOSPLIT,$24
// this might be called in external code context, // this might be called in external code context,
// where g and m are not set. // where g and m are not set.
// first save R0, because _cgo_load_gm will clobber it // first save R0, because _cgo_load_gm will clobber it
...@@ -182,7 +183,7 @@ TEXT runtime·sigtramp(SB),7,$24 ...@@ -182,7 +183,7 @@ TEXT runtime·sigtramp(SB),7,$24
MOVW 20(R13), g MOVW 20(R13), g
RET RET
TEXT runtime·mmap(SB),7,$12 TEXT runtime·mmap(SB),NOSPLIT,$12
MOVW 0(FP), R0 // arg 1 addr MOVW 0(FP), R0 // arg 1 addr
MOVW 4(FP), R1 // arg 2 len MOVW 4(FP), R1 // arg 2 len
MOVW 8(FP), R2 // arg 3 prot MOVW 8(FP), R2 // arg 3 prot
...@@ -200,7 +201,7 @@ TEXT runtime·mmap(SB),7,$12 ...@@ -200,7 +201,7 @@ TEXT runtime·mmap(SB),7,$12
SUB $4, R13 SUB $4, R13
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 addr MOVW 0(FP), R0 // arg 1 addr
MOVW 4(FP), R1 // arg 2 len MOVW 4(FP), R1 // arg 2 len
SWI $73 SWI $73
...@@ -208,7 +209,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -208,7 +209,7 @@ TEXT runtime·munmap(SB),7,$0
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 addr MOVW 0(FP), R0 // arg 1 addr
MOVW 4(FP), R1 // arg 2 len MOVW 4(FP), R1 // arg 2 len
MOVW 8(FP), R2 // arg 3 flags MOVW 8(FP), R2 // arg 3 flags
...@@ -216,7 +217,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -216,7 +217,7 @@ TEXT runtime·madvise(SB),7,$0
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVW new+0(FP), R0 MOVW new+0(FP), R0
MOVW old+4(FP), R1 MOVW old+4(FP), R1
SWI $53 SWI $53
...@@ -224,7 +225,7 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -224,7 +225,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVW usec+0(FP), R0 MOVW usec+0(FP), R0
MOVW R0, R2 MOVW R0, R2
MOVW $1000000, R1 MOVW $1000000, R1
...@@ -243,7 +244,7 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -243,7 +244,7 @@ TEXT runtime·usleep(SB),7,$16
SWI $240 // sys_nanosleep SWI $240 // sys_nanosleep
RET RET
TEXT runtime·sysctl(SB),7,$0 TEXT runtime·sysctl(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 - name MOVW 0(FP), R0 // arg 1 - name
MOVW 4(FP), R1 // arg 2 - namelen MOVW 4(FP), R1 // arg 2 - namelen
MOVW 8(FP), R2 // arg 3 - oldp MOVW 8(FP), R2 // arg 3 - oldp
...@@ -255,11 +256,11 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -255,11 +256,11 @@ TEXT runtime·sysctl(SB),7,$0
SUB $20, R13 SUB $20, R13
RET RET
TEXT runtime·osyield(SB),7,$-4 TEXT runtime·osyield(SB),NOSPLIT,$-4
SWI $331 // sys_sched_yield SWI $331 // sys_sched_yield
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVW $3, R0 // arg 1 - how (SIG_SETMASK) MOVW $3, R0 // arg 1 - how (SIG_SETMASK)
MOVW 0(FP), R1 // arg 2 - set MOVW 0(FP), R1 // arg 2 - set
MOVW 4(FP), R2 // arg 3 - oset MOVW 4(FP), R2 // arg 3 - oset
...@@ -268,7 +269,7 @@ TEXT runtime·sigprocmask(SB),7,$0 ...@@ -268,7 +269,7 @@ TEXT runtime·sigprocmask(SB),7,$0
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·casp(SB),7,$0 TEXT runtime·casp(SB),NOSPLIT,$0
B runtime·cas(SB) B runtime·cas(SB)
// TODO(minux): this is only valid for ARMv6+ // TODO(minux): this is only valid for ARMv6+
...@@ -279,5 +280,5 @@ TEXT runtime·casp(SB),7,$0 ...@@ -279,5 +280,5 @@ TEXT runtime·casp(SB),7,$0
// return 1; // return 1;
// }else // }else
// return 0; // return 0;
TEXT runtime·cas(SB),7,$0 TEXT runtime·cas(SB),NOSPLIT,$0
B runtime·armcas(SB) B runtime·armcas(SB)
...@@ -7,22 +7,23 @@ ...@@ -7,22 +7,23 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
TEXT runtime·exit(SB),7,$0 TEXT runtime·exit(SB),NOSPLIT,$0
MOVL $252, AX // syscall number MOVL $252, AX // syscall number
MOVL 4(SP), BX MOVL 4(SP), BX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
INT $3 // not reached INT $3 // not reached
RET RET
TEXT runtime·exit1(SB),7,$0 TEXT runtime·exit1(SB),NOSPLIT,$0
MOVL $1, AX // exit - exit the current os thread MOVL $1, AX // exit - exit the current os thread
MOVL 4(SP), BX MOVL 4(SP), BX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
INT $3 // not reached INT $3 // not reached
RET RET
TEXT runtime·open(SB),7,$0 TEXT runtime·open(SB),NOSPLIT,$0
MOVL $5, AX // syscall - open MOVL $5, AX // syscall - open
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -30,13 +31,13 @@ TEXT runtime·open(SB),7,$0 ...@@ -30,13 +31,13 @@ TEXT runtime·open(SB),7,$0
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·close(SB),7,$0 TEXT runtime·close(SB),NOSPLIT,$0
MOVL $6, AX // syscall - close MOVL $6, AX // syscall - close
MOVL 4(SP), BX MOVL 4(SP), BX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·write(SB),7,$0 TEXT runtime·write(SB),NOSPLIT,$0
MOVL $4, AX // syscall - write MOVL $4, AX // syscall - write
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -44,7 +45,7 @@ TEXT runtime·write(SB),7,$0 ...@@ -44,7 +45,7 @@ TEXT runtime·write(SB),7,$0
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·read(SB),7,$0 TEXT runtime·read(SB),NOSPLIT,$0
MOVL $3, AX // syscall - read MOVL $3, AX // syscall - read
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -52,14 +53,14 @@ TEXT runtime·read(SB),7,$0 ...@@ -52,14 +53,14 @@ TEXT runtime·read(SB),7,$0
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·getrlimit(SB),7,$0 TEXT runtime·getrlimit(SB),NOSPLIT,$0
MOVL $191, AX // syscall - ugetrlimit MOVL $191, AX // syscall - ugetrlimit
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·usleep(SB),7,$8 TEXT runtime·usleep(SB),NOSPLIT,$8
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -77,7 +78,7 @@ TEXT runtime·usleep(SB),7,$8 ...@@ -77,7 +78,7 @@ TEXT runtime·usleep(SB),7,$8
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·raise(SB),7,$12 TEXT runtime·raise(SB),NOSPLIT,$12
MOVL $224, AX // syscall - gettid MOVL $224, AX // syscall - gettid
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
MOVL AX, BX // arg 1 tid MOVL AX, BX // arg 1 tid
...@@ -86,7 +87,7 @@ TEXT runtime·raise(SB),7,$12 ...@@ -86,7 +87,7 @@ TEXT runtime·raise(SB),7,$12
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·setitimer(SB),7,$0-24 TEXT runtime·setitimer(SB),NOSPLIT,$0-24
MOVL $104, AX // syscall - setitimer MOVL $104, AX // syscall - setitimer
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -94,7 +95,7 @@ TEXT runtime·setitimer(SB),7,$0-24 ...@@ -94,7 +95,7 @@ TEXT runtime·setitimer(SB),7,$0-24
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·mincore(SB),7,$0-24 TEXT runtime·mincore(SB),NOSPLIT,$0-24
MOVL $218, AX // syscall - mincore MOVL $218, AX // syscall - mincore
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -103,7 +104,7 @@ TEXT runtime·mincore(SB),7,$0-24 ...@@ -103,7 +104,7 @@ TEXT runtime·mincore(SB),7,$0-24
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVL $265, AX // syscall - clock_gettime MOVL $265, AX // syscall - clock_gettime
MOVL $0, BX MOVL $0, BX
LEAL 8(SP), CX LEAL 8(SP), CX
...@@ -120,7 +121,7 @@ TEXT time·now(SB), 7, $32 ...@@ -120,7 +121,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB), 7, $32 TEXT runtime·nanotime(SB), NOSPLIT, $32
MOVL $265, AX // syscall - clock_gettime MOVL $265, AX // syscall - clock_gettime
MOVL $0, BX MOVL $0, BX
LEAL 8(SP), CX LEAL 8(SP), CX
...@@ -141,7 +142,7 @@ TEXT runtime·nanotime(SB), 7, $32 ...@@ -141,7 +142,7 @@ TEXT runtime·nanotime(SB), 7, $32
MOVL DX, 4(DI) MOVL DX, 4(DI)
RET RET
TEXT runtime·rtsigprocmask(SB),7,$0 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0
MOVL $175, AX // syscall entry MOVL $175, AX // syscall entry
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -153,7 +154,7 @@ TEXT runtime·rtsigprocmask(SB),7,$0 ...@@ -153,7 +154,7 @@ TEXT runtime·rtsigprocmask(SB),7,$0
INT $3 INT $3
RET RET
TEXT runtime·rt_sigaction(SB),7,$0 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0
MOVL $174, AX // syscall - rt_sigaction MOVL $174, AX // syscall - rt_sigaction
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -162,7 +163,7 @@ TEXT runtime·rt_sigaction(SB),7,$0 ...@@ -162,7 +163,7 @@ TEXT runtime·rt_sigaction(SB),7,$0
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·sigtramp(SB),7,$44 TEXT runtime·sigtramp(SB),NOSPLIT,$44
get_tls(CX) get_tls(CX)
// check that m exists // check that m exists
...@@ -202,7 +203,7 @@ TEXT runtime·sigtramp(SB),7,$44 ...@@ -202,7 +203,7 @@ TEXT runtime·sigtramp(SB),7,$44
RET RET
TEXT runtime·sigreturn(SB),7,$0 TEXT runtime·sigreturn(SB),NOSPLIT,$0
MOVL $173, AX // rt_sigreturn MOVL $173, AX // rt_sigreturn
// Sigreturn expects same SP as signal handler, // Sigreturn expects same SP as signal handler,
// so cannot CALL *runtime._vsdo(SB) here. // so cannot CALL *runtime._vsdo(SB) here.
...@@ -210,7 +211,7 @@ TEXT runtime·sigreturn(SB),7,$0 ...@@ -210,7 +211,7 @@ TEXT runtime·sigreturn(SB),7,$0
INT $3 // not reached INT $3 // not reached
RET RET
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVL $192, AX // mmap2 MOVL $192, AX // mmap2
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -226,7 +227,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -226,7 +227,7 @@ TEXT runtime·mmap(SB),7,$0
INCL AX INCL AX
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVL $91, AX // munmap MOVL $91, AX // munmap
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -236,7 +237,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -236,7 +237,7 @@ TEXT runtime·munmap(SB),7,$0
INT $3 INT $3
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVL $219, AX // madvise MOVL $219, AX // madvise
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -247,7 +248,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -247,7 +248,7 @@ TEXT runtime·madvise(SB),7,$0
// int32 futex(int32 *uaddr, int32 op, int32 val, // int32 futex(int32 *uaddr, int32 op, int32 val,
// struct timespec *timeout, int32 *uaddr2, int32 val2); // struct timespec *timeout, int32 *uaddr2, int32 val2);
TEXT runtime·futex(SB),7,$0 TEXT runtime·futex(SB),NOSPLIT,$0
MOVL $240, AX // futex MOVL $240, AX // futex
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -259,7 +260,7 @@ TEXT runtime·futex(SB),7,$0 ...@@ -259,7 +260,7 @@ TEXT runtime·futex(SB),7,$0
RET RET
// int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); // int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void));
TEXT runtime·clone(SB),7,$0 TEXT runtime·clone(SB),NOSPLIT,$0
MOVL $120, AX // clone MOVL $120, AX // clone
MOVL flags+4(SP), BX MOVL flags+4(SP), BX
MOVL stack+8(SP), CX MOVL stack+8(SP), CX
...@@ -339,7 +340,7 @@ TEXT runtime·clone(SB),7,$0 ...@@ -339,7 +340,7 @@ TEXT runtime·clone(SB),7,$0
MOVL $0x1234, 0x1005 MOVL $0x1234, 0x1005
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVL $186, AX // sigaltstack MOVL $186, AX // sigaltstack
MOVL new+4(SP), BX MOVL new+4(SP), BX
MOVL old+8(SP), CX MOVL old+8(SP), CX
...@@ -372,7 +373,7 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -372,7 +373,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
#define USEABLE 0x40 #define USEABLE 0x40
// setldt(int entry, int address, int limit) // setldt(int entry, int address, int limit)
TEXT runtime·setldt(SB),7,$32 TEXT runtime·setldt(SB),NOSPLIT,$32
MOVL entry+0(FP), BX // entry MOVL entry+0(FP), BX // entry
MOVL address+4(FP), CX // base address MOVL address+4(FP), CX // base address
...@@ -419,12 +420,12 @@ TEXT runtime·setldt(SB),7,$32 ...@@ -419,12 +420,12 @@ TEXT runtime·setldt(SB),7,$32
RET RET
TEXT runtime·osyield(SB),7,$0 TEXT runtime·osyield(SB),NOSPLIT,$0
MOVL $158, AX MOVL $158, AX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
TEXT runtime·sched_getaffinity(SB),7,$0 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0
MOVL $242, AX // syscall - sched_getaffinity MOVL $242, AX // syscall - sched_getaffinity
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -433,21 +434,21 @@ TEXT runtime·sched_getaffinity(SB),7,$0 ...@@ -433,21 +434,21 @@ TEXT runtime·sched_getaffinity(SB),7,$0
RET RET
// int32 runtime·epollcreate(int32 size); // int32 runtime·epollcreate(int32 size);
TEXT runtime·epollcreate(SB),7,$0 TEXT runtime·epollcreate(SB),NOSPLIT,$0
MOVL $254, AX MOVL $254, AX
MOVL 4(SP), BX MOVL 4(SP), BX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
// int32 runtime·epollcreate1(int32 flags); // int32 runtime·epollcreate1(int32 flags);
TEXT runtime·epollcreate1(SB),7,$0 TEXT runtime·epollcreate1(SB),NOSPLIT,$0
MOVL $329, AX MOVL $329, AX
MOVL 4(SP), BX MOVL 4(SP), BX
CALL *runtime·_vdso(SB) CALL *runtime·_vdso(SB)
RET RET
// int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev); // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev);
TEXT runtime·epollctl(SB),7,$0 TEXT runtime·epollctl(SB),NOSPLIT,$0
MOVL $255, AX MOVL $255, AX
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -457,7 +458,7 @@ TEXT runtime·epollctl(SB),7,$0 ...@@ -457,7 +458,7 @@ TEXT runtime·epollctl(SB),7,$0
RET RET
// int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout); // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout);
TEXT runtime·epollwait(SB),7,$0 TEXT runtime·epollwait(SB),NOSPLIT,$0
MOVL $256, AX MOVL $256, AX
MOVL 4(SP), BX MOVL 4(SP), BX
MOVL 8(SP), CX MOVL 8(SP), CX
...@@ -467,7 +468,7 @@ TEXT runtime·epollwait(SB),7,$0 ...@@ -467,7 +468,7 @@ TEXT runtime·epollwait(SB),7,$0
RET RET
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$0 TEXT runtime·closeonexec(SB),NOSPLIT,$0
MOVL $55, AX // fcntl MOVL $55, AX // fcntl
MOVL 4(SP), BX // fd MOVL 4(SP), BX // fd
MOVL $2, CX // F_SETFD MOVL $2, CX // F_SETFD
......
...@@ -7,20 +7,21 @@ ...@@ -7,20 +7,21 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
TEXT runtime·exit(SB),7,$0-8 TEXT runtime·exit(SB),NOSPLIT,$0-8
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $231, AX // exitgroup - force all os threads to exit MOVL $231, AX // exitgroup - force all os threads to exit
SYSCALL SYSCALL
RET RET
TEXT runtime·exit1(SB),7,$0-8 TEXT runtime·exit1(SB),NOSPLIT,$0-8
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $60, AX // exit - exit the current os thread MOVL $60, AX // exit - exit the current os thread
SYSCALL SYSCALL
RET RET
TEXT runtime·open(SB),7,$0-16 TEXT runtime·open(SB),NOSPLIT,$0-16
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVL 16(SP), SI MOVL 16(SP), SI
MOVL 20(SP), DX MOVL 20(SP), DX
...@@ -28,13 +29,13 @@ TEXT runtime·open(SB),7,$0-16 ...@@ -28,13 +29,13 @@ TEXT runtime·open(SB),7,$0-16
SYSCALL SYSCALL
RET RET
TEXT runtime·close(SB),7,$0-16 TEXT runtime·close(SB),NOSPLIT,$0-16
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $3, AX // syscall entry MOVL $3, AX // syscall entry
SYSCALL SYSCALL
RET RET
TEXT runtime·write(SB),7,$0-24 TEXT runtime·write(SB),NOSPLIT,$0-24
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL 24(SP), DX MOVL 24(SP), DX
...@@ -42,7 +43,7 @@ TEXT runtime·write(SB),7,$0-24 ...@@ -42,7 +43,7 @@ TEXT runtime·write(SB),7,$0-24
SYSCALL SYSCALL
RET RET
TEXT runtime·read(SB),7,$0-24 TEXT runtime·read(SB),NOSPLIT,$0-24
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL 24(SP), DX MOVL 24(SP), DX
...@@ -50,14 +51,14 @@ TEXT runtime·read(SB),7,$0-24 ...@@ -50,14 +51,14 @@ TEXT runtime·read(SB),7,$0-24
SYSCALL SYSCALL
RET RET
TEXT runtime·getrlimit(SB),7,$0-24 TEXT runtime·getrlimit(SB),NOSPLIT,$0-24
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL $97, AX // syscall entry MOVL $97, AX // syscall entry
SYSCALL SYSCALL
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -75,7 +76,7 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -75,7 +76,7 @@ TEXT runtime·usleep(SB),7,$16
SYSCALL SYSCALL
RET RET
TEXT runtime·raise(SB),7,$12 TEXT runtime·raise(SB),NOSPLIT,$12
MOVL $186, AX // syscall - gettid MOVL $186, AX // syscall - gettid
SYSCALL SYSCALL
MOVL AX, DI // arg 1 tid MOVL AX, DI // arg 1 tid
...@@ -84,7 +85,7 @@ TEXT runtime·raise(SB),7,$12 ...@@ -84,7 +85,7 @@ TEXT runtime·raise(SB),7,$12
SYSCALL SYSCALL
RET RET
TEXT runtime·setitimer(SB),7,$0-24 TEXT runtime·setitimer(SB),NOSPLIT,$0-24
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -92,7 +93,7 @@ TEXT runtime·setitimer(SB),7,$0-24 ...@@ -92,7 +93,7 @@ TEXT runtime·setitimer(SB),7,$0-24
SYSCALL SYSCALL
RET RET
TEXT runtime·mincore(SB),7,$0-24 TEXT runtime·mincore(SB),NOSPLIT,$0-24
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -101,7 +102,7 @@ TEXT runtime·mincore(SB),7,$0-24 ...@@ -101,7 +102,7 @@ TEXT runtime·mincore(SB),7,$0-24
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB),7,$16 TEXT time·now(SB),NOSPLIT,$16
// Be careful. We're calling a function with gcc calling convention here. // Be careful. We're calling a function with gcc calling convention here.
// We're guaranteed 128 bytes on entry, and we've taken 16, and the // We're guaranteed 128 bytes on entry, and we've taken 16, and the
// call uses another 8. // call uses another 8.
...@@ -129,7 +130,7 @@ fallback_gtod: ...@@ -129,7 +130,7 @@ fallback_gtod:
MOVL DX, nsec+8(FP) MOVL DX, nsec+8(FP)
RET RET
TEXT runtime·nanotime(SB),7,$16 TEXT runtime·nanotime(SB),NOSPLIT,$16
// Duplicate time.now here to avoid using up precious stack space. // Duplicate time.now here to avoid using up precious stack space.
// See comment above in time.now. // See comment above in time.now.
MOVQ runtime·__vdso_clock_gettime_sym(SB), AX MOVQ runtime·__vdso_clock_gettime_sym(SB), AX
...@@ -159,7 +160,7 @@ fallback_gtod_nt: ...@@ -159,7 +160,7 @@ fallback_gtod_nt:
ADDQ DX, AX ADDQ DX, AX
RET RET
TEXT runtime·rtsigprocmask(SB),7,$0-32 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0-32
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -171,7 +172,7 @@ TEXT runtime·rtsigprocmask(SB),7,$0-32 ...@@ -171,7 +172,7 @@ TEXT runtime·rtsigprocmask(SB),7,$0-32
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·rt_sigaction(SB),7,$0-32 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0-32
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -180,7 +181,7 @@ TEXT runtime·rt_sigaction(SB),7,$0-32 ...@@ -180,7 +181,7 @@ TEXT runtime·rt_sigaction(SB),7,$0-32
SYSCALL SYSCALL
RET RET
TEXT runtime·sigtramp(SB),7,$64 TEXT runtime·sigtramp(SB),NOSPLIT,$64
get_tls(BX) get_tls(BX)
// check that m exists // check that m exists
...@@ -213,12 +214,12 @@ TEXT runtime·sigtramp(SB),7,$64 ...@@ -213,12 +214,12 @@ TEXT runtime·sigtramp(SB),7,$64
MOVQ R10, g(BX) MOVQ R10, g(BX)
RET RET
TEXT runtime·sigreturn(SB),7,$0 TEXT runtime·sigreturn(SB),NOSPLIT,$0
MOVL $15, AX // rt_sigreturn MOVL $15, AX // rt_sigreturn
SYSCALL SYSCALL
INT $3 // not reached INT $3 // not reached
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVQ $0, SI MOVQ $0, SI
MOVQ 16(SP), SI MOVQ 16(SP), SI
...@@ -235,7 +236,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -235,7 +236,7 @@ TEXT runtime·mmap(SB),7,$0
INCQ AX INCQ AX
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ $11, AX // munmap MOVQ $11, AX // munmap
...@@ -245,7 +246,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -245,7 +246,7 @@ TEXT runtime·munmap(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -256,7 +257,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -256,7 +257,7 @@ TEXT runtime·madvise(SB),7,$0
// int64 futex(int32 *uaddr, int32 op, int32 val, // int64 futex(int32 *uaddr, int32 op, int32 val,
// struct timespec *timeout, int32 *uaddr2, int32 val2); // struct timespec *timeout, int32 *uaddr2, int32 val2);
TEXT runtime·futex(SB),7,$0 TEXT runtime·futex(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVL 16(SP), SI MOVL 16(SP), SI
MOVL 20(SP), DX MOVL 20(SP), DX
...@@ -268,7 +269,7 @@ TEXT runtime·futex(SB),7,$0 ...@@ -268,7 +269,7 @@ TEXT runtime·futex(SB),7,$0
RET RET
// int64 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); // int64 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void));
TEXT runtime·clone(SB),7,$0 TEXT runtime·clone(SB),NOSPLIT,$0
MOVL flags+8(SP), DI MOVL flags+8(SP), DI
MOVQ stack+16(SP), SI MOVQ stack+16(SP), SI
...@@ -313,7 +314,7 @@ TEXT runtime·clone(SB),7,$0 ...@@ -313,7 +314,7 @@ TEXT runtime·clone(SB),7,$0
SYSCALL SYSCALL
JMP -3(PC) // keep exiting JMP -3(PC) // keep exiting
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVQ new+8(SP), DI MOVQ new+8(SP), DI
MOVQ old+16(SP), SI MOVQ old+16(SP), SI
MOVQ $131, AX MOVQ $131, AX
...@@ -324,7 +325,7 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -324,7 +325,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
RET RET
// set tls base to DI // set tls base to DI
TEXT runtime·settls(SB),7,$32 TEXT runtime·settls(SB),NOSPLIT,$32
ADDQ $16, DI // ELF wants to use -16(FS), -8(FS) ADDQ $16, DI // ELF wants to use -16(FS), -8(FS)
MOVQ DI, SI MOVQ DI, SI
...@@ -336,12 +337,12 @@ TEXT runtime·settls(SB),7,$32 ...@@ -336,12 +337,12 @@ TEXT runtime·settls(SB),7,$32
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·osyield(SB),7,$0 TEXT runtime·osyield(SB),NOSPLIT,$0
MOVL $24, AX MOVL $24, AX
SYSCALL SYSCALL
RET RET
TEXT runtime·sched_getaffinity(SB),7,$0 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0
MOVQ 8(SP), DI MOVQ 8(SP), DI
MOVL 16(SP), SI MOVL 16(SP), SI
MOVQ 24(SP), DX MOVQ 24(SP), DX
...@@ -350,21 +351,21 @@ TEXT runtime·sched_getaffinity(SB),7,$0 ...@@ -350,21 +351,21 @@ TEXT runtime·sched_getaffinity(SB),7,$0
RET RET
// int32 runtime·epollcreate(int32 size); // int32 runtime·epollcreate(int32 size);
TEXT runtime·epollcreate(SB),7,$0 TEXT runtime·epollcreate(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $213, AX // syscall entry MOVL $213, AX // syscall entry
SYSCALL SYSCALL
RET RET
// int32 runtime·epollcreate1(int32 flags); // int32 runtime·epollcreate1(int32 flags);
TEXT runtime·epollcreate1(SB),7,$0 TEXT runtime·epollcreate1(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL $291, AX // syscall entry MOVL $291, AX // syscall entry
SYSCALL SYSCALL
RET RET
// int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev); // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev);
TEXT runtime·epollctl(SB),7,$0 TEXT runtime·epollctl(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVL 12(SP), SI MOVL 12(SP), SI
MOVL 16(SP), DX MOVL 16(SP), DX
...@@ -374,7 +375,7 @@ TEXT runtime·epollctl(SB),7,$0 ...@@ -374,7 +375,7 @@ TEXT runtime·epollctl(SB),7,$0
RET RET
// int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout); // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout);
TEXT runtime·epollwait(SB),7,$0 TEXT runtime·epollwait(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL 24(SP), DX MOVL 24(SP), DX
...@@ -384,7 +385,7 @@ TEXT runtime·epollwait(SB),7,$0 ...@@ -384,7 +385,7 @@ TEXT runtime·epollwait(SB),7,$0
RET RET
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$0 TEXT runtime·closeonexec(SB),NOSPLIT,$0
MOVL 8(SP), DI // fd MOVL 8(SP), DI // fd
MOVQ $2, SI // F_SETFD MOVQ $2, SI // F_SETFD
MOVQ $1, DX // FD_CLOEXEC MOVQ $1, DX // FD_CLOEXEC
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// for EABI, as we don't support OABI // for EABI, as we don't support OABI
#define SYS_BASE 0x0 #define SYS_BASE 0x0
...@@ -44,7 +45,7 @@ ...@@ -44,7 +45,7 @@
#define ARM_BASE (SYS_BASE + 0x0f0000) #define ARM_BASE (SYS_BASE + 0x0f0000)
TEXT runtime·open(SB),7,$0 TEXT runtime·open(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -52,13 +53,13 @@ TEXT runtime·open(SB),7,$0 ...@@ -52,13 +53,13 @@ TEXT runtime·open(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT runtime·close(SB),7,$0 TEXT runtime·close(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW $SYS_close, R7 MOVW $SYS_close, R7
SWI $0 SWI $0
RET RET
TEXT runtime·write(SB),7,$0 TEXT runtime·write(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -66,7 +67,7 @@ TEXT runtime·write(SB),7,$0 ...@@ -66,7 +67,7 @@ TEXT runtime·write(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT runtime·read(SB),7,$0 TEXT runtime·read(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -74,14 +75,14 @@ TEXT runtime·read(SB),7,$0 ...@@ -74,14 +75,14 @@ TEXT runtime·read(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT runtime·getrlimit(SB),7,$0 TEXT runtime·getrlimit(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW $SYS_ugetrlimit, R7 MOVW $SYS_ugetrlimit, R7
SWI $0 SWI $0
RET RET
TEXT runtime·exit(SB),7,$-4 TEXT runtime·exit(SB),NOSPLIT,$-4
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW $SYS_exit_group, R7 MOVW $SYS_exit_group, R7
SWI $0 SWI $0
...@@ -89,7 +90,7 @@ TEXT runtime·exit(SB),7,$-4 ...@@ -89,7 +90,7 @@ TEXT runtime·exit(SB),7,$-4
MOVW $1002, R1 MOVW $1002, R1
MOVW R0, (R1) // fail hard MOVW R0, (R1) // fail hard
TEXT runtime·exit1(SB),7,$-4 TEXT runtime·exit1(SB),NOSPLIT,$-4
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW $SYS_exit, R7 MOVW $SYS_exit, R7
SWI $0 SWI $0
...@@ -97,7 +98,7 @@ TEXT runtime·exit1(SB),7,$-4 ...@@ -97,7 +98,7 @@ TEXT runtime·exit1(SB),7,$-4
MOVW $1003, R1 MOVW $1003, R1
MOVW R0, (R1) // fail hard MOVW R0, (R1) // fail hard
TEXT runtime·raise(SB),7,$-4 TEXT runtime·raise(SB),NOSPLIT,$-4
MOVW $SYS_gettid, R7 MOVW $SYS_gettid, R7
SWI $0 SWI $0
// arg 1 tid already in R0 from gettid // arg 1 tid already in R0 from gettid
...@@ -106,7 +107,7 @@ TEXT runtime·raise(SB),7,$-4 ...@@ -106,7 +107,7 @@ TEXT runtime·raise(SB),7,$-4
SWI $0 SWI $0
RET RET
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -120,7 +121,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -120,7 +121,7 @@ TEXT runtime·mmap(SB),7,$0
RSB.HI $0, R0 RSB.HI $0, R0
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW $SYS_munmap, R7 MOVW $SYS_munmap, R7
...@@ -131,7 +132,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -131,7 +132,7 @@ TEXT runtime·munmap(SB),7,$0
MOVW.HI R8, (R8) MOVW.HI R8, (R8)
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -140,7 +141,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -140,7 +141,7 @@ TEXT runtime·madvise(SB),7,$0
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·setitimer(SB),7,$0 TEXT runtime·setitimer(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -148,7 +149,7 @@ TEXT runtime·setitimer(SB),7,$0 ...@@ -148,7 +149,7 @@ TEXT runtime·setitimer(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT runtime·mincore(SB),7,$0 TEXT runtime·mincore(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -156,7 +157,7 @@ TEXT runtime·mincore(SB),7,$0 ...@@ -156,7 +157,7 @@ TEXT runtime·mincore(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVW $0, R0 // CLOCK_REALTIME MOVW $0, R0 // CLOCK_REALTIME
MOVW $8(R13), R1 // timespec MOVW $8(R13), R1 // timespec
MOVW $SYS_clock_gettime, R7 MOVW $SYS_clock_gettime, R7
...@@ -173,7 +174,7 @@ TEXT time·now(SB), 7, $32 ...@@ -173,7 +174,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB),7,$32 TEXT runtime·nanotime(SB),NOSPLIT,$32
MOVW $0, R0 // CLOCK_REALTIME MOVW $0, R0 // CLOCK_REALTIME
MOVW $8(R13), R1 // timespec MOVW $8(R13), R1 // timespec
MOVW $SYS_clock_gettime, R7 MOVW $SYS_clock_gettime, R7
...@@ -195,7 +196,7 @@ TEXT runtime·nanotime(SB),7,$32 ...@@ -195,7 +196,7 @@ TEXT runtime·nanotime(SB),7,$32
// int32 futex(int32 *uaddr, int32 op, int32 val, // int32 futex(int32 *uaddr, int32 op, int32 val,
// struct timespec *timeout, int32 *uaddr2, int32 val2); // struct timespec *timeout, int32 *uaddr2, int32 val2);
TEXT runtime·futex(SB),7,$0 TEXT runtime·futex(SB),NOSPLIT,$0
MOVW 4(SP), R0 MOVW 4(SP), R0
MOVW 8(SP), R1 MOVW 8(SP), R1
MOVW 12(SP), R2 MOVW 12(SP), R2
...@@ -208,7 +209,7 @@ TEXT runtime·futex(SB),7,$0 ...@@ -208,7 +209,7 @@ TEXT runtime·futex(SB),7,$0
// int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); // int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void));
TEXT runtime·clone(SB),7,$0 TEXT runtime·clone(SB),NOSPLIT,$0
MOVW flags+0(FP), R0 MOVW flags+0(FP), R0
MOVW stack+4(FP), R1 MOVW stack+4(FP), R1
MOVW $0, R2 // parent tid ptr MOVW $0, R2 // parent tid ptr
...@@ -271,7 +272,7 @@ TEXT runtime·clone(SB),7,$0 ...@@ -271,7 +272,7 @@ TEXT runtime·clone(SB),7,$0
MOVW $1005, R1 MOVW $1005, R1
MOVW R0, (R1) MOVW R0, (R1)
TEXT runtime·sigaltstack(SB),7,$0 TEXT runtime·sigaltstack(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW $SYS_sigaltstack, R7 MOVW $SYS_sigaltstack, R7
...@@ -282,7 +283,7 @@ TEXT runtime·sigaltstack(SB),7,$0 ...@@ -282,7 +283,7 @@ TEXT runtime·sigaltstack(SB),7,$0
MOVW.HI R8, (R8) MOVW.HI R8, (R8)
RET RET
TEXT runtime·sigtramp(SB),7,$24 TEXT runtime·sigtramp(SB),NOSPLIT,$24
// this might be called in external code context, // this might be called in external code context,
// where g and m are not set. // where g and m are not set.
// first save R0, because _cgo_load_gm will clobber it // first save R0, because _cgo_load_gm will clobber it
...@@ -318,7 +319,7 @@ TEXT runtime·sigtramp(SB),7,$24 ...@@ -318,7 +319,7 @@ TEXT runtime·sigtramp(SB),7,$24
RET RET
TEXT runtime·rtsigprocmask(SB),7,$0 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -327,7 +328,7 @@ TEXT runtime·rtsigprocmask(SB),7,$0 ...@@ -327,7 +328,7 @@ TEXT runtime·rtsigprocmask(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT runtime·rt_sigaction(SB),7,$0 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -336,12 +337,12 @@ TEXT runtime·rt_sigaction(SB),7,$0 ...@@ -336,12 +337,12 @@ TEXT runtime·rt_sigaction(SB),7,$0
SWI $0 SWI $0
RET RET
TEXT runtime·sigreturn(SB),7,$0 TEXT runtime·sigreturn(SB),NOSPLIT,$0
MOVW $SYS_rt_sigreturn, R7 MOVW $SYS_rt_sigreturn, R7
SWI $0 SWI $0
RET RET
TEXT runtime·usleep(SB),7,$12 TEXT runtime·usleep(SB),NOSPLIT,$12
MOVW usec+0(FP), R0 MOVW usec+0(FP), R0
MOVW R0, R1 MOVW R0, R1
MOVW $1000000, R2 MOVW $1000000, R2
...@@ -360,10 +361,10 @@ TEXT runtime·usleep(SB),7,$12 ...@@ -360,10 +361,10 @@ TEXT runtime·usleep(SB),7,$12
// Use kernel version instead of native armcas in asm_arm.s. // Use kernel version instead of native armcas in asm_arm.s.
// See ../sync/atomic/asm_linux_arm.s for details. // See ../sync/atomic/asm_linux_arm.s for details.
TEXT cas<>(SB),7,$0 TEXT cas<>(SB),NOSPLIT,$0
MOVW $0xffff0fc0, PC MOVW $0xffff0fc0, PC
TEXT runtime·cas(SB),7,$0 TEXT runtime·cas(SB),NOSPLIT,$0
MOVW valptr+0(FP), R2 MOVW valptr+0(FP), R2
MOVW old+4(FP), R0 MOVW old+4(FP), R0
casagain: casagain:
...@@ -382,15 +383,15 @@ cascheck: ...@@ -382,15 +383,15 @@ cascheck:
MOVW $0, R0 MOVW $0, R0
RET RET
TEXT runtime·casp(SB),7,$0 TEXT runtime·casp(SB),NOSPLIT,$0
B runtime·cas(SB) B runtime·cas(SB)
TEXT runtime·osyield(SB),7,$0 TEXT runtime·osyield(SB),NOSPLIT,$0
MOVW $SYS_sched_yield, R7 MOVW $SYS_sched_yield, R7
SWI $0 SWI $0
RET RET
TEXT runtime·sched_getaffinity(SB),7,$0 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -399,21 +400,21 @@ TEXT runtime·sched_getaffinity(SB),7,$0 ...@@ -399,21 +400,21 @@ TEXT runtime·sched_getaffinity(SB),7,$0
RET RET
// int32 runtime·epollcreate(int32 size) // int32 runtime·epollcreate(int32 size)
TEXT runtime·epollcreate(SB),7,$0 TEXT runtime·epollcreate(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW $SYS_epoll_create, R7 MOVW $SYS_epoll_create, R7
SWI $0 SWI $0
RET RET
// int32 runtime·epollcreate1(int32 flags) // int32 runtime·epollcreate1(int32 flags)
TEXT runtime·epollcreate1(SB),7,$0 TEXT runtime·epollcreate1(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW $SYS_epoll_create1, R7 MOVW $SYS_epoll_create1, R7
SWI $0 SWI $0
RET RET
// int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev) // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev)
TEXT runtime·epollctl(SB),7,$0 TEXT runtime·epollctl(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -423,7 +424,7 @@ TEXT runtime·epollctl(SB),7,$0 ...@@ -423,7 +424,7 @@ TEXT runtime·epollctl(SB),7,$0
RET RET
// int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout) // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout)
TEXT runtime·epollwait(SB),7,$0 TEXT runtime·epollwait(SB),NOSPLIT,$0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
...@@ -433,7 +434,7 @@ TEXT runtime·epollwait(SB),7,$0 ...@@ -433,7 +434,7 @@ TEXT runtime·epollwait(SB),7,$0
RET RET
// void runtime·closeonexec(int32 fd) // void runtime·closeonexec(int32 fd)
TEXT runtime·closeonexec(SB),7,$0 TEXT runtime·closeonexec(SB),NOSPLIT,$0
MOVW 0(FP), R0 // fd MOVW 0(FP), R0 // fd
MOVW $2, R1 // F_SETFD MOVW $2, R1 // F_SETFD
MOVW $1, R2 // FD_CLOEXEC MOVW $1, R2 // FD_CLOEXEC
......
...@@ -7,42 +7,43 @@ ...@@ -7,42 +7,43 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-4 TEXT runtime·exit(SB),NOSPLIT,$-4
MOVL $1, AX MOVL $1, AX
INT $0x80 INT $0x80
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·exit1(SB),7,$-4 TEXT runtime·exit1(SB),NOSPLIT,$-4
MOVL $310, AX // sys__lwp_exit MOVL $310, AX // sys__lwp_exit
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$-4 TEXT runtime·open(SB),NOSPLIT,$-4
MOVL $5, AX MOVL $5, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·close(SB),7,$-4 TEXT runtime·close(SB),NOSPLIT,$-4
MOVL $6, AX MOVL $6, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·read(SB),7,$-4 TEXT runtime·read(SB),NOSPLIT,$-4
MOVL $3, AX MOVL $3, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·write(SB),7,$-4 TEXT runtime·write(SB),NOSPLIT,$-4
MOVL $4, AX // sys_write MOVL $4, AX // sys_write
INT $0x80 INT $0x80
RET RET
TEXT runtime·usleep(SB),7,$24 TEXT runtime·usleep(SB),NOSPLIT,$24
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -61,7 +62,7 @@ TEXT runtime·usleep(SB),7,$24 ...@@ -61,7 +62,7 @@ TEXT runtime·usleep(SB),7,$24
INT $0x80 INT $0x80
RET RET
TEXT runtime·raise(SB),7,$12 TEXT runtime·raise(SB),NOSPLIT,$12
MOVL $311, AX // sys__lwp_self MOVL $311, AX // sys__lwp_self
INT $0x80 INT $0x80
MOVL $0, 0(SP) MOVL $0, 0(SP)
...@@ -72,7 +73,7 @@ TEXT runtime·raise(SB),7,$12 ...@@ -72,7 +73,7 @@ TEXT runtime·raise(SB),7,$12
INT $0x80 INT $0x80
RET RET
TEXT runtime·mmap(SB),7,$36 TEXT runtime·mmap(SB),NOSPLIT,$36
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
...@@ -90,26 +91,26 @@ TEXT runtime·mmap(SB),7,$36 ...@@ -90,26 +91,26 @@ TEXT runtime·mmap(SB),7,$36
INT $0x80 INT $0x80
RET RET
TEXT runtime·munmap(SB),7,$-4 TEXT runtime·munmap(SB),NOSPLIT,$-4
MOVL $73, AX // sys_munmap MOVL $73, AX // sys_munmap
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·madvise(SB),7,$-4 TEXT runtime·madvise(SB),NOSPLIT,$-4
MOVL $75, AX // sys_madvise MOVL $75, AX // sys_madvise
INT $0x80 INT $0x80
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·setitimer(SB),7,$-4 TEXT runtime·setitimer(SB),NOSPLIT,$-4
MOVL $425, AX // sys_setitimer MOVL $425, AX // sys_setitimer
INT $0x80 INT $0x80
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL $0, 4(SP) // arg 1 - clock_id MOVL $0, 4(SP) // arg 1 - clock_id
MOVL BX, 8(SP) // arg 2 - tp MOVL BX, 8(SP) // arg 2 - tp
...@@ -127,7 +128,7 @@ TEXT time·now(SB), 7, $32 ...@@ -127,7 +128,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB),7,$32 TEXT runtime·nanotime(SB),NOSPLIT,$32
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL $0, 4(SP) // arg 1 - clock_id MOVL $0, 4(SP) // arg 1 - clock_id
MOVL BX, 8(SP) // arg 2 - tp MOVL BX, 8(SP) // arg 2 - tp
...@@ -150,21 +151,21 @@ TEXT runtime·nanotime(SB),7,$32 ...@@ -150,21 +151,21 @@ TEXT runtime·nanotime(SB),7,$32
MOVL DX, 4(DI) MOVL DX, 4(DI)
RET RET
TEXT runtime·getcontext(SB),7,$-4 TEXT runtime·getcontext(SB),NOSPLIT,$-4
MOVL $307, AX // sys_getcontext MOVL $307, AX // sys_getcontext
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigprocmask(SB),7,$-4 TEXT runtime·sigprocmask(SB),NOSPLIT,$-4
MOVL $293, AX // sys_sigprocmask MOVL $293, AX // sys_sigprocmask
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigreturn_tramp(SB),7,$0 TEXT runtime·sigreturn_tramp(SB),NOSPLIT,$0
LEAL 140(SP), AX // Load address of ucontext LEAL 140(SP), AX // Load address of ucontext
MOVL AX, 4(SP) MOVL AX, 4(SP)
MOVL $308, AX // sys_setcontext MOVL $308, AX // sys_setcontext
...@@ -173,7 +174,7 @@ TEXT runtime·sigreturn_tramp(SB),7,$0 ...@@ -173,7 +174,7 @@ TEXT runtime·sigreturn_tramp(SB),7,$0
MOVL $1, AX // sys_exit MOVL $1, AX // sys_exit
INT $0x80 INT $0x80
TEXT runtime·sigaction(SB),7,$24 TEXT runtime·sigaction(SB),NOSPLIT,$24
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
...@@ -190,7 +191,7 @@ TEXT runtime·sigaction(SB),7,$24 ...@@ -190,7 +191,7 @@ TEXT runtime·sigaction(SB),7,$24
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigtramp(SB),7,$44 TEXT runtime·sigtramp(SB),NOSPLIT,$44
get_tls(CX) get_tls(CX)
// check that m exists // check that m exists
...@@ -229,7 +230,7 @@ TEXT runtime·sigtramp(SB),7,$44 ...@@ -229,7 +230,7 @@ TEXT runtime·sigtramp(SB),7,$44
RET RET
// int32 lwp_create(void *context, uintptr flags, void *lwpid); // int32 lwp_create(void *context, uintptr flags, void *lwpid);
TEXT runtime·lwp_create(SB),7,$16 TEXT runtime·lwp_create(SB),NOSPLIT,$16
MOVL $0, 0(SP) MOVL $0, 0(SP)
MOVL context+0(FP), AX MOVL context+0(FP), AX
MOVL AX, 4(SP) // arg 1 - context MOVL AX, 4(SP) // arg 1 - context
...@@ -243,7 +244,7 @@ TEXT runtime·lwp_create(SB),7,$16 ...@@ -243,7 +244,7 @@ TEXT runtime·lwp_create(SB),7,$16
NEGL AX NEGL AX
RET RET
TEXT runtime·lwp_tramp(SB),7,$0 TEXT runtime·lwp_tramp(SB),NOSPLIT,$0
// Set FS to point at m->tls // Set FS to point at m->tls
LEAL m_tls(BX), BP LEAL m_tls(BX), BP
...@@ -274,7 +275,7 @@ TEXT runtime·lwp_tramp(SB),7,$0 ...@@ -274,7 +275,7 @@ TEXT runtime·lwp_tramp(SB),7,$0
MOVL $0x1234, 0x1005 MOVL $0x1234, 0x1005
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVL $281, AX // sys___sigaltstack14 MOVL $281, AX // sys___sigaltstack14
MOVL new+4(SP), BX MOVL new+4(SP), BX
MOVL old+8(SP), CX MOVL old+8(SP), CX
...@@ -284,14 +285,14 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -284,14 +285,14 @@ TEXT runtime·sigaltstack(SB),7,$-8
INT $3 INT $3
RET RET
TEXT runtime·setldt(SB),7,$8 TEXT runtime·setldt(SB),NOSPLIT,$8
// Under NetBSD we set the GS base instead of messing with the LDT. // Under NetBSD we set the GS base instead of messing with the LDT.
MOVL 16(SP), AX // tls0 MOVL 16(SP), AX // tls0
MOVL AX, 0(SP) MOVL AX, 0(SP)
CALL runtime·settls(SB) CALL runtime·settls(SB)
RET RET
TEXT runtime·settls(SB),7,$16 TEXT runtime·settls(SB),NOSPLIT,$16
// adjust for ELF: wants to use -8(GS) and -4(GS) for g and m // adjust for ELF: wants to use -8(GS) and -4(GS) for g and m
MOVL base+0(FP), CX MOVL base+0(FP), CX
ADDL $8, CX ADDL $8, CX
...@@ -303,27 +304,27 @@ TEXT runtime·settls(SB),7,$16 ...@@ -303,27 +304,27 @@ TEXT runtime·settls(SB),7,$16
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·osyield(SB),7,$-4 TEXT runtime·osyield(SB),NOSPLIT,$-4
MOVL $350, AX // sys_sched_yield MOVL $350, AX // sys_sched_yield
INT $0x80 INT $0x80
RET RET
TEXT runtime·lwp_park(SB),7,$-4 TEXT runtime·lwp_park(SB),NOSPLIT,$-4
MOVL $434, AX // sys__lwp_park MOVL $434, AX // sys__lwp_park
INT $0x80 INT $0x80
RET RET
TEXT runtime·lwp_unpark(SB),7,$-4 TEXT runtime·lwp_unpark(SB),NOSPLIT,$-4
MOVL $321, AX // sys__lwp_unpark MOVL $321, AX // sys__lwp_unpark
INT $0x80 INT $0x80
RET RET
TEXT runtime·lwp_self(SB),7,$-4 TEXT runtime·lwp_self(SB),NOSPLIT,$-4
MOVL $311, AX // sys__lwp_self MOVL $311, AX // sys__lwp_self
INT $0x80 INT $0x80
RET RET
TEXT runtime·sysctl(SB),7,$28 TEXT runtime·sysctl(SB),NOSPLIT,$28
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
......
...@@ -7,9 +7,10 @@ ...@@ -7,9 +7,10 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// int32 lwp_create(void *context, uintptr flags, void *lwpid) // int32 lwp_create(void *context, uintptr flags, void *lwpid)
TEXT runtime·lwp_create(SB),7,$0 TEXT runtime·lwp_create(SB),NOSPLIT,$0
MOVQ context+0(FP), DI MOVQ context+0(FP), DI
MOVQ flags+8(FP), SI MOVQ flags+8(FP), SI
MOVQ lwpid+16(FP), DX MOVQ lwpid+16(FP), DX
...@@ -19,7 +20,7 @@ TEXT runtime·lwp_create(SB),7,$0 ...@@ -19,7 +20,7 @@ TEXT runtime·lwp_create(SB),7,$0
NEGQ AX NEGQ AX
RET RET
TEXT runtime·lwp_tramp(SB),7,$0 TEXT runtime·lwp_tramp(SB),NOSPLIT,$0
// Set FS to point at m->tls. // Set FS to point at m->tls.
LEAQ m_tls(R8), DI LEAQ m_tls(R8), DI
...@@ -39,12 +40,12 @@ TEXT runtime·lwp_tramp(SB),7,$0 ...@@ -39,12 +40,12 @@ TEXT runtime·lwp_tramp(SB),7,$0
SYSCALL SYSCALL
JMP -3(PC) // keep exiting JMP -3(PC) // keep exiting
TEXT runtime·osyield(SB),7,$0 TEXT runtime·osyield(SB),NOSPLIT,$0
MOVL $350, AX // sys_sched_yield MOVL $350, AX // sys_sched_yield
SYSCALL SYSCALL
RET RET
TEXT runtime·lwp_park(SB),7,$0 TEXT runtime·lwp_park(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - abstime MOVQ 8(SP), DI // arg 1 - abstime
MOVL 16(SP), SI // arg 2 - unpark MOVL 16(SP), SI // arg 2 - unpark
MOVQ 24(SP), DX // arg 3 - hint MOVQ 24(SP), DX // arg 3 - hint
...@@ -53,33 +54,33 @@ TEXT runtime·lwp_park(SB),7,$0 ...@@ -53,33 +54,33 @@ TEXT runtime·lwp_park(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·lwp_unpark(SB),7,$0 TEXT runtime·lwp_unpark(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - lwp MOVQ 8(SP), DI // arg 1 - lwp
MOVL 16(SP), SI // arg 2 - hint MOVL 16(SP), SI // arg 2 - hint
MOVL $321, AX // sys__lwp_unpark MOVL $321, AX // sys__lwp_unpark
SYSCALL SYSCALL
RET RET
TEXT runtime·lwp_self(SB),7,$0 TEXT runtime·lwp_self(SB),NOSPLIT,$0
MOVL $311, AX // sys__lwp_self MOVL $311, AX // sys__lwp_self
SYSCALL SYSCALL
RET RET
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-8 TEXT runtime·exit(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - exit status MOVL 8(SP), DI // arg 1 - exit status
MOVL $1, AX // sys_exit MOVL $1, AX // sys_exit
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·exit1(SB),7,$-8 TEXT runtime·exit1(SB),NOSPLIT,$-8
MOVL $310, AX // sys__lwp_exit MOVL $310, AX // sys__lwp_exit
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$-8 TEXT runtime·open(SB),NOSPLIT,$-8
MOVQ 8(SP), DI // arg 1 pathname MOVQ 8(SP), DI // arg 1 pathname
MOVL 16(SP), SI // arg 2 flags MOVL 16(SP), SI // arg 2 flags
MOVL 20(SP), DX // arg 3 mode MOVL 20(SP), DX // arg 3 mode
...@@ -87,13 +88,13 @@ TEXT runtime·open(SB),7,$-8 ...@@ -87,13 +88,13 @@ TEXT runtime·open(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·close(SB),7,$-8 TEXT runtime·close(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVL $6, AX MOVL $6, AX
SYSCALL SYSCALL
RET RET
TEXT runtime·read(SB),7,$-8 TEXT runtime·read(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVQ 16(SP), SI // arg 2 buf MOVQ 16(SP), SI // arg 2 buf
MOVL 24(SP), DX // arg 3 count MOVL 24(SP), DX // arg 3 count
...@@ -101,7 +102,7 @@ TEXT runtime·read(SB),7,$-8 ...@@ -101,7 +102,7 @@ TEXT runtime·read(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·write(SB),7,$-8 TEXT runtime·write(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - fd MOVL 8(SP), DI // arg 1 - fd
MOVQ 16(SP), SI // arg 2 - buf MOVQ 16(SP), SI // arg 2 - buf
MOVL 24(SP), DX // arg 3 - nbyte MOVL 24(SP), DX // arg 3 - nbyte
...@@ -109,7 +110,7 @@ TEXT runtime·write(SB),7,$-8 ...@@ -109,7 +110,7 @@ TEXT runtime·write(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -125,7 +126,7 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -125,7 +126,7 @@ TEXT runtime·usleep(SB),7,$16
SYSCALL SYSCALL
RET RET
TEXT runtime·raise(SB),7,$16 TEXT runtime·raise(SB),NOSPLIT,$16
MOVL $311, AX // sys__lwp_self MOVL $311, AX // sys__lwp_self
SYSCALL SYSCALL
MOVQ AX, DI // arg 1 - target MOVQ AX, DI // arg 1 - target
...@@ -134,7 +135,7 @@ TEXT runtime·raise(SB),7,$16 ...@@ -134,7 +135,7 @@ TEXT runtime·raise(SB),7,$16
SYSCALL SYSCALL
RET RET
TEXT runtime·setitimer(SB),7,$-8 TEXT runtime·setitimer(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - which MOVL 8(SP), DI // arg 1 - which
MOVQ 16(SP), SI // arg 2 - itv MOVQ 16(SP), SI // arg 2 - itv
MOVQ 24(SP), DX // arg 3 - oitv MOVQ 24(SP), DX // arg 3 - oitv
...@@ -143,7 +144,7 @@ TEXT runtime·setitimer(SB),7,$-8 ...@@ -143,7 +144,7 @@ TEXT runtime·setitimer(SB),7,$-8
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVQ $0, DI // arg 1 - clock_id MOVQ $0, DI // arg 1 - clock_id
LEAQ 8(SP), SI // arg 2 - tp LEAQ 8(SP), SI // arg 2 - tp
MOVL $427, AX // sys_clock_gettime MOVL $427, AX // sys_clock_gettime
...@@ -156,7 +157,7 @@ TEXT time·now(SB), 7, $32 ...@@ -156,7 +157,7 @@ TEXT time·now(SB), 7, $32
MOVL DX, nsec+8(FP) MOVL DX, nsec+8(FP)
RET RET
TEXT runtime·nanotime(SB),7,$32 TEXT runtime·nanotime(SB),NOSPLIT,$32
MOVQ $0, DI // arg 1 - clock_id MOVQ $0, DI // arg 1 - clock_id
LEAQ 8(SP), SI // arg 2 - tp LEAQ 8(SP), SI // arg 2 - tp
MOVL $427, AX // sys_clock_gettime MOVL $427, AX // sys_clock_gettime
...@@ -170,7 +171,7 @@ TEXT runtime·nanotime(SB),7,$32 ...@@ -170,7 +171,7 @@ TEXT runtime·nanotime(SB),7,$32
ADDQ DX, AX ADDQ DX, AX
RET RET
TEXT runtime·getcontext(SB),7,$-8 TEXT runtime·getcontext(SB),NOSPLIT,$-8
MOVQ 8(SP), DI // arg 1 - context MOVQ 8(SP), DI // arg 1 - context
MOVL $307, AX // sys_getcontext MOVL $307, AX // sys_getcontext
SYSCALL SYSCALL
...@@ -178,7 +179,7 @@ TEXT runtime·getcontext(SB),7,$-8 ...@@ -178,7 +179,7 @@ TEXT runtime·getcontext(SB),7,$-8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 - how MOVL 8(SP), DI // arg 1 - how
MOVQ 16(SP), SI // arg 2 - set MOVQ 16(SP), SI // arg 2 - set
MOVQ 24(SP), DX // arg 3 - oset MOVQ 24(SP), DX // arg 3 - oset
...@@ -188,7 +189,7 @@ TEXT runtime·sigprocmask(SB),7,$0 ...@@ -188,7 +189,7 @@ TEXT runtime·sigprocmask(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigreturn_tramp(SB),7,$-8 TEXT runtime·sigreturn_tramp(SB),NOSPLIT,$-8
MOVQ R15, DI // Load address of ucontext MOVQ R15, DI // Load address of ucontext
MOVQ $308, AX // sys_setcontext MOVQ $308, AX // sys_setcontext
SYSCALL SYSCALL
...@@ -196,7 +197,7 @@ TEXT runtime·sigreturn_tramp(SB),7,$-8 ...@@ -196,7 +197,7 @@ TEXT runtime·sigreturn_tramp(SB),7,$-8
MOVL $1, AX // sys_exit MOVL $1, AX // sys_exit
SYSCALL SYSCALL
TEXT runtime·sigaction(SB),7,$-8 TEXT runtime·sigaction(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - signum MOVL 8(SP), DI // arg 1 - signum
MOVQ 16(SP), SI // arg 2 - nsa MOVQ 16(SP), SI // arg 2 - nsa
MOVQ 24(SP), DX // arg 3 - osa MOVQ 24(SP), DX // arg 3 - osa
...@@ -209,7 +210,7 @@ TEXT runtime·sigaction(SB),7,$-8 ...@@ -209,7 +210,7 @@ TEXT runtime·sigaction(SB),7,$-8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigtramp(SB),7,$64 TEXT runtime·sigtramp(SB),NOSPLIT,$64
get_tls(BX) get_tls(BX)
// check that m exists // check that m exists
...@@ -242,7 +243,7 @@ TEXT runtime·sigtramp(SB),7,$64 ...@@ -242,7 +243,7 @@ TEXT runtime·sigtramp(SB),7,$64
MOVQ R10, g(BX) MOVQ R10, g(BX)
RET RET
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - addr MOVQ 8(SP), DI // arg 1 - addr
MOVQ 16(SP), SI // arg 2 - len MOVQ 16(SP), SI // arg 2 - len
MOVL 24(SP), DX // arg 3 - prot MOVL 24(SP), DX // arg 3 - prot
...@@ -257,7 +258,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -257,7 +258,7 @@ TEXT runtime·mmap(SB),7,$0
ADDQ $16, SP ADDQ $16, SP
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - addr MOVQ 8(SP), DI // arg 1 - addr
MOVQ 16(SP), SI // arg 2 - len MOVQ 16(SP), SI // arg 2 - len
MOVL $73, AX // sys_munmap MOVL $73, AX // sys_munmap
...@@ -267,7 +268,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -267,7 +268,7 @@ TEXT runtime·munmap(SB),7,$0
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVQ addr+0(FP), DI // arg 1 - addr MOVQ addr+0(FP), DI // arg 1 - addr
MOVQ len+8(FP), SI // arg 2 - len MOVQ len+8(FP), SI // arg 2 - len
MOVQ behav+16(FP), DX // arg 3 - behav MOVQ behav+16(FP), DX // arg 3 - behav
...@@ -276,7 +277,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -276,7 +277,7 @@ TEXT runtime·madvise(SB),7,$0
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVQ new+8(SP), DI // arg 1 - nss MOVQ new+8(SP), DI // arg 1 - nss
MOVQ old+16(SP), SI // arg 2 - oss MOVQ old+16(SP), SI // arg 2 - oss
MOVQ $281, AX // sys___sigaltstack14 MOVQ $281, AX // sys___sigaltstack14
...@@ -286,7 +287,7 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -286,7 +287,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
RET RET
// set tls base to DI // set tls base to DI
TEXT runtime·settls(SB),7,$8 TEXT runtime·settls(SB),NOSPLIT,$8
// adjust for ELF: wants to use -16(FS) and -8(FS) for g and m // adjust for ELF: wants to use -16(FS) and -8(FS) for g and m
ADDQ $16, DI // arg 1 - ptr ADDQ $16, DI // arg 1 - ptr
MOVQ $317, AX // sys__lwp_setprivate MOVQ $317, AX // sys__lwp_setprivate
...@@ -295,7 +296,7 @@ TEXT runtime·settls(SB),7,$8 ...@@ -295,7 +296,7 @@ TEXT runtime·settls(SB),7,$8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sysctl(SB),7,$0 TEXT runtime·sysctl(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - name MOVQ 8(SP), DI // arg 1 - name
MOVL 16(SP), SI // arg 2 - namelen MOVL 16(SP), SI // arg 2 - namelen
MOVQ 24(SP), DX // arg 3 - oldp MOVQ 24(SP), DX // arg 3 - oldp
......
...@@ -7,41 +7,42 @@ ...@@ -7,41 +7,42 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-4 TEXT runtime·exit(SB),NOSPLIT,$-4
MOVW 0(FP), R0 // arg 1 exit status MOVW 0(FP), R0 // arg 1 exit status
SWI $0xa00001 SWI $0xa00001
MOVW.CS $0, R8 // crash on syscall failure MOVW.CS $0, R8 // crash on syscall failure
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·exit1(SB),7,$-4 TEXT runtime·exit1(SB),NOSPLIT,$-4
SWI $0xa00136 // sys__lwp_exit SWI $0xa00136 // sys__lwp_exit
MOVW $1, R8 // crash MOVW $1, R8 // crash
MOVW R8, (R8) MOVW R8, (R8)
RET RET
TEXT runtime·open(SB),7,$-8 TEXT runtime·open(SB),NOSPLIT,$-8
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
SWI $0xa00005 SWI $0xa00005
RET RET
TEXT runtime·close(SB),7,$-8 TEXT runtime·close(SB),NOSPLIT,$-8
MOVW 0(FP), R0 MOVW 0(FP), R0
SWI $0xa00006 SWI $0xa00006
RET RET
TEXT runtime·read(SB),7,$-8 TEXT runtime·read(SB),NOSPLIT,$-8
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R1 MOVW 4(FP), R1
MOVW 8(FP), R2 MOVW 8(FP), R2
SWI $0xa00003 SWI $0xa00003
RET RET
TEXT runtime·write(SB),7,$-4 TEXT runtime·write(SB),NOSPLIT,$-4
MOVW 0(FP), R0 // arg 1 - fd MOVW 0(FP), R0 // arg 1 - fd
MOVW 4(FP), R1 // arg 2 - buf MOVW 4(FP), R1 // arg 2 - buf
MOVW 8(FP), R2 // arg 3 - nbyte MOVW 8(FP), R2 // arg 3 - nbyte
...@@ -49,18 +50,18 @@ TEXT runtime·write(SB),7,$-4 ...@@ -49,18 +50,18 @@ TEXT runtime·write(SB),7,$-4
RET RET
// int32 lwp_create(void *context, uintptr flags, void *lwpid) // int32 lwp_create(void *context, uintptr flags, void *lwpid)
TEXT runtime·lwp_create(SB),7,$0 TEXT runtime·lwp_create(SB),NOSPLIT,$0
MOVW context+0(FP), R0 MOVW context+0(FP), R0
MOVW flags+4(FP), R1 MOVW flags+4(FP), R1
MOVW lwpid+8(FP), R2 MOVW lwpid+8(FP), R2
SWI $0xa00135 // sys__lwp_create SWI $0xa00135 // sys__lwp_create
RET RET
TEXT runtime·osyield(SB),7,$0 TEXT runtime·osyield(SB),NOSPLIT,$0
SWI $0xa0015e // sys_sched_yield SWI $0xa0015e // sys_sched_yield
RET RET
TEXT runtime·lwp_park(SB),7,$0 TEXT runtime·lwp_park(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 - abstime MOVW 0(FP), R0 // arg 1 - abstime
MOVW 4(FP), R1 // arg 2 - unpark MOVW 4(FP), R1 // arg 2 - unpark
MOVW 8(FP), R2 // arg 3 - hint MOVW 8(FP), R2 // arg 3 - hint
...@@ -68,17 +69,17 @@ TEXT runtime·lwp_park(SB),7,$0 ...@@ -68,17 +69,17 @@ TEXT runtime·lwp_park(SB),7,$0
SWI $0xa001b2 // sys__lwp_park SWI $0xa001b2 // sys__lwp_park
RET RET
TEXT runtime·lwp_unpark(SB),7,$0 TEXT runtime·lwp_unpark(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 - lwp MOVW 0(FP), R0 // arg 1 - lwp
MOVW 4(FP), R1 // arg 2 - hint MOVW 4(FP), R1 // arg 2 - hint
SWI $0xa00141 // sys__lwp_unpark SWI $0xa00141 // sys__lwp_unpark
RET RET
TEXT runtime·lwp_self(SB),7,$0 TEXT runtime·lwp_self(SB),NOSPLIT,$0
SWI $0xa00137 // sys__lwp_self SWI $0xa00137 // sys__lwp_self
RET RET
TEXT runtime·lwp_tramp(SB),7,$0 TEXT runtime·lwp_tramp(SB),NOSPLIT,$0
MOVW R0, m MOVW R0, m
MOVW R1, g MOVW R1, g
...@@ -88,7 +89,7 @@ TEXT runtime·lwp_tramp(SB),7,$0 ...@@ -88,7 +89,7 @@ TEXT runtime·lwp_tramp(SB),7,$0
MOVW R8, (R8) MOVW R8, (R8)
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVW usec+0(FP), R0 MOVW usec+0(FP), R0
MOVW R0, R2 MOVW R0, R2
MOVW $1000000, R1 MOVW $1000000, R1
...@@ -107,13 +108,13 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -107,13 +108,13 @@ TEXT runtime·usleep(SB),7,$16
SWI $0xa001ae // sys_nanosleep SWI $0xa001ae // sys_nanosleep
RET RET
TEXT runtime·raise(SB),7,$16 TEXT runtime·raise(SB),NOSPLIT,$16
SWI $0xa00137 // sys__lwp_self, the returned R0 is arg 1 SWI $0xa00137 // sys__lwp_self, the returned R0 is arg 1
MOVW sig+0(FP), R1 // arg 2 - signal MOVW sig+0(FP), R1 // arg 2 - signal
SWI $0xa0013e // sys__lwp_kill SWI $0xa0013e // sys__lwp_kill
RET RET
TEXT runtime·setitimer(SB),7,$-4 TEXT runtime·setitimer(SB),NOSPLIT,$-4
MOVW 0(FP), R0 // arg 1 - which MOVW 0(FP), R0 // arg 1 - which
MOVW 4(FP), R1 // arg 2 - itv MOVW 4(FP), R1 // arg 2 - itv
MOVW 8(FP), R2 // arg 3 - oitv MOVW 8(FP), R2 // arg 3 - oitv
...@@ -121,7 +122,7 @@ TEXT runtime·setitimer(SB),7,$-4 ...@@ -121,7 +122,7 @@ TEXT runtime·setitimer(SB),7,$-4
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVW $0, R0 // CLOCK_REALTIME MOVW $0, R0 // CLOCK_REALTIME
MOVW $8(R13), R1 MOVW $8(R13), R1
SWI $0xa001ab // clock_gettime SWI $0xa001ab // clock_gettime
...@@ -137,7 +138,7 @@ TEXT time·now(SB), 7, $32 ...@@ -137,7 +138,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB), 7, $32 TEXT runtime·nanotime(SB), NOSPLIT, $32
MOVW $0, R0 // CLOCK_REALTIME MOVW $0, R0 // CLOCK_REALTIME
MOVW $8(R13), R1 MOVW $8(R13), R1
SWI $0xa001ab // clock_gettime SWI $0xa001ab // clock_gettime
...@@ -157,14 +158,14 @@ TEXT runtime·nanotime(SB), 7, $32 ...@@ -157,14 +158,14 @@ TEXT runtime·nanotime(SB), 7, $32
MOVW R1, 4(R3) MOVW R1, 4(R3)
RET RET
TEXT runtime·getcontext(SB),7,$-4 TEXT runtime·getcontext(SB),NOSPLIT,$-4
MOVW 0(FP), R0 // arg 1 - context MOVW 0(FP), R0 // arg 1 - context
SWI $0xa00133 // sys_getcontext SWI $0xa00133 // sys_getcontext
MOVW.CS $0, R8 // crash on syscall failure MOVW.CS $0, R8 // crash on syscall failure
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 - how MOVW 0(FP), R0 // arg 1 - how
MOVW 4(FP), R1 // arg 2 - set MOVW 4(FP), R1 // arg 2 - set
MOVW 8(FP), R2 // arg 3 - oset MOVW 8(FP), R2 // arg 3 - oset
...@@ -173,7 +174,7 @@ TEXT runtime·sigprocmask(SB),7,$0 ...@@ -173,7 +174,7 @@ TEXT runtime·sigprocmask(SB),7,$0
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·sigreturn_tramp(SB),7,$-4 TEXT runtime·sigreturn_tramp(SB),NOSPLIT,$-4
// on entry, SP points to siginfo, we add sizeof(ucontext) // on entry, SP points to siginfo, we add sizeof(ucontext)
// to SP to get a pointer to ucontext. // to SP to get a pointer to ucontext.
ADD $0x80, R13, R0 // 0x80 == sizeof(UcontextT) ADD $0x80, R13, R0 // 0x80 == sizeof(UcontextT)
...@@ -183,7 +184,7 @@ TEXT runtime·sigreturn_tramp(SB),7,$-4 ...@@ -183,7 +184,7 @@ TEXT runtime·sigreturn_tramp(SB),7,$-4
SWI $0xa00001 // sys_exit SWI $0xa00001 // sys_exit
B -2(PC) // continue exit B -2(PC) // continue exit
TEXT runtime·sigaction(SB),7,$4 TEXT runtime·sigaction(SB),NOSPLIT,$4
MOVW 0(FP), R0 // arg 1 - signum MOVW 0(FP), R0 // arg 1 - signum
MOVW 4(FP), R1 // arg 2 - nsa MOVW 4(FP), R1 // arg 2 - nsa
MOVW 8(FP), R2 // arg 3 - osa MOVW 8(FP), R2 // arg 3 - osa
...@@ -197,7 +198,7 @@ TEXT runtime·sigaction(SB),7,$4 ...@@ -197,7 +198,7 @@ TEXT runtime·sigaction(SB),7,$4
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·sigtramp(SB),7,$24 TEXT runtime·sigtramp(SB),NOSPLIT,$24
// this might be called in external code context, // this might be called in external code context,
// where g and m are not set. // where g and m are not set.
// first save R0, because _cgo_load_gm will clobber it // first save R0, because _cgo_load_gm will clobber it
...@@ -231,7 +232,7 @@ TEXT runtime·sigtramp(SB),7,$24 ...@@ -231,7 +232,7 @@ TEXT runtime·sigtramp(SB),7,$24
MOVW 20(R13), g MOVW 20(R13), g
RET RET
TEXT runtime·mmap(SB),7,$12 TEXT runtime·mmap(SB),NOSPLIT,$12
MOVW 0(FP), R0 // arg 1 - addr MOVW 0(FP), R0 // arg 1 - addr
MOVW 4(FP), R1 // arg 2 - len MOVW 4(FP), R1 // arg 2 - len
MOVW 8(FP), R2 // arg 3 - prot MOVW 8(FP), R2 // arg 3 - prot
...@@ -249,7 +250,7 @@ TEXT runtime·mmap(SB),7,$12 ...@@ -249,7 +250,7 @@ TEXT runtime·mmap(SB),7,$12
SUB $4, R13 SUB $4, R13
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 - addr MOVW 0(FP), R0 // arg 1 - addr
MOVW 4(FP), R1 // arg 2 - len MOVW 4(FP), R1 // arg 2 - len
SWI $0xa00049 // sys_munmap SWI $0xa00049 // sys_munmap
...@@ -257,7 +258,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -257,7 +258,7 @@ TEXT runtime·munmap(SB),7,$0
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVW 0(FP), R0 // arg 1 - addr MOVW 0(FP), R0 // arg 1 - addr
MOVW 4(FP), R1 // arg 2 - len MOVW 4(FP), R1 // arg 2 - len
MOVW 8(FP), R2 // arg 3 - behav MOVW 8(FP), R2 // arg 3 - behav
...@@ -265,7 +266,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -265,7 +266,7 @@ TEXT runtime·madvise(SB),7,$0
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·sigaltstack(SB),7,$-4 TEXT runtime·sigaltstack(SB),NOSPLIT,$-4
MOVW 0(FP), R0 // arg 1 - nss MOVW 0(FP), R0 // arg 1 - nss
MOVW 4(FP), R1 // arg 2 - oss MOVW 4(FP), R1 // arg 2 - oss
SWI $0xa00119 // sys___sigaltstack14 SWI $0xa00119 // sys___sigaltstack14
...@@ -273,7 +274,7 @@ TEXT runtime·sigaltstack(SB),7,$-4 ...@@ -273,7 +274,7 @@ TEXT runtime·sigaltstack(SB),7,$-4
MOVW.CS R8, (R8) MOVW.CS R8, (R8)
RET RET
TEXT runtime·sysctl(SB),7,$8 TEXT runtime·sysctl(SB),NOSPLIT,$8
MOVW 0(FP), R0 // arg 1 - name MOVW 0(FP), R0 // arg 1 - name
MOVW 4(FP), R1 // arg 2 - namelen MOVW 4(FP), R1 // arg 2 - namelen
MOVW 8(FP), R2 // arg 3 - oldp MOVW 8(FP), R2 // arg 3 - oldp
...@@ -287,7 +288,7 @@ TEXT runtime·sysctl(SB),7,$8 ...@@ -287,7 +288,7 @@ TEXT runtime·sysctl(SB),7,$8
SUB $4, R13 SUB $4, R13
RET RET
TEXT runtime·casp(SB),7,$0 TEXT runtime·casp(SB),NOSPLIT,$0
B runtime·cas(SB) B runtime·cas(SB)
// TODO(minux): this is only valid for ARMv6+ // TODO(minux): this is only valid for ARMv6+
...@@ -298,5 +299,5 @@ TEXT runtime·casp(SB),7,$0 ...@@ -298,5 +299,5 @@ TEXT runtime·casp(SB),7,$0
// return 1; // return 1;
// }else // }else
// return 0; // return 0;
TEXT runtime·cas(SB),7,$0 TEXT runtime·cas(SB),NOSPLIT,$0
B runtime·armcas(SB) B runtime·armcas(SB)
...@@ -7,15 +7,16 @@ ...@@ -7,15 +7,16 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-4 TEXT runtime·exit(SB),NOSPLIT,$-4
MOVL $1, AX MOVL $1, AX
INT $0x80 INT $0x80
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·exit1(SB),7,$8 TEXT runtime·exit1(SB),NOSPLIT,$8
MOVL $0, 0(SP) MOVL $0, 0(SP)
MOVL $0, 4(SP) // arg 1 - notdead MOVL $0, 4(SP) // arg 1 - notdead
MOVL $302, AX // sys___threxit MOVL $302, AX // sys___threxit
...@@ -24,27 +25,27 @@ TEXT runtime·exit1(SB),7,$8 ...@@ -24,27 +25,27 @@ TEXT runtime·exit1(SB),7,$8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$-4 TEXT runtime·open(SB),NOSPLIT,$-4
MOVL $5, AX MOVL $5, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·close(SB),7,$-4 TEXT runtime·close(SB),NOSPLIT,$-4
MOVL $6, AX MOVL $6, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·read(SB),7,$-4 TEXT runtime·read(SB),NOSPLIT,$-4
MOVL $3, AX MOVL $3, AX
INT $0x80 INT $0x80
RET RET
TEXT runtime·write(SB),7,$-4 TEXT runtime·write(SB),NOSPLIT,$-4
MOVL $4, AX // sys_write MOVL $4, AX // sys_write
INT $0x80 INT $0x80
RET RET
TEXT runtime·usleep(SB),7,$20 TEXT runtime·usleep(SB),NOSPLIT,$20
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -62,7 +63,7 @@ TEXT runtime·usleep(SB),7,$20 ...@@ -62,7 +63,7 @@ TEXT runtime·usleep(SB),7,$20
INT $0x80 INT $0x80
RET RET
TEXT runtime·raise(SB),7,$12 TEXT runtime·raise(SB),NOSPLIT,$12
MOVL $299, AX // sys_getthrid MOVL $299, AX // sys_getthrid
INT $0x80 INT $0x80
MOVL $0, 0(SP) MOVL $0, 0(SP)
...@@ -73,7 +74,7 @@ TEXT runtime·raise(SB),7,$12 ...@@ -73,7 +74,7 @@ TEXT runtime·raise(SB),7,$12
INT $0x80 INT $0x80
RET RET
TEXT runtime·mmap(SB),7,$36 TEXT runtime·mmap(SB),NOSPLIT,$36
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
...@@ -91,27 +92,27 @@ TEXT runtime·mmap(SB),7,$36 ...@@ -91,27 +92,27 @@ TEXT runtime·mmap(SB),7,$36
INT $0x80 INT $0x80
RET RET
TEXT runtime·munmap(SB),7,$-4 TEXT runtime·munmap(SB),NOSPLIT,$-4
MOVL $73, AX // sys_munmap MOVL $73, AX // sys_munmap
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·madvise(SB),7,$-4 TEXT runtime·madvise(SB),NOSPLIT,$-4
MOVL $75, AX // sys_madvise MOVL $75, AX // sys_madvise
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·setitimer(SB),7,$-4 TEXT runtime·setitimer(SB),NOSPLIT,$-4
MOVL $83, AX MOVL $83, AX
INT $0x80 INT $0x80
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVL $232, AX MOVL $232, AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL $0, 4(SP) MOVL $0, 4(SP)
...@@ -128,7 +129,7 @@ TEXT time·now(SB), 7, $32 ...@@ -128,7 +129,7 @@ TEXT time·now(SB), 7, $32
// int64 nanotime(void) so really // int64 nanotime(void) so really
// void nanotime(int64 *nsec) // void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB),7,$32 TEXT runtime·nanotime(SB),NOSPLIT,$32
MOVL $232, AX MOVL $232, AX
LEAL 12(SP), BX LEAL 12(SP), BX
MOVL $0, 4(SP) MOVL $0, 4(SP)
...@@ -149,14 +150,14 @@ TEXT runtime·nanotime(SB),7,$32 ...@@ -149,14 +150,14 @@ TEXT runtime·nanotime(SB),7,$32
MOVL DX, 4(DI) MOVL DX, 4(DI)
RET RET
TEXT runtime·sigaction(SB),7,$-4 TEXT runtime·sigaction(SB),NOSPLIT,$-4
MOVL $46, AX // sys_sigaction MOVL $46, AX // sys_sigaction
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigprocmask(SB),7,$-4 TEXT runtime·sigprocmask(SB),NOSPLIT,$-4
MOVL $48, AX // sys_sigprocmask MOVL $48, AX // sys_sigprocmask
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -164,7 +165,7 @@ TEXT runtime·sigprocmask(SB),7,$-4 ...@@ -164,7 +165,7 @@ TEXT runtime·sigprocmask(SB),7,$-4
MOVL AX, oset+0(FP) MOVL AX, oset+0(FP)
RET RET
TEXT runtime·sigtramp(SB),7,$44 TEXT runtime·sigtramp(SB),NOSPLIT,$44
get_tls(CX) get_tls(CX)
// check that m exists // check that m exists
...@@ -212,7 +213,7 @@ sigtramp_ret: ...@@ -212,7 +213,7 @@ sigtramp_ret:
RET RET
// int32 tfork(void *param, uintptr psize, M *mp, G *gp, void (*fn)(void)); // int32 tfork(void *param, uintptr psize, M *mp, G *gp, void (*fn)(void));
TEXT runtime·tfork(SB),7,$12 TEXT runtime·tfork(SB),NOSPLIT,$12
// Copy mp, gp and fn from the parent stack onto the child stack. // Copy mp, gp and fn from the parent stack onto the child stack.
MOVL params+4(FP), AX MOVL params+4(FP), AX
...@@ -289,7 +290,7 @@ TEXT runtime·tfork(SB),7,$12 ...@@ -289,7 +290,7 @@ TEXT runtime·tfork(SB),7,$12
MOVL $0x1234, 0x1005 MOVL $0x1234, 0x1005
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVL $288, AX // sys_sigaltstack MOVL $288, AX // sys_sigaltstack
MOVL new+4(SP), BX MOVL new+4(SP), BX
MOVL old+8(SP), CX MOVL old+8(SP), CX
...@@ -299,14 +300,14 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -299,14 +300,14 @@ TEXT runtime·sigaltstack(SB),7,$-8
INT $3 INT $3
RET RET
TEXT runtime·setldt(SB),7,$4 TEXT runtime·setldt(SB),NOSPLIT,$4
// Under OpenBSD we set the GS base instead of messing with the LDT. // Under OpenBSD we set the GS base instead of messing with the LDT.
MOVL tls0+4(FP), AX MOVL tls0+4(FP), AX
MOVL AX, 0(SP) MOVL AX, 0(SP)
CALL runtime·settls(SB) CALL runtime·settls(SB)
RET RET
TEXT runtime·settls(SB),7,$8 TEXT runtime·settls(SB),NOSPLIT,$8
// adjust for ELF: wants to use -8(GS) and -4(GS) for g and m // adjust for ELF: wants to use -8(GS) and -4(GS) for g and m
MOVL tlsbase+0(FP), CX MOVL tlsbase+0(FP), CX
ADDL $8, CX ADDL $8, CX
...@@ -318,22 +319,22 @@ TEXT runtime·settls(SB),7,$8 ...@@ -318,22 +319,22 @@ TEXT runtime·settls(SB),7,$8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·osyield(SB),7,$-4 TEXT runtime·osyield(SB),NOSPLIT,$-4
MOVL $298, AX // sys_sched_yield MOVL $298, AX // sys_sched_yield
INT $0x80 INT $0x80
RET RET
TEXT runtime·thrsleep(SB),7,$-4 TEXT runtime·thrsleep(SB),NOSPLIT,$-4
MOVL $300, AX // sys___thrsleep MOVL $300, AX // sys___thrsleep
INT $0x80 INT $0x80
RET RET
TEXT runtime·thrwakeup(SB),7,$-4 TEXT runtime·thrwakeup(SB),NOSPLIT,$-4
MOVL $301, AX // sys___thrwakeup MOVL $301, AX // sys___thrwakeup
INT $0x80 INT $0x80
RET RET
TEXT runtime·sysctl(SB),7,$28 TEXT runtime·sysctl(SB),NOSPLIT,$28
LEAL arg0+0(FP), SI LEAL arg0+0(FP), SI
LEAL 4(SP), DI LEAL 4(SP), DI
CLD CLD
...@@ -352,7 +353,7 @@ TEXT runtime·sysctl(SB),7,$28 ...@@ -352,7 +353,7 @@ TEXT runtime·sysctl(SB),7,$28
RET RET
// int32 runtime·kqueue(void); // int32 runtime·kqueue(void);
TEXT runtime·kqueue(SB),7,$0 TEXT runtime·kqueue(SB),NOSPLIT,$0
MOVL $362, AX MOVL $362, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -360,7 +361,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -360,7 +361,7 @@ TEXT runtime·kqueue(SB),7,$0
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
TEXT runtime·kevent(SB),7,$0 TEXT runtime·kevent(SB),NOSPLIT,$0
MOVL $363, AX MOVL $363, AX
INT $0x80 INT $0x80
JAE 2(PC) JAE 2(PC)
...@@ -368,7 +369,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -368,7 +369,7 @@ TEXT runtime·kevent(SB),7,$0
RET RET
// int32 runtime·closeonexec(int32 fd); // int32 runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$32 TEXT runtime·closeonexec(SB),NOSPLIT,$32
MOVL $92, AX // fcntl MOVL $92, AX // fcntl
// 0(SP) is where the caller PC would be; kernel skips it // 0(SP) is where the caller PC would be; kernel skips it
MOVL fd+0(FP), BX MOVL fd+0(FP), BX
......
...@@ -7,9 +7,10 @@ ...@@ -7,9 +7,10 @@
// //
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// int64 tfork(void *param, uintptr psize, M *mp, G *gp, void (*fn)(void)); // int64 tfork(void *param, uintptr psize, M *mp, G *gp, void (*fn)(void));
TEXT runtime·tfork(SB),7,$32 TEXT runtime·tfork(SB),NOSPLIT,$32
// Copy mp, gp and fn off parent stack for use by child. // Copy mp, gp and fn off parent stack for use by child.
MOVQ mm+16(FP), R8 MOVQ mm+16(FP), R8
...@@ -50,12 +51,12 @@ TEXT runtime·tfork(SB),7,$32 ...@@ -50,12 +51,12 @@ TEXT runtime·tfork(SB),7,$32
SYSCALL SYSCALL
JMP -3(PC) // keep exiting JMP -3(PC) // keep exiting
TEXT runtime·osyield(SB),7,$0 TEXT runtime·osyield(SB),NOSPLIT,$0
MOVL $298, AX // sys_sched_yield MOVL $298, AX // sys_sched_yield
SYSCALL SYSCALL
RET RET
TEXT runtime·thrsleep(SB),7,$0 TEXT runtime·thrsleep(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - ident MOVQ 8(SP), DI // arg 1 - ident
MOVL 16(SP), SI // arg 2 - clock_id MOVL 16(SP), SI // arg 2 - clock_id
MOVQ 24(SP), DX // arg 3 - tp MOVQ 24(SP), DX // arg 3 - tp
...@@ -65,7 +66,7 @@ TEXT runtime·thrsleep(SB),7,$0 ...@@ -65,7 +66,7 @@ TEXT runtime·thrsleep(SB),7,$0
SYSCALL SYSCALL
RET RET
TEXT runtime·thrwakeup(SB),7,$0 TEXT runtime·thrwakeup(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - ident MOVQ 8(SP), DI // arg 1 - ident
MOVL 16(SP), SI // arg 2 - n MOVL 16(SP), SI // arg 2 - n
MOVL $301, AX // sys___thrwakeup MOVL $301, AX // sys___thrwakeup
...@@ -73,21 +74,21 @@ TEXT runtime·thrwakeup(SB),7,$0 ...@@ -73,21 +74,21 @@ TEXT runtime·thrwakeup(SB),7,$0
RET RET
// Exit the entire program (like C exit) // Exit the entire program (like C exit)
TEXT runtime·exit(SB),7,$-8 TEXT runtime·exit(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - exit status MOVL 8(SP), DI // arg 1 - exit status
MOVL $1, AX // sys_exit MOVL $1, AX // sys_exit
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·exit1(SB),7,$-8 TEXT runtime·exit1(SB),NOSPLIT,$-8
MOVQ $0, DI // arg 1 - notdead MOVQ $0, DI // arg 1 - notdead
MOVL $302, AX // sys___threxit MOVL $302, AX // sys___threxit
SYSCALL SYSCALL
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·open(SB),7,$-8 TEXT runtime·open(SB),NOSPLIT,$-8
MOVQ 8(SP), DI // arg 1 pathname MOVQ 8(SP), DI // arg 1 pathname
MOVL 16(SP), SI // arg 2 flags MOVL 16(SP), SI // arg 2 flags
MOVL 20(SP), DX // arg 3 mode MOVL 20(SP), DX // arg 3 mode
...@@ -95,13 +96,13 @@ TEXT runtime·open(SB),7,$-8 ...@@ -95,13 +96,13 @@ TEXT runtime·open(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·close(SB),7,$-8 TEXT runtime·close(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVL $6, AX MOVL $6, AX
SYSCALL SYSCALL
RET RET
TEXT runtime·read(SB),7,$-8 TEXT runtime·read(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 fd MOVL 8(SP), DI // arg 1 fd
MOVQ 16(SP), SI // arg 2 buf MOVQ 16(SP), SI // arg 2 buf
MOVL 24(SP), DX // arg 3 count MOVL 24(SP), DX // arg 3 count
...@@ -109,7 +110,7 @@ TEXT runtime·read(SB),7,$-8 ...@@ -109,7 +110,7 @@ TEXT runtime·read(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·write(SB),7,$-8 TEXT runtime·write(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - fd MOVL 8(SP), DI // arg 1 - fd
MOVQ 16(SP), SI // arg 2 - buf MOVQ 16(SP), SI // arg 2 - buf
MOVL 24(SP), DX // arg 3 - nbyte MOVL 24(SP), DX // arg 3 - nbyte
...@@ -117,7 +118,7 @@ TEXT runtime·write(SB),7,$-8 ...@@ -117,7 +118,7 @@ TEXT runtime·write(SB),7,$-8
SYSCALL SYSCALL
RET RET
TEXT runtime·usleep(SB),7,$16 TEXT runtime·usleep(SB),NOSPLIT,$16
MOVL $0, DX MOVL $0, DX
MOVL usec+0(FP), AX MOVL usec+0(FP), AX
MOVL $1000000, CX MOVL $1000000, CX
...@@ -133,7 +134,7 @@ TEXT runtime·usleep(SB),7,$16 ...@@ -133,7 +134,7 @@ TEXT runtime·usleep(SB),7,$16
SYSCALL SYSCALL
RET RET
TEXT runtime·raise(SB),7,$16 TEXT runtime·raise(SB),NOSPLIT,$16
MOVL $299, AX // sys_getthrid MOVL $299, AX // sys_getthrid
SYSCALL SYSCALL
MOVQ AX, DI // arg 1 - pid MOVQ AX, DI // arg 1 - pid
...@@ -142,7 +143,7 @@ TEXT runtime·raise(SB),7,$16 ...@@ -142,7 +143,7 @@ TEXT runtime·raise(SB),7,$16
SYSCALL SYSCALL
RET RET
TEXT runtime·setitimer(SB),7,$-8 TEXT runtime·setitimer(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - which MOVL 8(SP), DI // arg 1 - which
MOVQ 16(SP), SI // arg 2 - itv MOVQ 16(SP), SI // arg 2 - itv
MOVQ 24(SP), DX // arg 3 - oitv MOVQ 24(SP), DX // arg 3 - oitv
...@@ -151,7 +152,7 @@ TEXT runtime·setitimer(SB),7,$-8 ...@@ -151,7 +152,7 @@ TEXT runtime·setitimer(SB),7,$-8
RET RET
// func now() (sec int64, nsec int32) // func now() (sec int64, nsec int32)
TEXT time·now(SB), 7, $32 TEXT time·now(SB), NOSPLIT, $32
MOVQ $0, DI // arg 1 - clock_id MOVQ $0, DI // arg 1 - clock_id
LEAQ 8(SP), SI // arg 2 - tp LEAQ 8(SP), SI // arg 2 - tp
MOVL $232, AX // sys_clock_gettime MOVL $232, AX // sys_clock_gettime
...@@ -164,7 +165,7 @@ TEXT time·now(SB), 7, $32 ...@@ -164,7 +165,7 @@ TEXT time·now(SB), 7, $32
MOVL DX, nsec+8(FP) MOVL DX, nsec+8(FP)
RET RET
TEXT runtime·nanotime(SB),7,$24 TEXT runtime·nanotime(SB),NOSPLIT,$24
MOVQ $0, DI // arg 1 - clock_id MOVQ $0, DI // arg 1 - clock_id
LEAQ 8(SP), SI // arg 2 - tp LEAQ 8(SP), SI // arg 2 - tp
MOVL $232, AX // sys_clock_gettime MOVL $232, AX // sys_clock_gettime
...@@ -178,7 +179,7 @@ TEXT runtime·nanotime(SB),7,$24 ...@@ -178,7 +179,7 @@ TEXT runtime·nanotime(SB),7,$24
ADDQ DX, AX ADDQ DX, AX
RET RET
TEXT runtime·sigaction(SB),7,$-8 TEXT runtime·sigaction(SB),NOSPLIT,$-8
MOVL 8(SP), DI // arg 1 - signum MOVL 8(SP), DI // arg 1 - signum
MOVQ 16(SP), SI // arg 2 - nsa MOVQ 16(SP), SI // arg 2 - nsa
MOVQ 24(SP), DX // arg 3 - osa MOVQ 24(SP), DX // arg 3 - osa
...@@ -188,7 +189,7 @@ TEXT runtime·sigaction(SB),7,$-8 ...@@ -188,7 +189,7 @@ TEXT runtime·sigaction(SB),7,$-8
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sigprocmask(SB),7,$0 TEXT runtime·sigprocmask(SB),NOSPLIT,$0
MOVL 8(SP), DI // arg 1 - how MOVL 8(SP), DI // arg 1 - how
MOVL 12(SP), SI // arg 2 - set MOVL 12(SP), SI // arg 2 - set
MOVL $48, AX // sys_sigprocmask MOVL $48, AX // sys_sigprocmask
...@@ -198,7 +199,7 @@ TEXT runtime·sigprocmask(SB),7,$0 ...@@ -198,7 +199,7 @@ TEXT runtime·sigprocmask(SB),7,$0
MOVL AX, oset+0(FP) // Return oset MOVL AX, oset+0(FP) // Return oset
RET RET
TEXT runtime·sigtramp(SB),7,$64 TEXT runtime·sigtramp(SB),NOSPLIT,$64
get_tls(BX) get_tls(BX)
// check that m exists // check that m exists
...@@ -231,7 +232,7 @@ TEXT runtime·sigtramp(SB),7,$64 ...@@ -231,7 +232,7 @@ TEXT runtime·sigtramp(SB),7,$64
MOVQ R10, g(BX) MOVQ R10, g(BX)
RET RET
TEXT runtime·mmap(SB),7,$0 TEXT runtime·mmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - addr MOVQ 8(SP), DI // arg 1 - addr
MOVQ 16(SP), SI // arg 2 - len MOVQ 16(SP), SI // arg 2 - len
MOVL 24(SP), DX // arg 3 - prot MOVL 24(SP), DX // arg 3 - prot
...@@ -246,7 +247,7 @@ TEXT runtime·mmap(SB),7,$0 ...@@ -246,7 +247,7 @@ TEXT runtime·mmap(SB),7,$0
ADDQ $16, SP ADDQ $16, SP
RET RET
TEXT runtime·munmap(SB),7,$0 TEXT runtime·munmap(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - addr MOVQ 8(SP), DI // arg 1 - addr
MOVQ 16(SP), SI // arg 2 - len MOVQ 16(SP), SI // arg 2 - len
MOVL $73, AX // sys_munmap MOVL $73, AX // sys_munmap
...@@ -255,7 +256,7 @@ TEXT runtime·munmap(SB),7,$0 ...@@ -255,7 +256,7 @@ TEXT runtime·munmap(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·madvise(SB),7,$0 TEXT runtime·madvise(SB),NOSPLIT,$0
MOVQ addr+0(FP), DI // arg 1 - addr MOVQ addr+0(FP), DI // arg 1 - addr
MOVQ len+8(FP), SI // arg 2 - len MOVQ len+8(FP), SI // arg 2 - len
MOVQ behav+16(FP), DX // arg 3 - behav MOVQ behav+16(FP), DX // arg 3 - behav
...@@ -264,7 +265,7 @@ TEXT runtime·madvise(SB),7,$0 ...@@ -264,7 +265,7 @@ TEXT runtime·madvise(SB),7,$0
// ignore failure - maybe pages are locked // ignore failure - maybe pages are locked
RET RET
TEXT runtime·sigaltstack(SB),7,$-8 TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
MOVQ new+8(SP), DI // arg 1 - nss MOVQ new+8(SP), DI // arg 1 - nss
MOVQ old+16(SP), SI // arg 2 - oss MOVQ old+16(SP), SI // arg 2 - oss
MOVQ $288, AX // sys_sigaltstack MOVQ $288, AX // sys_sigaltstack
...@@ -274,7 +275,7 @@ TEXT runtime·sigaltstack(SB),7,$-8 ...@@ -274,7 +275,7 @@ TEXT runtime·sigaltstack(SB),7,$-8
RET RET
// set tls base to DI // set tls base to DI
TEXT runtime·settls(SB),7,$0 TEXT runtime·settls(SB),NOSPLIT,$0
// adjust for ELF: wants to use -16(FS) and -8(FS) for g and m // adjust for ELF: wants to use -16(FS) and -8(FS) for g and m
ADDQ $16, DI ADDQ $16, DI
MOVQ $329, AX // sys___settcb MOVQ $329, AX // sys___settcb
...@@ -283,7 +284,7 @@ TEXT runtime·settls(SB),7,$0 ...@@ -283,7 +284,7 @@ TEXT runtime·settls(SB),7,$0
MOVL $0xf1, 0xf1 // crash MOVL $0xf1, 0xf1 // crash
RET RET
TEXT runtime·sysctl(SB),7,$0 TEXT runtime·sysctl(SB),NOSPLIT,$0
MOVQ 8(SP), DI // arg 1 - name MOVQ 8(SP), DI // arg 1 - name
MOVL 16(SP), SI // arg 2 - namelen MOVL 16(SP), SI // arg 2 - namelen
MOVQ 24(SP), DX // arg 3 - oldp MOVQ 24(SP), DX // arg 3 - oldp
...@@ -299,7 +300,7 @@ TEXT runtime·sysctl(SB),7,$0 ...@@ -299,7 +300,7 @@ TEXT runtime·sysctl(SB),7,$0
RET RET
// int32 runtime·kqueue(void); // int32 runtime·kqueue(void);
TEXT runtime·kqueue(SB),7,$0 TEXT runtime·kqueue(SB),NOSPLIT,$0
MOVQ $0, DI MOVQ $0, DI
MOVQ $0, SI MOVQ $0, SI
MOVQ $0, DX MOVQ $0, DX
...@@ -310,7 +311,7 @@ TEXT runtime·kqueue(SB),7,$0 ...@@ -310,7 +311,7 @@ TEXT runtime·kqueue(SB),7,$0
RET RET
// int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout); // int32 runtime·kevent(int kq, Kevent *changelist, int nchanges, Kevent *eventlist, int nevents, Timespec *timeout);
TEXT runtime·kevent(SB),7,$0 TEXT runtime·kevent(SB),NOSPLIT,$0
MOVL 8(SP), DI MOVL 8(SP), DI
MOVQ 16(SP), SI MOVQ 16(SP), SI
MOVL 24(SP), DX MOVL 24(SP), DX
...@@ -324,7 +325,7 @@ TEXT runtime·kevent(SB),7,$0 ...@@ -324,7 +325,7 @@ TEXT runtime·kevent(SB),7,$0
RET RET
// void runtime·closeonexec(int32 fd); // void runtime·closeonexec(int32 fd);
TEXT runtime·closeonexec(SB),7,$0 TEXT runtime·closeonexec(SB),NOSPLIT,$0
MOVL 8(SP), DI // fd MOVL 8(SP), DI // fd
MOVQ $2, SI // F_SETFD MOVQ $2, SI // F_SETFD
MOVQ $1, DX // FD_CLOEXEC MOVQ $1, DX // FD_CLOEXEC
......
...@@ -3,27 +3,28 @@ ...@@ -3,27 +3,28 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// setldt(int entry, int address, int limit) // setldt(int entry, int address, int limit)
TEXT runtime·setldt(SB),7,$0 TEXT runtime·setldt(SB),NOSPLIT,$0
RET RET
TEXT runtime·open(SB),7,$0 TEXT runtime·open(SB),NOSPLIT,$0
MOVL $14, AX MOVL $14, AX
INT $64 INT $64
RET RET
TEXT runtime·pread(SB),7,$0 TEXT runtime·pread(SB),NOSPLIT,$0
MOVL $50, AX MOVL $50, AX
INT $64 INT $64
RET RET
TEXT runtime·pwrite(SB),7,$0 TEXT runtime·pwrite(SB),NOSPLIT,$0
MOVL $51, AX MOVL $51, AX
INT $64 INT $64
RET RET
TEXT runtime·seek(SB),7,$0 TEXT runtime·seek(SB),NOSPLIT,$0
MOVL $39, AX MOVL $39, AX
INT $64 INT $64
CMPL AX, $-1 CMPL AX, $-1
...@@ -33,52 +34,52 @@ TEXT runtime·seek(SB),7,$0 ...@@ -33,52 +34,52 @@ TEXT runtime·seek(SB),7,$0
MOVL AX, 4(CX) MOVL AX, 4(CX)
RET RET
TEXT runtime·close(SB),7,$0 TEXT runtime·close(SB),NOSPLIT,$0
MOVL $4, AX MOVL $4, AX
INT $64 INT $64
RET RET
TEXT runtime·exits(SB),7,$0 TEXT runtime·exits(SB),NOSPLIT,$0
MOVL $8, AX MOVL $8, AX
INT $64 INT $64
RET RET
TEXT runtime·brk_(SB),7,$0 TEXT runtime·brk_(SB),NOSPLIT,$0
MOVL $24, AX MOVL $24, AX
INT $64 INT $64
RET RET
TEXT runtime·sleep(SB),7,$0 TEXT runtime·sleep(SB),NOSPLIT,$0
MOVL $17, AX MOVL $17, AX
INT $64 INT $64
RET RET
TEXT runtime·plan9_semacquire(SB),7,$0 TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0
MOVL $37, AX MOVL $37, AX
INT $64 INT $64
RET RET
TEXT runtime·plan9_tsemacquire(SB),7,$0 TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
MOVL $52, AX MOVL $52, AX
INT $64 INT $64
RET RET
TEXT runtime·notify(SB),7,$0 TEXT runtime·notify(SB),NOSPLIT,$0
MOVL $28, AX MOVL $28, AX
INT $64 INT $64
RET RET
TEXT runtime·noted(SB),7,$0 TEXT runtime·noted(SB),NOSPLIT,$0
MOVL $29, AX MOVL $29, AX
INT $64 INT $64
RET RET
TEXT runtime·plan9_semrelease(SB),7,$0 TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0
MOVL $38, AX MOVL $38, AX
INT $64 INT $64
RET RET
TEXT runtime·rfork(SB),7,$0 TEXT runtime·rfork(SB),NOSPLIT,$0
MOVL $19, AX // rfork MOVL $19, AX // rfork
INT $64 INT $64
...@@ -120,7 +121,7 @@ TEXT runtime·rfork(SB),7,$0 ...@@ -120,7 +121,7 @@ TEXT runtime·rfork(SB),7,$0
RET RET
// void sigtramp(void *ureg, int8 *note) // void sigtramp(void *ureg, int8 *note)
TEXT runtime·sigtramp(SB),7,$0 TEXT runtime·sigtramp(SB),NOSPLIT,$0
get_tls(AX) get_tls(AX)
// check that m exists // check that m exists
...@@ -168,7 +169,7 @@ TEXT runtime·sigtramp(SB),7,$0 ...@@ -168,7 +169,7 @@ TEXT runtime·sigtramp(SB),7,$0
RET RET
// Only used by the 64-bit runtime. // Only used by the 64-bit runtime.
TEXT runtime·setfpmasks(SB),7,$0 TEXT runtime·setfpmasks(SB),NOSPLIT,$0
RET RET
#define ERRMAX 128 /* from os_plan9.h */ #define ERRMAX 128 /* from os_plan9.h */
...@@ -179,7 +180,7 @@ TEXT runtime·setfpmasks(SB),7,$0 ...@@ -179,7 +180,7 @@ TEXT runtime·setfpmasks(SB),7,$0
// in entersyscall mode, without going // in entersyscall mode, without going
// through the allocator (issue 4994). // through the allocator (issue 4994).
// See ../syscall/asm_plan9_386.s:/·Syscall/ // See ../syscall/asm_plan9_386.s:/·Syscall/
TEXT runtime·errstr(SB),7,$0 TEXT runtime·errstr(SB),NOSPLIT,$0
get_tls(AX) get_tls(AX)
MOVL m(AX), BX MOVL m(AX), BX
MOVL m_errstr(BX), CX MOVL m_errstr(BX), CX
......
...@@ -3,38 +3,39 @@ ...@@ -3,38 +3,39 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// setldt(int entry, int address, int limit) // setldt(int entry, int address, int limit)
TEXT runtime·setldt(SB),7,$0 TEXT runtime·setldt(SB),NOSPLIT,$0
RET RET
TEXT runtime·open(SB),7,$0 TEXT runtime·open(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $14, BP MOVQ $14, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·pread(SB),7,$0 TEXT runtime·pread(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $50, BP MOVQ $50, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·pwrite(SB),7,$0 TEXT runtime·pwrite(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $51, BP MOVQ $51, BP
SYSCALL SYSCALL
RET RET
// int32 _seek(int64*, int32, int64, int32) // int32 _seek(int64*, int32, int64, int32)
TEXT _seek<>(SB),7,$0 TEXT _seek<>(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $39, BP MOVQ $39, BP
SYSCALL SYSCALL
RET RET
// int64 seek(int32, int64, int32) // int64 seek(int32, int64, int32)
TEXT runtime·seek(SB),7,$56 TEXT runtime·seek(SB),NOSPLIT,$56
LEAQ new+48(SP), CX LEAQ new+48(SP), CX
MOVQ CX, 0(SP) MOVQ CX, 0(SP)
MOVQ fd+0(FP), CX MOVQ fd+0(FP), CX
...@@ -50,67 +51,67 @@ TEXT runtime·seek(SB),7,$56 ...@@ -50,67 +51,67 @@ TEXT runtime·seek(SB),7,$56
MOVQ new+48(SP), AX MOVQ new+48(SP), AX
RET RET
TEXT runtime·close(SB),7,$0 TEXT runtime·close(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $4, BP MOVQ $4, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·exits(SB),7,$0 TEXT runtime·exits(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $8, BP MOVQ $8, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·brk_(SB),7,$0 TEXT runtime·brk_(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $24, BP MOVQ $24, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·sleep(SB),7,$0 TEXT runtime·sleep(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $17, BP MOVQ $17, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·plan9_semacquire(SB),7,$0 TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $37, BP MOVQ $37, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·plan9_tsemacquire(SB),7,$0 TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $52, BP MOVQ $52, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·notify(SB),7,$0 TEXT runtime·notify(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $28, BP MOVQ $28, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·noted(SB),7,$0 TEXT runtime·noted(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $29, BP MOVQ $29, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·plan9_semrelease(SB),7,$0 TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $38, BP MOVQ $38, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·nanotime(SB),7,$0 TEXT runtime·nanotime(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $60, BP MOVQ $60, BP
SYSCALL SYSCALL
RET RET
TEXT runtime·rfork(SB),7,$0 TEXT runtime·rfork(SB),NOSPLIT,$0
MOVQ $0x8000, AX MOVQ $0x8000, AX
MOVQ $19, BP // rfork MOVQ $19, BP // rfork
SYSCALL SYSCALL
...@@ -148,11 +149,11 @@ TEXT runtime·rfork(SB),7,$0 ...@@ -148,11 +149,11 @@ TEXT runtime·rfork(SB),7,$0
RET RET
// This is needed by asm_amd64.s // This is needed by asm_amd64.s
TEXT runtime·settls(SB),7,$0 TEXT runtime·settls(SB),NOSPLIT,$0
RET RET
// void sigtramp(void *ureg, int8 *note) // void sigtramp(void *ureg, int8 *note)
TEXT runtime·sigtramp(SB),7,$0 TEXT runtime·sigtramp(SB),NOSPLIT,$0
get_tls(AX) get_tls(AX)
// check that m exists // check that m exists
...@@ -198,7 +199,7 @@ TEXT runtime·sigtramp(SB),7,$0 ...@@ -198,7 +199,7 @@ TEXT runtime·sigtramp(SB),7,$0
CALL runtime·noted(SB) CALL runtime·noted(SB)
RET RET
TEXT runtime·setfpmasks(SB),7,$8 TEXT runtime·setfpmasks(SB),NOSPLIT,$8
STMXCSR 0(SP) STMXCSR 0(SP)
MOVL 0(SP), AX MOVL 0(SP), AX
ANDL $~0x3F, AX ANDL $~0x3F, AX
...@@ -215,7 +216,7 @@ TEXT runtime·setfpmasks(SB),7,$8 ...@@ -215,7 +216,7 @@ TEXT runtime·setfpmasks(SB),7,$8
// in entersyscall mode, without going // in entersyscall mode, without going
// through the allocator (issue 4994). // through the allocator (issue 4994).
// See ../syscall/asm_plan9_386.s:/·Syscall/ // See ../syscall/asm_plan9_386.s:/·Syscall/
TEXT runtime·errstr(SB),7,$0 TEXT runtime·errstr(SB),NOSPLIT,$0
get_tls(AX) get_tls(AX)
MOVQ m(AX), BX MOVQ m(AX), BX
MOVQ m_errstr(BX), CX MOVQ m_errstr(BX), CX
......
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// void runtime·asmstdcall(void *c); // void runtime·asmstdcall(void *c);
TEXT runtime·asmstdcall(SB),7,$0 TEXT runtime·asmstdcall(SB),NOSPLIT,$0
MOVL c+0(FP), BX MOVL c+0(FP), BX
// SetLastError(0). // SetLastError(0).
...@@ -38,7 +39,7 @@ TEXT runtime·asmstdcall(SB),7,$0 ...@@ -38,7 +39,7 @@ TEXT runtime·asmstdcall(SB),7,$0
RET RET
TEXT runtime·badsignal2(SB),7,$24 TEXT runtime·badsignal2(SB),NOSPLIT,$24
// stderr // stderr
MOVL $-12, 0(SP) MOVL $-12, 0(SP)
MOVL SP, BP MOVL SP, BP
...@@ -59,16 +60,16 @@ TEXT runtime·badsignal2(SB),7,$24 ...@@ -59,16 +60,16 @@ TEXT runtime·badsignal2(SB),7,$24
RET RET
// faster get/set last error // faster get/set last error
TEXT runtime·getlasterror(SB),7,$0 TEXT runtime·getlasterror(SB),NOSPLIT,$0
MOVL 0x34(FS), AX MOVL 0x34(FS), AX
RET RET
TEXT runtime·setlasterror(SB),7,$0 TEXT runtime·setlasterror(SB),NOSPLIT,$0
MOVL err+0(FP), AX MOVL err+0(FP), AX
MOVL AX, 0x34(FS) MOVL AX, 0x34(FS)
RET RET
TEXT runtime·sigtramp(SB),7,$28 TEXT runtime·sigtramp(SB),NOSPLIT,$28
// unwinding? // unwinding?
MOVL info+0(FP), CX MOVL info+0(FP), CX
TESTL $6, 4(CX) // exception flags TESTL $6, 4(CX) // exception flags
...@@ -106,21 +107,21 @@ TEXT runtime·sigtramp(SB),7,$28 ...@@ -106,21 +107,21 @@ TEXT runtime·sigtramp(SB),7,$28
sigdone: sigdone:
RET RET
TEXT runtime·ctrlhandler(SB),7,$0 TEXT runtime·ctrlhandler(SB),NOSPLIT,$0
PUSHL $runtime·ctrlhandler1(SB) PUSHL $runtime·ctrlhandler1(SB)
CALL runtime·externalthreadhandler(SB) CALL runtime·externalthreadhandler(SB)
MOVL 4(SP), CX MOVL 4(SP), CX
ADDL $12, SP ADDL $12, SP
JMP CX JMP CX
TEXT runtime·profileloop(SB),7,$0 TEXT runtime·profileloop(SB),NOSPLIT,$0
PUSHL $runtime·profileloop1(SB) PUSHL $runtime·profileloop1(SB)
CALL runtime·externalthreadhandler(SB) CALL runtime·externalthreadhandler(SB)
MOVL 4(SP), CX MOVL 4(SP), CX
ADDL $12, SP ADDL $12, SP
JMP CX JMP CX
TEXT runtime·externalthreadhandler(SB),7,$0 TEXT runtime·externalthreadhandler(SB),NOSPLIT,$0
PUSHL BP PUSHL BP
MOVL SP, BP MOVL SP, BP
PUSHL BX PUSHL BX
...@@ -166,7 +167,7 @@ TEXT runtime·externalthreadhandler(SB),7,$0 ...@@ -166,7 +167,7 @@ TEXT runtime·externalthreadhandler(SB),7,$0
GLOBL runtime·cbctxts(SB), $4 GLOBL runtime·cbctxts(SB), $4
TEXT runtime·callbackasm1+0(SB),7,$0 TEXT runtime·callbackasm1+0(SB),NOSPLIT,$0
MOVL 0(SP), AX // will use to find our callback context MOVL 0(SP), AX // will use to find our callback context
// remove return address from stack, we are not returning there // remove return address from stack, we are not returning there
...@@ -251,7 +252,7 @@ TEXT runtime·callbackasm1+0(SB),7,$0 ...@@ -251,7 +252,7 @@ TEXT runtime·callbackasm1+0(SB),7,$0
RET RET
// void tstart(M *newm); // void tstart(M *newm);
TEXT runtime·tstart(SB),7,$0 TEXT runtime·tstart(SB),NOSPLIT,$0
MOVL newm+4(SP), CX // m MOVL newm+4(SP), CX // m
MOVL m_g0(CX), DX // g MOVL m_g0(CX), DX // g
...@@ -276,7 +277,7 @@ TEXT runtime·tstart(SB),7,$0 ...@@ -276,7 +277,7 @@ TEXT runtime·tstart(SB),7,$0
RET RET
// uint32 tstart_stdcall(M *newm); // uint32 tstart_stdcall(M *newm);
TEXT runtime·tstart_stdcall(SB),7,$0 TEXT runtime·tstart_stdcall(SB),NOSPLIT,$0
MOVL newm+4(SP), BX MOVL newm+4(SP), BX
PUSHL BX PUSHL BX
...@@ -293,13 +294,13 @@ TEXT runtime·tstart_stdcall(SB),7,$0 ...@@ -293,13 +294,13 @@ TEXT runtime·tstart_stdcall(SB),7,$0
RET RET
// setldt(int entry, int address, int limit) // setldt(int entry, int address, int limit)
TEXT runtime·setldt(SB),7,$0 TEXT runtime·setldt(SB),NOSPLIT,$0
MOVL address+4(FP), CX MOVL address+4(FP), CX
MOVL CX, 0x14(FS) MOVL CX, 0x14(FS)
RET RET
// void install_exception_handler() // void install_exception_handler()
TEXT runtime·install_exception_handler(SB),7,$0 TEXT runtime·install_exception_handler(SB),NOSPLIT,$0
get_tls(CX) get_tls(CX)
MOVL m(CX), CX // m MOVL m(CX), CX // m
...@@ -316,7 +317,7 @@ TEXT runtime·install_exception_handler(SB),7,$0 ...@@ -316,7 +317,7 @@ TEXT runtime·install_exception_handler(SB),7,$0
RET RET
// void remove_exception_handler() // void remove_exception_handler()
TEXT runtime·remove_exception_handler(SB),7,$0 TEXT runtime·remove_exception_handler(SB),NOSPLIT,$0
get_tls(CX) get_tls(CX)
MOVL m(CX), CX // m MOVL m(CX), CX // m
...@@ -328,7 +329,7 @@ TEXT runtime·remove_exception_handler(SB),7,$0 ...@@ -328,7 +329,7 @@ TEXT runtime·remove_exception_handler(SB),7,$0
RET RET
// Sleep duration is in 100ns units. // Sleep duration is in 100ns units.
TEXT runtime·usleep1(SB),7,$0 TEXT runtime·usleep1(SB),NOSPLIT,$0
MOVL duration+0(FP), BX MOVL duration+0(FP), BX
MOVL $runtime·usleep2(SB), AX // to hide from 8l MOVL $runtime·usleep2(SB), AX // to hide from 8l
...@@ -358,7 +359,7 @@ TEXT runtime·usleep1(SB),7,$0 ...@@ -358,7 +359,7 @@ TEXT runtime·usleep1(SB),7,$0
RET RET
// Runs on OS stack. duration (in 100ns units) is in BX. // Runs on OS stack. duration (in 100ns units) is in BX.
TEXT runtime·usleep2(SB),7,$20 TEXT runtime·usleep2(SB),NOSPLIT,$20
// Want negative 100ns units. // Want negative 100ns units.
NEGL BX NEGL BX
MOVL $-1, hi-4(SP) MOVL $-1, hi-4(SP)
......
...@@ -3,13 +3,14 @@ ...@@ -3,13 +3,14 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
// maxargs should be divisible by 2, as Windows stack // maxargs should be divisible by 2, as Windows stack
// must be kept 16-byte aligned on syscall entry. // must be kept 16-byte aligned on syscall entry.
#define maxargs 16 #define maxargs 16
// void runtime·asmstdcall(void *c); // void runtime·asmstdcall(void *c);
TEXT runtime·asmstdcall(SB),7,$0 TEXT runtime·asmstdcall(SB),NOSPLIT,$0
// asmcgocall will put first argument into CX. // asmcgocall will put first argument into CX.
PUSHQ CX // save for later PUSHQ CX // save for later
MOVQ wincall_fn(CX), AX MOVQ wincall_fn(CX), AX
...@@ -60,7 +61,7 @@ loadregs: ...@@ -60,7 +61,7 @@ loadregs:
RET RET
TEXT runtime·badsignal2(SB),7,$48 TEXT runtime·badsignal2(SB),NOSPLIT,$48
// stderr // stderr
MOVQ $-12, CX // stderr MOVQ $-12, CX // stderr
MOVQ CX, 0(SP) MOVQ CX, 0(SP)
...@@ -83,18 +84,18 @@ TEXT runtime·badsignal2(SB),7,$48 ...@@ -83,18 +84,18 @@ TEXT runtime·badsignal2(SB),7,$48
RET RET
// faster get/set last error // faster get/set last error
TEXT runtime·getlasterror(SB),7,$0 TEXT runtime·getlasterror(SB),NOSPLIT,$0
MOVQ 0x30(GS), AX MOVQ 0x30(GS), AX
MOVL 0x68(AX), AX MOVL 0x68(AX), AX
RET RET
TEXT runtime·setlasterror(SB),7,$0 TEXT runtime·setlasterror(SB),NOSPLIT,$0
MOVL err+0(FP), AX MOVL err+0(FP), AX
MOVQ 0x30(GS), CX MOVQ 0x30(GS), CX
MOVL AX, 0x68(CX) MOVL AX, 0x68(CX)
RET RET
TEXT runtime·sigtramp(SB),7,$0 TEXT runtime·sigtramp(SB),NOSPLIT,$0
// CX: exception record // CX: exception record
// R8: context // R8: context
...@@ -139,20 +140,20 @@ TEXT runtime·sigtramp(SB),7,$0 ...@@ -139,20 +140,20 @@ TEXT runtime·sigtramp(SB),7,$0
sigdone: sigdone:
RET RET
TEXT runtime·ctrlhandler(SB),7,$8 TEXT runtime·ctrlhandler(SB),NOSPLIT,$8
MOVQ CX, 16(SP) // spill MOVQ CX, 16(SP) // spill
MOVQ $runtime·ctrlhandler1(SB), CX MOVQ $runtime·ctrlhandler1(SB), CX
MOVQ CX, 0(SP) MOVQ CX, 0(SP)
CALL runtime·externalthreadhandler(SB) CALL runtime·externalthreadhandler(SB)
RET RET
TEXT runtime·profileloop(SB),7,$8 TEXT runtime·profileloop(SB),NOSPLIT,$8
MOVQ $runtime·profileloop1(SB), CX MOVQ $runtime·profileloop1(SB), CX
MOVQ CX, 0(SP) MOVQ CX, 0(SP)
CALL runtime·externalthreadhandler(SB) CALL runtime·externalthreadhandler(SB)
RET RET
TEXT runtime·externalthreadhandler(SB),7,$0 TEXT runtime·externalthreadhandler(SB),NOSPLIT,$0
PUSHQ BP PUSHQ BP
MOVQ SP, BP MOVQ SP, BP
PUSHQ BX PUSHQ BX
...@@ -198,7 +199,7 @@ TEXT runtime·externalthreadhandler(SB),7,$0 ...@@ -198,7 +199,7 @@ TEXT runtime·externalthreadhandler(SB),7,$0
GLOBL runtime·cbctxts(SB), $8 GLOBL runtime·cbctxts(SB), $8
TEXT runtime·callbackasm1(SB),7,$0 TEXT runtime·callbackasm1(SB),NOSPLIT,$0
// Construct args vector for cgocallback(). // Construct args vector for cgocallback().
// By windows/amd64 calling convention first 4 args are in CX, DX, R8, R9 // By windows/amd64 calling convention first 4 args are in CX, DX, R8, R9
// args from the 5th on are on the stack. // args from the 5th on are on the stack.
...@@ -276,7 +277,7 @@ TEXT runtime·callbackasm1(SB),7,$0 ...@@ -276,7 +277,7 @@ TEXT runtime·callbackasm1(SB),7,$0
POPQ -8(CX)(DX*1) // restore bytes just after the args POPQ -8(CX)(DX*1) // restore bytes just after the args
RET RET
TEXT runtime·setstacklimits(SB),7,$0 TEXT runtime·setstacklimits(SB),NOSPLIT,$0
MOVQ 0x30(GS), CX MOVQ 0x30(GS), CX
MOVQ $0, 0x10(CX) MOVQ $0, 0x10(CX)
MOVQ $0xffffffffffff, AX MOVQ $0xffffffffffff, AX
...@@ -284,7 +285,7 @@ TEXT runtime·setstacklimits(SB),7,$0 ...@@ -284,7 +285,7 @@ TEXT runtime·setstacklimits(SB),7,$0
RET RET
// uint32 tstart_stdcall(M *newm); // uint32 tstart_stdcall(M *newm);
TEXT runtime·tstart_stdcall(SB),7,$0 TEXT runtime·tstart_stdcall(SB),NOSPLIT,$0
// CX contains first arg newm // CX contains first arg newm
MOVQ m_g0(CX), DX // g MOVQ m_g0(CX), DX // g
...@@ -310,20 +311,20 @@ TEXT runtime·tstart_stdcall(SB),7,$0 ...@@ -310,20 +311,20 @@ TEXT runtime·tstart_stdcall(SB),7,$0
RET RET
// set tls base to DI // set tls base to DI
TEXT runtime·settls(SB),7,$0 TEXT runtime·settls(SB),NOSPLIT,$0
MOVQ DI, 0x28(GS) MOVQ DI, 0x28(GS)
RET RET
// void install_exception_handler() // void install_exception_handler()
TEXT runtime·install_exception_handler(SB),7,$0 TEXT runtime·install_exception_handler(SB),NOSPLIT,$0
CALL runtime·setstacklimits(SB) CALL runtime·setstacklimits(SB)
RET RET
TEXT runtime·remove_exception_handler(SB),7,$0 TEXT runtime·remove_exception_handler(SB),NOSPLIT,$0
RET RET
// Sleep duration is in 100ns units. // Sleep duration is in 100ns units.
TEXT runtime·usleep1(SB),7,$0 TEXT runtime·usleep1(SB),NOSPLIT,$0
MOVL duration+0(FP), BX MOVL duration+0(FP), BX
MOVQ $runtime·usleep2(SB), AX // to hide from 6l MOVQ $runtime·usleep2(SB), AX // to hide from 6l
...@@ -353,7 +354,7 @@ TEXT runtime·usleep1(SB),7,$0 ...@@ -353,7 +354,7 @@ TEXT runtime·usleep1(SB),7,$0
RET RET
// Runs on OS stack. duration (in 100ns units) is in BX. // Runs on OS stack. duration (in 100ns units) is in BX.
TEXT runtime·usleep2(SB),7,$8 TEXT runtime·usleep2(SB),NOSPLIT,$8
// Want negative 100ns units. // Want negative 100ns units.
NEGQ BX NEGQ BX
MOVQ SP, R8 // ptime MOVQ SP, R8 // ptime
......
...@@ -23,11 +23,13 @@ ...@@ -23,11 +23,13 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
#include "../../cmd/ld/textflag.h"
/* /*
* C runtime for 64-bit divide. * C runtime for 64-bit divide.
*/ */
TEXT _mul64by32(SB), 7, $0 TEXT _mul64by32(SB), NOSPLIT, $0
MOVL r+0(FP), CX MOVL r+0(FP), CX
MOVL a+4(FP), AX MOVL a+4(FP), AX
MULL b+12(FP) MULL b+12(FP)
...@@ -39,7 +41,7 @@ TEXT _mul64by32(SB), 7, $0 ...@@ -39,7 +41,7 @@ TEXT _mul64by32(SB), 7, $0
MOVL BX, 4(CX) MOVL BX, 4(CX)
RET RET
TEXT _div64by32(SB), 7, $0 TEXT _div64by32(SB), NOSPLIT, $0
MOVL r+12(FP), CX MOVL r+12(FP), CX
MOVL a+0(FP), AX MOVL a+0(FP), AX
MOVL a+4(FP), DX MOVL a+4(FP), DX
......
...@@ -24,12 +24,13 @@ ...@@ -24,12 +24,13 @@
// THE SOFTWARE. // THE SOFTWARE.
#include "zasm_GOOS_GOARCH.h" #include "zasm_GOOS_GOARCH.h"
#include "../../cmd/ld/textflag.h"
arg=0 arg=0
/* replaced use of R10 by R11 because the former can be the data segment base register */ /* replaced use of R10 by R11 because the former can be the data segment base register */
TEXT _mulv(SB), 7, $0 TEXT _mulv(SB), NOSPLIT, $0
MOVW 0(FP), R0 MOVW 0(FP), R0
MOVW 4(FP), R2 /* l0 */ MOVW 4(FP), R2 /* l0 */
MOVW 8(FP), R11 /* h0 */ MOVW 8(FP), R11 /* h0 */
...@@ -47,7 +48,7 @@ TEXT _mulv(SB), 7, $0 ...@@ -47,7 +48,7 @@ TEXT _mulv(SB), 7, $0
// trampoline for _sfloat2. passes LR as arg0 and // trampoline for _sfloat2. passes LR as arg0 and
// saves registers R0-R13 and CPSR on the stack. R0-R12 and CPSR flags can // saves registers R0-R13 and CPSR on the stack. R0-R12 and CPSR flags can
// be changed by _sfloat2. // be changed by _sfloat2.
TEXT _sfloat(SB), 7, $64-0 // 4 arg + 14*4 saved regs + cpsr TEXT _sfloat(SB), NOSPLIT, $64-0 // 4 arg + 14*4 saved regs + cpsr
MOVW R14, 4(R13) MOVW R14, 4(R13)
MOVW R0, 8(R13) MOVW R0, 8(R13)
MOVW $12(R13), R0 MOVW $12(R13), R0
...@@ -106,7 +107,7 @@ a = 11 ...@@ -106,7 +107,7 @@ a = 11
// Please be careful when changing this, it is pretty fragile: // Please be careful when changing this, it is pretty fragile:
// 1, don't use unconditional branch as the linker is free to reorder the blocks; // 1, don't use unconditional branch as the linker is free to reorder the blocks;
// 2. if a == 11, beware that the linker will use R11 if you use certain instructions. // 2. if a == 11, beware that the linker will use R11 if you use certain instructions.
TEXT udiv<>(SB),7,$-4 TEXT udiv<>(SB),NOSPLIT,$-4
CLZ R(q), R(s) // find normalizing shift CLZ R(q), R(s) // find normalizing shift
MOVW.S R(q)<<R(s), R(a) MOVW.S R(q)<<R(s), R(a)
ADD R(a)>>25, PC, R(a) // most significant 7 bits of divisor ADD R(a)>>25, PC, R(a) // most significant 7 bits of divisor
...@@ -197,7 +198,7 @@ fast_udiv_tab: ...@@ -197,7 +198,7 @@ fast_udiv_tab:
// expects the result in R(TMP) // expects the result in R(TMP)
TMP = 11 TMP = 11
TEXT _divu(SB), 7, $16 TEXT _divu(SB), NOSPLIT, $16
MOVW R(q), 4(R13) MOVW R(q), 4(R13)
MOVW R(r), 8(R13) MOVW R(r), 8(R13)
MOVW R(s), 12(R13) MOVW R(s), 12(R13)
...@@ -213,7 +214,7 @@ TEXT _divu(SB), 7, $16 ...@@ -213,7 +214,7 @@ TEXT _divu(SB), 7, $16
MOVW 16(R13), R(M) MOVW 16(R13), R(M)
RET RET
TEXT _modu(SB), 7, $16 TEXT _modu(SB), NOSPLIT, $16
MOVW R(q), 4(R13) MOVW R(q), 4(R13)
MOVW R(r), 8(R13) MOVW R(r), 8(R13)
MOVW R(s), 12(R13) MOVW R(s), 12(R13)
...@@ -229,7 +230,7 @@ TEXT _modu(SB), 7, $16 ...@@ -229,7 +230,7 @@ TEXT _modu(SB), 7, $16
MOVW 16(R13), R(M) MOVW 16(R13), R(M)
RET RET
TEXT _div(SB),7,$16 TEXT _div(SB),NOSPLIT,$16
MOVW R(q), 4(R13) MOVW R(q), 4(R13)
MOVW R(r), 8(R13) MOVW R(r), 8(R13)
MOVW R(s), 12(R13) MOVW R(s), 12(R13)
...@@ -255,7 +256,7 @@ d2: ...@@ -255,7 +256,7 @@ d2:
RSB $0, R(q), R(TMP) RSB $0, R(q), R(TMP)
B out B out
TEXT _mod(SB),7,$16 TEXT _mod(SB),NOSPLIT,$16
MOVW R(q), 4(R13) MOVW R(q), 4(R13)
MOVW R(r), 8(R13) MOVW R(r), 8(R13)
MOVW R(s), 12(R13) MOVW R(s), 12(R13)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment