aboutsummaryrefslogtreecommitdiff
path: root/src/lib/syscall
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/syscall')
-rw-r--r--src/lib/syscall/Makefile5
-rw-r--r--src/lib/syscall/asm_amd64_darwin.s18
-rw-r--r--src/lib/syscall/asm_amd64_linux.s19
-rw-r--r--src/lib/syscall/cast_amd64.s10
-rw-r--r--src/lib/syscall/file_darwin.go6
-rw-r--r--src/lib/syscall/file_linux.go6
-rw-r--r--src/lib/syscall/syscall.go2
-rw-r--r--src/lib/syscall/types_amd64_darwin.go28
-rw-r--r--src/lib/syscall/types_amd64_linux.go28
9 files changed, 120 insertions, 2 deletions
diff --git a/src/lib/syscall/Makefile b/src/lib/syscall/Makefile
index 8dd3d2fe0f..5f613b9b42 100644
--- a/src/lib/syscall/Makefile
+++ b/src/lib/syscall/Makefile
@@ -5,7 +5,7 @@
# DO NOT EDIT. Automatically generated by gobuild.
# gobuild -m errstr_darwin.go file_darwin.go socket_darwin.go\
# syscall_amd64_darwin.go time_amd64_darwin.go types_amd64_darwin.go\
-# asm_amd64_darwin.s cast_amd64.s syscall.go >Makefile
+# asm_amd64_darwin.s cast_amd64.s syscall.go signal_amd64_darwin.go >Makefile
O=6
GC=$(O)g
CC=$(O)c -w
@@ -40,6 +40,7 @@ O1=\
asm_$(GOARCH)_$(GOOS).$O\
cast_$(GOARCH).$O\
syscall.$O\
+ signal_$(GOARCH)_$(GOOS).$O\
O2=\
file_$(GOOS).$O\
@@ -49,7 +50,7 @@ O2=\
syscall.a: a1 a2
a1: $(O1)
- $(AR) grc syscall.a errstr_$(GOOS).$O syscall_$(GOARCH)_$(GOOS).$O types_$(GOARCH)_$(GOOS).$O asm_$(GOARCH)_$(GOOS).$O cast_$(GOARCH).$O syscall.$O
+ $(AR) grc syscall.a errstr_$(GOOS).$O syscall_$(GOARCH)_$(GOOS).$O types_$(GOARCH)_$(GOOS).$O asm_$(GOARCH)_$(GOOS).$O cast_$(GOARCH).$O syscall.$O signal_$(GOARCH)_$(GOOS).$O
rm -f $(O1)
a2: $(O2)
diff --git a/src/lib/syscall/asm_amd64_darwin.s b/src/lib/syscall/asm_amd64_darwin.s
index 3cf6aad831..dbc345c19d 100644
--- a/src/lib/syscall/asm_amd64_darwin.s
+++ b/src/lib/syscall/asm_amd64_darwin.s
@@ -54,3 +54,21 @@ ok6:
MOVQ $0, 80(SP) // errno
CALL sys·exitsyscall(SB)
RET
+
+TEXT syscall·RawSyscall(SB),7,$0
+ MOVQ 16(SP), DI
+ MOVQ 24(SP), SI
+ MOVQ 32(SP), DX
+ MOVQ 8(SP), AX // syscall entry
+ ADDQ $0x2000000, AX
+ 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
diff --git a/src/lib/syscall/asm_amd64_linux.s b/src/lib/syscall/asm_amd64_linux.s
index e0c1153878..2826c1b580 100644
--- a/src/lib/syscall/asm_amd64_linux.s
+++ b/src/lib/syscall/asm_amd64_linux.s
@@ -57,3 +57,22 @@ ok6:
MOVQ $0, 80(SP) // errno
CALL sys·exitsyscall(SB)
RET
+
+TEXT syscall·RawSyscall(SB),7,$0
+ MOVQ 16(SP), DI
+ MOVQ 24(SP), SI
+ MOVQ 32(SP), DX
+ MOVQ 8(SP), AX // syscall entry
+ SYSCALL
+ CMPQ AX, $0xfffffffffffff001
+ JLS ok1
+ MOVQ $-1, 40(SP) // r1
+ MOVQ $0, 48(SP) // r2
+ NEGQ AX
+ MOVQ AX, 56(SP) // errno
+ RET
+ok1:
+ MOVQ AX, 40(SP) // r1
+ MOVQ DX, 48(SP) // r2
+ MOVQ $0, 56(SP) // errno
+ RET
diff --git a/src/lib/syscall/cast_amd64.s b/src/lib/syscall/cast_amd64.s
index c2205b990e..3eaa5e70e6 100644
--- a/src/lib/syscall/cast_amd64.s
+++ b/src/lib/syscall/cast_amd64.s
@@ -8,6 +8,11 @@ TEXT syscall·BytePtr(SB),7,$-8
MOVQ AX, 16(SP)
RET
+TEXT syscall·BytePtrPtr(SB),7,$-8
+ MOVQ 8(SP), AX
+ MOVQ AX, 16(SP)
+ RET
+
TEXT syscall·Int32Ptr(SB),7,$-8
MOVQ 8(SP), AX
MOVQ AX, 16(SP)
@@ -53,6 +58,11 @@ TEXT syscall·TimevalPtr(SB),7,$-8
MOVQ AX, 16(SP)
RET
+TEXT syscall·RusagePtr(SB),7,$-8
+ MOVQ 8(SP), AX
+ MOVQ AX, 16(SP)
+ RET
+
TEXT syscall·SockaddrToSockaddrInet4(SB),7,$-8
MOVQ 8(SP), AX
MOVQ AX, 16(SP)
diff --git a/src/lib/syscall/file_darwin.go b/src/lib/syscall/file_darwin.go
index 2cb78ffe5c..0c6a38a3ad 100644
--- a/src/lib/syscall/file_darwin.go
+++ b/src/lib/syscall/file_darwin.go
@@ -94,3 +94,9 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
r1, r2, err := Syscall(SYS_MKDIR, BytePtr(&namebuf[0]), perm, 0);
return r1, err;
}
+
+export func dup2(fd1, fd2 int64) (ret int64, errno int64) {
+ r1, r2, err := Syscall(SYS_DUP2, fd1, fd2, 0);
+ return r1, err;
+}
+
diff --git a/src/lib/syscall/file_linux.go b/src/lib/syscall/file_linux.go
index af7728a6b1..3fa2588aff 100644
--- a/src/lib/syscall/file_linux.go
+++ b/src/lib/syscall/file_linux.go
@@ -95,3 +95,9 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
r1, r2, err := Syscall(SYS_MKDIR, BytePtr(&namebuf[0]), perm, 0);
return r1, err;
}
+
+export func dup2(fd1, fd2 int64) (ret int64, errno int64) {
+ r1, r2, err := Syscall(SYS_DUP2, fd1, fd2, 0);
+ return r1, err;
+}
+
diff --git a/src/lib/syscall/syscall.go b/src/lib/syscall/syscall.go
index 6420684ce0..eb1ad36a64 100644
--- a/src/lib/syscall/syscall.go
+++ b/src/lib/syscall/syscall.go
@@ -10,10 +10,12 @@ package syscall
export func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
export func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64);
+export func RawSyscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
export func BytePtr(b *byte) int64;
export func Int32Ptr(p *int32) int64;
export func Int64Ptr(p *int64) int64;
+export func BytePtrPtr(b **byte) int64;
/*
* Used to convert file names to byte arrays for passing to kernel,
diff --git a/src/lib/syscall/types_amd64_darwin.go b/src/lib/syscall/types_amd64_darwin.go
index bb715ccb16..2c98fd521e 100644
--- a/src/lib/syscall/types_amd64_darwin.go
+++ b/src/lib/syscall/types_amd64_darwin.go
@@ -23,6 +23,29 @@ export type Timeval struct {
export func TimevalPtr(t *Timeval) int64;
+// Processes
+
+export type Rusage struct {
+ utime Timeval;
+ stime Timeval;
+ maxrss int64;
+ ixrss int64;
+ idrss int64;
+ isrss int64;
+ minflt int64;
+ majflt int64;
+ nswap int64;
+ inblock int64;
+ oublock int64;
+ msgsnd int64;
+ msgrcv int64;
+ nsignals int64;
+ nvcsw int64;
+ nivcsw int64;
+}
+export func RusagePtr(r *Rusage) int64;
+
+
// Files
export const (
@@ -38,8 +61,13 @@ export const (
O_SYNC = 0x80;
O_TRUNC = 0x400;
+ F_GETFD = 1;
+ F_SETFD = 2;
+
F_GETFL = 3;
F_SETFL = 4;
+
+ FD_CLOEXEC = 1;
)
export type Stat struct {
diff --git a/src/lib/syscall/types_amd64_linux.go b/src/lib/syscall/types_amd64_linux.go
index 534827e3e9..ccca2671cd 100644
--- a/src/lib/syscall/types_amd64_linux.go
+++ b/src/lib/syscall/types_amd64_linux.go
@@ -23,6 +23,29 @@ export type Timeval struct {
export func TimevalPtr(t *Timeval) int64;
+// Processes
+
+export type Rusage struct {
+ utime Timeval;
+ stime Timeval;
+ maxrss int64;
+ ixrss int64;
+ idrss int64;
+ isrss int64;
+ minflt int64;
+ majflt int64;
+ nswap int64;
+ inblock int64;
+ oublock int64;
+ msgsnd int64;
+ msgrcv int64;
+ nsignals int64;
+ nvcsw int64;
+ nivcsw int64;
+}
+export func RusagePtr(r *Rusage) int64;
+
+
// Files
export const (
@@ -38,8 +61,13 @@ export const (
O_SYNC = 0x1000;
O_TRUNC = 0x200;
+ F_GETFD = 1;
+ F_SETFD = 2;
+
F_GETFL = 3;
F_SETFL = 4;
+
+ FD_CLOEXEC = 1;
)
export type Stat struct {