libgo: Export {enter,exit}syscall and use it for getaddrinfo.
R=iant
CC=gofrontend-dev
https://golang.org/cl/5819043
diff --git a/libgo/go/net/cgo_unix.go b/libgo/go/net/cgo_unix.go
index e96df66..6751b8c 100644
--- a/libgo/go/net/cgo_unix.go
+++ b/libgo/go/net/cgo_unix.go
@@ -75,7 +75,10 @@
}
s := syscall.StringBytePtr(service)
- if libc_getaddrinfo(nil, s, &hints, &res) == 0 {
+ syscall.Entersyscall()
+ gerrno := libc_getaddrinfo(nil, s, &hints, &res)
+ syscall.Exitsyscall()
+ if gerrno == 0 {
defer libc_freeaddrinfo(res)
for r := res; r != nil; r = r.Ai_next {
switch r.Ai_family {
@@ -108,7 +111,9 @@
hints.Ai_flags = int32((syscall.AI_ALL | syscall.AI_V4MAPPED | syscall.AI_CANONNAME) & cgoAddrInfoMask())
h := syscall.StringBytePtr(name)
+ syscall.Entersyscall()
gerrno := libc_getaddrinfo(h, nil, &hints, &res)
+ syscall.Exitsyscall()
if gerrno != 0 {
var str string
if gerrno == syscall.EAI_NONAME {
diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
index bb96073..f5358f5 100644
--- a/libgo/go/syscall/libcall_linux.go
+++ b/libgo/go/syscall/libcall_linux.go
@@ -202,13 +202,13 @@
} else {
p = (*byte)(unsafe.Pointer(&_zero))
}
- entersyscall()
+ Entersyscall()
r1, _, errno := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(len(buf)))
n = int(r1)
if n < 0 {
err = errno
}
- exitsyscall()
+ Exitsyscall()
return
}
diff --git a/libgo/go/syscall/libcall_support.go b/libgo/go/syscall/libcall_support.go
index 7449a0a..7746cc2 100644
--- a/libgo/go/syscall/libcall_support.go
+++ b/libgo/go/syscall/libcall_support.go
@@ -6,7 +6,7 @@
package syscall
-func entersyscall()
-func exitsyscall()
+func Entersyscall()
+func Exitsyscall()
func GetErrno() Errno
func SetErrno(Errno)
diff --git a/libgo/go/syscall/mksyscall.awk b/libgo/go/syscall/mksyscall.awk
index 8da0234..5e30e86 100644
--- a/libgo/go/syscall/mksyscall.awk
+++ b/libgo/go/syscall/mksyscall.awk
@@ -190,7 +190,7 @@
}
if (blocking) {
- print "\tentersyscall()"
+ print "\tEntersyscall()"
}
printf("\t")
@@ -240,7 +240,7 @@
}
if (blocking) {
- print "\texitsyscall()"
+ print "\tExitsyscall()"
}
if (gofnresults != "") {
diff --git a/libgo/go/syscall/syscall_unix.go b/libgo/go/syscall/syscall_unix.go
index 85182b7..e3c6629 100644
--- a/libgo/go/syscall/syscall_unix.go
+++ b/libgo/go/syscall/syscall_unix.go
@@ -30,7 +30,7 @@
// the arguments, so that we don't pass a 64-bit value when the function
// expects a 32-bit one.
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
- entersyscall()
+ Entersyscall()
var r uintptr
if unsafe.Sizeof(r) == 4 {
r1 := c_syscall32(int32(trap), int32(a1), int32(a2), int32(a3), 0, 0, 0)
@@ -40,12 +40,12 @@
r = uintptr(r1)
}
err = GetErrno()
- exitsyscall()
+ Exitsyscall()
return r, 0, err
}
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
- entersyscall()
+ Entersyscall()
var r uintptr
if unsafe.Sizeof(r) == 4 {
r1 := c_syscall32(int32(trap), int32(a1), int32(a2), int32(a3),
@@ -57,7 +57,7 @@
r = uintptr(r1)
}
err = GetErrno()
- exitsyscall()
+ Exitsyscall()
return r, 0, err
}
diff --git a/libgo/runtime/runtime.h b/libgo/runtime/runtime.h
index e012e18..2deb46e 100644
--- a/libgo/runtime/runtime.h
+++ b/libgo/runtime/runtime.h
@@ -298,8 +298,8 @@
void runtime_tsleep(int64);
M* runtime_newm(void);
void runtime_goexit(void);
-void runtime_entersyscall(void) __asm__("libgo_syscall.syscall.entersyscall");
-void runtime_exitsyscall(void) __asm__("libgo_syscall.syscall.exitsyscall");
+void runtime_entersyscall(void) __asm__("libgo_syscall.syscall.Entersyscall");
+void runtime_exitsyscall(void) __asm__("libgo_syscall.syscall.Exitsyscall");
void siginit(void);
bool __go_sigsend(int32 sig);
int32 runtime_callers(int32, uintptr*, int32);