This patch adds some Getsockopt functions to the syscall package.
These functions exist in the master library, but never made it into
gccgo's syscall package.  This fixes GCC PR 69966.  Bootstrapped and
ran Go testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE     (revision 233670)
+++ gcc/go/gofrontend/MERGE     (working copy)
@@ -1,4 +1,4 @@
-156f5f0152797ac2afe5f23803aeb3c7b8f8418e
+3de822d11255d439fac9717897b017aae2de18c2
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/syscall/socket.go
===================================================================
--- libgo/go/syscall/socket.go  (revision 232239)
+++ libgo/go/syscall/socket.go  (working copy)
@@ -251,6 +251,13 @@ func GetsockoptIPv6Mreq(fd, level, opt i
        return &value, err
 }
 
+func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
+       var value ICMPv6Filter
+       vallen := Socklen_t(SizeofICMPv6Filter)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
 //sys  setsockopt(s int, level int, name int, val unsafe.Pointer, vallen 
Socklen_t) (err error)
 //setsockopt(s _C_int, level _C_int, optname _C_int, val *byte, vallen 
Socklen_t) _C_int
 
Index: libgo/go/syscall/socket_bsd.go
===================================================================
--- libgo/go/syscall/socket_bsd.go      (revision 232239)
+++ libgo/go/syscall/socket_bsd.go      (working copy)
@@ -80,3 +80,10 @@ func BindToDevice(fd int, device string)
 func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) {
        return nil, EAFNOSUPPORT
 }
+
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+       var value IPv6MTUInfo
+       vallen := Socklen_t(SizeofIPv6MTUInfo)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
Index: libgo/go/syscall/socket_linux.go
===================================================================
--- libgo/go/syscall/socket_linux.go    (revision 232239)
+++ libgo/go/syscall/socket_linux.go    (working copy)
@@ -168,6 +168,20 @@ func anyToSockaddrOS(rsa *RawSockaddrAny
        return nil, EAFNOSUPPORT
 }
 
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+       var value IPv6MTUInfo
+       vallen := Socklen_t(SizeofIPv6MTUInfo)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
+func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
+       var value Ucred
+       vallen := Socklen_t(SizeofUcred)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
 //sysnb        EpollCreate(size int) (fd int, err error)
 //epoll_create(size _C_int) _C_int
 
Index: libgo/mksysinfo.sh
===================================================================
--- libgo/mksysinfo.sh  (revision 232239)
+++ libgo/mksysinfo.sh  (working copy)
@@ -870,6 +870,14 @@ if ! grep 'type ICMPv6Filter ' ${OUT} >
   echo 'type ICMPv6Filter struct { Data [8]uint32 }' >> ${OUT}
 fi
 
+# The ip6_mtuinfo struct.
+grep '^type _ip6_mtuinfo ' gen-sysinfo.go | \
+    sed -e 's/_ip6_mtuinfo/IPv6MTUInfo/' \
+      -e 's/ip6m_addr/Addr/' \
+      -e 's/_sockaddr_in6/RawSockaddrInet6/' \
+      -e 's/ip6m_mtu/Mtu/' \
+    >> ${OUT}
+
 # Try to guess the type to use for fd_set.
 fd_set=`grep '^type _fd_set ' gen-sysinfo.go || true`
 fds_bits_type="_C_long"
@@ -1464,7 +1472,7 @@ set cmsghdr Cmsghdr ip_mreq IPMreq ip_mr
     msghdr Msghdr nlattr NlAttr nlmsgerr NlMsgerr nlmsghdr NlMsghdr \
     rtattr RtAttr rtgenmsg RtGenmsg rtmsg RtMsg rtnexthop RtNexthop \
     sock_filter SockFilter sock_fprog SockFprog ucred Ucred \
-    icmp6_filter ICMPv6Filter
+    icmp6_filter ICMPv6Filter ip6_mtuinfo IPv6MTUInfo
 while test $# != 0; do
     nc=$1
     ngo=$2

Reply via email to