diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/syscall/Makefile | 5 | ||||
| -rw-r--r-- | src/lib/syscall/asm_amd64_darwin.s | 18 | ||||
| -rw-r--r-- | src/lib/syscall/asm_amd64_linux.s | 19 | ||||
| -rw-r--r-- | src/lib/syscall/cast_amd64.s | 10 | ||||
| -rw-r--r-- | src/lib/syscall/file_darwin.go | 6 | ||||
| -rw-r--r-- | src/lib/syscall/file_linux.go | 6 | ||||
| -rw-r--r-- | src/lib/syscall/syscall.go | 2 | ||||
| -rw-r--r-- | src/lib/syscall/types_amd64_darwin.go | 28 | ||||
| -rw-r--r-- | src/lib/syscall/types_amd64_linux.go | 28 |
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 { |
