On Mon, Jan 16, 2017 at 7:21 AM, Rainer Orth <r...@cebitec.uni-bielefeld.de> wrote: > > I'm getting further on Solaris now, but the build still fails:
I committed this patch to fix the remaining build problems on Solaris. Bootstrapped and ran some of the Go tests on i386-sun-solaris11 and x86_64-pc-linux-gnu. Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 244484) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -223cba75b947afc1ee5a13a60c15c66f6ff355c1 +2b3d389f961b8461b3fdf42318a628f68b56f8b1 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/go/golang_org/x/net/lif/link.go =================================================================== --- libgo/go/golang_org/x/net/lif/link.go (revision 244456) +++ libgo/go/golang_org/x/net/lif/link.go (working copy) @@ -84,7 +84,7 @@ func links(eps []endpoint, name string) b := make([]byte, lifn.Count*sizeofLifreq) lifc.Family = uint16(ep.af) lifc.Len = lifn.Count * sizeofLifreq - littleEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0])))) + lifc.Lifcu = unsafe.Pointer(&b[0]) ioc = int64(sysSIOCGLIFCONF) if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil { continue Index: libgo/go/golang_org/x/net/lif/syscall.go =================================================================== --- libgo/go/golang_org/x/net/lif/syscall.go (revision 244456) +++ libgo/go/golang_org/x/net/lif/syscall.go (working copy) @@ -11,23 +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) +//extern __go_ioctl_ptr +func libc_ioctl(int32, int32, unsafe.Pointer) int32 func ioctl(s, ioc uintptr, arg unsafe.Pointer) error { - _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0) - keepAlive(arg) - if errno != 0 { - return error(errno) + if libc_ioctl(int32(s), int32(ioc), arg) < 0 { + return syscall.GetErrno() } return nil } Index: libgo/go/golang_org/x/net/lif/zsys_solaris.go =================================================================== --- libgo/go/golang_org/x/net/lif/zsys_solaris.go (revision 244456) +++ libgo/go/golang_org/x/net/lif/zsys_solaris.go (working copy) @@ -3,6 +3,8 @@ package lif +import "unsafe" + const ( sysAF_UNSPEC = 0x0 sysAF_INET = 0x2 @@ -59,15 +61,11 @@ const ( ) const ( - sizeofLifnum = 0xc sizeofLifreq = 0x178 - sizeofLifconf = 0x18 - sizeofLifIfinfoReq = 0x10 ) type sysLifnum struct { Family uint16 - Pad_cgo_0 [2]byte Flags int32 Count int32 } @@ -81,16 +79,13 @@ type lifreq struct { type lifconf struct { Family uint16 - Pad_cgo_0 [2]byte Flags int32 Len int32 - Pad_cgo_1 [4]byte - Lifcu [8]byte + Lifcu unsafe.Pointer } type lifIfinfoReq struct { Maxhops uint8 - Pad_cgo_0 [3]byte Reachtime uint32 Reachretrans uint32 Maxmtu uint32 Index: libgo/go/golang_org/x/net/lif/zsys_solaris_amd64.go =================================================================== --- libgo/go/golang_org/x/net/lif/zsys_solaris_amd64.go (revision 244166) +++ libgo/go/golang_org/x/net/lif/zsys_solaris_amd64.go (working copy) @@ -1,103 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs defs_solaris.go - -package lif - -const ( - sysAF_UNSPEC = 0x0 - sysAF_INET = 0x2 - sysAF_INET6 = 0x1a - - sysSOCK_DGRAM = 0x1 -) - -type sockaddrStorage struct { - Family uint16 - X_ss_pad1 [6]int8 - X_ss_align float64 - X_ss_pad2 [240]int8 -} - -const ( - sysLIFC_NOXMIT = 0x1 - sysLIFC_EXTERNAL_SOURCE = 0x2 - sysLIFC_TEMPORARY = 0x4 - sysLIFC_ALLZONES = 0x8 - sysLIFC_UNDER_IPMP = 0x10 - sysLIFC_ENABLED = 0x20 - - sysSIOCGLIFADDR = -0x3f87968f - sysSIOCGLIFDSTADDR = -0x3f87968d - sysSIOCGLIFFLAGS = -0x3f87968b - sysSIOCGLIFMTU = -0x3f879686 - sysSIOCGLIFNETMASK = -0x3f879683 - sysSIOCGLIFMETRIC = -0x3f879681 - sysSIOCGLIFNUM = -0x3ff3967e - sysSIOCGLIFINDEX = -0x3f87967b - sysSIOCGLIFSUBNET = -0x3f879676 - sysSIOCGLIFLNKINFO = -0x3f879674 - sysSIOCGLIFCONF = -0x3fef965b - sysSIOCGLIFHWADDR = -0x3f879640 -) - -const ( - sysIFF_UP = 0x1 - sysIFF_BROADCAST = 0x2 - sysIFF_DEBUG = 0x4 - sysIFF_LOOPBACK = 0x8 - sysIFF_POINTOPOINT = 0x10 - sysIFF_NOTRAILERS = 0x20 - sysIFF_RUNNING = 0x40 - sysIFF_NOARP = 0x80 - sysIFF_PROMISC = 0x100 - sysIFF_ALLMULTI = 0x200 - sysIFF_INTELLIGENT = 0x400 - sysIFF_MULTICAST = 0x800 - sysIFF_MULTI_BCAST = 0x1000 - sysIFF_UNNUMBERED = 0x2000 - sysIFF_PRIVATE = 0x8000 -) - -const ( - sizeofLifnum = 0xc - sizeofLifreq = 0x178 - sizeofLifconf = 0x18 - sizeofLifIfinfoReq = 0x10 -) - -type sysLifnum struct { - Family uint16 - Pad_cgo_0 [2]byte - Flags int32 - Count int32 -} - -type lifreq struct { - Name [32]int8 - Lifru1 [4]byte - Type uint32 - Lifru [336]byte -} - -type lifconf struct { - Family uint16 - Pad_cgo_0 [2]byte - Flags int32 - Len int32 - Pad_cgo_1 [4]byte - Lifcu [8]byte -} - -type lifIfinfoReq struct { - Maxhops uint8 - Pad_cgo_0 [3]byte - Reachtime uint32 - Reachretrans uint32 - Maxmtu uint32 -} - -const ( - sysIFT_IPV4 = 0xc8 - sysIFT_IPV6 = 0xc9 - sysIFT_6TO4 = 0xca -) Index: libgo/go/syscall/syscall_solaris.go =================================================================== --- libgo/go/syscall/syscall_solaris.go (revision 244456) +++ libgo/go/syscall/syscall_solaris.go (working copy) @@ -29,3 +29,20 @@ func direntNamlen(buf []byte) (uint64, b } return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true } + +//sysnb getexecname() (execname unsafe.Pointer, err error) +//getexecname() *byte + +func Getexecname() (path string, err error) { + ptr, err := getexecname() + if err != nil { + return "", err + } + bytes := (*[1 << 29]byte)(ptr)[:] + for i, b := range bytes { + if b == 0 { + return string(bytes[:i]), nil + } + } + panic("unreachable") +}