libgo: fix build on AIX
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 19 Mar 2019 14:00:59 +0000 (14:00 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 19 Mar 2019 14:00:59 +0000 (14:00 +0000)
    Since aix/ppc64 has been added to GC toolchain, a mix between new and
    old files were created in gcc toolchain.
    This commit corrects this merge for aix/ppc64 and aix/ppc.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/167658

From-SVN: r269797

29 files changed:
gcc/go/gofrontend/MERGE
libgo/go/archive/tar/stat_actime1.go
libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_fcntl.go
libgo/go/internal/syscall/unix/at_largefile.go
libgo/go/internal/syscall/unix/at_regfile.go
libgo/go/internal/syscall/unix/ioctl_aix.go
libgo/go/net/interface_aix.go
libgo/go/net/interface_stub.go
libgo/go/net/sockoptip_aix.go [deleted file]
libgo/go/os/dir_gccgo.go
libgo/go/os/dir_libc64_gccgo.go
libgo/go/os/dir_libc_gccgo.go
libgo/go/os/sys_aix.go [deleted file]
libgo/go/runtime/malloc.go
libgo/go/runtime/mem_gccgo.go
libgo/go/runtime/netpoll_aix.go
libgo/go/runtime/os_aix.go
libgo/go/runtime/stubs2.go
libgo/go/runtime/timestub2.go
libgo/go/syscall/exec_aix_test.go [deleted file]
libgo/go/syscall/exec_unix.go
libgo/go/syscall/flock_aix.go [deleted file]
libgo/go/syscall/libcall_aix.go
libgo/go/syscall/syscall_funcs.go [new file with mode: 0644]
libgo/go/syscall/syscall_funcs_stubs.go [new file with mode: 0644]
libgo/go/syscall/syscall_stubs.go [deleted file]
libgo/go/syscall/syscall_unix.go
libgo/mksysinfo.sh
libgo/runtime/go-varargs.c

index a09733f8c467407d5420e62dba01c5fe5bfbc6c0..006da8c77fe8f8b57122077ae577562b7e0be8ad 100644 (file)
@@ -1,4 +1,4 @@
-87945b620b2100d33e27f33e6276a4e4e5890659
+069afe85f38c099660c5d81950d65248ed4fc516
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index e2c79a55880b36d49f3614bf4016ddd3489990ec..2a7f7f36ab0a29fe1772fa7781b7f2fc5028d690 100644 (file)
@@ -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 hurd linux dragonfly openbsd solaris
+// +build aix hurd linux dragonfly openbsd solaris
 
 package tar
 
index 2831975c0c69ef386bf9fdcdc8bf608d536d2f8e..a14362bdc7dc1238d4471787ddda30d2e99dcc1e 100644 (file)
@@ -35,7 +35,9 @@ const (
        writeLock lockType = syscall.F_WRLCK
 )
 
-type inode = uint64 // type of syscall.Stat_t.Ino
+// type of syscall.Stat_t.Ino for 64 bits architectures.
+// For 32 bits architecture, it's easier to cast it instead.
+type inode = uint64
 
 type inodeLock struct {
        owner File
@@ -59,7 +61,7 @@ func lock(f File, lt lockType) (err error) {
        if err != nil {
                return err
        }
-       ino := fi.Sys().(*syscall.Stat_t).Ino
+       ino := uint64(fi.Sys().(*syscall.Stat_t).Ino)
 
        mu.Lock()
        if i, dup := inodes[f]; dup && i != ino {
index 5318d234ae39033b7bdf0eb80b3e85423423ed6e..82e0dcfd07497ad0984de9e8c42964c6e8f78262 100644 (file)
@@ -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 aix hurd linux solaris,386 solaris,sparc
+// +build hurd linux solaris,386 solaris,sparc
 
 package unix
 
index 004c801a8ab7d0e1589f4674474e549e3a62d7f5..14fdb70be712dd7e8533871c0e744df2814b83b6 100644 (file)
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build !aix
 // +build !hurd
 // +build !linux
 // +build !solaris !386
index 19d56c36a13156563115d5bbdf248a08ccbf1627..af105d6158ba3d59fb3060fd5e52f41adbb863c3 100644 (file)
@@ -9,17 +9,12 @@ import (
        "unsafe"
 )
 
-//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o"
-//go:linkname libc_ioctl libc_ioctl
-var libc_ioctl uintptr
-
-// Implemented in syscall/syscall_aix.go.
-func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
+//extern __go_ioctl_ptr
+func ioctl(int32, int32, unsafe.Pointer) int32
 
 func Ioctl(fd int, cmd int, args uintptr) (err error) {
-       _, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(cmd), uintptr(args), 0, 0, 0)
-       if e1 != 0 {
-               err = e1
+       if ioctl(int32(fd), int32(cmd), unsafe.Pointer(args)) < 0 {
+               return syscall.GetErrno()
        }
        return
 }
index 9a8b5bbdb1b224792ae70b9de768705f39f116a6..1fe9bbaf69638c97bd90eccfd84923a7157d94b1 100644 (file)
@@ -32,6 +32,8 @@ const _RTAX_NETMASK = 2
 const _RTAX_IFA = 5
 const _RTAX_MAX = 8
 
+const _SIOCGIFMTU = -0x3fd796aa
+
 func getIfList() ([]byte, error) {
        needed, err := syscall.Getkerninfo(_KINFO_RT_IFLIST, 0, 0, 0)
        if err != nil {
@@ -62,7 +64,7 @@ func interfaceTable(ifindex int) ([]Interface, error) {
                }
                if ifm.Type == syscall.RTM_IFINFO {
                        if ifindex == 0 || ifindex == int(ifm.Index) {
-                               sdl := (*rawSockaddrDatalink)(unsafe.Pointer(&tab[syscall.SizeofIfMsghdr]))
+                               sdl := (*rawSockaddrDatalink)(unsafe.Pointer(&tab[unsafe.Sizeof(syscall.IfMsgHdr)]))
 
                                ifi := &Interface{Index: int(ifm.Index), Flags: linkFlags(ifm.Flags)}
                                ifi.Name = string(sdl.Data[:sdl.Nlen])
@@ -75,7 +77,7 @@ func interfaceTable(ifindex int) ([]Interface, error) {
                                if err != nil {
                                        return nil, err
                                }
-                               err = unix.Ioctl(sock, syscall.SIOCGIFMTU, uintptr(unsafe.Pointer(ifr)))
+                               err = unix.Ioctl(sock, _SIOCGIFMTU, uintptr(unsafe.Pointer(ifr)))
                                if err != nil {
                                        return nil, err
                                }
@@ -131,7 +133,7 @@ func interfaceAddrTable(ifi *Interface) ([]Addr, error) {
                if ifm.Type == syscall.RTM_NEWADDR {
                        if ifi == nil || ifi.Index == int(ifm.Index) {
                                mask := ifm.Addrs
-                               off := uint(syscall.SizeofIfMsghdr)
+                               off := uint(unsafe.Sizeof(syscall.IfMsgHdr))
 
                                var iprsa, nmrsa *syscall.RawSockaddr
                                for i := uint(0); i < _RTAX_MAX; i++ {
index 0b3580ec6e6ca24874a9562007d4dc380ab2c583..d8afd5e75198e545fe55a5ec1a2d79e7cf594069 100644 (file)
@@ -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 aix nacl hurd js,wasm
+// +build nacl hurd js,wasm
 
 package net
 
diff --git a/libgo/go/net/sockoptip_aix.go b/libgo/go/net/sockoptip_aix.go
deleted file mode 100644 (file)
index 1e28fe6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package net
-
-import "syscall"
-
-func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
-       return syscall.ENOPROTOOPT
-}
-
-func setIPv4MulticastLoopback(fd *netFD, v bool) error {
-       return syscall.ENOPROTOOPT
-}
index 60f70aa034d2898d1464d141df28864f96c83de9..ad77a406840bc51e446a5acd65c0ceaba57d600d 100644 (file)
@@ -16,9 +16,6 @@ import (
 //extern pathconf
 func libc_pathconf(*byte, int) int
 
-//extern fdopendir
-func libc_fdopendir(int32) *syscall.DIR
-
 func clen(n []byte) int {
        for i := 0; i < len(n); i++ {
                if n[i] == 0 {
index dc3ba7f9228d8a384c45bcfadbc493347634707c..3582243ba0d72f85cd7030e0fe00a011573368bd 100644 (file)
@@ -10,3 +10,6 @@ import "syscall"
 
 //extern closedir64
 func libc_closedir(*syscall.DIR) int
+
+//extern fdopendir64
+func libc_fdopendir(int32) *syscall.DIR
index b46eb4cd8911458033535f69f8becbfc46340322..a3be43bd15c5d6781addc1dca176325b9c45f289 100644 (file)
@@ -10,3 +10,6 @@ import "syscall"
 
 //extern closedir
 func libc_closedir(*syscall.DIR) int
+
+//extern fdopendir
+func libc_fdopendir(int32) *syscall.DIR
diff --git a/libgo/go/os/sys_aix.go b/libgo/go/os/sys_aix.go
deleted file mode 100644 (file)
index 53a40f2..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package os
-
-import "syscall"
-
-// gethostname syscall cannot be used because it also returns the domain.
-// Therefore, hostname is retrieve with uname syscall and the Nodename field.
-
-func hostname() (name string, err error) {
-       var u syscall.Utsname
-       if errno := syscall.Uname(&u); errno != nil {
-               return "", NewSyscallError("uname", errno)
-       }
-       b := make([]byte, len(u.Nodename))
-       i := 0
-       for ; i < len(u.Nodename); i++ {
-               if u.Nodename[i] == 0 {
-                       break
-               }
-               b[i] = byte(u.Nodename[i])
-       }
-       return string(b[:i]), nil
-}
index b6a7ee11e9014cce695db72511fa9a7e4c2dbada..c0b4caab32a45198d1df620dc2b3c25ffd7f19b1 100644 (file)
@@ -218,7 +218,7 @@ const (
        // we further limit it to 31 bits.
        //
        // WebAssembly currently has a limit of 4GB linear memory.
-       heapAddrBits = (_64bit*(1-sys.GoarchWasm)*(1-sys.GoosAix))*48 + (1-_64bit+sys.GoarchWasm)*(32-(sys.GoarchMips+sys.GoarchMipsle)) + 60*sys.GoosAix
+       heapAddrBits = (_64bit*(1-sys.GoarchWasm)*(1-sys.GoosAix))*48 + (1-_64bit+sys.GoarchWasm)*(32-(sys.GoarchMips+sys.GoarchMipsle)) + 60*(sys.GoosAix*_64bit)
 
        // maxAlloc is the maximum size of an allocation. On 64-bit,
        // it's theoretically possible to allocate 1<<heapAddrBits bytes. On
@@ -259,7 +259,7 @@ const (
        // logHeapArenaBytes is log_2 of heapArenaBytes. For clarity,
        // prefer using heapArenaBytes where possible (we need the
        // constant to compute some other constants).
-       logHeapArenaBytes = (6+20)*(_64bit*(1-sys.GoosWindows)*(1-sys.GoosAix)) + (2+20)*(_64bit*sys.GoosWindows) + (2+20)*(1-_64bit) + (8+20)*sys.GoosAix
+       logHeapArenaBytes = (6+20)*(_64bit*(1-sys.GoosWindows)*(1-sys.GoosAix)) + (2+20)*(_64bit*sys.GoosWindows) + (2+20)*(1-_64bit) + (8+20)*(sys.GoosAix*_64bit)
 
        // heapArenaBitmapBytes is the size of each heap arena's bitmap.
        heapArenaBitmapBytes = heapArenaBytes / (sys.PtrSize * 8 / 2)
@@ -282,7 +282,7 @@ const (
        //
        // We use the L1 map on aix/ppc64 to keep the same L2 value
        // as on Linux.
-       arenaL1Bits = 6*(_64bit*sys.GoosWindows) + 12*sys.GoosAix
+       arenaL1Bits = 6*(_64bit*sys.GoosWindows) + 12*(sys.GoosAix*_64bit)
 
        // arenaL2Bits is the number of bits of the arena number
        // covered by the second level arena index.
index 44f4648c88d007e26da2c63c1798b7dfcf0c0bbf..987467814543165c7d036fc65cf081a48b4631a9 100644 (file)
@@ -187,6 +187,11 @@ func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
 func sysMap(v unsafe.Pointer, n uintptr, sysStat *uint64) {
        mSysStatInc(sysStat, n)
 
+       if GOOS == "aix" {
+               // AIX does not allow mapping a range that is already mapped.
+               // So always unmap first even if it is already unmapped.
+               munmap(v, n)
+       }
        p, err := mmap(v, n, _PROT_READ|_PROT_WRITE, _MAP_ANON|_MAP_FIXED|_MAP_PRIVATE, mmapFD, 0)
        if err == _ENOMEM {
                throw("runtime: out of memory")
index 86c3e960f425655203f4be8f6dc6a814b2823637..70bf9eb876e9da009346ab76394e883d1c5cba9d 100644 (file)
@@ -37,7 +37,6 @@ const _POLLIN = 0x0001
 const _POLLOUT = 0x0002
 const _POLLHUP = 0x2000
 const _POLLERR = 0x4000
-const _O_NONBLOCK = 0x4
 
 var (
        pfds           []pollfd
index 10036162c763c96d4e59edd2d1984240521d697b..9211f21ab3d9d3e7e6426cb9b01c99101c429770 100644 (file)
@@ -62,12 +62,19 @@ func semasleep(ns int64) int32 {
                if clock_gettime(_CLOCK_REALTIME, &ts) != 0 {
                        throw("clock_gettime")
                }
-               ts.tv_sec += ns / 1e9
-               ts.tv_nsec += ns % 1e9
-               if ts.tv_nsec >= 1e9 {
-                       ts.tv_sec++
-                       ts.tv_nsec -= 1e9
+
+               sec := int64(ts.tv_sec) + ns/1e9
+               nsec := int64(ts.tv_nsec) + ns%1e9
+               if nsec >= 1e9 {
+                       sec++
+                       nsec -= 1e9
+               }
+               if sec != int64(timespec_sec_t(sec)) {
+                       // Handle overflows (timespec_sec_t is 32-bit in 32-bit applications)
+                       sec = 1<<31 - 1
                }
+               ts.tv_sec = timespec_sec_t(sec)
+               ts.tv_nsec = timespec_nsec_t(nsec)
 
                if sem_timedwait((*semt)(unsafe.Pointer(_m_.mos.waitsema)), &ts) != 0 {
                        err := errno()
index 304c8e4da3769c7db08f88ffcc3924bc42d7b3ef..1cb910cd11103652152c7bc4c70f35bf6b4a81b8 100644 (file)
@@ -7,7 +7,6 @@
 // +build !nacl
 // +build !js
 // +build !darwin
-// +build !aix
 
 package runtime
 
index 00c2c55f461d69b50ae7a91c638039ebaf366527..7a28603d45e97c298f6251e7897b71ad40688d7a 100644 (file)
@@ -5,8 +5,6 @@
 // +build !darwin
 // +build !windows
 // +build !freebsd
-// +build !aix
-
 package runtime
 
 func walltime() (sec int64, nsec int32)
diff --git a/libgo/go/syscall/exec_aix_test.go b/libgo/go/syscall/exec_aix_test.go
deleted file mode 100644 (file)
index 22b752c..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build aix
-
-package syscall
-
-import "unsafe"
-
-//go:cgo_import_dynamic libc_Getpgid getpgid "libc.a/shr_64.o"
-//go:cgo_import_dynamic libc_Getpgrp getpgrp "libc.a/shr_64.o"
-
-//go:linkname libc_Getpgid libc_Getpgid
-//go:linkname libc_Getpgrp libc_Getpgrp
-
-var (
-       libc_Getpgid,
-       libc_Getpgrp libcFunc
-)
-
-func Getpgid(pid int) (pgid int, err error) {
-       r0, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_Getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
-       pgid = int(r0)
-       if e1 != 0 {
-               err = e1
-       }
-       return
-}
-
-func Getpgrp() (pgrp int) {
-       r0, _, _ := syscall6(uintptr(unsafe.Pointer(&libc_Getpgrp)), 0, 0, 0, 0, 0, 0, 0)
-       pgrp = int(r0)
-       return
-}
-
-var Ioctl = ioctl
index bad2ce44302feefd0a3d45cbaf02eff9a47409b6..ec21f8014dda06faf41c9bcbb41d515e1247805c 100644 (file)
@@ -299,7 +299,6 @@ func runtime_AfterExec()
 
 // execveLibc is non-nil on OS using libc syscall, set to execve in exec_libc.go; this
 // avoids a build dependency for other platforms.
-var execveLibc func(path uintptr, argv uintptr, envp uintptr) Errno
 var execveDarwin func(path *byte, argv **byte, envp **byte) error
 
 // Exec invokes the execve(2) system call.
@@ -321,10 +320,7 @@ func Exec(argv0 string, argv []string, envv []string) (err error) {
        var err1 error
        if runtime.GOOS == "solaris" || runtime.GOOS == "aix" || runtime.GOOS == "hurd" {
                // RawSyscall should never be used on Solaris or AIX.
-               err1 = execveLibc(
-                       uintptr(unsafe.Pointer(argv0p)),
-                       uintptr(unsafe.Pointer(&argvp[0])),
-                       uintptr(unsafe.Pointer(&envvp[0])))
+               err1 = raw_execve(argv0p, &argvp[0], &envvp[0])
        } else if runtime.GOOS == "darwin" {
                // Similarly on Darwin.
                err1 = execveDarwin(argv0p, &argvp[0], &envvp[0])
diff --git a/libgo/go/syscall/flock_aix.go b/libgo/go/syscall/flock_aix.go
deleted file mode 100644 (file)
index c9eab43..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package syscall
-
-import "unsafe"
-
-// On AIX, there is no flock() system call.
-
-// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
-func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
-       _, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
index 072f92a8151551a961975c222dccb089715afd86..8d9f59eb62f501216d5a4bde116ec14f5cc7cf14 100644 (file)
@@ -10,6 +10,9 @@ import (
        "unsafe"
 )
 
+// For exec_unix.go.
+const SYS_EXECVE = 0
+
 //sys  Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
 //open64at(dirfd _C_int, path *byte, flags _C_int, mode Mode_t) _C_int
 
@@ -139,3 +142,6 @@ func ReadDirent(fd int, buf []byte) (n int, err error) {
 func Unlinkat(dirfd int, path string) (err error) {
        return unlinkat(dirfd, path, 0)
 }
+
+//sys  Getkerninfo(op int32, where uintptr, size uintptr, arg int64) (i int32, err error)
+//getkerninfo(op _C_int, where *byte, size *byte, arg _C_long) _C_int
diff --git a/libgo/go/syscall/syscall_funcs.go b/libgo/go/syscall/syscall_funcs.go
new file mode 100644 (file)
index 0000000..4b1ee32
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin dragonfly freebsd hurd linux netbsd openbsd solaris
+
+package syscall
+
+//extern __go_syscall6
+func syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) uintptr
+
+// Do a system call.  We look at the size of uintptr to see how to pass
+// the arguments, so that we don't pass a 64-bit value when the function
+// expects a 32-bit one.
+func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
+       Entersyscall()
+       SetErrno(0)
+       r := syscall6(trap, a1, a2, a3, 0, 0, 0)
+       err = GetErrno()
+       Exitsyscall()
+       return r, 0, err
+}
+
+func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+       Entersyscall()
+       SetErrno(0)
+       r := syscall6(trap, a1, a2, a3, a4, a5, a6)
+       err = GetErrno()
+       Exitsyscall()
+       return r, 0, err
+}
+
+func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
+       SetErrno(0)
+       r := syscall6(trap, a1, a2, a3, 0, 0, 0)
+       err = GetErrno()
+       return r, 0, err
+}
+
+func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+       SetErrno(0)
+       r := syscall6(trap, a1, a2, a3, a4, a5, a6)
+       err = GetErrno()
+       return r, 0, err
+}
diff --git a/libgo/go/syscall/syscall_funcs_stubs.go b/libgo/go/syscall/syscall_funcs_stubs.go
new file mode 100644 (file)
index 0000000..c68ab26
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2010 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build aix rtems
+
+// These are stubs.
+
+package syscall
+
+func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
+       z := -1
+       return uintptr(z), 0, ENOSYS
+}
+
+func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+       z := -1
+       return uintptr(z), 0, ENOSYS
+}
+
+func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
+       z := -1
+       return uintptr(z), 0, ENOSYS
+}
+
+func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+       z := -1
+       return uintptr(z), 0, ENOSYS
+}
diff --git a/libgo/go/syscall/syscall_stubs.go b/libgo/go/syscall/syscall_stubs.go
deleted file mode 100644 (file)
index 00288ee..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build rtems
-
-// These are stubs.
-
-package syscall
-
-func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
-       z := -1
-       return uintptr(z), 0, uintptr(ENOSYS)
-}
-
-func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
-       z := -1
-       return uintptr(z), 0, uintptr(ENOSYS)
-}
-
-func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
-       z := -1
-       return uintptr(z), 0, uintptr(ENOSYS)
-}
-
-func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
-       z := -1
-       return uintptr(z), 0, uintptr(ENOSYS)
-}
index b786dc5228b5a138ca615fceebdbed7150edd7ae..ec8f343dccd0bed8aa962561db262281fb3cd49a 100644 (file)
@@ -19,9 +19,6 @@ var (
        Stderr = 2
 )
 
-//extern __go_syscall6
-func syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) uintptr
-
 const (
        darwin64Bit    = runtime.GOOS == "darwin" && sizeofPtr == 8
        dragonfly64Bit = runtime.GOOS == "dragonfly" && sizeofPtr == 8
@@ -29,41 +26,6 @@ const (
        solaris64Bit   = runtime.GOOS == "solaris" && sizeofPtr == 8
 )
 
-// Do a system call.  We look at the size of uintptr to see how to pass
-// the arguments, so that we don't pass a 64-bit value when the function
-// expects a 32-bit one.
-func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
-       Entersyscall()
-       SetErrno(0)
-       r := syscall6(trap, a1, a2, a3, 0, 0, 0)
-       err = GetErrno()
-       Exitsyscall()
-       return r, 0, err
-}
-
-func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
-       Entersyscall()
-       SetErrno(0)
-       r := syscall6(trap, a1, a2, a3, a4, a5, a6)
-       err = GetErrno()
-       Exitsyscall()
-       return r, 0, err
-}
-
-func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
-       SetErrno(0)
-       r := syscall6(trap, a1, a2, a3, 0, 0, 0)
-       err = GetErrno()
-       return r, 0, err
-}
-
-func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
-       SetErrno(0)
-       r := syscall6(trap, a1, a2, a3, a4, a5, a6)
-       err = GetErrno()
-       return r, 0, err
-}
-
 // clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.
 func clen(n []byte) int {
        for i := 0; i < len(n); i++ {
index 418ba2cfdef09b90ccd0404eb1e3580f193b9ef7..c9dd8d494a95a3291b5d94c1a556fb6f13bf4d37 100755 (executable)
@@ -1024,6 +1024,18 @@ grep '^type _ifinfomsg ' gen-sysinfo.go | \
       -e 's/ifi_change/Change/' \
     >> ${OUT}
 
+# The if_msghdr struct.
+grep '^type _if_msghdr ' gen-sysinfo.go | \
+    sed -e 's/_if_msghdr/IfMsgHdr/' \
+               -e 's/ifm_msglen/Msglen/' \
+               -e 's/ifm_version/Version/' \
+               -e 's/ifm_type/Type/' \
+               -e 's/ifm_addrs/Addrs/' \
+               -e 's/ifm_flags/Flags/' \
+               -e 's/ifm_index/Index/' \
+               -e 's/ifm_addrlen/Addrlen/' \
+               >> ${OUT}
+
 # The interface information types and flags.
 grep '^const _IFA' gen-sysinfo.go | \
     sed -e 's/^\(const \)_\(IFA[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
index cf033afbbd33bfedd143aebb8084ffc872eeb62c..2b186ef8b81963785e2bf63211847b25911b1603 100644 (file)
@@ -96,6 +96,8 @@ __go_openat (int fd, char *path, int flags, mode_t mode)
 
 #endif
 
+#ifdef HAVE_SYSCALL
+
 // __go_syscall6 is called by both the runtime and syscall packages.
 // We use uintptr_t to make sure that the types match, since the Go
 // and C "int" types are not the same.
@@ -106,3 +108,5 @@ __go_syscall6(uintptr_t flag, uintptr_t a1, uintptr_t a2, uintptr_t a3,
 {
   return syscall (flag, a1, a2, a3, a4, a5, a6);
 }
+
+#endif