mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-22 20:36:20 +08:00
syscall, golang_org/x/net/lif: fixes for gccgo on Solaris
Reviewed-on: https://go-review.googlesource.com/35390 From-SVN: r244563
This commit is contained in:
parent
4cc0208ac8
commit
49947b33ff
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
@ -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")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user