aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/syscall_amd64_linux.s
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2008-07-26 14:49:21 -0700
committerRob Pike <r@golang.org>2008-07-26 14:49:21 -0700
commit20a02661d98f8206a52def4dcca80e89df5482e9 (patch)
tree82b1a495d349b8e025dab2d7ab72a28e9d689473 /src/syscall/syscall_amd64_linux.s
parent120827284e3753982e493af8b1c48577e223260c (diff)
downloadgo-20a02661d98f8206a52def4dcca80e89df5482e9.tar.xz
beginnings of a low-level syscall library
R=ken OCL=13483 CL=13496
Diffstat (limited to 'src/syscall/syscall_amd64_linux.s')
-rw-r--r--src/syscall/syscall_amd64_linux.s123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/syscall/syscall_amd64_linux.s b/src/syscall/syscall_amd64_linux.s
new file mode 100644
index 0000000000..9690a96362
--- /dev/null
+++ b/src/syscall/syscall_amd64_linux.s
@@ -0,0 +1,123 @@
+// 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 calls for AMD64, Linux
+//
+
+//TEXT sys·exit(SB),1,$0-8
+// MOVL 8(SP), DI
+// MOVL $60, AX
+// SYSCALL
+// RET
+
+TEXT syscall·open(SB),1,$0-16
+ MOVQ 8(SP), DI
+ MOVQ 16(SP), SI
+ MOVQ $0, DX
+ MOVQ $2, AX // syscall entry
+ SYSCALL
+ CMPQ AX, $0xfffffffffffff001
+ JLS 5(PC)
+ MOVQ $-1, 24(SP)
+ NEGQ AX
+ MOVQ AX, 32(SP)
+ RET
+ MOVQ AX, 24(SP)
+ MOVQ $0, 32(SP)
+ RET
+
+TEXT syscall·close(SB),1,$0-16
+ MOVQ 8(SP), DI
+ MOVL $3, AX // syscall entry
+ SYSCALL
+ CMPQ AX, $0xfffffffffffff001
+ JLS 5(PC)
+ MOVQ $-1, 16(SP)
+ NEGQ AX
+ MOVQ AX, 24(SP)
+ RET
+ MOVQ AX, 16(SP)
+ MOVQ $0, 24(SP)
+ RET
+
+//TEXT fstat(SB),1,$0-16
+// MOVL 8(SP), DI
+// MOVQ 16(SP), SI
+// MOVL $5, AX // syscall entry
+// SYSCALL
+// RET
+
+TEXT syscall·read(SB),1,$0-16
+ MOVL 8(SP), DI
+ MOVQ 16(SP), SI
+ MOVL 24(SP), DX
+ MOVL $0, AX // syscall entry
+ SYSCALL
+ CMPQ AX, $0xfffffffffffff001
+ JLS 5(PC)
+ MOVQ $-1, 32(SP)
+ NEGQ AX
+ MOVQ AX, 40(SP)
+ RET
+ MOVQ AX, 32(SP)
+ MOVQ $0, 40(SP)
+ RET
+
+TEXT syscall·write(SB),1,$0-16
+ MOVL 8(SP), DI
+ MOVQ 16(SP), SI
+ MOVL 24(SP), DX
+ MOVL $1, AX // syscall entry
+ SYSCALL
+ CMPQ AX, $0xfffffffffffff001
+ JLS 5(PC)
+ MOVQ $-1, 32(SP)
+ NEGQ AX
+ MOVQ AX, 40(SP)
+ RET
+ MOVQ AX, 32(SP)
+ MOVQ $0, 40(SP)
+ RET
+
+//TEXT sys·rt_sigaction(SB),1,$0-32
+// MOVL 8(SP), DI
+// MOVQ 16(SP), SI
+// MOVQ 24(SP), DX
+// MOVQ 32(SP), CX
+// MOVL CX, R10
+// MOVL $13, AX // syscall entry
+// SYSCALL
+// RET
+//
+//TEXT sigtramp(SB),1,$24-16
+// MOVQ DI,0(SP)
+// MOVQ SI,8(SP)
+// MOVQ DX,16(SP)
+// CALL sighandler(SB)
+// RET
+//
+//TEXT sys·mmap(SB),1,$0-32
+// MOVQ 8(SP), DI
+// MOVL 16(SP), SI
+// MOVL 20(SP), DX
+// MOVL 24(SP), CX
+// MOVL 28(SP), R8
+// MOVL 32(SP), R9
+//
+///* flags arg for ANON is 1000 but sb 20 */
+// MOVL CX, AX
+// ANDL $~0x1000, CX
+// ANDL $0x1000, AX
+// SHRL $7, AX
+// ORL AX, CX
+//
+// MOVL CX, R10
+// MOVL $9, AX // syscall entry
+// SYSCALL
+// CMPQ AX, $0xfffffffffffff001
+// JLS 2(PC)
+// CALL notok(SB)
+// RET
+//