From: Josh Bleecher Snyder Date: Thu, 21 Jul 2016 16:02:13 +0000 (-0700) Subject: syscall: unify unix/amd64 asm implementations X-Git-Tag: go1.8beta1~1861 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2cbe735366a16dcd2595c5f1b1ca38b5b2b5e5b2;p=gostls13.git syscall: unify unix/amd64 asm implementations Updates #11041 Change-Id: I77e5ca0b61ffc530ee46848721a177867c81d548 Reviewed-on: https://go-review.googlesource.com/25116 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/syscall/asm9_freebsd_amd64.s b/src/syscall/asm9_freebsd_amd64.s deleted file mode 100644 index 39773d320b..0000000000 --- a/src/syscall/asm9_freebsd_amd64.s +++ /dev/null @@ -1,47 +0,0 @@ -// 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_openbsd_amd64.s b/src/syscall/asm9_openbsd_amd64.s deleted file mode 100644 index 80abb6fa21..0000000000 --- a/src/syscall/asm9_openbsd_amd64.s +++ /dev/null @@ -1,46 +0,0 @@ -// 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/asm9_netbsd_amd64.s b/src/syscall/asm9_unix1_amd64.s similarity index 93% rename from src/syscall/asm9_netbsd_amd64.s rename to src/syscall/asm9_unix1_amd64.s index 05bf9c5cbe..67433aa763 100644 --- a/src/syscall/asm9_netbsd_amd64.s +++ b/src/syscall/asm9_unix1_amd64.s @@ -1,3 +1,5 @@ +// +build netbsd openbsd + // 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. @@ -9,7 +11,7 @@ #include "funcdata.h" // -// Syscall9 support for AMD64, NetBSD +// Syscall9 support for AMD64, NetBSD and OpenBSD // // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); diff --git a/src/syscall/asm9_dragonfly_amd64.s b/src/syscall/asm9_unix2_amd64.s similarity index 93% rename from src/syscall/asm9_dragonfly_amd64.s rename to src/syscall/asm9_unix2_amd64.s index 519e8d70b9..ee95fa7ed0 100644 --- a/src/syscall/asm9_dragonfly_amd64.s +++ b/src/syscall/asm9_unix2_amd64.s @@ -1,3 +1,5 @@ +// +build dragonfly freebsd + // 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. @@ -9,7 +11,7 @@ #include "funcdata.h" // -// Syscall9 support for AMD64, DragonFly +// Syscall9 support for AMD64, DragonFly and FreeBSD // // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); diff --git a/src/syscall/asm_dragonfly_amd64.s b/src/syscall/asm_dragonfly_amd64.s deleted file mode 100644 index 328b5a4418..0000000000 --- a/src/syscall/asm_dragonfly_amd64.s +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2009 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" - -// -// System call support for AMD64, DragonFly -// - -// 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); -// Trap # in AX, args in DI SI DX, return in AX DX - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - SYSCALL - JCC ok - MOVQ $-1, 40(SP) // r1 - MOVQ $0, 48(SP) // r2 - MOVQ AX, 56(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok: - MOVQ AX, 40(SP) // r1 - MOVQ DX, 48(SP) // r2 - MOVQ $0, 56(SP) // errno - CALL runtime·exitsyscall(SB) - RET - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - 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 - SYSCALL - JCC ok6 - MOVQ $-1, 64(SP) // r1 - MOVQ $0, 72(SP) // r2 - MOVQ AX, 80(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok6: - MOVQ AX, 64(SP) // r1 - MOVQ DX, 72(SP) // r2 - MOVQ $0, 80(SP) // errno - CALL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - MOVQ 8(SP), AX // syscall entry - SYSCALL - JCC ok1 - MOVQ $-1, 40(SP) // r1 - MOVQ $0, 48(SP) // r2 - MOVQ AX, 56(SP) // errno - RET -ok1: - MOVQ AX, 40(SP) // r1 - MOVQ DX, 48(SP) // r2 - MOVQ $0, 56(SP) // errno - RET - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - 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 8(SP), AX // syscall entry - SYSCALL - JCC ok2 - MOVQ $-1, 64(SP) // r1 - MOVQ $0, 72(SP) // r2 - MOVQ AX, 80(SP) // errno - RET -ok2: - MOVQ AX, 64(SP) // r1 - MOVQ DX, 72(SP) // r2 - MOVQ $0, 80(SP) // errno - RET diff --git a/src/syscall/asm_freebsd_amd64.s b/src/syscall/asm_freebsd_amd64.s deleted file mode 100644 index 81f4a939b1..0000000000 --- a/src/syscall/asm_freebsd_amd64.s +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2009 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" - -// -// System call support for AMD64, FreeBSD -// - -// 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); -// Trap # in AX, args in DI SI DX, return in AX DX - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - SYSCALL - JCC ok - MOVQ $-1, 40(SP) // r1 - MOVQ $0, 48(SP) // r2 - MOVQ AX, 56(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok: - MOVQ AX, 40(SP) // r1 - MOVQ DX, 48(SP) // r2 - MOVQ $0, 56(SP) // errno - CALL runtime·exitsyscall(SB) - RET - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - 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 - SYSCALL - JCC ok6 - MOVQ $-1, 64(SP) // r1 - MOVQ $0, 72(SP) // r2 - MOVQ AX, 80(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok6: - MOVQ AX, 64(SP) // r1 - MOVQ DX, 72(SP) // r2 - MOVQ $0, 80(SP) // errno - CALL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - MOVQ 8(SP), AX // syscall entry - SYSCALL - JCC ok1 - MOVQ $-1, 40(SP) // r1 - MOVQ $0, 48(SP) // r2 - MOVQ AX, 56(SP) // errno - RET -ok1: - MOVQ AX, 40(SP) // r1 - MOVQ DX, 48(SP) // r2 - MOVQ $0, 56(SP) // errno - RET - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - 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 8(SP), AX // syscall entry - SYSCALL - JCC ok2 - MOVQ $-1, 64(SP) // r1 - MOVQ $0, 72(SP) // r2 - MOVQ AX, 80(SP) // errno - RET -ok2: - MOVQ AX, 64(SP) // r1 - MOVQ DX, 72(SP) // r2 - MOVQ $0, 80(SP) // errno - RET diff --git a/src/syscall/asm_openbsd_amd64.s b/src/syscall/asm_openbsd_amd64.s deleted file mode 100644 index 6cf166d5c1..0000000000 --- a/src/syscall/asm_openbsd_amd64.s +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2009 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" - -// -// System call support for AMD64, OpenBSD -// - -// 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); -// Trap # in AX, args in DI SI DX, return in AX DX - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - CALL runtime·entersyscall(SB) - MOVQ 8(SP), AX // syscall entry - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - SYSCALL - JCC ok - MOVQ $-1, 40(SP) // r1 - MOVQ $0, 48(SP) // r2 - MOVQ AX, 56(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok: - MOVQ AX, 40(SP) // r1 - MOVQ DX, 48(SP) // r2 - MOVQ $0, 56(SP) // errno - CALL runtime·exitsyscall(SB) - RET - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - 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 - SYSCALL - JCC ok6 - MOVQ $-1, 64(SP) // r1 - MOVQ $0, 72(SP) // r2 - MOVQ AX, 80(SP) // errno - CALL runtime·exitsyscall(SB) - RET -ok6: - MOVQ AX, 64(SP) // r1 - MOVQ DX, 72(SP) // r2 - MOVQ $0, 80(SP) // errno - CALL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - MOVQ 16(SP), DI - MOVQ 24(SP), SI - MOVQ 32(SP), DX - MOVQ $0, R10 - MOVQ $0, R8 - MOVQ $0, R9 - MOVQ 8(SP), AX // syscall entry - SYSCALL - JCC ok1 - MOVQ $-1, 40(SP) // r1 - MOVQ $0, 48(SP) // r2 - MOVQ AX, 56(SP) // errno - RET -ok1: - MOVQ AX, 40(SP) // r1 - MOVQ DX, 48(SP) // r2 - MOVQ $0, 56(SP) // errno - RET - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - 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 8(SP), AX // syscall entry - SYSCALL - JCC ok2 - MOVQ $-1, 64(SP) // r1 - MOVQ $0, 72(SP) // r2 - MOVQ AX, 80(SP) // errno - RET -ok2: - MOVQ AX, 64(SP) // r1 - MOVQ DX, 72(SP) // r2 - MOVQ $0, 80(SP) // errno - RET diff --git a/src/syscall/asm_netbsd_amd64.s b/src/syscall/asm_unix_amd64.s similarity index 96% rename from src/syscall/asm_netbsd_amd64.s rename to src/syscall/asm_unix_amd64.s index 264af93adc..cba80159d0 100644 --- a/src/syscall/asm_netbsd_amd64.s +++ b/src/syscall/asm_unix_amd64.s @@ -1,3 +1,5 @@ +// +build netbsd freebsd openbsd dragonfly + // Copyright 2009 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. @@ -9,7 +11,7 @@ #include "funcdata.h" // -// System call support for AMD64, NetBSD +// System call support for AMD64 unixes // // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);