Commit 7ad60b72 authored by Russ Cox's avatar Russ Cox

syscall: fix stack frame sizes in assembly

for GOOS in darwin freebsd linux nacl netbsd openbsd plan9 solaris windows
do
        for GOARCH in 386 amd64 amd64p32 arm
        do
                go vet
        done
done

These are all real mistakes being corrected, but none
of them should be able to cause problems today
due to the NOSPLIT on the functions.

However, vet has also identified a few important problems.
I'm sending this CL to get rid of the trivial 'go vet' results
before attacking the real ones.

LGTM=r
R=golang-codereviews, r, bradfitz
CC=golang-codereviews
https://golang.org/cl/95460046
parent 42ea2eda
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -12,7 +15,7 @@ ...@@ -12,7 +15,7 @@
// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32); // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
// Trap # in AX, args on stack above caller pc. // Trap # in AX, args on stack above caller pc.
TEXT ·Syscall(SB),NOSPLIT,$0-32 TEXT ·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-44 TEXT ·Syscall6(SB),NOSPLIT,$0-40
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -63,7 +66,7 @@ ok6: ...@@ -63,7 +66,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-56 TEXT ·Syscall9(SB),NOSPLIT,$0-52
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -93,7 +96,7 @@ ok9: ...@@ -93,7 +96,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-32 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
...@@ -114,7 +117,7 @@ ok1: ...@@ -114,7 +117,7 @@ ok1:
MOVL $0, 28(SP) // errno MOVL $0, 28(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -12,7 +15,7 @@ ...@@ -12,7 +15,7 @@
// func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 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 // Trap # in AX, args in DI SI DX, return in AX DX
TEXT ·Syscall(SB),NOSPLIT,$0-64 TEXT ·Syscall(SB),NOSPLIT,$0-56
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-88 TEXT ·Syscall6(SB),NOSPLIT,$0-80
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
...@@ -60,7 +63,7 @@ ok6: ...@@ -60,7 +63,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
...@@ -81,7 +84,7 @@ ok1: ...@@ -81,7 +84,7 @@ ok1:
MOVQ $0, 56(SP) // errno MOVQ $0, 56(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -12,7 +15,7 @@ ...@@ -12,7 +15,7 @@
// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32); // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
// Trap # in AX, args on stack above caller pc. // Trap # in AX, args on stack above caller pc.
TEXT ·Syscall(SB),NOSPLIT,$0-32 TEXT ·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-44 TEXT ·Syscall6(SB),NOSPLIT,$0-40
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -63,7 +66,7 @@ ok6: ...@@ -63,7 +66,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-56 TEXT ·Syscall9(SB),NOSPLIT,$0-52
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -93,7 +96,7 @@ ok9: ...@@ -93,7 +96,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-32 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
...@@ -114,7 +117,7 @@ ok1: ...@@ -114,7 +117,7 @@ ok1:
MOVL $0, 28(SP) // errno MOVL $0, 28(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -18,7 +21,7 @@ ...@@ -18,7 +21,7 @@
// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 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 // Trap # in AX, args in DI SI DX, return in AX DX
TEXT ·Syscall(SB),NOSPLIT,$0-64 TEXT ·Syscall(SB),NOSPLIT,$0-56
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
...@@ -41,7 +44,7 @@ ok: ...@@ -41,7 +44,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-88 TEXT ·Syscall6(SB),NOSPLIT,$0-80
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
...@@ -64,7 +67,7 @@ ok6: ...@@ -64,7 +67,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-112 TEXT ·Syscall9(SB),NOSPLIT,$0-104
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX MOVQ 8(SP), AX
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -97,7 +100,7 @@ ok9: ...@@ -97,7 +100,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
...@@ -117,7 +120,7 @@ ok1: ...@@ -117,7 +120,7 @@ ok1:
MOVQ $0, 56(SP) // errno MOVQ $0, 56(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -11,7 +14,7 @@ ...@@ -11,7 +14,7 @@
// func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr); // func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
// Trap # in AX, args in BX CX DX SI DI, return in AX // Trap # in AX, args in BX CX DX SI DI, return in AX
TEXT ·Syscall(SB),NOSPLIT,$0-32 TEXT ·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
MOVL 8(SP), BX MOVL 8(SP), BX
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
RET RET
// func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
TEXT ·Syscall6(SB),NOSPLIT,$0-44 TEXT ·Syscall6(SB),NOSPLIT,$0-40
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
MOVL 8(SP), BX MOVL 8(SP), BX
...@@ -62,7 +65,7 @@ ok6: ...@@ -62,7 +65,7 @@ ok6:
RET RET
// func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr); // func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
TEXT ·RawSyscall(SB),NOSPLIT,$0-32 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
MOVL 8(SP), BX MOVL 8(SP), BX
MOVL 12(SP), CX MOVL 12(SP), CX
...@@ -84,7 +87,7 @@ ok1: ...@@ -84,7 +87,7 @@ ok1:
RET RET
// func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
MOVL 8(SP), BX MOVL 8(SP), BX
MOVL 12(SP), CX MOVL 12(SP), CX
...@@ -110,7 +113,7 @@ ok2: ...@@ -110,7 +113,7 @@ ok2:
// func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int) // func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int)
// Kernel interface gets call sub-number and pointer to a0. // Kernel interface gets call sub-number and pointer to a0.
TEXT ·socketcall(SB),NOSPLIT,$0-40 TEXT ·socketcall(SB),NOSPLIT,$0-36
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL $SYS_SOCKETCALL, AX // syscall entry MOVL $SYS_SOCKETCALL, AX // syscall entry
MOVL 4(SP), BX // socket call number MOVL 4(SP), BX // socket call number
...@@ -134,7 +137,7 @@ oksock: ...@@ -134,7 +137,7 @@ oksock:
// func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int) // func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int)
// Kernel interface gets call sub-number and pointer to a0. // Kernel interface gets call sub-number and pointer to a0.
TEXT ·rawsocketcall(SB),NOSPLIT,$0-40 TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
MOVL $SYS_SOCKETCALL, AX // syscall entry MOVL $SYS_SOCKETCALL, AX // syscall entry
MOVL 4(SP), BX // socket call number MOVL 4(SP), BX // socket call number
LEAL 8(SP), CX // pointer to call arguments LEAL 8(SP), CX // pointer to call arguments
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -13,7 +16,7 @@ ...@@ -13,7 +16,7 @@
// Note that this differs from "standard" ABI convention, which // Note that this differs from "standard" ABI convention, which
// would pass 4th arg in CX, not R10. // would pass 4th arg in CX, not R10.
TEXT ·Syscall(SB),NOSPLIT,$0-64 TEXT ·Syscall(SB),NOSPLIT,$0-56
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
...@@ -38,7 +41,7 @@ ok: ...@@ -38,7 +41,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-88 TEXT ·Syscall6(SB),NOSPLIT,$0-80
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
...@@ -63,7 +66,7 @@ ok6: ...@@ -63,7 +66,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
...@@ -85,7 +88,7 @@ ok1: ...@@ -85,7 +88,7 @@ ok1:
MOVQ $0, 56(SP) // errno MOVQ $0, 56(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#define NACL_SYSJMP(code) \ #define NACL_SYSJMP(code) \
MOVL $(0x10000 + ((code)<<5)), AX; JMP AX MOVL $(0x10000 + ((code)<<5)), AX; JMP AX
TEXT syscall·Syscall(SB),NOSPLIT,$12-32 TEXT syscall·Syscall(SB),NOSPLIT,$12-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL trap+0(FP), AX MOVL trap+0(FP), AX
MOVL a1+4(FP), BX MOVL a1+4(FP), BX
...@@ -32,12 +32,12 @@ TEXT syscall·Syscall(SB),NOSPLIT,$12-32 ...@@ -32,12 +32,12 @@ TEXT syscall·Syscall(SB),NOSPLIT,$12-32
MOVL $-1, r1+16(FP) MOVL $-1, r1+16(FP)
MOVL $-1, r2+20(FP) MOVL $-1, r2+20(FP)
NEGL AX NEGL AX
MOVL AX, errno+24(FP) MOVL AX, err+24(FP)
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
ok: ok:
MOVL AX, r1+16(FP) MOVL AX, r1+16(FP)
MOVL DX, r2+20(FP) MOVL DX, r2+20(FP)
MOVL $0, errno+24(FP) MOVL $0, err+24(FP)
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#define NACL_SYSJMP(code) \ #define NACL_SYSJMP(code) \
MOVL $(0x10000 + ((code)<<5)), AX; JMP AX MOVL $(0x10000 + ((code)<<5)), AX; JMP AX
TEXT syscall·Syscall(SB),NOSPLIT,$0-32 TEXT syscall·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL trap+0(FP), AX MOVL trap+0(FP), AX
MOVL a1+4(FP), DI MOVL a1+4(FP), DI
...@@ -30,12 +30,12 @@ TEXT syscall·Syscall(SB),NOSPLIT,$0-32 ...@@ -30,12 +30,12 @@ TEXT syscall·Syscall(SB),NOSPLIT,$0-32
MOVL $-1, r1+16(FP) MOVL $-1, r1+16(FP)
MOVL $-1, r2+20(FP) MOVL $-1, r2+20(FP)
NEGL AX NEGL AX
MOVL AX, errno+24(FP) MOVL AX, err+24(FP)
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
ok: ok:
MOVL AX, r1+16(FP) MOVL AX, r1+16(FP)
MOVL DX, r2+20(FP) MOVL DX, r2+20(FP)
MOVL $0, errno+24(FP) MOVL $0, err+24(FP)
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -12,7 +15,7 @@ ...@@ -12,7 +15,7 @@
// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32); // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
// Trap # in AX, args on stack above caller pc. // Trap # in AX, args on stack above caller pc.
TEXT ·Syscall(SB),NOSPLIT,$0-32 TEXT ·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-44 TEXT ·Syscall6(SB),NOSPLIT,$0-40
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -63,7 +66,7 @@ ok6: ...@@ -63,7 +66,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-56 TEXT ·Syscall9(SB),NOSPLIT,$0-52
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -93,7 +96,7 @@ ok9: ...@@ -93,7 +96,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-32 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
...@@ -114,7 +117,7 @@ ok1: ...@@ -114,7 +117,7 @@ ok1:
MOVL $0, 28(SP) // errno MOVL $0, 28(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -13,7 +16,7 @@ ...@@ -13,7 +16,7 @@
// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 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 // Trap # in AX, args in DI SI DX, return in AX DX
TEXT ·Syscall(SB),NOSPLIT,$0-64 TEXT ·Syscall(SB),NOSPLIT,$0-56
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX // syscall entry MOVQ 8(SP), AX // syscall entry
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-88 TEXT ·Syscall6(SB),NOSPLIT,$0-80
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX // syscall entry MOVQ 8(SP), AX // syscall entry
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -59,7 +62,7 @@ ok6: ...@@ -59,7 +62,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-112 TEXT ·Syscall9(SB),NOSPLIT,$0-104
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX // syscall entry MOVQ 8(SP), AX // syscall entry
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -91,7 +94,7 @@ ok9: ...@@ -91,7 +94,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
...@@ -111,7 +114,7 @@ ok1: ...@@ -111,7 +114,7 @@ ok1:
MOVQ $0, 56(SP) // errno MOVQ $0, 56(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -12,7 +15,7 @@ ...@@ -12,7 +15,7 @@
// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32); // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
// Trap # in AX, args on stack above caller pc. // Trap # in AX, args on stack above caller pc.
TEXT ·Syscall(SB),NOSPLIT,$0-32 TEXT ·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-44 TEXT ·Syscall6(SB),NOSPLIT,$0-40
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -63,7 +66,7 @@ ok6: ...@@ -63,7 +66,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-56 TEXT ·Syscall9(SB),NOSPLIT,$0-52
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -93,7 +96,7 @@ ok9: ...@@ -93,7 +96,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-32 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
...@@ -114,7 +117,7 @@ ok1: ...@@ -114,7 +117,7 @@ ok1:
MOVL $0, 28(SP) // errno MOVL $0, 28(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -13,7 +16,7 @@ ...@@ -13,7 +16,7 @@
// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 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 // Trap # in AX, args in DI SI DX, return in AX DX
TEXT ·Syscall(SB),NOSPLIT,$0-64 TEXT ·Syscall(SB),NOSPLIT,$0-56
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX // syscall entry MOVQ 8(SP), AX // syscall entry
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -36,7 +39,7 @@ ok: ...@@ -36,7 +39,7 @@ ok:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall6(SB),NOSPLIT,$0-88 TEXT ·Syscall6(SB),NOSPLIT,$0-80
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX // syscall entry MOVQ 8(SP), AX // syscall entry
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -59,7 +62,7 @@ ok6: ...@@ -59,7 +62,7 @@ ok6:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·Syscall9(SB),NOSPLIT,$0-112 TEXT ·Syscall9(SB),NOSPLIT,$0-104
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ 8(SP), AX // syscall entry MOVQ 8(SP), AX // syscall entry
MOVQ 16(SP), DI MOVQ 16(SP), DI
...@@ -91,7 +94,7 @@ ok9: ...@@ -91,7 +94,7 @@ ok9:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
...@@ -111,7 +114,7 @@ ok1: ...@@ -111,7 +114,7 @@ ok1:
MOVQ $0, 56(SP) // errno MOVQ $0, 56(SP) // errno
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
MOVQ 16(SP), DI MOVQ 16(SP), DI
MOVQ 24(SP), SI MOVQ 24(SP), SI
MOVQ 32(SP), DX MOVQ 32(SP), DX
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -87,7 +90,7 @@ copyresult4: ...@@ -87,7 +90,7 @@ copyresult4:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-32 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
...@@ -102,7 +105,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-32 ...@@ -102,7 +105,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-32
MOVL AX, err+28(SP) MOVL AX, err+28(SP)
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL 4(SP), AX // syscall entry MOVL 4(SP), AX // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
LEAL 8(SP), SI LEAL 8(SP), SI
...@@ -123,7 +126,7 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-44 ...@@ -123,7 +126,7 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-44
#define SYS_SEEK 39 /* from zsysnum_plan9_386.go */ #define SYS_SEEK 39 /* from zsysnum_plan9_386.go */
//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
TEXT ·seek(SB),NOSPLIT,$0-40 TEXT ·seek(SB),NOSPLIT,$0-36
LEAL newoffset+24(SP), AX LEAL newoffset+24(SP), AX
MOVL AX, placeholder+4(SP) MOVL AX, placeholder+4(SP)
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
#include "../../cmd/ld/textflag.h" #include "../../cmd/ld/textflag.h"
// //
...@@ -91,7 +94,7 @@ copyresult4: ...@@ -91,7 +94,7 @@ copyresult4:
CALL runtime·exitsyscall(SB) CALL runtime·exitsyscall(SB)
RET RET
TEXT ·RawSyscall(SB),NOSPLIT,$0-64 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
MOVQ $0x8000, AX // for NxM MOVQ $0x8000, AX // for NxM
MOVQ 8(SP), BP // syscall entry MOVQ 8(SP), BP // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -107,7 +110,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-64 ...@@ -107,7 +110,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-64
MOVQ AX, err+56(SP) MOVQ AX, err+56(SP)
RET RET
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
MOVQ $0x8000, AX // for NxM MOVQ $0x8000, AX // for NxM
MOVQ 8(SP), BP // syscall entry MOVQ 8(SP), BP // syscall entry
// slide args down on top of system call number // slide args down on top of system call number
...@@ -129,7 +132,7 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 ...@@ -129,7 +132,7 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-88
#define SYS_SEEK 39 /* from zsysnum_plan9_amd64.go */ #define SYS_SEEK 39 /* from zsysnum_plan9_amd64.go */
//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
TEXT ·seek(SB),NOSPLIT,$0-64 TEXT ·seek(SB),NOSPLIT,$0-56
LEAQ newoffset+40(SP), AX LEAQ newoffset+40(SP), AX
MOVQ AX, placeholder+8(SP) MOVQ AX, placeholder+8(SP)
...@@ -160,7 +163,7 @@ copyresult6: ...@@ -160,7 +163,7 @@ copyresult6:
//func exit(code int) //func exit(code int)
// Import runtime·exit for cleanly exiting. // Import runtime·exit for cleanly exiting.
TEXT ·exit(SB),NOSPLIT,$8-4 TEXT ·exit(SB),NOSPLIT,$8-8
MOVQ code+0(FP), AX MOVQ code+0(FP), AX
MOVQ AX, 0(SP) MOVQ AX, 0(SP)
CALL runtime·exit(SB) CALL runtime·exit(SB)
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +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.
// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
// so that go vet can check that they are correct.
package syscall package syscall
import "unsafe" import "unsafe"
......
...@@ -83,7 +83,7 @@ func errstr() string { ...@@ -83,7 +83,7 @@ func errstr() string {
} }
// Implemented in assembly to import from runtime. // Implemented in assembly to import from runtime.
func exit(int) func exit(code int)
func Exit(code int) { exit(code) } func Exit(code int) { exit(code) }
......
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