On Tue, Feb 15, 2022 at 1:19 AM Eric Botcazou <botcazou@adacore.com> wrote:
>
> > I've committed a change to update libgo to the Go1.18beta2 release.
>
> This apparently broke the build on SPARC/Solaris 11.3:
I've committed this patch to fix these problems. Bootstrapped and ran
Go testsuite on x86_64-pc-linux-gnu and x86_64-solaris.
Ian
p
24ca97325cab7bc454c785d55f37120fe7ea6f74
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 745132a3d9d..3742414c828 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-0af68c0552341a44f1fb12301f9eff954b9dde88
+3742e8a154bfec805054b4ebf0809f12dc7694da
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/libgo/go/net/fcntl_libc_test.go b/libgo/go/net/fcntl_libc_test.go
index f59a1aa33ba..c935c4540cf 100644
--- a/libgo/go/net/fcntl_libc_test.go
+++ b/libgo/go/net/fcntl_libc_test.go
@@ -6,7 +6,10 @@
package net
-import "syscall"
+import (
+ "syscall"
+ _ "unsafe"
+)
// Use a helper function to call fcntl. This is defined in C in
// libgo/runtime.
diff --git a/libgo/go/os/signal/internal/pty/pty.go b/libgo/go/os/signal/internal/pty/pty.go
index e5ee3f6dc01..01c3908becf 100644
--- a/libgo/go/os/signal/internal/pty/pty.go
+++ b/libgo/go/os/signal/internal/pty/pty.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.
-//go:build (aix || darwin || dragonfly || freebsd || hurd || (linux && !android) || netbsd || openbsd) && cgo
+//go:build (aix || darwin || dragonfly || freebsd || hurd || (linux && !android) || netbsd || openbsd || solaris) && cgo
// Package pty is a simple pseudo-terminal package for Unix systems,
// implemented by calling C functions via cgo.
diff --git a/libgo/go/runtime/os3_solaris.go b/libgo/go/runtime/os3_solaris.go
index ec23ce2cc0c..6c825746fbc 100644
--- a/libgo/go/runtime/os3_solaris.go
+++ b/libgo/go/runtime/os3_solaris.go
@@ -36,6 +36,14 @@ func solarisExecutablePath() string {
return executablePath
}
+func setProcessCPUProfiler(hz int32) {
+ setProcessCPUProfilerTimer(hz)
+}
+
+func setThreadCPUProfiler(hz int32) {
+ setThreadCPUProfilerHz(hz)
+}
+
//go:nosplit
func validSIGPROF(mp *m, c *sigctxt) bool {
return true
diff --git a/libgo/go/runtime/stubs2.go b/libgo/go/runtime/stubs2.go
index 0b9e60587e1..587109209d1 100644
--- a/libgo/go/runtime/stubs2.go
+++ b/libgo/go/runtime/stubs2.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.
-//go:build !aix && !darwin && !js && !openbsd && !plan9 && !solaris && !windows
+//go:build !js && !plan9 && !windows
package runtime
diff --git a/libgo/go/syscall/exec_bsd.go b/libgo/go/syscall/exec_bsd.go
index c05ae138811..ff88bc45366 100644
--- a/libgo/go/syscall/exec_bsd.go
+++ b/libgo/go/syscall/exec_bsd.go
@@ -143,13 +143,13 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
// User and groups
if cred := sys.Credential; cred != nil {
ngroups := len(cred.Groups)
- var groups *Gid_t
+ var groups unsafe.Pointer
if ngroups > 0 {
gids := make([]Gid_t, ngroups)
for i, v := range cred.Groups {
gids[i] = Gid_t(v)
}
- groups = &gids[0]
+ groups = unsafe.Pointer(&gids[0])
}
if !cred.NoSetGroups {
err1 = raw_setgroups(ngroups, groups)
diff --git a/libgo/go/syscall/export_unix_test.go b/libgo/go/syscall/export_unix_test.go
index 184eb84c0b1..bd904c70f36 100644
--- a/libgo/go/syscall/export_unix_test.go
+++ b/libgo/go/syscall/export_unix_test.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.
-//go:build dragonfly || freebsd || hurd || linux || netbsd || openbsd
+//go:build dragonfly || freebsd || hurd || linux || netbsd || openbsd || solaris
package syscall
diff --git a/libgo/go/syscall/syscall_solaris.go b/libgo/go/syscall/syscall_solaris.go
index 13c60a493d9..673ba8223fc 100644
--- a/libgo/go/syscall/syscall_solaris.go
+++ b/libgo/go/syscall/syscall_solaris.go
@@ -6,8 +6,6 @@ package syscall
import "unsafe"
-const _F_DUP2FD_CLOEXEC = F_DUP2FD_CLOEXEC
-
func (ts *Timestruc) Unix() (sec int64, nsec int64) {
return int64(ts.Sec), int64(ts.Nsec)
}
@@ -1,4 +1,4 @@
-b0dcd2d1e5e73952408b9f2d4d86ae12d102b20c
+47380f733ca932384e59492d2f04374edd8ec95e
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
@@ -62,6 +62,7 @@ go_cmd_gofmt_files = \
go_cmd_cgo_files = \
$(cmdsrcdir)/cgo/ast.go \
+ $(cmdsrcdir)/cgo/ast_go118.go \
$(cmdsrcdir)/cgo/doc.go \
$(cmdsrcdir)/cgo/gcc.go \
$(cmdsrcdir)/cgo/godefs.go \
@@ -224,6 +225,7 @@ check-go-tool: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
cp -r $(libgosrcdir)/golang.org/x/mod check-go-dir/src/cmd/vendor/golang.org/x/
cp -r $(libgosrcdir)/golang.org/x/crypto check-go-dir/src/cmd/vendor/golang.org/x/
cp -r $(libgosrcdir)/golang.org/x/xerrors check-go-dir/src/cmd/vendor/golang.org/x/
+ cp -r $(libgosrcdir)/golang.org/x/tools check-go-dir/src/cmd/vendor/golang.org/x/
cp $(libgodir)/objabi.go check-go-dir/src/cmd/internal/objabi/
@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
abs_checkdir=`cd check-go-dir && $(PWD_COMMAND)`; \
@@ -1,4 +1,4 @@
-21a4e67ad58e3c4a7c5254f60cda5be5c3c450ff
+41f485b9a7d8fd647c415be1d11b612063dff21c
The first line of this file holds the git revision number of the
last merge done from the master library sources.
@@ -220,6 +220,7 @@ toolexeclibgodatabasesql_DATA = \
toolexeclibgodebugdir = $(toolexeclibgodir)/debug
toolexeclibgodebug_DATA = \
+ debug/buildinfo.gox \
debug/dwarf.gox \
debug/elf.gox \
debug/gosym.gox \
@@ -325,6 +326,7 @@ toolexeclibgonetdir = $(toolexeclibgodir)/net
toolexeclibgonet_DATA = \
net/http.gox \
net/mail.gox \
+ net/netip.gox \
net/rpc.gox \
net/smtp.gox \
net/textproto.gox \
@@ -429,6 +431,7 @@ noinst_DATA = \
internal/testenv.gox \
internal/trace.gox \
net/internal/socktest.gox \
+ os/exec/internal/fdtest.gox \
os/signal/internal/pty.gox \
reflect/internal/example1.gox \
reflect/internal/example2.gox
@@ -483,53 +486,68 @@ version.go: s-version; @true
s-version: Makefile
rm -f version.go.tmp
echo "package sys" > version.go.tmp
- echo 'const GOARCH = "'$(GOARCH)'"' >> version.go.tmp
- echo 'const GOOS = "'$(GOOS)'"' >> version.go.tmp
echo 'const GccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp
echo 'const StackGuardMultiplierDefault = 1' >> version.go.tmp
- echo >> version.go.tmp
- echo "const (" >> version.go.tmp
- echo " UNKNOWN ArchFamilyType = iota" >> version.go.tmp
+ $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
+ $(STAMP) $@
+
+zgoarch.go: s-zgoarch; @true
+s-zgoarch: Makefile goarch.sh
+ rm -f zgoarch.go.tmp
+ echo "package goarch" > zgoarch.go.tmp
+ echo >> zgoarch.go.tmp
+ echo 'const GOARCH = "'$(GOARCH)'"' >> zgoarch.go.tmp
+ echo >> zgoarch.go.tmp
+ echo 'const (' >> zgoarch.go.tmp
+ echo " _ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> zgoarch.go.tmp
+ echo " _BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> zgoarch.go.tmp
+ echo " _DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> zgoarch.go.tmp
+ echo " _Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> zgoarch.go.tmp
+ echo " _MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> zgoarch.go.tmp
+ echo " _PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> zgoarch.go.tmp
+ echo " _StackAlign = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) stackalign`" >> zgoarch.go.tmp
+ echo ")" >> zgoarch.go.tmp
+ echo >> zgoarch.go.tmp
+ echo "const (" >> zgoarch.go.tmp
+ echo " UNKNOWN ArchFamilyType = iota" >> zgoarch.go.tmp
for a in $(ALLGOARCHFAMILY); do \
- echo " $${a}" >> version.go.tmp; \
+ echo " $${a}" >> zgoarch.go.tmp; \
done
- echo ")" >> version.go.tmp
- echo >> version.go.tmp
+ echo ")" >> zgoarch.go.tmp
+ echo >> zgoarch.go.tmp
for a in $(ALLGOARCH); do \
f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \
n="$${f}`echo $${a} | sed -e 's/.//'`"; \
if test "$${a}" = "$(GOARCH)"; then \
- echo "const Goarch$${n} = 1" >> version.go.tmp; \
+ echo "const Is$${n} = 1" >> zgoarch.go.tmp; \
else \
- echo "const Goarch$${n} = 0" >> version.go.tmp; \
+ echo "const Is$${n} = 0" >> zgoarch.go.tmp; \
fi; \
done
- echo >> version.go.tmp
- echo "const (" >> version.go.tmp
- echo " _ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
- echo " _BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
- echo " _DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
- echo " _Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
- echo " _MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
- echo " _PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
- echo " _StackAlign = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) stackalign`" >> version.go.tmp
- echo ")" >> version.go.tmp
- echo >> version.go.tmp
+ $(SHELL) $(srcdir)/mvifdiff.sh zgoarch.go.tmp zgoarch.go
+ $(STAMP) $@
+
+zgoos.go: s-zgoos; @true
+s-zgoos: Makefile
+ rm -f zgoos.go.tmp
+ echo "package goos" > zgoos.go.tmp
+ echo >> zgoos.go.tmp
+ echo 'const GOOS = "'$(GOOS)'"' >> zgoos.go.tmp
+ echo >> zgoos.go.tmp
for a in $(ALLGOOS); do \
f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \
n="$${f}`echo $${a} | sed -e 's/.//'`"; \
if test "$${a}" = "$(GOOS)"; then \
- echo "const Goos$${n} = 1" >> version.go.tmp; \
+ echo "const Is$${n} = 1" >> zgoos.go.tmp; \
else \
- echo "const Goos$${n} = 0" >> version.go.tmp; \
+ echo "const Is$${n} = 0" >> zgoos.go.tmp; \
fi; \
done
- echo >> version.go.tmp
- $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
+ $(SHELL) $(srcdir)/mvifdiff.sh zgoos.go.tmp zgoos.go
$(STAMP) $@
cpugen.go: s-cpu; @true
-s-cpu: Makefile
+s-cpu: Makefile goarch.sh
rm -f cpugen.go.tmp
echo "package cpu" > cpugen.go.tmp
echo "const CacheLinePadSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> cpugen.go.tmp
@@ -538,7 +556,7 @@ s-cpu: Makefile
$(STAMP) $@
gcpugen.go: s-gcpu; @true
-s-gcpu: Makefile
+s-gcpu: Makefile goarch.sh
rm -f gcpugen.go.tmp
echo "package cpu" > gcpugen.go.tmp
echo "const cacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> gcpugen.go.tmp
@@ -560,6 +578,7 @@ s-buildcfg: Makefile
echo "import \"runtime\"" >> buildcfg.go.tmp
echo 'func defaultGOROOTValue() string { return `$(prefix)` }' >> buildcfg.go.tmp
echo 'const defaultGO386 = `sse2`' >> buildcfg.go.tmp
+ echo 'const defaultGOAMD64 = `v1`' >> buildcfg.go.tmp
echo 'const defaultGOARM = `5`' >> buildcfg.go.tmp
echo 'const defaultGOMIPS = `hardfloat`' >> buildcfg.go.tmp
echo 'const defaultGOMIPS64 = `hardfloat`' >> buildcfg.go.tmp
@@ -813,7 +832,8 @@ libgo_ldflags = \
libgo_libadd = \
$(libgo_go_objs) ../libbacktrace/libbacktrace.la \
- $(LIBATOMIC) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS)
+ $(LIBATOMIC) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) \
+ $(NET_LIBS) $(RT_LIBS)
libgo_la_SOURCES = $(runtime_files)
libgo_la_LDFLAGS = $(libgo_ldflags)
@@ -904,7 +924,7 @@ GOBENCH =
CHECK = \
GC="$(GOC) $(GOCFLAGS) $($(subst /,_,$@)_GOCFLAGS) -L `${PWD_COMMAND}` -L `${PWD_COMMAND}`/.libs"; \
export GC; \
- GOLIBS="$(extra_check_libs_$(subst .,_,$(subst /,_,$(@D)))) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS) $(LIBS)"; \
+ GOLIBS="$(extra_check_libs_$(subst .,_,$(subst /,_,$(@D)))) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS) $(RT_LIBS) $(LIBS)"; \
export GOLIBS; \
RUNTESTFLAGS="$(RUNTESTFLAGS)"; \
export RUNTESTFLAGS; \
@@ -1065,6 +1085,12 @@ 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_goarch = zgoarch.go
+internal/goarch.lo.dep: $(extra_go_files_internal_goarch)
+
+extra_go_files_internal_goos = zgoos.go
+internal/goos.lo.dep: $(extra_go_files_internal_goos)
+
extra_go_files_golang_org_x_sys_cpu = gcpugen.go
golang.org/x/sys/cpu.lo.dep: $(extra_go_files_golang_org_x_sys_cpu)
@@ -1 +1 @@
-go1.17.1
+go1.18beta2
@@ -19,13 +19,13 @@ cmd/go/internal/par
cmd/go/internal/search
cmd/go/internal/str
cmd/go/internal/test
-cmd/go/internal/txtar
cmd/go/internal/vcs
cmd/go/internal/work
cmd/internal/buildid
cmd/internal/edit
cmd/internal/objabi
cmd/internal/pkgpath
+cmd/internal/quoted
cmd/internal/test2json
compress/bzip2
compress/flate
@@ -46,7 +46,7 @@ crypto/ed25519
crypto/ed25519/internal/edwards25519
crypto/ed25519/internal/edwards25519/field
crypto/elliptic
-crypto/elliptic/internal/fiat
+crypto/elliptic/internal/nistec
crypto/hmac
crypto/internal/subtle
crypto/md5
@@ -61,6 +61,7 @@ crypto/tls
crypto/x509
database/sql
database/sql/driver
+debug/buildinfo
debug/dwarf
debug/elf
debug/macho
@@ -110,9 +111,13 @@ image/draw
image/jpeg
image/png
index/suffixarray
+internal/buildcfg
internal/cpu
internal/execabs
internal/fmtsort
+internal/fuzz
+internal/godebug
+internal/intern
internal/itoa
internal/poll
internal/profile
@@ -147,6 +152,7 @@ net/http/internal/ascii
net/http/pprof
net/internal/socktest
net/mail
+net/netip
net/rpc
net/rpc/jsonrpc
net/smtp
@@ -10,7 +10,7 @@ AC_INIT(package-unused, version-unused,, libgo)
AC_CONFIG_SRCDIR(Makefile.am)
AC_CONFIG_HEADER(config.h)
-libtool_VERSION=20:0:0
+libtool_VERSION=21:0:0
AC_SUBST(libtool_VERSION)
AM_ENABLE_MULTILIB(, ..)
@@ -549,6 +549,12 @@ AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
NET_LIBS="$libgo_cv_lib_sockets"
AC_SUBST(NET_LIBS)
+RT_LIBS=
+case ${host} in
+ *-*-linux*) RT_LIBS=-lrt ;;
+esac
+AC_SUBST(RT_LIBS)
+
dnl Test whether the compiler supports the -pthread option.
AC_CACHE_CHECK([whether -pthread is supported],
[libgo_cv_lib_pthread],
@@ -32,14 +32,15 @@ cmd/go/internal/run
cmd/go/internal/search
cmd/go/internal/str
cmd/go/internal/test
+cmd/go/internal/test/internal/genflags
cmd/go/internal/tool
cmd/go/internal/trace
-cmd/go/internal/txtar
cmd/go/internal/vcs
cmd/go/internal/version
cmd/go/internal/vet
cmd/go/internal/web
cmd/go/internal/work
+cmd/go/internal/workcmd
cmd/internal/browser
cmd/internal/buildid
cmd/internal/codesign
@@ -47,6 +48,7 @@ cmd/internal/diff
cmd/internal/edit
cmd/internal/objabi
cmd/internal/pkgpath
+cmd/internal/quoted
cmd/internal/sys
cmd/internal/test2json
cmd/internal/traceviewer
@@ -103,5 +105,7 @@ golang.org/x/tools/go/types/objectpath
golang.org/x/tools/go/types/typeutil
golang.org/x/tools/internal/analysisinternal
golang.org/x/tools/internal/lsp/fuzzy
+golang.org/x/tools/internal/typeparams
+golang.org/x/tools/txtar
golang.org/x/xerrors
golang.org/x/xerrors/internal
@@ -22,6 +22,7 @@ crypto/ed25519/internal/edwards25519
crypto/ed25519/internal/edwards25519/field
crypto/elliptic
crypto/elliptic/internal/fiat
+crypto/elliptic/internal/nistec
crypto/hmac
crypto/internal/randutil
crypto/internal/subtle
@@ -38,6 +39,7 @@ crypto/x509
crypto/x509/pkix
database/sql
database/sql/driver
+debug/buildinfo
debug/dwarf
debug/elf
debug/gosym
@@ -82,7 +84,9 @@ golang.org/x/crypto/chacha20poly1305
golang.org/x/crypto/cryptobyte
golang.org/x/crypto/cryptobyte/asn1
golang.org/x/crypto/curve25519
+golang.org/x/crypto/curve25519/internal/field
golang.org/x/crypto/hkdf
+golang.org/x/crypto/internal/poly1305
golang.org/x/crypto/internal/subtle
golang.org/x/crypto/poly1305
golang.org/x/net/dns/dnsmessage
@@ -91,6 +95,7 @@ golang.org/x/net/http/httpproxy
golang.org/x/net/http2/hpack
golang.org/x/net/idna
golang.org/x/net/nettest
+golang.org/x/sync/semaphore
golang.org/x/sys/cpu
golang.org/x/text/secure/bidirule
golang.org/x/text/transform
@@ -120,9 +125,14 @@ internal/cfg
internal/cpu
internal/execabs
internal/fmtsort
+internal/fuzz
+internal/goarch
+internal/godebug
internal/goexperiment
+internal/goos
internal/goroot
internal/goversion
+internal/intern
internal/itoa
internal/lazyregexp
internal/lazytemplate
@@ -169,6 +179,7 @@ net/http/internal/testcert
net/http/pprof
net/internal/socktest
net/mail
+net/netip
net/rpc
net/rpc/jsonrpc
net/smtp
@@ -176,6 +187,7 @@ net/textproto
net/url
os
os/exec
+os/exec/internal/fdtest
os/signal
os/signal/internal/pty
os/user
@@ -98,6 +98,22 @@ if test "$gofiles" = ""; then
exit 1
fi
+gobuild() {
+ line=$(echo "$1" | sed -e 's|//go:build ||')
+ line=$(echo "$line" | sed -e 's/go1\.[0-9]\+/1/g' -e 's/goexperiment\./goexperiment/')
+ line=" $line "
+ wrap='[ ()!&|]'
+ for ones in $goarch $goos $cgotag $cmdlinetag gccgo goexperimentfieldtrack; do
+ line=$(echo "$line" | sed -e "s/\\(${wrap}\\)${ones}\\(${wrap}\\)/"'\11\2/g')
+ done
+ # 386 is a special case since it looks like a number to the shell.
+ # We need it to be 0 if it's not $goarch.
+ if test "$goarch" != "386"; then
+ line=$(echo "$line" | sed -e "s/\\(${wrap}\\)386\\(${wrap}\\)/\10\2/g")
+ fi
+ (($line))
+}
+
matched=
for f in $gofiles; do
tag1=`echo $f | sed -e 's/^.*_\([^_]*\).go$/\1/'`
@@ -138,62 +154,74 @@ for f in $gofiles; do
;;
esac
- if test x$tag1 != xnonmatchingtag -a x$tag2 != xnonmatchingtag; then
- # Pipe through cat so that `set -e` doesn't affect fgrep.
- tags=`sed '/^package /q' < $f | grep '^// *+build ' | cat`
- omatch=true
- first=true
- match=false
- for tag in $tags; do
- case $tag in
- "//")
- ;;
- "+build" | "//+build")
- if test "$first" = "true"; then
- first=false
- elif test "$match" = "false"; then
- omatch=false
- fi
- match=false
- ;;
- $goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | "goexperiment.fieldtrack" | go1.[0-9] | go1.[0-9][0-9])
- match=true
- ;;
- "!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
- ;;
- *,*)
- cmatch=true
- for ctag in `echo $tag | sed -e 's/,/ /g'`; do
- case $ctag in
- $goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | "goexperiment.fieldtrack" | go1.[0-9] | go1.[0-9][0-9])
- ;;
- "!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
- cmatch=false
- ;;
- "!"*)
- ;;
- *)
- cmatch=false
- ;;
- esac
- done
- if test "$cmatch" = "true"; then
- match=true
- fi
- ;;
- "!"*)
- match=true
- ;;
- esac
- done
-
- if test "$match" = "false" -a "$first" = "false"; then
- omatch=false
- fi
+ if test x$tag1 = xnonmatchingtag -o x$tag2 = xnonmatchingtag; then
+ continue
+ fi
- if test "$omatch" = "true"; then
+ # Check for go:build line
+ build=$(sed '/^package /q' < $f | grep '^//go:build ' | cat)
+ if test -n "$build"; then
+ if $(gobuild "$build"); then
matched="$matched $srcdir/$f"
fi
+ continue
+ fi
+
+ # No go:build line, check for +build lines.
+ # Pipe through cat so that `set -e` doesn't affect fgrep.
+ tags=`sed '/^package /q' < $f | grep '^// *+build ' | cat`
+ omatch=true
+ first=true
+ match=false
+ for tag in $tags; do
+ case $tag in
+ "//")
+ ;;
+ "+build" | "//+build")
+ if test "$first" = "true"; then
+ first=false
+ elif test "$match" = "false"; then
+ omatch=false
+ fi
+ match=false
+ ;;
+ $goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | "goexperiment.fieldtrack" | go1.[0-9] | go1.[0-9][0-9])
+ match=true
+ ;;
+ "!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
+ ;;
+ *,*)
+ cmatch=true
+ for ctag in `echo $tag | sed -e 's/,/ /g'`; do
+ case $ctag in
+ $goos | $goarch | $cgotag | $cmdlinetag | "gccgo" | "goexperiment.fieldtrack" | go1.[0-9] | go1.[0-9][0-9])
+ ;;
+ "!"$goos | "!"$goarch | "!"$cgotag | "!"$cmdlinetag | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
+ cmatch=false
+ ;;
+ "!"*)
+ ;;
+ *)
+ cmatch=false
+ ;;
+ esac
+ done
+ if test "$cmatch" = "true"; then
+ match=true
+ fi
+ ;;
+ "!"*)
+ match=true
+ ;;
+ esac
+ done
+
+ if test "$match" = "false" -a "$first" = "false"; then
+ omatch=false
+ fi
+
+ if test "$omatch" = "true"; then
+ matched="$matched $srcdir/$f"
fi
done
@@ -72,7 +72,6 @@ merge() {
else
echo "merge.sh: ${name}: REMOVED"
rm -f ${libgo}
- git rm ${libgo}
fi
elif test -f ${old}; then
# The file exists in the old version.
@@ -124,7 +123,6 @@ merge() {
mkdir -p ${dir}
fi
cp ${new} ${libgo}
- git add ${libgo}
fi
fi
}
@@ -134,7 +132,7 @@ echo ${rev} > VERSION
(cd ${NEWDIR}/src && find . -name '*.go' -print) | while read f; do
skip=false
case "$f" in
- ./cmd/buildid/* | ./cmd/cgo/* | ./cmd/go/* | ./cmd/gofmt/* | ./cmd/test2json/* | ./cmd/vet/* | ./cmd/internal/browser/* | ./cmd/internal/buildid/* | ./cmd/internal/codesign/* | ./cmd/internal/edit/* | ./cmd/internal/objabi/* | ./cmd/internal/test2json/* | ./cmd/internal/sys/* | ./cmd/internal/traceviewer/* | ./cmd/vendor/golang.org/x/tools/* | ./cmd/vendor/golang.org/x/mod/* | ./cmd/vendor/golang.org/x/xerrors/* | ./cmd/vendor/golang.org/x/crypto/ed25519)
+ ./cmd/buildid/* | ./cmd/cgo/* | ./cmd/go/* | ./cmd/gofmt/* | ./cmd/test2json/* | ./cmd/vet/* | ./cmd/internal/browser/* | ./cmd/internal/buildid/* | ./cmd/internal/codesign/* | ./cmd/internal/edit/* | ./cmd/internal/objabi/* | ./cmd/internal/quoted/* | ./cmd/internal/test2json/* | ./cmd/internal/sys/* | ./cmd/internal/traceviewer/* | ./cmd/vendor/golang.org/x/tools/* | ./cmd/vendor/golang.org/x/mod/* | ./cmd/vendor/golang.org/x/xerrors/* | ./cmd/vendor/golang.org/x/crypto/ed25519 | ./cmd/vendor/golang.org/x/sync/semaphore)
;;
./cmd/*)
skip=true
@@ -191,7 +189,7 @@ done
continue
fi
(cd ${oldtd} && git ls-files .) | while read f; do
- if test "`basename $f`" = ".gitignore"; then
+ if test "`basename -- $f`" = ".gitignore"; then
continue
fi
name=$d/$f
@@ -221,7 +219,6 @@ done
fi
echo "merge.sh: ${libgofile}: REMOVED"
rm -f ${libgofile}
- git rm ${libgofile}
done
(cd ${OLDDIR}/misc/cgo && find . -type f -print) | while read f; do
@@ -236,7 +233,6 @@ done
fi
echo "merge.sh: ${libgofile}: REMOVED"
rm -f ${libgofile}
- git rm ${libgofile}
done
(echo ${new_rev}; sed -ne '2,$p' MERGE) > MERGE.tmp
@@ -62,6 +62,7 @@ sigtramp(int sig, siginfo_t *info, void *context)
G *gp;
void *stack_context[10];
void *stack;
+ void *find_stack;
size_t stack_size;
void *next_segment;
void *next_sp;
@@ -91,9 +92,15 @@ sigtramp(int sig, siginfo_t *info, void *context)
__splitstack_getcontext(&stack_context[0]);
- stack = __splitstack_find_context((void*)(&gp->m->gsignal->stackcontext[0]),
- &stack_size, &next_segment,
- &next_sp, &initial_sp);
+ find_stack =
+ __splitstack_find_context((void*)(&gp->m->gsignal->stackcontext[0]),
+ &stack_size, &next_segment,
+ &next_sp, &initial_sp);
+ stack = find_stack;
+ if (stack == NULL) {
+ stack = gp->m->gsignalstack;
+ stack_size = gp->m->gsignalstacksize;
+ }
// If some non-Go code called sigaltstack, adjust.
sp = (uintptr)(&stack_size);
@@ -113,7 +120,7 @@ sigtramp(int sig, siginfo_t *info, void *context)
// Unfortunately __splitstack_find_context will return NULL
// when it is called on a context that has never been used.
// There isn't much we can do but assume all is well.
- if (stack != NULL) {
+ if (find_stack != NULL) {
// Here the gc runtime adjusts the gsignal
// stack guard to match the values returned by
// sigaltstack. Unfortunately we have no way
@@ -289,6 +289,22 @@ x)
;;
esac
+gobuild() {
+ line=$(echo "$1" | sed -e 's|//go:build ||')
+ line=$(echo "$line" | sed -e 's/go1\.[0-9]\+/1/g' -e 's/goexperiment\./goexperiment/')
+ line=" $line "
+ wrap='[ ()!&|]'
+ for ones in $goarch $goos cgo gccgo goexperimentfieldtrack; do
+ line=$(echo "$line" | sed -e "s/\\(${wrap}\\)${ones}\\(${wrap}\\)/"'\11\2/g')
+ done
+ # 386 is a special case since it looks like a number to the shell.
+ # We need it to be 0 if it's not $goarch.
+ if test "$goarch" != "386"; then
+ line=$(echo "$line" | sed -e "s/\\(${wrap}\\)386\\(${wrap}\\)/\10\2/g")
+ fi
+ (($line))
+}
+
case "x$gofiles" in
x)
for f in `ls *_test.go`; do
@@ -330,15 +346,28 @@ x)
;;
esac
- if test x$tag1 != xnonmatchingtag -a x$tag2 != xnonmatchingtag; then
- tags=`sed '/^package /q' < $f | grep '^// *+build '`
- omatch=true
- first=true
- match=false
- for tag in $tags; do
- case $tag in
+ if test x$tag1 = xnonmatchingtag -o x$tag2 = xnonmatchingtag; then
+ continue
+ fi
+
+ # Check for go:build line
+ build=$(sed '/^package /q' < $f | grep '^//go:build ' | cat)
+ if test -n "$build"; then
+ if $(gobuild "$build"); then
+ gofiles="$gofiles $f"
+ fi
+ continue
+ fi
+
+ # No go:build line, check for +build lines.
+ tags=`sed '/^package /q' < $f | grep '^// *+build '`
+ omatch=true
+ first=true
+ match=false
+ for tag in $tags; do
+ case $tag in
"//")
- ;;
+ ;;
"+build" | "//+build")
if test "$first" = "true"; then
first=false
@@ -356,16 +385,16 @@ x)
cmatch=true
for ctag in `echo $tag | sed -e 's/,/ /g'`; do
case $ctag in
- $goos | $goarch | cgo | gccgo | goexperiment.fieldtrack | go1.[0-9] | go1.[0-9][0-9])
- ;;
- "!"$goos | "!"$goarch | "!cgo" | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
- cmatch=false
- ;;
- "!"*)
- ;;
- *)
- cmatch=false
+ $goos | $goarch | cgo | gccgo | goexperiment.fieldtrack | go1.[0-9] | go1.[0-9][0-9])
;;
+ "!"$goos | "!"$goarch | "!cgo" | "!gccgo" | "!goexperiment.fieldtrack" | "!"go1.[0-9] | "!"go1.1[0-7])
+ cmatch=false
+ ;;
+ "!"*)
+ ;;
+ *)
+ cmatch=false
+ ;;
esac
done
if test "$cmatch" = "true"; then
@@ -375,16 +404,15 @@ x)
"!"*)
match=true
;;
- esac
- done
+ esac
+ done
- if test "$match" = "false" -a "$first" = "false"; then
- omatch=false
- fi
+ if test "$match" = "false" -a "$first" = "false"; then
+ omatch=false
+ fi
- if test "$omatch" = "true"; then
- gofiles="$gofiles $f"
- fi
+ if test "$omatch" = "true"; then
+ gofiles="$gofiles $f"
fi
done
;;
@@ -546,6 +574,18 @@ symtogo() {
done
}
+# Find Go benchmark/fuzz/example functions.
+# The argument is the function name prefix.
+findfuncs() {
+ pattern='$1([^a-z].*)?'
+ syms=$($NM -p -v _gotest_.o | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
+ if $havex; then
+ xsyms=$($NM -p -v $xofile | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
+ syms="$syms $xsyms"
+ fi
+ $(symtogo "$benchmarksyms")
+}
+
# Takes an example name and puts any output into the file example.txt.
# It strips comment markers but does not otherwise change the output.
exampleoutput() {
@@ -589,23 +629,10 @@ exampleoutput() {
echo 'gotest: warning: no tests matching '$pattern in _gotest_.o $xofile 1>&2
exit 2
fi
- # benchmarks are named BenchmarkFoo.
- pattern='Benchmark([^a-z].*)?'
- benchmarksyms=$($NM -p -v _gotest_.o | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
- if $havex; then
- benchmarkxsyms=$($NM -p -v $xofile | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
- benchmarksyms="$benchmarksyms $benchmarkxsyms"
- fi
- benchmarks=$(symtogo "$benchmarksyms")
- # examples are named ExampleFoo
- pattern='Example([^a-z].*)?'
- examplesyms=$($NM -p -v _gotest_.o | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
- if $havex; then
- examplexsyms=$($NM -p -v $xofile | egrep " $text .*\."$pattern'$' | fgrep -v ' __go_' | egrep -v '\.\.\w+$' | sed 's/.* //')
- examplesyms="$examplesyms $examplexsyms"
- fi
- examples=$(symtogo "$examplesyms")
+ benchmarks=$(findfuncs Benchmark)
+ fuzztargets=$(findfuncs Fuzz)
+ examples=$(findfuncs Example)
# package spec
echo 'package main'
@@ -663,6 +690,15 @@ exampleoutput() {
done
echo '}'
+ # fuzz array
+ echo 'var fuzzTargets = []testing.InternalFuzzTarget{'
+ for i in $fuzztargets; do
+ n=$(testname $i)
+ j=$(localname $i)
+ echo ' {"'$n'", '$j'},'
+ done
+ echo '}'
+
# examples array
echo 'var examples = []testing.InternalExample{'
for i in $examples; do
@@ -710,7 +746,7 @@ exampleoutput() {
echo \
'
func main() {
- m := testing.MainStart(testdeps.TestDeps{}, tests, benchmarks, examples)
+ m := testing.MainStart(testdeps.TestDeps{}, tests, benchmarks, fuzzTargets, examples)
'
if test -n "$testmain"; then
echo " ${testmain}(m)"