From: Josh Bleecher Snyder Date: Thu, 21 Jul 2016 15:57:50 +0000 (-0700) Subject: syscall: split out unix Syscall9 asm support X-Git-Tag: go1.8beta1~1862 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a5464af55469e2810452fd62e189404f3b8406ea;p=gostls13.git syscall: split out unix Syscall9 asm support This is preliminary work to unifying them. Aside from Syscall9, all are identical. Syscall9 has a netbsd/openbsd variant and a dragonfly/freebsd variant. Updates #11041 Change-Id: Ia5ce95d5e9115d4c0492d5e53aa7a4316deafd1f Reviewed-on: https://go-review.googlesource.com/25115 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/syscall/asm9_dragonfly_amd64.s b/src/syscall/asm9_dragonfly_amd64.s new file mode 100644 index 0000000000..519e8d70b9 --- /dev/null +++ b/src/syscall/asm9_dragonfly_amd64.s @@ -0,0 +1,47 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +#include "textflag.h" +#include "funcdata.h" + +// +// Syscall9 support for AMD64, DragonFly +// + +// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + CALL runtime·entersyscall(SB) + MOVQ 8(SP), AX // syscall entry + MOVQ 16(SP), DI + MOVQ 24(SP), SI + MOVQ 32(SP), DX + MOVQ 40(SP), R10 + MOVQ 48(SP), R8 + MOVQ 56(SP), R9 + + // shift around the last three arguments so they're at the + // top of the stack when the syscall is called. + MOVQ 64(SP), R11 // arg 7 + MOVQ R11, 8(SP) + MOVQ 72(SP), R11 // arg 8 + MOVQ R11, 16(SP) + MOVQ 80(SP), R11 // arg 9 + MOVQ R11, 24(SP) + + SYSCALL + JCC ok9 + MOVQ $-1, 88(SP) // r1 + MOVQ $0, 96(SP) // r2 + MOVQ AX, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET +ok9: + MOVQ AX, 88(SP) // r1 + MOVQ DX, 96(SP) // r2 + MOVQ $0, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET diff --git a/src/syscall/asm9_freebsd_amd64.s b/src/syscall/asm9_freebsd_amd64.s new file mode 100644 index 0000000000..39773d320b --- /dev/null +++ b/src/syscall/asm9_freebsd_amd64.s @@ -0,0 +1,47 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +#include "textflag.h" +#include "funcdata.h" + +// +// Syscall9 support for AMD64, FreeBSD +// + +// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + CALL runtime·entersyscall(SB) + MOVQ 8(SP), AX // syscall entry + MOVQ 16(SP), DI + MOVQ 24(SP), SI + MOVQ 32(SP), DX + MOVQ 40(SP), R10 + MOVQ 48(SP), R8 + MOVQ 56(SP), R9 + + // shift around the last three arguments so they're at the + // top of the stack when the syscall is called. + MOVQ 64(SP), R11 // arg 7 + MOVQ R11, 8(SP) + MOVQ 72(SP), R11 // arg 8 + MOVQ R11, 16(SP) + MOVQ 80(SP), R11 // arg 9 + MOVQ R11, 24(SP) + + SYSCALL + JCC ok9 + MOVQ $-1, 88(SP) // r1 + MOVQ $0, 96(SP) // r2 + MOVQ AX, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET +ok9: + MOVQ AX, 88(SP) // r1 + MOVQ DX, 96(SP) // r2 + MOVQ $0, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET diff --git a/src/syscall/asm9_netbsd_amd64.s b/src/syscall/asm9_netbsd_amd64.s new file mode 100644 index 0000000000..05bf9c5cbe --- /dev/null +++ b/src/syscall/asm9_netbsd_amd64.s @@ -0,0 +1,46 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +#include "textflag.h" +#include "funcdata.h" + +// +// Syscall9 support for AMD64, NetBSD +// + +// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + CALL runtime·entersyscall(SB) + MOVQ 8(SP), AX // syscall entry + MOVQ 16(SP), DI + MOVQ 24(SP), SI + MOVQ 32(SP), DX + MOVQ 40(SP), R10 + MOVQ 48(SP), R8 + MOVQ 56(SP), R9 + MOVQ 64(SP), R11 + MOVQ 72(SP), R12 + MOVQ 80(SP), R13 + SUBQ $32, SP + MOVQ R11, 8(SP) // arg 7 + MOVQ R12, 16(SP) // arg 8 + MOVQ R13, 24(SP) // arg 9 + SYSCALL + JCC ok9 + ADDQ $32, SP + MOVQ $-1, 88(SP) // r1 + MOVQ $0, 96(SP) // r2 + MOVQ AX, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET +ok9: + ADDQ $32, SP + MOVQ AX, 88(SP) // r1 + MOVQ DX, 96(SP) // r2 + MOVQ $0, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET diff --git a/src/syscall/asm9_openbsd_amd64.s b/src/syscall/asm9_openbsd_amd64.s new file mode 100644 index 0000000000..80abb6fa21 --- /dev/null +++ b/src/syscall/asm9_openbsd_amd64.s @@ -0,0 +1,46 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +#include "textflag.h" +#include "funcdata.h" + +// +// Syscall9 support for AMD64, OpenBSD +// + +// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + CALL runtime·entersyscall(SB) + MOVQ 8(SP), AX // syscall entry + MOVQ 16(SP), DI + MOVQ 24(SP), SI + MOVQ 32(SP), DX + MOVQ 40(SP), R10 + MOVQ 48(SP), R8 + MOVQ 56(SP), R9 + MOVQ 64(SP), R11 + MOVQ 72(SP), R12 + MOVQ 80(SP), R13 + SUBQ $32, SP + MOVQ R11, 8(SP) // arg 7 + MOVQ R12, 16(SP) // arg 8 + MOVQ R13, 24(SP) // arg 9 + SYSCALL + JCC ok9 + ADDQ $32, SP + MOVQ $-1, 88(SP) // r1 + MOVQ $0, 96(SP) // r2 + MOVQ AX, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET +ok9: + ADDQ $32, SP + MOVQ AX, 88(SP) // r1 + MOVQ DX, 96(SP) // r2 + MOVQ $0, 104(SP) // errno + CALL runtime·exitsyscall(SB) + RET diff --git a/src/syscall/asm_dragonfly_amd64.s b/src/syscall/asm_dragonfly_amd64.s index 78df9b7b3b..328b5a4418 100644 --- a/src/syscall/asm_dragonfly_amd64.s +++ b/src/syscall/asm_dragonfly_amd64.s @@ -14,7 +14,6 @@ // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); -// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); // Trap # in AX, args in DI SI DX, return in AX DX TEXT ·Syscall(SB),NOSPLIT,$0-56 @@ -63,39 +62,6 @@ ok6: CALL runtime·exitsyscall(SB) RET -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ 40(SP), R10 - MOVQ 48(SP), R8 - MOVQ 56(SP), R9 - - // shift around the last three arguments so they're at the - // top of the stack when the syscall is called. - MOVQ 64(SP), R11 // arg 7 - MOVQ R11, 8(SP) - MOVQ 72(SP), R11 // arg 8 - MOVQ R11, 16(SP) - MOVQ 80(SP), R11 // arg 9 - MOVQ R11, 24(SP) - - SYSCALL - JCC ok9 - MOVQ $-1, 88(SP) // r1 - MOVQ $0, 96(SP) // r2 - MOVQ AX, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok9: - MOVQ AX, 88(SP) // r1 - MOVQ DX, 96(SP) // r2 - MOVQ $0, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET - TEXT ·RawSyscall(SB),NOSPLIT,$0-56 MOVQ 16(SP), DI MOVQ 24(SP), SI diff --git a/src/syscall/asm_freebsd_amd64.s b/src/syscall/asm_freebsd_amd64.s index 51ef44ca9c..81f4a939b1 100644 --- a/src/syscall/asm_freebsd_amd64.s +++ b/src/syscall/asm_freebsd_amd64.s @@ -14,7 +14,6 @@ // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); -// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); // Trap # in AX, args in DI SI DX, return in AX DX TEXT ·Syscall(SB),NOSPLIT,$0-56 @@ -63,39 +62,6 @@ ok6: CALL runtime·exitsyscall(SB) RET -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ 40(SP), R10 - MOVQ 48(SP), R8 - MOVQ 56(SP), R9 - - // shift around the last three arguments so they're at the - // top of the stack when the syscall is called. - MOVQ 64(SP), R11 // arg 7 - MOVQ R11, 8(SP) - MOVQ 72(SP), R11 // arg 8 - MOVQ R11, 16(SP) - MOVQ 80(SP), R11 // arg 9 - MOVQ R11, 24(SP) - - SYSCALL - JCC ok9 - MOVQ $-1, 88(SP) // r1 - MOVQ $0, 96(SP) // r2 - MOVQ AX, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok9: - MOVQ AX, 88(SP) // r1 - MOVQ DX, 96(SP) // r2 - MOVQ $0, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET - TEXT ·RawSyscall(SB),NOSPLIT,$0-56 MOVQ 16(SP), DI MOVQ 24(SP), SI diff --git a/src/syscall/asm_netbsd_amd64.s b/src/syscall/asm_netbsd_amd64.s index b300148f43..264af93adc 100644 --- a/src/syscall/asm_netbsd_amd64.s +++ b/src/syscall/asm_netbsd_amd64.s @@ -14,7 +14,6 @@ // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); -// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); // Trap # in AX, args in DI SI DX, return in AX DX TEXT ·Syscall(SB),NOSPLIT,$0-56 @@ -63,38 +62,6 @@ ok6: CALL runtime·exitsyscall(SB) RET -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ 40(SP), R10 - MOVQ 48(SP), R8 - MOVQ 56(SP), R9 - MOVQ 64(SP), R11 - MOVQ 72(SP), R12 - MOVQ 80(SP), R13 - SUBQ $32, SP - MOVQ R11, 8(SP) // arg 7 - MOVQ R12, 16(SP) // arg 8 - MOVQ R13, 24(SP) // arg 9 - SYSCALL - JCC ok9 - ADDQ $32, SP - MOVQ $-1, 88(SP) // r1 - MOVQ $0, 96(SP) // r2 - MOVQ AX, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok9: - ADDQ $32, SP - MOVQ AX, 88(SP) // r1 - MOVQ DX, 96(SP) // r2 - MOVQ $0, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET - TEXT ·RawSyscall(SB),NOSPLIT,$0-56 MOVQ 16(SP), DI MOVQ 24(SP), SI diff --git a/src/syscall/asm_openbsd_amd64.s b/src/syscall/asm_openbsd_amd64.s index 1e981fc01d..6cf166d5c1 100644 --- a/src/syscall/asm_openbsd_amd64.s +++ b/src/syscall/asm_openbsd_amd64.s @@ -14,7 +14,6 @@ // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); -// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); // Trap # in AX, args in DI SI DX, return in AX DX TEXT ·Syscall(SB),NOSPLIT,$0-56 @@ -63,38 +62,6 @@ ok6: CALL runtime·exitsyscall(SB) RET -TEXT ·Syscall9(SB),NOSPLIT,$0-104 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ 40(SP), R10 - MOVQ 48(SP), R8 - MOVQ 56(SP), R9 - MOVQ 64(SP), R11 - MOVQ 72(SP), R12 - MOVQ 80(SP), R13 - SUBQ $32, SP - MOVQ R11, 8(SP) // arg 7 - MOVQ R12, 16(SP) // arg 8 - MOVQ R13, 24(SP) // arg 9 - SYSCALL - JCC ok9 - ADDQ $32, SP - MOVQ $-1, 88(SP) // r1 - MOVQ $0, 96(SP) // r2 - MOVQ AX, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok9: - ADDQ $32, SP - MOVQ AX, 88(SP) // r1 - MOVQ DX, 96(SP) // r2 - MOVQ $0, 104(SP) // errno - CALL runtime·exitsyscall(SB) - RET - TEXT ·RawSyscall(SB),NOSPLIT,$0-56 MOVQ 16(SP), DI MOVQ 24(SP), SI