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
This commit is contained in:
parent
be2df8bc38
commit
f5ec13f15d
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
$(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
|
||||||
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
|
||||||
# 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
|
||||||
$(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)))
|
||||||
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 @@
|
||||||
// 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
|
||||||
|
|
|
@ -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
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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 @@
|
||||||
|
|
||||||
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 {
|
||||||
|
|
|
@ -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
|
|
|
@ -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) {
|
||||||
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
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue