aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2019-03-09 02:10:22 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2019-03-09 02:10:22 +0000
commit2dab1319077b1d919839970413cc1ee23f51323b (patch)
treeb6c85d9bbcbcafc6c5236cc9b99d04b65f281cdf /libgo
parent1430e7648ecb9ceff8152c0894ac5d882e91dec0 (diff)
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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@269521 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo')
-rw-r--r--libgo/go/internal/syscall/unix/at.go5
-rw-r--r--libgo/go/internal/syscall/unix/at_largefile.go14
-rw-r--r--libgo/go/internal/syscall/unix/at_regfile.go18
-rw-r--r--libgo/go/syscall/libcall_bsd.go2
-rw-r--r--libgo/go/syscall/libcall_bsd_largefile.go10
-rw-r--r--libgo/go/syscall/libcall_bsd_regfile.go10
-rw-r--r--libgo/go/syscall/libcall_posix.go3
-rw-r--r--libgo/go/syscall/libcall_posix_largefile.go3
-rw-r--r--libgo/go/syscall/libcall_posix_regfile.go3
-rw-r--r--libgo/go/syscall/libcall_solaris_largefile.go14
-rw-r--r--libgo/go/syscall/libcall_solaris_regfile.go (renamed from libgo/go/syscall/libcall_solaris.go)2
11 files changed, 75 insertions, 9 deletions
diff --git a/libgo/go/internal/syscall/unix/at.go b/libgo/go/internal/syscall/unix/at.go
index b57b7918a89..a602d3ac5bf 100644
--- a/libgo/go/internal/syscall/unix/at.go
+++ b/libgo/go/internal/syscall/unix/at.go
@@ -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
index 00000000000..5318d234ae3
--- /dev/null
+++ b/libgo/go/internal/syscall/unix/at_largefile.go
@@ -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
index 00000000000..004c801a8ab
--- /dev/null
+++ b/libgo/go/internal/syscall/unix/at_regfile.go
@@ -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
diff --git a/libgo/go/syscall/libcall_bsd.go b/libgo/go/syscall/libcall_bsd.go
index 9a4b2d65825..93f5710ba03 100644
--- a/libgo/go/syscall/libcall_bsd.go
+++ b/libgo/go/syscall/libcall_bsd.go
@@ -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
index 00000000000..c6a336cf782
--- /dev/null
+++ b/libgo/go/syscall/libcall_bsd_largefile.go
@@ -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
index 00000000000..388c8a7d782
--- /dev/null
+++ b/libgo/go/syscall/libcall_bsd_regfile.go
@@ -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
diff --git a/libgo/go/syscall/libcall_posix.go b/libgo/go/syscall/libcall_posix.go
index d2fa0d9d433..31d6bf19f7d 100644
--- a/libgo/go/syscall/libcall_posix.go
+++ b/libgo/go/syscall/libcall_posix.go
@@ -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
diff --git a/libgo/go/syscall/libcall_posix_largefile.go b/libgo/go/syscall/libcall_posix_largefile.go
index 57a7f5eb1e1..bf0f9fe50b6 100644
--- a/libgo/go/syscall/libcall_posix_largefile.go
+++ b/libgo/go/syscall/libcall_posix_largefile.go
@@ -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
diff --git a/libgo/go/syscall/libcall_posix_regfile.go b/libgo/go/syscall/libcall_posix_regfile.go
index 5dc6eb606e8..8ff721341ba 100644
--- a/libgo/go/syscall/libcall_posix_regfile.go
+++ b/libgo/go/syscall/libcall_posix_regfile.go
@@ -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_largefile.go b/libgo/go/syscall/libcall_solaris_largefile.go
new file mode 100644
index 00000000000..757b2293ce5
--- /dev/null
+++ b/libgo/go/syscall/libcall_solaris_largefile.go
@@ -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.go b/libgo/go/syscall/libcall_solaris_regfile.go
index a02661401a8..fa5dd8c65a8 100644
--- a/libgo/go/syscall/libcall_solaris.go
+++ b/libgo/go/syscall/libcall_solaris_regfile.go
@@ -2,6 +2,8 @@
// 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)