summaryrefslogtreecommitdiff
path: root/src/lib/syscall/asm_amd64_linux.s
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2008-11-25 16:48:10 -0800
committerRuss Cox <rsc@golang.org>2008-11-25 16:48:10 -0800
commit95b81617d4543ba7562d721c6fe7db5e5c419816 (patch)
tree743804e70a46a7102c893ee7aa4e1684b477f272 /src/lib/syscall/asm_amd64_linux.s
parent7dfdd037d7730b30552db8fea7739e346f02770e (diff)
downloadgolang-95b81617d4543ba7562d721c6fe7db5e5c419816.tar.gz
change meaning of $GOMAXPROCS to number of cpus to use,
not number of threads. can still starve all the other threads, but only by looping, not by waiting in a system call. fix darwin syscall.Syscall6 bug. fix chanclient bug. delete $GOMAXPROCS from network tests. add stripped down printf, sys.printhex to runtime. R=r DELTA=355 (217 added, 36 deleted, 102 changed) OCL=20017 CL=20019
Diffstat (limited to 'src/lib/syscall/asm_amd64_linux.s')
-rw-r--r--src/lib/syscall/asm_amd64_linux.s17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/lib/syscall/asm_amd64_linux.s b/src/lib/syscall/asm_amd64_linux.s
index 48630337a..e0c115387 100644
--- a/src/lib/syscall/asm_amd64_linux.s
+++ b/src/lib/syscall/asm_amd64_linux.s
@@ -11,25 +11,30 @@
// Note that this differs from "standard" ABI convention, which
// would pass 4th arg in CX, not R10.
-TEXT syscall·Syscall(SB),7,$-8
+TEXT syscall·Syscall(SB),7,$0
+ CALL sys·entersyscall(SB)
MOVQ 16(SP), DI
MOVQ 24(SP), SI
MOVQ 32(SP), DX
MOVQ 8(SP), AX // syscall entry
SYSCALL
CMPQ AX, $0xfffffffffffff001
- JLS 6(PC)
+ JLS ok
MOVQ $-1, 40(SP) // r1
MOVQ $0, 48(SP) // r2
NEGQ AX
MOVQ AX, 56(SP) // errno
+ CALL sys·exitsyscall(SB)
RET
+ok:
MOVQ AX, 40(SP) // r1
MOVQ DX, 48(SP) // r2
MOVQ $0, 56(SP) // errno
+ CALL sys·exitsyscall(SB)
RET
-TEXT syscall·Syscall6(SB),7,$-8
+TEXT syscall·Syscall6(SB),7,$0
+ CALL sys·entersyscall(SB)
MOVQ 16(SP), DI
MOVQ 24(SP), SI
MOVQ 32(SP), DX
@@ -38,13 +43,17 @@ TEXT syscall·Syscall6(SB),7,$-8
MOVQ 56(SP), R9
MOVQ 8(SP), AX // syscall entry
SYSCALL
- JLS 6(PC)
+ CMPQ AX, $0xfffffffffffff001
+ JLS ok6
MOVQ $-1, 64(SP) // r1
MOVQ $0, 72(SP) // r2
NEGQ AX
MOVQ AX, 80(SP) // errno
+ CALL sys·exitsyscall(SB)
RET
+ok6:
MOVQ AX, 64(SP) // r1
MOVQ DX, 72(SP) // r2
MOVQ $0, 80(SP) // errno
+ CALL sys·exitsyscall(SB)
RET