re PR go/52586 (libgo fails to build for mips*64-linux-gnu (reference to undefined...
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 30 Apr 2012 16:04:17 +0000 (16:04 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 30 Apr 2012 16:04:17 +0000 (16:04 +0000)
PR go/52586
mksysinfo, syscall: Make sure SYS_GETDENTS64 is defined.

Fixes build on MIPS GNU/Linux.

From-SVN: r186986

libgo/go/syscall/libcall_linux.go
libgo/mksysinfo.sh

index 7c9f05e8d52361a39dfbfe1aec203f5e2fc5cd9e..8d7da1925144d2554e6d0bea035af09d182014a7 100644 (file)
@@ -203,7 +203,11 @@ func Getdents(fd int, buf []byte) (n int, err error) {
                p = (*byte)(unsafe.Pointer(&_zero))
        }
        Entersyscall()
-       r1, _, errno := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(len(buf)))
+       s := SYS_GETDENTS64
+       if s == 0 {
+               s = SYS_GETDENTS
+       }
+       r1, _, errno := Syscall(uintptr(s), uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(len(buf)))
        n = int(r1)
        if n < 0 {
                err = errno
index db61a73c0ac9f7628c72a7e5335fc76238728f5f..655337ffb75421f6ff6336fe3b9942edb0fb07ab 100755 (executable)
@@ -224,6 +224,14 @@ grep '^const _SYS_' gen-sysinfo.go | \
     echo "const $sup = _$sys" >> ${OUT}
   done
 
+# The GNU/Linux support wants to use SYS_GETDENTS64 if available.
+if ! grep '^const SYS_GETDENTS ' ${OUT} >/dev/null 2>&1; then
+  echo "const SYS_GETDENTS = 0" >> ${OUT}
+fi
+if ! grep '^const SYS_GETDENTS64 ' ${OUT} >/dev/null 2>&1; then
+  echo "const SYS_GETDENTS64 = 0" >> ${OUT}
+fi
+
 # Stat constants.
 grep '^const _S_' gen-sysinfo.go | \
   sed -e 's/^\(const \)_\(S_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}