Commit f5ec13f1 by Ian Lance Taylor

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
parent be2df8bc
1dbc5b805a1665079008d1ce341991c3554c1eeb 652fbfb7acfd81ceffe28e20984464aa7bb6024d
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -532,6 +532,14 @@ s-version: Makefile ...@@ -532,6 +532,14 @@ s-version: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
$(STAMP) $@ $(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 objabi.go: s-objabi; @true
s-objabi: Makefile s-objabi: Makefile
rm -f objabi.go.tmp rm -f objabi.go.tmp
...@@ -963,6 +971,9 @@ runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline ...@@ -963,6 +971,9 @@ runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
extra_go_files_runtime_internal_sys = version.go extra_go_files_runtime_internal_sys = version.go
runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys) 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 extra_go_files_internal_goroot = zstdpkglist.go
internal/goroot.lo.dep: $(extra_go_files_internal_goroot) internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
......
...@@ -1002,6 +1002,7 @@ runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime ...@@ -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. # Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
extra_go_files_runtime_internal_sys = version.go 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_internal_goroot = zstdpkglist.go
extra_go_files_go_types = gccgosizes.go extra_go_files_go_types = gccgosizes.go
extra_go_files_cmd_internal_objabi = objabi.go extra_go_files_cmd_internal_objabi = objabi.go
...@@ -2759,6 +2760,14 @@ s-version: Makefile ...@@ -2759,6 +2760,14 @@ s-version: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
$(STAMP) $@ $(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 objabi.go: s-objabi; @true
s-objabi: Makefile s-objabi: Makefile
rm -f objabi.go.tmp rm -f objabi.go.tmp
...@@ -2957,6 +2966,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package))) ...@@ -2957,6 +2966,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package)))
runtime.lo.dep: $(extra_go_files_runtime) runtime.lo.dep: $(extra_go_files_runtime)
syscall.lo.dep: $(extra_go_files_syscall) syscall.lo.dep: $(extra_go_files_syscall)
runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys) 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) internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
go/types.lo.dep: $(extra_go_files_go_types) go/types.lo.dep: $(extra_go_files_go_types)
cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi) cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 // +build !386,!amd64,!amd64p32,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!wasm
package bytealg package bytealg
......
// 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
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
package cpu package cpu
const CacheLineSize = 64
// arm64 doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2. // 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 are initialized by archauxv in runtime/os_linux_arm64.go.
// These should not be changed after they are initialized. // These should not be changed after they are initialized.
......
// 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
// 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
// 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
// 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
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
package cpu package cpu
const CacheLineSize = 128
// ppc64x doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2. // 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 are initialized by archauxv in runtime/os_linux_ppc64x.go.
// These should not be changed after they are initialized. // These should not be changed after they are initialized.
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
package cpu package cpu
const CacheLineSize = 256
// bitIsSet reports whether the bit at index is set. The bit index // 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. // is in big endian order, so bit index 0 is the leftmost bit.
func bitIsSet(bits []uint64, index uint) bool { func bitIsSet(bits []uint64, index uint) bool {
......
// 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
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
package cpu package cpu
const CacheLineSize = 64
// cpuid is implemented in cpu_x86.s. // cpuid is implemented in cpu_x86.s.
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
......
...@@ -162,10 +162,15 @@ func newTempPipe() (prfd, pwfd int, sc string, err error) { ...@@ -162,10 +162,15 @@ func newTempPipe() (prfd, pwfd int, sc string, err error) {
defer atomic.StorePointer(&disableSplice, unsafe.Pointer(p)) defer atomic.StorePointer(&disableSplice, unsafe.Pointer(p))
// F_GETPIPE_SZ was added in 2.6.35, which does not have the -EAGAIN bug. // 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 *p = true
destroyTempPipe(fds[0], fds[1]) 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)
} }
} }
......
...@@ -73,6 +73,11 @@ if ! grep '^const F_DUPFD_CLOEXEC' ${OUT} >/dev/null 2>&1; then ...@@ -73,6 +73,11 @@ if ! grep '^const F_DUPFD_CLOEXEC' ${OUT} >/dev/null 2>&1; then
echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT} echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT}
fi 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) # 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 # 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 # go code. Issue wan not present in 6.1 (no O_CLOEXEC) and is no
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment