diff options
author | Devon H. O'Dell <devon.odell@gmail.com> | 2009-11-17 23:58:51 -0800 |
---|---|---|
committer | Devon H. O'Dell <devon.odell@gmail.com> | 2009-11-17 23:58:51 -0800 |
commit | cba2fe2462fda1fe7b265f8056a89e6f6e06e938 (patch) | |
tree | 9f74efdaa20cae5f6501fd3fe6e50ced586dcfe9 /src/pkg/syscall/asm_freebsd_386.s | |
parent | daab757a6fa77ff08a76fa1307a0c5f1f15e5c42 (diff) | |
download | golang-cba2fe2462fda1fe7b265f8056a89e6f6e06e938.tar.gz |
FreeBSD/i386 work
This patchset gets Go to pretty much the same state that
FreeBSD/amd64 is in.
R=rsc
http://codereview.appspot.com/157055
Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/pkg/syscall/asm_freebsd_386.s')
-rw-r--r-- | src/pkg/syscall/asm_freebsd_386.s | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/pkg/syscall/asm_freebsd_386.s b/src/pkg/syscall/asm_freebsd_386.s new file mode 100644 index 000000000..3ca582f7d --- /dev/null +++ b/src/pkg/syscall/asm_freebsd_386.s @@ -0,0 +1,83 @@ +// 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. + +// +// System call support for 386, FreeBSD +// + +// func Syscall(trap int32, a1, a2, a3 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. + +TEXT syscall·Syscall(SB),7,$0 + CALL runtime·entersyscall(SB) + MOVL 4(SP), AX // syscall entry + // slide args down on top of system call number + LEAL 8(SP), SI + LEAL 4(SP), DI + CLD + MOVSL + MOVSL + MOVSL + INT $0x80 + JAE ok + MOVL $-1, 20(SP) // r1 + MOVL $-1, 24(SP) // r2 + MOVL AX, 28(SP) // errno + CALL runtime·exitsyscall(SB) + RET +ok: + MOVL AX, 20(SP) // r1 + MOVL DX, 24(SP) // r2 + MOVL $0, 28(SP) // errno + CALL runtime·exitsyscall(SB) + RET + +TEXT syscall·Syscall6(SB),7,$0 + CALL runtime·entersyscall(SB) + MOVL 4(SP), AX // syscall entry + // slide args down on top of system call number + LEAL 8(SP), SI + LEAL 4(SP), DI + CLD + MOVSL + MOVSL + MOVSL + MOVSL + MOVSL + MOVSL + INT $0x80 + JAE ok6 + MOVL $-1, 32(SP) // r1 + MOVL $-1, 36(SP) // r2 + MOVL AX, 40(SP) // errno + CALL runtime·exitsyscall(SB) + RET +ok6: + MOVL AX, 32(SP) // r1 + MOVL DX, 36(SP) // r2 + MOVL $0, 40(SP) // errno + CALL runtime·exitsyscall(SB) + RET + +TEXT syscall·RawSyscall(SB),7,$0 + MOVL 4(SP), AX // syscall entry + // slide args down on top of system call number + LEAL 8(SP), SI + LEAL 4(SP), DI + CLD + MOVSL + MOVSL + MOVSL + INT $0x80 + JAE ok1 + MOVL $-1, 20(SP) // r1 + MOVL $-1, 24(SP) // r2 + MOVL AX, 28(SP) // errno + RET +ok1: + MOVL AX, 20(SP) // r1 + MOVL DX, 24(SP) // r2 + MOVL $0, 28(SP) // errno + RET |