diff mbox

libgo patch committed: Update to Go1.8rc1

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

Commit Message

Rainer Orth Jan. 16, 2017, 4:21 p.m. UTC
Hi Ian,

> This seems to need a version of defs_solaris.go that works with the
> constants and structs living in syscall.

I've made some progress here: I need to check <sys/sockio.h> for
SIOCGLIF* ioctls, and <net/if_types.h> for the IFT_* constants.  I've
updated configure.in and sysinfo.c accordingly, and adapted
defs_solaris.go as well.  However, I still run into a number of errors:

/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:29:22: error: reference to undefined identifier 'syscall._sockaddr_storage'
 type sockaddrStorage syscall._sockaddr_storage
                      ^

/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:32:36: error: reference to undefined identifier 'syscall.LIFC_NOXMIT'
  sysLIFC_NOXMIT          = syscall.LIFC_NOXMIT
                                    ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:33:36: error: reference to undefined identifier 'syscall.LIFC_EXTERNAL_SOURCE'
  sysLIFC_EXTERNAL_SOURCE = syscall.LIFC_EXTERNAL_SOURCE
                                    ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:34:36: error: reference to undefined identifier 'syscall.LIFC_TEMPORARY'
  sysLIFC_TEMPORARY       = syscall.LIFC_TEMPORARY
                                    ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:35:36: error: reference to undefined identifier 'syscall.LIFC_ALLZONES'
  sysLIFC_ALLZONES        = syscall.LIFC_ALLZONES
                                    ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:36:36: error: reference to undefined identifier 'syscall.LIFC_UNDER_IPMP'
  sysLIFC_UNDER_IPMP      = syscall.LIFC_UNDER_IPMP
                                    ^

The LIFC_* constants are only present in their _LIFC_* form in
sysinfo.go so far; need update to mksysinfo.sh.

/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:40:31: error: reference to undefined identifier 'syscall.SIOCGLIFADDR'
  sysSIOCGLIFADDR    = syscall.SIOCGLIFADDR
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:41:31: error: reference to undefined identifier 'syscall.SIOCGLIFDSTADDR'
  sysSIOCGLIFDSTADDR = syscall.SIOCGLIFDSTADDR
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:42:31: error: reference to undefined identifier 'syscall.SIOCGLIFFLAGS'
  sysSIOCGLIFFLAGS   = syscall.SIOCGLIFFLAGS
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:43:31: error: reference to undefined identifier 'syscall.SIOCGLIFMTU'
  sysSIOCGLIFMTU     = syscall.SIOCGLIFMTU
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:44:31: error: reference to undefined identifier 'syscall.SIOCGLIFNETMASK'
  sysSIOCGLIFNETMASK = syscall.SIOCGLIFNETMASK
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:45:31: error: reference to undefined identifier 'syscall.SIOCGLIFMETRIC'
  sysSIOCGLIFMETRIC  = syscall.SIOCGLIFMETRIC
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:46:31: error: reference to undefined identifier 'syscall.SIOCGLIFNUM'
  sysSIOCGLIFNUM     = syscall.SIOCGLIFNUM
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:47:31: error: reference to undefined identifier 'syscall.SIOCGLIFINDEX'
  sysSIOCGLIFINDEX   = syscall.SIOCGLIFINDEX
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:48:31: error: reference to undefined identifier 'syscall.SIOCGLIFSUBNET'
  sysSIOCGLIFSUBNET  = syscall.SIOCGLIFSUBNET
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:49:31: error: reference to undefined identifier 'syscall.SIOCGLIFLNKINFO'
  sysSIOCGLIFLNKINFO = syscall.SIOCGLIFLNKINFO
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:50:31: error: reference to undefined identifier 'syscall.SIOCGLIFCONF'
  sysSIOCGLIFCONF    = syscall.SIOCGLIFCONF
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:51:31: error: reference to undefined identifier 'syscall.SIOCGLIFHWADDR'
  sysSIOCGLIFHWADDR  = syscall.SIOCGLIFHWADDR
                               ^

All of them show as

// unknowndefine SIOCGLIFMTU _IOWR('i', 122, struct lifreq)

in gen-sysinfo.go.  Not sure what's going on here...

/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:73:31: error: invalid reference to unexported identifier 'syscall._sizeof_lifnum'
  sizeofLifnum       = syscall._sizeof_lifnum
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:74:31: error: invalid reference to unexported identifier 'syscall._sizeof_lifreq'
  sizeofLifreq       = syscall._sizeof_lifreq
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:75:31: error: invalid reference to unexported identifier 'syscall._sizeof_lifconf'
  sizeofLifconf      = syscall._sizeof_lifconf
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:76:31: error: invalid reference to unexported identifier 'syscall._sizeof_lif_ifinfo_req'
  sizeofLifIfinfoReq = syscall._sizeof_lif_ifinfo_req
                               ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:79:16: error: reference to undefined identifier 'syscall._lifnum'
 type sysLifnum syscall._lifnum
                ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:81:13: error: reference to undefined identifier 'syscall._lifreq'
 type lifreq syscall._lifreq
             ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:83:14: error: reference to undefined identifier 'syscall._lifconf'
 type lifconf syscall._lifconf
              ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:85:19: error: reference to undefined identifier 'syscall._lif_ifinfo_req'
 type lifIfinfoReq syscall._lif_ifinfo_req
                   ^

The structs aren't exported yet, need handling in mksysinfo.sh, too, I
believe.

/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:88:24: error: reference to undefined identifier 'syscall.IFT_IPV4'
  sysIFT_IPV4 = syscall.IFT_IPV4
                        ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:89:24: error: reference to undefined identifier 'syscall.IFT_IPV6'
  sysIFT_IPV6 = syscall.IFT_IPV6
                        ^
/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/defs_solaris.go:90:24: error: reference to undefined identifier 'syscall.IFT_6TO4'
  sysIFT_6TO4 = syscall.IFT_6TO4
                        ^

Need exporting: mksysinfo.sh handling for _IFT_ -> IFT_ transform.

/vol/gcc/src/hg/trunk/local/libgo/go/golang_org/x/net/lif/syscall.go:19:25: error: reference to undefined identifier 'syscall.Ioctl'
  _, _, errno := syscall.Ioctl(s, ioc, uintptr(arg))
                         ^

No idea what's wrong here...

	Rainer
diff mbox

Patch

diff --git a/libgo/configure.ac b/libgo/configure.ac
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -578,7 +578,7 @@  AC_C_BIGENDIAN
 
 GCC_CHECK_UNWIND_GETIPINFO
 
-AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
+AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h sys/sockio.h net/if_types.h)
 
 AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
 [#ifdef HAVE_SYS_SOCKET_H
diff --git a/libgo/go/golang_org/x/net/lif/defs_solaris.go b/libgo/go/golang_org/x/net/lif/defs_solaris.go
--- a/libgo/go/golang_org/x/net/lif/defs_solaris.go
+++ b/libgo/go/golang_org/x/net/lif/defs_solaris.go
@@ -2,7 +2,7 @@ 
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build ignore
+// +build solaris
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
 // +godefs map struct_in6_addr [16]byte /* in6_addr */
@@ -16,75 +16,76 @@  package lif
 #include <net/if.h>
 #include <net/if_types.h>
 */
-import "C"
+import "syscall"
 
 const (
-	sysAF_UNSPEC = C.AF_UNSPEC
-	sysAF_INET   = C.AF_INET
-	sysAF_INET6  = C.AF_INET6
+	sysAF_UNSPEC = syscall.AF_UNSPEC
+	sysAF_INET   = syscall.AF_INET
+	sysAF_INET6  = syscall.AF_INET6
 
-	sysSOCK_DGRAM = C.SOCK_DGRAM
+	sysSOCK_DGRAM = syscall.SOCK_DGRAM
 )
 
-type sockaddrStorage C.struct_sockaddr_storage
+type sockaddrStorage syscall._sockaddr_storage
 
 const (
-	sysLIFC_NOXMIT          = C.LIFC_NOXMIT
-	sysLIFC_EXTERNAL_SOURCE = C.LIFC_EXTERNAL_SOURCE
-	sysLIFC_TEMPORARY       = C.LIFC_TEMPORARY
-	sysLIFC_ALLZONES        = C.LIFC_ALLZONES
-	sysLIFC_UNDER_IPMP      = C.LIFC_UNDER_IPMP
-	sysLIFC_ENABLED         = C.LIFC_ENABLED
+	sysLIFC_NOXMIT          = syscall.LIFC_NOXMIT
+	sysLIFC_EXTERNAL_SOURCE = syscall.LIFC_EXTERNAL_SOURCE
+	sysLIFC_TEMPORARY       = syscall.LIFC_TEMPORARY
+	sysLIFC_ALLZONES        = syscall.LIFC_ALLZONES
+	sysLIFC_UNDER_IPMP      = syscall.LIFC_UNDER_IPMP
+	// Not in Solaris 12, unused.
+	// sysLIFC_ENABLED      = syscall.LIFC_ENABLED
 
-	sysSIOCGLIFADDR    = C.SIOCGLIFADDR
-	sysSIOCGLIFDSTADDR = C.SIOCGLIFDSTADDR
-	sysSIOCGLIFFLAGS   = C.SIOCGLIFFLAGS
-	sysSIOCGLIFMTU     = C.SIOCGLIFMTU
-	sysSIOCGLIFNETMASK = C.SIOCGLIFNETMASK
-	sysSIOCGLIFMETRIC  = C.SIOCGLIFMETRIC
-	sysSIOCGLIFNUM     = C.SIOCGLIFNUM
-	sysSIOCGLIFINDEX   = C.SIOCGLIFINDEX
-	sysSIOCGLIFSUBNET  = C.SIOCGLIFSUBNET
-	sysSIOCGLIFLNKINFO = C.SIOCGLIFLNKINFO
-	sysSIOCGLIFCONF    = C.SIOCGLIFCONF
-	sysSIOCGLIFHWADDR  = C.SIOCGLIFHWADDR
+	sysSIOCGLIFADDR    = syscall.SIOCGLIFADDR
+	sysSIOCGLIFDSTADDR = syscall.SIOCGLIFDSTADDR
+	sysSIOCGLIFFLAGS   = syscall.SIOCGLIFFLAGS
+	sysSIOCGLIFMTU     = syscall.SIOCGLIFMTU
+	sysSIOCGLIFNETMASK = syscall.SIOCGLIFNETMASK
+	sysSIOCGLIFMETRIC  = syscall.SIOCGLIFMETRIC
+	sysSIOCGLIFNUM     = syscall.SIOCGLIFNUM
+	sysSIOCGLIFINDEX   = syscall.SIOCGLIFINDEX
+	sysSIOCGLIFSUBNET  = syscall.SIOCGLIFSUBNET
+	sysSIOCGLIFLNKINFO = syscall.SIOCGLIFLNKINFO
+	sysSIOCGLIFCONF    = syscall.SIOCGLIFCONF
+	sysSIOCGLIFHWADDR  = syscall.SIOCGLIFHWADDR
 )
 
 const (
-	sysIFF_UP          = C.IFF_UP
-	sysIFF_BROADCAST   = C.IFF_BROADCAST
-	sysIFF_DEBUG       = C.IFF_DEBUG
-	sysIFF_LOOPBACK    = C.IFF_LOOPBACK
-	sysIFF_POINTOPOINT = C.IFF_POINTOPOINT
-	sysIFF_NOTRAILERS  = C.IFF_NOTRAILERS
-	sysIFF_RUNNING     = C.IFF_RUNNING
-	sysIFF_NOARP       = C.IFF_NOARP
-	sysIFF_PROMISC     = C.IFF_PROMISC
-	sysIFF_ALLMULTI    = C.IFF_ALLMULTI
-	sysIFF_INTELLIGENT = C.IFF_INTELLIGENT
-	sysIFF_MULTICAST   = C.IFF_MULTICAST
-	sysIFF_MULTI_BCAST = C.IFF_MULTI_BCAST
-	sysIFF_UNNUMBERED  = C.IFF_UNNUMBERED
-	sysIFF_PRIVATE     = C.IFF_PRIVATE
+	sysIFF_UP          = syscall.IFF_UP
+	sysIFF_BROADCAST   = syscall.IFF_BROADCAST
+	sysIFF_DEBUG       = syscall.IFF_DEBUG
+	sysIFF_LOOPBACK    = syscall.IFF_LOOPBACK
+	sysIFF_POINTOPOINT = syscall.IFF_POINTOPOINT
+	sysIFF_NOTRAILERS  = syscall.IFF_NOTRAILERS
+	sysIFF_RUNNING     = syscall.IFF_RUNNING
+	sysIFF_NOARP       = syscall.IFF_NOARP
+	sysIFF_PROMISC     = syscall.IFF_PROMISC
+	sysIFF_ALLMULTI    = syscall.IFF_ALLMULTI
+	sysIFF_INTELLIGENT = syscall.IFF_INTELLIGENT
+	sysIFF_MULTICAST   = syscall.IFF_MULTICAST
+	sysIFF_MULTI_BCAST = syscall.IFF_MULTI_BCAST
+	sysIFF_UNNUMBERED  = syscall.IFF_UNNUMBERED
+	sysIFF_PRIVATE     = syscall.IFF_PRIVATE
 )
 
 const (
-	sizeofLifnum       = C.sizeof_struct_lifnum
-	sizeofLifreq       = C.sizeof_struct_lifreq
-	sizeofLifconf      = C.sizeof_struct_lifconf
-	sizeofLifIfinfoReq = C.sizeof_struct_lif_ifinfo_req
+	sizeofLifnum       = syscall._sizeof_lifnum
+	sizeofLifreq       = syscall._sizeof_lifreq
+	sizeofLifconf      = syscall._sizeof_lifconf
+	sizeofLifIfinfoReq = syscall._sizeof_lif_ifinfo_req
 )
 
-type sysLifnum C.struct_lifnum
+type sysLifnum syscall._lifnum
 
-type lifreq C.struct_lifreq
+type lifreq syscall._lifreq
 
-type lifconf C.struct_lifconf
+type lifconf syscall._lifconf
 
-type lifIfinfoReq C.struct_lif_ifinfo_req
+type lifIfinfoReq syscall._lif_ifinfo_req
 
 const (
-	sysIFT_IPV4 = C.IFT_IPV4
-	sysIFT_IPV6 = C.IFT_IPV6
-	sysIFT_6TO4 = C.IFT_6TO4
+	sysIFT_IPV4 = syscall.IFT_IPV4
+	sysIFT_IPV6 = syscall.IFT_IPV6
+	sysIFT_6TO4 = syscall.IFT_6TO4
 )
diff --git a/libgo/go/golang_org/x/net/lif/syscall.go b/libgo/go/golang_org/x/net/lif/syscall.go
--- a/libgo/go/golang_org/x/net/lif/syscall.go
+++ b/libgo/go/golang_org/x/net/lif/syscall.go
@@ -11,20 +11,12 @@  import (
 	"unsafe"
 )
 
-//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
-
-//go:linkname procIoctl libc_ioctl
-
-var procIoctl uintptr
-
-func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
-
 // TODO: replace with runtime.KeepAlive when available
 //go:noescape
 func keepAlive(p unsafe.Pointer)
 
 func ioctl(s, ioc uintptr, arg unsafe.Pointer) error {
-	_, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0)
+	_, _, errno := syscall.Ioctl(s, ioc, uintptr(arg))
 	keepAlive(arg)
 	if errno != 0 {
 		return error(errno)
diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c
--- a/libgo/sysinfo.c
+++ b/libgo/sysinfo.c
@@ -82,6 +82,9 @@ 
 #if defined(HAVE_SYS_SELECT_H)
 #include <sys/select.h>
 #endif
+#if defined(HAVE_SYS_SOCKIO_H)
+#include <sys/sockio.h>
+#endif
 #include <time.h>
 #include <unistd.h>
 #include <netdb.h>
@@ -111,6 +114,9 @@ 
 #if defined(HAVE_NET_IF_ARP_H)
 #include <net/if_arp.h>
 #endif
+#if defined(HAVE_NET_IF_TYPES_H)
+#include <net/if_types.h>
+#endif
 #if defined(HAVE_NET_ROUTE_H)
 #include <net/route.h>
 #endif