aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-09-25 14:31:57 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-09-25 14:31:57 +0000
commitf5ec13f15ddaa6dc61b81d5c14cd8b30df896b40 (patch)
tree2f3289c7aec8cfae51b453ebed7c32164270cfe1 /libgo
parentbe2df8bc38a14659f6a5604c22252f17ef2a2a6c (diff)
downloadgcc-f5ec13f15ddaa6dc61b81d5c14cd8b30df896b40.zip
gcc-f5ec13f15ddaa6dc61b81d5c14cd8b30df896b40.tar.gz
gcc-f5ec13f15ddaa6dc61b81d5c14cd8b30df896b40.tar.bz2
internal/bytealg, internal/cpu, internal/poll: portability fixes
In internal/bytealg correct a +build tag to never build indexbyte_generic.go for the gofrontend, where we always use indexbyte_native.go. For internal/cpu let the Makefile define CacheLineSize using goarch.sh, rather than trying to enumerate all the possibilities in cpu_ARCH.go files. In internal/poll call the C fcntl function rather than using SYS_FCNTL. Change mksysinfo.sh to ensure that F_GETPIPE_SZ is always defined, and check that in internal/poll. Reviewed-on: https://go-review.googlesource.com/137256 From-SVN: r264572
Diffstat (limited to 'libgo')
-rw-r--r--libgo/Makefile.am11
-rw-r--r--libgo/Makefile.in10
-rw-r--r--libgo/go/internal/bytealg/indexbyte_generic.go2
-rw-r--r--libgo/go/internal/cpu/cpu_arm.go7
-rw-r--r--libgo/go/internal/cpu/cpu_arm64.go2
-rw-r--r--libgo/go/internal/cpu/cpu_mips.go7
-rw-r--r--libgo/go/internal/cpu/cpu_mips64.go7
-rw-r--r--libgo/go/internal/cpu/cpu_mips64le.go7
-rw-r--r--libgo/go/internal/cpu/cpu_mipsle.go7
-rw-r--r--libgo/go/internal/cpu/cpu_ppc64x.go2
-rw-r--r--libgo/go/internal/cpu/cpu_s390x.go2
-rw-r--r--libgo/go/internal/cpu/cpu_wasm.go7
-rw-r--r--libgo/go/internal/cpu/cpu_x86.go2
-rw-r--r--libgo/go/internal/poll/splice_linux.go9
-rwxr-xr-xlibgo/mksysinfo.sh5
15 files changed, 34 insertions, 53 deletions
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 373dd0c..699e10d 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -532,6 +532,14 @@ s-version: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
$(STAMP) $@
+cpugen.go: s-cpu; @true
+s-cpu: Makefile
+ rm -f cpugen.go.tmp
+ echo "package cpu" > cpugen.go.tmp
+ echo "const CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> cpugen.go.tmp
+ $(SHELL) $(srcdir)/mvifdiff.sh cpugen.go.tmp cpugen.go
+ $(STAMP) $@
+
objabi.go: s-objabi; @true
s-objabi: Makefile
rm -f objabi.go.tmp
@@ -963,6 +971,9 @@ runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
extra_go_files_runtime_internal_sys = version.go
runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys)
+extra_go_files_internal_cpu = cpugen.go
+internal/cpu.lo.dep: $(extra_go_files_internal_cpu)
+
extra_go_files_internal_goroot = zstdpkglist.go
internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index dfc2c66..10b11e0 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -1002,6 +1002,7 @@ runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime
# Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
extra_go_files_runtime_internal_sys = version.go
+extra_go_files_internal_cpu = cpugen.go
extra_go_files_internal_goroot = zstdpkglist.go
extra_go_files_go_types = gccgosizes.go
extra_go_files_cmd_internal_objabi = objabi.go
@@ -2759,6 +2760,14 @@ s-version: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
$(STAMP) $@
+cpugen.go: s-cpu; @true
+s-cpu: Makefile
+ rm -f cpugen.go.tmp
+ echo "package cpu" > cpugen.go.tmp
+ echo "const CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> cpugen.go.tmp
+ $(SHELL) $(srcdir)/mvifdiff.sh cpugen.go.tmp cpugen.go
+ $(STAMP) $@
+
objabi.go: s-objabi; @true
s-objabi: Makefile
rm -f objabi.go.tmp
@@ -2957,6 +2966,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package)))
runtime.lo.dep: $(extra_go_files_runtime)
syscall.lo.dep: $(extra_go_files_syscall)
runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys)
+internal/cpu.lo.dep: $(extra_go_files_internal_cpu)
internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
go/types.lo.dep: $(extra_go_files_go_types)
cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi)
diff --git a/libgo/go/internal/bytealg/indexbyte_generic.go b/libgo/go/internal/bytealg/indexbyte_generic.go
index 890cd42..6e59fd1 100644
--- a/libgo/go/internal/bytealg/indexbyte_generic.go
+++ b/libgo/go/internal/bytealg/indexbyte_generic.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +ignore_for_gccgo
+// +build ignore_for_gccgo
// +build !386,!amd64,!amd64p32,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!wasm
package bytealg
diff --git a/libgo/go/internal/cpu/cpu_arm.go b/libgo/go/internal/cpu/cpu_arm.go
deleted file mode 100644
index 078a6c3..0000000
--- a/libgo/go/internal/cpu/cpu_arm.go
+++ /dev/null
@@ -1,7 +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 cpu
-
-const CacheLineSize = 32
diff --git a/libgo/go/internal/cpu/cpu_arm64.go b/libgo/go/internal/cpu/cpu_arm64.go
index 009f2a2..c4d6b81 100644
--- a/libgo/go/internal/cpu/cpu_arm64.go
+++ b/libgo/go/internal/cpu/cpu_arm64.go
@@ -4,8 +4,6 @@
package cpu
-const CacheLineSize = 64
-
// arm64 doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
// These are initialized by archauxv in runtime/os_linux_arm64.go.
// These should not be changed after they are initialized.
diff --git a/libgo/go/internal/cpu/cpu_mips.go b/libgo/go/internal/cpu/cpu_mips.go
deleted file mode 100644
index 078a6c3..0000000
--- a/libgo/go/internal/cpu/cpu_mips.go
+++ /dev/null
@@ -1,7 +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 cpu
-
-const CacheLineSize = 32
diff --git a/libgo/go/internal/cpu/cpu_mips64.go b/libgo/go/internal/cpu/cpu_mips64.go
deleted file mode 100644
index 078a6c3..0000000
--- a/libgo/go/internal/cpu/cpu_mips64.go
+++ /dev/null
@@ -1,7 +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 cpu
-
-const CacheLineSize = 32
diff --git a/libgo/go/internal/cpu/cpu_mips64le.go b/libgo/go/internal/cpu/cpu_mips64le.go
deleted file mode 100644
index 078a6c3..0000000
--- a/libgo/go/internal/cpu/cpu_mips64le.go
+++ /dev/null
@@ -1,7 +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 cpu
-
-const CacheLineSize = 32
diff --git a/libgo/go/internal/cpu/cpu_mipsle.go b/libgo/go/internal/cpu/cpu_mipsle.go
deleted file mode 100644
index 078a6c3..0000000
--- a/libgo/go/internal/cpu/cpu_mipsle.go
+++ /dev/null
@@ -1,7 +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 cpu
-
-const CacheLineSize = 32
diff --git a/libgo/go/internal/cpu/cpu_ppc64x.go b/libgo/go/internal/cpu/cpu_ppc64x.go
index d3f02ef..5c4bed7 100644
--- a/libgo/go/internal/cpu/cpu_ppc64x.go
+++ b/libgo/go/internal/cpu/cpu_ppc64x.go
@@ -6,8 +6,6 @@
package cpu
-const CacheLineSize = 128
-
// ppc64x doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
// These are initialized by archauxv in runtime/os_linux_ppc64x.go.
// These should not be changed after they are initialized.
diff --git a/libgo/go/internal/cpu/cpu_s390x.go b/libgo/go/internal/cpu/cpu_s390x.go
index 9dedb4c..43fa4ad 100644
--- a/libgo/go/internal/cpu/cpu_s390x.go
+++ b/libgo/go/internal/cpu/cpu_s390x.go
@@ -4,8 +4,6 @@
package cpu
-const CacheLineSize = 256
-
// bitIsSet reports whether the bit at index is set. The bit index
// is in big endian order, so bit index 0 is the leftmost bit.
func bitIsSet(bits []uint64, index uint) bool {
diff --git a/libgo/go/internal/cpu/cpu_wasm.go b/libgo/go/internal/cpu/cpu_wasm.go
deleted file mode 100644
index 1107a7a..0000000
--- a/libgo/go/internal/cpu/cpu_wasm.go
+++ /dev/null
@@ -1,7 +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 cpu
-
-const CacheLineSize = 64
diff --git a/libgo/go/internal/cpu/cpu_x86.go b/libgo/go/internal/cpu/cpu_x86.go
index 7d9d3aa..5f15965 100644
--- a/libgo/go/internal/cpu/cpu_x86.go
+++ b/libgo/go/internal/cpu/cpu_x86.go
@@ -6,8 +6,6 @@
package cpu
-const CacheLineSize = 64
-
// cpuid is implemented in cpu_x86.s.
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
diff --git a/libgo/go/internal/poll/splice_linux.go b/libgo/go/internal/poll/splice_linux.go
index aa237e5..4265b42 100644
--- a/libgo/go/internal/poll/splice_linux.go
+++ b/libgo/go/internal/poll/splice_linux.go
@@ -162,10 +162,15 @@ func newTempPipe() (prfd, pwfd int, sc string, err error) {
defer atomic.StorePointer(&disableSplice, unsafe.Pointer(p))
// F_GETPIPE_SZ was added in 2.6.35, which does not have the -EAGAIN bug.
- if _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fds[0]), syscall.F_GETPIPE_SZ, 0); errno != 0 {
+ if syscall.F_GETPIPE_SZ == 0 {
*p = true
destroyTempPipe(fds[0], fds[1])
- return -1, -1, "fcntl", errno
+ return -1, -1, "fcntl", syscall.EINVAL
+ }
+ if _, errno := fcntl(uintptr(fds[0]), syscall.F_GETPIPE_SZ, 0); errno != 0 {
+ *p = true
+ destroyTempPipe(fds[0], fds[1])
+ return -1, -1, "fcntl", syscall.Errno(errno)
}
}
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index 48bc71d..b9436ef 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -73,6 +73,11 @@ if ! grep '^const F_DUPFD_CLOEXEC' ${OUT} >/dev/null 2>&1; then
echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT}
fi
+# The internal/poll package requires F_GETPIPE_SZ to be defined.
+if ! grep '^const F_GETPIPE_SZ' ${OUT} >/dev/null 2>&1; then
+ echo "const F_GETPIPE_SZ = 0" >> ${OUT}
+fi
+
# AIX 7.1 is a 64 bits value for _FCLOEXEC (referenced by O_CLOEXEC)
# which leads to a constant overflow when using O_CLOEXEC in some
# go code. Issue wan not present in 6.1 (no O_CLOEXEC) and is no