aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2017-01-18 03:37:52 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2017-01-18 03:37:52 +0000
commitca17875b0a40f106e2e4dd16b22124e7486cba72 (patch)
tree6eee4082ac9050dde854deba503306e29e078b66 /libgo
parent8684f7f46a7800eed5d56caa82a487974fdcf07f (diff)
syscall, golang_org/x/net/lif: fixes for gccgo on Solaris
Reviewed-on: https://go-review.googlesource.com/35390 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244563 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo')
-rw-r--r--libgo/go/golang_org/x/net/lif/link.go2
-rw-r--r--libgo/go/golang_org/x/net/lif/syscall.go19
-rw-r--r--libgo/go/golang_org/x/net/lif/zsys_solaris.go (renamed from libgo/go/golang_org/x/net/lif/zsys_solaris_amd64.go)11
-rw-r--r--libgo/go/syscall/syscall_solaris.go17
4 files changed, 25 insertions, 24 deletions
diff --git a/libgo/go/golang_org/x/net/lif/link.go b/libgo/go/golang_org/x/net/lif/link.go
index 76fa6c68756..6a77a8f5d80 100644
--- a/libgo/go/golang_org/x/net/lif/link.go
+++ b/libgo/go/golang_org/x/net/lif/link.go
@@ -84,7 +84,7 @@ func links(eps []endpoint, name string) ([]Link, error) {
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
diff --git a/libgo/go/golang_org/x/net/lif/syscall.go b/libgo/go/golang_org/x/net/lif/syscall.go
index 5fe073620a4..ea7541456bd 100644
--- a/libgo/go/golang_org/x/net/lif/syscall.go
+++ b/libgo/go/golang_org/x/net/lif/syscall.go
@@ -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
}
diff --git a/libgo/go/golang_org/x/net/lif/zsys_solaris_amd64.go b/libgo/go/golang_org/x/net/lif/zsys_solaris.go
index 94231c49c96..6452dd8ebb0 100644
--- a/libgo/go/golang_org/x/net/lif/zsys_solaris_amd64.go
+++ b/libgo/go/golang_org/x/net/lif/zsys_solaris.go
@@ -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
diff --git a/libgo/go/syscall/syscall_solaris.go b/libgo/go/syscall/syscall_solaris.go
index 0b2d7483e42..673ba8223fc 100644
--- a/libgo/go/syscall/syscall_solaris.go
+++ b/libgo/go/syscall/syscall_solaris.go
@@ -29,3 +29,20 @@ func direntNamlen(buf []byte) (uint64, bool) {
}
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")
+}