Message ID | yddvczvw5pm.fsf@manam.CeBiTec.Uni-Bielefeld.DE |
---|---|
State | New |
Headers | show |
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes: > The libgo os test used to fail on 32-bit Solaris 2/x86 only: > > --- FAIL: os_test.TestHostname > Hostname() = "", want "fuego" > > Running the test under gdb, I find that syscall.Uname is entered with > errno = 4 and left the same, even if I reset errno = ENONE on entry. > Further investigation led to this snippet from <sys/utsname.h>: > > #if defined(__i386) && !defined(__amd64) > > static int > uname(struct utsname *_buf) > { > return (_nuname(_buf)); > } > > #endif > > The following patch reflects this and fixes the testcase. Thanks. Committed. Ian
diff -r cd964439e0b3 libgo/Makefile.am --- a/libgo/Makefile.am Sat Mar 05 20:51:22 2011 +0100 +++ b/libgo/Makefile.am Sat Mar 05 23:32:30 2011 +0100 @@ -1205,6 +1205,18 @@ syscall_socket_epoll_file = endif +# Support for uname. +if LIBGO_IS_SOLARIS +if LIBGO_IS_386 +# 32-bit Solaris 2/x86 needs _nuname, handled in syscall_solaris_386.go. +syscall_uname_file = +else # !LIBGO_IS_386 && LIBGO_IS_SOLARIS +syscall_uname_file = syscalls/syscall_uname.go +endif +else # !LIBGO_IS_SOLARIS +syscall_uname_file = syscalls/syscall_uname.go +endif + syscall_arch.go: s-syscall_arch; @true s-syscall_arch: Makefile rm -f syscall_arch.go.tmp @@ -1226,6 +1238,7 @@ $(syscall_socket_os_file) \ $(syscall_socket_epoll_file) \ $(syscall_syscall_file) \ + $(syscall_uname_file) \ syscalls/syscall_unix.go \ syscalls/stringbyte.go \ syscalls/syscall_$(GOOS).go \ diff -r cd964439e0b3 libgo/syscalls/syscall_solaris_386.go --- a/libgo/syscalls/syscall_solaris_386.go Sat Mar 05 20:51:22 2011 +0100 +++ b/libgo/syscalls/syscall_solaris_386.go Sat Mar 05 23:32:30 2011 +0100 @@ -15,3 +15,6 @@ var dummy *byte const sizeofPtr uintptr = uintptr(unsafe.Sizeof(dummy)) + +// 32-bit Solaris 2/x86 needs to use _nuname internally, cf. <sys/utsname.h>. +func libc_uname(buf *Utsname) (errno int) __asm__("_nuname") diff -r cd964439e0b3 libgo/syscalls/syscall_uname.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgo/syscalls/syscall_uname.go Sat Mar 05 23:32:30 2011 +0100 @@ -0,0 +1,7 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syscall + +func libc_uname(buf *Utsname) (errno int) __asm__("uname") diff -r cd964439e0b3 libgo/syscalls/syscall_unix.go --- a/libgo/syscalls/syscall_unix.go Sat Mar 05 20:51:22 2011 +0100 +++ b/libgo/syscalls/syscall_unix.go Sat Mar 05 23:32:30 2011 +0100 @@ -15,8 +15,6 @@ func GetErrno() int func SetErrno(int) -func libc_uname(buf *Utsname) (errno int) __asm__("uname") - func Uname(buf *Utsname) (errno int) { r := libc_uname(buf) if r < 0 {