libgo: Export {enter,exit}syscall and use it for getaddrinfo.

From-SVN: r185363
This commit is contained in:
Ian Lance Taylor 2012-03-13 23:01:30 +00:00
parent 13bd57a177
commit 24aea58753
6 changed files with 18 additions and 13 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -6,7 +6,7 @@
package syscall
func entersyscall()
func exitsyscall()
func Entersyscall()
func Exitsyscall()
func GetErrno() Errno
func SetErrno(Errno)

View File

@ -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 != "") {

View File

@ -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
}

View File

@ -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);