diff mbox

libgo patch committed: Update to Go 1.5 release

Message ID yddr3k02yr8.fsf@CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth Nov. 8, 2015, 5:21 p.m. UTC
Ian Lance Taylor <iant@golang.org> writes:

> On Fri, Nov 6, 2015 at 5:01 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote:
>> Ian Lance Taylor <iant@golang.org> writes:
>>
>>> I have committed a patch to libgo to update it to the Go 1.5 release.
>>>
>>> As usual for libgo updates, the actual patch is too large to attach to
>>> this e-mail message.  I've attached the changes to the gccgo-specific
>>> files.
>>>
>>> Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
>>> to mainline.
>>>
>>> This may cause trouble on non-GNU/Linux operating systems.  Please let
>>> me know about any problems you encounter.
>>
>> It does indeed (first tried on i386-pc-solaris2.10):
>>
>> *
>>
>> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-varargs.c: In function '__go_ioctl':
>> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-varargs.c:63:10: error: implicit declaration of function 'ioctl' [-Werror=implicit-function-declaration]
>>    return ioctl (d, request, arg);
>>           ^
>>
>>   Needs <unistd.h>, the following patch works:
>>
>>
>>
>> *
>>
>> /vol/gcc/src/hg/trunk/local/libgo/go/syscall/exec_bsd.go:107:7: error: incompatible types in assignment (cannot use type int as type Pid_t)
>>     r1 = raw_getpid()
>>        ^
>>
>> I can cast to Pid_t and this works.  The underlying error to me seems
>> that raw_getpid the in the generated libcalls.go is wrong, casting
>> c_getpid return value to int while pid_t can be long.
>>
>> *
>>
>> /vol/gcc/src/hg/trunk/local/libgo/go/net/hook_cloexec.go:13:70: error: reference to undefined identifier 'syscall.Accept4'
>>   accept4Func func(int, int) (int, syscall.Sockaddr, error) = syscall.Accept4
>>                                                                       ^
>>
>> No accept4 on Solaris (and certainly other systems, thence configure
>> test), but used unconditionally.
>>
>> *
>>
>> /vol/gcc/src/hg/trunk/local/libgo/go/net/sendfile_solaris.go:78:22: error: reference to undefined identifier 'syscall.Sendfile'
>>    n, err1 := syscall.Sendfile(dst, src, &pos1, n)
>>                       ^
>>
>> Only in go/syscall/libcall_linux.go!?
>>
>> *
>>
>> /vol/gcc/src/hg/trunk/local/libgo/go/net/tcpsockopt_solaris.go:34:103: error: reference to undefined identifier 'syscall.TCP_KEEPALIVE_THRESHOLD'
>>   return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_KEEPALIVE_THRESHOLD, msecs))
>>
>>                        ^
>>
>> Not in Solaris 10, only Solaris 11 and 12 have it.
>
> Thanks for the notes.  I committed this patch to address these problems.

Worked like a charm, thanks.

There were two remaining problems:

* Before Solaris 12, sendfile only lives in libsendfile.  This lead to
  link failures in gotools.

* Solaris 12 introduced a couple more types that use _in6_addr_t, which
  are filtered out by mksysinfo.sh, leading to compilation failues.

The following patch addresses both issues.  Solaris 10 and 11 bootstraps
have completed, a Solaris 12 bootstrap is still running make check.
Rainer

Comments

Ian Lance Taylor Nov. 10, 2015, 9:39 p.m. UTC | #1
On Sun, Nov 8, 2015 at 9:21 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote:
>
> There were two remaining problems:
>
> * Before Solaris 12, sendfile only lives in libsendfile.  This lead to
>   link failures in gotools.
>
> * Solaris 12 introduced a couple more types that use _in6_addr_t, which
>   are filtered out by mksysinfo.sh, leading to compilation failues.
>
> The following patch addresses both issues.  Solaris 10 and 11 bootstraps
> have completed, a Solaris 12 bootstrap is still running make check.

Thanks.  Committed to mainline.

Ian
Rainer Orth Nov. 11, 2015, 11:48 a.m. UTC | #2
Ian Lance Taylor <iant@golang.org> writes:

> On Sun, Nov 8, 2015 at 9:21 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote:
>>
>> There were two remaining problems:
>>
>> * Before Solaris 12, sendfile only lives in libsendfile.  This lead to
>>   link failures in gotools.
>>
>> * Solaris 12 introduced a couple more types that use _in6_addr_t, which
>>   are filtered out by mksysinfo.sh, leading to compilation failues.
>>
>> The following patch addresses both issues.  Solaris 10 and 11 bootstraps
>> have completed, a Solaris 12 bootstrap is still running make check.
>
> Thanks.  Committed to mainline.

Great, thanks.  The mkssysinfo.sh part is also necessary on the gcc-5
branch.  Tested on i386-pc-solaris2.12 and sparc-sun-solaris2.12, ok to
install?

	Rainer
Ian Lance Taylor Nov. 11, 2015, 1:25 p.m. UTC | #3
On Wed, Nov 11, 2015 at 3:48 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
> Ian Lance Taylor <iant@golang.org> writes:
>
>> On Sun, Nov 8, 2015 at 9:21 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote:
>>>
>>> There were two remaining problems:
>>>
>>> * Before Solaris 12, sendfile only lives in libsendfile.  This lead to
>>>   link failures in gotools.
>>>
>>> * Solaris 12 introduced a couple more types that use _in6_addr_t, which
>>>   are filtered out by mksysinfo.sh, leading to compilation failues.
>>>
>>> The following patch addresses both issues.  Solaris 10 and 11 bootstraps
>>> have completed, a Solaris 12 bootstrap is still running make check.
>>
>> Thanks.  Committed to mainline.
>
> Great, thanks.  The mkssysinfo.sh part is also necessary on the gcc-5
> branch.  Tested on i386-pc-solaris2.12 and sparc-sun-solaris2.12, ok to
> install?

Sure, go ahead.

Ian
diff mbox

Patch

diff --git a/libgo/configure.ac b/libgo/configure.ac
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -482,6 +482,9 @@  AC_CACHE_CHECK([for socket libraries], l
 		 [AC_CHECK_LIB(nsl, main,
 		 	[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
    unset ac_cv_func_gethostbyname
+   AC_CHECK_FUNC(sendfile, ,
+		 [AC_CHECK_LIB(sendfile, main,
+		 	[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
    LIBS=$libgo_old_libs
 ])
 NET_LIBS="$libgo_cv_lib_sockets"
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -1488,4 +1488,24 @@  grep '^type _zone_net_addr_t ' gen-sysin
     sed -e 's/_in6_addr/[16]byte/' \
     >> ${OUT}
 
+# The Solaris 12 _flow_arp_desc_t struct.
+grep '^type _flow_arp_desc_t ' gen-sysinfo.go | \
+    sed -e 's/_in6_addr_t/[16]byte/g' \
+    >> ${OUT}
+
+# The Solaris 12 _flow_l3_desc_t struct.
+grep '^type _flow_l3_desc_t ' gen-sysinfo.go | \
+    sed -e 's/_in6_addr_t/[16]byte/g' \
+    >> ${OUT}
+
+# The Solaris 12 _mac_ipaddr_t struct.
+grep '^type _mac_ipaddr_t ' gen-sysinfo.go | \
+    sed -e 's/_in6_addr_t/[16]byte/g' \
+    >> ${OUT}
+
+# The Solaris 12 _mactun_info_t struct.
+grep '^type _mactun_info_t ' gen-sysinfo.go | \
+    sed -e 's/_in6_addr_t/[16]byte/g' \
+    >> ${OUT}
+
 exit $?