re PR go/89447 (libgo largefile support is incomplete and inconsistent)
authorIan Lance Taylor <ian@gcc.gnu.org>
Sat, 9 Mar 2019 02:10:22 +0000 (02:10 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Sat, 9 Mar 2019 02:10:22 +0000 (02:10 +0000)
PR go/89447
    syscall, internal/syscall: adjust use of largefile functions

    Consistently call __go_openat for openat.  Use fstatat64, creat64,
    sendfile64, and getdents64 where needed.

    Based on patch by Rainer Orth.

    Fixes https://gcc.gnu.org/PR89447

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

From-SVN: r269521

13 files changed:
gcc/go/gofrontend/MERGE
libgo/go/internal/syscall/unix/at.go
libgo/go/internal/syscall/unix/at_largefile.go [new file with mode: 0644]
libgo/go/internal/syscall/unix/at_regfile.go [new file with mode: 0644]
libgo/go/syscall/libcall_bsd.go
libgo/go/syscall/libcall_bsd_largefile.go [new file with mode: 0644]
libgo/go/syscall/libcall_bsd_regfile.go [new file with mode: 0644]
libgo/go/syscall/libcall_posix.go
libgo/go/syscall/libcall_posix_largefile.go
libgo/go/syscall/libcall_posix_regfile.go
libgo/go/syscall/libcall_solaris.go [deleted file]
libgo/go/syscall/libcall_solaris_largefile.go [new file with mode: 0644]
libgo/go/syscall/libcall_solaris_regfile.go [new file with mode: 0644]

index f1bbc376d8a492d5658eecb31760059eba1efd86..3c0ee14c64d2c077bc17efdc56e87950be35e7a4 100644 (file)
@@ -1,4 +1,4 @@
-959260238817af3205fb9907dd92319291e6a893
+3106ec19626d75d8275be16c86421132548fa13e
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index b57b7918a89f741b9a33ac5b09309a8625d2e038..a602d3ac5bf78efec20bd53faafc857f7b426956 100644 (file)
@@ -13,12 +13,9 @@ import (
 //extern unlinkat
 func unlinkat(int32, *byte, int32) int32
 
-//extern openat
+//extern __go_openat
 func openat(int32, *byte, int32, syscall.Mode_t) int32
 
-//extern fstatat
-func fstatat(int32, *byte, *syscall.Stat_t, int32) int32
-
 func Unlinkat(dirfd int, path string, flags int) error {
        var p *byte
        p, err := syscall.BytePtrFromString(path)
diff --git a/libgo/go/internal/syscall/unix/at_largefile.go b/libgo/go/internal/syscall/unix/at_largefile.go
new file mode 100644 (file)
index 0000000..5318d23
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2019 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 hurd linux solaris,386 solaris,sparc
+
+package unix
+
+import (
+       "syscall"
+)
+
+//extern fstatat64
+func fstatat(int32, *byte, *syscall.Stat_t, int32) int32
diff --git a/libgo/go/internal/syscall/unix/at_regfile.go b/libgo/go/internal/syscall/unix/at_regfile.go
new file mode 100644 (file)
index 0000000..004c801
--- /dev/null
@@ -0,0 +1,18 @@
+// Copyright 2019 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
+// +build !hurd
+// +build !linux
+// +build !solaris !386
+// +build !solaris !sparc
+
+package unix
+
+import (
+       "syscall"
+)
+
+//extern fstatat
+func fstatat(int32, *byte, *syscall.Stat_t, int32) int32
index 9a4b2d65825fe985c8a59b56f03f7fb86eb53461..93f5710ba03d614c2ddd5b4bf4392d8de293707d 100644 (file)
@@ -13,8 +13,6 @@ import (
        "unsafe"
 )
 
-//sys  sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
-//sendfile(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t
 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
        if race.Enabled {
                race.ReleaseMerge(unsafe.Pointer(&ioSync))
diff --git a/libgo/go/syscall/libcall_bsd_largefile.go b/libgo/go/syscall/libcall_bsd_largefile.go
new file mode 100644 (file)
index 0000000..c6a336c
--- /dev/null
@@ -0,0 +1,10 @@
+// Copyright 2019 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 solaris,386 solaris,sparc
+
+package syscall
+
+//sys  sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
+//sendfile64(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t
diff --git a/libgo/go/syscall/libcall_bsd_regfile.go b/libgo/go/syscall/libcall_bsd_regfile.go
new file mode 100644 (file)
index 0000000..388c8a7
--- /dev/null
@@ -0,0 +1,10 @@
+// Copyright 2019 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 netbsd openbsd solaris,amd64 solaris,sparc64
+
+package syscall
+
+//sys  sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
+//sendfile(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t
index d2fa0d9d433b7241e998456e73cf085128abd38f..31d6bf19f7d777b6a8af22d5f9568c18ad13b774 100644 (file)
@@ -184,9 +184,6 @@ func FDZero(set *FdSet) {
 //sys  Close(fd int) (err error)
 //close(fd _C_int) _C_int
 
-//sys  Creat(path string, mode uint32) (fd int, err error)
-//creat(path *byte, mode Mode_t) _C_int
-
 //sysnb        Dup(oldfd int) (fd int, err error)
 //dup(oldfd _C_int) _C_int
 
index 57a7f5eb1e1f7407736024e09f8317b4ed48b178..bf0f9fe50b6188cdf06235fc561f3dca8eb784ca 100644 (file)
@@ -8,6 +8,9 @@
 
 package syscall
 
+//sys  Creat(path string, mode uint32) (fd int, err error)
+//creat64(path *byte, mode Mode_t) _C_int
+
 //sys  Fstat(fd int, stat *Stat_t) (err error)
 //fstat64(fd _C_int, stat *Stat_t) _C_int
 
index 5dc6eb606e86c06771ed6d414715a3706aad8e17..8ff721341ba5a5cabdff8a8395ce50f2d9ce66de 100644 (file)
@@ -13,6 +13,9 @@
 
 package syscall
 
+//sys  Creat(path string, mode uint32) (fd int, err error)
+//creat(path *byte, mode Mode_t) _C_int
+
 //sys  Fstat(fd int, stat *Stat_t) (err error)
 //fstat(fd _C_int, stat *Stat_t) _C_int
 
diff --git a/libgo/go/syscall/libcall_solaris.go b/libgo/go/syscall/libcall_solaris.go
deleted file mode 100644 (file)
index a026614..0000000
+++ /dev/null
@@ -1,12 +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 syscall
-
-//sys Getdents(fd int, buf []byte) (n int, err error)
-//getdents(fd _C_int, buf *byte, nbyte Size_t) _C_int
-
-func ReadDirent(fd int, buf []byte) (n int, err error) {
-       return Getdents(fd, buf)
-}
diff --git a/libgo/go/syscall/libcall_solaris_largefile.go b/libgo/go/syscall/libcall_solaris_largefile.go
new file mode 100644 (file)
index 0000000..757b229
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2019 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 solaris,386 solaris,sparc
+
+package syscall
+
+//sys Getdents(fd int, buf []byte) (n int, err error)
+//getdents64(fd _C_int, buf *byte, nbyte Size_t) _C_int
+
+func ReadDirent(fd int, buf []byte) (n int, err error) {
+       return Getdents(fd, buf)
+}
diff --git a/libgo/go/syscall/libcall_solaris_regfile.go b/libgo/go/syscall/libcall_solaris_regfile.go
new file mode 100644 (file)
index 0000000..fa5dd8c
--- /dev/null
@@ -0,0 +1,14 @@
+// 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.
+
+// +build solaris,amd64 solaris,sparc64
+
+package syscall
+
+//sys Getdents(fd int, buf []byte) (n int, err error)
+//getdents(fd _C_int, buf *byte, nbyte Size_t) _C_int
+
+func ReadDirent(fd int, buf []byte) (n int, err error) {
+       return Getdents(fd, buf)
+}