From: ian Date: Tue, 13 Mar 2012 23:01:30 +0000 (+0000) Subject: libgo: Export {enter,exit}syscall and use it for getaddrinfo. X-Git-Tag: upstream/4.9.2~13777 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=feda1e411459166969d5f44983099a0252ed37a1;p=platform%2Fupstream%2Flinaro-gcc.git libgo: Export {enter,exit}syscall and use it for getaddrinfo. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185363 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 @@ func cgoLookupPort(net, service string) (port int, err error, completed bool) { } 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 @@ func cgoLookupIPCNAME(name string) (addrs []IP, cname string, err error, complet 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 @@ func Getdents(fd int, buf []byte) (n int, err error) { } 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 @@ BEGIN { } if (blocking) { - print "\tentersyscall()" + print "\tEntersyscall()" } printf("\t") @@ -240,7 +240,7 @@ BEGIN { } 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 @@ const darwinAMD64 = runtime.GOOS == "darwin" && runtime.GOARCH == "amd64" // 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 @@ func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) { 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 @@ func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) 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_gosched(void); 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);