From 3959d54c0bd5c92fe0a5e33fedb0595723efc23b Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sat, 20 Jul 2024 00:55:15 +0700 Subject: [PATCH 001/866] runtime: mark lockWithRankMayAcquire as nosplit The function is called in nosplit context already. Fixes #68525 Change-Id: I8b9e324335b7c605d5a20cacdd58df09b7a7cf52 Reviewed-on: https://go-review.googlesource.com/c/go/+/599675 Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Auto-Submit: Cuong Manh Le --- src/runtime/lockrank_off.go | 3 +++ test/fixedbugs/issue68525.go | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 test/fixedbugs/issue68525.go diff --git a/src/runtime/lockrank_off.go b/src/runtime/lockrank_off.go index edeb265f43e874..18aef6bd2b3f43 100644 --- a/src/runtime/lockrank_off.go +++ b/src/runtime/lockrank_off.go @@ -42,6 +42,9 @@ func releaseLockRankAndM(rank lockRank) { releasem(getg().m) } +// This function may be called in nosplit context and thus must be nosplit. +// +//go:nosplit func lockWithRankMayAcquire(l *mutex, rank lockRank) { } diff --git a/test/fixedbugs/issue68525.go b/test/fixedbugs/issue68525.go new file mode 100644 index 00000000000000..e33de38be64889 --- /dev/null +++ b/test/fixedbugs/issue68525.go @@ -0,0 +1,13 @@ +// run -gcflags='all=-N -l' + +// Copyright 2024 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 main + +import "os" + +func main() { + os.OpenFile(os.DevNull, os.O_WRONLY, 0) +} From f0de94ff127db9b53f3f5877088d28afe1a85692 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 18 Jul 2024 14:51:34 -0400 Subject: [PATCH 002/866] cmd/compile: don't inline runtime functions in -d=checkptr build Runtime functions, e.g. internal/abi.NoEscape, should not be instrumented with checkptr. But if they are inlined into a checkptr-enabled function, they will be instrumented, and may result in a check failure. Let the compiler not inline runtime functions into checkptr- enabled functions. Also undo the change in the strings package in CL 598295, as the compiler handles it now. Fixes #68511. Updates #68415. Change-Id: I78eb380855ac9dd53c1a1a628ec0da75c3e5a1a0 Reviewed-on: https://go-review.googlesource.com/c/go/+/599435 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Cuong Manh Le Reviewed-by: Keith Randall --- src/cmd/compile/internal/inline/inl.go | 9 +++++++++ src/cmd/compile/internal/types/type.go | 5 +++++ src/cmd/internal/objabi/pkgspecial.go | 2 ++ src/strings/builder.go | 14 +------------- test/fixedbugs/issue68415.go | 6 +++++- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 1b438f9ef0a906..31b3bdfa2559db 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -1007,6 +1007,15 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa return false, 0, false } + if base.Debug.Checkptr != 0 && types.IsRuntimePkg(callee.Sym().Pkg) { + // We don't intrument runtime packages for checkptr (see base/flag.go). + if log && logopt.Enabled() { + logopt.LogOpt(n.Pos(), "cannotInlineCall", "inline", ir.FuncName(callerfn), + fmt.Sprintf(`call to into runtime package function %s in -d=checkptr build`, ir.PkgFuncName(callee))) + } + return false, 0, false + } + // Check if we've already inlined this function at this particular // call site, in order to stop inlining when we reach the beginning // of a recursion cycle again. We don't inline immediately recursive diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index b29b2aca06aa83..88052dc97b6791 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -1927,6 +1927,11 @@ func IsNoRacePkg(p *Pkg) bool { return objabi.LookupPkgSpecial(p.Path).NoRaceFunc } +// IsRuntimePkg reports whether p is a runtime package. +func IsRuntimePkg(p *Pkg) bool { + return objabi.LookupPkgSpecial(p.Path).Runtime +} + // ReceiverBaseType returns the underlying type, if any, // that owns methods with receiver parameter t. // The result is either a named type or an anonymous struct. diff --git a/src/cmd/internal/objabi/pkgspecial.go b/src/cmd/internal/objabi/pkgspecial.go index 3e99ce922471cc..c34ede53fe0fb5 100644 --- a/src/cmd/internal/objabi/pkgspecial.go +++ b/src/cmd/internal/objabi/pkgspecial.go @@ -18,6 +18,8 @@ type PkgSpecial struct { // // - Optimizations are always enabled. // + // - Checkptr is always disabled. + // // This should be set for runtime and all packages it imports, and may be // set for additional packages. Runtime bool diff --git a/src/strings/builder.go b/src/strings/builder.go index 3b37888cbf6dba..e6df08c6f479ad 100644 --- a/src/strings/builder.go +++ b/src/strings/builder.go @@ -23,18 +23,6 @@ type Builder struct { buf []byte } -// This is just a wrapper around abi.NoEscape. -// -// This wrapper is necessary because internal/abi is a runtime package, -// so it can not be built with -d=checkptr, causing incorrect inlining -// decision when building with checkptr enabled, see issue #68415. -// -//go:nosplit -//go:nocheckptr -func noescape(p unsafe.Pointer) unsafe.Pointer { - return abi.NoEscape(p) -} - func (b *Builder) copyCheck() { if b.addr == nil { // This hack works around a failing of Go's escape analysis @@ -42,7 +30,7 @@ func (b *Builder) copyCheck() { // See issue 23382. // TODO: once issue 7921 is fixed, this should be reverted to // just "b.addr = b". - b.addr = (*Builder)(noescape(unsafe.Pointer(b))) + b.addr = (*Builder)(abi.NoEscape(unsafe.Pointer(b))) } else if b.addr != b { panic("strings: illegal use of non-zero Builder copied by value") } diff --git a/test/fixedbugs/issue68415.go b/test/fixedbugs/issue68415.go index cf278ac60359b1..f23cab2e7cf630 100644 --- a/test/fixedbugs/issue68415.go +++ b/test/fixedbugs/issue68415.go @@ -6,10 +6,14 @@ package main -import "regexp" +import ( + "regexp" + "unique" +) var dataFileRegexp = regexp.MustCompile(`^data\.\d+\.bin$`) func main() { _ = dataFileRegexp + unique.Make("") } From a799fa51896b63339f75f9a354c2d70fa8815ac2 Mon Sep 17 00:00:00 2001 From: Sean Liao Date: Fri, 19 Jul 2024 23:34:02 +0100 Subject: [PATCH 003/866] slices: explicitly document nil and empty slice equality Fixes #68472 Change-Id: I21282621d679d9e2b032256b338c0b5ff107c8f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/599816 Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- src/slices/slices.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slices/slices.go b/src/slices/slices.go index 857ab46314324b..b3cd4e2c054001 100644 --- a/src/slices/slices.go +++ b/src/slices/slices.go @@ -15,6 +15,7 @@ import ( // elements equal. If the lengths are different, Equal returns false. // Otherwise, the elements are compared in increasing index order, and the // comparison stops at the first unequal pair. +// Empty and nil slices are considered equal. // Floating point NaNs are not considered equal. func Equal[S ~[]E, E comparable](s1, s2 S) bool { if len(s1) != len(s2) { From 5e8a7316658c2f300a375041b6e0a606fec4c5f2 Mon Sep 17 00:00:00 2001 From: Will Faught Date: Sat, 20 Jul 2024 01:18:47 +0000 Subject: [PATCH 004/866] README: fix CC BY license name Change-Id: Idf3c4427426e3cb74c7749762f2b4f621cf82dba GitHub-Last-Rev: 86f51a5d504fdb596145a41e305bea1171776daa GitHub-Pull-Request: golang/go#68518 Reviewed-on: https://go-review.googlesource.com/c/go/+/599515 Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98f968218e5425..71c9d1dc299388 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. ![Gopher image](https://golang.org/doc/gopher/fiveyears.jpg) -*Gopher image by [Renee French][rf], licensed under [Creative Commons 4.0 Attributions license][cc4-by].* +*Gopher image by [Renee French][rf], licensed under [Creative Commons 4.0 Attribution license][cc4-by].* Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go. From c622f5c341134f4164b2baf67632657862996029 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Mon, 22 Jul 2024 12:31:02 -0400 Subject: [PATCH 005/866] internal/goversion: update Version to 1.24 Go 1.24 is in the process of being opened for development (to be eventually released). This change marks the very beginning of its development cycle, updating the Version value accordingly. For #40705. For #67586. Change-Id: Ibd194f229e7dbd25bc2713f86330fab50ea1dfaa Reviewed-on: https://go-review.googlesource.com/c/go/+/600176 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Cherry Mui Auto-Submit: Dmitri Shuralyov --- src/internal/goversion/goversion.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/internal/goversion/goversion.go b/src/internal/goversion/goversion.go index a9d6f12ee14d3b..de2bcf4c82eb33 100644 --- a/src/internal/goversion/goversion.go +++ b/src/internal/goversion/goversion.go @@ -8,5 +8,5 @@ package goversion // in development and will eventually get released. // // It should be updated at the start of each development cycle to be -// the version of the next Go 1.x release. See golang.org/issue/40705. -const Version = 23 +// the version of the next Go 1.x release. See go.dev/issue/40705. +const Version = 24 From e8c5bed7ea43e1a533c322e6b928ed06327721db Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Mon, 22 Jul 2024 12:44:49 -0400 Subject: [PATCH 006/866] doc: initialize next directory for Go 1.24 Following the "For the release team" steps in README: cd doc cp -R initial/ next $EDITOR next/1-intro.md Dropped '*' from the cp -R command to avoid needing to create an empty next directory with a separate command. For #68545. For #67586. Change-Id: I25215bc35a043e0f26d4a86ffe66eb3c26348fef Reviewed-on: https://go-review.googlesource.com/c/go/+/600177 Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Auto-Submit: Dmitri Shuralyov Reviewed-by: Cherry Mui --- doc/README.md | 2 +- doc/next/1-intro.md | 14 ++++++++++++++ doc/next/2-language.md | 3 +++ doc/next/3-tools.md | 6 ++++++ doc/next/4-runtime.md | 1 + doc/next/5-toolchain.md | 7 +++++++ doc/next/6-stdlib/0-heading.md | 2 ++ doc/next/6-stdlib/99-minor/0-heading.md | 3 +++ doc/next/6-stdlib/99-minor/README | 1 + doc/next/7-ports.md | 2 ++ 10 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 doc/next/1-intro.md create mode 100644 doc/next/2-language.md create mode 100644 doc/next/3-tools.md create mode 100644 doc/next/4-runtime.md create mode 100644 doc/next/5-toolchain.md create mode 100644 doc/next/6-stdlib/0-heading.md create mode 100644 doc/next/6-stdlib/99-minor/0-heading.md create mode 100644 doc/next/6-stdlib/99-minor/README create mode 100644 doc/next/7-ports.md diff --git a/doc/README.md b/doc/README.md index b0d99456da6245..b7aefc8d2c1e7b 100644 --- a/doc/README.md +++ b/doc/README.md @@ -70,6 +70,6 @@ To begin the next release development cycle, populate the contents of `next` with those of `initial`. From the repo root: > cd doc - > cp -r initial/* next + > cp -R initial/ next Then edit `next/1-intro.md` to refer to the next version. diff --git a/doc/next/1-intro.md b/doc/next/1-intro.md new file mode 100644 index 00000000000000..3f6dc9f5d898b9 --- /dev/null +++ b/doc/next/1-intro.md @@ -0,0 +1,14 @@ + + + + +## DRAFT RELEASE NOTES — Introduction to Go 1.24 {#introduction} + +**Go 1.24 is not yet released. These are work-in-progress release notes. +Go 1.24 is expected to be released in February 2025.** diff --git a/doc/next/2-language.md b/doc/next/2-language.md new file mode 100644 index 00000000000000..61030bd67606b0 --- /dev/null +++ b/doc/next/2-language.md @@ -0,0 +1,3 @@ +## Changes to the language {#language} + + diff --git a/doc/next/3-tools.md b/doc/next/3-tools.md new file mode 100644 index 00000000000000..5638f240a5b127 --- /dev/null +++ b/doc/next/3-tools.md @@ -0,0 +1,6 @@ +## Tools {#tools} + +### Go command {#go-command} + +### Cgo {#cgo} + diff --git a/doc/next/4-runtime.md b/doc/next/4-runtime.md new file mode 100644 index 00000000000000..1f8e445e0b10de --- /dev/null +++ b/doc/next/4-runtime.md @@ -0,0 +1 @@ +## Runtime {#runtime} diff --git a/doc/next/5-toolchain.md b/doc/next/5-toolchain.md new file mode 100644 index 00000000000000..0f4a816479754c --- /dev/null +++ b/doc/next/5-toolchain.md @@ -0,0 +1,7 @@ +## Compiler {#compiler} + +## Assembler {#assembler} + +## Linker {#linker} + + diff --git a/doc/next/6-stdlib/0-heading.md b/doc/next/6-stdlib/0-heading.md new file mode 100644 index 00000000000000..a992170d433326 --- /dev/null +++ b/doc/next/6-stdlib/0-heading.md @@ -0,0 +1,2 @@ +## Standard library {#library} + diff --git a/doc/next/6-stdlib/99-minor/0-heading.md b/doc/next/6-stdlib/99-minor/0-heading.md new file mode 100644 index 00000000000000..a98105e8ccba7f --- /dev/null +++ b/doc/next/6-stdlib/99-minor/0-heading.md @@ -0,0 +1,3 @@ +### Minor changes to the library {#minor_library_changes} + + diff --git a/doc/next/6-stdlib/99-minor/README b/doc/next/6-stdlib/99-minor/README new file mode 100644 index 00000000000000..fac778de050642 --- /dev/null +++ b/doc/next/6-stdlib/99-minor/README @@ -0,0 +1 @@ +API changes and other small changes to the standard library go here. diff --git a/doc/next/7-ports.md b/doc/next/7-ports.md new file mode 100644 index 00000000000000..8bea3f8fbc33f9 --- /dev/null +++ b/doc/next/7-ports.md @@ -0,0 +1,2 @@ +## Ports {#ports} + From a6f3add91a51365ec0ea73f88a5019d8e69cca2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Sun, 21 Jul 2024 15:04:38 +0200 Subject: [PATCH 007/866] net: add godoc links on UDP related symbols Change-Id: Ibc861e7b2aebc8fd1e0ba15d8d35ae0ecfe7747e Reviewed-on: https://go-review.googlesource.com/c/go/+/599996 Reviewed-by: Damien Neil Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- src/net/udpsock.go | 48 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/net/udpsock.go b/src/net/udpsock.go index 4f8acb7fc890de..56aabffa3180e4 100644 --- a/src/net/udpsock.go +++ b/src/net/udpsock.go @@ -27,7 +27,7 @@ type UDPAddr struct { Zone string // IPv6 scoped addressing zone } -// AddrPort returns the UDPAddr a as a netip.AddrPort. +// AddrPort returns the [UDPAddr] a as a [netip.AddrPort]. // // If a.Port does not fit in a uint16, it's silently truncated. // @@ -82,7 +82,7 @@ func (a *UDPAddr) opAddr() Addr { // recommended, because it will return at most one of the host name's // IP addresses. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. func ResolveUDPAddr(network, address string) (*UDPAddr, error) { switch network { @@ -99,7 +99,7 @@ func ResolveUDPAddr(network, address string) (*UDPAddr, error) { return addrs.forResolve(network, address).(*UDPAddr), nil } -// UDPAddrFromAddrPort returns addr as a UDPAddr. If addr.IsValid() is false, +// UDPAddrFromAddrPort returns addr as a [UDPAddr]. If addr.IsValid() is false, // then the returned UDPAddr will contain a nil IP field, indicating an // address family-agnostic unspecified address. func UDPAddrFromAddrPort(addr netip.AddrPort) *UDPAddr { @@ -117,14 +117,14 @@ type addrPortUDPAddr struct { func (addrPortUDPAddr) Network() string { return "udp" } -// UDPConn is the implementation of the Conn and PacketConn interfaces +// UDPConn is the implementation of the [Conn] and [PacketConn] interfaces // for UDP network connections. type UDPConn struct { conn } // SyscallConn returns a raw network connection. -// This implements the syscall.Conn interface. +// This implements the [syscall.Conn] interface. func (c *UDPConn) SyscallConn() (syscall.RawConn, error) { if !c.ok() { return nil, syscall.EINVAL @@ -132,7 +132,7 @@ func (c *UDPConn) SyscallConn() (syscall.RawConn, error) { return newRawConn(c.fd), nil } -// ReadFromUDP acts like ReadFrom but returns a UDPAddr. +// ReadFromUDP acts like [UDPConn.ReadFrom] but returns a UDPAddr. func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error) { // This function is designed to allow the caller to control the lifetime // of the returned *UDPAddr and thereby prevent an allocation. @@ -153,7 +153,7 @@ func (c *UDPConn) readFromUDP(b []byte, addr *UDPAddr) (int, *UDPAddr, error) { return n, addr, err } -// ReadFrom implements the PacketConn ReadFrom method. +// ReadFrom implements the [PacketConn] ReadFrom method. func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error) { n, addr, err := c.readFromUDP(b, &UDPAddr{}) if addr == nil { @@ -163,11 +163,11 @@ func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error) { return n, addr, err } -// ReadFromUDPAddrPort acts like ReadFrom but returns a netip.AddrPort. +// ReadFromUDPAddrPort acts like ReadFrom but returns a [netip.AddrPort]. // // If c is bound to an unspecified address, the returned // netip.AddrPort's address might be an IPv4-mapped IPv6 address. -// Use netip.Addr.Unmap to get the address without the IPv6 prefix. +// Use [netip.Addr.Unmap] to get the address without the IPv6 prefix. func (c *UDPConn) ReadFromUDPAddrPort(b []byte) (n int, addr netip.AddrPort, err error) { if !c.ok() { return 0, netip.AddrPort{}, syscall.EINVAL @@ -184,7 +184,7 @@ func (c *UDPConn) ReadFromUDPAddrPort(b []byte) (n int, addr netip.AddrPort, err // bytes copied into b, the number of bytes copied into oob, the flags // that were set on the message and the source address of the message. // -// The packages golang.org/x/net/ipv4 and golang.org/x/net/ipv6 can be +// The packages [golang.org/x/net/ipv4] and [golang.org/x/net/ipv6] can be // used to manipulate IP-level socket options in oob. func (c *UDPConn) ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *UDPAddr, err error) { var ap netip.AddrPort @@ -195,7 +195,7 @@ func (c *UDPConn) ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *UDPAddr, return } -// ReadMsgUDPAddrPort is like ReadMsgUDP but returns an netip.AddrPort instead of a UDPAddr. +// ReadMsgUDPAddrPort is like [UDPConn.ReadMsgUDP] but returns an [netip.AddrPort] instead of a [UDPAddr]. func (c *UDPConn) ReadMsgUDPAddrPort(b, oob []byte) (n, oobn, flags int, addr netip.AddrPort, err error) { if !c.ok() { return 0, 0, 0, netip.AddrPort{}, syscall.EINVAL @@ -207,7 +207,7 @@ func (c *UDPConn) ReadMsgUDPAddrPort(b, oob []byte) (n, oobn, flags int, addr ne return } -// WriteToUDP acts like WriteTo but takes a UDPAddr. +// WriteToUDP acts like [UDPConn.WriteTo] but takes a [UDPAddr]. func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -219,7 +219,7 @@ func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error) { return n, err } -// WriteToUDPAddrPort acts like WriteTo but takes a netip.AddrPort. +// WriteToUDPAddrPort acts like [UDPConn.WriteTo] but takes a [netip.AddrPort]. func (c *UDPConn) WriteToUDPAddrPort(b []byte, addr netip.AddrPort) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -231,7 +231,7 @@ func (c *UDPConn) WriteToUDPAddrPort(b []byte, addr netip.AddrPort) (int, error) return n, err } -// WriteTo implements the PacketConn WriteTo method. +// WriteTo implements the [PacketConn] WriteTo method. func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -253,7 +253,7 @@ func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error) { // data is copied from oob. It returns the number of payload and // out-of-band bytes written. // -// The packages golang.org/x/net/ipv4 and golang.org/x/net/ipv6 can be +// The packages [golang.org/x/net/ipv4] and [golang.org/x/net/ipv6] can be // used to manipulate IP-level socket options in oob. func (c *UDPConn) WriteMsgUDP(b, oob []byte, addr *UDPAddr) (n, oobn int, err error) { if !c.ok() { @@ -266,7 +266,7 @@ func (c *UDPConn) WriteMsgUDP(b, oob []byte, addr *UDPAddr) (n, oobn int, err er return } -// WriteMsgUDPAddrPort is like WriteMsgUDP but takes a netip.AddrPort instead of a UDPAddr. +// WriteMsgUDPAddrPort is like [UDPConn.WriteMsgUDP] but takes a [netip.AddrPort] instead of a [UDPAddr]. func (c *UDPConn) WriteMsgUDPAddrPort(b, oob []byte, addr netip.AddrPort) (n, oobn int, err error) { if !c.ok() { return 0, 0, syscall.EINVAL @@ -280,9 +280,9 @@ func (c *UDPConn) WriteMsgUDPAddrPort(b, oob []byte, addr netip.AddrPort) (n, oo func newUDPConn(fd *netFD) *UDPConn { return &UDPConn{conn{fd}} } -// DialUDP acts like Dial for UDP networks. +// DialUDP acts like [Dial] for UDP networks. // -// The network must be a UDP network name; see func Dial for details. +// The network must be a UDP network name; see func [Dial] for details. // // If laddr is nil, a local address is automatically chosen. // If the IP field of raddr is nil or an unspecified IP address, the @@ -304,9 +304,9 @@ func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error) { return c, nil } -// ListenUDP acts like ListenPacket for UDP networks. +// ListenUDP acts like [ListenPacket] for UDP networks. // -// The network must be a UDP network name; see func Dial for details. +// The network must be a UDP network name; see func [Dial] for details. // // If the IP field of laddr is nil or an unspecified IP address, // ListenUDP listens on all available IP addresses of the local system @@ -330,10 +330,10 @@ func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error) { return c, nil } -// ListenMulticastUDP acts like ListenPacket for UDP networks but +// ListenMulticastUDP acts like [ListenPacket] for UDP networks but // takes a group address on a specific network interface. // -// The network must be a UDP network name; see func Dial for details. +// The network must be a UDP network name; see func [Dial] for details. // // ListenMulticastUDP listens on all available IP addresses of the // local system including the group, multicast IP address. @@ -345,8 +345,8 @@ func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error) { // chosen. // // ListenMulticastUDP is just for convenience of simple, small -// applications. There are golang.org/x/net/ipv4 and -// golang.org/x/net/ipv6 packages for general purpose uses. +// applications. There are [golang.org/x/net/ipv4] and +// [golang.org/x/net/ipv6] packages for general purpose uses. // // Note that ListenMulticastUDP will set the IP_MULTICAST_LOOP socket option // to 0 under IPPROTO_IP, to disable loopback of multicast packets. From 53270be21c5e14a2d15ada2622f20503d97cb89e Mon Sep 17 00:00:00 2001 From: Yossef Hisham <93604359+yossev@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:11:45 +0000 Subject: [PATCH 008/866] strconv: document that Unquote("''") returns an empty string Fixes #64280 Change-Id: I1ad84d85b666a2ef52dc6ecdecd508b4e7fe24a6 GitHub-Last-Rev: 6242027261f02c578a09f70fcb39a8cac259855c GitHub-Pull-Request: golang/go#68524 Reviewed-on: https://go-review.googlesource.com/c/go/+/599575 Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer --- src/strconv/quote.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strconv/quote.go b/src/strconv/quote.go index d626cd0837aadd..1f4929a952c6bf 100644 --- a/src/strconv/quote.go +++ b/src/strconv/quote.go @@ -378,7 +378,7 @@ func QuotedPrefix(s string) (string, error) { // or backquoted Go string literal, returning the string value // that s quotes. (If s is single-quoted, it would be a Go // character literal; Unquote returns the corresponding -// one-character string.) +// one-character string. For '' Unquote returns the empty string.) func Unquote(s string) (string, error) { out, rem, err := unquote(s, true) if len(rem) > 0 { From 00cb41e14da0e6ead5b9916e77753b58cbf1be69 Mon Sep 17 00:00:00 2001 From: Darren Date: Fri, 19 Jul 2024 09:19:18 +0000 Subject: [PATCH 009/866] flag: handle nil os.Args when setting CommandLine at package level Fixes #68340 Change-Id: I65037be6961e9ec720537713cb3f23ab9f5f8459 GitHub-Last-Rev: fadcb299c383abdde000daec58b12019a75012c6 GitHub-Pull-Request: golang/go#68341 Reviewed-on: https://go-review.googlesource.com/c/go/+/597075 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Reviewed-by: Rob Pike --- src/flag/flag.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/flag/flag.go b/src/flag/flag.go index 4fa502839ada55..bda1e1a9b8d8fe 100644 --- a/src/flag/flag.go +++ b/src/flag/flag.go @@ -1196,9 +1196,16 @@ func Parsed() bool { // CommandLine is the default set of command-line flags, parsed from [os.Args]. // The top-level functions such as [BoolVar], [Arg], and so on are wrappers for the // methods of CommandLine. -var CommandLine = NewFlagSet(os.Args[0], ExitOnError) +var CommandLine *FlagSet func init() { + // It's possible for execl to hand us an empty os.Args. + if len(os.Args) == 0 { + CommandLine = NewFlagSet("", ExitOnError) + } else { + CommandLine = NewFlagSet(os.Args[0], ExitOnError) + } + // Override generic FlagSet default Usage with call to global Usage. // Note: This is not CommandLine.Usage = Usage, // because we want any eventual call to use any updated value of Usage, From e061fb89e8c44d564f284d127c7790ac98ce8b4e Mon Sep 17 00:00:00 2001 From: Will Faught Date: Fri, 19 Jul 2024 23:29:01 +0000 Subject: [PATCH 010/866] text/template: fix doc spacing Change-Id: I4550ce3135b3cd675010a3701618e9350f282453 GitHub-Last-Rev: d2e52f14968621e9913dd66ef6b26348012c83b3 GitHub-Pull-Request: golang/go#68519 Reviewed-on: https://go-review.googlesource.com/c/go/+/599535 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Reviewed-by: Rob Pike --- src/text/template/doc.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/text/template/doc.go b/src/text/template/doc.go index b3ffaabb153c9d..12f6fe0d1c9cf2 100644 --- a/src/text/template/doc.go +++ b/src/text/template/doc.go @@ -162,37 +162,55 @@ An argument is a simple value, denoted by one of the following. the host machine's ints are 32 or 64 bits. - The keyword nil, representing an untyped Go nil. - The character '.' (period): + . + The result is the value of dot. - A variable name, which is a (possibly empty) alphanumeric string preceded by a dollar sign, such as + $piOver2 + or + $ + The result is the value of the variable. Variables are described below. - The name of a field of the data, which must be a struct, preceded by a period, such as + .Field + The result is the value of the field. Field invocations may be chained: + .Field1.Field2 + Fields can also be evaluated on variables, including chaining: + $x.Field1.Field2 - The name of a key of the data, which must be a map, preceded by a period, such as + .Key + The result is the map element value indexed by the key. Key invocations may be chained and combined with fields to any depth: + .Field1.Key1.Field2.Key2 + Although the key must be an alphanumeric identifier, unlike with field names they do not need to start with an upper case letter. Keys can also be evaluated on variables, including chaining: + $x.key1.key2 - The name of a niladic method of the data, preceded by a period, such as + .Method + The result is the value of invoking the method with dot as the receiver, dot.Method(). Such a method must have one return value (of any type) or two return values, the second of which is an error. @@ -200,16 +218,22 @@ An argument is a simple value, denoted by one of the following. and an error is returned to the caller as the value of Execute. Method invocations may be chained and combined with fields and keys to any depth: + .Field1.Key1.Method1.Field2.Key2.Method2 + Methods can also be evaluated on variables, including chaining: + $x.Method1.Field - The name of a niladic function, such as + fun + The result is the value of invoking the function, fun(). The return types and values behave as in methods. Functions and function names are described below. - A parenthesized instance of one the above, for grouping. The result may be accessed by a field or map key invocation. + print (.F1 arg1) (.F2 arg2) (.StructValuedMethod "arg").Field From afe0e600548c97338474a83c9665be45cccfb045 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 10 Jun 2024 09:52:33 -0700 Subject: [PATCH 011/866] cmd/compile: give function position on function-too-big error Update #67916 Change-Id: Iec3603c136b30ff6f760783c175eeb7e6ce139ec Reviewed-on: https://go-review.googlesource.com/c/go/+/591675 Reviewed-by: Cuong Manh Le Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Auto-Submit: Keith Randall --- src/cmd/compile/internal/bitvec/bv.go | 5 +++-- src/cmd/compile/internal/liveness/arg.go | 2 +- src/cmd/compile/internal/liveness/plive.go | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/bitvec/bv.go b/src/cmd/compile/internal/bitvec/bv.go index ad7ed0a1965e9c..aab10433c8f181 100644 --- a/src/cmd/compile/internal/bitvec/bv.go +++ b/src/cmd/compile/internal/bitvec/bv.go @@ -8,6 +8,7 @@ import ( "math/bits" "cmd/compile/internal/base" + "cmd/internal/src" ) const ( @@ -33,11 +34,11 @@ type Bulk struct { nword int32 } -func NewBulk(nbit int32, count int32) Bulk { +func NewBulk(nbit int32, count int32, pos src.XPos) Bulk { nword := (nbit + wordBits - 1) / wordBits size := int64(nword) * int64(count) if int64(int32(size*4)) != size*4 { - base.Fatalf("NewBulk too big: nbit=%d count=%d nword=%d size=%d", nbit, count, nword, size) + base.FatalfAt(pos, "NewBulk too big: nbit=%d count=%d nword=%d size=%d", nbit, count, nword, size) } return Bulk{ words: make([]uint32, size), diff --git a/src/cmd/compile/internal/liveness/arg.go b/src/cmd/compile/internal/liveness/arg.go index e1269a10b73900..77960f5e15a1f9 100644 --- a/src/cmd/compile/internal/liveness/arg.go +++ b/src/cmd/compile/internal/liveness/arg.go @@ -132,7 +132,7 @@ func ArgLiveness(fn *ir.Func, f *ssa.Func, pp *objw.Progs) (blockIdx, valueIdx m } nargs := int32(len(lv.args)) - bulk := bitvec.NewBulk(nargs, int32(len(f.Blocks)*2)) + bulk := bitvec.NewBulk(nargs, int32(len(f.Blocks)*2), fn.Pos()) for _, b := range f.Blocks { be := &lv.be[b.ID] be.livein = bulk.Next() diff --git a/src/cmd/compile/internal/liveness/plive.go b/src/cmd/compile/internal/liveness/plive.go index 708f0f20235daa..c5003ddca6b830 100644 --- a/src/cmd/compile/internal/liveness/plive.go +++ b/src/cmd/compile/internal/liveness/plive.go @@ -431,7 +431,7 @@ func newliveness(fn *ir.Func, f *ssa.Func, vars []*ir.Name, idx map[*ir.Name]int nblocks := int32(len(f.Blocks)) nvars := int32(len(vars)) - bulk := bitvec.NewBulk(nvars, nblocks*7) + bulk := bitvec.NewBulk(nvars, nblocks*7, fn.Pos()) for _, b := range f.Blocks { be := lv.blockEffects(b) From 20e18c95504b047c5ba82d252318de625fabfa70 Mon Sep 17 00:00:00 2001 From: Diego Augusto Molina Date: Tue, 25 Jun 2024 22:15:16 -0300 Subject: [PATCH 012/866] unicode/utf8: AppendRune and EncodeRune performance improvement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Prefer the evaluation of the valid higher byte-width runes branches over the one for invalid ones - Avoid the evaluation of the bytes of the RuneError constant, and instead hard code its byte values - EncodeRune only: inline for fast handling of ASCII goos: linux goarch: amd64 pkg: unicode/utf8 cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz │ baseline.test-append.txt │ append-rune-invalid-case-last.test.txt │ │ sec/op │ sec/op vs base │ AppendASCIIRune-8 0.2135n ± 0% 0.2135n ± 0% ~ (p=0.578 n=20) AppendSpanishRune-8 1.645n ± 1% 1.509n ± 2% -8.30% (p=0.000 n=20) AppendJapaneseRune-8 2.196n ± 1% 2.004n ± 1% -8.74% (p=0.000 n=20) AppendMaxRune-8 2.670n ± 1% 2.349n ± 3% -12.01% (p=0.000 n=20) AppendInvalidRuneMaxPlusOne-8 2.214n ± 2% 1.798n ± 3% -18.77% (p=0.000 n=20) AppendInvalidRuneSurrogate-8 2.258n ± 1% 1.793n ± 2% -20.59% (p=0.000 n=20) AppendInvalidRuneNegative-8 2.171n ± 2% 1.767n ± 2% -18.61% (p=0.000 n=20) geomean 1.559n 1.361n -12.69% goos: linux goarch: amd64 pkg: unicode/utf8 cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz │ baseline.test-encode.txt │ encode-rune-invalid-last.txt │ │ sec/op │ sec/op vs base │ EncodeASCIIRune-8 1.0950n ± 1% 0.2140n ± 0% -80.46% (p=0.000 n=20) EncodeSpanishRune-8 1.499n ± 0% 1.414n ± 2% -5.64% (p=0.000 n=20) EncodeJapaneseRune-8 1.960n ± 2% 1.716n ± 4% -12.43% (p=0.000 n=20) EncodeMaxRune-8 2.145n ± 2% 2.227n ± 1% +3.78% (p=0.000 n=20) EncodeInvalidRuneMaxPlusOne-8 1.955n ± 2% 1.802n ± 2% -7.80% (p=0.000 n=20) EncodeInvalidRuneSurrogate-8 1.946n ± 3% 1.777n ± 2% -8.68% (p=0.000 n=20) EncodeInvalidRuneNegative-8 1.968n ± 2% 1.766n ± 2% -10.29% (p=0.000 n=20) geomean 1.757n 1.308n -25.57% Fixes #68131 Change-Id: Ibcafa75d63cca07a2e78cd06f6f1e382cb8c716e Reviewed-on: https://go-review.googlesource.com/c/go/+/594115 LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Reviewed-by: Ian Lance Taylor --- src/unicode/utf8/utf8.go | 40 ++++++++++++------ src/unicode/utf8/utf8_test.go | 78 +++++++++++++++++++++++++++++++++-- 2 files changed, 101 insertions(+), 17 deletions(-) diff --git a/src/unicode/utf8/utf8.go b/src/unicode/utf8/utf8.go index c7389d4d6f584e..1c1391d55b53b7 100644 --- a/src/unicode/utf8/utf8.go +++ b/src/unicode/utf8/utf8.go @@ -61,6 +61,12 @@ const ( s7 = 0x44 // accept 4, size 4 ) +const ( + runeErrorByte0 = t3 | (RuneError >> 12) + runeErrorByte1 = tx | (RuneError>>6)&maskx + runeErrorByte2 = tx | RuneError&maskx +) + // first is information about the first byte in a UTF-8 sequence. var first = [256]uint8{ // 1 2 3 4 5 6 7 8 9 A B C D E F @@ -340,32 +346,41 @@ func RuneLen(r rune) int { // If the rune is out of range, it writes the encoding of [RuneError]. // It returns the number of bytes written. func EncodeRune(p []byte, r rune) int { - // Negative values are erroneous. Making it unsigned addresses the problem. - switch i := uint32(r); { - case i <= rune1Max: + // This function is inlineable for fast handling of ASCII. + if uint32(r) <= rune1Max { p[0] = byte(r) return 1 + } + return encodeRuneNonASCII(p, r) +} + +func encodeRuneNonASCII(p []byte, r rune) int { + // Negative values are erroneous. Making it unsigned addresses the problem. + switch i := uint32(r); { case i <= rune2Max: _ = p[1] // eliminate bounds checks p[0] = t2 | byte(r>>6) p[1] = tx | byte(r)&maskx return 2 - case i > MaxRune, surrogateMin <= i && i <= surrogateMax: - r = RuneError - fallthrough - case i <= rune3Max: + case i < surrogateMin, surrogateMax < i && i <= rune3Max: _ = p[2] // eliminate bounds checks p[0] = t3 | byte(r>>12) p[1] = tx | byte(r>>6)&maskx p[2] = tx | byte(r)&maskx return 3 - default: + case i > rune3Max && i <= MaxRune: _ = p[3] // eliminate bounds checks p[0] = t4 | byte(r>>18) p[1] = tx | byte(r>>12)&maskx p[2] = tx | byte(r>>6)&maskx p[3] = tx | byte(r)&maskx return 4 + default: + _ = p[2] // eliminate bounds checks + p[0] = runeErrorByte0 + p[1] = runeErrorByte1 + p[2] = runeErrorByte2 + return 3 } } @@ -385,13 +400,12 @@ func appendRuneNonASCII(p []byte, r rune) []byte { switch i := uint32(r); { case i <= rune2Max: return append(p, t2|byte(r>>6), tx|byte(r)&maskx) - case i > MaxRune, surrogateMin <= i && i <= surrogateMax: - r = RuneError - fallthrough - case i <= rune3Max: + case i < surrogateMin, surrogateMax < i && i <= rune3Max: return append(p, t3|byte(r>>12), tx|byte(r>>6)&maskx, tx|byte(r)&maskx) - default: + case i > rune3Max && i <= MaxRune: return append(p, t4|byte(r>>18), tx|byte(r>>12)&maskx, tx|byte(r>>6)&maskx, tx|byte(r)&maskx) + default: + return append(p, runeErrorByte0, runeErrorByte1, runeErrorByte2) } } diff --git a/src/unicode/utf8/utf8_test.go b/src/unicode/utf8/utf8_test.go index 19a04dc92e7fd8..fa23419b3649b7 100644 --- a/src/unicode/utf8/utf8_test.go +++ b/src/unicode/utf8/utf8_test.go @@ -641,28 +641,98 @@ func init() { func BenchmarkEncodeASCIIRune(b *testing.B) { buf := make([]byte, UTFMax) for i := 0; i < b.N; i++ { - EncodeRune(buf, 'a') + EncodeRune(buf, 'a') // 1 byte + } +} + +func BenchmarkEncodeSpanishRune(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + EncodeRune(buf, 'Ñ') // 2 bytes } } func BenchmarkEncodeJapaneseRune(b *testing.B) { buf := make([]byte, UTFMax) for i := 0; i < b.N; i++ { - EncodeRune(buf, '本') + EncodeRune(buf, '本') // 3 bytes + } +} + +func BenchmarkEncodeMaxRune(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + EncodeRune(buf, MaxRune) // 4 bytes + } +} + +func BenchmarkEncodeInvalidRuneMaxPlusOne(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + EncodeRune(buf, MaxRune+1) // 3 bytes: RuneError + } +} + +func BenchmarkEncodeInvalidRuneSurrogate(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + EncodeRune(buf, 0xD800) // 3 bytes: RuneError + } +} + +func BenchmarkEncodeInvalidRuneNegative(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + EncodeRune(buf, -1) // 3 bytes: RuneError } } func BenchmarkAppendASCIIRune(b *testing.B) { buf := make([]byte, UTFMax) for i := 0; i < b.N; i++ { - AppendRune(buf[:0], 'a') + AppendRune(buf[:0], 'a') // 1 byte + } +} + +func BenchmarkAppendSpanishRune(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + AppendRune(buf[:0], 'Ñ') // 2 bytes } } func BenchmarkAppendJapaneseRune(b *testing.B) { buf := make([]byte, UTFMax) for i := 0; i < b.N; i++ { - AppendRune(buf[:0], '本') + AppendRune(buf[:0], '本') // 3 bytes + } +} + +func BenchmarkAppendMaxRune(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + AppendRune(buf[:0], MaxRune) // 4 bytes + } +} + +func BenchmarkAppendInvalidRuneMaxPlusOne(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + AppendRune(buf[:0], MaxRune+1) // 3 bytes: RuneError + } +} + +func BenchmarkAppendInvalidRuneSurrogate(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + AppendRune(buf[:0], 0xD800) // 3 bytes: RuneError + } +} + +func BenchmarkAppendInvalidRuneNegative(b *testing.B) { + buf := make([]byte, UTFMax) + for i := 0; i < b.N; i++ { + AppendRune(buf[:0], -1) // 3 bytes: RuneError } } From 601ea46a5308876e4460a1662718a9cd2c6ac2e3 Mon Sep 17 00:00:00 2001 From: TangYang Date: Tue, 2 Jul 2024 04:02:12 +0000 Subject: [PATCH 013/866] runtime: add ERMS-based memmove support for modern CPU platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The current memmove implementation uses REP MOVSB to copy data larger than 2KB when the useAVXmemmove global variable is false and the CPU supports the ERMS feature. This feature is currently only enabled on CPUs in the Sandy Bridge (Client) , Sandy Bridge (Server), Ivy Bridge (Client), and Ivy Bridge (Server) microarchitectures. For modern Intel CPU microarchitectures that support the ERMS feature, such as Ice Lake (Server), Sapphire Rapids , REP MOVSB achieves better performance than the AVX-based copy currently implemented in memmove. Benchstat result: goos: linux goarch: amd64 pkg: runtime cpu: Intel(R) Xeon(R) Gold 6348 CPU @ 2.60GHz │ ./old.txt │ ./new.txt │ │ sec/op │ sec/op vs base │ Memmove/2048-2 25.24n ± 0% 24.27n ± 0% -3.84% (p=0.000 n=10) Memmove/4096-2 44.87n ± 0% 33.16n ± 1% -26.11% (p=0.000 n=10) geomean 33.65n 28.37n -15.71% │ ./old.txt │ ./new.txt │ │ B/s │ B/s vs base │ Memmove/2048-2 75.56Gi ± 0% 78.59Gi ± 0% +4.02% (p=0.000 n=10) Memmove/4096-2 85.01Gi ± 0% 115.05Gi ± 1% +35.34% (p=0.000 n=10) geomean 80.14Gi 95.09Gi +18.65% Fixes #66958 Change-Id: I1fafd1b51a16752f83ac15047cf3b29422a79d5d GitHub-Last-Rev: 89cf5af32b1b41e1499282058656a8a5c7aed359 GitHub-Pull-Request: golang/go#66959 Reviewed-on: https://go-review.googlesource.com/c/go/+/580735 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Keith Randall Auto-Submit: Keith Randall Reviewed-by: Cherry Mui --- src/internal/cpu/cpu.go | 1 + src/internal/cpu/cpu_x86.go | 8 +++++-- src/runtime/cpuflags_amd64.go | 34 ++++++++++++++++++++--------- src/runtime/memmove_amd64.s | 41 ++++++++++++++++++++++++----------- 4 files changed, 59 insertions(+), 25 deletions(-) diff --git a/src/internal/cpu/cpu.go b/src/internal/cpu/cpu.go index 9be280c6baf0fb..4ef43e3efc1945 100644 --- a/src/internal/cpu/cpu.go +++ b/src/internal/cpu/cpu.go @@ -37,6 +37,7 @@ var X86 struct { HasBMI1 bool HasBMI2 bool HasERMS bool + HasFSRM bool HasFMA bool HasOSXSAVE bool HasPCLMULQDQ bool diff --git a/src/internal/cpu/cpu_x86.go b/src/internal/cpu/cpu_x86.go index 2b629d4da021db..ee812076e96c49 100644 --- a/src/internal/cpu/cpu_x86.go +++ b/src/internal/cpu/cpu_x86.go @@ -40,7 +40,8 @@ const ( cpuid_SHA = 1 << 29 cpuid_AVX512BW = 1 << 30 cpuid_AVX512VL = 1 << 31 - + // edx bits + cpuid_FSRM = 1 << 4 // edx bits for CPUID 0x80000001 cpuid_RDTSCP = 1 << 27 ) @@ -52,6 +53,7 @@ func doinit() { {Name: "adx", Feature: &X86.HasADX}, {Name: "aes", Feature: &X86.HasAES}, {Name: "erms", Feature: &X86.HasERMS}, + {Name: "fsrm", Feature: &X86.HasFSRM}, {Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ}, {Name: "rdtscp", Feature: &X86.HasRDTSCP}, {Name: "sha", Feature: &X86.HasSHA}, @@ -137,7 +139,7 @@ func doinit() { return } - _, ebx7, _, _ := cpuid(7, 0) + _, ebx7, _, edx7 := cpuid(7, 0) X86.HasBMI1 = isSet(ebx7, cpuid_BMI1) X86.HasAVX2 = isSet(ebx7, cpuid_AVX2) && osSupportsAVX X86.HasBMI2 = isSet(ebx7, cpuid_BMI2) @@ -151,6 +153,8 @@ func doinit() { X86.HasAVX512VL = isSet(ebx7, cpuid_AVX512VL) } + X86.HasFSRM = isSet(edx7, cpuid_FSRM) + var maxExtendedInformation uint32 maxExtendedInformation, _, _, _ = cpuid(0x80000000, 0) diff --git a/src/runtime/cpuflags_amd64.go b/src/runtime/cpuflags_amd64.go index 8cca4bca8f0b5d..b6d8c6c1e9c48c 100644 --- a/src/runtime/cpuflags_amd64.go +++ b/src/runtime/cpuflags_amd64.go @@ -8,17 +8,31 @@ import ( "internal/cpu" ) -var useAVXmemmove bool +var memmoveBits uint8 -func init() { - // Let's remove stepping and reserved fields - processor := processorVersionInfo & 0x0FFF3FF0 +const ( + // avxSupported indicates that the CPU supports AVX instructions. + avxSupported = 1 << 0 - isIntelBridgeFamily := isIntel && - processor == 0x206A0 || - processor == 0x206D0 || - processor == 0x306A0 || - processor == 0x306E0 + // repmovsPreferred indicates that REP MOVSx instruction is more + // efficient on the CPU. + repmovsPreferred = 1 << 1 +) - useAVXmemmove = cpu.X86.HasAVX && !isIntelBridgeFamily +func init() { + // Here we assume that on modern CPUs with both FSRM and ERMS features, + // copying data blocks of 2KB or larger using the REP MOVSB instruction + // will be more efficient to avoid having to keep up with CPU generations. + // Therefore, we may retain a BlockList mechanism to ensure that microarchitectures + // that do not fit this case may appear in the future. + // We enable it on Intel CPUs first, and we may support more platforms + // in the future. + isERMSNiceCPU := isIntel + useREPMOV := isERMSNiceCPU && cpu.X86.HasERMS && cpu.X86.HasFSRM + if cpu.X86.HasAVX { + memmoveBits |= avxSupported + } + if useREPMOV { + memmoveBits |= repmovsPreferred + } } diff --git a/src/runtime/memmove_amd64.s b/src/runtime/memmove_amd64.s index 018bb0b19d5701..8883b55ede985f 100644 --- a/src/runtime/memmove_amd64.s +++ b/src/runtime/memmove_amd64.s @@ -72,9 +72,10 @@ tail: CMPQ BX, $256 JBE move_129through256 - TESTB $1, runtime·useAVXmemmove(SB) - JNZ avxUnaligned - + MOVB runtime·memmoveBits(SB), AX + // We have AVX but we don't want to use REP MOVSx. + CMPB AX, $const_avxSupported + JEQ avxUnaligned /* * check and set for backwards */ @@ -82,16 +83,23 @@ tail: JLS back /* - * forward copy loop - */ +* forward copy loop +*/ forward: CMPQ BX, $2048 - JLS move_256through2048 - - // If REP MOVSB isn't fast, don't use it - CMPB internal∕cpu·X86+const_offsetX86HasERMS(SB), $1 // enhanced REP MOVSB/STOSB - JNE fwdBy8 + JL check_avx + // REP MOVSx is slow if destination address is unaligned. + TESTQ $15,DI + JNZ check_avx + TESTB $const_repmovsPreferred, AX + JNZ fwdBy8 + // For backward copy, REP MOVSx performs worse than avx. +check_avx: + TESTB $const_avxSupported, AX + JNZ avxUnaligned + CMPQ BX, $2048 + JLS move_256through2048 // Check alignment MOVL SI, AX ORL DI, AX @@ -104,12 +112,16 @@ forward: RET fwdBy8: + // Loading the last (possibly partially overlapping) word and writing + // it at the end. + MOVQ -8(SI)(BX*1), AX + LEAQ -8(DI)(BX*1), DX // Do 8 bytes at a time - MOVQ BX, CX + LEAQ -1(BX),CX SHRQ $3, CX - ANDQ $7, BX REP; MOVSQ - JMP tail + MOVQ AX, (DX) + RET back: /* @@ -119,6 +131,9 @@ back: ADDQ BX, CX CMPQ CX, DI JLS forward + + TESTB $const_avxSupported, AX + JNZ avxUnaligned /* * whole thing backwards has * adjusted addresses From 1c4acea03d0e5d6bd1d6be74c816313f8ab109c3 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Tue, 2 Jul 2024 15:26:32 -0700 Subject: [PATCH 014/866] internal/trace: make Reader output deterministic Multiple Ms can offer Events with identical timestamps. The Reader edits those so the timestamps are strictly increasing, but it needs a way to break the tie. Use something deterministic (such as the order of the batches), rather than map iteration order. Updates #68277 Change-Id: I4a1f70c1669ce1c9b52d09e2bc99acbc831ef9a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/596355 LUCI-TryBot-Result: Go LUCI Auto-Submit: Rhys Hiltner Reviewed-by: Carlos Amedee Reviewed-by: Than McIntosh Reviewed-by: Michael Pratt Reviewed-by: Michael Knyszek --- src/internal/trace/generation.go | 4 ++++ src/internal/trace/reader.go | 3 ++- src/internal/trace/trace_test.go | 39 +++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/internal/trace/generation.go b/src/internal/trace/generation.go index 098d1d4f23949d..98bbf4398569f9 100644 --- a/src/internal/trace/generation.go +++ b/src/internal/trace/generation.go @@ -25,6 +25,7 @@ import ( type generation struct { gen uint64 batches map[ThreadID][]batch + batchMs []ThreadID cpuSamples []cpuSample *evTable } @@ -169,6 +170,9 @@ func processBatch(g *generation, b batch) error { return err } default: + if _, ok := g.batches[b.m]; !ok { + g.batchMs = append(g.batchMs, b.m) + } g.batches[b.m] = append(g.batches[b.m], b) } return nil diff --git a/src/internal/trace/reader.go b/src/internal/trace/reader.go index c05d5b58b38d7c..81157292fb3f08 100644 --- a/src/internal/trace/reader.go +++ b/src/internal/trace/reader.go @@ -142,7 +142,8 @@ func (r *Reader) ReadEvent() (e Event, err error) { r.cpuSamples = r.gen.cpuSamples // Reset frontier. - for m, batches := range r.gen.batches { + for _, m := range r.gen.batchMs { + batches := r.gen.batches[m] bc := &batchCursor{m: m} ok, err := bc.nextEvent(batches, r.gen.freq) if err != nil { diff --git a/src/internal/trace/trace_test.go b/src/internal/trace/trace_test.go index 7dc5cbb89d7399..1929069cc5da97 100644 --- a/src/internal/trace/trace_test.go +++ b/src/internal/trace/trace_test.go @@ -507,7 +507,7 @@ func TestTraceStress(t *testing.T) { case "js", "wasip1": t.Skip("no os.Pipe on " + runtime.GOOS) } - testTraceProg(t, "stress.go", nil) + testTraceProg(t, "stress.go", checkReaderDeterminism) } func TestTraceStressStartStop(t *testing.T) { @@ -535,6 +535,43 @@ func TestTraceIterPull(t *testing.T) { testTraceProg(t, "iter-pull.go", nil) } +func checkReaderDeterminism(t *testing.T, tb, _ []byte, _ bool) { + events := func() []trace.Event { + var evs []trace.Event + + r, err := trace.NewReader(bytes.NewReader(tb)) + if err != nil { + t.Error(err) + } + for { + ev, err := r.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + evs = append(evs, ev) + } + + return evs + } + + evs1 := events() + evs2 := events() + + if l1, l2 := len(evs1), len(evs2); l1 != l2 { + t.Fatalf("re-reading trace gives different event count (%d != %d)", l1, l2) + } + for i, ev1 := range evs1 { + ev2 := evs2[i] + if s1, s2 := ev1.String(), ev2.String(); s1 != s2 { + t.Errorf("re-reading trace gives different event %d:\n%s\n%s\n", i, s1, s2) + break + } + } +} + func testTraceProg(t *testing.T, progName string, extra func(t *testing.T, trace, stderr []byte, stress bool)) { testenv.MustHaveGoRun(t) From d25a90676d5212f156de334e9f6f9ee009298c9c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sat, 6 Jul 2024 14:14:54 -0700 Subject: [PATCH 015/866] make.bash: drop GNU/kFreeBSD handling The GNU/kFreeBSD project has been canceled. https://wiki.debian.org/Debian_GNU/kFreeBSD For #3533 Change-Id: I30990fced48e1ba43e1e59806379eb97bac3ab6c Reviewed-on: https://go-review.googlesource.com/c/go/+/596937 Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor --- src/make.bash | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/make.bash b/src/make.bash index 814b7e87e1d313..10e263b3d09d8b 100755 --- a/src/make.bash +++ b/src/make.bash @@ -128,13 +128,6 @@ do fi done -# Test for debian/kFreeBSD. -# cmd/dist will detect kFreeBSD as freebsd/$GOARCH, but we need to -# disable cgo manually. -if [[ "$(uname -s)" == "GNU/kFreeBSD" ]]; then - export CGO_ENABLED=0 -fi - # Clean old generated file that will cause problems in the build. rm -f ./runtime/runtime_defs.go From 2e8b3425a2797353145b296d23ea2f23cdb07812 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sun, 27 Aug 2023 00:01:37 +0700 Subject: [PATCH 016/866] cmd/compile: retire "IsHiddenClosure" and "IsDeadcodeClosure" Since CL 522318, all closures are now hidden. Thus this CL removes all codes that worries about hidden vs non-hidden closures. Change-Id: I1ea124168c76cedbfc4053d2f150937a382aa330 Reviewed-on: https://go-review.googlesource.com/c/go/+/523275 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Auto-Submit: Cuong Manh Le Reviewed-by: Than McIntosh --- src/cmd/compile/internal/escape/escape.go | 2 +- src/cmd/compile/internal/escape/expr.go | 2 +- src/cmd/compile/internal/gc/compile.go | 7 +-- src/cmd/compile/internal/inline/inl.go | 51 ------------------- .../inline/interleaved/interleaved.go | 5 -- src/cmd/compile/internal/ir/func.go | 49 +++++++++--------- src/cmd/compile/internal/ir/scc.go | 12 ++--- src/cmd/compile/internal/noder/reader.go | 5 -- src/cmd/compile/internal/staticinit/sched.go | 6 --- test/closure3.dir/main.go | 4 +- test/escape4.go | 2 +- test/escape_closure.go | 2 +- 12 files changed, 38 insertions(+), 109 deletions(-) diff --git a/src/cmd/compile/internal/escape/escape.go b/src/cmd/compile/internal/escape/escape.go index 7df367caf7049a..5997d8328a9f45 100644 --- a/src/cmd/compile/internal/escape/escape.go +++ b/src/cmd/compile/internal/escape/escape.go @@ -139,7 +139,7 @@ func Batch(fns []*ir.Func, recursive bool) { b.initFunc(fn) } for _, fn := range fns { - if !fn.IsHiddenClosure() { + if !fn.IsClosure() { b.walkFunc(fn) } } diff --git a/src/cmd/compile/internal/escape/expr.go b/src/cmd/compile/internal/escape/expr.go index 6aa5ad74136f4f..3c47bdf9e16af3 100644 --- a/src/cmd/compile/internal/escape/expr.go +++ b/src/cmd/compile/internal/escape/expr.go @@ -230,7 +230,7 @@ func (e *escape) exprSkipInit(k hole, n ir.Node) { k = e.spill(k, n) e.closures = append(e.closures, closure{k, n}) - if fn := n.Func; fn.IsHiddenClosure() { + if fn := n.Func; fn.IsClosure() { for _, cv := range fn.ClosureVars { if loc := e.oldLoc(cv); !loc.captured { loc.captured = true diff --git a/src/cmd/compile/internal/gc/compile.go b/src/cmd/compile/internal/gc/compile.go index 496daacb42d6da..81a6023e475d72 100644 --- a/src/cmd/compile/internal/gc/compile.go +++ b/src/cmd/compile/internal/gc/compile.go @@ -39,12 +39,7 @@ func enqueueFunc(fn *ir.Func) { return } - // Don't try compiling dead hidden closure. - if fn.IsDeadcodeClosure() { - return - } - - if clo := fn.OClosure; clo != nil && !ir.IsTrivialClosure(clo) { + if fn.IsClosure() { return // we'll get this as part of its enclosing function } diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 31b3bdfa2559db..017bc25e460e89 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -186,57 +186,6 @@ func CanInlineFuncs(funcs []*ir.Func, profile *pgoir.Profile) { }) } -// GarbageCollectUnreferencedHiddenClosures makes a pass over all the -// top-level (non-hidden-closure) functions looking for nested closure -// functions that are reachable, then sweeps through the Target.Decls -// list and marks any non-reachable hidden closure function as dead. -// See issues #59404 and #59638 for more context. -func GarbageCollectUnreferencedHiddenClosures() { - - liveFuncs := make(map[*ir.Func]bool) - - var markLiveFuncs func(fn *ir.Func) - markLiveFuncs = func(fn *ir.Func) { - if liveFuncs[fn] { - return - } - liveFuncs[fn] = true - ir.Visit(fn, func(n ir.Node) { - if clo, ok := n.(*ir.ClosureExpr); ok { - markLiveFuncs(clo.Func) - } - }) - } - - for i := 0; i < len(typecheck.Target.Funcs); i++ { - fn := typecheck.Target.Funcs[i] - if fn.IsHiddenClosure() { - continue - } - markLiveFuncs(fn) - } - - for i := 0; i < len(typecheck.Target.Funcs); i++ { - fn := typecheck.Target.Funcs[i] - if !fn.IsHiddenClosure() { - continue - } - if fn.IsDeadcodeClosure() { - continue - } - if liveFuncs[fn] { - continue - } - fn.SetIsDeadcodeClosure(true) - if base.Flag.LowerM > 2 { - fmt.Printf("%v: unreferenced closure %v marked as dead\n", ir.Line(fn), fn) - } - if fn.Inl != nil && fn.LSym == nil { - ir.InitLSym(fn, true) - } - } -} - // inlineBudget determines the max budget for function 'fn' prior to // analyzing the hairiness of the body of 'fn'. We pass in the pgo // profile if available (which can change the budget), also a diff --git a/src/cmd/compile/internal/inline/interleaved/interleaved.go b/src/cmd/compile/internal/inline/interleaved/interleaved.go index 9b2efd7f2787cf..5b3fbf6be7c301 100644 --- a/src/cmd/compile/internal/inline/interleaved/interleaved.go +++ b/src/cmd/compile/internal/inline/interleaved/interleaved.go @@ -49,11 +49,6 @@ func DevirtualizeAndInlinePackage(pkg *ir.Package, profile *pgoir.Profile) { } if base.Flag.LowerL != 0 { - // Perform a garbage collection of hidden closures functions that - // are no longer reachable from top-level functions following - // inlining. See #59404 and #59638 for more context. - inline.GarbageCollectUnreferencedHiddenClosures() - if base.Debug.DumpInlFuncProps != "" { inlheur.DumpFuncProps(nil, base.Debug.DumpInlFuncProps) } diff --git a/src/cmd/compile/internal/ir/func.go b/src/cmd/compile/internal/ir/func.go index d0c8ee359befff..3c4ec4a64f47a4 100644 --- a/src/cmd/compile/internal/ir/func.go +++ b/src/cmd/compile/internal/ir/func.go @@ -222,21 +222,17 @@ type Mark struct { type ScopeID int32 const ( - funcDupok = 1 << iota // duplicate definitions ok - funcWrapper // hide frame from users (elide in tracebacks, don't count as a frame for recover()) - funcABIWrapper // is an ABI wrapper (also set flagWrapper) - funcNeedctxt // function uses context register (has closure variables) - // true if closure inside a function; false if a simple function or a - // closure in a global variable initialization - funcIsHiddenClosure - funcIsDeadcodeClosure // true if closure is deadcode - funcHasDefer // contains a defer statement - funcNilCheckDisabled // disable nil checks when compiling this function - funcInlinabilityChecked // inliner has already determined whether the function is inlinable - funcNeverReturns // function never returns (in most cases calls panic(), os.Exit(), or equivalent) - funcOpenCodedDeferDisallowed // can't do open-coded defers - funcClosureResultsLost // closure is called indirectly and we lost track of its results; used by escape analysis - funcPackageInit // compiler emitted .init func for package + funcDupok = 1 << iota // duplicate definitions ok + funcWrapper // hide frame from users (elide in tracebacks, don't count as a frame for recover()) + funcABIWrapper // is an ABI wrapper (also set flagWrapper) + funcNeedctxt // function uses context register (has closure variables) + funcHasDefer // contains a defer statement + funcNilCheckDisabled // disable nil checks when compiling this function + funcInlinabilityChecked // inliner has already determined whether the function is inlinable + funcNeverReturns // function never returns (in most cases calls panic(), os.Exit(), or equivalent) + funcOpenCodedDeferDisallowed // can't do open-coded defers + funcClosureResultsLost // closure is called indirectly and we lost track of its results; used by escape analysis + funcPackageInit // compiler emitted .init func for package ) type SymAndPos struct { @@ -248,8 +244,6 @@ func (f *Func) Dupok() bool { return f.flags&funcDupok != 0 } func (f *Func) Wrapper() bool { return f.flags&funcWrapper != 0 } func (f *Func) ABIWrapper() bool { return f.flags&funcABIWrapper != 0 } func (f *Func) Needctxt() bool { return f.flags&funcNeedctxt != 0 } -func (f *Func) IsHiddenClosure() bool { return f.flags&funcIsHiddenClosure != 0 } -func (f *Func) IsDeadcodeClosure() bool { return f.flags&funcIsDeadcodeClosure != 0 } func (f *Func) HasDefer() bool { return f.flags&funcHasDefer != 0 } func (f *Func) NilCheckDisabled() bool { return f.flags&funcNilCheckDisabled != 0 } func (f *Func) InlinabilityChecked() bool { return f.flags&funcInlinabilityChecked != 0 } @@ -262,8 +256,6 @@ func (f *Func) SetDupok(b bool) { f.flags.set(funcDupok, b) } func (f *Func) SetWrapper(b bool) { f.flags.set(funcWrapper, b) } func (f *Func) SetABIWrapper(b bool) { f.flags.set(funcABIWrapper, b) } func (f *Func) SetNeedctxt(b bool) { f.flags.set(funcNeedctxt, b) } -func (f *Func) SetIsHiddenClosure(b bool) { f.flags.set(funcIsHiddenClosure, b) } -func (f *Func) SetIsDeadcodeClosure(b bool) { f.flags.set(funcIsDeadcodeClosure, b) } func (f *Func) SetHasDefer(b bool) { f.flags.set(funcHasDefer, b) } func (f *Func) SetNilCheckDisabled(b bool) { f.flags.set(funcNilCheckDisabled, b) } func (f *Func) SetInlinabilityChecked(b bool) { f.flags.set(funcInlinabilityChecked, b) } @@ -281,6 +273,14 @@ func (f *Func) SetWBPos(pos src.XPos) { } } +func (f *Func) IsClosure() bool { + if f.OClosure == nil { + return false + } + // Trivial closure will be converted to global. + return !IsTrivialClosure(f.OClosure) +} + // FuncName returns the name (without the package) of the function f. func FuncName(f *Func) string { if f == nil || f.Nname == nil { @@ -484,19 +484,20 @@ func closureName(outerfn *Func, pos src.XPos, why Op) *types.Sym { // should have an inline-adjusted position, whereas the ODCLFUNC and // ONAME must not. // -// outerfn is the enclosing function, if any. The returned function is +// outerfn is the enclosing function. The returned function is // appending to pkg.Funcs. // // why is the reason we're generating this Func. It can be OCLOSURE // (for a normal function literal) or OGO or ODEFER (for wrapping a // call expression that has parameters or results). func NewClosureFunc(fpos, cpos src.XPos, why Op, typ *types.Type, outerfn *Func, pkg *Package) *Func { - fn := NewFunc(fpos, fpos, closureName(outerfn, cpos, why), typ) - fn.SetIsHiddenClosure(outerfn != nil) - if outerfn != nil { - fn.SetDupok(outerfn.Dupok()) // if the outer function is dupok, so is the closure + if outerfn == nil { + base.FatalfAt(fpos, "outerfn is nil") } + fn := NewFunc(fpos, fpos, closureName(outerfn, cpos, why), typ) + fn.SetDupok(outerfn.Dupok()) // if the outer function is dupok, so is the closure + clo := &ClosureExpr{Func: fn} clo.op = OCLOSURE clo.pos = cpos diff --git a/src/cmd/compile/internal/ir/scc.go b/src/cmd/compile/internal/ir/scc.go index a640f4fc16d325..265dce251eaf8c 100644 --- a/src/cmd/compile/internal/ir/scc.go +++ b/src/cmd/compile/internal/ir/scc.go @@ -14,10 +14,10 @@ package ir // The algorithm (known as Tarjan's algorithm) for doing that is taken from // Sedgewick, Algorithms, Second Edition, p. 482, with two adaptations. // -// First, a hidden closure function (n.Func.IsHiddenClosure()) cannot be the -// root of a connected component. Refusing to use it as a root -// forces it into the component of the function in which it appears. -// This is more convenient for escape analysis. +// First, a non-trivial closure function (fn.OClosure != nil) cannot be +// the root of a connected component. Refusing to use it as a root forces +// it into the component of the function in which it appears. This is +// more convenient for escape analysis. // // Second, each function becomes two virtual nodes in the graph, // with numbers n and n+1. We record the function's node number as n @@ -54,7 +54,7 @@ func VisitFuncsBottomUp(list []*Func, analyze func(list []*Func, recursive bool) v.analyze = analyze v.nodeID = make(map[*Func]uint32) for _, n := range list { - if !n.IsHiddenClosure() { + if !n.IsClosure() { v.visit(n) } } @@ -97,7 +97,7 @@ func (v *bottomUpVisitor) visit(n *Func) uint32 { } }) - if (min == id || min == id+1) && !n.IsHiddenClosure() { + if (min == id || min == id+1) && !n.IsClosure() { // This node is the root of a strongly connected component. // The original min was id+1. If the bottomUpVisitor found its way diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index 58fbb72f5d23f8..ff44adedb4902f 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -3061,11 +3061,6 @@ func (r *reader) funcLit() ir.Node { r.addBody(fn, nil) - // un-hide closures belong to init function. - if (r.curfn.IsPackageInit() || strings.HasPrefix(r.curfn.Sym().Name, "init.")) && ir.IsTrivialClosure(fn.OClosure) { - fn.SetIsHiddenClosure(false) - } - return fn.OClosure } diff --git a/src/cmd/compile/internal/staticinit/sched.go b/src/cmd/compile/internal/staticinit/sched.go index 91c0a27faf0295..56203120b2c41f 100644 --- a/src/cmd/compile/internal/staticinit/sched.go +++ b/src/cmd/compile/internal/staticinit/sched.go @@ -393,12 +393,6 @@ func (s *Schedule) StaticAssign(l *ir.Name, loff int64, r ir.Node, typ *types.Ty if base.Debug.Closure > 0 { base.WarnfAt(r.Pos(), "closure converted to global") } - // Issue 59680: if the closure we're looking at was produced - // by inlining, it could be marked as hidden, which we don't - // want (moving the func to a static init will effectively - // hide it from escape analysis). Mark as non-hidden here. - // so that it will participated in escape analysis. - r.Func.SetIsHiddenClosure(false) // Closures with no captured variables are globals, // so the assignment can be done at link time. // TODO if roff != 0 { panic } diff --git a/test/closure3.dir/main.go b/test/closure3.dir/main.go index 441da70105092c..e3981a5161a8ce 100644 --- a/test/closure3.dir/main.go +++ b/test/closure3.dir/main.go @@ -94,7 +94,7 @@ func main() { return x + 2 } y, sink = func() (func(int) int, int) { // ERROR "can inline main.func12" - return func(x int) int { // ERROR "can inline main.func12" + return func(x int) int { // ERROR "can inline main.func12" "func literal escapes to heap" return x + 1 }, 42 }() // ERROR "func literal does not escape" "inlining call to main.func12" @@ -109,7 +109,7 @@ func main() { return x + 2 } y, sink = func() (func(int) int, int) { // ERROR "can inline main.func13.2" - return func(x int) int { // ERROR "can inline main.func13.2" + return func(x int) int { // ERROR "can inline main.func13.2" "func literal escapes to heap" return x + 1 }, 42 }() // ERROR "func literal does not escape" "inlining call to main.func13.2" diff --git a/test/escape4.go b/test/escape4.go index c4a2fc15e7ec29..ddeaff81ecbfa2 100644 --- a/test/escape4.go +++ b/test/escape4.go @@ -25,7 +25,7 @@ func f1() { // Escape analysis used to miss inlined code in closures. func() { // ERROR "can inline f1.func1" - p = alloc(3) // ERROR "inlining call to alloc" + p = alloc(3) // ERROR "inlining call to alloc" "moved to heap: x" }() // ERROR "inlining call to f1.func1" "inlining call to alloc" "moved to heap: x" f = func() { // ERROR "func literal escapes to heap" "can inline f1.func2" diff --git a/test/escape_closure.go b/test/escape_closure.go index 0b19d6f6e8fc90..84f3adf35d2729 100644 --- a/test/escape_closure.go +++ b/test/escape_closure.go @@ -134,7 +134,7 @@ func ClosureCallArgs14() { func ClosureCallArgs15() { x := 0 // ERROR "moved to heap: x" p := &x - sink = func(p **int) *int { // ERROR "leaking param content: p" "func literal does not escape" + sink = func(p **int) *int { // ERROR "leaking param: p to result ~r0 level=1" "func literal does not escape" return *p }(&p) } From 2edf00cf0d19cfb737cce0901f348974a7dbaa53 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 17 Jul 2024 00:55:11 +0700 Subject: [PATCH 017/866] cmd/compile: simplify outerfn check in closureName Since CL 523275, outerfn is always non-nil. Change-Id: I42cfff90546e506e04a74fb4f754a25f1eadddc9 Reviewed-on: https://go-review.googlesource.com/c/go/+/598636 Reviewed-by: Than McIntosh Auto-Submit: Cuong Manh Le Reviewed-by: Keith Randall Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/ir/func.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/ir/func.go b/src/cmd/compile/internal/ir/func.go index 3c4ec4a64f47a4..9c7ba97eb5d224 100644 --- a/src/cmd/compile/internal/ir/func.go +++ b/src/cmd/compile/internal/ir/func.go @@ -421,7 +421,7 @@ var globClosgen int32 // closureName generates a new unique name for a closure within outerfn at pos. func closureName(outerfn *Func, pos src.XPos, why Op) *types.Sym { - if outerfn != nil && outerfn.OClosure != nil && outerfn.OClosure.Func.RangeParent != nil { + if outerfn.OClosure != nil && outerfn.OClosure.Func.RangeParent != nil { outerfn = outerfn.OClosure.Func.RangeParent } pkg := types.LocalPkg @@ -431,7 +431,7 @@ func closureName(outerfn *Func, pos src.XPos, why Op) *types.Sym { default: base.FatalfAt(pos, "closureName: bad Op: %v", why) case OCLOSURE: - if outerfn == nil || outerfn.OClosure == nil { + if outerfn.OClosure == nil { suffix = ".func" } case ORANGE: @@ -446,7 +446,7 @@ func closureName(outerfn *Func, pos src.XPos, why Op) *types.Sym { // There may be multiple functions named "_". In those // cases, we can't use their individual Closgens as it // would lead to name clashes. - if outerfn != nil && !IsBlank(outerfn.Nname) { + if !IsBlank(outerfn.Nname) { pkg = outerfn.Sym().Pkg outer = FuncName(outerfn) From c4a595cf294558579ab6342f1628ad37a7a4221c Mon Sep 17 00:00:00 2001 From: guoguangwu Date: Fri, 7 Jun 2024 04:07:05 +0000 Subject: [PATCH 018/866] cmd/compile: use raw strings to avoid double escapes Change-Id: I9b24ff7dec0825a8a9d094dfef6553aa605ef47d GitHub-Last-Rev: 785589211cea172377bb67e895491d8678939600 GitHub-Pull-Request: golang/go#67871 Reviewed-on: https://go-review.googlesource.com/c/go/+/591257 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Keith Randall Auto-Submit: Keith Randall Reviewed-by: Dmitri Shuralyov --- src/cmd/compile/internal/ssa/debug_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/ssa/debug_test.go b/src/cmd/compile/internal/ssa/debug_test.go index 2f21aca784ac8d..5920428bf982fe 100644 --- a/src/cmd/compile/internal/ssa/debug_test.go +++ b/src/cmd/compile/internal/ssa/debug_test.go @@ -591,7 +591,7 @@ func newGdb(t testing.TB, tag, executable string, args ...string) dbgr { s := &gdbState{tagg: tag, cmd: cmd, args: args} s.atLineRe = regexp.MustCompile("(^|\n)([0-9]+)(.*)") s.funcFileLinePCre = regexp.MustCompile( - "([^ ]+) [(][^)]*[)][ \\t\\n]+at ([^:]+):([0-9]+)") + `([^ ]+) [(][^)]*[)][ \t\n]+at ([^:]+):([0-9]+)`) // runtime.main () at /Users/drchase/GoogleDrive/work/go/src/runtime/proc.go:201 // function file line // Thread 2 hit Breakpoint 1, main.main () at /Users/drchase/GoogleDrive/work/debug/hist.go:18 From b8f83e22703ee23d49d95154449ce7066402d5c9 Mon Sep 17 00:00:00 2001 From: rhysd Date: Wed, 17 Jul 2024 11:44:35 +0000 Subject: [PATCH 019/866] os: check relative paths in UserConfigDir and UserCacheDir Return errors by UserConfigDir and UserCacheDir when XDG environment variables contain relative paths. Fixes #68470 Change-Id: Ib36b56d73b066e002023be55ecfe74d5c0eedb15 GitHub-Last-Rev: c03f371a042c475a6f3f2259b06b140ade511404 GitHub-Pull-Request: golang/go#68471 Reviewed-on: https://go-review.googlesource.com/c/go/+/598655 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Auto-Submit: Ian Lance Taylor --- src/os/file.go | 12 +++++++---- src/os/os_test.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/os/file.go b/src/os/file.go index c3ee31583e32f6..b2fb328e13dbe3 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -472,8 +472,8 @@ func TempDir() string { // On Windows, it returns %LocalAppData%. // On Plan 9, it returns $home/lib/cache. // -// If the location cannot be determined (for example, $HOME is not defined), -// then it will return an error. +// If the location cannot be determined (for example, $HOME is not defined) or +// the path in $XDG_CACHE_HOME is relative, then it will return an error. func UserCacheDir() (string, error) { var dir string @@ -506,6 +506,8 @@ func UserCacheDir() (string, error) { return "", errors.New("neither $XDG_CACHE_HOME nor $HOME are defined") } dir += "/.cache" + } else if !filepathlite.IsAbs(dir) { + return "", errors.New("path in $XDG_CACHE_HOME is relative") } } @@ -523,8 +525,8 @@ func UserCacheDir() (string, error) { // On Windows, it returns %AppData%. // On Plan 9, it returns $home/lib. // -// If the location cannot be determined (for example, $HOME is not defined), -// then it will return an error. +// If the location cannot be determined (for example, $HOME is not defined) or +// the path in $XDG_CONFIG_HOME is relative, then it will return an error. func UserConfigDir() (string, error) { var dir string @@ -557,6 +559,8 @@ func UserConfigDir() (string, error) { return "", errors.New("neither $XDG_CONFIG_HOME nor $HOME are defined") } dir += "/.config" + } else if !filepathlite.IsAbs(dir) { + return "", errors.New("path in $XDG_CONFIG_HOME is relative") } } diff --git a/src/os/os_test.go b/src/os/os_test.go index 878974384dbcba..5a36abd7c69610 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -2817,6 +2817,33 @@ func TestUserCacheDir(t *testing.T) { } } +func TestUserCacheDirXDGConfigDirEnvVar(t *testing.T) { + switch runtime.GOOS { + case "windows", "darwin", "plan9": + t.Skip("$XDG_CACHE_HOME is effective only on Unix systems") + } + + wd, err := Getwd() + if err != nil { + t.Fatal(err) + } + t.Setenv("XDG_CACHE_HOME", wd) + + dir, err := UserCacheDir() + if err != nil { + t.Fatal(err) + } + if dir != wd { + t.Fatalf("UserCacheDir returned %q; want the value of $XDG_CACHE_HOME %q", dir, wd) + } + + t.Setenv("XDG_CACHE_HOME", "some-dir") + _, err = UserCacheDir() + if err == nil { + t.Fatal("UserCacheDir succeeded though $XDG_CACHE_HOME contains a relative path") + } +} + func TestUserConfigDir(t *testing.T) { t.Parallel() @@ -2841,6 +2868,33 @@ func TestUserConfigDir(t *testing.T) { } } +func TestUserConfigDirXDGConfigDirEnvVar(t *testing.T) { + switch runtime.GOOS { + case "windows", "darwin", "plan9": + t.Skip("$XDG_CONFIG_HOME is effective only on Unix systems") + } + + wd, err := Getwd() + if err != nil { + t.Fatal(err) + } + t.Setenv("XDG_CONFIG_HOME", wd) + + dir, err := UserConfigDir() + if err != nil { + t.Fatal(err) + } + if dir != wd { + t.Fatalf("UserConfigDir returned %q; want the value of $XDG_CONFIG_HOME %q", dir, wd) + } + + t.Setenv("XDG_CONFIG_HOME", "some-dir") + _, err = UserConfigDir() + if err == nil { + t.Fatal("UserConfigDir succeeded though $XDG_CONFIG_HOME contains a relative path") + } +} + func TestUserHomeDir(t *testing.T) { t.Parallel() From 5f073d361f96e38bd31cf9274769bd4d0f5e0a5a Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Fri, 21 Jun 2024 15:32:29 +0000 Subject: [PATCH 020/866] cmd/trace: merge testdata debugging tools into the trace tool Currently internal/trace/testdata contains three debugging tools which were written early in the trace rewrite for debugging. Two of these are completely redundant with go tool trace -d=1 and go tool trace -d=2. The only remaining one landed in the last cycle and could easily also be another debug mode. This change thus merges gotraceeventstats into go tool trace as a new debug mode, and updates the debug mode flag (-d) to accept a string, giving each mode a more descriptive name. Change-Id: I170f30440691b81de846b4e247deb3d0982fc205 Reviewed-on: https://go-review.googlesource.com/c/go/+/593975 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Knyszek --- src/cmd/trace/main.go | 76 +++++++++- src/internal/trace/raw/event.go | 16 +++ .../testdata/cmd/gotraceeventstats/main.go | 136 ------------------ .../trace/testdata/cmd/gotraceraw/main.go | 86 ----------- .../testdata/cmd/gotracevalidate/main.go | 53 ------- 5 files changed, 85 insertions(+), 282 deletions(-) delete mode 100644 src/internal/trace/testdata/cmd/gotraceeventstats/main.go delete mode 100644 src/internal/trace/testdata/cmd/gotraceraw/main.go delete mode 100644 src/internal/trace/testdata/cmd/gotracevalidate/main.go diff --git a/src/cmd/trace/main.go b/src/cmd/trace/main.go index d51ee5816456bf..075212eacb1490 100644 --- a/src/cmd/trace/main.go +++ b/src/cmd/trace/main.go @@ -7,9 +7,11 @@ package main import ( "cmd/internal/browser" "cmd/internal/telemetry/counter" + "cmp" "flag" "fmt" "internal/trace" + "internal/trace/event" "internal/trace/raw" "internal/trace/traceviewer" "io" @@ -18,7 +20,9 @@ import ( "net/http" _ "net/http/pprof" // Required to use pprof "os" + "slices" "sync/atomic" + "text/tabwriter" "time" ) @@ -45,7 +49,7 @@ Supported profile types are: Flags: -http=addr: HTTP service address (e.g., ':6060') -pprof=type: print a pprof-like profile instead - -d=int: print debug info such as parsed events (1 for high-level, 2 for low-level) + -d=mode: print debug info and exit (modes: wire, parsed, footprint) Note that while the various profiles available when launching 'go tool trace' work on every browser, the trace viewer itself @@ -56,7 +60,7 @@ and is only actively tested on that browser. var ( httpFlag = flag.String("http", "localhost:0", "HTTP service address (e.g., ':6060')") pprofFlag = flag.String("pprof", "", "print a pprof-like profile instead") - debugFlag = flag.Int("d", 0, "print debug information (1 for basic debug info, 2 for lower-level info)") + debugFlag = flag.String("d", "", "print debug info and exit (modes: wire, parsed, footprint)") // The binary file name, left here for serveSVGProfile. programBinary string @@ -128,11 +132,17 @@ func main() { } // Debug flags. - switch *debugFlag { - case 1: - logAndDie(debugProcessedEvents(tracef)) - case 2: - logAndDie(debugRawEvents(tracef)) + if *debugFlag != "" { + switch *debugFlag { + case "parsed": + logAndDie(debugProcessedEvents(tracef)) + case "wire": + logAndDie(debugRawEvents(tracef)) + case "footprint": + logAndDie(debugEventsFootprint(tracef)) + default: + logAndDie(fmt.Errorf("invalid debug mode %s, want one of: parsed, wire, footprint", *debugFlag)) + } } ln, err := net.Listen("tcp", *httpFlag) @@ -355,6 +365,58 @@ func debugRawEvents(trc io.Reader) error { } } +func debugEventsFootprint(trc io.Reader) error { + cr := countingReader{r: trc} + tr, err := raw.NewReader(&cr) + if err != nil { + return err + } + type eventStats struct { + typ event.Type + count int + bytes int + } + var stats [256]eventStats + for i := range stats { + stats[i].typ = event.Type(i) + } + eventsRead := 0 + for { + e, err := tr.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + return err + } + s := &stats[e.Ev] + s.count++ + s.bytes += e.EncodedSize() + eventsRead++ + } + slices.SortFunc(stats[:], func(a, b eventStats) int { + return cmp.Compare(b.bytes, a.bytes) + }) + specs := tr.Version().Specs() + w := tabwriter.NewWriter(os.Stdout, 3, 8, 2, ' ', 0) + fmt.Fprintf(w, "Event\tBytes\t%%\tCount\t%%\n") + fmt.Fprintf(w, "-\t-\t-\t-\t-\n") + for i := range stats { + stat := &stats[i] + name := "" + if int(stat.typ) >= len(specs) { + name = fmt.Sprintf("", stat.typ) + } else { + name = specs[stat.typ].Name + } + bytesPct := float64(stat.bytes) / float64(cr.bytesRead.Load()) * 100 + countPct := float64(stat.count) / float64(eventsRead) * 100 + fmt.Fprintf(w, "%s\t%d\t%.2f%%\t%d\t%.2f%%\n", name, stat.bytes, bytesPct, stat.count, countPct) + } + w.Flush() + return nil +} + type countingReader struct { r io.Reader bytesRead atomic.Int64 diff --git a/src/internal/trace/raw/event.go b/src/internal/trace/raw/event.go index 4766fbe563de90..e163a2c6ef820b 100644 --- a/src/internal/trace/raw/event.go +++ b/src/internal/trace/raw/event.go @@ -5,6 +5,7 @@ package raw import ( + "encoding/binary" "strconv" "strings" @@ -58,3 +59,18 @@ func (e *Event) String() string { } return s.String() } + +// EncodedSize returns the canonical encoded size of an event. +func (e *Event) EncodedSize() int { + size := 1 + var buf [binary.MaxVarintLen64]byte + for _, arg := range e.Args { + size += binary.PutUvarint(buf[:], arg) + } + spec := e.Version.Specs()[e.Ev] + if spec.HasData { + size += binary.PutUvarint(buf[:], uint64(len(e.Data))) + size += len(e.Data) + } + return size +} diff --git a/src/internal/trace/testdata/cmd/gotraceeventstats/main.go b/src/internal/trace/testdata/cmd/gotraceeventstats/main.go deleted file mode 100644 index d2379daab59cbe..00000000000000 --- a/src/internal/trace/testdata/cmd/gotraceeventstats/main.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2023 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 main - -import ( - "cmp" - "encoding/binary" - "flag" - "fmt" - "io" - "log" - "os" - "slices" - "text/tabwriter" - - "internal/trace/event" - "internal/trace/raw" -) - -func init() { - flag.Usage = func() { - fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [mode]\n", os.Args[0]) - fmt.Fprintf(flag.CommandLine.Output(), "\n") - fmt.Fprintf(flag.CommandLine.Output(), "Accepts a trace at stdin.\n") - fmt.Fprintf(flag.CommandLine.Output(), "\n") - fmt.Fprintf(flag.CommandLine.Output(), "Supported modes:") - fmt.Fprintf(flag.CommandLine.Output(), "\n") - fmt.Fprintf(flag.CommandLine.Output(), "* size - dumps size stats\n") - fmt.Fprintf(flag.CommandLine.Output(), "\n") - flag.PrintDefaults() - } - log.SetFlags(0) -} - -func main() { - log.SetPrefix("") - flag.Parse() - - if flag.NArg() != 1 { - log.Print("missing mode argument") - flag.Usage() - os.Exit(1) - } - var err error - switch mode := flag.Arg(0); mode { - case "size": - err = printSizeStats(os.Stdin) - default: - log.Printf("unknown mode %q", mode) - flag.Usage() - os.Exit(1) - } - if err != nil { - log.Fatalf("error: %v", err) - os.Exit(1) - } -} - -func printSizeStats(r io.Reader) error { - cr := countingReader{Reader: r} - tr, err := raw.NewReader(&cr) - if err != nil { - return err - } - type eventStats struct { - typ event.Type - count int - bytes int - } - var stats [256]eventStats - for i := range stats { - stats[i].typ = event.Type(i) - } - eventsRead := 0 - for { - e, err := tr.ReadEvent() - if err == io.EOF { - break - } - if err != nil { - return err - } - s := &stats[e.Ev] - s.count++ - s.bytes += encodedSize(&e) - eventsRead++ - } - slices.SortFunc(stats[:], func(a, b eventStats) int { - return cmp.Compare(b.bytes, a.bytes) - }) - specs := tr.Version().Specs() - w := tabwriter.NewWriter(os.Stdout, 3, 8, 2, ' ', 0) - fmt.Fprintf(w, "Event\tBytes\t%%\tCount\t%%\n") - fmt.Fprintf(w, "-\t-\t-\t-\t-\n") - for i := range stats { - stat := &stats[i] - name := "" - if int(stat.typ) >= len(specs) { - name = fmt.Sprintf("", stat.typ) - } else { - name = specs[stat.typ].Name - } - bytesPct := float64(stat.bytes) / float64(cr.bytesRead) * 100 - countPct := float64(stat.count) / float64(eventsRead) * 100 - fmt.Fprintf(w, "%s\t%d\t%.2f%%\t%d\t%.2f%%\n", name, stat.bytes, bytesPct, stat.count, countPct) - } - w.Flush() - return nil -} - -func encodedSize(e *raw.Event) int { - size := 1 - var buf [binary.MaxVarintLen64]byte - for _, arg := range e.Args { - size += binary.PutUvarint(buf[:], arg) - } - spec := e.Version.Specs()[e.Ev] - if spec.HasData { - size += binary.PutUvarint(buf[:], uint64(len(e.Data))) - size += len(e.Data) - } - return size -} - -type countingReader struct { - io.Reader - bytesRead int -} - -func (r *countingReader) Read(b []byte) (int, error) { - n, err := r.Reader.Read(b) - r.bytesRead += n - return n, err -} diff --git a/src/internal/trace/testdata/cmd/gotraceraw/main.go b/src/internal/trace/testdata/cmd/gotraceraw/main.go deleted file mode 100644 index ec4ebf23b9de10..00000000000000 --- a/src/internal/trace/testdata/cmd/gotraceraw/main.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2023 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 main - -import ( - "flag" - "fmt" - "io" - "log" - "os" - - "internal/trace/raw" - "internal/trace/version" -) - -func init() { - flag.Usage = func() { - fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [mode]\n", os.Args[0]) - fmt.Fprintf(flag.CommandLine.Output(), "\n") - fmt.Fprintf(flag.CommandLine.Output(), "Supported modes:") - fmt.Fprintf(flag.CommandLine.Output(), "\n") - fmt.Fprintf(flag.CommandLine.Output(), "* text2bytes - converts a text format trace to bytes\n") - fmt.Fprintf(flag.CommandLine.Output(), "* bytes2text - converts a byte format trace to text\n") - fmt.Fprintf(flag.CommandLine.Output(), "\n") - flag.PrintDefaults() - } - log.SetFlags(0) -} - -func main() { - flag.Parse() - if narg := flag.NArg(); narg != 1 { - log.Fatal("expected exactly one positional argument: the mode to operate in; see -h output") - } - - r := os.Stdin - w := os.Stdout - - var tr traceReader - var tw traceWriter - var err error - - switch flag.Arg(0) { - case "text2bytes": - tr, err = raw.NewTextReader(r) - if err != nil { - log.Fatal(err) - } - tw, err = raw.NewWriter(w, tr.Version()) - if err != nil { - log.Fatal(err) - } - case "bytes2text": - tr, err = raw.NewReader(r) - if err != nil { - log.Fatal(err) - } - tw, err = raw.NewTextWriter(w, tr.Version()) - if err != nil { - log.Fatal(err) - } - } - for { - ev, err := tr.ReadEvent() - if err == io.EOF { - break - } - if err != nil { - log.Fatal(err) - } - if err := tw.WriteEvent(ev); err != nil { - log.Fatal(err) - } - } -} - -type traceReader interface { - Version() version.Version - ReadEvent() (raw.Event, error) -} - -type traceWriter interface { - WriteEvent(raw.Event) error -} diff --git a/src/internal/trace/testdata/cmd/gotracevalidate/main.go b/src/internal/trace/testdata/cmd/gotracevalidate/main.go deleted file mode 100644 index 6c681df1799566..00000000000000 --- a/src/internal/trace/testdata/cmd/gotracevalidate/main.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2023 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 main - -import ( - "flag" - "fmt" - "io" - "log" - "os" - - "internal/trace" - "internal/trace/testtrace" -) - -func init() { - flag.Usage = func() { - fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s\n", os.Args[0]) - fmt.Fprintf(flag.CommandLine.Output(), "\n") - fmt.Fprintf(flag.CommandLine.Output(), "Accepts a trace at stdin and validates it.\n") - flag.PrintDefaults() - } - log.SetFlags(0) -} - -var logEvents = flag.Bool("log-events", false, "whether to log events") - -func main() { - flag.Parse() - - r, err := trace.NewReader(os.Stdin) - if err != nil { - log.Fatal(err) - } - v := testtrace.NewValidator() - for { - ev, err := r.ReadEvent() - if err == io.EOF { - break - } - if err != nil { - log.Fatal(err) - } - if *logEvents { - log.Println(ev.String()) - } - if err := v.Event(ev); err != nil { - log.Fatal(err) - } - } -} From 78c0ea5df7e864575c8fcae8528572c5284c0435 Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Tue, 16 Jul 2024 17:43:18 +0000 Subject: [PATCH 021/866] cmd/link: raise pe export cap to 65535 fixes #68405 Change-Id: I043e16f43daa336005695f82a53f9a52cd770656 GitHub-Last-Rev: 69f1ae8b648083154c64f0679b7bd97a118607e9 GitHub-Pull-Request: golang/go#68409 Reviewed-on: https://go-review.googlesource.com/c/go/+/597956 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Zxilly Chou Reviewed-by: Than McIntosh --- src/cmd/link/internal/ld/pe.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go index 14f04855305a40..6d6eda4b336403 100644 --- a/src/cmd/link/internal/ld/pe.go +++ b/src/cmd/link/internal/ld/pe.go @@ -16,6 +16,7 @@ import ( "encoding/binary" "fmt" "internal/buildcfg" + "math" "sort" "strconv" "strings" @@ -307,7 +308,7 @@ var ( pe64 int dr *Dll - dexport = make([]loader.Sym, 0, 1024) + dexport []loader.Sym ) // peStringTable is a COFF string table. @@ -1390,7 +1391,7 @@ func initdynexport(ctxt *Link) { if !ldr.AttrReachable(s) || !ldr.AttrCgoExportDynamic(s) { continue } - if len(dexport)+1 > cap(dexport) { + if len(dexport) >= math.MaxUint16 { ctxt.Errorf(s, "pe dynexport table is full") errorexit() } From fe87b586c036ae7ad25e22896cb90f95421545fe Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sat, 3 Feb 2024 10:47:28 +0700 Subject: [PATCH 022/866] runtime: remove VZEROUPPER in asyncPreempt on darwin/amd64 Updates #37174 Updates #49233 Fixes #41152 Change-Id: I35b148c8bc132f02dd6a5a6bb48b711fb5c5df9e Reviewed-on: https://go-review.googlesource.com/c/go/+/560955 Reviewed-by: Keith Randall Auto-Submit: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/runtime/mkpreempt.go | 13 ------------- src/runtime/preempt_amd64.s | 7 ------- 2 files changed, 20 deletions(-) diff --git a/src/runtime/mkpreempt.go b/src/runtime/mkpreempt.go index 17544d6b21532c..08500a90d532ed 100644 --- a/src/runtime/mkpreempt.go +++ b/src/runtime/mkpreempt.go @@ -264,19 +264,6 @@ func genAMD64() { l.save() - // Apparently, the signal handling code path in darwin kernel leaves - // the upper bits of Y registers in a dirty state, which causes - // many SSE operations (128-bit and narrower) become much slower. - // Clear the upper bits to get to a clean state. See issue #37174. - // It is safe here as Go code don't use the upper bits of Y registers. - p("#ifdef GOOS_darwin") - p("#ifndef hasAVX") - p("CMPB internal∕cpu·X86+const_offsetX86HasAVX(SB), $0") - p("JE 2(PC)") - p("#endif") - p("VZEROUPPER") - p("#endif") - lSSE.save() p("CALL ·asyncPreempt2(SB)") lSSE.restore() diff --git a/src/runtime/preempt_amd64.s b/src/runtime/preempt_amd64.s index 94a84fb74cafa7..8e3ed0d7c59dce 100644 --- a/src/runtime/preempt_amd64.s +++ b/src/runtime/preempt_amd64.s @@ -27,13 +27,6 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0 MOVQ R13, 88(SP) MOVQ R14, 96(SP) MOVQ R15, 104(SP) - #ifdef GOOS_darwin - #ifndef hasAVX - CMPB internal∕cpu·X86+const_offsetX86HasAVX(SB), $0 - JE 2(PC) - #endif - VZEROUPPER - #endif MOVUPS X0, 112(SP) MOVUPS X1, 128(SP) MOVUPS X2, 144(SP) From f9eb3e3cd59c1cf38a98f2367c6c8dc180db9a95 Mon Sep 17 00:00:00 2001 From: David Chase Date: Tue, 23 Jul 2024 11:18:08 -0400 Subject: [PATCH 023/866] runtime,internal: move runtime/internal/math to internal/runtime/math Cleanup and friction reduction. Updates #65355. Change-Id: I6c4fcd409d044c00d16561fe9ed2257877d73f5b Reviewed-on: https://go-review.googlesource.com/c/go/+/600435 Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/compile/internal/ssa/_gen/ARM64.rules | 2 +- src/cmd/compile/internal/ssagen/ssa.go | 6 +++--- src/cmd/compile/internal/test/inl_test.go | 2 +- src/cmd/compile/internal/walk/builtin.go | 2 +- src/cmd/internal/objabi/pkgspecial.go | 2 +- src/go/build/deps_test.go | 2 +- src/internal/coverage/pkid.go | 4 ++-- src/{runtime/internal => internal/runtime}/math/math.go | 0 .../internal => internal/runtime}/math/math_test.go | 2 +- src/runtime/arena.go | 2 +- src/runtime/chan.go | 2 +- src/runtime/hash64.go | 2 +- src/runtime/malloc.go | 2 +- src/runtime/map.go | 2 +- src/runtime/rand.go | 2 +- src/runtime/slice.go | 2 +- src/runtime/unsafe.go | 2 +- 17 files changed, 19 insertions(+), 19 deletions(-) rename src/{runtime/internal => internal/runtime}/math/math.go (100%) rename src/{runtime/internal => internal/runtime}/math/math_test.go (98%) diff --git a/src/cmd/compile/internal/ssa/_gen/ARM64.rules b/src/cmd/compile/internal/ssa/_gen/ARM64.rules index 1b588edb043c11..721095f653363a 100644 --- a/src/cmd/compile/internal/ssa/_gen/ARM64.rules +++ b/src/cmd/compile/internal/ssa/_gen/ARM64.rules @@ -1931,7 +1931,7 @@ ((REV|REVW) ((REV|REVW) p)) => p -// runtime/internal/math.MulUintptr intrinsics +// internal/runtime/math.MulUintptr intrinsics (Select0 (Mul64uover x y)) => (MUL x y) (Select1 (Mul64uover x y)) => (NotEqual (CMPconst (UMULH x y) [0])) diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 26d236dcacafb4..d0ca5b7f30f13b 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -4241,7 +4241,7 @@ func InitTables() { }, all...) } - addF("runtime/internal/math", "MulUintptr", + addF("internal/runtime/math", "MulUintptr", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { if s.config.PtrSize == 4 { return s.newValue2(ssa.OpMul32uover, types.NewTuple(types.Types[types.TUINT], types.Types[types.TUINT]), args[0], args[1]) @@ -5025,14 +5025,14 @@ func InitTables() { }, sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X, sys.MIPS64, sys.RISCV64, sys.Loong64) alias("math/bits", "Mul", "math/bits", "Mul64", p8...) - alias("runtime/internal/math", "Mul64", "math/bits", "Mul64", p8...) + alias("internal/runtime/math", "Mul64", "math/bits", "Mul64", p8...) addF("math/bits", "Add64", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue3(ssa.OpAdd64carry, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1], args[2]) }, sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X, sys.RISCV64, sys.Loong64, sys.MIPS64) alias("math/bits", "Add", "math/bits", "Add64", p8...) - alias("runtime/internal/math", "Add64", "math/bits", "Add64", all...) + alias("internal/runtime/math", "Add64", "math/bits", "Add64", all...) addF("math/bits", "Sub64", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue3(ssa.OpSub64borrow, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1], args[2]) diff --git a/src/cmd/compile/internal/test/inl_test.go b/src/cmd/compile/internal/test/inl_test.go index f05bb9317d70e8..462626958223fc 100644 --- a/src/cmd/compile/internal/test/inl_test.go +++ b/src/cmd/compile/internal/test/inl_test.go @@ -98,7 +98,7 @@ func TestIntendedInlining(t *testing.T) { "traceEnabled", }, "runtime/internal/sys": {}, - "runtime/internal/math": { + "internal/runtime/math": { "MulUintptr", }, "bytes": { diff --git a/src/cmd/compile/internal/walk/builtin.go b/src/cmd/compile/internal/walk/builtin.go index 512420e6d5800b..02e64c12a13c3b 100644 --- a/src/cmd/compile/internal/walk/builtin.go +++ b/src/cmd/compile/internal/walk/builtin.go @@ -799,7 +799,7 @@ func walkUnsafeSlice(n *ir.BinaryExpr, init *ir.Nodes) ir.Node { return walkExpr(typecheck.Expr(h), init) } -var math_MulUintptr = &types.Sym{Pkg: types.NewPkg("runtime/internal/math", "math"), Name: "MulUintptr"} +var math_MulUintptr = &types.Sym{Pkg: types.NewPkg("internal/runtime/math", "math"), Name: "MulUintptr"} func walkUnsafeString(n *ir.BinaryExpr, init *ir.Nodes) ir.Node { ptr := safeExpr(n.X, init) diff --git a/src/cmd/internal/objabi/pkgspecial.go b/src/cmd/internal/objabi/pkgspecial.go index c34ede53fe0fb5..2772226c9394ff 100644 --- a/src/cmd/internal/objabi/pkgspecial.go +++ b/src/cmd/internal/objabi/pkgspecial.go @@ -47,7 +47,7 @@ var runtimePkgs = []string{ "internal/runtime/atomic", "internal/runtime/exithook", - "runtime/internal/math", + "internal/runtime/math", "runtime/internal/sys", "internal/runtime/syscall", diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 9146cae492e8ac..9e22955edafbd0 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -87,7 +87,7 @@ var depsRules = ` < internal/runtime/syscall < internal/runtime/atomic < internal/runtime/exithook - < runtime/internal/math + < internal/runtime/math < runtime < sync/atomic < internal/race diff --git a/src/internal/coverage/pkid.go b/src/internal/coverage/pkid.go index 86ff302507c70b..a764cc4205e9f7 100644 --- a/src/internal/coverage/pkid.go +++ b/src/internal/coverage/pkid.go @@ -28,7 +28,7 @@ package coverage // slot: 3 path='internal/goos' // slot: 4 path='runtime/internal/sys' hard-coded id: 5 // slot: 5 path='internal/abi' hard-coded id: 4 -// slot: 6 path='runtime/internal/math' hard-coded id: 6 +// slot: 6 path='internal/runtime/math' hard-coded id: 6 // slot: 7 path='internal/bytealg' hard-coded id: 7 // slot: 8 path='internal/goexperiment' // slot: 9 path='internal/runtime/syscall' hard-coded id: 8 @@ -52,7 +52,7 @@ var rtPkgs = [...]string{ "internal/chacha8rand", "runtime/internal/sys", "internal/abi", - "runtime/internal/math", + "internal/runtime/math", "internal/bytealg", "internal/goexperiment", "internal/runtime/syscall", diff --git a/src/runtime/internal/math/math.go b/src/internal/runtime/math/math.go similarity index 100% rename from src/runtime/internal/math/math.go rename to src/internal/runtime/math/math.go diff --git a/src/runtime/internal/math/math_test.go b/src/internal/runtime/math/math_test.go similarity index 98% rename from src/runtime/internal/math/math_test.go rename to src/internal/runtime/math/math_test.go index 303eb63405a1d4..8405999dc2c5ec 100644 --- a/src/runtime/internal/math/math_test.go +++ b/src/internal/runtime/math/math_test.go @@ -5,7 +5,7 @@ package math_test import ( - . "runtime/internal/math" + . "internal/runtime/math" "testing" ) diff --git a/src/runtime/arena.go b/src/runtime/arena.go index cd9a9dfae10abc..96197099ca59c9 100644 --- a/src/runtime/arena.go +++ b/src/runtime/arena.go @@ -86,7 +86,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/math" + "internal/runtime/math" "runtime/internal/sys" "unsafe" ) diff --git a/src/runtime/chan.go b/src/runtime/chan.go index f1cd74a3fd16e2..4c854c72bc9842 100644 --- a/src/runtime/chan.go +++ b/src/runtime/chan.go @@ -20,7 +20,7 @@ package runtime import ( "internal/abi" "internal/runtime/atomic" - "runtime/internal/math" + "internal/runtime/math" "unsafe" ) diff --git a/src/runtime/hash64.go b/src/runtime/hash64.go index 05cdb8111372b8..124bb7d77accdd 100644 --- a/src/runtime/hash64.go +++ b/src/runtime/hash64.go @@ -10,7 +10,7 @@ package runtime import ( - "runtime/internal/math" + "internal/runtime/math" "unsafe" ) diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index b92a213245d4f7..cbb4f67ee87642 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -104,7 +104,7 @@ import ( "internal/goarch" "internal/goos" "internal/runtime/atomic" - "runtime/internal/math" + "internal/runtime/math" "runtime/internal/sys" "unsafe" ) diff --git a/src/runtime/map.go b/src/runtime/map.go index 112084f5a74091..9169d5733eef4f 100644 --- a/src/runtime/map.go +++ b/src/runtime/map.go @@ -57,7 +57,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/math" + "internal/runtime/math" "unsafe" ) diff --git a/src/runtime/rand.go b/src/runtime/rand.go index a66553feebe3ed..11be6552aa3314 100644 --- a/src/runtime/rand.go +++ b/src/runtime/rand.go @@ -9,7 +9,7 @@ package runtime import ( "internal/chacha8rand" "internal/goarch" - "runtime/internal/math" + "internal/runtime/math" "unsafe" _ "unsafe" // for go:linkname ) diff --git a/src/runtime/slice.go b/src/runtime/slice.go index 78475735af3d57..65883ea2f3a327 100644 --- a/src/runtime/slice.go +++ b/src/runtime/slice.go @@ -7,7 +7,7 @@ package runtime import ( "internal/abi" "internal/goarch" - "runtime/internal/math" + "internal/runtime/math" "runtime/internal/sys" "unsafe" ) diff --git a/src/runtime/unsafe.go b/src/runtime/unsafe.go index ca428b56e07922..85fc8b61ebc0ef 100644 --- a/src/runtime/unsafe.go +++ b/src/runtime/unsafe.go @@ -5,7 +5,7 @@ package runtime import ( - "runtime/internal/math" + "internal/runtime/math" "unsafe" ) From fc5073bc155545dde4856cccdfcbb31880d1eb66 Mon Sep 17 00:00:00 2001 From: David Chase Date: Tue, 23 Jul 2024 11:43:23 -0400 Subject: [PATCH 024/866] runtime,internal: move runtime/internal/sys to internal/runtime/sys Cleanup and friction reduction For #65355. Change-Id: Ia14c9dc584a529a35b97801dd3e95b9acc99a511 Reviewed-on: https://go-review.googlesource.com/c/go/+/600436 Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- .gitignore | 2 +- src/cmd/compile/internal/noder/helpers.go | 4 +-- src/cmd/compile/internal/ssagen/ssa.go | 26 +++++++++---------- src/cmd/compile/internal/test/inl_test.go | 8 +++--- src/cmd/compile/internal/types/pkg.go | 2 +- src/cmd/compile/internal/types/type.go | 2 +- src/cmd/dist/build.go | 4 +-- src/cmd/distpack/pack.go | 2 +- src/cmd/distpack/test.go | 2 +- src/cmd/go/go_test.go | 6 ++--- src/cmd/internal/objabi/pkgspecial.go | 2 +- src/cmd/internal/objabi/stack.go | 2 +- src/go/build/deps_test.go | 2 +- src/internal/coverage/pkid.go | 4 +-- .../runtime}/sys/consts.go | 0 .../runtime}/sys/consts_norace.go | 0 .../runtime}/sys/consts_race.go | 0 .../runtime}/sys/intrinsics.go | 0 .../runtime}/sys/intrinsics_test.go | 2 +- .../internal => internal/runtime}/sys/nih.go | 0 .../internal => internal/runtime}/sys/sys.go | 0 src/reflect/deepequal.go | 2 +- src/runtime/HACKING.md | 2 +- src/runtime/arena.go | 2 +- src/runtime/cgo/cgo.go | 2 +- src/runtime/cgocall.go | 2 +- src/runtime/cpuprof.go | 2 +- src/runtime/debuglog.go | 2 +- src/runtime/export_test.go | 2 +- src/runtime/histogram.go | 2 +- src/runtime/iface.go | 2 +- src/runtime/malloc.go | 6 ++--- src/runtime/mbitmap.go | 2 +- src/runtime/mcache.go | 2 +- src/runtime/mcentral.go | 2 +- src/runtime/mcheckmark.go | 2 +- src/runtime/mfinal.go | 2 +- src/runtime/mfixalloc.go | 4 +-- src/runtime/mgcmark.go | 2 +- src/runtime/mgcscavenge.go | 2 +- src/runtime/mgcstack.go | 2 +- src/runtime/mgcwork.go | 2 +- src/runtime/mheap.go | 2 +- src/runtime/mpagecache.go | 2 +- src/runtime/mpallocbits.go | 2 +- src/runtime/mprof.go | 2 +- src/runtime/netpoll.go | 4 +-- src/runtime/panic.go | 2 +- src/runtime/proc.go | 2 +- src/runtime/runtime2.go | 2 +- src/runtime/signal_arm64.go | 2 +- src/runtime/signal_linux_s390x.go | 2 +- src/runtime/signal_mipsx.go | 2 +- src/runtime/signal_ppc64x.go | 2 +- src/runtime/signal_unix.go | 2 +- src/runtime/signal_windows.go | 2 +- src/runtime/slice.go | 4 +-- src/runtime/stack.go | 2 +- src/runtime/stkframe.go | 2 +- src/runtime/symtab.go | 2 +- src/runtime/symtabinl_test.go | 2 +- src/runtime/sys_wasm.go | 2 +- src/runtime/time.go | 2 +- src/runtime/traceallocfree.go | 2 +- src/runtime/traceback.go | 2 +- src/runtime/tracebuf.go | 2 +- src/runtime/traceevent.go | 2 +- src/runtime/tracemap.go | 2 +- src/runtime/traceregion.go | 2 +- test/intrinsic.dir/main.go | 2 +- 70 files changed, 89 insertions(+), 89 deletions(-) rename src/{runtime/internal => internal/runtime}/sys/consts.go (100%) rename src/{runtime/internal => internal/runtime}/sys/consts_norace.go (100%) rename src/{runtime/internal => internal/runtime}/sys/consts_race.go (100%) rename src/{runtime/internal => internal/runtime}/sys/intrinsics.go (100%) rename src/{runtime/internal => internal/runtime}/sys/intrinsics_test.go (97%) rename src/{runtime/internal => internal/runtime}/sys/nih.go (100%) rename src/{runtime/internal => internal/runtime}/sys/sys.go (100%) diff --git a/.gitignore b/.gitignore index 7978d68b76edd7..c6512e64a4ef39 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,7 @@ _testmain.go /src/go/build/zcgo.go /src/go/doc/headscan /src/internal/buildcfg/zbootstrap.go -/src/runtime/internal/sys/zversion.go +/src/internal/runtime/sys/zversion.go /src/unicode/maketables /src/time/tzdata/zzipdata.go /test.out diff --git a/src/cmd/compile/internal/noder/helpers.go b/src/cmd/compile/internal/noder/helpers.go index 0bff71e65845ef..45512706d2c590 100644 --- a/src/cmd/compile/internal/noder/helpers.go +++ b/src/cmd/compile/internal/noder/helpers.go @@ -114,11 +114,11 @@ func isTypeParam(t types2.Type) bool { } // isNotInHeap reports whether typ is or contains an element of type -// runtime/internal/sys.NotInHeap. +// internal/runtime/sys.NotInHeap. func isNotInHeap(typ types2.Type) bool { typ = types2.Unalias(typ) if named, ok := typ.(*types2.Named); ok { - if obj := named.Obj(); obj.Name() == "nih" && obj.Pkg().Path() == "runtime/internal/sys" { + if obj := named.Obj(); obj.Name() == "nih" && obj.Pkg().Path() == "internal/runtime/sys" { return true } typ = named.Underlying() diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index d0ca5b7f30f13b..e6d5a139572767 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -4287,13 +4287,13 @@ func InitTables() { // make it worthwhile as an intrinsic brev_arch = append(brev_arch, sys.PPC64) } - /******** runtime/internal/sys ********/ - addF("runtime/internal/sys", "Bswap32", + /******** internal/runtime/sys ********/ + addF("internal/runtime/sys", "Bswap32", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpBswap32, types.Types[types.TUINT32], args[0]) }, brev_arch...) - addF("runtime/internal/sys", "Bswap64", + addF("internal/runtime/sys", "Bswap64", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpBswap64, types.Types[types.TUINT64], args[0]) }, @@ -4309,9 +4309,9 @@ func InitTables() { // Make Prefetch intrinsics for supported platforms // On the unsupported platforms stub function will be eliminated - addF("runtime/internal/sys", "Prefetch", makePrefetchFunc(ssa.OpPrefetchCache), + addF("internal/runtime/sys", "Prefetch", makePrefetchFunc(ssa.OpPrefetchCache), sys.AMD64, sys.ARM64, sys.PPC64) - addF("runtime/internal/sys", "PrefetchStreamed", makePrefetchFunc(ssa.OpPrefetchCacheStreamed), + addF("internal/runtime/sys", "PrefetchStreamed", makePrefetchFunc(ssa.OpPrefetchCacheStreamed), sys.AMD64, sys.ARM64, sys.PPC64) /******** internal/runtime/atomic ********/ @@ -4837,8 +4837,8 @@ func InitTables() { return s.newValue1(ssa.OpCtz64, types.Types[types.TINT], y) }, sys.S390X) - alias("math/bits", "ReverseBytes64", "runtime/internal/sys", "Bswap64", all...) - alias("math/bits", "ReverseBytes32", "runtime/internal/sys", "Bswap32", all...) + alias("math/bits", "ReverseBytes64", "internal/runtime/sys", "Bswap64", all...) + alias("math/bits", "ReverseBytes32", "internal/runtime/sys", "Bswap32", all...) // ReverseBytes inlines correctly, no need to intrinsify it. // Nothing special is needed for targets where ReverseBytes16 lowers to a rotate // On Power10, 16-bit rotate is not available so use BRH instruction @@ -5051,12 +5051,12 @@ func InitTables() { sys.AMD64) alias("math/bits", "Div", "math/bits", "Div64", sys.ArchAMD64) - alias("runtime/internal/sys", "TrailingZeros8", "math/bits", "TrailingZeros8", all...) - alias("runtime/internal/sys", "TrailingZeros32", "math/bits", "TrailingZeros32", all...) - alias("runtime/internal/sys", "TrailingZeros64", "math/bits", "TrailingZeros64", all...) - alias("runtime/internal/sys", "Len8", "math/bits", "Len8", all...) - alias("runtime/internal/sys", "Len64", "math/bits", "Len64", all...) - alias("runtime/internal/sys", "OnesCount64", "math/bits", "OnesCount64", all...) + alias("internal/runtime/sys", "TrailingZeros8", "math/bits", "TrailingZeros8", all...) + alias("internal/runtime/sys", "TrailingZeros32", "math/bits", "TrailingZeros32", all...) + alias("internal/runtime/sys", "TrailingZeros64", "math/bits", "TrailingZeros64", all...) + alias("internal/runtime/sys", "Len8", "math/bits", "Len8", all...) + alias("internal/runtime/sys", "Len64", "math/bits", "Len64", all...) + alias("internal/runtime/sys", "OnesCount64", "math/bits", "OnesCount64", all...) /******** sync/atomic ********/ diff --git a/src/cmd/compile/internal/test/inl_test.go b/src/cmd/compile/internal/test/inl_test.go index 462626958223fc..58f5df953b46d4 100644 --- a/src/cmd/compile/internal/test/inl_test.go +++ b/src/cmd/compile/internal/test/inl_test.go @@ -97,7 +97,7 @@ func TestIntendedInlining(t *testing.T) { "traceLocker.ok", "traceEnabled", }, - "runtime/internal/sys": {}, + "internal/runtime/sys": {}, "internal/runtime/math": { "MulUintptr", }, @@ -246,9 +246,9 @@ func TestIntendedInlining(t *testing.T) { if runtime.GOARCH != "386" { // As explained above, TrailingZeros64 and TrailingZeros32 are not Go code on 386. // The same applies to Bswap32. - want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "TrailingZeros64") - want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "TrailingZeros32") - want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "Bswap32") + want["internal/runtime/sys"] = append(want["internal/runtime/sys"], "TrailingZeros64") + want["internal/runtime/sys"] = append(want["internal/runtime/sys"], "TrailingZeros32") + want["internal/runtime/sys"] = append(want["internal/runtime/sys"], "Bswap32") } if runtime.GOARCH == "amd64" || runtime.GOARCH == "arm64" || runtime.GOARCH == "loong64" || runtime.GOARCH == "mips" || runtime.GOARCH == "mips64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "s390x" { // internal/runtime/atomic.Loaduintptr is only intrinsified on these platforms. diff --git a/src/cmd/compile/internal/types/pkg.go b/src/cmd/compile/internal/types/pkg.go index c6ce7889afbb7b..9f64b84db4566c 100644 --- a/src/cmd/compile/internal/types/pkg.go +++ b/src/cmd/compile/internal/types/pkg.go @@ -16,7 +16,7 @@ import ( var pkgMap = make(map[string]*Pkg) type Pkg struct { - Path string // string literal used in import statement, e.g. "runtime/internal/sys" + Path string // string literal used in import statement, e.g. "internal/runtime/sys" Name string // package name, e.g. "sys" Prefix string // escaped path for use in symbol table Syms map[string]*Sym diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index 88052dc97b6791..41fdefe830a352 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -1650,7 +1650,7 @@ func NewNamed(obj Object) *Type { t.SetIsShape(true) t.SetHasShape(true) } - if sym.Pkg.Path == "runtime/internal/sys" && sym.Name == "nih" { + if sym.Pkg.Path == "internal/runtime/sys" && sym.Name == "nih" { // Recognize the special not-in-heap type. Any type including // this type will also be not-in-heap. // This logic is duplicated in go/types and diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index c033beabdbb374..910d5290e592d9 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -639,7 +639,7 @@ var gentab = []struct { }{ {"go/build", "zcgo.go", mkzcgo}, {"cmd/go/internal/cfg", "zdefaultcc.go", mkzdefaultcc}, - {"runtime/internal/sys", "zversion.go", mkzversion}, + {"internal/runtime/sys", "zversion.go", mkzversion}, {"time/tzdata", "zzipdata.go", mktzdata}, } @@ -1707,7 +1707,7 @@ func checkNotStale(env []string, goBinary string, targets ...string) { out := runEnv(workdir, CheckExit, env, append(goCmd, targets...)...) if strings.Contains(out, "\tSTALE ") { os.Setenv("GODEBUG", "gocachehash=1") - for _, target := range []string{"runtime/internal/sys", "cmd/dist", "cmd/link"} { + for _, target := range []string{"internal/runtime/sys", "cmd/dist", "cmd/link"} { if strings.Contains(out, "STALE "+target) { run(workdir, ShowOutput|CheckExit, goBinary, "list", "-f={{.ImportPath}} {{.Stale}}", target) break diff --git a/src/cmd/distpack/pack.go b/src/cmd/distpack/pack.go index 552524936699f7..a4f18da8bd4bc6 100644 --- a/src/cmd/distpack/pack.go +++ b/src/cmd/distpack/pack.go @@ -132,7 +132,7 @@ func main() { // Generated during cmd/dist. See ../dist/build.go:/gentab. "src/cmd/go/internal/cfg/zdefaultcc.go", "src/go/build/zcgo.go", - "src/runtime/internal/sys/zversion.go", + "src/internal/runtime/sys/zversion.go", "src/time/tzdata/zzipdata.go", // Generated during cmd/dist by bootstrapBuildTools. diff --git a/src/cmd/distpack/test.go b/src/cmd/distpack/test.go index 22b54b5fe123bb..108907d0e6bbee 100644 --- a/src/cmd/distpack/test.go +++ b/src/cmd/distpack/test.go @@ -35,7 +35,7 @@ var srcRules = []testRule{ {name: "go/pkg/**", exclude: true}, {name: "go/src/cmd/dist/dist", exclude: true}, {name: "go/src/cmd/dist/dist.exe", exclude: true}, - {name: "go/src/runtime/internal/sys/zversion.go", exclude: true}, + {name: "go/src/internal/runtime/sys/zversion.go", exclude: true}, {name: "go/src/time/tzdata/zzipdata.go", exclude: true}, } diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index b45a905880b877..5720a397f7a566 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -943,14 +943,14 @@ func TestNewReleaseRebuildsStalePackagesInGOPATH(t *testing.T) { tg.run("install", "p1") tg.wantNotStale("p1", "", "./testgo list claims p1 is stale, incorrectly, before any changes") - // Changing mtime of runtime/internal/sys/sys.go + // Changing mtime of internal/runtime/sys/sys.go // should have no effect: only the content matters. // In fact this should be true even outside a release branch. - sys := tg.path("goroot/src/runtime/internal/sys/sys.go") + sys := tg.path("goroot/src/internal/runtime/sys/sys.go") tg.sleep() restore := addVar(sys, 0) restore() - tg.wantNotStale("p1", "", "./testgo list claims p1 is stale, incorrectly, after updating mtime of runtime/internal/sys/sys.go") + tg.wantNotStale("p1", "", "./testgo list claims p1 is stale, incorrectly, after updating mtime of internal/runtime/sys/sys.go") // But changing content of any file should have an effect. // Previously zversion.go was the only one that mattered; diff --git a/src/cmd/internal/objabi/pkgspecial.go b/src/cmd/internal/objabi/pkgspecial.go index 2772226c9394ff..f288096a025f07 100644 --- a/src/cmd/internal/objabi/pkgspecial.go +++ b/src/cmd/internal/objabi/pkgspecial.go @@ -48,7 +48,7 @@ var runtimePkgs = []string{ "internal/runtime/atomic", "internal/runtime/exithook", "internal/runtime/math", - "runtime/internal/sys", + "internal/runtime/sys", "internal/runtime/syscall", "internal/abi", diff --git a/src/cmd/internal/objabi/stack.go b/src/cmd/internal/objabi/stack.go index 7c7ff4e0586851..d50a7c1afd82b3 100644 --- a/src/cmd/internal/objabi/stack.go +++ b/src/cmd/internal/objabi/stack.go @@ -18,7 +18,7 @@ func StackNosplit(race bool) int { // stack guard size. Larger multipliers are used for non-optimized // builds that have larger stack frames or for specific targets. func stackGuardMultiplier(race bool) int { - // This arithmetic must match that in runtime/internal/sys/consts.go:StackGuardMultiplier. + // This arithmetic must match that in internal/runtime/sys/consts.go:StackGuardMultiplier. n := 1 // On AIX, a larger stack is needed for syscalls. if buildcfg.GOOS == "aix" { diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 9e22955edafbd0..a0bcb4f27a0be0 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -83,7 +83,7 @@ var depsRules = ` < internal/stringslite < internal/itoa < internal/unsafeheader - < runtime/internal/sys + < internal/runtime/sys < internal/runtime/syscall < internal/runtime/atomic < internal/runtime/exithook diff --git a/src/internal/coverage/pkid.go b/src/internal/coverage/pkid.go index a764cc4205e9f7..46de9fd0ced2e0 100644 --- a/src/internal/coverage/pkid.go +++ b/src/internal/coverage/pkid.go @@ -26,7 +26,7 @@ package coverage // slot: 1 path='internal/goarch' hard-coded id: 2 // slot: 2 path='internal/runtime/atomic' hard-coded id: 3 // slot: 3 path='internal/goos' -// slot: 4 path='runtime/internal/sys' hard-coded id: 5 +// slot: 4 path='internal/runtime/sys' hard-coded id: 5 // slot: 5 path='internal/abi' hard-coded id: 4 // slot: 6 path='internal/runtime/math' hard-coded id: 6 // slot: 7 path='internal/bytealg' hard-coded id: 7 @@ -50,7 +50,7 @@ var rtPkgs = [...]string{ "internal/runtime/atomic", "internal/goos", "internal/chacha8rand", - "runtime/internal/sys", + "internal/runtime/sys", "internal/abi", "internal/runtime/math", "internal/bytealg", diff --git a/src/runtime/internal/sys/consts.go b/src/internal/runtime/sys/consts.go similarity index 100% rename from src/runtime/internal/sys/consts.go rename to src/internal/runtime/sys/consts.go diff --git a/src/runtime/internal/sys/consts_norace.go b/src/internal/runtime/sys/consts_norace.go similarity index 100% rename from src/runtime/internal/sys/consts_norace.go rename to src/internal/runtime/sys/consts_norace.go diff --git a/src/runtime/internal/sys/consts_race.go b/src/internal/runtime/sys/consts_race.go similarity index 100% rename from src/runtime/internal/sys/consts_race.go rename to src/internal/runtime/sys/consts_race.go diff --git a/src/runtime/internal/sys/intrinsics.go b/src/internal/runtime/sys/intrinsics.go similarity index 100% rename from src/runtime/internal/sys/intrinsics.go rename to src/internal/runtime/sys/intrinsics.go diff --git a/src/runtime/internal/sys/intrinsics_test.go b/src/internal/runtime/sys/intrinsics_test.go similarity index 97% rename from src/runtime/internal/sys/intrinsics_test.go rename to src/internal/runtime/sys/intrinsics_test.go index 67998850019f12..d466f3e53966dc 100644 --- a/src/runtime/internal/sys/intrinsics_test.go +++ b/src/internal/runtime/sys/intrinsics_test.go @@ -5,7 +5,7 @@ package sys_test import ( - "runtime/internal/sys" + "internal/runtime/sys" "testing" ) diff --git a/src/runtime/internal/sys/nih.go b/src/internal/runtime/sys/nih.go similarity index 100% rename from src/runtime/internal/sys/nih.go rename to src/internal/runtime/sys/nih.go diff --git a/src/runtime/internal/sys/sys.go b/src/internal/runtime/sys/sys.go similarity index 100% rename from src/runtime/internal/sys/sys.go rename to src/internal/runtime/sys/sys.go diff --git a/src/reflect/deepequal.go b/src/reflect/deepequal.go index 502ea9f146be27..041c3e1f7e016c 100644 --- a/src/reflect/deepequal.go +++ b/src/reflect/deepequal.go @@ -41,7 +41,7 @@ func deepValueEqual(v1, v2 Value, visited map[visit]bool) bool { case Pointer: if !v1.typ().Pointers() { // not-in-heap pointers can't be cyclic. - // At least, all of our current uses of runtime/internal/sys.NotInHeap + // At least, all of our current uses of internal/runtime/sys.NotInHeap // have that property. The runtime ones aren't cyclic (and we don't use // DeepEqual on them anyway), and the cgo-generated ones are // all empty structs. diff --git a/src/runtime/HACKING.md b/src/runtime/HACKING.md index e1a43ba88e3d49..f0c60f3af9e131 100644 --- a/src/runtime/HACKING.md +++ b/src/runtime/HACKING.md @@ -235,7 +235,7 @@ There are three mechanisms for allocating unmanaged memory: objects of the same type. In general, types that are allocated using any of these should be -marked as not in heap by embedding `runtime/internal/sys.NotInHeap`. +marked as not in heap by embedding `internal/runtime/sys.NotInHeap`. Objects that are allocated in unmanaged memory **must not** contain heap pointers unless the following rules are also obeyed: diff --git a/src/runtime/arena.go b/src/runtime/arena.go index 96197099ca59c9..936e3604bf3e57 100644 --- a/src/runtime/arena.go +++ b/src/runtime/arena.go @@ -87,7 +87,7 @@ import ( "internal/goarch" "internal/runtime/atomic" "internal/runtime/math" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/cgo/cgo.go b/src/runtime/cgo/cgo.go index 1e3a50291838d1..c37135fbbe4b16 100644 --- a/src/runtime/cgo/cgo.go +++ b/src/runtime/cgo/cgo.go @@ -32,7 +32,7 @@ package cgo */ import "C" -import "runtime/internal/sys" +import "internal/runtime/sys" // Incomplete is used specifically for the semantics of incomplete C types. type Incomplete struct { diff --git a/src/runtime/cgocall.go b/src/runtime/cgocall.go index b943b1c2d6b4f8..ae91627972d2ea 100644 --- a/src/runtime/cgocall.go +++ b/src/runtime/cgocall.go @@ -88,7 +88,7 @@ import ( "internal/abi" "internal/goarch" "internal/goexperiment" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/cpuprof.go b/src/runtime/cpuprof.go index 100a78258a2cd8..ea4d3a8cb0bb33 100644 --- a/src/runtime/cpuprof.go +++ b/src/runtime/cpuprof.go @@ -14,7 +14,7 @@ package runtime import ( "internal/abi" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/debuglog.go b/src/runtime/debuglog.go index 695cd204f59278..25186af7e04252 100644 --- a/src/runtime/debuglog.go +++ b/src/runtime/debuglog.go @@ -18,7 +18,7 @@ package runtime import ( "internal/abi" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index d55da1028dbb1c..759463755ac5d9 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -11,7 +11,7 @@ import ( "internal/goarch" "internal/goos" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/histogram.go b/src/runtime/histogram.go index 95230d1f39d5a6..920a9561d23a28 100644 --- a/src/runtime/histogram.go +++ b/src/runtime/histogram.go @@ -6,7 +6,7 @@ package runtime import ( "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/iface.go b/src/runtime/iface.go index 41a10ae01215d8..5316182f4ab24a 100644 --- a/src/runtime/iface.go +++ b/src/runtime/iface.go @@ -8,7 +8,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index cbb4f67ee87642..b24ebec27d2347 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -105,7 +105,7 @@ import ( "internal/goos" "internal/runtime/atomic" "internal/runtime/math" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) @@ -1555,7 +1555,7 @@ var persistentChunks *notInHeap // sysStat must be non-nil. // // Consider marking persistentalloc'd types not in heap by embedding -// runtime/internal/sys.NotInHeap. +// internal/runtime/sys.NotInHeap. func persistentalloc(size, align uintptr, sysStat *sysMemStat) unsafe.Pointer { var p *notInHeap systemstack(func() { @@ -1697,7 +1697,7 @@ func (l *linearAlloc) alloc(size, align uintptr, sysStat *sysMemStat) unsafe.Poi // like sysAlloc or persistentAlloc. // // In general, it's better to use real types which embed -// runtime/internal/sys.NotInHeap, but this serves as a generic type +// internal/runtime/sys.NotInHeap, but this serves as a generic type // for situations where that isn't possible (like in the allocators). // // TODO: Use this as the return type of sysAlloc, persistentAlloc, etc? diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go index 689fac103ccff6..a25995f46fc028 100644 --- a/src/runtime/mbitmap.go +++ b/src/runtime/mbitmap.go @@ -59,7 +59,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mcache.go b/src/runtime/mcache.go index e8da133a69490e..97a5f70e9c78f7 100644 --- a/src/runtime/mcache.go +++ b/src/runtime/mcache.go @@ -6,7 +6,7 @@ package runtime import ( "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mcentral.go b/src/runtime/mcentral.go index bf597e1936da49..1a4819bc2c43a5 100644 --- a/src/runtime/mcentral.go +++ b/src/runtime/mcentral.go @@ -14,7 +14,7 @@ package runtime import ( "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" ) // Central list of free objects of a given size. diff --git a/src/runtime/mcheckmark.go b/src/runtime/mcheckmark.go index 258f8892727c04..f5560cf50f1fdc 100644 --- a/src/runtime/mcheckmark.go +++ b/src/runtime/mcheckmark.go @@ -15,7 +15,7 @@ package runtime import ( "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mfinal.go b/src/runtime/mfinal.go index 78313fb74c6b78..a926a8ec357c4f 100644 --- a/src/runtime/mfinal.go +++ b/src/runtime/mfinal.go @@ -10,7 +10,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mfixalloc.go b/src/runtime/mfixalloc.go index 7760ada3977adf..be977af7372539 100644 --- a/src/runtime/mfixalloc.go +++ b/src/runtime/mfixalloc.go @@ -9,7 +9,7 @@ package runtime import ( - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) @@ -27,7 +27,7 @@ import ( // smashed by freeing and reallocating. // // Consider marking fixalloc'd types not in heap by embedding -// runtime/internal/sys.NotInHeap. +// internal/runtime/sys.NotInHeap. type fixalloc struct { size uintptr first func(arg, p unsafe.Pointer) // called first time p is returned diff --git a/src/runtime/mgcmark.go b/src/runtime/mgcmark.go index 61e917df41089b..9a48d15552f32b 100644 --- a/src/runtime/mgcmark.go +++ b/src/runtime/mgcmark.go @@ -10,7 +10,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mgcscavenge.go b/src/runtime/mgcscavenge.go index 4f0bd9c28dc015..3d869ecdd20f7c 100644 --- a/src/runtime/mgcscavenge.go +++ b/src/runtime/mgcscavenge.go @@ -93,7 +93,7 @@ package runtime import ( "internal/goos" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mgcstack.go b/src/runtime/mgcstack.go index f4a83f5f59c27a..bc5911f1414e9e 100644 --- a/src/runtime/mgcstack.go +++ b/src/runtime/mgcstack.go @@ -96,7 +96,7 @@ package runtime import ( "internal/goarch" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mgcwork.go b/src/runtime/mgcwork.go index b91a6bd464d7d5..2d66fa400231de 100644 --- a/src/runtime/mgcwork.go +++ b/src/runtime/mgcwork.go @@ -7,7 +7,7 @@ package runtime import ( "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index 35fd08af50c3c1..e4b1fa0574d0e9 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -12,7 +12,7 @@ import ( "internal/cpu" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mpagecache.go b/src/runtime/mpagecache.go index 245b0cbfef2cf4..0ed3e80c30d1d2 100644 --- a/src/runtime/mpagecache.go +++ b/src/runtime/mpagecache.go @@ -5,7 +5,7 @@ package runtime import ( - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/mpallocbits.go b/src/runtime/mpallocbits.go index d8a9d25789d69a..e8e70f36bee861 100644 --- a/src/runtime/mpallocbits.go +++ b/src/runtime/mpallocbits.go @@ -5,7 +5,7 @@ package runtime import ( - "runtime/internal/sys" + "internal/runtime/sys" ) // pageBits is a bitmap representing one bit per page in a palloc chunk. diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index 006274757e66f1..a9adc7b6f74566 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -12,7 +12,7 @@ import ( "internal/goarch" "internal/profilerecord" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/netpoll.go b/src/runtime/netpoll.go index 7b37d91b24a4d4..36b9edfe21780a 100644 --- a/src/runtime/netpoll.go +++ b/src/runtime/netpoll.go @@ -8,7 +8,7 @@ package runtime import ( "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) @@ -714,7 +714,7 @@ func (c *pollCache) alloc() *pollDesc { // makeArg converts pd to an interface{}. // makeArg does not do any allocation. Normally, such // a conversion requires an allocation because pointers to -// types which embed runtime/internal/sys.NotInHeap (which pollDesc is) +// types which embed internal/runtime/sys.NotInHeap (which pollDesc is) // must be stored in interfaces indirectly. See issue 42076. func (pd *pollDesc) makeArg() (i any) { x := (*eface)(unsafe.Pointer(&i)) diff --git a/src/runtime/panic.go b/src/runtime/panic.go index 98e96b12bf522c..bd1ea096aa2a01 100644 --- a/src/runtime/panic.go +++ b/src/runtime/panic.go @@ -8,8 +8,8 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" + "internal/runtime/sys" "internal/stringslite" - "runtime/internal/sys" "unsafe" ) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index c4f175b0b76b22..2cf8a31971f951 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -11,8 +11,8 @@ import ( "internal/goos" "internal/runtime/atomic" "internal/runtime/exithook" + "internal/runtime/sys" "internal/stringslite" - "runtime/internal/sys" "unsafe" ) diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 4a789639611fb7..62ed77aae56fed 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -9,7 +9,7 @@ import ( "internal/chacha8rand" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/signal_arm64.go b/src/runtime/signal_arm64.go index 4a96b3c2e70681..af7d29f9de1d31 100644 --- a/src/runtime/signal_arm64.go +++ b/src/runtime/signal_arm64.go @@ -9,7 +9,7 @@ package runtime import ( "internal/abi" "internal/goarch" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/signal_linux_s390x.go b/src/runtime/signal_linux_s390x.go index 18c3b115efc87f..54e9d1fb9df616 100644 --- a/src/runtime/signal_linux_s390x.go +++ b/src/runtime/signal_linux_s390x.go @@ -7,7 +7,7 @@ package runtime import ( "internal/abi" "internal/goarch" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/signal_mipsx.go b/src/runtime/signal_mipsx.go index ba92655152e84b..924e654c6cd503 100644 --- a/src/runtime/signal_mipsx.go +++ b/src/runtime/signal_mipsx.go @@ -8,7 +8,7 @@ package runtime import ( "internal/abi" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/signal_ppc64x.go b/src/runtime/signal_ppc64x.go index b5722f99c66a22..20f874c2ec438d 100644 --- a/src/runtime/signal_ppc64x.go +++ b/src/runtime/signal_ppc64x.go @@ -8,7 +8,7 @@ package runtime import ( "internal/abi" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go index 8ba498bdb238d5..a42972bb35686d 100644 --- a/src/runtime/signal_unix.go +++ b/src/runtime/signal_unix.go @@ -9,7 +9,7 @@ package runtime import ( "internal/abi" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/signal_windows.go b/src/runtime/signal_windows.go index 4b7960c1f01130..b0c653ee46dd0b 100644 --- a/src/runtime/signal_windows.go +++ b/src/runtime/signal_windows.go @@ -6,7 +6,7 @@ package runtime import ( "internal/abi" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/slice.go b/src/runtime/slice.go index 65883ea2f3a327..ecc2e2921b3bbd 100644 --- a/src/runtime/slice.go +++ b/src/runtime/slice.go @@ -8,7 +8,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/math" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) @@ -18,7 +18,7 @@ type slice struct { cap int } -// A notInHeapSlice is a slice backed by runtime/internal/sys.NotInHeap memory. +// A notInHeapSlice is a slice backed by internal/runtime/sys.NotInHeap memory. type notInHeapSlice struct { array *notInHeap len int diff --git a/src/runtime/stack.go b/src/runtime/stack.go index cdf859a7ff1342..bdfeb21c18e62f 100644 --- a/src/runtime/stack.go +++ b/src/runtime/stack.go @@ -10,7 +10,7 @@ import ( "internal/goarch" "internal/goos" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/stkframe.go b/src/runtime/stkframe.go index 42b69477511da6..2bab5a3a0ea8d0 100644 --- a/src/runtime/stkframe.go +++ b/src/runtime/stkframe.go @@ -7,7 +7,7 @@ package runtime import ( "internal/abi" "internal/goarch" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/symtab.go b/src/runtime/symtab.go index 10cdcf9c6ee8b4..f889d669926695 100644 --- a/src/runtime/symtab.go +++ b/src/runtime/symtab.go @@ -8,7 +8,7 @@ import ( "internal/abi" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/symtabinl_test.go b/src/runtime/symtabinl_test.go index 3c7cb2e595b99e..db682e0c9caa8c 100644 --- a/src/runtime/symtabinl_test.go +++ b/src/runtime/symtabinl_test.go @@ -6,8 +6,8 @@ package runtime import ( "internal/abi" + "internal/runtime/sys" "internal/stringslite" - "runtime/internal/sys" ) func XTestInlineUnwinder(t TestingT) { diff --git a/src/runtime/sys_wasm.go b/src/runtime/sys_wasm.go index 27f9432bd45d59..f88b992e9c39a3 100644 --- a/src/runtime/sys_wasm.go +++ b/src/runtime/sys_wasm.go @@ -6,7 +6,7 @@ package runtime import ( "internal/goarch" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/time.go b/src/runtime/time.go index fc664f49eb8d7c..79f0514c6eec0a 100644 --- a/src/runtime/time.go +++ b/src/runtime/time.go @@ -9,7 +9,7 @@ package runtime import ( "internal/abi" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/traceallocfree.go b/src/runtime/traceallocfree.go index e6a2a79c691bb8..985d90eacb933d 100644 --- a/src/runtime/traceallocfree.go +++ b/src/runtime/traceallocfree.go @@ -8,7 +8,7 @@ package runtime import ( "internal/abi" - "runtime/internal/sys" + "internal/runtime/sys" ) // Batch type values for the alloc/free experiment. diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go index 03c02f77713af7..8946ec2528424b 100644 --- a/src/runtime/traceback.go +++ b/src/runtime/traceback.go @@ -8,8 +8,8 @@ import ( "internal/abi" "internal/bytealg" "internal/goarch" + "internal/runtime/sys" "internal/stringslite" - "runtime/internal/sys" "unsafe" ) diff --git a/src/runtime/tracebuf.go b/src/runtime/tracebuf.go index db4adf53e98660..908a63d273958d 100644 --- a/src/runtime/tracebuf.go +++ b/src/runtime/tracebuf.go @@ -7,7 +7,7 @@ package runtime import ( - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/traceevent.go b/src/runtime/traceevent.go index 2a869fb515094c..9adbc52fd3dea8 100644 --- a/src/runtime/traceevent.go +++ b/src/runtime/traceevent.go @@ -8,7 +8,7 @@ package runtime import ( "internal/abi" - "runtime/internal/sys" + "internal/runtime/sys" ) // Event types in the trace, args are given in square brackets. diff --git a/src/runtime/tracemap.go b/src/runtime/tracemap.go index 5b2718c8d685c3..9efa325c112984 100644 --- a/src/runtime/tracemap.go +++ b/src/runtime/tracemap.go @@ -19,7 +19,7 @@ import ( "internal/cpu" "internal/goarch" "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/src/runtime/traceregion.go b/src/runtime/traceregion.go index 43eef9c92bb903..b45093ec862b8a 100644 --- a/src/runtime/traceregion.go +++ b/src/runtime/traceregion.go @@ -8,7 +8,7 @@ package runtime import ( "internal/runtime/atomic" - "runtime/internal/sys" + "internal/runtime/sys" "unsafe" ) diff --git a/test/intrinsic.dir/main.go b/test/intrinsic.dir/main.go index 951aa159d6709a..21e3eff80564ab 100644 --- a/test/intrinsic.dir/main.go +++ b/test/intrinsic.dir/main.go @@ -6,7 +6,7 @@ package main import ( "fmt" - T "runtime/internal/sys" + T "internal/runtime/sys" ) var A = []uint64{0x0102030405060708, 0x1122334455667788} From d567ea652a6da310c5ede4ab68012cddc3baa45a Mon Sep 17 00:00:00 2001 From: Martin Garton Date: Mon, 17 Jun 2024 12:44:36 +0000 Subject: [PATCH 025/866] encoding/binary: add missing test helper calls Various functions in binary_test.go were missing some t.Helper() calls, so this adds them in. Change-Id: I0e5894e3c3cf72627203694a32adca51fe1563f5 GitHub-Last-Rev: b28c9255b3b5db3cf18b5406a4e13613d10b8da5 GitHub-Pull-Request: golang/go#63897 Reviewed-on: https://go-review.googlesource.com/c/go/+/539135 Reviewed-by: Dmitri Shuralyov Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: qiu laidongfeng2 <2645477756@qq.com> Auto-Submit: Keith Randall --- src/encoding/binary/binary_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/encoding/binary/binary_test.go b/src/encoding/binary/binary_test.go index 9eb536c990e8cc..9e5fed53b72d52 100644 --- a/src/encoding/binary/binary_test.go +++ b/src/encoding/binary/binary_test.go @@ -115,6 +115,7 @@ var res = []int32{0x01020304, 0x05060708} var putbuf = []byte{0, 0, 0, 0, 0, 0, 0, 0} func checkResult(t *testing.T, dir string, order ByteOrder, err error, have, want any) { + t.Helper() if err != nil { t.Errorf("%v %v: %v", dir, order, err) return @@ -183,6 +184,7 @@ var decoders = []struct { } func testRead(t *testing.T, order ByteOrder, b []byte, s1 any) { + t.Helper() for _, dec := range decoders { t.Run(dec.name, func(t *testing.T) { var s2 Struct @@ -193,6 +195,7 @@ func testRead(t *testing.T, order ByteOrder, b []byte, s1 any) { } func testWrite(t *testing.T, order ByteOrder, b []byte, s1 any) { + t.Helper() for _, enc := range encoders { t.Run(enc.name, func(t *testing.T) { buf, err := enc.fn(order, s1) From d15525d596eb49eba058178e3b633b5a2ebb4766 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Tue, 23 Jul 2024 15:16:02 -0400 Subject: [PATCH 026/866] all: update vendored dependencies The Go 1.24 development tree has opened. This is a time to update all golang.org/x/... module versions that contribute packages to the std and cmd modules in the standard library to latest master versions. For #36905. [git-generate] go install golang.org/x/build/cmd/updatestd@latest go install golang.org/x/tools/cmd/bundle@latest updatestd -goroot=$(pwd) -branch=master Change-Id: I5a012af9f041f79ab4d5b30569a154e0c2d1617e Reviewed-on: https://go-review.googlesource.com/c/go/+/600535 Reviewed-by: Dmitri Shuralyov Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Auto-Submit: Dmitri Shuralyov --- src/cmd/go.mod | 20 +- src/cmd/go.sum | 36 +- src/cmd/vendor/golang.org/x/arch/LICENSE | 4 +- src/cmd/vendor/golang.org/x/build/LICENSE | 4 +- src/cmd/vendor/golang.org/x/mod/LICENSE | 4 +- .../vendor/golang.org/x/mod/modfile/rule.go | 80 +- .../vendor/golang.org/x/mod/modfile/work.go | 2 +- src/cmd/vendor/golang.org/x/sync/LICENSE | 4 +- src/cmd/vendor/golang.org/x/sys/LICENSE | 4 +- .../vendor/golang.org/x/sys/unix/mkerrors.sh | 1 + .../golang.org/x/sys/unix/syscall_darwin.go | 12 + .../x/sys/unix/zerrors_darwin_amd64.go | 5 + .../x/sys/unix/zerrors_darwin_arm64.go | 5 + .../x/sys/unix/zsyscall_darwin_amd64.go | 48 + .../x/sys/unix/zsyscall_darwin_amd64.s | 10 + .../x/sys/unix/zsyscall_darwin_arm64.go | 48 + .../x/sys/unix/zsyscall_darwin_arm64.s | 10 + .../x/sys/windows/security_windows.go | 2 +- .../x/sys/windows/syscall_windows.go | 12 +- .../golang.org/x/sys/windows/types_windows.go | 27 +- .../x/sys/windows/zsyscall_windows.go | 49 +- src/cmd/vendor/golang.org/x/term/LICENSE | 4 +- src/cmd/vendor/golang.org/x/text/LICENSE | 4 +- src/cmd/vendor/golang.org/x/tools/LICENSE | 4 +- .../go/analysis/passes/asmdecl/asmdecl.go | 2 +- .../analysis/passes/stringintconv/string.go | 22 +- .../x/tools/go/ast/astutil/enclosing.go | 24 +- .../golang.org/x/tools/go/ast/astutil/util.go | 1 + .../x/tools/go/types/objectpath/objectpath.go | 59 +- .../internal/analysisinternal/analysis.go | 8 +- .../x/tools/internal/bisect/bisect.go | 6 +- .../x/tools/internal/typeparams/free.go | 3 +- .../x/tools/internal/typesinternal/types.go | 15 + src/cmd/vendor/modules.txt | 18 +- src/go.mod | 10 +- src/go.sum | 16 +- src/net/http/h2_bundle.go | 4 - src/vendor/golang.org/x/crypto/LICENSE | 4 +- .../chacha20poly1305/chacha20poly1305.go | 2 +- .../x/crypto/cryptobyte/asn1/asn1.go | 2 +- .../golang.org/x/crypto/cryptobyte/string.go | 2 +- src/vendor/golang.org/x/crypto/hkdf/hkdf.go | 2 +- src/vendor/golang.org/x/crypto/sha3/doc.go | 2 +- src/vendor/golang.org/x/crypto/sha3/hashes.go | 8 + .../golang.org/x/crypto/sha3/keccakf_amd64.s | 5787 +++++++++++++++-- .../golang.org/x/crypto/sha3/register.go | 18 - src/vendor/golang.org/x/net/LICENSE | 4 +- src/vendor/golang.org/x/sys/LICENSE | 4 +- src/vendor/golang.org/x/sys/cpu/cpu.go | 2 + src/vendor/golang.org/x/sys/cpu/cpu_arm64.go | 12 + .../golang.org/x/sys/cpu/cpu_linux_arm64.go | 5 + src/vendor/golang.org/x/text/LICENSE | 4 +- src/vendor/modules.txt | 10 +- 53 files changed, 5908 insertions(+), 547 deletions(-) delete mode 100644 src/vendor/golang.org/x/crypto/sha3/register.go diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 49f02012d3103a..d30c2604d4c13b 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -1,21 +1,21 @@ module cmd -go 1.23 +go 1.24 require ( github.com/google/pprof v0.0.0-20240528025155-186aa0362fba - golang.org/x/arch v0.8.0 - golang.org/x/build v0.0.0-20240603162849-5dfbda438323 - golang.org/x/mod v0.19.0 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.22.0 - golang.org/x/telemetry v0.0.0-20240717194752-0b706e19b701 - golang.org/x/term v0.20.0 - golang.org/x/tools v0.22.1-0.20240618181713-f2d2ebe43e72 + golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea + golang.org/x/build v0.0.0-20240722200705-b9910f320300 + golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 + golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 + golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb + golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 + golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 + golang.org/x/tools v0.23.1-0.20240722161640-ec1a81bfec7c ) require ( github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 // indirect rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef // indirect ) diff --git a/src/cmd/go.sum b/src/cmd/go.sum index ee671f95122344..293d2459ab2798 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -6,23 +6,23 @@ github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 h1:KwWnWVW github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68= github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= -golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/build v0.0.0-20240603162849-5dfbda438323 h1:XHj9DzsjpryRW9MnyZq85mQ1dRpSxVC+2TLcMzVZNMo= -golang.org/x/build v0.0.0-20240603162849-5dfbda438323/go.mod h1:yz9anu0Z63yrVrqnoOxoJuyBRDwtGUoOFJwtfvs+D+U= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240717194752-0b706e19b701 h1:+bltxAtk8YFEQ61B/lcYQM8e+7XjLwSDbpspVaVYkz8= -golang.org/x/telemetry v0.0.0-20240717194752-0b706e19b701/go.mod h1:amNmu/SBSm2GAF3X+9U2C0epLocdh+r5Z+7oMYO5cLM= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/tools v0.22.1-0.20240618181713-f2d2ebe43e72 h1:YEy0SBExcUlHkZSzP6yv3BTwAUH6FK1XWDyC27AE+0I= -golang.org/x/tools v0.22.1-0.20240618181713-f2d2ebe43e72/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea h1:+dKVGZM+cuxx3fooVKLDxZIPzKR1HYO1Xkd12Je4Z9k= +golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/build v0.0.0-20240722200705-b9910f320300 h1:2Cqg4LnvfD2ZpG8+6KbyYUkweWhNS3SgfcN/eeVseJ0= +golang.org/x/build v0.0.0-20240722200705-b9910f320300/go.mod h1:YsGhg4JUVUWLzdqU2wCrtpRrOveOql6w56FLDHq/CJ4= +golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 h1:54Tg3p/GyzLNJA1jtQxZSn7GRaB5Exi/C9aOk+XpfhM= +golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 h1:8CBy3wSM3/YRXx26NPKZjPBNsnvI9dRRrSlB4Ps0HWY= +golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb h1:IoPT3Y4jg6/QClnwgUYykkW0yKhqjC7VSJkQLzBukfY= +golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 h1:ka7TMW0Mo8QYTXm2hXSQ9fFUXS7Zln3S4pe9aq4JC7w= +golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4/go.mod h1:amNmu/SBSm2GAF3X+9U2C0epLocdh+r5Z+7oMYO5cLM= +golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 h1:BOrQi08eIX3cDgGcMgFONf27MxXigcYa9x+iW5JuCXw= +golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 h1:MlCLrwVF1WvXT14xTzwuKN3u4LpUve8sG/gJUCuBpe8= +golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/tools v0.23.1-0.20240722161640-ec1a81bfec7c h1:jGHQpjWnvPa5qmjhxUYeut+TlRYWRGaMcOnAZ4S5IOo= +golang.org/x/tools v0.23.1-0.20240722161640-ec1a81bfec7c/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef h1:mqLYrXCXYEZOop9/Dbo6RPX11539nwiCNBb1icVPmw8= rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef/go.mod h1:8xcPgWmwlZONN1D9bjxtHEjrUtSEa3fakVF8iaewYKQ= diff --git a/src/cmd/vendor/golang.org/x/arch/LICENSE b/src/cmd/vendor/golang.org/x/arch/LICENSE index d29b37261f6920..686d8a919125b1 100644 --- a/src/cmd/vendor/golang.org/x/arch/LICENSE +++ b/src/cmd/vendor/golang.org/x/arch/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015 The Go Authors. All rights reserved. +Copyright 2015 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/build/LICENSE b/src/cmd/vendor/golang.org/x/build/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/build/LICENSE +++ b/src/cmd/vendor/golang.org/x/build/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/mod/LICENSE b/src/cmd/vendor/golang.org/x/mod/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/mod/LICENSE +++ b/src/cmd/vendor/golang.org/x/mod/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/mod/modfile/rule.go b/src/cmd/vendor/golang.org/x/mod/modfile/rule.go index 66dcaf9803db3a..3e4a1d0ab4a609 100644 --- a/src/cmd/vendor/golang.org/x/mod/modfile/rule.go +++ b/src/cmd/vendor/golang.org/x/mod/modfile/rule.go @@ -43,6 +43,7 @@ type File struct { Exclude []*Exclude Replace []*Replace Retract []*Retract + Tool []*Tool Syntax *FileSyntax } @@ -93,6 +94,12 @@ type Retract struct { Syntax *Line } +// A Tool is a single tool statement. +type Tool struct { + Path string + Syntax *Line +} + // A VersionInterval represents a range of versions with upper and lower bounds. // Intervals are closed: both bounds are included. When Low is equal to High, // the interval may refer to a single version ('v1.2.3') or an interval @@ -297,7 +304,7 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parse }) } continue - case "module", "godebug", "require", "exclude", "replace", "retract": + case "module", "godebug", "require", "exclude", "replace", "retract", "tool": for _, l := range x.Line { f.add(&errs, x, l, x.Token[0], l.Token, fix, strict) } @@ -509,6 +516,21 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a Syntax: line, } f.Retract = append(f.Retract, retract) + + case "tool": + if len(args) != 1 { + errorf("tool directive expects exactly one argument") + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Tool = append(f.Tool, &Tool{ + Path: s, + Syntax: line, + }) } } @@ -1567,6 +1589,36 @@ func (f *File) DropRetract(vi VersionInterval) error { return nil } +// AddTool adds a new tool directive with the given path. +// It does nothing if the tool line already exists. +func (f *File) AddTool(path string) error { + for _, t := range f.Tool { + if t.Path == path { + return nil + } + } + + f.Tool = append(f.Tool, &Tool{ + Path: path, + Syntax: f.Syntax.addLine(nil, "tool", path), + }) + + f.SortBlocks() + return nil +} + +// RemoveTool removes a tool directive with the given path. +// It does nothing if no such tool directive exists. +func (f *File) DropTool(path string) error { + for _, t := range f.Tool { + if t.Path == path { + t.Syntax.markRemoved() + *t = Tool{} + } + } + return nil +} + func (f *File) SortBlocks() { f.removeDups() // otherwise sorting is unsafe @@ -1593,9 +1645,9 @@ func (f *File) SortBlocks() { } } -// removeDups removes duplicate exclude and replace directives. +// removeDups removes duplicate exclude, replace and tool directives. // -// Earlier exclude directives take priority. +// Earlier exclude and tool directives take priority. // // Later replace directives take priority. // @@ -1605,10 +1657,10 @@ func (f *File) SortBlocks() { // retract directives are not de-duplicated since comments are // meaningful, and versions may be retracted multiple times. func (f *File) removeDups() { - removeDups(f.Syntax, &f.Exclude, &f.Replace) + removeDups(f.Syntax, &f.Exclude, &f.Replace, &f.Tool) } -func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace) { +func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, tool *[]*Tool) { kill := make(map[*Line]bool) // Remove duplicate excludes. @@ -1649,6 +1701,24 @@ func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace) { } *replace = repl + if tool != nil { + haveTool := make(map[string]bool) + for _, t := range *tool { + if haveTool[t.Path] { + kill[t.Syntax] = true + continue + } + haveTool[t.Path] = true + } + var newTool []*Tool + for _, t := range *tool { + if !kill[t.Syntax] { + newTool = append(newTool, t) + } + } + *tool = newTool + } + // Duplicate require and retract directives are not removed. // Drop killed statements from the syntax tree. diff --git a/src/cmd/vendor/golang.org/x/mod/modfile/work.go b/src/cmd/vendor/golang.org/x/mod/modfile/work.go index 8f54897cf7b950..5387d0c265937e 100644 --- a/src/cmd/vendor/golang.org/x/mod/modfile/work.go +++ b/src/cmd/vendor/golang.org/x/mod/modfile/work.go @@ -331,5 +331,5 @@ func (f *WorkFile) SortBlocks() { // retract directives are not de-duplicated since comments are // meaningful, and versions may be retracted multiple times. func (f *WorkFile) removeDups() { - removeDups(f.Syntax, nil, &f.Replace) + removeDups(f.Syntax, nil, &f.Replace, nil) } diff --git a/src/cmd/vendor/golang.org/x/sync/LICENSE b/src/cmd/vendor/golang.org/x/sync/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/sync/LICENSE +++ b/src/cmd/vendor/golang.org/x/sync/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/sys/LICENSE b/src/cmd/vendor/golang.org/x/sys/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/sys/LICENSE +++ b/src/cmd/vendor/golang.org/x/sys/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh index 4ed2e488b6167b..d07dd09eb503c2 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -58,6 +58,7 @@ includes_Darwin=' #define _DARWIN_USE_64_BIT_INODE #define __APPLE_USE_RFC_3542 #include +#include #include #include #include diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go index 4cc7b005967ebd..2d15200adb497c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -402,6 +402,18 @@ func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { return ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq)) } +//sys renamexNp(from string, to string, flag uint32) (err error) + +func RenamexNp(from string, to string, flag uint32) (err error) { + return renamexNp(from, to, flag) +} + +//sys renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) + +func RenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + return renameatxNp(fromfd, from, tofd, to, flag) +} + //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL func Uname(uname *Utsname) error { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index e40fa85245f47c..4308ac1772b9fa 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1169,6 +1169,11 @@ const ( PT_WRITE_D = 0x5 PT_WRITE_I = 0x4 PT_WRITE_U = 0x6 + RENAME_EXCL = 0x4 + RENAME_NOFOLLOW_ANY = 0x10 + RENAME_RESERVED1 = 0x8 + RENAME_SECLUDE = 0x1 + RENAME_SWAP = 0x2 RLIMIT_AS = 0x5 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index bb02aa6c05647b..c8068a7a169004 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1169,6 +1169,11 @@ const ( PT_WRITE_D = 0x5 PT_WRITE_I = 0x4 PT_WRITE_U = 0x6 + RENAME_EXCL = 0x4 + RENAME_NOFOLLOW_ANY = 0x10 + RENAME_RESERVED1 = 0x8 + RENAME_SECLUDE = 0x1 + RENAME_SWAP = 0x2 RLIMIT_AS = 0x5 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 07642c308d3aa8..b622533ef2c2b7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func renamexNp(from string, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renamex_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameatx_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { var _p0 unsafe.Pointer if len(mib) > 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 923e08cb7924cf..cfe6646baf230f 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) +TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renamex_np(SB) +GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB) + +TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameatx_np(SB) +GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB) + TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 7d73dda64733cc..13f624f69f19d4 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func renamexNp(from string, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renamex_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameatx_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { var _p0 unsafe.Pointer if len(mib) > 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 057700111e7465..fe222b75df04f7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) +TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renamex_np(SB) +GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB) + +TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameatx_np(SB) +GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB) + TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 diff --git a/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go index 97651b5bd04bfa..b6e1ab76f82a09 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go @@ -1179,7 +1179,7 @@ type OBJECTS_AND_NAME struct { //sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD //sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW -//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) = advapi32.GetAce +//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) = advapi32.GetAce // Control returns the security descriptor control bits. func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { diff --git a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go index 6525c62f3c2ff3..1fa34fd17c5cd9 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -17,8 +17,10 @@ import ( "unsafe" ) -type Handle uintptr -type HWND uintptr +type ( + Handle uintptr + HWND uintptr +) const ( InvalidHandle = ^Handle(0) @@ -211,6 +213,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) //sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW //sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId +//sys LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) [failretval==0] = user32.LoadKeyboardLayoutW +//sys UnloadKeyboardLayout(hkl Handle) (err error) = user32.UnloadKeyboardLayout +//sys GetKeyboardLayout(tid uint32) (hkl Handle) = user32.GetKeyboardLayout +//sys ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) = user32.ToUnicodeEx //sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow //sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW //sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx @@ -1368,9 +1374,11 @@ func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) } + func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) } + func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { return syscall.EWINDOWS } diff --git a/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go index d8cb71db0a61b9..4d0c15745f89f2 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go @@ -2003,7 +2003,21 @@ const ( MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 ) -const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 +// Flags for GetAdaptersAddresses, see +// https://learn.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses. +const ( + GAA_FLAG_SKIP_UNICAST = 0x1 + GAA_FLAG_SKIP_ANYCAST = 0x2 + GAA_FLAG_SKIP_MULTICAST = 0x4 + GAA_FLAG_SKIP_DNS_SERVER = 0x8 + GAA_FLAG_INCLUDE_PREFIX = 0x10 + GAA_FLAG_SKIP_FRIENDLY_NAME = 0x20 + GAA_FLAG_INCLUDE_WINS_INFO = 0x40 + GAA_FLAG_INCLUDE_GATEWAYS = 0x80 + GAA_FLAG_INCLUDE_ALL_INTERFACES = 0x100 + GAA_FLAG_INCLUDE_ALL_COMPARTMENTS = 0x200 + GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER = 0x400 +) const ( IF_TYPE_OTHER = 1 @@ -3404,3 +3418,14 @@ type DCB struct { EvtChar byte wReserved1 uint16 } + +// Keyboard Layout Flags. +// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayoutw +const ( + KLF_ACTIVATE = 0x00000001 + KLF_SUBSTITUTE_OK = 0x00000002 + KLF_REORDER = 0x00000008 + KLF_REPLACELANG = 0x00000010 + KLF_NOTELLSHELL = 0x00000080 + KLF_SETFORPROCESS = 0x00000100 +) diff --git a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go index eba761018aafe8..9bb979a3e47267 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -478,12 +478,16 @@ var ( procGetDesktopWindow = moduser32.NewProc("GetDesktopWindow") procGetForegroundWindow = moduser32.NewProc("GetForegroundWindow") procGetGUIThreadInfo = moduser32.NewProc("GetGUIThreadInfo") + procGetKeyboardLayout = moduser32.NewProc("GetKeyboardLayout") procGetShellWindow = moduser32.NewProc("GetShellWindow") procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") procIsWindow = moduser32.NewProc("IsWindow") procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") procIsWindowVisible = moduser32.NewProc("IsWindowVisible") + procLoadKeyboardLayoutW = moduser32.NewProc("LoadKeyboardLayoutW") procMessageBoxW = moduser32.NewProc("MessageBoxW") + procToUnicodeEx = moduser32.NewProc("ToUnicodeEx") + procUnloadKeyboardLayout = moduser32.NewProc("UnloadKeyboardLayout") procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") @@ -789,6 +793,14 @@ func FreeSid(sid *SID) (err error) { return } +func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) { + r1, _, e1 := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func GetLengthSid(sid *SID) (len uint32) { r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) len = uint32(r0) @@ -1225,14 +1237,6 @@ func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCE return } -func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) { - r0, _, _ := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) - if r0 == 0 { - ret = GetLastError() - } - return -} - func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) if r1 == 0 { @@ -4082,6 +4086,12 @@ func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { return } +func GetKeyboardLayout(tid uint32) (hkl Handle) { + r0, _, _ := syscall.Syscall(procGetKeyboardLayout.Addr(), 1, uintptr(tid), 0, 0) + hkl = Handle(r0) + return +} + func GetShellWindow() (shellWindow HWND) { r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) shellWindow = HWND(r0) @@ -4115,6 +4125,15 @@ func IsWindowVisible(hwnd HWND) (isVisible bool) { return } +func LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadKeyboardLayoutW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(flags), 0) + hkl = Handle(r0) + if hkl == 0 { + err = errnoErr(e1) + } + return +} + func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) ret = int32(r0) @@ -4124,6 +4143,20 @@ func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret i return } +func ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) { + r0, _, _ := syscall.Syscall9(procToUnicodeEx.Addr(), 7, uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl), 0, 0) + ret = int32(r0) + return +} + +func UnloadKeyboardLayout(hkl Handle) (err error) { + r1, _, e1 := syscall.Syscall(procUnloadKeyboardLayout.Addr(), 1, uintptr(hkl), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) { var _p0 uint32 if inheritExisting { diff --git a/src/cmd/vendor/golang.org/x/term/LICENSE b/src/cmd/vendor/golang.org/x/term/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/term/LICENSE +++ b/src/cmd/vendor/golang.org/x/term/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/text/LICENSE b/src/cmd/vendor/golang.org/x/text/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/text/LICENSE +++ b/src/cmd/vendor/golang.org/x/text/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/tools/LICENSE b/src/cmd/vendor/golang.org/x/tools/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/cmd/vendor/golang.org/x/tools/LICENSE +++ b/src/cmd/vendor/golang.org/x/tools/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go index 3417232ce35f43..c9ba1a375d315a 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go @@ -96,7 +96,7 @@ var ( asmArchRISCV64 = asmArch{name: "riscv64", bigEndian: false, stack: "SP", lr: true, retRegs: []string{"X10", "F10"}} asmArchS390X = asmArch{name: "s390x", bigEndian: true, stack: "R15", lr: true} asmArchWasm = asmArch{name: "wasm", bigEndian: false, stack: "SP", lr: false} - asmArchLoong64 = asmArch{name: "loong64", bigEndian: false, stack: "R3", lr: true} + asmArchLoong64 = asmArch{name: "loong64", bigEndian: false, stack: "R3", lr: true, retRegs: []string{"R4", "F0"}} arches = []*asmArch{ &asmArch386, diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go index c91f6bc4745f52..a3afbf696e170e 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go @@ -199,32 +199,30 @@ func run(pass *analysis.Pass) (interface{}, error) { // the type has methods, as some {String,GoString,Format} // may change the behavior of fmt.Sprint. if len(ttypes) == 1 && len(vtypes) == 1 && types.NewMethodSet(V0).Len() == 0 { - fmtName, importEdit := analysisinternal.AddImport(pass.TypesInfo, file, arg.Pos(), "fmt", "fmt") + fmtName, importEdits := analysisinternal.AddImport(pass.TypesInfo, file, arg.Pos(), "fmt", "fmt") if types.Identical(T0, types.Typ[types.String]) { // string(x) -> fmt.Sprint(x) - addFix("Format the number as a decimal", []analysis.TextEdit{ - importEdit, - { + addFix("Format the number as a decimal", append(importEdits, + analysis.TextEdit{ Pos: call.Fun.Pos(), End: call.Fun.End(), NewText: []byte(fmtName + ".Sprint"), - }, - }) + }), + ) } else { // mystring(x) -> mystring(fmt.Sprint(x)) - addFix("Format the number as a decimal", []analysis.TextEdit{ - importEdit, - { + addFix("Format the number as a decimal", append(importEdits, + analysis.TextEdit{ Pos: call.Lparen + 1, End: call.Lparen + 1, NewText: []byte(fmtName + ".Sprint("), }, - { + analysis.TextEdit{ Pos: call.Rparen, End: call.Rparen, NewText: []byte(")"), - }, - }) + }), + ) } } diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go index 2c4c4e232890a9..6e34df46130b75 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go +++ b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -106,8 +106,21 @@ func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Nod // Does augmented child strictly contain [start, end)? if augPos <= start && end <= augEnd { - _, isToken := child.(tokenNode) - return isToken || visit(child) + if is[tokenNode](child) { + return true + } + + // childrenOf elides the FuncType node beneath FuncDecl. + // Add it back here for TypeParams, Params, Results, + // all FieldLists). But we don't add it back for the "func" token + // even though it is is the tree at FuncDecl.Type.Func. + if decl, ok := node.(*ast.FuncDecl); ok { + if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv { + path = append(path, decl.Type) + } + } + + return visit(child) } // Does [start, end) overlap multiple children? @@ -313,6 +326,8 @@ func childrenOf(n ast.Node) []ast.Node { // // As a workaround, we inline the case for FuncType // here and order things correctly. + // We also need to insert the elided FuncType just + // before the 'visit' recursion. // children = nil // discard ast.Walk(FuncDecl) info subtrees children = append(children, tok(n.Type.Func, len("func"))) @@ -632,3 +647,8 @@ func NodeDescription(n ast.Node) string { } panic(fmt.Sprintf("unexpected node type: %T", n)) } + +func is[T any](x any) bool { + _, ok := x.(T) + return ok +} diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/util.go b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/util.go index 919d5305ab422e..6bdcf70ac2750d 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/util.go +++ b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/util.go @@ -7,6 +7,7 @@ package astutil import "go/ast" // Unparen returns e with any enclosing parentheses stripped. +// TODO(adonovan): use go1.22's ast.Unparen. func Unparen(e ast.Expr) ast.Expr { for { p, ok := e.(*ast.ParenExpr) diff --git a/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go index a2386c347a2502..d648c3d071b00e 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ b/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -51,7 +51,7 @@ type Path string // // PO package->object Package.Scope.Lookup // OT object->type Object.Type -// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] +// TT type->type Type.{Elem,Key,{,{,Recv}Type}Params,Results,Underlying} [EKPRUTrC] // TO type->object Type.{At,Field,Method,Obj} [AFMO] // // All valid paths start with a package and end at an object @@ -63,8 +63,8 @@ type Path string // - The only PO operator is Package.Scope.Lookup, which requires an identifier. // - The only OT operator is Object.Type, // which we encode as '.' because dot cannot appear in an identifier. -// - The TT operators are encoded as [EKPRUTC]; -// one of these (TypeParam) requires an integer operand, +// - The TT operators are encoded as [EKPRUTrC]; +// two of these ({,Recv}TypeParams) require an integer operand, // which is encoded as a string of decimal digits. // - The TO operators are encoded as [AFMO]; // three of these (At,Field,Method) require an integer operand, @@ -98,19 +98,20 @@ const ( opType = '.' // .Type() (Object) // type->type operators - opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) - opKey = 'K' // .Key() (Map) - opParams = 'P' // .Params() (Signature) - opResults = 'R' // .Results() (Signature) - opUnderlying = 'U' // .Underlying() (Named) - opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) - opConstraint = 'C' // .Constraint() (TypeParam) + opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) + opKey = 'K' // .Key() (Map) + opParams = 'P' // .Params() (Signature) + opResults = 'R' // .Results() (Signature) + opUnderlying = 'U' // .Underlying() (Named) + opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) + opRecvTypeParam = 'r' // .RecvTypeParams.At(i) (Signature) + opConstraint = 'C' // .Constraint() (TypeParam) // type->object operators - opAt = 'A' // .At(i) (Tuple) - opField = 'F' // .Field(i) (Struct) - opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) - opObj = 'O' // .Obj() (Named, TypeParam) + opAt = 'A' // .At(i) (Tuple) + opField = 'F' // .Field(i) (Struct) + opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) + opObj = 'O' // .Obj() (Named, TypeParam) ) // For is equivalent to new(Encoder).For(obj). @@ -286,7 +287,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { } } else { if named, _ := T.(*types.Named); named != nil { - if r := findTypeParam(obj, named.TypeParams(), path, nil); r != nil { + if r := findTypeParam(obj, named.TypeParams(), path, opTypeParam, nil); r != nil { // generic named type return Path(r), nil } @@ -462,7 +463,10 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] } return find(obj, T.Elem(), append(path, opElem), seen) case *types.Signature: - if r := findTypeParam(obj, T.TypeParams(), path, seen); r != nil { + if r := findTypeParam(obj, T.RecvTypeParams(), path, opRecvTypeParam, nil); r != nil { + return r + } + if r := findTypeParam(obj, T.TypeParams(), path, opTypeParam, seen); r != nil { return r } if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { @@ -525,10 +529,10 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] panic(T) } -func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { +func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, op byte, seen map[*types.TypeName]bool) []byte { for i := 0; i < list.Len(); i++ { tparam := list.At(i) - path2 := appendOpArg(path, opTypeParam, i) + path2 := appendOpArg(path, op, i) if r := find(obj, tparam, path2, seen); r != nil { return r } @@ -580,10 +584,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { code := suffix[0] suffix = suffix[1:] - // Codes [AFM] have an integer operand. + // Codes [AFMTr] have an integer operand. var index int switch code { - case opAt, opField, opMethod, opTypeParam: + case opAt, opField, opMethod, opTypeParam, opRecvTypeParam: rest := strings.TrimLeft(suffix, "0123456789") numerals := suffix[:len(suffix)-len(rest)] suffix = rest @@ -664,6 +668,17 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { } t = tparams.At(index) + case opRecvTypeParam: + sig, ok := t.(*types.Signature) // Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + rtparams := sig.RecvTypeParams() + if n := rtparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = rtparams.At(index) + case opConstraint: tparam, ok := t.(*types.TypeParam) if !ok { @@ -725,6 +740,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { } } + if obj == nil { + panic(p) // path does not end in an object-valued operator + } + if obj.Pkg() != pkg { return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) } diff --git a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go index 4000d27d8ee73e..e0b13e70a01567 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go @@ -441,7 +441,7 @@ func slicesContains[S ~[]E, E comparable](slice S, x E) bool { // and returns the chosen name along with the edit for the new import. // // It does not mutate its arguments. -func AddImport(info *types.Info, file *ast.File, pos token.Pos, pkgpath, preferredName string) (name string, newImport analysis.TextEdit) { +func AddImport(info *types.Info, file *ast.File, pos token.Pos, pkgpath, preferredName string) (name string, newImport []analysis.TextEdit) { // Find innermost enclosing lexical block. scope := info.Scopes[file].Innermost(pos) if scope == nil { @@ -454,7 +454,7 @@ func AddImport(info *types.Info, file *ast.File, pos token.Pos, pkgpath, preferr pkgname, ok := importedPkgName(info, spec) if ok && pkgname.Imported().Path() == pkgpath { if _, obj := scope.LookupParent(pkgname.Name(), pos); obj == pkgname { - return pkgname.Name(), analysis.TextEdit{} + return pkgname.Name(), nil } } } @@ -492,11 +492,11 @@ func AddImport(info *types.Info, file *ast.File, pos token.Pos, pkgpath, preferr before = decl0.Doc } } - return newName, analysis.TextEdit{ + return newName, []analysis.TextEdit{{ Pos: before.Pos(), End: before.Pos(), NewText: []byte(newText), - } + }} } // importedPkgName returns the PkgName object declared by an ImportSpec. diff --git a/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go b/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go index 50cf53b4b428f0..5a7da4871a85b1 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/bisect/bisect.go @@ -119,7 +119,7 @@ // // Finally, a leading “v” in the pattern indicates that the reports will be shown // to the user of bisect to describe the changes involved in a failure. -// At the API level, the leading “v” causes [Matcher.Visible] to return true. +// At the API level, the leading “v” causes [Matcher.Verbose] to return true. // See the next section for details. // // # Match Reports @@ -136,12 +136,12 @@ // 0x1234 is the change ID in hexadecimal. // An alternate form is “[bisect-match 010101]”, giving the change ID in binary. // -// When [Matcher.Visible] returns false, the match reports are only +// When [Matcher.Verbose] returns false, the match reports are only // being processed by bisect to learn the set of enabled changes, // not shown to the user, meaning that each report can be a match // marker on a line by itself, eliding the usual textual description. // When the textual description is expensive to compute, -// checking [Matcher.Visible] can help the avoid that expense +// checking [Matcher.Verbose] can help the avoid that expense // in most runs. package bisect diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go index de3496d10b35da..a1d138226c9893 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/free.go @@ -21,7 +21,6 @@ type Free struct { // Has reports whether the specified type has a free type parameter. func (w *Free) Has(typ types.Type) (res bool) { - // detect cycles if x, ok := w.seen[typ]; ok { return x @@ -83,7 +82,7 @@ func (w *Free) Has(typ types.Type) (res bool) { } terms, err := InterfaceTermSet(t) if err != nil { - panic(err) + return false // ill typed } for _, term := range terms { if w.Has(term.Type()) { diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go b/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go index 7c77c2fbc038f8..83923286120d4f 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/typesinternal/types.go @@ -48,3 +48,18 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, } return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true } + +// NameRelativeTo returns a types.Qualifier that qualifies members of +// all packages other than pkg, using only the package name. +// (By contrast, [types.RelativeTo] uses the complete package path, +// which is often excessive.) +// +// If pkg is nil, it is equivalent to [*types.Package.Name]. +func NameRelativeTo(pkg *types.Package) types.Qualifier { + return func(other *types.Package) string { + if pkg != nil && pkg == other { + return "" // same package; unqualified + } + return other.Name() + } +} diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index bf9c1341b94f73..aaed6b9114af60 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -16,16 +16,16 @@ github.com/google/pprof/third_party/svgpan # github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 ## explicit; go 1.13 github.com/ianlancetaylor/demangle -# golang.org/x/arch v0.8.0 +# golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea ## explicit; go 1.18 golang.org/x/arch/arm/armasm golang.org/x/arch/arm64/arm64asm golang.org/x/arch/ppc64/ppc64asm golang.org/x/arch/x86/x86asm -# golang.org/x/build v0.0.0-20240603162849-5dfbda438323 +# golang.org/x/build v0.0.0-20240722200705-b9910f320300 ## explicit; go 1.21 golang.org/x/build/relnote -# golang.org/x/mod v0.19.0 +# golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 ## explicit; go 1.18 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile @@ -36,16 +36,16 @@ golang.org/x/mod/sumdb/dirhash golang.org/x/mod/sumdb/note golang.org/x/mod/sumdb/tlog golang.org/x/mod/zip -# golang.org/x/sync v0.7.0 +# golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 ## explicit; go 1.18 golang.org/x/sync/errgroup golang.org/x/sync/semaphore -# golang.org/x/sys v0.22.0 +# golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb ## explicit; go 1.18 golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/telemetry v0.0.0-20240717194752-0b706e19b701 +# golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 ## explicit; go 1.20 golang.org/x/telemetry golang.org/x/telemetry/counter @@ -57,10 +57,10 @@ golang.org/x/telemetry/internal/crashmonitor golang.org/x/telemetry/internal/mmap golang.org/x/telemetry/internal/telemetry golang.org/x/telemetry/internal/upload -# golang.org/x/term v0.20.0 +# golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 ## explicit; go 1.18 golang.org/x/term -# golang.org/x/text v0.16.0 +# golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 ## explicit; go 1.18 golang.org/x/text/cases golang.org/x/text/internal @@ -70,7 +70,7 @@ golang.org/x/text/internal/tag golang.org/x/text/language golang.org/x/text/transform golang.org/x/text/unicode/norm -# golang.org/x/tools v0.22.1-0.20240618181713-f2d2ebe43e72 +# golang.org/x/tools v0.23.1-0.20240722161640-ec1a81bfec7c ## explicit; go 1.19 golang.org/x/tools/cmd/bisect golang.org/x/tools/cover diff --git a/src/go.mod b/src/go.mod index 789f5aaa1d3e26..d7a4ef150410e3 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,13 +1,13 @@ module std -go 1.23 +go 1.24 require ( - golang.org/x/crypto v0.23.1-0.20240603234054-0b431c7de36a - golang.org/x/net v0.25.1-0.20240603202750-6249541f2a6c + golang.org/x/crypto v0.25.1-0.20240722173533-bb80217080b0 + golang.org/x/net v0.27.1-0.20240722181819-765c7e89b3bd ) require ( - golang.org/x/sys v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb // indirect + golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 // indirect ) diff --git a/src/go.sum b/src/go.sum index a75ea98c7312df..8ff5ecd640f084 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,8 +1,8 @@ -golang.org/x/crypto v0.23.1-0.20240603234054-0b431c7de36a h1:37MIv+iGfwMYzWJECGyrPCtd5nuqcciRUeJfkNCkCf0= -golang.org/x/crypto v0.23.1-0.20240603234054-0b431c7de36a/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/net v0.25.1-0.20240603202750-6249541f2a6c h1:CR/7/SLUhIJw6g675eeoDiwggElO2MV9rGkNYjqi8GM= -golang.org/x/net v0.25.1-0.20240603202750-6249541f2a6c/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/crypto v0.25.1-0.20240722173533-bb80217080b0 h1:wxHbFWyu21uEPJJnYaSDaHSWbvnZ9gLSSOPwnEc3lLM= +golang.org/x/crypto v0.25.1-0.20240722173533-bb80217080b0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/net v0.27.1-0.20240722181819-765c7e89b3bd h1:pHzwejE8Zkb94bG4nA+fUeskKPFp1HPldrhv62dabro= +golang.org/x/net v0.27.1-0.20240722181819-765c7e89b3bd/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb h1:IoPT3Y4jg6/QClnwgUYykkW0yKhqjC7VSJkQLzBukfY= +golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 h1:MlCLrwVF1WvXT14xTzwuKN3u4LpUve8sG/gJUCuBpe8= +golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= diff --git a/src/net/http/h2_bundle.go b/src/net/http/h2_bundle.go index 0b305844ae2c25..af86c1430dbf6c 100644 --- a/src/net/http/h2_bundle.go +++ b/src/net/http/h2_bundle.go @@ -7964,10 +7964,6 @@ func (t *http2Transport) newClientConn(c net.Conn, singleUse bool) (*http2Client cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize()) cc.peerMaxHeaderTableSize = http2initialHeaderTableSize - if t.AllowHTTP { - cc.nextStreamID = 3 - } - if cs, ok := c.(http2connectionStater); ok { state := cs.ConnectionState() cc.tlsState = &state diff --git a/src/vendor/golang.org/x/crypto/LICENSE b/src/vendor/golang.org/x/crypto/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/vendor/golang.org/x/crypto/LICENSE +++ b/src/vendor/golang.org/x/crypto/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go b/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go index 93da7322bc48c2..8cf5d8112e452d 100644 --- a/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go +++ b/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go @@ -5,7 +5,7 @@ // Package chacha20poly1305 implements the ChaCha20-Poly1305 AEAD and its // extended nonce variant XChaCha20-Poly1305, as specified in RFC 8439 and // draft-irtf-cfrg-xchacha-01. -package chacha20poly1305 // import "golang.org/x/crypto/chacha20poly1305" +package chacha20poly1305 import ( "crypto/cipher" diff --git a/src/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go b/src/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go index cda8e3edfd5ea4..90ef6a241de2f5 100644 --- a/src/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go +++ b/src/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go @@ -4,7 +4,7 @@ // Package asn1 contains supporting types for parsing and building ASN.1 // messages with the cryptobyte package. -package asn1 // import "golang.org/x/crypto/cryptobyte/asn1" +package asn1 // Tag represents an ASN.1 identifier octet, consisting of a tag number // (indicating a type) and class (such as context-specific or constructed). diff --git a/src/vendor/golang.org/x/crypto/cryptobyte/string.go b/src/vendor/golang.org/x/crypto/cryptobyte/string.go index 10692a8a315019..4b0f8097f9e15e 100644 --- a/src/vendor/golang.org/x/crypto/cryptobyte/string.go +++ b/src/vendor/golang.org/x/crypto/cryptobyte/string.go @@ -15,7 +15,7 @@ // // See the documentation and examples for the Builder and String types to get // started. -package cryptobyte // import "golang.org/x/crypto/cryptobyte" +package cryptobyte // String represents a string of bytes. It provides methods for parsing // fixed-length and length-prefixed values from it. diff --git a/src/vendor/golang.org/x/crypto/hkdf/hkdf.go b/src/vendor/golang.org/x/crypto/hkdf/hkdf.go index f4ded5fee2fba0..3bee66294ecfc6 100644 --- a/src/vendor/golang.org/x/crypto/hkdf/hkdf.go +++ b/src/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -8,7 +8,7 @@ // HKDF is a cryptographic key derivation function (KDF) with the goal of // expanding limited input keying material into one or more cryptographically // strong secret keys. -package hkdf // import "golang.org/x/crypto/hkdf" +package hkdf import ( "crypto/hmac" diff --git a/src/vendor/golang.org/x/crypto/sha3/doc.go b/src/vendor/golang.org/x/crypto/sha3/doc.go index decd8cf9bf7491..7e023090707b8a 100644 --- a/src/vendor/golang.org/x/crypto/sha3/doc.go +++ b/src/vendor/golang.org/x/crypto/sha3/doc.go @@ -59,4 +59,4 @@ // They produce output of the same length, with the same security strengths // against all attacks. This means, in particular, that SHA3-256 only has // 128-bit collision resistance, because its output length is 32 bytes. -package sha3 // import "golang.org/x/crypto/sha3" +package sha3 diff --git a/src/vendor/golang.org/x/crypto/sha3/hashes.go b/src/vendor/golang.org/x/crypto/sha3/hashes.go index 5eae6cb922fb76..c544b29e5f2cce 100644 --- a/src/vendor/golang.org/x/crypto/sha3/hashes.go +++ b/src/vendor/golang.org/x/crypto/sha3/hashes.go @@ -9,6 +9,7 @@ package sha3 // bytes. import ( + "crypto" "hash" ) @@ -40,6 +41,13 @@ func New512() hash.Hash { return new512() } +func init() { + crypto.RegisterHash(crypto.SHA3_224, New224) + crypto.RegisterHash(crypto.SHA3_256, New256) + crypto.RegisterHash(crypto.SHA3_384, New384) + crypto.RegisterHash(crypto.SHA3_512, New512) +} + func new224Generic() *state { return &state{rate: 144, outputLen: 28, dsbyte: 0x06} } diff --git a/src/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s b/src/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s index 1f5393886197a5..99e2f16e971937 100644 --- a/src/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s +++ b/src/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s @@ -1,390 +1,5419 @@ -// Copyright 2015 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. +// Code generated by command: go run keccakf_amd64_asm.go -out ../keccakf_amd64.s -pkg sha3. DO NOT EDIT. //go:build amd64 && !purego && gc -// This code was translated into a form compatible with 6a from the public -// domain sources at https://github.com/gvanas/KeccakCodePackage - -// Offsets in state -#define _ba (0*8) -#define _be (1*8) -#define _bi (2*8) -#define _bo (3*8) -#define _bu (4*8) -#define _ga (5*8) -#define _ge (6*8) -#define _gi (7*8) -#define _go (8*8) -#define _gu (9*8) -#define _ka (10*8) -#define _ke (11*8) -#define _ki (12*8) -#define _ko (13*8) -#define _ku (14*8) -#define _ma (15*8) -#define _me (16*8) -#define _mi (17*8) -#define _mo (18*8) -#define _mu (19*8) -#define _sa (20*8) -#define _se (21*8) -#define _si (22*8) -#define _so (23*8) -#define _su (24*8) - -// Temporary registers -#define rT1 AX - -// Round vars -#define rpState DI -#define rpStack SP - -#define rDa BX -#define rDe CX -#define rDi DX -#define rDo R8 -#define rDu R9 - -#define rBa R10 -#define rBe R11 -#define rBi R12 -#define rBo R13 -#define rBu R14 - -#define rCa SI -#define rCe BP -#define rCi rBi -#define rCo rBo -#define rCu R15 - -#define MOVQ_RBI_RCE MOVQ rBi, rCe -#define XORQ_RT1_RCA XORQ rT1, rCa -#define XORQ_RT1_RCE XORQ rT1, rCe -#define XORQ_RBA_RCU XORQ rBa, rCu -#define XORQ_RBE_RCU XORQ rBe, rCu -#define XORQ_RDU_RCU XORQ rDu, rCu -#define XORQ_RDA_RCA XORQ rDa, rCa -#define XORQ_RDE_RCE XORQ rDe, rCe - -#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ - /* Prepare round */ \ - MOVQ rCe, rDa; \ - ROLQ $1, rDa; \ - \ - MOVQ _bi(iState), rCi; \ - XORQ _gi(iState), rDi; \ - XORQ rCu, rDa; \ - XORQ _ki(iState), rCi; \ - XORQ _mi(iState), rDi; \ - XORQ rDi, rCi; \ - \ - MOVQ rCi, rDe; \ - ROLQ $1, rDe; \ - \ - MOVQ _bo(iState), rCo; \ - XORQ _go(iState), rDo; \ - XORQ rCa, rDe; \ - XORQ _ko(iState), rCo; \ - XORQ _mo(iState), rDo; \ - XORQ rDo, rCo; \ - \ - MOVQ rCo, rDi; \ - ROLQ $1, rDi; \ - \ - MOVQ rCu, rDo; \ - XORQ rCe, rDi; \ - ROLQ $1, rDo; \ - \ - MOVQ rCa, rDu; \ - XORQ rCi, rDo; \ - ROLQ $1, rDu; \ - \ - /* Result b */ \ - MOVQ _ba(iState), rBa; \ - MOVQ _ge(iState), rBe; \ - XORQ rCo, rDu; \ - MOVQ _ki(iState), rBi; \ - MOVQ _mo(iState), rBo; \ - MOVQ _su(iState), rBu; \ - XORQ rDe, rBe; \ - ROLQ $44, rBe; \ - XORQ rDi, rBi; \ - XORQ rDa, rBa; \ - ROLQ $43, rBi; \ - \ - MOVQ rBe, rCa; \ - MOVQ rc, rT1; \ - ORQ rBi, rCa; \ - XORQ rBa, rT1; \ - XORQ rT1, rCa; \ - MOVQ rCa, _ba(oState); \ - \ - XORQ rDu, rBu; \ - ROLQ $14, rBu; \ - MOVQ rBa, rCu; \ - ANDQ rBe, rCu; \ - XORQ rBu, rCu; \ - MOVQ rCu, _bu(oState); \ - \ - XORQ rDo, rBo; \ - ROLQ $21, rBo; \ - MOVQ rBo, rT1; \ - ANDQ rBu, rT1; \ - XORQ rBi, rT1; \ - MOVQ rT1, _bi(oState); \ - \ - NOTQ rBi; \ - ORQ rBa, rBu; \ - ORQ rBo, rBi; \ - XORQ rBo, rBu; \ - XORQ rBe, rBi; \ - MOVQ rBu, _bo(oState); \ - MOVQ rBi, _be(oState); \ - B_RBI_RCE; \ - \ - /* Result g */ \ - MOVQ _gu(iState), rBe; \ - XORQ rDu, rBe; \ - MOVQ _ka(iState), rBi; \ - ROLQ $20, rBe; \ - XORQ rDa, rBi; \ - ROLQ $3, rBi; \ - MOVQ _bo(iState), rBa; \ - MOVQ rBe, rT1; \ - ORQ rBi, rT1; \ - XORQ rDo, rBa; \ - MOVQ _me(iState), rBo; \ - MOVQ _si(iState), rBu; \ - ROLQ $28, rBa; \ - XORQ rBa, rT1; \ - MOVQ rT1, _ga(oState); \ - G_RT1_RCA; \ - \ - XORQ rDe, rBo; \ - ROLQ $45, rBo; \ - MOVQ rBi, rT1; \ - ANDQ rBo, rT1; \ - XORQ rBe, rT1; \ - MOVQ rT1, _ge(oState); \ - G_RT1_RCE; \ - \ - XORQ rDi, rBu; \ - ROLQ $61, rBu; \ - MOVQ rBu, rT1; \ - ORQ rBa, rT1; \ - XORQ rBo, rT1; \ - MOVQ rT1, _go(oState); \ - \ - ANDQ rBe, rBa; \ - XORQ rBu, rBa; \ - MOVQ rBa, _gu(oState); \ - NOTQ rBu; \ - G_RBA_RCU; \ - \ - ORQ rBu, rBo; \ - XORQ rBi, rBo; \ - MOVQ rBo, _gi(oState); \ - \ - /* Result k */ \ - MOVQ _be(iState), rBa; \ - MOVQ _gi(iState), rBe; \ - MOVQ _ko(iState), rBi; \ - MOVQ _mu(iState), rBo; \ - MOVQ _sa(iState), rBu; \ - XORQ rDi, rBe; \ - ROLQ $6, rBe; \ - XORQ rDo, rBi; \ - ROLQ $25, rBi; \ - MOVQ rBe, rT1; \ - ORQ rBi, rT1; \ - XORQ rDe, rBa; \ - ROLQ $1, rBa; \ - XORQ rBa, rT1; \ - MOVQ rT1, _ka(oState); \ - K_RT1_RCA; \ - \ - XORQ rDu, rBo; \ - ROLQ $8, rBo; \ - MOVQ rBi, rT1; \ - ANDQ rBo, rT1; \ - XORQ rBe, rT1; \ - MOVQ rT1, _ke(oState); \ - K_RT1_RCE; \ - \ - XORQ rDa, rBu; \ - ROLQ $18, rBu; \ - NOTQ rBo; \ - MOVQ rBo, rT1; \ - ANDQ rBu, rT1; \ - XORQ rBi, rT1; \ - MOVQ rT1, _ki(oState); \ - \ - MOVQ rBu, rT1; \ - ORQ rBa, rT1; \ - XORQ rBo, rT1; \ - MOVQ rT1, _ko(oState); \ - \ - ANDQ rBe, rBa; \ - XORQ rBu, rBa; \ - MOVQ rBa, _ku(oState); \ - K_RBA_RCU; \ - \ - /* Result m */ \ - MOVQ _ga(iState), rBe; \ - XORQ rDa, rBe; \ - MOVQ _ke(iState), rBi; \ - ROLQ $36, rBe; \ - XORQ rDe, rBi; \ - MOVQ _bu(iState), rBa; \ - ROLQ $10, rBi; \ - MOVQ rBe, rT1; \ - MOVQ _mi(iState), rBo; \ - ANDQ rBi, rT1; \ - XORQ rDu, rBa; \ - MOVQ _so(iState), rBu; \ - ROLQ $27, rBa; \ - XORQ rBa, rT1; \ - MOVQ rT1, _ma(oState); \ - M_RT1_RCA; \ - \ - XORQ rDi, rBo; \ - ROLQ $15, rBo; \ - MOVQ rBi, rT1; \ - ORQ rBo, rT1; \ - XORQ rBe, rT1; \ - MOVQ rT1, _me(oState); \ - M_RT1_RCE; \ - \ - XORQ rDo, rBu; \ - ROLQ $56, rBu; \ - NOTQ rBo; \ - MOVQ rBo, rT1; \ - ORQ rBu, rT1; \ - XORQ rBi, rT1; \ - MOVQ rT1, _mi(oState); \ - \ - ORQ rBa, rBe; \ - XORQ rBu, rBe; \ - MOVQ rBe, _mu(oState); \ - \ - ANDQ rBa, rBu; \ - XORQ rBo, rBu; \ - MOVQ rBu, _mo(oState); \ - M_RBE_RCU; \ - \ - /* Result s */ \ - MOVQ _bi(iState), rBa; \ - MOVQ _go(iState), rBe; \ - MOVQ _ku(iState), rBi; \ - XORQ rDi, rBa; \ - MOVQ _ma(iState), rBo; \ - ROLQ $62, rBa; \ - XORQ rDo, rBe; \ - MOVQ _se(iState), rBu; \ - ROLQ $55, rBe; \ - \ - XORQ rDu, rBi; \ - MOVQ rBa, rDu; \ - XORQ rDe, rBu; \ - ROLQ $2, rBu; \ - ANDQ rBe, rDu; \ - XORQ rBu, rDu; \ - MOVQ rDu, _su(oState); \ - \ - ROLQ $39, rBi; \ - S_RDU_RCU; \ - NOTQ rBe; \ - XORQ rDa, rBo; \ - MOVQ rBe, rDa; \ - ANDQ rBi, rDa; \ - XORQ rBa, rDa; \ - MOVQ rDa, _sa(oState); \ - S_RDA_RCA; \ - \ - ROLQ $41, rBo; \ - MOVQ rBi, rDe; \ - ORQ rBo, rDe; \ - XORQ rBe, rDe; \ - MOVQ rDe, _se(oState); \ - S_RDE_RCE; \ - \ - MOVQ rBo, rDi; \ - MOVQ rBu, rDo; \ - ANDQ rBu, rDi; \ - ORQ rBa, rDo; \ - XORQ rBi, rDi; \ - XORQ rBo, rDo; \ - MOVQ rDi, _si(oState); \ - MOVQ rDo, _so(oState) \ - // func keccakF1600(a *[25]uint64) -TEXT ·keccakF1600(SB), 0, $200-8 - MOVQ a+0(FP), rpState +TEXT ·keccakF1600(SB), $200-8 + MOVQ a+0(FP), DI // Convert the user state into an internal state - NOTQ _be(rpState) - NOTQ _bi(rpState) - NOTQ _go(rpState) - NOTQ _ki(rpState) - NOTQ _mi(rpState) - NOTQ _sa(rpState) + NOTQ 8(DI) + NOTQ 16(DI) + NOTQ 64(DI) + NOTQ 96(DI) + NOTQ 136(DI) + NOTQ 160(DI) // Execute the KeccakF permutation - MOVQ _ba(rpState), rCa - MOVQ _be(rpState), rCe - MOVQ _bu(rpState), rCu - - XORQ _ga(rpState), rCa - XORQ _ge(rpState), rCe - XORQ _gu(rpState), rCu - - XORQ _ka(rpState), rCa - XORQ _ke(rpState), rCe - XORQ _ku(rpState), rCu - - XORQ _ma(rpState), rCa - XORQ _me(rpState), rCe - XORQ _mu(rpState), rCu - - XORQ _sa(rpState), rCa - XORQ _se(rpState), rCe - MOVQ _si(rpState), rDi - MOVQ _so(rpState), rDo - XORQ _su(rpState), rCu - - mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) - mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) + MOVQ (DI), SI + MOVQ 8(DI), BP + MOVQ 32(DI), R15 + XORQ 40(DI), SI + XORQ 48(DI), BP + XORQ 72(DI), R15 + XORQ 80(DI), SI + XORQ 88(DI), BP + XORQ 112(DI), R15 + XORQ 120(DI), SI + XORQ 128(DI), BP + XORQ 152(DI), R15 + XORQ 160(DI), SI + XORQ 168(DI), BP + MOVQ 176(DI), DX + MOVQ 184(DI), R8 + XORQ 192(DI), R15 - // Revert the internal state to the user state - NOTQ _be(rpState) - NOTQ _bi(rpState) - NOTQ _go(rpState) - NOTQ _ki(rpState) - NOTQ _mi(rpState) - NOTQ _sa(rpState) + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000000000001, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000000008082, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x800000000000808a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008000, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000000000808b, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000080000001, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008081, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008009, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000000000008a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000000000088, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000080008009, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000008000000a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000008000808b, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x800000000000008b, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008089, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008003, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008002, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000000080, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000000000800a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x800000008000000a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008081, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008080, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000080000001, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008008, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + NOP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + NOP + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + NOP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + NOP + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + NOP + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + NOP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + NOP + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + NOP + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + NOP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + NOP + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + NOP + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + NOP + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + NOP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Revert the internal state to the user state + NOTQ 8(DI) + NOTQ 16(DI) + NOTQ 64(DI) + NOTQ 96(DI) + NOTQ 136(DI) + NOTQ 160(DI) RET diff --git a/src/vendor/golang.org/x/crypto/sha3/register.go b/src/vendor/golang.org/x/crypto/sha3/register.go deleted file mode 100644 index addfd5049bb975..00000000000000 --- a/src/vendor/golang.org/x/crypto/sha3/register.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2014 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. - -//go:build go1.4 - -package sha3 - -import ( - "crypto" -) - -func init() { - crypto.RegisterHash(crypto.SHA3_224, New224) - crypto.RegisterHash(crypto.SHA3_256, New256) - crypto.RegisterHash(crypto.SHA3_384, New384) - crypto.RegisterHash(crypto.SHA3_512, New512) -} diff --git a/src/vendor/golang.org/x/net/LICENSE b/src/vendor/golang.org/x/net/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/vendor/golang.org/x/net/LICENSE +++ b/src/vendor/golang.org/x/net/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/vendor/golang.org/x/sys/LICENSE b/src/vendor/golang.org/x/sys/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/vendor/golang.org/x/sys/LICENSE +++ b/src/vendor/golang.org/x/sys/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/vendor/golang.org/x/sys/cpu/cpu.go b/src/vendor/golang.org/x/sys/cpu/cpu.go index 8fa707aa4ba9c9..ec07aab05788c8 100644 --- a/src/vendor/golang.org/x/sys/cpu/cpu.go +++ b/src/vendor/golang.org/x/sys/cpu/cpu.go @@ -105,6 +105,8 @@ var ARM64 struct { HasSVE bool // Scalable Vector Extensions HasSVE2 bool // Scalable Vector Extensions 2 HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 + HasDIT bool // Data Independent Timing support + HasI8MM bool // Advanced SIMD Int8 matrix multiplication instructions _ CacheLinePad } diff --git a/src/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/src/vendor/golang.org/x/sys/cpu/cpu_arm64.go index 0e27a21e1f82c4..af2aa99f9f06c9 100644 --- a/src/vendor/golang.org/x/sys/cpu/cpu_arm64.go +++ b/src/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -38,6 +38,8 @@ func initOptions() { {Name: "dcpop", Feature: &ARM64.HasDCPOP}, {Name: "asimddp", Feature: &ARM64.HasASIMDDP}, {Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM}, + {Name: "dit", Feature: &ARM64.HasDIT}, + {Name: "i8mm", Feature: &ARM64.HasI8MM}, } } @@ -145,6 +147,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { ARM64.HasLRCPC = true } + switch extractBits(isar1, 52, 55) { + case 1: + ARM64.HasI8MM = true + } + // ID_AA64PFR0_EL1 switch extractBits(pfr0, 16, 19) { case 0: @@ -168,6 +175,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { parseARM64SVERegister(getzfr0()) } + + switch extractBits(pfr0, 48, 51) { + case 1: + ARM64.HasDIT = true + } } func parseARM64SVERegister(zfr0 uint64) { diff --git a/src/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/src/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go index 3d386d0fc2186b..08f35ea17735fd 100644 --- a/src/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +++ b/src/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go @@ -35,8 +35,10 @@ const ( hwcap_SHA512 = 1 << 21 hwcap_SVE = 1 << 22 hwcap_ASIMDFHM = 1 << 23 + hwcap_DIT = 1 << 24 hwcap2_SVE2 = 1 << 1 + hwcap2_I8MM = 1 << 13 ) // linuxKernelCanEmulateCPUID reports whether we're running @@ -106,9 +108,12 @@ func doinit() { ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) ARM64.HasSVE = isSet(hwCap, hwcap_SVE) ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) + ARM64.HasDIT = isSet(hwCap, hwcap_DIT) + // HWCAP2 feature bits ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2) + ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM) } func isSet(hwc uint, value uint) bool { diff --git a/src/vendor/golang.org/x/text/LICENSE b/src/vendor/golang.org/x/text/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/src/vendor/golang.org/x/text/LICENSE +++ b/src/vendor/golang.org/x/text/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/src/vendor/modules.txt b/src/vendor/modules.txt index b8a0b84a282a32..7562f74b39ada6 100644 --- a/src/vendor/modules.txt +++ b/src/vendor/modules.txt @@ -1,5 +1,5 @@ -# golang.org/x/crypto v0.23.1-0.20240603234054-0b431c7de36a -## explicit; go 1.18 +# golang.org/x/crypto v0.25.1-0.20240722173533-bb80217080b0 +## explicit; go 1.20 golang.org/x/crypto/chacha20 golang.org/x/crypto/chacha20poly1305 golang.org/x/crypto/cryptobyte @@ -8,7 +8,7 @@ golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/sha3 -# golang.org/x/net v0.25.1-0.20240603202750-6249541f2a6c +# golang.org/x/net v0.27.1-0.20240722181819-765c7e89b3bd ## explicit; go 1.18 golang.org/x/net/dns/dnsmessage golang.org/x/net/http/httpguts @@ -18,10 +18,10 @@ golang.org/x/net/idna golang.org/x/net/lif golang.org/x/net/nettest golang.org/x/net/route -# golang.org/x/sys v0.22.0 +# golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb ## explicit; go 1.18 golang.org/x/sys/cpu -# golang.org/x/text v0.16.0 +# golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 ## explicit; go 1.18 golang.org/x/text/secure/bidirule golang.org/x/text/transform From f66db499769002f1f804f52234b7c3e5917bbad6 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 12 Jun 2024 18:25:55 -0700 Subject: [PATCH 027/866] cmd/compile: store constant floats using integer constants x86 is better at storing constant ints than constant floats. (It uses a constant directly in the instruction stream, instead of loading it from a constant global memory.) Noticed as part of #67957 Change-Id: I9b7b586ad8e0fe9ce245324f020e9526f82b209d Reviewed-on: https://go-review.googlesource.com/c/go/+/592596 LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Cherry Mui --- src/cmd/compile/internal/ssa/_gen/AMD64.rules | 3 ++ src/cmd/compile/internal/ssa/rewriteAMD64.go | 50 +++++++++++++++++++ test/codegen/floats.go | 9 ++++ 3 files changed, 62 insertions(+) diff --git a/src/cmd/compile/internal/ssa/_gen/AMD64.rules b/src/cmd/compile/internal/ssa/_gen/AMD64.rules index 2a4c59ebfc7176..0f7b0bb6d8a34b 100644 --- a/src/cmd/compile/internal/ssa/_gen/AMD64.rules +++ b/src/cmd/compile/internal/ssa/_gen/AMD64.rules @@ -1583,6 +1583,9 @@ (MOVSDstore [off] {sym} ptr (MOVQi2f val) mem) => (MOVQstore [off] {sym} ptr val mem) (MOVSSstore [off] {sym} ptr (MOVLi2f val) mem) => (MOVLstore [off] {sym} ptr val mem) +(MOVSDstore [off] {sym} ptr (MOVSDconst [f]) mem) && f == f => (MOVQstore [off] {sym} ptr (MOVQconst [int64(math.Float64bits(f))]) mem) +(MOVSSstore [off] {sym} ptr (MOVSSconst [f]) mem) && f == f => (MOVLstore [off] {sym} ptr (MOVLconst [int32(math.Float32bits(f))]) mem) + // Load args directly into the register class where it will be used. // We do this by just modifying the type of the Arg. (MOVQf2i (Arg [off] {sym})) && t.Size() == u.Size() => @b.Func.Entry (Arg [off] {sym}) diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go index ba71189703ddff..2670ba91b8e173 100644 --- a/src/cmd/compile/internal/ssa/rewriteAMD64.go +++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go @@ -12304,6 +12304,8 @@ func rewriteValueAMD64_OpAMD64MOVSDstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + typ := &b.Func.Config.Types // match: (MOVSDstore [off1] {sym} (ADDQconst [off2] ptr) val mem) // cond: is32Bit(int64(off1)+int64(off2)) // result: (MOVSDstore [off1+off2] {sym} ptr val mem) @@ -12366,6 +12368,29 @@ func rewriteValueAMD64_OpAMD64MOVSDstore(v *Value) bool { v.AddArg3(ptr, val, mem) return true } + // match: (MOVSDstore [off] {sym} ptr (MOVSDconst [f]) mem) + // cond: f == f + // result: (MOVQstore [off] {sym} ptr (MOVQconst [int64(math.Float64bits(f))]) mem) + for { + off := auxIntToInt32(v.AuxInt) + sym := auxToSym(v.Aux) + ptr := v_0 + if v_1.Op != OpAMD64MOVSDconst { + break + } + f := auxIntToFloat64(v_1.AuxInt) + mem := v_2 + if !(f == f) { + break + } + v.reset(OpAMD64MOVQstore) + v.AuxInt = int32ToAuxInt(off) + v.Aux = symToAux(sym) + v0 := b.NewValue0(v.Pos, OpAMD64MOVQconst, typ.UInt64) + v0.AuxInt = int64ToAuxInt(int64(math.Float64bits(f))) + v.AddArg3(ptr, v0, mem) + return true + } return false } func rewriteValueAMD64_OpAMD64MOVSSload(v *Value) bool { @@ -12437,6 +12462,8 @@ func rewriteValueAMD64_OpAMD64MOVSSstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + typ := &b.Func.Config.Types // match: (MOVSSstore [off1] {sym} (ADDQconst [off2] ptr) val mem) // cond: is32Bit(int64(off1)+int64(off2)) // result: (MOVSSstore [off1+off2] {sym} ptr val mem) @@ -12499,6 +12526,29 @@ func rewriteValueAMD64_OpAMD64MOVSSstore(v *Value) bool { v.AddArg3(ptr, val, mem) return true } + // match: (MOVSSstore [off] {sym} ptr (MOVSSconst [f]) mem) + // cond: f == f + // result: (MOVLstore [off] {sym} ptr (MOVLconst [int32(math.Float32bits(f))]) mem) + for { + off := auxIntToInt32(v.AuxInt) + sym := auxToSym(v.Aux) + ptr := v_0 + if v_1.Op != OpAMD64MOVSSconst { + break + } + f := auxIntToFloat32(v_1.AuxInt) + mem := v_2 + if !(f == f) { + break + } + v.reset(OpAMD64MOVLstore) + v.AuxInt = int32ToAuxInt(off) + v.Aux = symToAux(sym) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt32) + v0.AuxInt = int32ToAuxInt(int32(math.Float32bits(f))) + v.AddArg3(ptr, v0, mem) + return true + } return false } func rewriteValueAMD64_OpAMD64MOVWQSX(v *Value) bool { diff --git a/test/codegen/floats.go b/test/codegen/floats.go index baa745bdeece5b..d38df1cacbb8a7 100644 --- a/test/codegen/floats.go +++ b/test/codegen/floats.go @@ -227,3 +227,12 @@ func Float64DenormalFloat32Constant() float64 { // ppc64x:"FMOVD\t[$]f64\\.3800000000000000\\(SB\\)" return 0x1p-127 } + +func Float64ConstantStore(p *float64) { + // amd64: "MOVQ\t[$]4617801906721357038" + *p = 5.432 +} +func Float32ConstantStore(p *float32) { + // amd64: "MOVL\t[$]1085133554" + *p = 5.432 +} From b0f7be3cfa1ee5fbfe46590475861677cc9514fa Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 12 Jun 2024 20:24:44 -0700 Subject: [PATCH 028/866] cmd/compile: don't treat an InlMark as a read during deadstore An InlMark "read" can't make an otherwise dead store live. Without this CL, we sometimes zero an object twice in succession because we think there is a reader in between. Kind of challenging to make a test for this. The second zeroing has the same instruction on the same line number, so codegen tests can't see it. Fixes #67957 Change-Id: I7fb97ebff50d8eb6246fc4802d1136b7cc76c45f Reviewed-on: https://go-review.googlesource.com/c/go/+/592615 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/compile/internal/ssa/deadstore.go | 4 ++++ src/runtime/symtabinl_test.go | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/cmd/compile/internal/ssa/deadstore.go b/src/cmd/compile/internal/ssa/deadstore.go index ce04cb3a24ff72..a0d61bad03b2b9 100644 --- a/src/cmd/compile/internal/ssa/deadstore.go +++ b/src/cmd/compile/internal/ssa/deadstore.go @@ -59,6 +59,10 @@ func dse(f *Func) { continue } } + if v.Op == OpInlMark { + // Not really a use of the memory. See #67957. + continue + } for _, a := range v.Args { if a.Block == b && a.Type.IsMemory() { loadUse.add(a.ID) diff --git a/src/runtime/symtabinl_test.go b/src/runtime/symtabinl_test.go index db682e0c9caa8c..ab58c053805e24 100644 --- a/src/runtime/symtabinl_test.go +++ b/src/runtime/symtabinl_test.go @@ -107,16 +107,17 @@ func lineNumber() int { // Below here is the test data for XTestInlineUnwinder var tiuStart = lineNumber() // +0 -var tiu1, tiu2, tiu3 int // +1 -func tiuInlined1() { // +2 - tiu1++ // +3 +var tiu2, tiu3 int // +1 +func tiuInlined1(i int) { // +2 + tiu1[i]++ // +3 } // +4 func tiuInlined2() { // +5 - tiuInlined1() // +6 - tiu2++ // +7 + tiuInlined1(1) // +6 + tiu2++ // +7 } // +8 func tiuTest() { // +9 - tiuInlined1() // +10 - tiuInlined2() // +11 - tiu3++ // +12 -} // +13 + tiuInlined1(0) // +10 + tiuInlined2() // +11 + tiu3++ // +12 +} // +13 +var tiu1 [2]int // +14 From df009eead9c2d213bc9c6057f07d2c319f71b50b Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 29 May 2024 19:37:43 -0700 Subject: [PATCH 029/866] cmd/cgo: error on multiple incompatible function declarations When there are multiple declarations of a function, ensure that those declarations at least agree on the size/alignment of arguments and return values. It's hard to be stricter given existing code and situations where arguments differ only by typedefs. For instance: int usleep(unsigned); int usleep(useconds_t); Fixes #67699. Change-Id: I3b4b17afee92b55f9e712b4590ec608ab1f7ac91 Reviewed-on: https://go-review.googlesource.com/c/go/+/588977 Auto-Submit: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Ian Lance Taylor --- doc/next/3-tools.md | 6 ++ .../cgo/internal/testerrors/errors_test.go | 22 +++++-- .../testerrors/testdata/issue67699a.go | 16 ++++++ .../testerrors/testdata/issue67699b.go | 16 ++++++ src/cmd/cgo/main.go | 57 ++++++++++++++++++- 5 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 src/cmd/cgo/internal/testerrors/testdata/issue67699a.go create mode 100644 src/cmd/cgo/internal/testerrors/testdata/issue67699b.go diff --git a/doc/next/3-tools.md b/doc/next/3-tools.md index 5638f240a5b127..5ccade703f3436 100644 --- a/doc/next/3-tools.md +++ b/doc/next/3-tools.md @@ -4,3 +4,9 @@ ### Cgo {#cgo} +Cgo currently refuses to compile calls to a C function which has multiple +incompatible declarations. For instance, if `f` is declared as both `void f(int)` +and `void f(double)`, cgo will report an error instead of possibly generating an +incorrect call sequence for `f(0)`. New in this release is a better detector for +this error condition when the incompatible declarations appear in different +files. See [#67699](https://go.dev/issue/67699). diff --git a/src/cmd/cgo/internal/testerrors/errors_test.go b/src/cmd/cgo/internal/testerrors/errors_test.go index eddfb6583b9e77..0780870fe0e69a 100644 --- a/src/cmd/cgo/internal/testerrors/errors_test.go +++ b/src/cmd/cgo/internal/testerrors/errors_test.go @@ -60,19 +60,23 @@ func check(t *testing.T, file string) { if len(errors) == 0 { t.Fatalf("cannot find ERROR HERE") } - expect(t, file, errors) + expect(t, errors, file) }) } -func expect(t *testing.T, file string, errors []*regexp.Regexp) { +func expect(t *testing.T, errors []*regexp.Regexp, files ...string) { dir, err := os.MkdirTemp("", filepath.Base(t.Name())) if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) - dst := filepath.Join(dir, strings.TrimSuffix(file, ".go")) - cmd := exec.Command("go", "build", "-gcflags=-L -e", "-o="+dst, path(file)) // TODO(gri) no need for -gcflags=-L if go tool is adjusted + dst := filepath.Join(dir, strings.TrimSuffix(files[0], ".go")) + args := []string{"build", "-gcflags=-L -e", "-o=" + dst} // TODO(gri) no need for -gcflags=-L if go tool is adjusted + for _, file := range files { + args = append(args, path(file)) + } + cmd := exec.Command("go", args...) out, err := cmd.CombinedOutput() if err == nil { t.Errorf("expected cgo to fail but it succeeded") @@ -180,3 +184,13 @@ func TestNotMatchedCFunction(t *testing.T) { file := "notmatchedcfunction.go" check(t, file) } + +func TestIncompatibleDeclarations(t *testing.T) { + testenv.MustHaveCGO(t) + testenv.MustHaveGoRun(t) + t.Parallel() + expect(t, []*regexp.Regexp{ + regexp.MustCompile("inconsistent definitions for C[.]f"), + regexp.MustCompile("inconsistent definitions for C[.]g"), + }, "issue67699a.go", "issue67699b.go") +} diff --git a/src/cmd/cgo/internal/testerrors/testdata/issue67699a.go b/src/cmd/cgo/internal/testerrors/testdata/issue67699a.go new file mode 100644 index 00000000000000..d55f13c79f0b73 --- /dev/null +++ b/src/cmd/cgo/internal/testerrors/testdata/issue67699a.go @@ -0,0 +1,16 @@ +// Copyright 2024 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 main + +/* +int f(); +int g(int x); +*/ +import "C" + +func main() { + C.f() + C.g(0) +} diff --git a/src/cmd/cgo/internal/testerrors/testdata/issue67699b.go b/src/cmd/cgo/internal/testerrors/testdata/issue67699b.go new file mode 100644 index 00000000000000..39c8730ca0ac8b --- /dev/null +++ b/src/cmd/cgo/internal/testerrors/testdata/issue67699b.go @@ -0,0 +1,16 @@ +// Copyright 2024 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 main + +/* +void f(){} +int g(double x){} +*/ +import "C" + +func init() { + C.f() + C.g(0) +} diff --git a/src/cmd/cgo/main.go b/src/cmd/cgo/main.go index 5699cc55be0e66..519d76c644ca6e 100644 --- a/src/cmd/cgo/main.go +++ b/src/cmd/cgo/main.go @@ -159,6 +159,13 @@ type Type struct { BadPointer bool // this pointer type should be represented as a uintptr (deprecated) } +func (t *Type) fuzzyMatch(t2 *Type) bool { + if t == nil || t2 == nil { + return false + } + return t.Size == t2.Size && t.Align == t2.Align +} + // A FuncType collects information about a function type in both the C and Go worlds. type FuncType struct { Params []*Type @@ -166,6 +173,24 @@ type FuncType struct { Go *ast.FuncType } +func (t *FuncType) fuzzyMatch(t2 *FuncType) bool { + if t == nil || t2 == nil { + return false + } + if !t.Result.fuzzyMatch(t2.Result) { + return false + } + if len(t.Params) != len(t2.Params) { + return false + } + for i := range t.Params { + if !t.Params[i].fuzzyMatch(t2.Params[i]) { + return false + } + } + return true +} + func usage() { fmt.Fprint(os.Stderr, "usage: cgo -- [compiler options] file.go ...\n") flag.PrintDefaults() @@ -515,19 +540,45 @@ func (p *Package) Record(f *File) { if p.Name == nil { p.Name = f.Name } else { + // Merge the new file's names in with the existing names. for k, v := range f.Name { if p.Name[k] == nil { + // Never seen before, just save it. p.Name[k] = v - } else if p.incompleteTypedef(p.Name[k].Type) { + } else if p.incompleteTypedef(p.Name[k].Type) && p.Name[k].FuncType == nil { + // Old one is incomplete, just use new one. p.Name[k] = v - } else if p.incompleteTypedef(v.Type) { + } else if p.incompleteTypedef(v.Type) && v.FuncType == nil { + // New one is incomplete, just use old one. // Nothing to do. } else if _, ok := nameToC[k]; ok { // Names we predefine may appear inconsistent // if some files typedef them and some don't. // Issue 26743. } else if !reflect.DeepEqual(p.Name[k], v) { - error_(token.NoPos, "inconsistent definitions for C.%s", fixGo(k)) + // We don't require strict func type equality, because some functions + // can have things like typedef'd arguments that are equivalent to + // the standard arguments. e.g. + // int usleep(unsigned); + // int usleep(useconds_t); + // So we just check size/alignment of arguments. At least that + // avoids problems like those in #67670 and #67699. + ok := false + ft1 := p.Name[k].FuncType + ft2 := v.FuncType + if ft1.fuzzyMatch(ft2) { + // Retry DeepEqual with the FuncType field cleared. + x1 := *p.Name[k] + x2 := *v + x1.FuncType = nil + x2.FuncType = nil + if reflect.DeepEqual(&x1, &x2) { + ok = true + } + } + if !ok { + error_(token.NoPos, "inconsistent definitions for C.%s", fixGo(k)) + } } } } From dbfa3cacc7a4178ff3b81c79f7678ac9d61c54ab Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Tue, 25 Jun 2024 14:01:09 -0700 Subject: [PATCH 030/866] cmd/compile: fix typing of atomic logical operations For atomic AND and OR operations on memory, we currently have two views of the op. One just does the operation on the memory and returns just a memory. The other does the operation on the memory and returns the old value (before having the logical operation done to it) and memory. Update #61395 These two type differently, and there's currently some confusion in our rules about which is which. Use different names for the two different flavors so we don't get them confused. Change-Id: I07b4542db672b2cee98169ac42b67db73c482093 Reviewed-on: https://go-review.googlesource.com/c/go/+/594976 Reviewed-by: Cherry Mui Reviewed-by: Nicolas Hillegeer LUCI-TryBot-Result: Go LUCI Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Keith Randall --- src/cmd/compile/internal/ssa/_gen/ARM64.rules | 8 +-- .../compile/internal/ssa/_gen/genericOps.go | 32 ++++++---- src/cmd/compile/internal/ssa/opGen.go | 64 +++++++++++++------ src/cmd/compile/internal/ssa/rewriteARM64.go | 24 +++---- src/cmd/compile/internal/ssagen/ssa.go | 52 +++++++++------ 5 files changed, 113 insertions(+), 67 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/ARM64.rules b/src/cmd/compile/internal/ssa/_gen/ARM64.rules index 721095f653363a..12badbdcb65bbc 100644 --- a/src/cmd/compile/internal/ssa/_gen/ARM64.rules +++ b/src/cmd/compile/internal/ssa/_gen/ARM64.rules @@ -580,10 +580,10 @@ (AtomicCompareAndSwap(32|64)Variant ...) => (LoweredAtomicCas(32|64)Variant ...) // Return old contents. -(AtomicAnd(64|32|8) ...) => (LoweredAtomicAnd(64|32|8) ...) -(AtomicOr(64|32|8) ...) => (LoweredAtomicOr(64|32|8) ...) -(AtomicAnd(64|32|8)Variant ...) => (LoweredAtomicAnd(64|32|8)Variant ...) -(AtomicOr(64|32|8)Variant ...) => (LoweredAtomicOr(64|32|8)Variant ...) +(AtomicAnd(64|32|8)value ...) => (LoweredAtomicAnd(64|32|8) ...) +(AtomicOr(64|32|8)value ...) => (LoweredAtomicOr(64|32|8) ...) +(AtomicAnd(64|32|8)valueVariant ...) => (LoweredAtomicAnd(64|32|8)Variant ...) +(AtomicOr(64|32|8)valueVariant ...) => (LoweredAtomicOr(64|32|8)Variant ...) // Write barrier. (WB ...) => (LoweredWB ...) diff --git a/src/cmd/compile/internal/ssa/_gen/genericOps.go b/src/cmd/compile/internal/ssa/_gen/genericOps.go index 6805408b467c65..47d82924e6007c 100644 --- a/src/cmd/compile/internal/ssa/_gen/genericOps.go +++ b/src/cmd/compile/internal/ssa/_gen/genericOps.go @@ -609,12 +609,20 @@ var genericOps = []opData{ {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true if store happens and new memory. {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true if store happens and new memory. {name: "AtomicCompareAndSwapRel32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Lock release, reports whether store happens and new memory. - {name: "AtomicAnd8", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicOr8", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicAnd64", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicAnd32", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicOr64", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicOr32", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + + // Older atomic logical operations which don't return the old value. + {name: "AtomicAnd8", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns memory. + {name: "AtomicOr8", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns memory. + {name: "AtomicAnd32", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns memory. + {name: "AtomicOr32", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns memory. + + // Newer atomic logical operations which return the old value. + {name: "AtomicAnd64value", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicAnd32value", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicAnd8value", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicOr64value", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicOr32value", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicOr8value", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. // Atomic operation variants // These variants have the same semantics as above atomic operations. @@ -628,12 +636,12 @@ var genericOps = []opData{ {name: "AtomicExchange64Variant", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory. {name: "AtomicCompareAndSwap32Variant", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true if store happens and new memory. {name: "AtomicCompareAndSwap64Variant", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true if store happens and new memory. - {name: "AtomicAnd8Variant", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicOr8Variant", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicAnd64Variant", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicOr64Variant", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicAnd32Variant", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. - {name: "AtomicOr32Variant", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicAnd64valueVariant", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicOr64valueVariant", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicAnd32valueVariant", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicOr32valueVariant", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicAnd8valueVariant", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns old contents of *arg0 and new memory. + {name: "AtomicOr8valueVariant", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns old contents of *arg0 and new memory. // Publication barrier {name: "PubBarrier", argLength: 1, hasSideEffects: true}, // Do data barrier. arg0=memory. diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 847d62c0a5910a..9c464f6a1ff539 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -3231,22 +3231,26 @@ const ( OpAtomicCompareAndSwapRel32 OpAtomicAnd8 OpAtomicOr8 - OpAtomicAnd64 OpAtomicAnd32 - OpAtomicOr64 OpAtomicOr32 + OpAtomicAnd64value + OpAtomicAnd32value + OpAtomicAnd8value + OpAtomicOr64value + OpAtomicOr32value + OpAtomicOr8value OpAtomicAdd32Variant OpAtomicAdd64Variant OpAtomicExchange32Variant OpAtomicExchange64Variant OpAtomicCompareAndSwap32Variant OpAtomicCompareAndSwap64Variant - OpAtomicAnd8Variant - OpAtomicOr8Variant - OpAtomicAnd64Variant - OpAtomicOr64Variant - OpAtomicAnd32Variant - OpAtomicOr32Variant + OpAtomicAnd64valueVariant + OpAtomicOr64valueVariant + OpAtomicAnd32valueVariant + OpAtomicOr32valueVariant + OpAtomicAnd8valueVariant + OpAtomicOr8valueVariant OpPubBarrier OpClobber OpClobberReg @@ -40739,25 +40743,49 @@ var opcodeTable = [...]opInfo{ generic: true, }, { - name: "AtomicAnd64", + name: "AtomicAnd32", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicAnd32", + name: "AtomicOr32", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicOr64", + name: "AtomicAnd64value", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicOr32", + name: "AtomicAnd32value", + argLen: 3, + hasSideEffects: true, + generic: true, + }, + { + name: "AtomicAnd8value", + argLen: 3, + hasSideEffects: true, + generic: true, + }, + { + name: "AtomicOr64value", + argLen: 3, + hasSideEffects: true, + generic: true, + }, + { + name: "AtomicOr32value", + argLen: 3, + hasSideEffects: true, + generic: true, + }, + { + name: "AtomicOr8value", argLen: 3, hasSideEffects: true, generic: true, @@ -40799,37 +40827,37 @@ var opcodeTable = [...]opInfo{ generic: true, }, { - name: "AtomicAnd8Variant", + name: "AtomicAnd64valueVariant", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicOr8Variant", + name: "AtomicOr64valueVariant", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicAnd64Variant", + name: "AtomicAnd32valueVariant", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicOr64Variant", + name: "AtomicOr32valueVariant", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicAnd32Variant", + name: "AtomicAnd8valueVariant", argLen: 3, hasSideEffects: true, generic: true, }, { - name: "AtomicOr32Variant", + name: "AtomicOr8valueVariant", argLen: 3, hasSideEffects: true, generic: true, diff --git a/src/cmd/compile/internal/ssa/rewriteARM64.go b/src/cmd/compile/internal/ssa/rewriteARM64.go index a548f6bd9725bd..44b171d6055bbd 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM64.go +++ b/src/cmd/compile/internal/ssa/rewriteARM64.go @@ -469,22 +469,22 @@ func rewriteValueARM64(v *Value) bool { case OpAtomicAdd64Variant: v.Op = OpARM64LoweredAtomicAdd64Variant return true - case OpAtomicAnd32: + case OpAtomicAnd32value: v.Op = OpARM64LoweredAtomicAnd32 return true - case OpAtomicAnd32Variant: + case OpAtomicAnd32valueVariant: v.Op = OpARM64LoweredAtomicAnd32Variant return true - case OpAtomicAnd64: + case OpAtomicAnd64value: v.Op = OpARM64LoweredAtomicAnd64 return true - case OpAtomicAnd64Variant: + case OpAtomicAnd64valueVariant: v.Op = OpARM64LoweredAtomicAnd64Variant return true - case OpAtomicAnd8: + case OpAtomicAnd8value: v.Op = OpARM64LoweredAtomicAnd8 return true - case OpAtomicAnd8Variant: + case OpAtomicAnd8valueVariant: v.Op = OpARM64LoweredAtomicAnd8Variant return true case OpAtomicCompareAndSwap32: @@ -523,22 +523,22 @@ func rewriteValueARM64(v *Value) bool { case OpAtomicLoadPtr: v.Op = OpARM64LDAR return true - case OpAtomicOr32: + case OpAtomicOr32value: v.Op = OpARM64LoweredAtomicOr32 return true - case OpAtomicOr32Variant: + case OpAtomicOr32valueVariant: v.Op = OpARM64LoweredAtomicOr32Variant return true - case OpAtomicOr64: + case OpAtomicOr64value: v.Op = OpARM64LoweredAtomicOr64 return true - case OpAtomicOr64Variant: + case OpAtomicOr64valueVariant: v.Op = OpARM64LoweredAtomicOr64Variant return true - case OpAtomicOr8: + case OpAtomicOr8value: v.Op = OpARM64LoweredAtomicOr8 return true - case OpAtomicOr8Variant: + case OpAtomicOr8valueVariant: v.Op = OpARM64LoweredAtomicOr8Variant return true case OpAtomicStore32: diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index e6d5a139572767..98259f43cee004 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -4410,13 +4410,13 @@ func InitTables() { }, sys.AMD64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X) - type atomicOpEmitter func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind) + type atomicOpEmitter func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind, needReturn bool) - makeAtomicGuardedIntrinsicARM64 := func(op0, op1 ssa.Op, typ types.Kind, emit atomicOpEmitter) intrinsicBuilder { + makeAtomicGuardedIntrinsicARM64common := func(op0, op1 ssa.Op, typ types.Kind, emit atomicOpEmitter, needReturn bool) intrinsicBuilder { return func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { if buildcfg.GOARM64.LSE { - emit(s, n, args, op1, typ) + emit(s, n, args, op1, typ, needReturn) } else { // Target Atomic feature is identified by dynamic detection addr := s.entryNewValue1A(ssa.OpAddr, types.Types[types.TBOOL].PtrTo(), ir.Syms.ARM64HasATOMICS, s.sb) @@ -4433,29 +4433,37 @@ func InitTables() { // We have atomic instructions - use it directly. s.startBlock(bTrue) - emit(s, n, args, op1, typ) + emit(s, n, args, op1, typ, needReturn) s.endBlock().AddEdgeTo(bEnd) // Use original instruction sequence. s.startBlock(bFalse) - emit(s, n, args, op0, typ) + emit(s, n, args, op0, typ, needReturn) s.endBlock().AddEdgeTo(bEnd) // Merge results. s.startBlock(bEnd) } - if typ == types.TNIL { - return nil - } else { + if needReturn { return s.variable(n, types.Types[typ]) + } else { + return nil } } } + makeAtomicGuardedIntrinsicARM64 := func(op0, op1 ssa.Op, typ types.Kind, emit atomicOpEmitter) intrinsicBuilder { + return makeAtomicGuardedIntrinsicARM64common(op0, op1, typ, emit, true) + } + makeAtomicGuardedIntrinsicARM64old := func(op0, op1 ssa.Op, typ types.Kind, emit atomicOpEmitter) intrinsicBuilder { + return makeAtomicGuardedIntrinsicARM64common(op0, op1, typ, emit, false) + } - atomicEmitterARM64 := func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind) { + atomicEmitterARM64 := func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind, needReturn bool) { v := s.newValue3(op, types.NewTuple(types.Types[typ], types.TypeMem), args[0], args[1], s.mem()) s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v) - s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v) + if needReturn { + s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v) + } } addF("internal/runtime/atomic", "Xchg", makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange32, ssa.OpAtomicExchange32Variant, types.TUINT32, atomicEmitterARM64), @@ -4508,10 +4516,12 @@ func InitTables() { }, sys.PPC64) - atomicCasEmitterARM64 := func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind) { + atomicCasEmitterARM64 := func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind, needReturn bool) { v := s.newValue4(op, types.NewTuple(types.Types[types.TBOOL], types.TypeMem), args[0], args[1], args[2], s.mem()) s.vars[memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v) - s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v) + if needReturn { + s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v) + } } addF("internal/runtime/atomic", "Cas", @@ -4538,7 +4548,7 @@ func InitTables() { s.vars[memVar] = s.newValue3(ssa.OpAtomicOr8, types.TypeMem, args[0], args[1], s.mem()) return nil }, - sys.AMD64, sys.ARM64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X) + sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X) addF("internal/runtime/atomic", "Or", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { s.vars[memVar] = s.newValue3(ssa.OpAtomicOr32, types.TypeMem, args[0], args[1], s.mem()) @@ -4547,28 +4557,28 @@ func InitTables() { sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X) addF("internal/runtime/atomic", "And8", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd8, ssa.OpAtomicAnd8Variant, types.TUINT8, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64old(ssa.OpAtomicAnd8value, ssa.OpAtomicAnd8valueVariant, types.TUINT8, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "Or8", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr8, ssa.OpAtomicOr8Variant, types.TUINT8, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64old(ssa.OpAtomicOr8value, ssa.OpAtomicOr8valueVariant, types.TUINT8, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "And64", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd64, ssa.OpAtomicAnd64Variant, types.TUINT64, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd64value, ssa.OpAtomicAnd64valueVariant, types.TUINT64, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "And32", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32, ssa.OpAtomicAnd32Variant, types.TUINT32, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32value, ssa.OpAtomicAnd32valueVariant, types.TUINT32, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "And", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32, ssa.OpAtomicAnd32Variant, types.TUINT32, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64old(ssa.OpAtomicAnd32value, ssa.OpAtomicAnd32valueVariant, types.TUINT32, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "Or64", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr64, ssa.OpAtomicOr64Variant, types.TUINT64, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr64value, ssa.OpAtomicOr64valueVariant, types.TUINT64, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "Or32", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32, ssa.OpAtomicOr32Variant, types.TUINT32, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32value, ssa.OpAtomicOr32valueVariant, types.TUINT32, atomicEmitterARM64), sys.ARM64) addF("internal/runtime/atomic", "Or", - makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32, ssa.OpAtomicOr32Variant, types.TUINT32, atomicEmitterARM64), + makeAtomicGuardedIntrinsicARM64old(ssa.OpAtomicOr32value, ssa.OpAtomicOr32valueVariant, types.TUINT32, atomicEmitterARM64), sys.ARM64) // Aliases for atomic load operations From c18ff292959f18965ab6fa47d5dc7aeea1b2374f Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Tue, 25 Jun 2024 14:56:11 -0700 Subject: [PATCH 031/866] cmd/compile: make sync/atomic AND/OR operations intrinsic on amd64 Update #61395 Change-Id: I59a950f48efc587dfdffce00e2f4f3ab99d8df00 Reviewed-on: https://go-review.googlesource.com/c/go/+/594738 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Cherry Mui Reviewed-by: Nicolas Hillegeer --- src/cmd/compile/internal/amd64/ssa.go | 57 ++++++- src/cmd/compile/internal/ssa/_gen/AMD64.rules | 8 +- src/cmd/compile/internal/ssa/_gen/AMD64Ops.go | 14 +- src/cmd/compile/internal/ssa/opGen.go | 130 ++++++++++++++++ src/cmd/compile/internal/ssa/regalloc.go | 11 +- src/cmd/compile/internal/ssa/rewriteAMD64.go | 140 ++++++++++++++++++ src/cmd/compile/internal/ssagen/ssa.go | 64 ++++++-- test/codegen/atomics.go | 68 +++++++++ 8 files changed, 478 insertions(+), 14 deletions(-) diff --git a/src/cmd/compile/internal/amd64/ssa.go b/src/cmd/compile/internal/amd64/ssa.go index ab762c24f67034..61f1c88a718afc 100644 --- a/src/cmd/compile/internal/amd64/ssa.go +++ b/src/cmd/compile/internal/amd64/ssa.go @@ -1286,7 +1286,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p = s.Prog(x86.ASETEQ) p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg0() - case ssa.OpAMD64ANDBlock, ssa.OpAMD64ANDLlock, ssa.OpAMD64ORBlock, ssa.OpAMD64ORLlock: + case ssa.OpAMD64ANDBlock, ssa.OpAMD64ANDLlock, ssa.OpAMD64ANDQlock, ssa.OpAMD64ORBlock, ssa.OpAMD64ORLlock, ssa.OpAMD64ORQlock: + // Atomic memory operations that don't need to return the old value. s.Prog(x86.ALOCK) p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_REG @@ -1294,6 +1295,60 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.To.Type = obj.TYPE_MEM p.To.Reg = v.Args[0].Reg() ssagen.AddAux(&p.To, v) + case ssa.OpAMD64LoweredAtomicAnd64, ssa.OpAMD64LoweredAtomicOr64, ssa.OpAMD64LoweredAtomicAnd32, ssa.OpAMD64LoweredAtomicOr32: + // Atomic memory operations that need to return the old value. + // We need to do these with compare-and-exchange to get access to the old value. + // loop: + // MOVQ mask, tmp + // MOVQ (addr), AX + // ANDQ AX, tmp + // LOCK CMPXCHGQ tmp, (addr) : note that AX is implicit old value to compare against + // JNE loop + // : result in AX + mov := x86.AMOVQ + op := x86.AANDQ + cmpxchg := x86.ACMPXCHGQ + switch v.Op { + case ssa.OpAMD64LoweredAtomicOr64: + op = x86.AORQ + case ssa.OpAMD64LoweredAtomicAnd32: + mov = x86.AMOVL + op = x86.AANDL + cmpxchg = x86.ACMPXCHGL + case ssa.OpAMD64LoweredAtomicOr32: + mov = x86.AMOVL + op = x86.AORL + cmpxchg = x86.ACMPXCHGL + } + addr := v.Args[0].Reg() + mask := v.Args[1].Reg() + tmp := v.RegTmp() + p1 := s.Prog(mov) + p1.From.Type = obj.TYPE_REG + p1.From.Reg = mask + p1.To.Type = obj.TYPE_REG + p1.To.Reg = tmp + p2 := s.Prog(mov) + p2.From.Type = obj.TYPE_MEM + p2.From.Reg = addr + ssagen.AddAux(&p2.From, v) + p2.To.Type = obj.TYPE_REG + p2.To.Reg = x86.REG_AX + p3 := s.Prog(op) + p3.From.Type = obj.TYPE_REG + p3.From.Reg = x86.REG_AX + p3.To.Type = obj.TYPE_REG + p3.To.Reg = tmp + s.Prog(x86.ALOCK) + p5 := s.Prog(cmpxchg) + p5.From.Type = obj.TYPE_REG + p5.From.Reg = tmp + p5.To.Type = obj.TYPE_MEM + p5.To.Reg = addr + ssagen.AddAux(&p5.To, v) + p6 := s.Prog(x86.AJNE) + p6.To.Type = obj.TYPE_BRANCH + p6.To.SetTarget(p1) case ssa.OpAMD64PrefetchT0, ssa.OpAMD64PrefetchNTA: p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_MEM diff --git a/src/cmd/compile/internal/ssa/_gen/AMD64.rules b/src/cmd/compile/internal/ssa/_gen/AMD64.rules index 0f7b0bb6d8a34b..d8bdf6b17e32e9 100644 --- a/src/cmd/compile/internal/ssa/_gen/AMD64.rules +++ b/src/cmd/compile/internal/ssa/_gen/AMD64.rules @@ -578,12 +578,15 @@ (AtomicCompareAndSwap32 ptr old new_ mem) => (CMPXCHGLlock ptr old new_ mem) (AtomicCompareAndSwap64 ptr old new_ mem) => (CMPXCHGQlock ptr old new_ mem) -// Atomic memory updates. +// Atomic memory logical operations (old style). (AtomicAnd8 ptr val mem) => (ANDBlock ptr val mem) (AtomicAnd32 ptr val mem) => (ANDLlock ptr val mem) (AtomicOr8 ptr val mem) => (ORBlock ptr val mem) (AtomicOr32 ptr val mem) => (ORLlock ptr val mem) +// Atomic memory logical operations (new style). +(Atomic(And64|And32|Or64|Or32)value ptr val mem) => (LoweredAtomic(And64|And32|Or64|Or32) ptr val mem) + // Write barrier. (WB ...) => (LoweredWB ...) @@ -1697,3 +1700,6 @@ ((SHL|SHR|SAR)XQload [off] {sym} ptr (MOVQconst [c]) mem) => ((SHL|SHR|SAR)Qconst [int8(c&63)] (MOVQload [off] {sym} ptr mem)) ((SHL|SHR|SAR)XQload [off] {sym} ptr (MOVLconst [c]) mem) => ((SHL|SHR|SAR)Qconst [int8(c&63)] (MOVQload [off] {sym} ptr mem)) ((SHL|SHR|SAR)XLload [off] {sym} ptr (MOVLconst [c]) mem) => ((SHL|SHR|SAR)Lconst [int8(c&31)] (MOVLload [off] {sym} ptr mem)) + +// Convert atomic logical operations to easier ones if we don't use the result. +(Select1 a:(LoweredAtomic(And64|And32|Or64|Or32) ptr val mem)) && a.Uses == 1 && clobber(a) => ((ANDQ|ANDL|ORQ|ORL)lock ptr val mem) diff --git a/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go b/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go index 606171947bbd75..3440c435322c61 100644 --- a/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/AMD64Ops.go @@ -152,6 +152,7 @@ func init() { gpstoreconstidx = regInfo{inputs: []regMask{gpspsbg, gpsp, 0}} gpstorexchg = regInfo{inputs: []regMask{gp, gpspsbg, 0}, outputs: []regMask{gp}} cmpxchg = regInfo{inputs: []regMask{gp, ax, gp, 0}, outputs: []regMask{gp, 0}, clobbers: ax} + atomicLogic = regInfo{inputs: []regMask{gp &^ ax, gp &^ ax, 0}, outputs: []regMask{ax, 0}} fp01 = regInfo{inputs: nil, outputs: fponly} fp21 = regInfo{inputs: []regMask{fp, fp}, outputs: fponly} @@ -1040,11 +1041,22 @@ func init() { {name: "CMPXCHGLlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, {name: "CMPXCHGQlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, - // Atomic memory updates. + // Atomic memory updates using logical operations. + // Old style that just returns the memory state. {name: "ANDBlock", argLength: 3, reg: gpstore, asm: "ANDB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, // *(arg0+auxint+aux) &= arg1 {name: "ANDLlock", argLength: 3, reg: gpstore, asm: "ANDL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, // *(arg0+auxint+aux) &= arg1 + {name: "ANDQlock", argLength: 3, reg: gpstore, asm: "ANDQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, // *(arg0+auxint+aux) &= arg1 {name: "ORBlock", argLength: 3, reg: gpstore, asm: "ORB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, // *(arg0+auxint+aux) |= arg1 {name: "ORLlock", argLength: 3, reg: gpstore, asm: "ORL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, // *(arg0+auxint+aux) |= arg1 + {name: "ORQlock", argLength: 3, reg: gpstore, asm: "ORQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr"}, // *(arg0+auxint+aux) |= arg1 + + // Atomic memory updates using logical operations. + // *(arg0+auxint+aux) op= arg1. arg2=mem. + // New style that returns a tuple of . + {name: "LoweredAtomicAnd64", argLength: 3, reg: atomicLogic, resultNotInArgs: true, asm: "ANDQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr", unsafePoint: true, needIntTemp: true}, + {name: "LoweredAtomicAnd32", argLength: 3, reg: atomicLogic, resultNotInArgs: true, asm: "ANDL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr", unsafePoint: true, needIntTemp: true}, + {name: "LoweredAtomicOr64", argLength: 3, reg: atomicLogic, resultNotInArgs: true, asm: "ORQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr", unsafePoint: true, needIntTemp: true}, + {name: "LoweredAtomicOr32", argLength: 3, reg: atomicLogic, resultNotInArgs: true, asm: "ORL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true, symEffect: "RdWr", unsafePoint: true, needIntTemp: true}, // Prefetch instructions // Do prefetch arg0 address. arg0=addr, arg1=memory. Instruction variant selects locality hint diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 9c464f6a1ff539..91728da80d6855 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -1071,8 +1071,14 @@ const ( OpAMD64CMPXCHGQlock OpAMD64ANDBlock OpAMD64ANDLlock + OpAMD64ANDQlock OpAMD64ORBlock OpAMD64ORLlock + OpAMD64ORQlock + OpAMD64LoweredAtomicAnd64 + OpAMD64LoweredAtomicAnd32 + OpAMD64LoweredAtomicOr64 + OpAMD64LoweredAtomicOr32 OpAMD64PrefetchT0 OpAMD64PrefetchNTA OpAMD64ANDNQ @@ -14128,6 +14134,22 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "ANDQlock", + auxType: auxSymOff, + argLen: 3, + clobberFlags: true, + faultOnNilArg0: true, + hasSideEffects: true, + symEffect: SymRdWr, + asm: x86.AANDQ, + reg: regInfo{ + inputs: []inputInfo{ + {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15 + {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB + }, + }, + }, { name: "ORBlock", auxType: auxSymOff, @@ -14160,6 +14182,114 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "ORQlock", + auxType: auxSymOff, + argLen: 3, + clobberFlags: true, + faultOnNilArg0: true, + hasSideEffects: true, + symEffect: SymRdWr, + asm: x86.AORQ, + reg: regInfo{ + inputs: []inputInfo{ + {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15 + {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB + }, + }, + }, + { + name: "LoweredAtomicAnd64", + auxType: auxSymOff, + argLen: 3, + resultNotInArgs: true, + clobberFlags: true, + needIntTemp: true, + faultOnNilArg0: true, + hasSideEffects: true, + unsafePoint: true, + symEffect: SymRdWr, + asm: x86.AANDQ, + reg: regInfo{ + inputs: []inputInfo{ + {0, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + {1, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 1}, // AX + }, + }, + }, + { + name: "LoweredAtomicAnd32", + auxType: auxSymOff, + argLen: 3, + resultNotInArgs: true, + clobberFlags: true, + needIntTemp: true, + faultOnNilArg0: true, + hasSideEffects: true, + unsafePoint: true, + symEffect: SymRdWr, + asm: x86.AANDL, + reg: regInfo{ + inputs: []inputInfo{ + {0, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + {1, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 1}, // AX + }, + }, + }, + { + name: "LoweredAtomicOr64", + auxType: auxSymOff, + argLen: 3, + resultNotInArgs: true, + clobberFlags: true, + needIntTemp: true, + faultOnNilArg0: true, + hasSideEffects: true, + unsafePoint: true, + symEffect: SymRdWr, + asm: x86.AORQ, + reg: regInfo{ + inputs: []inputInfo{ + {0, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + {1, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 1}, // AX + }, + }, + }, + { + name: "LoweredAtomicOr32", + auxType: auxSymOff, + argLen: 3, + resultNotInArgs: true, + clobberFlags: true, + needIntTemp: true, + faultOnNilArg0: true, + hasSideEffects: true, + unsafePoint: true, + symEffect: SymRdWr, + asm: x86.AORL, + reg: regInfo{ + inputs: []inputInfo{ + {0, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + {1, 49134}, // CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R15 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 1}, // AX + }, + }, + }, { name: "PrefetchT0", argLen: 2, diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go index 2325b9ee458412..68f90e4a503258 100644 --- a/src/cmd/compile/internal/ssa/regalloc.go +++ b/src/cmd/compile/internal/ssa/regalloc.go @@ -1612,8 +1612,14 @@ func (s *regAllocState) regalloc(f *Func) { // allocate it after all the input registers, but before // the input registers are freed via advanceUses below. // (Not all instructions need that distinct part, but it is conservative.) + // We also ensure it is not any of the single-choice output registers. if opcodeTable[v.Op].needIntTemp { m := s.allocatable & s.f.Config.gpRegMask + for _, out := range regspec.outputs { + if countRegs(out.regs) == 1 { + m &^= out.regs + } + } if m&^desired.avoid&^s.nospill != 0 { m &^= desired.avoid } @@ -1651,9 +1657,12 @@ func (s *regAllocState) regalloc(f *Func) { used |= regMask(1) << tmpReg } for _, out := range regspec.outputs { + if out.regs == 0 { + continue + } mask := out.regs & s.allocatable &^ used if mask == 0 { - continue + s.f.Fatalf("can't find any output register %s", v.LongString()) } if opcodeTable[v.Op].resultInArg0 && out.idx == 0 { if !opcodeTable[v.Op].commutative { diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go index 2670ba91b8e173..b3a644cbed8a8d 100644 --- a/src/cmd/compile/internal/ssa/rewriteAMD64.go +++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go @@ -573,6 +573,10 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpAtomicAdd64(v) case OpAtomicAnd32: return rewriteValueAMD64_OpAtomicAnd32(v) + case OpAtomicAnd32value: + return rewriteValueAMD64_OpAtomicAnd32value(v) + case OpAtomicAnd64value: + return rewriteValueAMD64_OpAtomicAnd64value(v) case OpAtomicAnd8: return rewriteValueAMD64_OpAtomicAnd8(v) case OpAtomicCompareAndSwap32: @@ -593,6 +597,10 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpAtomicLoadPtr(v) case OpAtomicOr32: return rewriteValueAMD64_OpAtomicOr32(v) + case OpAtomicOr32value: + return rewriteValueAMD64_OpAtomicOr32value(v) + case OpAtomicOr64value: + return rewriteValueAMD64_OpAtomicOr64value(v) case OpAtomicOr8: return rewriteValueAMD64_OpAtomicOr8(v) case OpAtomicStore32: @@ -23873,6 +23881,36 @@ func rewriteValueAMD64_OpAtomicAnd32(v *Value) bool { return true } } +func rewriteValueAMD64_OpAtomicAnd32value(v *Value) bool { + v_2 := v.Args[2] + v_1 := v.Args[1] + v_0 := v.Args[0] + // match: (AtomicAnd32value ptr val mem) + // result: (LoweredAtomicAnd32 ptr val mem) + for { + ptr := v_0 + val := v_1 + mem := v_2 + v.reset(OpAMD64LoweredAtomicAnd32) + v.AddArg3(ptr, val, mem) + return true + } +} +func rewriteValueAMD64_OpAtomicAnd64value(v *Value) bool { + v_2 := v.Args[2] + v_1 := v.Args[1] + v_0 := v.Args[0] + // match: (AtomicAnd64value ptr val mem) + // result: (LoweredAtomicAnd64 ptr val mem) + for { + ptr := v_0 + val := v_1 + mem := v_2 + v.reset(OpAMD64LoweredAtomicAnd64) + v.AddArg3(ptr, val, mem) + return true + } +} func rewriteValueAMD64_OpAtomicAnd8(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] @@ -24019,6 +24057,36 @@ func rewriteValueAMD64_OpAtomicOr32(v *Value) bool { return true } } +func rewriteValueAMD64_OpAtomicOr32value(v *Value) bool { + v_2 := v.Args[2] + v_1 := v.Args[1] + v_0 := v.Args[0] + // match: (AtomicOr32value ptr val mem) + // result: (LoweredAtomicOr32 ptr val mem) + for { + ptr := v_0 + val := v_1 + mem := v_2 + v.reset(OpAMD64LoweredAtomicOr32) + v.AddArg3(ptr, val, mem) + return true + } +} +func rewriteValueAMD64_OpAtomicOr64value(v *Value) bool { + v_2 := v.Args[2] + v_1 := v.Args[1] + v_0 := v.Args[0] + // match: (AtomicOr64value ptr val mem) + // result: (LoweredAtomicOr64 ptr val mem) + for { + ptr := v_0 + val := v_1 + mem := v_2 + v.reset(OpAMD64LoweredAtomicOr64) + v.AddArg3(ptr, val, mem) + return true + } +} func rewriteValueAMD64_OpAtomicOr8(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] @@ -29524,6 +29592,78 @@ func rewriteValueAMD64_OpSelect1(v *Value) bool { v.AddArg(tuple) return true } + // match: (Select1 a:(LoweredAtomicAnd64 ptr val mem)) + // cond: a.Uses == 1 && clobber(a) + // result: (ANDQlock ptr val mem) + for { + a := v_0 + if a.Op != OpAMD64LoweredAtomicAnd64 { + break + } + mem := a.Args[2] + ptr := a.Args[0] + val := a.Args[1] + if !(a.Uses == 1 && clobber(a)) { + break + } + v.reset(OpAMD64ANDQlock) + v.AddArg3(ptr, val, mem) + return true + } + // match: (Select1 a:(LoweredAtomicAnd32 ptr val mem)) + // cond: a.Uses == 1 && clobber(a) + // result: (ANDLlock ptr val mem) + for { + a := v_0 + if a.Op != OpAMD64LoweredAtomicAnd32 { + break + } + mem := a.Args[2] + ptr := a.Args[0] + val := a.Args[1] + if !(a.Uses == 1 && clobber(a)) { + break + } + v.reset(OpAMD64ANDLlock) + v.AddArg3(ptr, val, mem) + return true + } + // match: (Select1 a:(LoweredAtomicOr64 ptr val mem)) + // cond: a.Uses == 1 && clobber(a) + // result: (ORQlock ptr val mem) + for { + a := v_0 + if a.Op != OpAMD64LoweredAtomicOr64 { + break + } + mem := a.Args[2] + ptr := a.Args[0] + val := a.Args[1] + if !(a.Uses == 1 && clobber(a)) { + break + } + v.reset(OpAMD64ORQlock) + v.AddArg3(ptr, val, mem) + return true + } + // match: (Select1 a:(LoweredAtomicOr32 ptr val mem)) + // cond: a.Uses == 1 && clobber(a) + // result: (ORLlock ptr val mem) + for { + a := v_0 + if a.Op != OpAMD64LoweredAtomicOr32 { + break + } + mem := a.Args[2] + ptr := a.Args[0] + val := a.Args[1] + if !(a.Uses == 1 && clobber(a)) { + break + } + v.reset(OpAMD64ORLlock) + v.AddArg3(ptr, val, mem) + return true + } return false } func rewriteValueAMD64_OpSelectN(v *Value) bool { diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 98259f43cee004..765f4c2e98cdc4 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -4164,6 +4164,13 @@ func (s *state) sfcall(op ssa.Op, args ...*ssa.Value) (*ssa.Value, bool) { return nil, false } +// split breaks up a tuple-typed value into its 2 parts. +func (s *state) split(v *ssa.Value) (*ssa.Value, *ssa.Value) { + p0 := s.newValue1(ssa.OpSelect0, v.Type.FieldType(0), v) + p1 := s.newValue1(ssa.OpSelect1, v.Type.FieldType(1), v) + return p0, p1 +} + var intrinsics map[intrinsicKey]intrinsicBuilder // An intrinsicBuilder converts a call node n into an ssa value that @@ -4531,6 +4538,7 @@ func InitTables() { makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap64, ssa.OpAtomicCompareAndSwap64Variant, types.TBOOL, atomicCasEmitterARM64), sys.ARM64) + // Old-style atomic logical operation API (all supported archs except arm64). addF("internal/runtime/atomic", "And8", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { s.vars[memVar] = s.newValue3(ssa.OpAtomicAnd8, types.TypeMem, args[0], args[1], s.mem()) @@ -4556,6 +4564,8 @@ func InitTables() { }, sys.AMD64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X) + // arm64 always uses the new-style atomic logical operations, for both the + // old and new style API. addF("internal/runtime/atomic", "And8", makeAtomicGuardedIntrinsicARM64old(ssa.OpAtomicAnd8value, ssa.OpAtomicAnd8valueVariant, types.TUINT8, atomicEmitterARM64), sys.ARM64) @@ -4581,6 +4591,40 @@ func InitTables() { makeAtomicGuardedIntrinsicARM64old(ssa.OpAtomicOr32value, ssa.OpAtomicOr32valueVariant, types.TUINT32, atomicEmitterARM64), sys.ARM64) + // New-style atomic logical operations, which return the old memory value. + addF("internal/runtime/atomic", "And64", + func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { + v := s.newValue3(ssa.OpAtomicAnd64value, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], args[1], s.mem()) + p0, p1 := s.split(v) + s.vars[memVar] = p1 + return p0 + }, + sys.AMD64) + addF("internal/runtime/atomic", "And32", + func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { + v := s.newValue3(ssa.OpAtomicAnd32value, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], args[1], s.mem()) + p0, p1 := s.split(v) + s.vars[memVar] = p1 + return p0 + }, + sys.AMD64) + addF("internal/runtime/atomic", "Or64", + func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { + v := s.newValue3(ssa.OpAtomicOr64value, types.NewTuple(types.Types[types.TUINT64], types.TypeMem), args[0], args[1], s.mem()) + p0, p1 := s.split(v) + s.vars[memVar] = p1 + return p0 + }, + sys.AMD64) + addF("internal/runtime/atomic", "Or32", + func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { + v := s.newValue3(ssa.OpAtomicOr32value, types.NewTuple(types.Types[types.TUINT32], types.TypeMem), args[0], args[1], s.mem()) + p0, p1 := s.split(v) + s.vars[memVar] = p1 + return p0 + }, + sys.AMD64) + // Aliases for atomic load operations alias("internal/runtime/atomic", "Loadint32", "internal/runtime/atomic", "Load", all...) alias("internal/runtime/atomic", "Loadint64", "internal/runtime/atomic", "Load64", all...) @@ -5108,16 +5152,16 @@ func InitTables() { alias("sync/atomic", "AddUintptr", "internal/runtime/atomic", "Xadd", p4...) alias("sync/atomic", "AddUintptr", "internal/runtime/atomic", "Xadd64", p8...) - alias("sync/atomic", "AndInt32", "internal/runtime/atomic", "And32", sys.ArchARM64) - alias("sync/atomic", "AndUint32", "internal/runtime/atomic", "And32", sys.ArchARM64) - alias("sync/atomic", "AndInt64", "internal/runtime/atomic", "And64", sys.ArchARM64) - alias("sync/atomic", "AndUint64", "internal/runtime/atomic", "And64", sys.ArchARM64) - alias("sync/atomic", "AndUintptr", "internal/runtime/atomic", "And64", sys.ArchARM64) - alias("sync/atomic", "OrInt32", "internal/runtime/atomic", "Or32", sys.ArchARM64) - alias("sync/atomic", "OrUint32", "internal/runtime/atomic", "Or32", sys.ArchARM64) - alias("sync/atomic", "OrInt64", "internal/runtime/atomic", "Or64", sys.ArchARM64) - alias("sync/atomic", "OrUint64", "internal/runtime/atomic", "Or64", sys.ArchARM64) - alias("sync/atomic", "OrUintptr", "internal/runtime/atomic", "Or64", sys.ArchARM64) + alias("sync/atomic", "AndInt32", "internal/runtime/atomic", "And32", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "AndUint32", "internal/runtime/atomic", "And32", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "AndInt64", "internal/runtime/atomic", "And64", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "AndUint64", "internal/runtime/atomic", "And64", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "AndUintptr", "internal/runtime/atomic", "And64", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "OrInt32", "internal/runtime/atomic", "Or32", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "OrUint32", "internal/runtime/atomic", "Or32", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "OrInt64", "internal/runtime/atomic", "Or64", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "OrUint64", "internal/runtime/atomic", "Or64", sys.ArchARM64, sys.ArchAMD64) + alias("sync/atomic", "OrUintptr", "internal/runtime/atomic", "Or64", sys.ArchARM64, sys.ArchAMD64) /******** math/big ********/ alias("math/big", "mulWW", "math/bits", "Mul64", p8...) diff --git a/test/codegen/atomics.go b/test/codegen/atomics.go index feaa31b9c1e420..14024dcd83640e 100644 --- a/test/codegen/atomics.go +++ b/test/codegen/atomics.go @@ -22,6 +22,74 @@ func (c *Counter) Increment() { // arm64/v8.1:"LDADDALW" // arm64/v8.0:".*arm64HasATOMICS" // arm64/v8.1:-".*arm64HasATOMICS" + // amd64:"LOCK",-"CMPXCHG" atomic.AddInt32(&c.count, 1) } +func atomicLogical64(x *atomic.Uint64) uint64 { + var r uint64 + + // arm64/v8.0:"LDCLRALD" + // arm64/v8.1:"LDCLRALD" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // On amd64, make sure we use LOCK+AND instead of CMPXCHG when we don't use the result. + // amd64:"LOCK",-"CMPXCHGQ" + x.And(11) + // arm64/v8.0:"LDCLRALD" + // arm64/v8.1:"LDCLRALD" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // amd64:"LOCK","CMPXCHGQ" + r += x.And(22) + + // arm64/v8.0:"LDORALD" + // arm64/v8.1:"LDORALD" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // On amd64, make sure we use LOCK+OR instead of CMPXCHG when we don't use the result. + // amd64:"LOCK",-"CMPXCHGQ" + x.Or(33) + // arm64/v8.0:"LDORALD" + // arm64/v8.1:"LDORALD" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // amd64:"LOCK","CMPXCHGQ" + r += x.Or(44) + + return r +} + +func atomicLogical32(x *atomic.Uint32) uint32 { + var r uint32 + + // arm64/v8.0:"LDCLRALW" + // arm64/v8.1:"LDCLRALW" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // On amd64, make sure we use LOCK+AND instead of CMPXCHG when we don't use the result. + // amd64:"LOCK",-"CMPXCHGL" + x.And(11) + // arm64/v8.0:"LDCLRALW" + // arm64/v8.1:"LDCLRALW" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // amd64:"LOCK","CMPXCHGL" + r += x.And(22) + + // arm64/v8.0:"LDORALW" + // arm64/v8.1:"LDORALW" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // On amd64, make sure we use LOCK+OR instead of CMPXCHG when we don't use the result. + // amd64:"LOCK",-"CMPXCHGL" + x.Or(33) + // arm64/v8.0:"LDORALW" + // arm64/v8.1:"LDORALW" + // arm64/v8.0:".*arm64HasATOMICS" + // arm64/v8.1:-".*arm64HasATOMICS" + // amd64:"LOCK","CMPXCHGL" + r += x.Or(44) + + return r +} From 0d5fc4e1f01f320d9ce8fd14393241ac09cde791 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Tue, 23 Jul 2024 18:03:24 -0400 Subject: [PATCH 032/866] cmd/go: fix TestNewReleaseRebuildsStalePackagesInGOPATH for runtime move CL 600436 moved runtime/internal/sys to internal/runtime/sys and updated TestNewReleaseRebuildsStalePackagesInGOPATH in part accordingly. This is the other part that's needed for it to pass. For #65355. Change-Id: I26cff96c15caf185a4ee2c8fb31ec6c877ab87e2 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/600595 Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/cmd/go/go_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 5720a397f7a566..59520cd2b416d6 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -957,17 +957,17 @@ func TestNewReleaseRebuildsStalePackagesInGOPATH(t *testing.T) { // now they all matter, so keep using sys.go. restore = addVar(sys, 1) defer restore() - tg.wantStale("p1", "stale dependency: runtime/internal", "./testgo list claims p1 is NOT stale, incorrectly, after changing sys.go") + tg.wantStale("p1", "stale dependency: internal/runtime/sys", "./testgo list claims p1 is NOT stale, incorrectly, after changing sys.go") restore() tg.wantNotStale("p1", "", "./testgo list claims p1 is stale, incorrectly, after changing back to old release") addVar(sys, 2) - tg.wantStale("p1", "stale dependency: runtime", "./testgo list claims p1 is NOT stale, incorrectly, after changing sys.go again") + tg.wantStale("p1", "stale dependency: internal/runtime/sys", "./testgo list claims p1 is NOT stale, incorrectly, after changing sys.go again") tg.run("install", "p1") tg.wantNotStale("p1", "", "./testgo list claims p1 is stale after building with new release") // Restore to "old" release. restore() - tg.wantStale("p1", "stale dependency: runtime/internal", "./testgo list claims p1 is NOT stale, incorrectly, after restoring sys.go") + tg.wantStale("p1", "not installed but available in build cache", "./testgo list claims p1 is NOT stale, incorrectly, after restoring sys.go") tg.run("install", "p1") tg.wantNotStale("p1", "", "./testgo list claims p1 is stale after building with old release") } From d55253f5ddfc38bd45846583e07b5e4a97719931 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Tue, 23 Jul 2024 17:38:32 -0400 Subject: [PATCH 033/866] cmd/pprof: update vendored github.com/google/pprof Pull in the latest published version of github.com/google/pprof as part of the continuous process of keeping Go's dependencies up to date. For #36905. [git-generate] cd src/cmd go get github.com/google/pprof@v0.0.0-20240722153945-304e4f0156b8 go mod tidy go mod vendor Change-Id: If009cff7f2d99ec58315102963cbe07b6739c09a Reviewed-on: https://go-review.googlesource.com/c/go/+/600596 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Cherry Mui Auto-Submit: Dmitri Shuralyov --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 ++-- .../pprof/internal/driver/html/common.css | 10 ++++---- .../pprof/internal/driver/html/stacks.css | 3 --- .../pprof/internal/driver/html/stacks.js | 18 +++++++++++++- .../google/pprof/internal/driver/stacks.go | 4 +--- .../google/pprof/internal/report/report.go | 24 ++++++++++--------- .../google/pprof/internal/report/stacks.go | 7 ++++++ src/cmd/vendor/modules.txt | 2 +- 9 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/cmd/go.mod b/src/cmd/go.mod index d30c2604d4c13b..44ff9046571020 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -3,7 +3,7 @@ module cmd go 1.24 require ( - github.com/google/pprof v0.0.0-20240528025155-186aa0362fba + github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea golang.org/x/build v0.0.0-20240722200705-b9910f320300 golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 293d2459ab2798..15be5526ff929d 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -1,7 +1,7 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20240528025155-186aa0362fba h1:ql1qNgCyOB7iAEk8JTNM+zJrgIbnyCKX/wdlyPufP5g= -github.com/google/pprof v0.0.0-20240528025155-186aa0362fba/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3uCWyfMgOamLGWuGqlMS77Y1m3Y= +github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 h1:KwWnWVWCNtNq/ewIX7HIKnELmEx2nDP42yskD/pi7QE= github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68= diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/common.css b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/common.css index e0de53c1e1406c..14f836ff10f1d9 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/common.css +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/common.css @@ -52,7 +52,6 @@ a { } #detailsbox { display: none; - z-index: 1; position: fixed; top: 40px; right: 20px; @@ -107,7 +106,6 @@ a { } .submenu { display: none; - z-index: 1; margin-top: -4px; min-width: 10em; position: absolute; @@ -169,8 +167,6 @@ a { top: 60px; left: 50%; transform: translateX(-50%); - - z-index: 3; font-size: 125%; background-color: #ffffff; box-shadow: 0 1px 5px rgba(0,0,0,.3); @@ -271,3 +267,9 @@ table tr td { background-color: #ebf5fb; font-weight: bold; } +/* stacking order */ +.boxtext { z-index: 2; } /* flame graph box text */ +#current-details { z-index: 2; } /* flame graph current box info */ +#detailsbox { z-index: 3; } /* profile details */ +.submenu { z-index: 4; } +.dialog { z-index: 5; } diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.css b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.css index f5aeb9857a6d54..34c54ebb492ac0 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.css +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.css @@ -19,7 +19,6 @@ body { position: absolute; top: 5px; right: 5px; - z-index: 2; font-size: 12pt; } /* Background of a single flame-graph frame */ @@ -57,8 +56,6 @@ body { font-size: 12pt; font-weight: bold; } -/* Ensure that pprof menu is above boxes */ -.submenu { z-index: 3; } /* Right-click menu */ #action-menu { max-width: 15em; diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js index df0f0649b91c20..ced7151e8edd19 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js @@ -436,13 +436,29 @@ function stackViewer(stacks, nodes) { r.appendChild(t); } - r.addEventListener('click', () => { switchPivots(pprofQuoteMeta(src.UniqueName)); }); + onClick(r, () => { switchPivots(pprofQuoteMeta(src.UniqueName)); }); r.addEventListener('mouseenter', () => { handleEnter(box, r); }); r.addEventListener('mouseleave', () => { handleLeave(box); }); r.addEventListener('contextmenu', (e) => { showActionMenu(e, box); }); return r; } + // Handle clicks, but only if the mouse did not move during the click. + function onClick(target, handler) { + // Disable click if mouse moves more than threshold pixels since mousedown. + const threshold = 3; + let [x, y] = [-1, -1]; + target.addEventListener('mousedown', (e) => { + [x, y] = [e.clientX, e.clientY]; + }); + target.addEventListener('click', (e) => { + if (Math.abs(e.clientX - x) <= threshold && + Math.abs(e.clientY - y) <= threshold) { + handler(); + } + }); + } + function drawSep(y, posTotal, negTotal) { const m = document.createElement('div'); m.innerText = summary(posTotal, negTotal); diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/stacks.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/stacks.go index 355b8f2e2af913..a7936107d13665 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/stacks.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/stacks.go @@ -20,7 +20,6 @@ import ( "net/http" "github.com/google/pprof/internal/measurement" - "github.com/google/pprof/internal/report" ) // stackView generates the flamegraph view. @@ -51,8 +50,7 @@ func (ui *webInterface) stackView(w http.ResponseWriter, req *http.Request) { } nodes[0] = "" // root is not a real node - _, legend := report.TextItems(rpt) - ui.render(w, req, "stacks", rpt, errList, legend, webArgs{ + ui.render(w, req, "stacks", rpt, errList, stacks.Legend(), webArgs{ Stacks: template.JS(b), Nodes: nodes, UnitDefs: measurement.UnitTypes, diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/report.go b/src/cmd/vendor/github.com/google/pprof/internal/report/report.go index d72ebe914f26b8..e21ce859d42938 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/report.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/report/report.go @@ -781,7 +781,7 @@ type TextItem struct { func TextItems(rpt *Report) ([]TextItem, []string) { g, origCount, droppedNodes, _ := rpt.newTrimmedGraph() rpt.selectOutputUnit(g) - labels := reportLabels(rpt, g, origCount, droppedNodes, 0, false) + labels := reportLabels(rpt, graphTotal(g), len(g.Nodes), origCount, droppedNodes, 0, false) var items []TextItem var flatSum int64 @@ -1064,7 +1064,7 @@ func printTree(w io.Writer, rpt *Report) error { g, origCount, droppedNodes, _ := rpt.newTrimmedGraph() rpt.selectOutputUnit(g) - fmt.Fprintln(w, strings.Join(reportLabels(rpt, g, origCount, droppedNodes, 0, false), "\n")) + fmt.Fprintln(w, strings.Join(reportLabels(rpt, graphTotal(g), len(g.Nodes), origCount, droppedNodes, 0, false), "\n")) fmt.Fprintln(w, separator) fmt.Fprintln(w, legend) @@ -1128,7 +1128,7 @@ func printTree(w io.Writer, rpt *Report) error { func GetDOT(rpt *Report) (*graph.Graph, *graph.DotConfig) { g, origCount, droppedNodes, droppedEdges := rpt.newTrimmedGraph() rpt.selectOutputUnit(g) - labels := reportLabels(rpt, g, origCount, droppedNodes, droppedEdges, true) + labels := reportLabels(rpt, graphTotal(g), len(g.Nodes), origCount, droppedNodes, droppedEdges, true) c := &graph.DotConfig{ Title: rpt.options.Title, @@ -1184,12 +1184,19 @@ func ProfileLabels(rpt *Report) []string { return label } +func graphTotal(g *graph.Graph) int64 { + var total int64 + for _, n := range g.Nodes { + total += n.FlatValue() + } + return total +} + // reportLabels returns printable labels for a report. Includes // profileLabels. -func reportLabels(rpt *Report, g *graph.Graph, origCount, droppedNodes, droppedEdges int, fullHeaders bool) []string { +func reportLabels(rpt *Report, shownTotal int64, nodeCount, origCount, droppedNodes, droppedEdges int, fullHeaders bool) []string { nodeFraction := rpt.options.NodeFraction edgeFraction := rpt.options.EdgeFraction - nodeCount := len(g.Nodes) var label []string if len(rpt.options.ProfileLabels) > 0 { @@ -1198,17 +1205,12 @@ func reportLabels(rpt *Report, g *graph.Graph, origCount, droppedNodes, droppedE label = ProfileLabels(rpt) } - var flatSum int64 - for _, n := range g.Nodes { - flatSum = flatSum + n.FlatValue() - } - if len(rpt.options.ActiveFilters) > 0 { activeFilters := legendActiveFilters(rpt.options.ActiveFilters) label = append(label, activeFilters...) } - label = append(label, fmt.Sprintf("Showing nodes accounting for %s, %s of %s total", rpt.formatValue(flatSum), strings.TrimSpace(measurement.Percentage(flatSum, rpt.total)), rpt.formatValue(rpt.total))) + label = append(label, fmt.Sprintf("Showing nodes accounting for %s, %s of %s total", rpt.formatValue(shownTotal), strings.TrimSpace(measurement.Percentage(shownTotal, rpt.total)), rpt.formatValue(rpt.total))) if rpt.total != 0 { if droppedNodes > 0 { diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/stacks.go b/src/cmd/vendor/github.com/google/pprof/internal/report/stacks.go index aa3bf80f2df5f1..c6b07b86decd94 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/stacks.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/report/stacks.go @@ -34,6 +34,7 @@ type StackSet struct { Unit string // One of "B", "s", "GCU", or "" (if unknown) Stacks []Stack // List of stored stacks Sources []StackSource // Mapping from source index to info + report *Report } // Stack holds a single stack instance. @@ -94,6 +95,7 @@ func (rpt *Report) Stacks() StackSet { Unit: unit, Stacks: []Stack{}, // Ensure non-nil Sources: []StackSource{}, // Ensure non-nil + report: rpt, } s.makeInitialStacks(rpt) s.fillPlaces() @@ -187,3 +189,8 @@ func (s *StackSet) assignColors() { s.Sources[i].Color = int(index % numColors) } } + +// Legend returns the list of lines to display as the legend. +func (s *StackSet) Legend() []string { + return reportLabels(s.report, s.report.total, len(s.Sources), len(s.Sources), 0, 0, false) +} diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index aaed6b9114af60..3d3a226686f040 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -1,4 +1,4 @@ -# github.com/google/pprof v0.0.0-20240528025155-186aa0362fba +# github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 ## explicit; go 1.19 github.com/google/pprof/driver github.com/google/pprof/internal/binutils From 3f9360345cc1e3286abbb7bf5fbce50481a0bbbd Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 4 Jul 2024 00:17:05 +0700 Subject: [PATCH 034/866] cmd/compile: prevent un-necessary wrapping in switch statement Follow up discussion in CL 594575. The wrapping in "any" is only necessary if either casType or tagType is an interface, as "==" in this situation is implemented by upconverting to an interface anyway. Change-Id: I73da771d25685a23eec612ac696965c892db4764 Reviewed-on: https://go-review.googlesource.com/c/go/+/596555 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Keith Randall Reviewed-by: Keith Randall --- src/cmd/compile/internal/noder/writer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 8fed138a4a1202..c1560941b8ecec 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -1665,7 +1665,7 @@ func (w *writer) switchStmt(stmt *syntax.SwitchStmt) { Outer: for _, clause := range stmt.Body { for _, cas := range syntax.UnpackListExpr(clause.Cases) { - if casType := w.p.typeOf(cas); !types2.AssignableTo(casType, tagType) { + if casType := w.p.typeOf(cas); !types2.AssignableTo(casType, tagType) && (types2.IsInterface(casType) || types2.IsInterface(tagType)) { tagType = types2.NewInterfaceType(nil, nil) break Outer } From 864aa8644879983d903e59995e6a31c95c50e8ff Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Tue, 16 Jul 2024 23:56:56 +0700 Subject: [PATCH 035/866] cmd/compile: run checkbce after fuseLate pass So the bounds check which are eliminated during late fuse pass could be detected correctly. Fixes #67329 Change-Id: Id7992fbb8c26e0d43e7db66a0a3a2c0d9ed937a8 Reviewed-on: https://go-review.googlesource.com/c/go/+/598635 Reviewed-by: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/ssa/checkbce.go | 3 +++ src/cmd/compile/internal/ssa/compile.go | 2 +- test/fixedbugs/issue67329.go | 27 ++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/issue67329.go diff --git a/src/cmd/compile/internal/ssa/checkbce.go b/src/cmd/compile/internal/ssa/checkbce.go index 6a9ce2be0aacab..d7400b2ae9c9ec 100644 --- a/src/cmd/compile/internal/ssa/checkbce.go +++ b/src/cmd/compile/internal/ssa/checkbce.go @@ -16,6 +16,9 @@ func checkbce(f *Func) { } for _, b := range f.Blocks { + if b.Kind == BlockInvalid { + continue + } for _, v := range b.Values { if v.Op == OpIsInBounds || v.Op == OpIsSliceInBounds { if f.pass.debug > 0 { diff --git a/src/cmd/compile/internal/ssa/compile.go b/src/cmd/compile/internal/ssa/compile.go index 80ef53d085db62..3f46599a3e5756 100644 --- a/src/cmd/compile/internal/ssa/compile.go +++ b/src/cmd/compile/internal/ssa/compile.go @@ -477,9 +477,9 @@ var passes = [...]pass{ {name: "dead auto elim", fn: elimDeadAutosGeneric}, {name: "sccp", fn: sccp}, {name: "generic deadcode", fn: deadcode, required: true}, // remove dead stores, which otherwise mess up store chain - {name: "check bce", fn: checkbce}, {name: "branchelim", fn: branchelim}, {name: "late fuse", fn: fuseLate}, + {name: "check bce", fn: checkbce}, {name: "dse", fn: dse}, {name: "memcombine", fn: memcombine}, {name: "writebarrier", fn: writebarrier, required: true}, // expand write barrier ops diff --git a/test/fixedbugs/issue67329.go b/test/fixedbugs/issue67329.go new file mode 100644 index 00000000000000..5595c31c8c1b37 --- /dev/null +++ b/test/fixedbugs/issue67329.go @@ -0,0 +1,27 @@ +// errorcheck -0 -d=ssa/check_bce/debug=1 + +// Copyright 2024 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 x + +func Found(x []string) string { + switch len(x) { + default: + return x[0] + case 0, 1: + return "" + } +} + +func NotFound(x []string) string { + switch len(x) { + default: + return x[0] + case 0: + return "" + case 1: + return "" + } +} From 88833c90457e02edf4641cf914512ab920380431 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 11 Jul 2024 00:00:32 +0700 Subject: [PATCH 036/866] cmd/compile: restore not-in-heap check for map/channel type CL 388538 removed unused -G=0 node types. However, the code for checking not-in-heap types for map and channel type was also removed, which is likely not intentional. This CL restores the check, porting removed code to noder. Updates #54846 Change-Id: I2995836b90e36d2684197fefc9829fddfffe8585 Reviewed-on: https://go-review.googlesource.com/c/go/+/597535 Auto-Submit: Cuong Manh Le LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Keith Randall --- src/cmd/compile/internal/noder/irgen.go | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go index a95fa03e170ed6..05f0affe8a8a43 100644 --- a/src/cmd/compile/internal/noder/irgen.go +++ b/src/cmd/compile/internal/noder/irgen.go @@ -144,6 +144,34 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info, map[* } base.ExitIfErrors() + // Implementation restriction: we don't allow not-in-heap types to + // be used as map keys/values, or channel. + { + for _, file := range files { + syntax.Inspect(file, func(n syntax.Node) bool { + if n, ok := n.(*syntax.TypeDecl); ok { + switch n := n.Type.(type) { + case *syntax.MapType: + typ := n.GetTypeInfo().Type.Underlying().(*types2.Map) + if isNotInHeap(typ.Key()) { + base.ErrorfAt(m.makeXPos(n.Pos()), 0, "incomplete (or unallocatable) map key not allowed") + } + if isNotInHeap(typ.Elem()) { + base.ErrorfAt(m.makeXPos(n.Pos()), 0, "incomplete (or unallocatable) map value not allowed") + } + case *syntax.ChanType: + typ := n.GetTypeInfo().Type.Underlying().(*types2.Chan) + if isNotInHeap(typ.Elem()) { + base.ErrorfAt(m.makeXPos(n.Pos()), 0, "chan of incomplete (or unallocatable) type not allowed") + } + } + } + return true + }) + } + } + base.ExitIfErrors() + // Rewrite range over function to explicit function calls // with the loop bodies converted into new implicit closures. // We do this now, before serialization to unified IR, so that if the From b73875ff6cae1b9c790e9c8d4e99ecb7185f8cd9 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 11 Jul 2024 00:14:33 +0700 Subject: [PATCH 037/866] test: re-enabled fixedbugs/notinheap.go test By using cgo.Incomplete to represent not-in-heap type. While at it, also removing the type conversions tests, since they could not be present without //go:notinheap pragma. Fixes #54846 Change-Id: I5ee2a4b6498d4100c9770ed7bd62f52623e42526 Reviewed-on: https://go-review.googlesource.com/c/go/+/597536 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Keith Randall Auto-Submit: Cuong Manh Le --- src/cmd/internal/testdir/testdir_test.go | 1 - test/fixedbugs/notinheap.go | 32 +++++------------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/src/cmd/internal/testdir/testdir_test.go b/src/cmd/internal/testdir/testdir_test.go index 8d68591982a503..e64451b743a87b 100644 --- a/src/cmd/internal/testdir/testdir_test.go +++ b/src/cmd/internal/testdir/testdir_test.go @@ -1859,7 +1859,6 @@ var types2Failures = setOf( "fixedbugs/issue20233.go", // types2 reports two instead of one error (preference: 1.17 compiler) "fixedbugs/issue20245.go", // types2 reports two instead of one error (preference: 1.17 compiler) "fixedbugs/issue31053.go", // types2 reports "unknown field" instead of "cannot refer to unexported field" - "fixedbugs/notinheap.go", // types2 doesn't report errors about conversions that are invalid due to //go:notinheap ) var types2Failures32Bit = setOf( diff --git a/test/fixedbugs/notinheap.go b/test/fixedbugs/notinheap.go index 2188a38a143c14..bb13456211104d 100644 --- a/test/fixedbugs/notinheap.go +++ b/test/fixedbugs/notinheap.go @@ -4,12 +4,15 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Test type-checking errors for go:notinheap. +// Test type-checking errors for not-in-heap types. + +//go:build cgo package p -//go:notinheap -type nih struct{} +import "runtime/cgo" + +type nih struct{ _ cgo.Incomplete } type embed4 map[nih]int // ERROR "incomplete \(or unallocatable\) map key not allowed" @@ -26,26 +29,3 @@ type okay3 func(x nih) nih type okay4 interface { f(x nih) nih } - -// Type conversions don't let you sneak past notinheap. - -type t1 struct{ x int } - -//go:notinheap -type t2 t1 - -//go:notinheap -type t3 byte - -//go:notinheap -type t4 rune - -var sink interface{} - -func i() { - sink = new(t1) // no error - sink = (*t2)(new(t1)) // ERROR "cannot convert(.|\n)*t2 is incomplete \(or unallocatable\)" - sink = (*t2)(new(struct{ x int })) // ERROR "cannot convert(.|\n)*t2 is incomplete \(or unallocatable\)" - sink = []t3("foo") // ERROR "cannot convert(.|\n)*t3 is incomplete \(or unallocatable\)" - sink = []t4("bar") // ERROR "cannot convert(.|\n)*t4 is incomplete \(or unallocatable\)" -} From 72cc7699f856f4ff64420c91a54cb9eac2542384 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 11 Jul 2024 13:32:27 +0700 Subject: [PATCH 038/866] test: add test cases for local not-in-heap types Follow up review in CL 597535. Updates #54846 Change-Id: Idf586552a22bbc6710c0888f046df0a5d1f0ce4a Reviewed-on: https://go-review.googlesource.com/c/go/+/597537 Reviewed-by: Cherry Mui Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Auto-Submit: Cuong Manh Le --- test/fixedbugs/notinheap.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/fixedbugs/notinheap.go b/test/fixedbugs/notinheap.go index bb13456211104d..c94f2d6b109430 100644 --- a/test/fixedbugs/notinheap.go +++ b/test/fixedbugs/notinheap.go @@ -29,3 +29,9 @@ type okay3 func(x nih) nih type okay4 interface { f(x nih) nih } + +func f() { + type embed7 map[nih]int // ERROR "incomplete \(or unallocatable\) map key not allowed" + type embed8 map[int]nih // ERROR "incomplete \(or unallocatable\) map value not allowed" + type emebd9 chan nih // ERROR "chan of incomplete \(or unallocatable\) type not allowed" +} From 8659ad972f0f1fb389397cb35f810d9ccb36539f Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 23 May 2024 20:50:25 -0700 Subject: [PATCH 039/866] encoding/json: rewrite interface{} to any For #49884 Change-Id: I1623201c47c820a152773d2f43d0072a1466d3bf Reviewed-on: https://go-review.googlesource.com/c/go/+/588118 LUCI-TryBot-Result: Go LUCI Reviewed-by: Emmanuel Odeke Reviewed-by: Ian Lance Taylor Commit-Queue: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Joseph Tsai Auto-Submit: Ian Lance Taylor Commit-Queue: Ian Lance Taylor Auto-Submit: Ian Lance Taylor --- src/encoding/json/decode.go | 12 ++++++------ src/encoding/json/encode.go | 2 +- src/encoding/json/fuzz_test.go | 8 ++++---- src/encoding/json/stream.go | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go index f8205704e38b7f..69a1013b8598fe 100644 --- a/src/encoding/json/decode.go +++ b/src/encoding/json/decode.go @@ -53,8 +53,8 @@ import ( // - bool, for JSON booleans // - float64, for JSON numbers // - string, for JSON strings -// - []interface{}, for JSON arrays -// - map[string]interface{}, for JSON objects +// - []any, for JSON arrays +// - map[string]any, for JSON objects // - nil for JSON null // // To unmarshal a JSON array into a slice, Unmarshal resets the slice length @@ -466,7 +466,7 @@ func indirect(v reflect.Value, decodingNull bool) (Unmarshaler, encoding.TextUnm } // Prevent infinite loop if v is an interface pointing to its own address: - // var v interface{} + // var v any // v = &v if v.Elem().Kind() == reflect.Interface && v.Elem().Elem() == v { v = v.Elem() @@ -1019,7 +1019,7 @@ func (d *decodeState) literalStore(item []byte, v reflect.Value, fromQuoted bool // in an empty interface. They are not strictly necessary, // but they avoid the weight of reflection in this common case. -// valueInterface is like value but returns interface{} +// valueInterface is like value but returns any. func (d *decodeState) valueInterface() (val any) { switch d.opcode { default: @@ -1036,7 +1036,7 @@ func (d *decodeState) valueInterface() (val any) { return } -// arrayInterface is like array but returns []interface{}. +// arrayInterface is like array but returns []any. func (d *decodeState) arrayInterface() []any { var v = make([]any, 0) for { @@ -1062,7 +1062,7 @@ func (d *decodeState) arrayInterface() []any { return v } -// objectInterface is like object but returns map[string]interface{}. +// objectInterface is like object but returns map[string]any. func (d *decodeState) objectInterface() map[string]any { m := make(map[string]any) for { diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go index 7bee1a6805f4dc..988de716124862 100644 --- a/src/encoding/json/encode.go +++ b/src/encoding/json/encode.go @@ -819,7 +819,7 @@ func (se sliceEncoder) encode(e *encodeState, v reflect.Value, opts encOpts) { // Here we use a struct to memorize the pointer to the first element of the slice // and its length. ptr := struct { - ptr interface{} // always an unsafe.Pointer, but avoids a dependency on package unsafe + ptr any // always an unsafe.Pointer, but avoids a dependency on package unsafe len int }{v.UnsafePointer(), v.Len()} if _, ok := e.ptrSeen[ptr]; ok { diff --git a/src/encoding/json/fuzz_test.go b/src/encoding/json/fuzz_test.go index 778664c3e57e28..f01960398a0e88 100644 --- a/src/encoding/json/fuzz_test.go +++ b/src/encoding/json/fuzz_test.go @@ -28,10 +28,10 @@ func FuzzUnmarshalJSON(f *testing.F) { }`)) f.Fuzz(func(t *testing.T, b []byte) { - for _, typ := range []func() interface{}{ - func() interface{} { return new(interface{}) }, - func() interface{} { return new(map[string]interface{}) }, - func() interface{} { return new([]interface{}) }, + for _, typ := range []func() any{ + func() any { return new(any) }, + func() any { return new(map[string]any) }, + func() any { return new([]any) }, } { i := typ() if err := Unmarshal(b, i); err != nil { diff --git a/src/encoding/json/stream.go b/src/encoding/json/stream.go index cb61ea721207e8..e2d9470bcc7fca 100644 --- a/src/encoding/json/stream.go +++ b/src/encoding/json/stream.go @@ -32,8 +32,8 @@ func NewDecoder(r io.Reader) *Decoder { return &Decoder{r: r} } -// UseNumber causes the Decoder to unmarshal a number into an interface{} as a -// [Number] instead of as a float64. +// UseNumber causes the Decoder to unmarshal a number into an +// interface value as a [Number] instead of as a float64. func (dec *Decoder) UseNumber() { dec.d.useNumber = true } // DisallowUnknownFields causes the Decoder to return an error when the destination From c5430dc1d8d96cfd0c85a6d760262676d798a6a9 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 27 May 2024 16:55:02 +0000 Subject: [PATCH 040/866] regexp: allow patterns with no alternates to be one-pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Check whether a regex has any 'alt' instructions before rejecting it as one-pass. Previously `^abc` would run the backtrack matcher. I tried to make the comment match what the code does now. Updates #21463 ``` name old time/op new time/op delta Find-8 167ns ± 1% 170ns ± 3% ~ (p=0.500 n=5+5) FindAllNoMatches-8 88.8ns ± 5% 87.3ns ± 0% ~ (p=0.095 n=5+5) FindString-8 166ns ± 3% 164ns ± 0% ~ (p=0.063 n=5+5) FindSubmatch-8 191ns ± 1% 191ns ± 0% ~ (p=0.556 n=4+5) FindStringSubmatch-8 183ns ± 0% 182ns ± 0% -0.43% (p=0.048 n=5+5) Literal-8 50.3ns ± 0% 50.1ns ± 0% -0.40% (p=0.016 n=5+4) NotLiteral-8 914ns ± 0% 927ns ± 7% ~ (p=0.730 n=5+5) MatchClass-8 1.20µs ± 1% 1.22µs ± 6% ~ (p=0.738 n=5+5) MatchClass_InRange-8 1.20µs ± 6% 1.21µs ± 6% ~ (p=0.548 n=5+5) ReplaceAll-8 796ns ± 0% 792ns ± 0% -0.51% (p=0.032 n=5+5) AnchoredLiteralShortNonMatch-8 41.0ns ± 2% 34.2ns ± 2% -16.47% (p=0.008 n=5+5) AnchoredLiteralLongNonMatch-8 53.3ns ± 0% 34.3ns ± 3% -35.74% (p=0.008 n=5+5) AnchoredShortMatch-8 74.0ns ± 2% 75.8ns ± 0% +2.46% (p=0.032 n=5+4) AnchoredLongMatch-8 146ns ± 3% 76ns ± 1% -48.12% (p=0.008 n=5+5) OnePassShortA-8 424ns ± 0% 423ns ± 0% ~ (p=0.222 n=5+4) NotOnePassShortA-8 373ns ± 1% 375ns ± 2% ~ (p=0.690 n=5+5) OnePassShortB-8 315ns ± 2% 308ns ± 0% -2.12% (p=0.008 n=5+5) NotOnePassShortB-8 244ns ± 3% 239ns ± 0% ~ (p=0.476 n=5+5) OnePassLongPrefix-8 61.6ns ± 2% 60.9ns ± 0% -1.13% (p=0.016 n=5+4) OnePassLongNotPrefix-8 236ns ± 3% 230ns ± 0% ~ (p=0.143 n=5+5) ``` Change-Id: I8a94b53bc761cd7ec89923c905ec8baaaa58a5fd GitHub-Last-Rev: e9e0c29b7448c8ab7cb203c1ed58766dc5d91456 GitHub-Pull-Request: golang/go#48748 Reviewed-on: https://go-review.googlesource.com/c/go/+/353711 Reviewed-by: Daniel Martí Reviewed-by: Russ Cox Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Commit-Queue: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick Reviewed-by: Ian Lance Taylor --- src/regexp/onepass.go | 12 ++++++++++-- src/regexp/onepass_test.go | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/regexp/onepass.go b/src/regexp/onepass.go index 53cbd958394120..96e360661b9aa9 100644 --- a/src/regexp/onepass.go +++ b/src/regexp/onepass.go @@ -465,12 +465,20 @@ func compileOnePass(prog *syntax.Prog) (p *onePassProg) { syntax.EmptyOp(prog.Inst[prog.Start].Arg)&syntax.EmptyBeginText != syntax.EmptyBeginText { return nil } - // every instruction leading to InstMatch must be EmptyEndText + hasAlt := false + for _, inst := range prog.Inst { + if inst.Op == syntax.InstAlt || inst.Op == syntax.InstAltMatch { + hasAlt = true + break + } + } + // If we have alternates, every instruction leading to InstMatch must be EmptyEndText. + // Also, any match on empty text must be $. for _, inst := range prog.Inst { opOut := prog.Inst[inst.Out].Op switch inst.Op { default: - if opOut == syntax.InstMatch { + if opOut == syntax.InstMatch && hasAlt { return nil } case syntax.InstAlt, syntax.InstAltMatch: diff --git a/src/regexp/onepass_test.go b/src/regexp/onepass_test.go index 3f44dc7b150533..70eba1f577a9f8 100644 --- a/src/regexp/onepass_test.go +++ b/src/regexp/onepass_test.go @@ -142,6 +142,7 @@ var onePassTests = []struct { {`^(?:(a)|(?:a*))$`, false}, {`^(?:(?:(?:.(?:$))?))$`, true}, {`^abcd$`, true}, + {`^abcd`, true}, {`^(?:(?:a{0,})*?)$`, false}, {`^(?:(?:a+)*)$`, true}, {`^(?:(?:a|(?:aa)))$`, true}, @@ -154,6 +155,7 @@ var onePassTests = []struct { {`^(?:(?:aa)|a)$`, true}, {`^[a-c]*`, false}, {`^...$`, true}, + {`^...`, true}, {`^(?:a|(?:aa))$`, true}, {`^a((b))c$`, true}, {`^a.[l-nA-Cg-j]?e$`, true}, From 3637aa3e1ec739f323f59070780672542834a9fd Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Fri, 31 May 2024 10:33:13 +0900 Subject: [PATCH 041/866] internal/trace/event: fix typo in comment Change-Id: Ia191daf8e748f17dcea6038166504fb50e7ddb0d Reviewed-on: https://go-review.googlesource.com/c/go/+/589535 Auto-Submit: Michael Knyszek Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov --- src/internal/trace/event/event.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/internal/trace/event/event.go b/src/internal/trace/event/event.go index adcb8811d8191e..9a9bf74c6afe59 100644 --- a/src/internal/trace/event/event.go +++ b/src/internal/trace/event/event.go @@ -4,7 +4,9 @@ package event -// Type is the common in-memory representation of the low-leve +// Type indicates an event's type from which its arguments and semantics can be +// derived. Its representation matches the wire format's representation of the event +// types that precede all event data. type Type uint8 // Spec is a specification for a trace event. It contains sufficient information From c7ea20195a3415668047eebdc488a4af1f629f04 Mon Sep 17 00:00:00 2001 From: guoguangwu Date: Wed, 24 Jul 2024 06:55:35 +0000 Subject: [PATCH 042/866] cmd/compile: fix typo in comment Change-Id: Ied098312399d2d6557ebf0ee294ca0e71dfa677b GitHub-Last-Rev: 82f914e85756728976646b490223352059c1953a GitHub-Pull-Request: golang/go#68565 Reviewed-on: https://go-review.googlesource.com/c/go/+/600655 Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov --- src/cmd/compile/internal/rangefunc/rewrite.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/rangefunc/rewrite.go b/src/cmd/compile/internal/rangefunc/rewrite.go index ba2eb8d0fdcf75..3752eb9ecdd13e 100644 --- a/src/cmd/compile/internal/rangefunc/rewrite.go +++ b/src/cmd/compile/internal/rangefunc/rewrite.go @@ -598,7 +598,7 @@ type State int // Rewrite rewrites all the range-over-funcs in the files. // It returns the set of function literals generated from rangefunc loop bodies. -// This allows for rangefunc loop bodies to be distingushed by debuggers. +// This allows for rangefunc loop bodies to be distinguished by debuggers. func Rewrite(pkg *types2.Package, info *types2.Info, files []*syntax.File) map[*syntax.FuncLit]bool { ri := make(map[*syntax.FuncLit]bool) for _, file := range files { From 074f2761b5ff54c9c9d2e2a720abd29efa5474cc Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:32:31 +0000 Subject: [PATCH 043/866] crypto/x509,embed: use slices to clean up tests Replace reflect.DeepEqual with slices.Equal, which is much faster. Change-Id: Ia93cc153d1f71ce92656129843be8dadcefbbca3 GitHub-Last-Rev: 0af0cc4205f51b31780ca2cbefe780e7256b1188 GitHub-Pull-Request: golang/go#67610 Reviewed-on: https://go-review.googlesource.com/c/go/+/587817 Reviewed-by: Ian Lance Taylor Reviewed-by: Roland Shoemaker Commit-Queue: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor --- src/crypto/x509/root_unix_test.go | 4 ++-- src/crypto/x509/verify_test.go | 3 +-- src/crypto/x509/x509_test.go | 22 +++++++++++----------- src/embed/internal/embedtest/embed_test.go | 3 ++- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/crypto/x509/root_unix_test.go b/src/crypto/x509/root_unix_test.go index d5215b9ff2afd8..2ea69e252a2403 100644 --- a/src/crypto/x509/root_unix_test.go +++ b/src/crypto/x509/root_unix_test.go @@ -11,7 +11,7 @@ import ( "fmt" "os" "path/filepath" - "reflect" + "slices" "strings" "testing" ) @@ -222,7 +222,7 @@ func TestReadUniqueDirectoryEntries(t *testing.T) { gotNames = append(gotNames, fi.Name()) } wantNames := []string{"file", "link-out"} - if !reflect.DeepEqual(gotNames, wantNames) { + if !slices.Equal(gotNames, wantNames) { t.Errorf("got %q; want %q", gotNames, wantNames) } } diff --git a/src/crypto/x509/verify_test.go b/src/crypto/x509/verify_test.go index ca1c744b622570..7f6b74b7a0f5bb 100644 --- a/src/crypto/x509/verify_test.go +++ b/src/crypto/x509/verify_test.go @@ -17,7 +17,6 @@ import ( "internal/testenv" "math/big" "os/exec" - "reflect" "runtime" "slices" "strconv" @@ -2595,7 +2594,7 @@ func TestPathBuilding(t *testing.T) { return } gotChains := chainsToStrings(chains) - if !reflect.DeepEqual(gotChains, tc.expectedChains) { + if !slices.Equal(gotChains, tc.expectedChains) { t.Errorf("unexpected chains returned:\ngot:\n\t%s\nwant:\n\t%s", strings.Join(gotChains, "\n\t"), strings.Join(tc.expectedChains, "\n\t")) } }) diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go index a9483b7091acc5..351fe6ad186b14 100644 --- a/src/crypto/x509/x509_test.go +++ b/src/crypto/x509/x509_test.go @@ -783,27 +783,27 @@ func TestCreateSelfSignedCertificate(t *testing.T) { t.Errorf("%s: SignatureAlgorithm wasn't copied from template. Got %v, want %v", test.name, cert.SignatureAlgorithm, test.sigAlgo) } - if !reflect.DeepEqual(cert.ExtKeyUsage, testExtKeyUsage) { + if !slices.Equal(cert.ExtKeyUsage, testExtKeyUsage) { t.Errorf("%s: extkeyusage wasn't correctly copied from the template. Got %v, want %v", test.name, cert.ExtKeyUsage, testExtKeyUsage) } - if !reflect.DeepEqual(cert.UnknownExtKeyUsage, testUnknownExtKeyUsage) { + if !slices.EqualFunc(cert.UnknownExtKeyUsage, testUnknownExtKeyUsage, asn1.ObjectIdentifier.Equal) { t.Errorf("%s: unknown extkeyusage wasn't correctly copied from the template. Got %v, want %v", test.name, cert.UnknownExtKeyUsage, testUnknownExtKeyUsage) } - if !reflect.DeepEqual(cert.OCSPServer, template.OCSPServer) { + if !slices.Equal(cert.OCSPServer, template.OCSPServer) { t.Errorf("%s: OCSP servers differ from template. Got %v, want %v", test.name, cert.OCSPServer, template.OCSPServer) } - if !reflect.DeepEqual(cert.IssuingCertificateURL, template.IssuingCertificateURL) { + if !slices.Equal(cert.IssuingCertificateURL, template.IssuingCertificateURL) { t.Errorf("%s: Issuing certificate URLs differ from template. Got %v, want %v", test.name, cert.IssuingCertificateURL, template.IssuingCertificateURL) } - if !reflect.DeepEqual(cert.DNSNames, template.DNSNames) { + if !slices.Equal(cert.DNSNames, template.DNSNames) { t.Errorf("%s: SAN DNS names differ from template. Got %v, want %v", test.name, cert.DNSNames, template.DNSNames) } - if !reflect.DeepEqual(cert.EmailAddresses, template.EmailAddresses) { + if !slices.Equal(cert.EmailAddresses, template.EmailAddresses) { t.Errorf("%s: SAN emails differ from template. Got %v, want %v", test.name, cert.EmailAddresses, template.EmailAddresses) } @@ -811,11 +811,11 @@ func TestCreateSelfSignedCertificate(t *testing.T) { t.Errorf("%s: URIs differ from template. Got %v, want %v", test.name, cert.URIs, template.URIs) } - if !reflect.DeepEqual(cert.IPAddresses, template.IPAddresses) { + if !slices.EqualFunc(cert.IPAddresses, template.IPAddresses, net.IP.Equal) { t.Errorf("%s: SAN IPs differ from template. Got %v, want %v", test.name, cert.IPAddresses, template.IPAddresses) } - if !reflect.DeepEqual(cert.CRLDistributionPoints, template.CRLDistributionPoints) { + if !slices.Equal(cert.CRLDistributionPoints, template.CRLDistributionPoints) { t.Errorf("%s: CRL distribution points differ from template. Got %v, want %v", test.name, cert.CRLDistributionPoints, template.CRLDistributionPoints) } @@ -2405,7 +2405,7 @@ func TestMultipleURLsInCRLDP(t *testing.T) { "http://epscd.catcert.net/crl/ec-acc.crl", "http://epscd2.catcert.net/crl/ec-acc.crl", } - if got := cert.CRLDistributionPoints; !reflect.DeepEqual(got, want) { + if got := cert.CRLDistributionPoints; !slices.Equal(got, want) { t.Errorf("CRL distribution points = %#v, want #%v", got, want) } } @@ -3231,10 +3231,10 @@ func TestCertificateRequestRoundtripFields(t *testing.T) { } out := marshalAndParseCSR(t, in) - if !reflect.DeepEqual(in.DNSNames, out.DNSNames) { + if !slices.Equal(in.DNSNames, out.DNSNames) { t.Fatalf("Unexpected DNSNames: got %v, want %v", out.DNSNames, in.DNSNames) } - if !reflect.DeepEqual(in.EmailAddresses, out.EmailAddresses) { + if !slices.Equal(in.EmailAddresses, out.EmailAddresses) { t.Fatalf("Unexpected EmailAddresses: got %v, want %v", out.EmailAddresses, in.EmailAddresses) } if len(in.IPAddresses) != len(out.IPAddresses) || diff --git a/src/embed/internal/embedtest/embed_test.go b/src/embed/internal/embedtest/embed_test.go index a6e673a7bc2b62..875265556f0940 100644 --- a/src/embed/internal/embedtest/embed_test.go +++ b/src/embed/internal/embedtest/embed_test.go @@ -8,6 +8,7 @@ import ( "embed" "io" "reflect" + "slices" "testing" "testing/fstest" ) @@ -56,7 +57,7 @@ func testDir(t *testing.T, f embed.FS, name string, expect ...string) { } names = append(names, name) } - if !reflect.DeepEqual(names, expect) { + if !slices.Equal(names, expect) { t.Errorf("readdir %v = %v, want %v", name, names, expect) } } From 910e6b5fae7cbf84e4a3fcfa6739e20239080bcd Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 24 Jul 2024 10:29:13 -0700 Subject: [PATCH 044/866] os: document CopyFS behavior for symlinks in destination Also clarify the permissions of created files, and note that CopyFS will not overwrite files. Update a few places in documentation to use 0oXXX for octal consts. For #62484 Change-Id: I208ed2bde250304bc7fac2b93963ba57037e791e Reviewed-on: https://go-review.googlesource.com/c/go/+/600775 Reviewed-by: Ian Lance Taylor Reviewed-by: Russ Cox LUCI-TryBot-Result: Go LUCI --- src/os/dir.go | 18 ++++++++++-------- src/os/example_test.go | 2 +- src/os/file.go | 8 ++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/os/dir.go b/src/os/dir.go index 471a29134582b3..dab75b5d436ce5 100644 --- a/src/os/dir.go +++ b/src/os/dir.go @@ -132,15 +132,17 @@ func ReadDir(name string) ([]DirEntry, error) { // CopyFS copies the file system fsys into the directory dir, // creating dir if necessary. // -// Newly created directories and files have their default modes -// where any bits from the file in fsys that are not part of the -// standard read, write, and execute permissions will be zeroed -// out, and standard read and write permissions are set for owner, -// group, and others while retaining any existing execute bits from -// the file in fsys. +// Files are created with mode 0o666 plus any execute permissions +// from the source, and directories are created with mode 0o777 +// (before umask). // -// Symbolic links in fsys are not supported, a *PathError with Err set -// to ErrInvalid is returned on symlink. +// CopyFS will not overwrite existing files, and returns an error +// if a file name in fsys already exists in the destination. +// +// Symbolic links in fsys are not supported. A *PathError with Err set +// to ErrInvalid is returned when copying from a symbolic link. +// +// Symbolic links in dir are followed. // // Copying stops at and returns the first error encountered. func CopyFS(dir string, fsys fs.FS) error { diff --git a/src/os/example_test.go b/src/os/example_test.go index 7437a74cd0c66d..c507d46c46303a 100644 --- a/src/os/example_test.go +++ b/src/os/example_test.go @@ -61,7 +61,7 @@ func ExampleFileMode() { log.Fatal(err) } - fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0400, 0777, etc. + fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0o400, 0o777, etc. switch mode := fi.Mode(); { case mode.IsRegular(): fmt.Println("regular file") diff --git a/src/os/file.go b/src/os/file.go index b2fb328e13dbe3..541b4320819c3f 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -366,7 +366,7 @@ func Open(name string) (*File, error) { } // Create creates or truncates the named file. If the file already exists, -// it is truncated. If the file does not exist, it is created with mode 0666 +// it is truncated. If the file does not exist, it is created with mode 0o666 // (before umask). If successful, methods on the returned File can // be used for I/O; the associated file descriptor has mode O_RDWR. // If there is an error, it will be of type *PathError. @@ -606,11 +606,11 @@ func UserHomeDir() (string, error) { // On Unix, the mode's permission bits, ModeSetuid, ModeSetgid, and // ModeSticky are used. // -// On Windows, only the 0200 bit (owner writable) of mode is used; it +// On Windows, only the 0o200 bit (owner writable) of mode is used; it // controls whether the file's read-only attribute is set or cleared. // The other bits are currently unused. For compatibility with Go 1.12 -// and earlier, use a non-zero mode. Use mode 0400 for a read-only -// file and 0600 for a readable+writable file. +// and earlier, use a non-zero mode. Use mode 0o400 for a read-only +// file and 0o600 for a readable+writable file. // // On Plan 9, the mode's permission bits, ModeAppend, ModeExclusive, // and ModeTemporary are used. From c0eac35a4cd3ca16d3d1fc153a155b0b18f49633 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:32:22 +0000 Subject: [PATCH 045/866] bytes,strings,unicode/utf16: use slices to clean up tests Replace reflect.DeepEqual with slices.Equal, which is much faster. Remove some redundant helper functions. Change-Id: I51b32a3d0c3fc5ad0d3b6ff0dd03f39c507e5762 GitHub-Last-Rev: e21f46d4a026b6bf6e8d912dfb8d361a20a4e779 GitHub-Pull-Request: golang/go#67609 Reviewed-on: https://go-review.googlesource.com/c/go/+/587937 Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Commit-Queue: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer --- src/bytes/bytes_test.go | 37 +++++++-------------------------- src/strings/search_test.go | 4 ++-- src/strings/strings_test.go | 6 +++--- src/unicode/utf16/utf16_test.go | 8 +++---- 4 files changed, 16 insertions(+), 39 deletions(-) diff --git a/src/bytes/bytes_test.go b/src/bytes/bytes_test.go index 200a357bc0433f..94301358e037b8 100644 --- a/src/bytes/bytes_test.go +++ b/src/bytes/bytes_test.go @@ -11,6 +11,7 @@ import ( "math" "math/rand" "reflect" + "slices" "strings" "testing" "unicode" @@ -18,18 +19,6 @@ import ( "unsafe" ) -func eq(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i := 0; i < len(a); i++ { - if a[i] != b[i] { - return false - } - } - return true -} - func sliceOfString(s [][]byte) []string { result := make([]string, len(s)) for i, v := range s { @@ -808,7 +797,7 @@ func TestSplit(t *testing.T) { } result := sliceOfString(a) - if !eq(result, tt.a) { + if !slices.Equal(result, tt.a) { t.Errorf(`Split(%q, %q, %d) = %v; want %v`, tt.s, tt.sep, tt.n, result, tt.a) continue } @@ -866,7 +855,7 @@ func TestSplitAfter(t *testing.T) { } result := sliceOfString(a) - if !eq(result, tt.a) { + if !slices.Equal(result, tt.a) { t.Errorf(`Split(%q, %q, %d) = %v; want %v`, tt.s, tt.sep, tt.n, result, tt.a) continue } @@ -919,7 +908,7 @@ func TestFields(t *testing.T) { } result := sliceOfString(a) - if !eq(result, tt.a) { + if !slices.Equal(result, tt.a) { t.Errorf("Fields(%q) = %v; want %v", tt.s, a, tt.a) continue } @@ -939,7 +928,7 @@ func TestFieldsFunc(t *testing.T) { for _, tt := range fieldstests { a := FieldsFunc([]byte(tt.s), unicode.IsSpace) result := sliceOfString(a) - if !eq(result, tt.a) { + if !slices.Equal(result, tt.a) { t.Errorf("FieldsFunc(%q, unicode.IsSpace) = %v; want %v", tt.s, a, tt.a) continue } @@ -962,7 +951,7 @@ func TestFieldsFunc(t *testing.T) { } result := sliceOfString(a) - if !eq(result, tt.a) { + if !slices.Equal(result, tt.a) { t.Errorf("FieldsFunc(%q) = %v, want %v", tt.s, a, tt.a) } @@ -1286,18 +1275,6 @@ func TestRepeatCatchesOverflow(t *testing.T) { }) } -func runesEqual(a, b []rune) bool { - if len(a) != len(b) { - return false - } - for i, r := range a { - if r != b[i] { - return false - } - } - return true -} - type RunesTest struct { in string out []rune @@ -1318,7 +1295,7 @@ func TestRunes(t *testing.T) { for _, tt := range RunesTests { tin := []byte(tt.in) a := Runes(tin) - if !runesEqual(a, tt.out) { + if !slices.Equal(a, tt.out) { t.Errorf("Runes(%q) = %v; want %v", tin, a, tt.out) continue } diff --git a/src/strings/search_test.go b/src/strings/search_test.go index c01a393a12f318..034085043a6c07 100644 --- a/src/strings/search_test.go +++ b/src/strings/search_test.go @@ -5,7 +5,7 @@ package strings_test import ( - "reflect" + "slices" . "strings" "testing" ) @@ -83,7 +83,7 @@ func TestFinderCreation(t *testing.T) { } } - if !reflect.DeepEqual(good, tc.suf) { + if !slices.Equal(good, tc.suf) { t.Errorf("boyerMoore(%q) got %v want %v", tc.pattern, good, tc.suf) } } diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go index 4bd3a3c2029621..4c8c25ee132a28 100644 --- a/src/strings/strings_test.go +++ b/src/strings/strings_test.go @@ -10,7 +10,7 @@ import ( "io" "math" "math/rand" - "reflect" + "slices" "strconv" . "strings" "testing" @@ -431,7 +431,7 @@ func TestSplit(t *testing.T) { } if tt.n < 0 { b := Split(tt.s, tt.sep) - if !reflect.DeepEqual(a, b) { + if !slices.Equal(a, b) { t.Errorf("Split disagrees with SplitN(%q, %q, %d) = %v; want %v", tt.s, tt.sep, tt.n, b, a) } } @@ -467,7 +467,7 @@ func TestSplitAfter(t *testing.T) { } if tt.n < 0 { b := SplitAfter(tt.s, tt.sep) - if !reflect.DeepEqual(a, b) { + if !slices.Equal(a, b) { t.Errorf("SplitAfter disagrees with SplitAfterN(%q, %q, %d) = %v; want %v", tt.s, tt.sep, tt.n, b, a) } } diff --git a/src/unicode/utf16/utf16_test.go b/src/unicode/utf16/utf16_test.go index 74a4a6746b2cd3..3d434275afc592 100644 --- a/src/unicode/utf16/utf16_test.go +++ b/src/unicode/utf16/utf16_test.go @@ -6,7 +6,7 @@ package utf16_test import ( "internal/testenv" - "reflect" + "slices" "testing" "unicode" . "unicode/utf16" @@ -58,7 +58,7 @@ var encodeTests = []encodeTest{ func TestEncode(t *testing.T) { for _, tt := range encodeTests { out := Encode(tt.in) - if !reflect.DeepEqual(out, tt.out) { + if !slices.Equal(out, tt.out) { t.Errorf("Encode(%x) = %x; want %x", tt.in, out, tt.out) } } @@ -70,7 +70,7 @@ func TestAppendRune(t *testing.T) { for _, u := range tt.in { out = AppendRune(out, u) } - if !reflect.DeepEqual(out, tt.out) { + if !slices.Equal(out, tt.out) { t.Errorf("AppendRune(%x) = %x; want %x", tt.in, out, tt.out) } } @@ -143,7 +143,7 @@ func TestAllocationsDecode(t *testing.T) { func TestDecode(t *testing.T) { for _, tt := range decodeTests { out := Decode(tt.in) - if !reflect.DeepEqual(out, tt.out) { + if !slices.Equal(out, tt.out) { t.Errorf("Decode(%x) = %x; want %x", tt.in, out, tt.out) } } From b5c2b1ec13f324743613bb33cbe6c664974db48e Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Wed, 10 Jul 2024 17:02:34 -0500 Subject: [PATCH 046/866] cmd/internal/obj/arm64: support MSR DIT Set the right instruction bits in asmout in order to allow using MSR with DIT and an immediate value. This allows us to avoid using an intermediary register when we want to set DIT (unsetting DIT already worked with the zero register). Ref: https://developer.arm.com/documentation/ddi0602/2024-06/Base-Instructions/MSR--immediate---Move-immediate-value-to-special-register-?lang=en Change-Id: Id049a0b4e0feb534cea992553228f9b5e12ddcea Reviewed-on: https://go-review.googlesource.com/c/go/+/597595 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/cmd/asm/internal/asm/testdata/arm64.s | 1 + src/cmd/internal/obj/arm64/asm7.go | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index f12cdaf921fc44..14a1c9141df1ec 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -1777,6 +1777,7 @@ next: MSR R17, ZCR_EL1 // 111218d5 SYS $32768, R1 // 018008d5 SYS $32768 // 1f8008d5 + MSR $1, DIT // 5f4103d5 // TLBI instruction TLBI VMALLE1IS // 1f8308d5 diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index c6601cb49e51d3..178c83c0bc6938 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -4229,6 +4229,9 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { // PSTATEfield can be special registers and special operands. if p.To.Type == obj.TYPE_REG && p.To.Reg == REG_SPSel { v = 0<<16 | 4<<12 | 5<<5 + } else if p.To.Type == obj.TYPE_REG && p.To.Reg == REG_DIT { + // op1 = 011 (3) op2 = 010 (2) + v = 3<<16 | 2<<5 } else if p.To.Type == obj.TYPE_SPECIAL { opd := SpecialOperand(p.To.Offset) for _, pf := range pstatefield { From 0826b9017254b8b3ba2b84799f4c0de6107a043f Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 15 Jul 2024 10:04:42 -0700 Subject: [PATCH 047/866] internal/cpu: add DIT detection on arm64 Add support for detecting the DIT feature on ARM64 processors. This mirrors https://go.dev/cl/597377, but using the platform specific semantics. Updates #66450 Change-Id: Ia107e3e3369de7825af70823b485afe2f587358e Reviewed-on: https://go-review.googlesource.com/c/go/+/598335 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- src/internal/cpu/cpu.go | 1 + src/internal/cpu/cpu_arm64.go | 9 ++++++++- src/internal/cpu/cpu_arm64.s | 7 +++++++ src/internal/cpu/cpu_arm64_darwin.go | 1 + src/internal/cpu/cpu_arm64_freebsd.go | 3 ++- src/internal/cpu/cpu_arm64_hwcap.go | 2 ++ src/internal/cpu/cpu_arm64_openbsd.go | 9 ++++++++- 7 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/internal/cpu/cpu.go b/src/internal/cpu/cpu.go index 4ef43e3efc1945..7174076c5e43c4 100644 --- a/src/internal/cpu/cpu.go +++ b/src/internal/cpu/cpu.go @@ -73,6 +73,7 @@ var ARM64 struct { HasCRC32 bool HasATOMICS bool HasCPUID bool + HasDIT bool IsNeoverse bool _ CacheLinePad } diff --git a/src/internal/cpu/cpu_arm64.go b/src/internal/cpu/cpu_arm64.go index 4a302f27d52f7b..1365991e783492 100644 --- a/src/internal/cpu/cpu_arm64.go +++ b/src/internal/cpu/cpu_arm64.go @@ -28,13 +28,15 @@ func doinit() { func getisar0() uint64 +func getpfr0() uint64 + func getMIDR() uint64 func extractBits(data uint64, start, end uint) uint { return (uint)(data>>start) & ((1 << (end - start + 1)) - 1) } -func parseARM64SystemRegisters(isar0 uint64) { +func parseARM64SystemRegisters(isar0, pfr0 uint64) { // ID_AA64ISAR0_EL1 switch extractBits(isar0, 4, 7) { case 1: @@ -66,4 +68,9 @@ func parseARM64SystemRegisters(isar0 uint64) { case 2: ARM64.HasATOMICS = true } + + switch extractBits(pfr0, 48, 51) { + case 1: + ARM64.HasDIT = true + } } diff --git a/src/internal/cpu/cpu_arm64.s b/src/internal/cpu/cpu_arm64.s index d6e7f443739101..960756106403e4 100644 --- a/src/internal/cpu/cpu_arm64.s +++ b/src/internal/cpu/cpu_arm64.s @@ -11,6 +11,13 @@ TEXT ·getisar0(SB),NOSPLIT,$0 MOVD R0, ret+0(FP) RET +// func getpfr0() uint64 +TEXT ·getpfr0(SB),NOSPLIT,$0-8 + // get Processor Feature Register 0 into R0 + MRS ID_AA64PFR0_EL1, R0 + MOVD R0, ret+0(FP) + RET + // func getMIDR() uint64 TEXT ·getMIDR(SB), NOSPLIT, $0-8 MRS MIDR_EL1, R0 diff --git a/src/internal/cpu/cpu_arm64_darwin.go b/src/internal/cpu/cpu_arm64_darwin.go index 2507780e5f1ba7..57cf631e891b0a 100644 --- a/src/internal/cpu/cpu_arm64_darwin.go +++ b/src/internal/cpu/cpu_arm64_darwin.go @@ -12,6 +12,7 @@ func osInit() { ARM64.HasATOMICS = sysctlEnabled([]byte("hw.optional.armv8_1_atomics\x00")) ARM64.HasCRC32 = sysctlEnabled([]byte("hw.optional.armv8_crc32\x00")) ARM64.HasSHA512 = sysctlEnabled([]byte("hw.optional.armv8_2_sha512\x00")) + ARM64.HasDIT = sysctlEnabled([]byte("hw.optional.arm.FEAT_DIT\x00")) // There are no hw.optional sysctl values for the below features on Mac OS 11.0 // to detect their supported state dynamically. Assume the CPU features that diff --git a/src/internal/cpu/cpu_arm64_freebsd.go b/src/internal/cpu/cpu_arm64_freebsd.go index 96ed359ca0b339..c339e6f22c2449 100644 --- a/src/internal/cpu/cpu_arm64_freebsd.go +++ b/src/internal/cpu/cpu_arm64_freebsd.go @@ -9,6 +9,7 @@ package cpu func osInit() { // Retrieve info from system register ID_AA64ISAR0_EL1. isar0 := getisar0() + prf0 := getpfr0() - parseARM64SystemRegisters(isar0) + parseARM64SystemRegisters(isar0, prf0) } diff --git a/src/internal/cpu/cpu_arm64_hwcap.go b/src/internal/cpu/cpu_arm64_hwcap.go index 34edf3eeb2a894..cdc1d89c9e42be 100644 --- a/src/internal/cpu/cpu_arm64_hwcap.go +++ b/src/internal/cpu/cpu_arm64_hwcap.go @@ -31,6 +31,7 @@ const ( hwcap_ATOMICS = 1 << 8 hwcap_CPUID = 1 << 11 hwcap_SHA512 = 1 << 21 + hwcap_DIT = 1 << 24 ) func hwcapInit(os string) { @@ -44,6 +45,7 @@ func hwcapInit(os string) { ARM64.HasCRC32 = isSet(HWCap, hwcap_CRC32) ARM64.HasCPUID = isSet(HWCap, hwcap_CPUID) ARM64.HasSHA512 = isSet(HWCap, hwcap_SHA512) + ARM64.HasDIT = isSet(HWCap, hwcap_DIT) // The Samsung S9+ kernel reports support for atomics, but not all cores // actually support them, resulting in SIGILL. See issue #28431. diff --git a/src/internal/cpu/cpu_arm64_openbsd.go b/src/internal/cpu/cpu_arm64_openbsd.go index 12593098eb1671..6cc69c95e36cd0 100644 --- a/src/internal/cpu/cpu_arm64_openbsd.go +++ b/src/internal/cpu/cpu_arm64_openbsd.go @@ -13,6 +13,7 @@ const ( // From OpenBSD's machine/cpu.h. _CPU_ID_AA64ISAR0 = 2 _CPU_ID_AA64ISAR1 = 3 + _CPU_ID_AA64PFR0 = 8 ) //go:noescape @@ -24,5 +25,11 @@ func osInit() { if !ok { return } - parseARM64SystemRegisters(isar0) + // Get ID_AA64PFR0 from sysctl. + pfr0, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64PFR0}) + if !ok { + return + } + + parseARM64SystemRegisters(isar0, pfr0) } From 792a26130347c9b9db344ba56f86645679a1a9d9 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Wed, 24 Jul 2024 13:30:28 -0400 Subject: [PATCH 048/866] doc/next: use relative link to Go issue The Go release notes are served on multiple domains (go.dev, golang.google.cn, tip.golang.org, localhost:8080 and so on), so links pointing to the Go website itself need to be relative to work in all those contexts. Caught by a test in x/website. The next CL adds the same test to this repository so these kinds of problems are caught sooner and with less friction. For #68545. Fixes #68575. Change-Id: I08056b98968c77a1d0ed93b63fccfbe41274ec8f Reviewed-on: https://go-review.googlesource.com/c/go/+/600656 Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- doc/next/3-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/next/3-tools.md b/doc/next/3-tools.md index 5ccade703f3436..b1412874689e1a 100644 --- a/doc/next/3-tools.md +++ b/doc/next/3-tools.md @@ -9,4 +9,4 @@ incompatible declarations. For instance, if `f` is declared as both `void f(int) and `void f(double)`, cgo will report an error instead of possibly generating an incorrect call sequence for `f(0)`. New in this release is a better detector for this error condition when the incompatible declarations appear in different -files. See [#67699](https://go.dev/issue/67699). +files. See [#67699](/issue/67699). From 1d717951f518a9e818e8b98d4daed17756c394ca Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:39:48 +0000 Subject: [PATCH 049/866] net: use slices and maps to clean up tests Replace reflect.DeepEqual with slices.Equal/maps.Equal, which is much faster. Change-Id: I54600fb63a56460c11d3d5af9072da585e31b1a2 GitHub-Last-Rev: 08c1445ad5be94d071e8ceb4b060b8f4ab0d77ba GitHub-Pull-Request: golang/go#67606 Reviewed-on: https://go-review.googlesource.com/c/go/+/587816 Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor --- src/net/dnsclient_unix_test.go | 13 +++++++------ src/net/dnsconfig_unix_test.go | 3 ++- src/net/hosts_test.go | 6 +++--- src/net/http/cgi/host_test.go | 4 ++-- src/net/http/clientserver_test.go | 2 +- src/net/http/fs_test.go | 6 +++--- src/net/http/http_test.go | 4 ++-- src/net/http/httputil/reverseproxy_test.go | 4 ++-- src/net/http/request_test.go | 17 +++++++++-------- src/net/http/serve_test.go | 7 ++++--- src/net/http/sniff_test.go | 4 ++-- src/net/http/transport_test.go | 7 ++++--- src/net/lookup_test.go | 2 +- src/net/lookup_windows_test.go | 6 +++--- src/net/mail/message_test.go | 3 ++- src/net/resolverdialfunc_test.go | 2 +- src/net/textproto/reader_test.go | 9 +++++---- 17 files changed, 53 insertions(+), 46 deletions(-) diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go index 31677573c0b22a..c4e5194a340845 100644 --- a/src/net/dnsclient_unix_test.go +++ b/src/net/dnsclient_unix_test.go @@ -10,6 +10,7 @@ import ( "context" "errors" "fmt" + "maps" "os" "path" "path/filepath" @@ -429,7 +430,7 @@ func TestUpdateResolvConf(t *testing.T) { wg.Wait() } servers := conf.servers() - if !reflect.DeepEqual(servers, tt.servers) { + if !slices.Equal(servers, tt.servers) { t.Errorf("#%d: got %v; want %v", i, servers, tt.servers) continue } @@ -1154,7 +1155,7 @@ func testRotate(t *testing.T, rotate bool, nameservers, wantServers []string) { } } - if !reflect.DeepEqual(usedServers, wantServers) { + if !slices.Equal(usedServers, wantServers) { t.Errorf("rotate=%t got used servers:\n%v\nwant:\n%v", rotate, usedServers, wantServers) } } @@ -1433,7 +1434,7 @@ func TestStrictErrorsLookupIP(t *testing.T) { wantIPs[ip] = struct{}{} } } - if !reflect.DeepEqual(gotIPs, wantIPs) { + if !maps.Equal(gotIPs, wantIPs) { t.Errorf("#%d (%s) strict=%v: got ips %v; want %v", i, tt.desc, strict, gotIPs, wantIPs) } } @@ -1940,7 +1941,7 @@ func TestPTRandNonPTR(t *testing.T) { if err != nil { t.Fatalf("LookupAddr: %v", err) } - if want := []string{"golang.org."}; !reflect.DeepEqual(names, want) { + if want := []string{"golang.org."}; !slices.Equal(names, want) { t.Errorf("names = %q; want %q", names, want) } } @@ -2207,14 +2208,14 @@ func TestCVE202133195(t *testing.T) { if err.Error() != expectedErr.Error() { t.Fatalf("unexpected error: %s", err) } - if !reflect.DeepEqual(records, expected) { + if !slices.Equal(records, expected) { t.Error("Unexpected record set") } records, err = LookupAddr("192.0.2.42") if err.Error() != expectedErr.Error() { t.Fatalf("unexpected error: %s", err) } - if !reflect.DeepEqual(records, expected) { + if !slices.Equal(records, expected) { t.Error("Unexpected record set") } }, diff --git a/src/net/dnsconfig_unix_test.go b/src/net/dnsconfig_unix_test.go index 0aae2ba85b8c32..4db1c5a4af9e53 100644 --- a/src/net/dnsconfig_unix_test.go +++ b/src/net/dnsconfig_unix_test.go @@ -11,6 +11,7 @@ import ( "io/fs" "os" "reflect" + "slices" "strings" "testing" "time" @@ -250,7 +251,7 @@ func TestDNSDefaultSearch(t *testing.T) { for _, tt := range dnsDefaultSearchTests { getHostname = func() (string, error) { return tt.name, tt.err } got := dnsDefaultSearch() - if !reflect.DeepEqual(got, tt.want) { + if !slices.Equal(got, tt.want) { t.Errorf("dnsDefaultSearch with hostname %q and error %+v = %q, wanted %q", tt.name, tt.err, got, tt.want) } } diff --git a/src/net/hosts_test.go b/src/net/hosts_test.go index 5f22920765bd76..2661e79d993d20 100644 --- a/src/net/hosts_test.go +++ b/src/net/hosts_test.go @@ -5,7 +5,7 @@ package net import ( - "reflect" + "slices" "strings" "testing" ) @@ -73,7 +73,7 @@ func testStaticHost(t *testing.T, hostsPath string, ent staticHostEntry) { ins := []string{ent.in, absDomainName(ent.in), strings.ToLower(ent.in), strings.ToUpper(ent.in)} for _, in := range ins { addrs, _ := lookupStaticHost(in) - if !reflect.DeepEqual(addrs, ent.out) { + if !slices.Equal(addrs, ent.out) { t.Errorf("%s, lookupStaticHost(%s) = %v; want %v", hostsPath, in, addrs, ent.out) } } @@ -143,7 +143,7 @@ func testStaticAddr(t *testing.T, hostsPath string, ent staticHostEntry) { for i := range ent.out { ent.out[i] = absDomainName(ent.out[i]) } - if !reflect.DeepEqual(hosts, ent.out) { + if !slices.Equal(hosts, ent.out) { t.Errorf("%s, lookupStaticAddr(%s) = %v; want %v", hostsPath, ent.in, hosts, ent.out) } } diff --git a/src/net/http/cgi/host_test.go b/src/net/http/cgi/host_test.go index 7fe0e6257dbeae..8ecfa19f6bac2d 100644 --- a/src/net/http/cgi/host_test.go +++ b/src/net/http/cgi/host_test.go @@ -16,9 +16,9 @@ import ( "net/http/httptest" "os" "path/filepath" - "reflect" "regexp" "runtime" + "slices" "strings" "testing" "time" @@ -510,7 +510,7 @@ func TestRemoveLeadingDuplicates(t *testing.T) { } for _, tt := range tests { got := removeLeadingDuplicates(tt.env) - if !reflect.DeepEqual(got, tt.want) { + if !slices.Equal(got, tt.want) { t.Errorf("removeLeadingDuplicates(%q) = %q; want %q", tt.env, got, tt.want) } } diff --git a/src/net/http/clientserver_test.go b/src/net/http/clientserver_test.go index 3dc440dde1584e..0c2142a0639c74 100644 --- a/src/net/http/clientserver_test.go +++ b/src/net/http/clientserver_test.go @@ -274,7 +274,7 @@ func testChunkedResponseHeaders(t *testing.T, mode testMode) { if mode == http2Mode { wantTE = nil } - if !reflect.DeepEqual(res.TransferEncoding, wantTE) { + if !slices.Equal(res.TransferEncoding, wantTE) { t.Errorf("TransferEncoding = %v; want %v", res.TransferEncoding, wantTE) } if got, haveCL := res.Header["Content-Length"]; haveCL { diff --git a/src/net/http/fs_test.go b/src/net/http/fs_test.go index 2ffffbf0b33c97..3149ca35acd2a2 100644 --- a/src/net/http/fs_test.go +++ b/src/net/http/fs_test.go @@ -24,9 +24,9 @@ import ( "os/exec" "path" "path/filepath" - "reflect" "regexp" "runtime" + "slices" "strconv" "strings" "testing" @@ -516,7 +516,7 @@ func testServeFileContentType(t *testing.T, mode testMode) { if err != nil { t.Fatal(err) } - if h := resp.Header["Content-Type"]; !reflect.DeepEqual(h, want) { + if h := resp.Header["Content-Type"]; !slices.Equal(h, want) { t.Errorf("Content-Type mismatch: got %v, want %v", h, want) } resp.Body.Close() @@ -1448,7 +1448,7 @@ func TestFileServerCleanPath(t *testing.T) { rr := httptest.NewRecorder() req, _ := NewRequest("GET", "http://foo.localhost"+tt.path, nil) FileServer(fileServerCleanPathDir{&log}).ServeHTTP(rr, req) - if !reflect.DeepEqual(log, tt.wantOpen) { + if !slices.Equal(log, tt.wantOpen) { t.Logf("For %s: Opens = %q; want %q", tt.path, log, tt.wantOpen) } if rr.Code != tt.wantCode { diff --git a/src/net/http/http_test.go b/src/net/http/http_test.go index 2e7e024e2057f3..df9812fc94747c 100644 --- a/src/net/http/http_test.go +++ b/src/net/http/http_test.go @@ -12,8 +12,8 @@ import ( "io/fs" "net/url" "os" - "reflect" "regexp" + "slices" "strings" "testing" ) @@ -41,7 +41,7 @@ func TestForeachHeaderElement(t *testing.T) { foreachHeaderElement(tt.in, func(v string) { got = append(got, v) }) - if !reflect.DeepEqual(got, tt.want) { + if !slices.Equal(got, tt.want) { t.Errorf("foreachHeaderElement(%q) = %q; want %q", tt.in, got, tt.want) } } diff --git a/src/net/http/httputil/reverseproxy_test.go b/src/net/http/httputil/reverseproxy_test.go index eac8b7ec81d6ec..67d0e50593a2eb 100644 --- a/src/net/http/httputil/reverseproxy_test.go +++ b/src/net/http/httputil/reverseproxy_test.go @@ -205,7 +205,7 @@ func TestReverseProxyStripHeadersPresentInConnection(t *testing.T) { slices.Sort(cf) expectedValues := []string{"Upgrade", someConnHeader, fakeConnectionToken} slices.Sort(expectedValues) - if !reflect.DeepEqual(cf, expectedValues) { + if !slices.Equal(cf, expectedValues) { t.Errorf("handler modified header %q = %q; want %q", "Connection", cf, expectedValues) } })) @@ -765,7 +765,7 @@ func TestReverseProxyGetPutBuffer(t *testing.T) { wantLog := []string{"getBuf", "putBuf-" + strconv.Itoa(size)} mu.Lock() defer mu.Unlock() - if !reflect.DeepEqual(log, wantLog) { + if !slices.Equal(log, wantLog) { t.Errorf("Log events = %q; want %q", log, wantLog) } } diff --git a/src/net/http/request_test.go b/src/net/http/request_test.go index 9b6eb6e1a8bc99..37b888313d2abf 100644 --- a/src/net/http/request_test.go +++ b/src/net/http/request_test.go @@ -23,6 +23,7 @@ import ( "os" "reflect" "regexp" + "slices" "strings" "testing" ) @@ -69,22 +70,22 @@ func TestParseFormQuery(t *testing.T) { if bz := req.PostFormValue("z"); bz != "post" { t.Errorf(`req.PostFormValue("z") = %q, want "post"`, bz) } - if qs := req.Form["q"]; !reflect.DeepEqual(qs, []string{"foo", "bar"}) { + if qs := req.Form["q"]; !slices.Equal(qs, []string{"foo", "bar"}) { t.Errorf(`req.Form["q"] = %q, want ["foo", "bar"]`, qs) } - if both := req.Form["both"]; !reflect.DeepEqual(both, []string{"y", "x"}) { + if both := req.Form["both"]; !slices.Equal(both, []string{"y", "x"}) { t.Errorf(`req.Form["both"] = %q, want ["y", "x"]`, both) } if prio := req.FormValue("prio"); prio != "2" { t.Errorf(`req.FormValue("prio") = %q, want "2" (from body)`, prio) } - if orphan := req.Form["orphan"]; !reflect.DeepEqual(orphan, []string{"", "nope"}) { + if orphan := req.Form["orphan"]; !slices.Equal(orphan, []string{"", "nope"}) { t.Errorf(`req.FormValue("orphan") = %q, want "" (from body)`, orphan) } - if empty := req.Form["empty"]; !reflect.DeepEqual(empty, []string{"", "not"}) { + if empty := req.Form["empty"]; !slices.Equal(empty, []string{"", "not"}) { t.Errorf(`req.FormValue("empty") = %q, want "" (from body)`, empty) } - if nokey := req.Form[""]; !reflect.DeepEqual(nokey, []string{"nokey"}) { + if nokey := req.Form[""]; !slices.Equal(nokey, []string{"nokey"}) { t.Errorf(`req.FormValue("nokey") = %q, want "nokey" (from body)`, nokey) } } @@ -765,7 +766,7 @@ func TestRequestWriteBufferedWriter(t *testing.T) { "User-Agent: " + DefaultUserAgent + "\r\n", "\r\n", } - if !reflect.DeepEqual(got, want) { + if !slices.Equal(got, want) { t.Errorf("Writes = %q\n Want = %q", got, want) } } @@ -785,7 +786,7 @@ func TestRequestBadHostHeader(t *testing.T) { "User-Agent: " + DefaultUserAgent + "\r\n", "\r\n", } - if !reflect.DeepEqual(got, want) { + if !slices.Equal(got, want) { t.Errorf("Writes = %q\n Want = %q", got, want) } } @@ -804,7 +805,7 @@ func TestRequestBadUserAgent(t *testing.T) { "User-Agent: evil X-Evil: evil\r\n", "\r\n", } - if !reflect.DeepEqual(got, want) { + if !slices.Equal(got, want) { t.Errorf("Writes = %q\n Want = %q", got, want) } } diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go index b2858ba8f2b559..cc485d3b89471c 100644 --- a/src/net/http/serve_test.go +++ b/src/net/http/serve_test.go @@ -34,6 +34,7 @@ import ( "reflect" "regexp" "runtime" + "slices" "strconv" "strings" "sync" @@ -4010,7 +4011,7 @@ func testHTTP10ConnectionHeader(t *testing.T, mode testMode) { resp.Body.Close() got := resp.Header["Connection"] - if !reflect.DeepEqual(got, tt.expect) { + if !slices.Equal(got, tt.expect) { t.Errorf("wrong Connection headers for request %q. Got %q expect %q", tt.req, got, tt.expect) } } @@ -4329,7 +4330,7 @@ func testServerConnState(t *testing.T, mode testMode) { <-complete sl := <-activeLog - if !reflect.DeepEqual(sl.got, sl.want) { + if !slices.Equal(sl.got, sl.want) { t.Errorf("Request(s) produced unexpected state sequence.\nGot: %v\nWant: %v", sl.got, sl.want) } // Don't return sl to activeLog: we don't expect any further states after @@ -4355,7 +4356,7 @@ func testServerConnState(t *testing.T, mode testMode) { return } sl.got = append(sl.got, state) - if sl.complete != nil && (len(sl.got) >= len(sl.want) || !reflect.DeepEqual(sl.got, sl.want[:len(sl.got)])) { + if sl.complete != nil && (len(sl.got) >= len(sl.want) || !slices.Equal(sl.got, sl.want[:len(sl.got)])) { close(sl.complete) sl.complete = nil } diff --git a/src/net/http/sniff_test.go b/src/net/http/sniff_test.go index d6ef40905e6892..68c8a6af1e11fc 100644 --- a/src/net/http/sniff_test.go +++ b/src/net/http/sniff_test.go @@ -10,7 +10,7 @@ import ( "io" "log" . "net/http" - "reflect" + "slices" "strconv" "strings" "testing" @@ -144,7 +144,7 @@ func testServerIssue5953(t *testing.T, mode testMode) { got := resp.Header["Content-Type"] want := []string{""} - if !reflect.DeepEqual(got, want) { + if !slices.Equal(got, want) { t.Errorf("Content-Type = %q; want %q", got, want) } resp.Body.Close() diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go index ae7159dab00d39..2389284249a9b0 100644 --- a/src/net/http/transport_test.go +++ b/src/net/http/transport_test.go @@ -36,6 +36,7 @@ import ( "os" "reflect" "runtime" + "slices" "strconv" "strings" "sync" @@ -4453,7 +4454,7 @@ func TestTransportFlushesBodyChunks(t *testing.T) { "5\r\nnum2\n\r\n", "0\r\n\r\n", } - if !reflect.DeepEqual(lw.writes, want) { + if !slices.Equal(lw.writes, want) { t.Errorf("Writes differed.\n Got: %q\nWant: %q\n", lw.writes, want) } } @@ -5284,7 +5285,7 @@ func testTransportMaxIdleConns(t *testing.T, mode testMode) { "|http|host-2.dns-is-faked.golang:" + port, "|http|host-3.dns-is-faked.golang:" + port, } - if got := tr.IdleConnKeysForTesting(); !reflect.DeepEqual(got, want) { + if got := tr.IdleConnKeysForTesting(); !slices.Equal(got, want) { t.Fatalf("idle conn keys mismatch.\n got: %q\nwant: %q\n", got, want) } @@ -5296,7 +5297,7 @@ func testTransportMaxIdleConns(t *testing.T, mode testMode) { "|http|host-3.dns-is-faked.golang:" + port, "|http|host-4.dns-is-faked.golang:" + port, } - if got := tr.IdleConnKeysForTesting(); !reflect.DeepEqual(got, want) { + if got := tr.IdleConnKeysForTesting(); !slices.Equal(got, want) { t.Fatalf("idle conn keys mismatch after 5th host.\n got: %q\nwant: %q\n", got, want) } } diff --git a/src/net/lookup_test.go b/src/net/lookup_test.go index 7052f3c9fc77e0..d106f98eef18a9 100644 --- a/src/net/lookup_test.go +++ b/src/net/lookup_test.go @@ -433,7 +433,7 @@ func TestLookupLongTXT(t *testing.T) { strings.Repeat("abcdefghijklmnopqrstuvwxyABCDEFGHJIKLMNOPQRSTUVWXY", 10), "gophers rule", } - if !reflect.DeepEqual(txts, want) { + if !slices.Equal(txts, want) { t.Fatalf("LookupTXT golang.rsc.io incorrect\nhave %q\nwant %q", txts, want) } } diff --git a/src/net/lookup_windows_test.go b/src/net/lookup_windows_test.go index 8f6e4b238f3979..4f287901855653 100644 --- a/src/net/lookup_windows_test.go +++ b/src/net/lookup_windows_test.go @@ -144,7 +144,7 @@ func TestNSLookupTXT(t *testing.T) { } slices.Sort(expected) slices.Sort(txt) - if !reflect.DeepEqual(expected, txt) { + if !slices.Equal(expected, txt) { t.Errorf("different results %s:\texp:%v\tgot:%v", server, toJson(expected), toJson(txt)) } }) @@ -170,7 +170,7 @@ func TestLookupLocalPTR(t *testing.T) { } slices.Sort(expected) slices.Sort(names) - if !reflect.DeepEqual(expected, names) { + if !slices.Equal(expected, names) { t.Errorf("different results %s:\texp:%v\tgot:%v", addr, toJson(expected), toJson(names)) } } @@ -201,7 +201,7 @@ func TestLookupPTR(t *testing.T) { } slices.Sort(expected) slices.Sort(names) - if !reflect.DeepEqual(expected, names) { + if !slices.Equal(expected, names) { t.Errorf("different results %s:\texp:%v\tgot:%v", addr, toJson(expected), toJson(names)) } } diff --git a/src/net/mail/message_test.go b/src/net/mail/message_test.go index 012d51c3df1304..dad9c367f3e451 100644 --- a/src/net/mail/message_test.go +++ b/src/net/mail/message_test.go @@ -9,6 +9,7 @@ import ( "io" "mime" "reflect" + "slices" "strings" "testing" "time" @@ -115,7 +116,7 @@ func headerEq(a, b Header) bool { if !ok { return false } - if !reflect.DeepEqual(as, bs) { + if !slices.Equal(as, bs) { return false } } diff --git a/src/net/resolverdialfunc_test.go b/src/net/resolverdialfunc_test.go index 9b45cdbcb0f526..3e8d77526619fe 100644 --- a/src/net/resolverdialfunc_test.go +++ b/src/net/resolverdialfunc_test.go @@ -59,7 +59,7 @@ func TestResolverDialFunc(t *testing.T) { if err != nil { t.Fatal(err) } - if got, want := sortedIPStrings(ips), []string{"0:200::e00", "1.2.3.4", "1::f", "5.6.7.8"}; !reflect.DeepEqual(got, want) { + if got, want := sortedIPStrings(ips), []string{"0:200::e00", "1.2.3.4", "1::f", "5.6.7.8"}; !slices.Equal(got, want) { t.Errorf("LookupIP wrong.\n got: %q\nwant: %q\n", got, want) } }) diff --git a/src/net/textproto/reader_test.go b/src/net/textproto/reader_test.go index f794879bd739fc..d510f9b338673f 100644 --- a/src/net/textproto/reader_test.go +++ b/src/net/textproto/reader_test.go @@ -11,6 +11,7 @@ import ( "net" "reflect" "runtime" + "slices" "strings" "sync" "testing" @@ -95,13 +96,13 @@ func TestReadDotLines(t *testing.T) { r := reader("dotlines\r\n.foo\r\n..bar\n...baz\nquux\r\n\r\n.\r\nanother\n") s, err := r.ReadDotLines() want := []string{"dotlines", "foo", ".bar", "..baz", "quux", ""} - if !reflect.DeepEqual(s, want) || err != nil { + if !slices.Equal(s, want) || err != nil { t.Fatalf("ReadDotLines: %v, %v", s, err) } s, err = r.ReadDotLines() want = []string{"another"} - if !reflect.DeepEqual(s, want) || err != io.ErrUnexpectedEOF { + if !slices.Equal(s, want) || err != io.ErrUnexpectedEOF { t.Fatalf("ReadDotLines2: %v, %v", s, err) } } @@ -110,13 +111,13 @@ func TestReadDotBytes(t *testing.T) { r := reader("dotlines\r\n.foo\r\n..bar\n...baz\nquux\r\n\r\n.\r\nanot.her\r\n") b, err := r.ReadDotBytes() want := []byte("dotlines\nfoo\n.bar\n..baz\nquux\n\n") - if !reflect.DeepEqual(b, want) || err != nil { + if !slices.Equal(b, want) || err != nil { t.Fatalf("ReadDotBytes: %q, %v", b, err) } b, err = r.ReadDotBytes() want = []byte("anot.her\n") - if !reflect.DeepEqual(b, want) || err != io.ErrUnexpectedEOF { + if !slices.Equal(b, want) || err != io.ErrUnexpectedEOF { t.Fatalf("ReadDotBytes2: %q, %v", b, err) } } From 2247afc0aee41434a4e874af07d026f828bd3210 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:39:58 +0000 Subject: [PATCH 050/866] go,internal,io,mime: use slices and maps to clean tests Replace reflect.DeepEqual with slices.Equal/maps.Equal, which is much faster. Change-Id: Id9cb550884da817da96befdeccfecb3325fb4414 GitHub-Last-Rev: 7d64d78feb86e3ea1af6c24ea6782cb85731bb52 GitHub-Pull-Request: golang/go#67612 Reviewed-on: https://go-review.googlesource.com/c/go/+/587819 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor --- src/go/build/build_test.go | 22 ++++++++++++---------- src/go/build/constraint/expr_test.go | 6 ++++-- src/go/token/position_test.go | 6 +++--- src/internal/dag/alg_test.go | 4 ++-- src/internal/dag/parse_test.go | 4 ++-- src/internal/godebug/godebug_test.go | 3 +-- src/internal/profile/proto_test.go | 8 ++++---- src/internal/xcoff/file_test.go | 3 ++- src/io/fs/walk_test.go | 4 ++-- src/mime/mediatype_test.go | 4 ++-- src/mime/type_test.go | 6 +++--- 11 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/go/build/build_test.go b/src/go/build/build_test.go index cef02302362593..cb2941d097dff8 100644 --- a/src/go/build/build_test.go +++ b/src/go/build/build_test.go @@ -8,10 +8,12 @@ import ( "fmt" "internal/testenv" "io" + "maps" "os" "path/filepath" "reflect" "runtime" + "slices" "strings" "testing" ) @@ -30,7 +32,7 @@ func TestMatch(t *testing.T) { if !ctxt.matchAuto(tag, m) { t.Errorf("%s context should match %s, does not", what, tag) } - if !reflect.DeepEqual(m, want) { + if !maps.Equal(m, want) { t.Errorf("%s tags = %v, want %v", tag, m, want) } } @@ -40,7 +42,7 @@ func TestMatch(t *testing.T) { if ctxt.matchAuto(tag, m) { t.Errorf("%s context should NOT match %s, does", what, tag) } - if !reflect.DeepEqual(m, want) { + if !maps.Equal(m, want) { t.Errorf("%s tags = %v, want %v", tag, m, want) } } @@ -121,11 +123,11 @@ func TestMultiplePackageImport(t *testing.T) { t.Errorf("pkg.Name = %q; want %q", pkg.Name, wantName) } - if wantGoFiles := []string{"file.go", "file_appengine.go"}; !reflect.DeepEqual(pkg.GoFiles, wantGoFiles) { + if wantGoFiles := []string{"file.go", "file_appengine.go"}; !slices.Equal(pkg.GoFiles, wantGoFiles) { t.Errorf("pkg.GoFiles = %q; want %q", pkg.GoFiles, wantGoFiles) } - if wantInvalidFiles := []string{"file_appengine.go"}; !reflect.DeepEqual(pkg.InvalidGoFiles, wantInvalidFiles) { + if wantInvalidFiles := []string{"file_appengine.go"}; !slices.Equal(pkg.InvalidGoFiles, wantInvalidFiles) { t.Errorf("pkg.InvalidGoFiles = %q; want %q", pkg.InvalidGoFiles, wantInvalidFiles) } } @@ -345,7 +347,7 @@ func TestShouldBuild(t *testing.T) { ctx := &Context{BuildTags: []string{"yes"}} tags := map[string]bool{} shouldBuild, binaryOnly, err := ctx.shouldBuild([]byte(tt.content), tags) - if shouldBuild != tt.shouldBuild || binaryOnly != tt.binaryOnly || !reflect.DeepEqual(tags, tt.tags) || err != tt.err { + if shouldBuild != tt.shouldBuild || binaryOnly != tt.binaryOnly || !maps.Equal(tags, tt.tags) || err != tt.err { t.Errorf("mismatch:\n"+ "have shouldBuild=%v, binaryOnly=%v, tags=%v, err=%v\n"+ "want shouldBuild=%v, binaryOnly=%v, tags=%v, err=%v", @@ -363,7 +365,7 @@ func TestGoodOSArchFile(t *testing.T) { if !ctx.goodOSArchFile("hello_linux.go", m) { t.Errorf("goodOSArchFile(hello_linux.go) = false, want true") } - if !reflect.DeepEqual(m, want) { + if !maps.Equal(m, want) { t.Errorf("goodOSArchFile(hello_linux.go) tags = %v, want %v", m, want) } } @@ -770,11 +772,11 @@ func TestAllTags(t *testing.T) { t.Fatal(err) } want := []string{"arm", "netbsd"} - if !reflect.DeepEqual(p.AllTags, want) { + if !slices.Equal(p.AllTags, want) { t.Errorf("AllTags = %v, want %v", p.AllTags, want) } wantFiles := []string{"alltags.go", "x_netbsd_arm.go"} - if !reflect.DeepEqual(p.GoFiles, wantFiles) { + if !slices.Equal(p.GoFiles, wantFiles) { t.Errorf("GoFiles = %v, want %v", p.GoFiles, wantFiles) } @@ -784,11 +786,11 @@ func TestAllTags(t *testing.T) { if err != nil { t.Fatal(err) } - if !reflect.DeepEqual(p.AllTags, want) { + if !slices.Equal(p.AllTags, want) { t.Errorf("AllTags = %v, want %v", p.AllTags, want) } wantFiles = []string{"alltags.go"} - if !reflect.DeepEqual(p.GoFiles, wantFiles) { + if !slices.Equal(p.GoFiles, wantFiles) { t.Errorf("GoFiles = %v, want %v", p.GoFiles, wantFiles) } } diff --git a/src/go/build/constraint/expr_test.go b/src/go/build/constraint/expr_test.go index 15d189012efb7d..de30caf412540c 100644 --- a/src/go/build/constraint/expr_test.go +++ b/src/go/build/constraint/expr_test.go @@ -6,7 +6,9 @@ package constraint import ( "fmt" + "maps" "reflect" + "slices" "strings" "testing" ) @@ -194,7 +196,7 @@ func TestExprEval(t *testing.T) { return tag == "yes" } ok := x.Eval(hasTag) - if ok != tt.ok || !reflect.DeepEqual(tags, wantTags) { + if ok != tt.ok || !maps.Equal(tags, wantTags) { t.Errorf("Eval(%#q):\nhave ok=%v, tags=%v\nwant ok=%v, tags=%v", tt.in, ok, tags, tt.ok, wantTags) } @@ -313,7 +315,7 @@ func TestPlusBuildLines(t *testing.T) { for _, line := range tt.out { want = append(want, "// +build "+line) } - if !reflect.DeepEqual(lines, want) { + if !slices.Equal(lines, want) { t.Errorf("PlusBuildLines(%q):\nhave %q\nwant %q", tt.in, lines, want) } }) diff --git a/src/go/token/position_test.go b/src/go/token/position_test.go index 685bf61380000b..677a0a251d6e8c 100644 --- a/src/go/token/position_test.go +++ b/src/go/token/position_test.go @@ -7,7 +7,7 @@ package token import ( "fmt" "math/rand" - "reflect" + "slices" "sync" "testing" ) @@ -130,7 +130,7 @@ func TestPositions(t *testing.T) { if f.LineCount() != len(test.lines) { t.Errorf("%s, SetLines: got line count %d; want %d", f.Name(), f.LineCount(), len(test.lines)) } - if !reflect.DeepEqual(f.Lines(), test.lines) { + if !slices.Equal(f.Lines(), test.lines) { t.Errorf("%s, Lines after SetLines(v): got %v; want %v", f.Name(), f.Lines(), test.lines) } verifyPositions(t, fset, f, test.lines) @@ -472,7 +472,7 @@ func TestFileAddLineColumnInfo(t *testing.T) { for _, info := range test.infos { f.AddLineColumnInfo(info.Offset, info.Filename, info.Line, info.Column) } - if !reflect.DeepEqual(f.infos, test.want) { + if !slices.Equal(f.infos, test.want) { t.Errorf("\ngot %+v, \nwant %+v", f.infos, test.want) } }) diff --git a/src/internal/dag/alg_test.go b/src/internal/dag/alg_test.go index e5ea8b6ab669b0..0659eb18e34769 100644 --- a/src/internal/dag/alg_test.go +++ b/src/internal/dag/alg_test.go @@ -5,7 +5,7 @@ package dag import ( - "reflect" + "slices" "strings" "testing" ) @@ -26,7 +26,7 @@ func TestTopo(t *testing.T) { // // "a" is a leaf. wantNodes := strings.Fields("d c b a") - if !reflect.DeepEqual(wantNodes, got) { + if !slices.Equal(wantNodes, got) { t.Fatalf("want topo sort %v, got %v", wantNodes, got) } } diff --git a/src/internal/dag/parse_test.go b/src/internal/dag/parse_test.go index b2520c365946ab..dda304ad3eb161 100644 --- a/src/internal/dag/parse_test.go +++ b/src/internal/dag/parse_test.go @@ -5,7 +5,7 @@ package dag import ( - "reflect" + "slices" "strings" "testing" ) @@ -52,7 +52,7 @@ func TestParse(t *testing.T) { g := mustParse(t, diamond) wantNodes := strings.Fields("a b c d") - if !reflect.DeepEqual(wantNodes, g.Nodes) { + if !slices.Equal(wantNodes, g.Nodes) { t.Fatalf("want nodes %v, got %v", wantNodes, g.Nodes) } diff --git a/src/internal/godebug/godebug_test.go b/src/internal/godebug/godebug_test.go index 5d426fd52e2690..69296303560505 100644 --- a/src/internal/godebug/godebug_test.go +++ b/src/internal/godebug/godebug_test.go @@ -11,7 +11,6 @@ import ( "internal/testenv" "os" "os/exec" - "reflect" "runtime/metrics" "slices" "strings" @@ -125,7 +124,7 @@ func TestCmdBisect(t *testing.T) { } slices.Sort(have) - if !reflect.DeepEqual(have, want) { + if !slices.Equal(have, want) { t.Errorf("bad bisect output:\nhave %v\nwant %v\ncomplete output:\n%s", have, want, string(out)) } } diff --git a/src/internal/profile/proto_test.go b/src/internal/profile/proto_test.go index 46c6d8306383cb..4c09f7c47e1411 100644 --- a/src/internal/profile/proto_test.go +++ b/src/internal/profile/proto_test.go @@ -5,7 +5,7 @@ package profile import ( - "reflect" + "slices" "testing" ) @@ -34,7 +34,7 @@ func TestPackedEncoding(t *testing.T) { }, } { source := &packedInts{tc.uint64s, tc.int64s} - if got, want := marshal(source), tc.encoded; !reflect.DeepEqual(got, want) { + if got, want := marshal(source), tc.encoded; !slices.Equal(got, want) { t.Errorf("failed encode %d, got %v, want %v", i, got, want) } @@ -43,10 +43,10 @@ func TestPackedEncoding(t *testing.T) { t.Errorf("failed decode %d: %v", i, err) continue } - if got, want := dest.uint64s, tc.uint64s; !reflect.DeepEqual(got, want) { + if got, want := dest.uint64s, tc.uint64s; !slices.Equal(got, want) { t.Errorf("failed decode uint64s %d, got %v, want %v", i, got, want) } - if got, want := dest.int64s, tc.int64s; !reflect.DeepEqual(got, want) { + if got, want := dest.int64s, tc.int64s; !slices.Equal(got, want) { t.Errorf("failed decode int64s %d, got %v, want %v", i, got, want) } } diff --git a/src/internal/xcoff/file_test.go b/src/internal/xcoff/file_test.go index a6722e9453f2ff..d1f10d6bf1f7a3 100644 --- a/src/internal/xcoff/file_test.go +++ b/src/internal/xcoff/file_test.go @@ -6,6 +6,7 @@ package xcoff import ( "reflect" + "slices" "testing" ) @@ -87,7 +88,7 @@ func TestOpen(t *testing.T) { if err != nil { t.Error(err) } - if !reflect.DeepEqual(tl, fl) { + if !slices.Equal(tl, fl) { t.Errorf("open %s: loader import = %v, want %v", tt.file, tl, fl) } } diff --git a/src/io/fs/walk_test.go b/src/io/fs/walk_test.go index 40f4e1ab9d6139..4934df164b58c9 100644 --- a/src/io/fs/walk_test.go +++ b/src/io/fs/walk_test.go @@ -9,7 +9,7 @@ import ( "os" pathpkg "path" "path/filepath" - "reflect" + "slices" "testing" "testing/fstest" ) @@ -145,7 +145,7 @@ func TestIssue51617(t *testing.T) { t.Fatal(err) } want := []string{".", "a", "a/bad", "a/next"} - if !reflect.DeepEqual(saw, want) { + if !slices.Equal(saw, want) { t.Errorf("got directories %v, want %v", saw, want) } } diff --git a/src/mime/mediatype_test.go b/src/mime/mediatype_test.go index 1458cdb6e2dd82..1731f7361e186a 100644 --- a/src/mime/mediatype_test.go +++ b/src/mime/mediatype_test.go @@ -5,7 +5,7 @@ package mime import ( - "reflect" + "maps" "strings" "testing" ) @@ -429,7 +429,7 @@ func TestParseMediaType(t *testing.T) { if len(params) == 0 && len(test.p) == 0 { continue } - if !reflect.DeepEqual(params, test.p) { + if !maps.Equal(params, test.p) { t.Errorf("for input %#q, wrong params.\n"+ "expected: %#v\n"+ " got: %#v", diff --git a/src/mime/type_test.go b/src/mime/type_test.go index d8368e8846f627..2e55468dd7c100 100644 --- a/src/mime/type_test.go +++ b/src/mime/type_test.go @@ -5,7 +5,7 @@ package mime import ( - "reflect" + "slices" "strings" "sync" "testing" @@ -136,7 +136,7 @@ func TestExtensionsByType(t *testing.T) { t.Errorf("ExtensionsByType(%q) = %q, %v; want error substring %q", tt.typ, got, err, tt.wantErr) continue } - if !reflect.DeepEqual(got, tt.want) { + if !slices.Equal(got, tt.want) { t.Errorf("ExtensionsByType(%q) = %q; want %q", tt.typ, got, tt.want) } } @@ -213,7 +213,7 @@ func TestExtensionsByType2(t *testing.T) { t.Errorf("ExtensionsByType(%q): %v", tt.typ, err) continue } - if !reflect.DeepEqual(got, tt.want) { + if !slices.Equal(got, tt.want) { t.Errorf("ExtensionsByType(%q) = %q; want %q", tt.typ, got, tt.want) } } From 0b0dfcd5404ce86d6c818d78bdb6348ded459e96 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:24:06 +0000 Subject: [PATCH 051/866] runtime: use slices and maps to clean up tests Replace reflect.DeepEqual with slices.Equal/maps.Equal, which is much faster. Also remove some unecessary helper functions. Change-Id: I3e4fa2938fed1598278c9e556cd4fa3b9ed3ad6d GitHub-Last-Rev: 69bb43fc6e5c4a4a7d028528fe00b43db784464e GitHub-Pull-Request: golang/go#67603 Reviewed-on: https://go-review.googlesource.com/c/go/+/587815 Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor --- src/runtime/callers_test.go | 4 ++-- src/runtime/defer_test.go | 4 ++-- src/runtime/map_test.go | 4 ++-- src/runtime/metrics/description_test.go | 4 ++-- src/runtime/metrics_test.go | 4 ++-- src/runtime/pprof/label_test.go | 11 +++-------- src/runtime/pprof/runtime_test.go | 22 +++++++++++----------- src/runtime/profbuf_test.go | 6 +++--- src/runtime/race/sched_test.go | 4 ++-- 9 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/runtime/callers_test.go b/src/runtime/callers_test.go index 49a1d5a6f76124..9429442fc08d39 100644 --- a/src/runtime/callers_test.go +++ b/src/runtime/callers_test.go @@ -5,8 +5,8 @@ package runtime_test import ( - "reflect" "runtime" + "slices" "strings" "testing" ) @@ -80,7 +80,7 @@ func testCallersEqual(t *testing.T, pcs []uintptr, want []string) { } got = append(got, frame.Function) } - if !reflect.DeepEqual(want, got) { + if !slices.Equal(want, got) { t.Fatalf("wanted %v, got %v", want, got) } } diff --git a/src/runtime/defer_test.go b/src/runtime/defer_test.go index d73202ae6a0109..e3d0d077685426 100644 --- a/src/runtime/defer_test.go +++ b/src/runtime/defer_test.go @@ -5,8 +5,8 @@ package runtime_test import ( - "reflect" "runtime" + "slices" "testing" ) @@ -83,7 +83,7 @@ func TestConditionalDefers(t *testing.T) { t.Fatal("expected panic") } want := []int{4, 2, 1} - if !reflect.DeepEqual(want, list) { + if !slices.Equal(want, list) { t.Fatalf("wanted %v, got %v", want, list) } diff --git a/src/runtime/map_test.go b/src/runtime/map_test.go index 13624e0938621b..ba2ea746490994 100644 --- a/src/runtime/map_test.go +++ b/src/runtime/map_test.go @@ -144,7 +144,7 @@ func TestMapAppendAssignment(t *testing.T) { m[0] = append(m[0], a...) want := []int{12345, 67890, 123, 456, 7, 8, 9, 0} - if got := m[0]; !reflect.DeepEqual(got, want) { + if got := m[0]; !slices.Equal(got, want) { t.Errorf("got %v, want %v", got, want) } } @@ -533,7 +533,7 @@ func TestMapIterOrder(t *testing.T) { first := ord() ok := false for try := 0; try < 100; try++ { - if !reflect.DeepEqual(first, ord()) { + if !slices.Equal(first, ord()) { ok = true break } diff --git a/src/runtime/metrics/description_test.go b/src/runtime/metrics/description_test.go index 4fc652362ecc0c..0ee9ea16d0b9a8 100644 --- a/src/runtime/metrics/description_test.go +++ b/src/runtime/metrics/description_test.go @@ -18,7 +18,7 @@ import ( "os" "regexp" "runtime/metrics" - "sort" + "slices" "strings" "testing" _ "unsafe" @@ -43,7 +43,7 @@ func TestNames(t *testing.T) { } names := runtime_readMetricNames() - sort.Strings(names) + slices.Sort(names) samples := make([]metrics.Sample, len(names)) for i, name := range names { samples[i].Name = name diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index ebbf0e4fd07e6d..9191d86d043770 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -201,10 +201,10 @@ func TestReadMetrics(t *testing.T) { checkUint64(t, "/gc/heap/frees:objects", frees, mstats.Frees-tinyAllocs) // Verify that /gc/pauses:seconds is a copy of /sched/pauses/total/gc:seconds - if !reflect.DeepEqual(gcPauses.Buckets, schedPausesTotalGC.Buckets) { + if !slices.Equal(gcPauses.Buckets, schedPausesTotalGC.Buckets) { t.Errorf("/gc/pauses:seconds buckets %v do not match /sched/pauses/total/gc:seconds buckets %v", gcPauses.Buckets, schedPausesTotalGC.Counts) } - if !reflect.DeepEqual(gcPauses.Counts, schedPausesTotalGC.Counts) { + if !slices.Equal(gcPauses.Counts, schedPausesTotalGC.Counts) { t.Errorf("/gc/pauses:seconds counts %v do not match /sched/pauses/total/gc:seconds counts %v", gcPauses.Counts, schedPausesTotalGC.Counts) } } diff --git a/src/runtime/pprof/label_test.go b/src/runtime/pprof/label_test.go index cefd9a53e2fc41..38d9e80dfc2a58 100644 --- a/src/runtime/pprof/label_test.go +++ b/src/runtime/pprof/label_test.go @@ -7,7 +7,8 @@ package pprof import ( "context" "reflect" - "sort" + "slices" + "strings" "testing" ) @@ -17,16 +18,10 @@ func labelsSorted(ctx context.Context) []label { ls = append(ls, label{key, value}) return true }) - sort.Sort(labelSorter(ls)) + slices.SortFunc(ls, func(a, b label) int { return strings.Compare(a.key, b.key) }) return ls } -type labelSorter []label - -func (s labelSorter) Len() int { return len(s) } -func (s labelSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s labelSorter) Less(i, j int) bool { return s[i].key < s[j].key } - func TestContextLabels(t *testing.T) { // Background context starts with no labels. ctx := context.Background() diff --git a/src/runtime/pprof/runtime_test.go b/src/runtime/pprof/runtime_test.go index 0dd5324b42ee09..e77c7f2bc90d7b 100644 --- a/src/runtime/pprof/runtime_test.go +++ b/src/runtime/pprof/runtime_test.go @@ -7,7 +7,7 @@ package pprof import ( "context" "fmt" - "reflect" + "maps" "testing" ) @@ -15,11 +15,11 @@ func TestSetGoroutineLabels(t *testing.T) { sync := make(chan struct{}) wantLabels := map[string]string{} - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("Expected parent goroutine's profile labels to be empty before test, got %v", gotLabels) } go func() { - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("Expected child goroutine's profile labels to be empty before test, got %v", gotLabels) } sync <- struct{}{} @@ -29,11 +29,11 @@ func TestSetGoroutineLabels(t *testing.T) { wantLabels = map[string]string{"key": "value"} ctx := WithLabels(context.Background(), Labels("key", "value")) SetGoroutineLabels(ctx) - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("parent goroutine's profile labels: got %v, want %v", gotLabels, wantLabels) } go func() { - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("child goroutine's profile labels: got %v, want %v", gotLabels, wantLabels) } sync <- struct{}{} @@ -43,11 +43,11 @@ func TestSetGoroutineLabels(t *testing.T) { wantLabels = map[string]string{} ctx = context.Background() SetGoroutineLabels(ctx) - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("Expected parent goroutine's profile labels to be empty, got %v", gotLabels) } go func() { - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("Expected child goroutine's profile labels to be empty, got %v", gotLabels) } sync <- struct{}{} @@ -57,20 +57,20 @@ func TestSetGoroutineLabels(t *testing.T) { func TestDo(t *testing.T) { wantLabels := map[string]string{} - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("Expected parent goroutine's profile labels to be empty before Do, got %v", gotLabels) } Do(context.Background(), Labels("key1", "value1", "key2", "value2"), func(ctx context.Context) { wantLabels := map[string]string{"key1": "value1", "key2": "value2"} - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("parent goroutine's profile labels: got %v, want %v", gotLabels, wantLabels) } sync := make(chan struct{}) go func() { wantLabels := map[string]string{"key1": "value1", "key2": "value2"} - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { t.Errorf("child goroutine's profile labels: got %v, want %v", gotLabels, wantLabels) } sync <- struct{}{} @@ -80,7 +80,7 @@ func TestDo(t *testing.T) { }) wantLabels = map[string]string{} - if gotLabels := getProfLabel(); !reflect.DeepEqual(gotLabels, wantLabels) { + if gotLabels := getProfLabel(); !maps.Equal(gotLabels, wantLabels) { fmt.Printf("%#v", gotLabels) fmt.Printf("%#v", wantLabels) t.Errorf("Expected parent goroutine's profile labels to be empty after Do, got %v", gotLabels) diff --git a/src/runtime/profbuf_test.go b/src/runtime/profbuf_test.go index dac78ffd31bfef..9050d1fa25faa8 100644 --- a/src/runtime/profbuf_test.go +++ b/src/runtime/profbuf_test.go @@ -5,8 +5,8 @@ package runtime_test import ( - "reflect" . "runtime" + "slices" "testing" "time" "unsafe" @@ -20,7 +20,7 @@ func TestProfBuf(t *testing.T) { } read := func(t *testing.T, b *ProfBuf, data []uint64, tags []unsafe.Pointer) { rdata, rtags, eof := b.Read(ProfBufNonBlocking) - if !reflect.DeepEqual(rdata, data) || !reflect.DeepEqual(rtags, tags) { + if !slices.Equal(rdata, data) || !slices.Equal(rtags, tags) { t.Fatalf("unexpected profile read:\nhave data %#x\nwant data %#x\nhave tags %#x\nwant tags %#x", rdata, data, rtags, tags) } if eof { @@ -32,7 +32,7 @@ func TestProfBuf(t *testing.T) { go func() { eof := data == nil rdata, rtags, reof := b.Read(ProfBufBlocking) - if !reflect.DeepEqual(rdata, data) || !reflect.DeepEqual(rtags, tags) || reof != eof { + if !slices.Equal(rdata, data) || !slices.Equal(rtags, tags) || reof != eof { // Errorf, not Fatalf, because called in goroutine. t.Errorf("unexpected profile read:\nhave data %#x\nwant data %#x\nhave tags %#x\nwant tags %#x\nhave eof=%v, want %v", rdata, data, rtags, tags, reof, eof) } diff --git a/src/runtime/race/sched_test.go b/src/runtime/race/sched_test.go index a66860cda0f46d..edff0d5c38b602 100644 --- a/src/runtime/race/sched_test.go +++ b/src/runtime/race/sched_test.go @@ -8,8 +8,8 @@ package race_test import ( "fmt" - "reflect" "runtime" + "slices" "strings" "testing" ) @@ -35,7 +35,7 @@ func TestRandomScheduling(t *testing.T) { } for i := 0; i < N; i++ { - if !reflect.DeepEqual(out[0], out[i]) { + if !slices.Equal(out[0], out[i]) { return // found a different order } } From 05861ff90cfc855620d0dcbd1d6cc488ebf04880 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:47:14 +0000 Subject: [PATCH 052/866] os,path/filepath,testing: use slices to clean up tests Replace reflect.DeepEqual with slices.Equal which is much faster. Change-Id: I299db6f998738174983731f08c1021346b87dfaa GitHub-Last-Rev: 44ca9015d6af4e0fbe8d23c93b3f2da08a2d7728 GitHub-Pull-Request: golang/go#67613 Reviewed-on: https://go-review.googlesource.com/c/go/+/587938 Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor --- src/os/env_test.go | 4 ++-- src/os/exec/env_test.go | 4 ++-- src/os/exec/exec_posix_test.go | 6 +++--- src/os/os_test.go | 5 ++--- src/os/os_windows_test.go | 3 +-- src/path/filepath/match_test.go | 3 +-- src/path/filepath/path_test.go | 6 +++--- src/path/filepath/path_windows_test.go | 4 ++-- src/testing/fstest/testfs.go | 3 +-- src/testing/sub_test.go | 4 ++-- 10 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/os/env_test.go b/src/os/env_test.go index 5809f4b866b73a..e3de64196abdbc 100644 --- a/src/os/env_test.go +++ b/src/os/env_test.go @@ -6,7 +6,7 @@ package os_test import ( . "os" - "reflect" + "slices" "strings" "testing" ) @@ -91,7 +91,7 @@ func TestConsistentEnviron(t *testing.T) { e0 := Environ() for i := 0; i < 10; i++ { e1 := Environ() - if !reflect.DeepEqual(e0, e1) { + if !slices.Equal(e0, e1) { t.Fatalf("environment changed") } } diff --git a/src/os/exec/env_test.go b/src/os/exec/env_test.go index ea06af3885019d..9fd022b2ee55c2 100644 --- a/src/os/exec/env_test.go +++ b/src/os/exec/env_test.go @@ -5,7 +5,7 @@ package exec import ( - "reflect" + "slices" "testing" ) @@ -60,7 +60,7 @@ func TestDedupEnv(t *testing.T) { } for _, tt := range tests { got, err := dedupEnvCase(tt.noCase, tt.nulOK, tt.in) - if !reflect.DeepEqual(got, tt.want) || (err != nil) != tt.wantErr { + if !slices.Equal(got, tt.want) || (err != nil) != tt.wantErr { t.Errorf("Dedup(%v, %q) = %q, %v; want %q, error:%v", tt.noCase, tt.in, got, err, tt.want, tt.wantErr) } } diff --git a/src/os/exec/exec_posix_test.go b/src/os/exec/exec_posix_test.go index 5d828b3475a40a..45604203dd0c46 100644 --- a/src/os/exec/exec_posix_test.go +++ b/src/os/exec/exec_posix_test.go @@ -13,8 +13,8 @@ import ( "os" "os/user" "path/filepath" - "reflect" "runtime" + "slices" "strconv" "strings" "syscall" @@ -184,7 +184,7 @@ func TestImplicitPWD(t *testing.T) { wantPWDs = nil } } - if !reflect.DeepEqual(pwds, wantPWDs) { + if !slices.Equal(pwds, wantPWDs) { t.Errorf("PWD entries in cmd.Environ():\n\t%s\nwant:\n\t%s", strings.Join(pwds, "\n\t"), strings.Join(wantPWDs, "\n\t")) } @@ -257,7 +257,7 @@ func TestExplicitPWD(t *testing.T) { } wantPWDs := []string{tc.pwd} - if !reflect.DeepEqual(pwds, wantPWDs) { + if !slices.Equal(pwds, wantPWDs) { t.Errorf("PWD entries in cmd.Environ():\n\t%s\nwant:\n\t%s", strings.Join(pwds, "\n\t"), strings.Join(wantPWDs, "\n\t")) } diff --git a/src/os/os_test.go b/src/os/os_test.go index 5a36abd7c69610..46c4f138c3819c 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -16,7 +16,6 @@ import ( . "os" "os/exec" "path/filepath" - "reflect" "runtime" "runtime/debug" "slices" @@ -805,13 +804,13 @@ func TestReaddirStatFailures(t *testing.T) { } if got, want := names(mustReadDir("initial readdir")), - []string{"good1", "good2", "x"}; !reflect.DeepEqual(got, want) { + []string{"good1", "good2", "x"}; !slices.Equal(got, want) { t.Errorf("initial readdir got %q; want %q", got, want) } xerr = ErrNotExist if got, want := names(mustReadDir("with x disappearing")), - []string{"good1", "good2"}; !reflect.DeepEqual(got, want) { + []string{"good1", "good2"}; !slices.Equal(got, want) { t.Errorf("with x disappearing, got %q; want %q", got, want) } diff --git a/src/os/os_windows_test.go b/src/os/os_windows_test.go index caff011122b610..4a8d0d07ef75af 100644 --- a/src/os/os_windows_test.go +++ b/src/os/os_windows_test.go @@ -17,7 +17,6 @@ import ( "os" "os/exec" "path/filepath" - "reflect" "runtime" "slices" "strings" @@ -778,7 +777,7 @@ func TestReadStdin(t *testing.T) { for len(want) < 5 { want = append(want, "") } - if !reflect.DeepEqual(all, want) { + if !slices.Equal(all, want) { t.Errorf("reading %q:\nhave %x\nwant %x", s, all, want) } }) diff --git a/src/path/filepath/match_test.go b/src/path/filepath/match_test.go index c6b1c505205b36..3cee92f8ae0009 100644 --- a/src/path/filepath/match_test.go +++ b/src/path/filepath/match_test.go @@ -9,7 +9,6 @@ import ( "internal/testenv" "os" . "path/filepath" - "reflect" "runtime" "slices" "strings" @@ -367,7 +366,7 @@ func TestNonWindowsGlobEscape(t *testing.T) { if err != nil { t.Fatalf("Glob error for %q: %s", pattern, err) } - if !reflect.DeepEqual(matches, want) { + if !slices.Equal(matches, want) { t.Fatalf("Glob(%#q) = %v want %v", pattern, matches, want) } } diff --git a/src/path/filepath/path_test.go b/src/path/filepath/path_test.go index b24f39c5aa4df9..5d3cbc991fefae 100644 --- a/src/path/filepath/path_test.go +++ b/src/path/filepath/path_test.go @@ -364,7 +364,7 @@ func TestSplitList(t *testing.T) { tests = append(tests, winsplitlisttests...) } for _, test := range tests { - if l := filepath.SplitList(test.list); !reflect.DeepEqual(l, test.result) { + if l := filepath.SplitList(test.list); !slices.Equal(l, test.result) { t.Errorf("SplitList(%#q) = %#q, want %#q", test.list, l, test.result) } } @@ -1004,7 +1004,7 @@ func TestWalkSymlinkRoot(t *testing.T) { t.Fatal(err) } - if !reflect.DeepEqual(walked, tt.want) { + if !slices.Equal(walked, tt.want) { t.Logf("Walk(%#q) visited %#q; want %#q", tt.root, walked, tt.want) if slices.Contains(tt.buggyGOOS, runtime.GOOS) { t.Logf("(ignoring known bug on %v)", runtime.GOOS) @@ -1950,7 +1950,7 @@ func TestIssue51617(t *testing.T) { t.Fatal(err) } want := []string{".", "a", filepath.Join("a", "bad"), filepath.Join("a", "next")} - if !reflect.DeepEqual(saw, want) { + if !slices.Equal(saw, want) { t.Errorf("got directories %v, want %v", saw, want) } } diff --git a/src/path/filepath/path_windows_test.go b/src/path/filepath/path_windows_test.go index 2862f390d0531f..603b179405d01b 100644 --- a/src/path/filepath/path_windows_test.go +++ b/src/path/filepath/path_windows_test.go @@ -13,8 +13,8 @@ import ( "os" "os/exec" "path/filepath" - "reflect" "runtime/debug" + "slices" "strings" "testing" ) @@ -83,7 +83,7 @@ func testWinSplitListTestIsValid(t *testing.T, ti int, tt SplitListTest, case err != nil: t.Errorf("%d,%d: execution error %v\n%q", ti, i, err, out) return - case !reflect.DeepEqual(out, exp): + case !slices.Equal(out, exp): t.Errorf("%d,%d: expected %#q, got %#q", ti, i, exp, out) return default: diff --git a/src/testing/fstest/testfs.go b/src/testing/fstest/testfs.go index 080bcdd65ff98d..76a2cff62d5608 100644 --- a/src/testing/fstest/testfs.go +++ b/src/testing/fstest/testfs.go @@ -11,7 +11,6 @@ import ( "io" "io/fs" "path" - "reflect" "slices" "strings" "testing/iotest" @@ -358,7 +357,7 @@ func (t *fsTester) checkGlob(dir string, list []fs.DirEntry) { t.errorf("%s: Glob(%#q): %w", dir, glob, err) return } - if reflect.DeepEqual(want, names) { + if slices.Equal(want, names) { return } diff --git a/src/testing/sub_test.go b/src/testing/sub_test.go index 1c23d054a06a32..90c2afe605f41e 100644 --- a/src/testing/sub_test.go +++ b/src/testing/sub_test.go @@ -7,9 +7,9 @@ package testing import ( "bytes" "fmt" - "reflect" "regexp" "runtime" + "slices" "strings" "sync" "sync/atomic" @@ -886,7 +886,7 @@ func TestCleanup(t *T) { t.Cleanup(func() { cleanups = append(cleanups, 1) }) t.Cleanup(func() { cleanups = append(cleanups, 2) }) }) - if got, want := cleanups, []int{2, 1}; !reflect.DeepEqual(got, want) { + if got, want := cleanups, []int{2, 1}; !slices.Equal(got, want) { t.Errorf("unexpected cleanup record; got %v want %v", got, want) } } From b5b9d24dc38c63cca6319f2b139cb9b35b3cb058 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:32:38 +0000 Subject: [PATCH 053/866] encoding: use slices and maps to clean up tests Replace reflect.DeepEqual with slices.Equal/maps.Equal, which is much faster. Change-Id: I62ad60a66e28cfb2bb49c36037bafd4b9d201e88 GitHub-Last-Rev: 79554baddb1856260a44ba6587c205d223a527b1 GitHub-Pull-Request: golang/go#67611 Reviewed-on: https://go-review.googlesource.com/c/go/+/587818 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov --- src/encoding/asn1/marshal_test.go | 3 ++- src/encoding/csv/reader_test.go | 3 ++- src/encoding/gob/encoder_test.go | 15 ++++++++------- src/encoding/json/decode_test.go | 5 +++-- src/encoding/pem/pem_test.go | 2 +- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/encoding/asn1/marshal_test.go b/src/encoding/asn1/marshal_test.go index d9c3cf48fa21c3..64ce47640034be 100644 --- a/src/encoding/asn1/marshal_test.go +++ b/src/encoding/asn1/marshal_test.go @@ -9,6 +9,7 @@ import ( "encoding/hex" "math/big" "reflect" + "slices" "strings" "testing" "time" @@ -346,7 +347,7 @@ func TestSetEncoder(t *testing.T) { if len(rest) != 0 { t.Error("Unmarshal returned extra garbage") } - if !reflect.DeepEqual(expectedOrder, resultStruct.Strings) { + if !slices.Equal(expectedOrder, resultStruct.Strings) { t.Errorf("Unexpected SET content. got: %s, want: %s", resultStruct.Strings, expectedOrder) } } diff --git a/src/encoding/csv/reader_test.go b/src/encoding/csv/reader_test.go index 2e5d62330cd954..0be236a52fb2b3 100644 --- a/src/encoding/csv/reader_test.go +++ b/src/encoding/csv/reader_test.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "reflect" + "slices" "strings" "testing" "unicode/utf8" @@ -470,7 +471,7 @@ func TestRead(t *testing.T) { } break } - if got, want := rec, tt.Output[recNum]; !reflect.DeepEqual(got, want) { + if got, want := rec, tt.Output[recNum]; !slices.Equal(got, want) { t.Errorf("Read vs ReadAll mismatch;\ngot %q\nwant %q", got, want) } pos := positions[recNum] diff --git a/src/encoding/gob/encoder_test.go b/src/encoding/gob/encoder_test.go index efb13bc83b5335..3ee43fbc94b45f 100644 --- a/src/encoding/gob/encoder_test.go +++ b/src/encoding/gob/encoder_test.go @@ -10,6 +10,7 @@ import ( "encoding/hex" "fmt" "io" + "maps" "math" "reflect" "slices" @@ -74,7 +75,7 @@ func TestEncodeIntSlice(t *testing.T) { res := make([]int8, 9) dec.Decode(&res) - if !reflect.DeepEqual(s8, res) { + if !slices.Equal(s8, res) { t.Fatalf("EncodeIntSlice: expected %v, got %v", s8, res) } }) @@ -88,7 +89,7 @@ func TestEncodeIntSlice(t *testing.T) { res := make([]int16, 9) dec.Decode(&res) - if !reflect.DeepEqual(s16, res) { + if !slices.Equal(s16, res) { t.Fatalf("EncodeIntSlice: expected %v, got %v", s16, res) } }) @@ -102,7 +103,7 @@ func TestEncodeIntSlice(t *testing.T) { res := make([]int32, 9) dec.Decode(&res) - if !reflect.DeepEqual(s32, res) { + if !slices.Equal(s32, res) { t.Fatalf("EncodeIntSlice: expected %v, got %v", s32, res) } }) @@ -116,7 +117,7 @@ func TestEncodeIntSlice(t *testing.T) { res := make([]int64, 9) dec.Decode(&res) - if !reflect.DeepEqual(s64, res) { + if !slices.Equal(s64, res) { t.Fatalf("EncodeIntSlice: expected %v, got %v", s64, res) } }) @@ -689,7 +690,7 @@ func TestMapBug1(t *testing.T) { if err != nil { t.Fatal("decode:", err) } - if !reflect.DeepEqual(in, out) { + if !maps.Equal(in, out) { t.Errorf("mismatch: %v %v", in, out) } } @@ -763,7 +764,7 @@ func TestSliceReusesMemory(t *testing.T) { if err != nil { t.Fatal("ints: decode:", err) } - if !reflect.DeepEqual(x, y) { + if !slices.Equal(x, y) { t.Errorf("ints: expected %q got %q\n", x, y) } if addr != &y[0] { @@ -1199,7 +1200,7 @@ func TestMarshalFloatMap(t *testing.T) { got := readMap(out) want := readMap(in) - if !reflect.DeepEqual(got, want) { + if !slices.Equal(got, want) { t.Fatalf("\nEncode: %v\nDecode: %v", want, got) } } diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go index f5b44677b34162..ed906950394d05 100644 --- a/src/encoding/json/decode_test.go +++ b/src/encoding/json/decode_test.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "image" + "maps" "math" "math/big" "net" @@ -1979,7 +1980,7 @@ func TestStringKind(t *testing.T) { if err != nil { t.Fatalf("Unmarshal error: %v", err) } - if !reflect.DeepEqual(got, want) { + if !maps.Equal(got, want) { t.Fatalf("Marshal/Unmarshal mismatch:\n\tgot: %v\n\twant: %v", got, want) } } @@ -2533,7 +2534,7 @@ func TestUnmarshalRescanLiteralMangledUnquote(t *testing.T) { t.Fatalf("Unmarshal error: %v", err) } want := map[textUnmarshalerString]string{"foo": "", `"`: ""} - if !reflect.DeepEqual(got, want) { + if !maps.Equal(got, want) { t.Errorf("Marshal/Unmarshal roundtrip:\n\tgot: %q\n\twant: %q", gotT, wantT) } } diff --git a/src/encoding/pem/pem_test.go b/src/encoding/pem/pem_test.go index 56a7754b220c64..e252ffd8ed1613 100644 --- a/src/encoding/pem/pem_test.go +++ b/src/encoding/pem/pem_test.go @@ -163,7 +163,7 @@ func TestCVE202224675(t *testing.T) { // Prior to CVE-2022-24675, this input would cause a stack overflow. input := []byte(strings.Repeat("-----BEGIN \n", 10000000)) result, rest := Decode(input) - if result != nil || !reflect.DeepEqual(rest, input) { + if result != nil || !bytes.Equal(rest, input) { t.Errorf("Encode of %#v decoded as %#v", input, rest) } } From bd6f911f852f4a608e2cf11c1ce5b55ff0347866 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 24 Jul 2024 10:24:16 +0000 Subject: [PATCH 054/866] archive: use slices and maps to clean up tests Replace reflect.DeepEqual with slices.Equal/maps.Equal, which is much faster. Clean up some unnecessary helper functions. Change-Id: I9b94bd43886302b9b327539ab065a435ce0d75d9 GitHub-Last-Rev: b9ca21f165bcc5e45733e6a511a2344b1aa4a281 GitHub-Pull-Request: golang/go#67607 Reviewed-on: https://go-review.googlesource.com/c/go/+/587936 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Auto-Submit: Ian Lance Taylor Reviewed-by: Joseph Tsai --- src/archive/tar/reader_test.go | 8 +++++--- src/archive/tar/tar_test.go | 12 +++++------- src/archive/tar/writer_test.go | 4 ++-- src/archive/zip/reader_test.go | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/archive/tar/reader_test.go b/src/archive/tar/reader_test.go index 7e0462c3f883f6..cc49fe3641c45b 100644 --- a/src/archive/tar/reader_test.go +++ b/src/archive/tar/reader_test.go @@ -11,10 +11,12 @@ import ( "errors" "fmt" "io" + "maps" "math" "os" "path" "reflect" + "slices" "strconv" "strings" "testing" @@ -1017,7 +1019,7 @@ func TestParsePAX(t *testing.T) { for i, v := range vectors { r := strings.NewReader(v.in) got, err := parsePAX(r) - if !reflect.DeepEqual(got, v.want) && !(len(got) == 0 && len(v.want) == 0) { + if !maps.Equal(got, v.want) && !(len(got) == 0 && len(v.want) == 0) { t.Errorf("test %d, parsePAX():\ngot %v\nwant %v", i, got, v.want) } if ok := err == nil; ok != v.ok { @@ -1134,7 +1136,7 @@ func TestReadOldGNUSparseMap(t *testing.T) { v.input = v.input[copy(blk[:], v.input):] tr := Reader{r: bytes.NewReader(v.input)} got, err := tr.readOldGNUSparseMap(&hdr, &blk) - if !equalSparseEntries(got, v.wantMap) { + if !slices.Equal(got, v.wantMap) { t.Errorf("test %d, readOldGNUSparseMap(): got %v, want %v", i, got, v.wantMap) } if err != v.wantErr { @@ -1325,7 +1327,7 @@ func TestReadGNUSparsePAXHeaders(t *testing.T) { r := strings.NewReader(v.inputData + "#") // Add canary byte tr := Reader{curr: ®FileReader{r, int64(r.Len())}} got, err := tr.readGNUSparsePAXHeaders(&hdr) - if !equalSparseEntries(got, v.wantMap) { + if !slices.Equal(got, v.wantMap) { t.Errorf("test %d, readGNUSparsePAXHeaders(): got %v, want %v", i, got, v.wantMap) } if err != v.wantErr { diff --git a/src/archive/tar/tar_test.go b/src/archive/tar/tar_test.go index 7398e7602ab4d8..372f1737ed5f73 100644 --- a/src/archive/tar/tar_test.go +++ b/src/archive/tar/tar_test.go @@ -11,11 +11,13 @@ import ( "internal/testenv" "io" "io/fs" + "maps" "math" "os" "path" "path/filepath" "reflect" + "slices" "strings" "testing" "time" @@ -98,10 +100,6 @@ func (f *testFile) Seek(pos int64, whence int) (int64, error) { return f.pos, nil } -func equalSparseEntries(x, y []sparseEntry) bool { - return (len(x) == 0 && len(y) == 0) || reflect.DeepEqual(x, y) -} - func TestSparseEntries(t *testing.T) { vectors := []struct { in []sparseEntry @@ -198,11 +196,11 @@ func TestSparseEntries(t *testing.T) { continue } gotAligned := alignSparseEntries(append([]sparseEntry{}, v.in...), v.size) - if !equalSparseEntries(gotAligned, v.wantAligned) { + if !slices.Equal(gotAligned, v.wantAligned) { t.Errorf("test %d, alignSparseEntries():\ngot %v\nwant %v", i, gotAligned, v.wantAligned) } gotInverted := invertSparseEntries(append([]sparseEntry{}, v.in...), v.size) - if !equalSparseEntries(gotInverted, v.wantInverted) { + if !slices.Equal(gotInverted, v.wantInverted) { t.Errorf("test %d, inverseSparseEntries():\ngot %v\nwant %v", i, gotInverted, v.wantInverted) } } @@ -744,7 +742,7 @@ func TestHeaderAllowedFormats(t *testing.T) { if formats != v.formats { t.Errorf("test %d, allowedFormats(): got %v, want %v", i, formats, v.formats) } - if formats&FormatPAX > 0 && !reflect.DeepEqual(paxHdrs, v.paxHdrs) && !(len(paxHdrs) == 0 && len(v.paxHdrs) == 0) { + if formats&FormatPAX > 0 && !maps.Equal(paxHdrs, v.paxHdrs) && !(len(paxHdrs) == 0 && len(v.paxHdrs) == 0) { t.Errorf("test %d, allowedFormats():\ngot %v\nwant %s", i, paxHdrs, v.paxHdrs) } if (formats != FormatUnknown) && (err != nil) { diff --git a/src/archive/tar/writer_test.go b/src/archive/tar/writer_test.go index 9c3bcea7675016..9542abe3e765e9 100644 --- a/src/archive/tar/writer_test.go +++ b/src/archive/tar/writer_test.go @@ -10,9 +10,9 @@ import ( "errors" "io" "io/fs" + "maps" "os" "path" - "reflect" "slices" "strings" "testing" @@ -702,7 +702,7 @@ func TestPaxXattrs(t *testing.T) { if err != nil { t.Fatal(err) } - if !reflect.DeepEqual(hdr.Xattrs, xattrs) { + if !maps.Equal(hdr.Xattrs, xattrs) { t.Fatalf("xattrs did not survive round trip: got %+v, want %+v", hdr.Xattrs, xattrs) } diff --git a/src/archive/zip/reader_test.go b/src/archive/zip/reader_test.go index 00e5ec3e058610..bfa35c992a924c 100644 --- a/src/archive/zip/reader_test.go +++ b/src/archive/zip/reader_test.go @@ -13,8 +13,8 @@ import ( "io/fs" "os" "path/filepath" - "reflect" "regexp" + "slices" "strings" "testing" "testing/fstest" @@ -1274,7 +1274,7 @@ func TestFSWalk(t *testing.T) { } else if !test.wantErr && sawErr { t.Error("unexpected error") } - if test.want != nil && !reflect.DeepEqual(files, test.want) { + if test.want != nil && !slices.Equal(files, test.want) { t.Errorf("got %v want %v", files, test.want) } }) @@ -1580,7 +1580,7 @@ func TestCVE202141772(t *testing.T) { t.Errorf("Opening %q with fs.FS API succeeded", f.Name) } } - if !reflect.DeepEqual(names, entryNames) { + if !slices.Equal(names, entryNames) { t.Errorf("Unexpected file entries: %q", names) } if _, err := r.Open(""); err == nil { @@ -1693,7 +1693,7 @@ func TestInsecurePaths(t *testing.T) { for _, f := range zr.File { gotPaths = append(gotPaths, f.Name) } - if !reflect.DeepEqual(gotPaths, []string{path}) { + if !slices.Equal(gotPaths, []string{path}) { t.Errorf("NewReader for archive with file %q: got files %q", path, gotPaths) continue } @@ -1718,7 +1718,7 @@ func TestDisableInsecurePathCheck(t *testing.T) { for _, f := range zr.File { gotPaths = append(gotPaths, f.Name) } - if want := []string{name}; !reflect.DeepEqual(gotPaths, want) { + if want := []string{name}; !slices.Equal(gotPaths, want) { t.Errorf("NewReader with zipinsecurepath=1: got files %q, want %q", gotPaths, want) } } From e76353d5a923dbc5e22713267104b56a2c856302 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 22 May 2024 21:46:29 +0000 Subject: [PATCH 055/866] runtime: allow the tracer to be reentrant This change allows the tracer to be reentrant by restructuring the internals such that writing an event is atomic with respect to stack growth. Essentially, a core set of functions that are involved in acquiring a trace buffer and writing to it are all marked nosplit. Stack growth is currently the only hidden place where the tracer may be accidentally reentrant, preventing the tracer from being used everywhere. It already lacks write barriers, lacks allocations, and is non-preemptible. This change thus makes the tracer fully reentrant, since the only reentry case it needs to handle is stack growth. Since the invariants needed to attain this are subtle, this change also extends the debugTraceReentrancy debug mode to check these invariants as well. Specifically, the invariants are checked by setting the throwsplit flag. A side benefit of this change is it simplifies the trace event writing API a good bit: there's no need to actually thread the event writer through things, and most callsites look a bit simpler. Change-Id: I7c329fb7a6cb936bd363c44cf882ea0a925132f3 Reviewed-on: https://go-review.googlesource.com/c/go/+/587599 Reviewed-by: Austin Clements LUCI-TryBot-Result: Go LUCI --- src/runtime/mheap.go | 6 +- src/runtime/stack.go | 4 +- src/runtime/traceallocfree.go | 18 ++-- src/runtime/tracebuf.go | 109 +++++++++++++++++++++- src/runtime/traceevent.go | 50 ++-------- src/runtime/traceexp.go | 2 + src/runtime/traceruntime.go | 168 ++++++++++++++-------------------- src/runtime/tracestatus.go | 25 +++++ src/runtime/tracetime.go | 3 +- 9 files changed, 227 insertions(+), 158 deletions(-) diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index e4b1fa0574d0e9..afbd20c7bf4e14 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -1368,7 +1368,7 @@ HaveSpan: // Trace the span alloc. if traceAllocFreeEnabled() { - trace := traceTryAcquire() + trace := traceAcquire() if trace.ok() { trace.SpanAlloc(s) traceRelease(trace) @@ -1556,7 +1556,7 @@ func (h *mheap) freeSpan(s *mspan) { systemstack(func() { // Trace the span free. if traceAllocFreeEnabled() { - trace := traceTryAcquire() + trace := traceAcquire() if trace.ok() { trace.SpanFree(s) traceRelease(trace) @@ -1595,7 +1595,7 @@ func (h *mheap) freeSpan(s *mspan) { func (h *mheap) freeManual(s *mspan, typ spanAllocType) { // Trace the span free. if traceAllocFreeEnabled() { - trace := traceTryAcquire() + trace := traceAcquire() if trace.ok() { trace.SpanFree(s) traceRelease(trace) diff --git a/src/runtime/stack.go b/src/runtime/stack.go index bdfeb21c18e62f..76a14b2498318b 100644 --- a/src/runtime/stack.go +++ b/src/runtime/stack.go @@ -416,7 +416,7 @@ func stackalloc(n uint32) stack { } if traceAllocFreeEnabled() { - trace := traceTryAcquire() + trace := traceAcquire() if trace.ok() { trace.GoroutineStackAlloc(uintptr(v), uintptr(n)) traceRelease(trace) @@ -466,7 +466,7 @@ func stackfree(stk stack) { return } if traceAllocFreeEnabled() { - trace := traceTryAcquire() + trace := traceAcquire() if trace.ok() { trace.GoroutineStackFree(uintptr(v)) traceRelease(trace) diff --git a/src/runtime/traceallocfree.go b/src/runtime/traceallocfree.go index 985d90eacb933d..84188a55c45bad 100644 --- a/src/runtime/traceallocfree.go +++ b/src/runtime/traceallocfree.go @@ -89,17 +89,17 @@ func traceSpanTypeAndClass(s *mspan) traceArg { // SpanExists records an event indicating that the span exists. func (tl traceLocker) SpanExists(s *mspan) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvSpan, traceSpanID(s), traceArg(s.npages), traceSpanTypeAndClass(s)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvSpan, traceSpanID(s), traceArg(s.npages), traceSpanTypeAndClass(s)) } // SpanAlloc records an event indicating that the span has just been allocated. func (tl traceLocker) SpanAlloc(s *mspan) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvSpanAlloc, traceSpanID(s), traceArg(s.npages), traceSpanTypeAndClass(s)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvSpanAlloc, traceSpanID(s), traceArg(s.npages), traceSpanTypeAndClass(s)) } // SpanFree records an event indicating that the span is about to be freed. func (tl traceLocker) SpanFree(s *mspan) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvSpanFree, traceSpanID(s)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvSpanFree, traceSpanID(s)) } // traceSpanID creates a trace ID for the span s for the trace. @@ -111,19 +111,19 @@ func traceSpanID(s *mspan) traceArg { // The type is optional, and the size of the slot occupied the object is inferred from the // span containing it. func (tl traceLocker) HeapObjectExists(addr uintptr, typ *abi.Type) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvHeapObject, traceHeapObjectID(addr), tl.rtype(typ)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvHeapObject, traceHeapObjectID(addr), tl.rtype(typ)) } // HeapObjectAlloc records that an object was newly allocated at addr with the provided type. // The type is optional, and the size of the slot occupied the object is inferred from the // span containing it. func (tl traceLocker) HeapObjectAlloc(addr uintptr, typ *abi.Type) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvHeapObjectAlloc, traceHeapObjectID(addr), tl.rtype(typ)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvHeapObjectAlloc, traceHeapObjectID(addr), tl.rtype(typ)) } // HeapObjectFree records that an object at addr is about to be freed. func (tl traceLocker) HeapObjectFree(addr uintptr) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvHeapObjectFree, traceHeapObjectID(addr)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvHeapObjectFree, traceHeapObjectID(addr)) } // traceHeapObjectID creates a trace ID for a heap object at address addr. @@ -134,18 +134,18 @@ func traceHeapObjectID(addr uintptr) traceArg { // GoroutineStackExists records that a goroutine stack already exists at address base with the provided size. func (tl traceLocker) GoroutineStackExists(base, size uintptr) { order := traceCompressStackSize(size) - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoroutineStack, traceGoroutineStackID(base), order) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoroutineStack, traceGoroutineStackID(base), order) } // GoroutineStackAlloc records that a goroutine stack was newly allocated at address base with the provided size.. func (tl traceLocker) GoroutineStackAlloc(base, size uintptr) { order := traceCompressStackSize(size) - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoroutineStackAlloc, traceGoroutineStackID(base), order) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoroutineStackAlloc, traceGoroutineStackID(base), order) } // GoroutineStackFree records that a goroutine stack at address base is about to be freed. func (tl traceLocker) GoroutineStackFree(base uintptr) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoroutineStackFree, traceGoroutineStackID(base)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoroutineStackFree, traceGoroutineStackID(base)) } // traceGoroutineStackID creates a trace ID for the goroutine stack from its base address. diff --git a/src/runtime/tracebuf.go b/src/runtime/tracebuf.go index 908a63d273958d..be6e3e582bd572 100644 --- a/src/runtime/tracebuf.go +++ b/src/runtime/tracebuf.go @@ -27,8 +27,26 @@ type traceWriter struct { *traceBuf } -// write returns an a traceWriter that writes into the current M's stream. +// writer returns an a traceWriter that writes into the current M's stream. +// +// Once this is called, the caller must guard against stack growth until +// end is called on it. Therefore, it's highly recommended to use this +// API in a "fluent" style, for example tl.writer().event(...).end(). +// Better yet, callers just looking to write events should use eventWriter +// when possible, which is a much safer wrapper around this function. +// +// nosplit to allow for safe reentrant tracing from stack growth paths. +// +//go:nosplit func (tl traceLocker) writer() traceWriter { + if debugTraceReentrancy { + // Checks that the invariants of this function are being upheld. + gp := getg() + if gp == gp.m.curg { + tl.mp.trace.oldthrowsplit = gp.throwsplit + gp.throwsplit = true + } + } return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2]} } @@ -38,12 +56,49 @@ func (tl traceLocker) writer() traceWriter { // - Another traceLocker is held. // - trace.gen is prevented from advancing. // +// This does not have the same stack growth restrictions as traceLocker.writer. +// // buf may be nil. func unsafeTraceWriter(gen uintptr, buf *traceBuf) traceWriter { return traceWriter{traceLocker: traceLocker{gen: gen}, traceBuf: buf} } +// event writes out the bytes of an event into the event stream. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit +func (w traceWriter) event(ev traceEv, args ...traceArg) traceWriter { + // N.B. Everything in this call must be nosplit to maintain + // the stack growth related invariants for writing events. + + // Make sure we have room. + w, _ = w.ensure(1 + (len(args)+1)*traceBytesPerNumber) + + // Compute the timestamp diff that we'll put in the trace. + ts := traceClockNow() + if ts <= w.traceBuf.lastTime { + ts = w.traceBuf.lastTime + 1 + } + tsDiff := uint64(ts - w.traceBuf.lastTime) + w.traceBuf.lastTime = ts + + // Write out event. + w.byte(byte(ev)) + w.varint(tsDiff) + for _, arg := range args { + w.varint(uint64(arg)) + } + return w +} + // end writes the buffer back into the m. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) end() { if w.mp == nil { // Tolerate a nil mp. It makes code that creates traceWriters directly @@ -51,11 +106,24 @@ func (w traceWriter) end() { return } w.mp.trace.buf[w.gen%2] = w.traceBuf + if debugTraceReentrancy { + // The writer is no longer live, we can drop throwsplit (if it wasn't + // already set upon entry). + gp := getg() + if gp == gp.m.curg { + gp.throwsplit = w.mp.trace.oldthrowsplit + } + } } // ensure makes sure that at least maxSize bytes are available to write. // // Returns whether the buffer was flushed. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) ensure(maxSize int) (traceWriter, bool) { refill := w.traceBuf == nil || !w.available(maxSize) if refill { @@ -65,6 +133,11 @@ func (w traceWriter) ensure(maxSize int) (traceWriter, bool) { } // flush puts w.traceBuf on the queue of full buffers. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) flush() traceWriter { systemstack(func() { lock(&trace.lock) @@ -80,6 +153,11 @@ func (w traceWriter) flush() traceWriter { // refill puts w.traceBuf on the queue of full buffers and refresh's w's buffer. // // exp indicates whether the refilled batch should be EvExperimentalBatch. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) refill(exp traceExperiment) traceWriter { systemstack(func() { lock(&trace.lock) @@ -179,12 +257,22 @@ type traceBuf struct { } // byte appends v to buf. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (buf *traceBuf) byte(v byte) { buf.arr[buf.pos] = v buf.pos++ } // varint appends v to buf in little-endian-base-128 encoding. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (buf *traceBuf) varint(v uint64) { pos := buf.pos arr := buf.arr[pos : pos+traceBytesPerNumber] @@ -203,6 +291,11 @@ func (buf *traceBuf) varint(v uint64) { // varintReserve reserves enough space in buf to hold any varint. // // Space reserved this way can be filled in with the varintAt method. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (buf *traceBuf) varintReserve() int { p := buf.pos buf.pos += traceBytesPerNumber @@ -210,10 +303,19 @@ func (buf *traceBuf) varintReserve() int { } // stringData appends s's data directly to buf. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (buf *traceBuf) stringData(s string) { buf.pos += copy(buf.arr[buf.pos:], s) } +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (buf *traceBuf) available(size int) bool { return len(buf.arr)-buf.pos >= size } @@ -222,6 +324,11 @@ func (buf *traceBuf) available(size int) bool { // consumes traceBytesPerNumber bytes. This is intended for when the caller // needs to reserve space for a varint but can't populate it until later. // Use varintReserve to reserve this space. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (buf *traceBuf) varintAt(pos int, v uint64) { for i := 0; i < traceBytesPerNumber; i++ { if i < traceBytesPerNumber-1 { diff --git a/src/runtime/traceevent.go b/src/runtime/traceevent.go index 9adbc52fd3dea8..51d23688425ff3 100644 --- a/src/runtime/traceevent.go +++ b/src/runtime/traceevent.go @@ -102,7 +102,7 @@ type traceArg uint64 // See the comment on traceWriter about style for more details as to why // this type and its methods are structured the way they are. type traceEventWriter struct { - w traceWriter + tl traceLocker } // eventWriter creates a new traceEventWriter. It is the main entrypoint for writing trace events. @@ -119,54 +119,18 @@ type traceEventWriter struct { // // In this case, the default status should be traceGoBad or traceProcBad to help identify bugs sooner. func (tl traceLocker) eventWriter(goStatus traceGoStatus, procStatus traceProcStatus) traceEventWriter { - w := tl.writer() if pp := tl.mp.p.ptr(); pp != nil && !pp.trace.statusWasTraced(tl.gen) && pp.trace.acquireStatus(tl.gen) { - w = w.writeProcStatus(uint64(pp.id), procStatus, pp.trace.inSweep) + tl.writer().writeProcStatus(uint64(pp.id), procStatus, pp.trace.inSweep).end() } if gp := tl.mp.curg; gp != nil && !gp.trace.statusWasTraced(tl.gen) && gp.trace.acquireStatus(tl.gen) { - w = w.writeGoStatus(uint64(gp.goid), int64(tl.mp.procid), goStatus, gp.inMarkAssist, 0 /* no stack */) + tl.writer().writeGoStatus(uint64(gp.goid), int64(tl.mp.procid), goStatus, gp.inMarkAssist, 0 /* no stack */).end() } - return traceEventWriter{w} + return traceEventWriter{tl} } -// commit writes out a trace event and calls end. It's a helper to make the -// common case of writing out a single event less error-prone. -func (e traceEventWriter) commit(ev traceEv, args ...traceArg) { - e = e.write(ev, args...) - e.end() -} - -// write writes an event into the trace. -func (e traceEventWriter) write(ev traceEv, args ...traceArg) traceEventWriter { - e.w = e.w.event(ev, args...) - return e -} - -// end finishes writing to the trace. The traceEventWriter must not be used after this call. -func (e traceEventWriter) end() { - e.w.end() -} - -// traceEventWrite is the part of traceEvent that actually writes the event. -func (w traceWriter) event(ev traceEv, args ...traceArg) traceWriter { - // Make sure we have room. - w, _ = w.ensure(1 + (len(args)+1)*traceBytesPerNumber) - - // Compute the timestamp diff that we'll put in the trace. - ts := traceClockNow() - if ts <= w.traceBuf.lastTime { - ts = w.traceBuf.lastTime + 1 - } - tsDiff := uint64(ts - w.traceBuf.lastTime) - w.traceBuf.lastTime = ts - - // Write out event. - w.byte(byte(ev)) - w.varint(tsDiff) - for _, arg := range args { - w.varint(uint64(arg)) - } - return w +// event writes out a trace event. +func (e traceEventWriter) event(ev traceEv, args ...traceArg) { + e.tl.writer().event(ev, args...).end() } // stack takes a stack trace skipping the provided number of frames. diff --git a/src/runtime/traceexp.go b/src/runtime/traceexp.go index 9fc85df5a8e99a..1438191a9137c1 100644 --- a/src/runtime/traceexp.go +++ b/src/runtime/traceexp.go @@ -18,6 +18,8 @@ type traceExpWriter struct { // - Another traceLocker is held. // - trace.gen is prevented from advancing. // +// This does not have the same stack growth restrictions as traceLocker.writer. +// // buf may be nil. func unsafeTraceExpWriter(gen uintptr, buf *traceBuf, exp traceExperiment) traceExpWriter { return traceExpWriter{traceWriter{traceLocker: traceLocker{gen: gen}, traceBuf: buf}, exp} diff --git a/src/runtime/traceruntime.go b/src/runtime/traceruntime.go index 195b3e1c37f984..5808fb005037f1 100644 --- a/src/runtime/traceruntime.go +++ b/src/runtime/traceruntime.go @@ -24,9 +24,11 @@ func (s *gTraceState) reset() { // mTraceState is per-M state for the tracer. type mTraceState struct { - seqlock atomic.Uintptr // seqlock indicating that this M is writing to a trace buffer. - buf [2]*traceBuf // Per-M traceBuf for writing. Indexed by trace.gen%2. - link *m // Snapshot of alllink or freelink. + seqlock atomic.Uintptr // seqlock indicating that this M is writing to a trace buffer. + buf [2]*traceBuf // Per-M traceBuf for writing. Indexed by trace.gen%2. + link *m // Snapshot of alllink or freelink. + reentered uint32 // Whether we've reentered tracing from within tracing. + oldthrowsplit bool // gp.throwsplit upon calling traceLocker.writer. For debugging. } // pTraceState is per-P state for the tracer. @@ -184,22 +186,6 @@ func traceAcquire() traceLocker { return traceAcquireEnabled() } -// traceTryAcquire is like traceAcquire, but may return an invalid traceLocker even -// if tracing is enabled. For example, it will return !ok if traceAcquire is being -// called with an active traceAcquire on the M (reentrant locking). This exists for -// optimistically emitting events in the few contexts where tracing is now allowed. -// -// nosplit for alignment with traceTryAcquire, so it can be used in the -// same contexts. -// -//go:nosplit -func traceTryAcquire() traceLocker { - if !traceEnabled() { - return traceLocker{} - } - return traceTryAcquireEnabled() -} - // traceAcquireEnabled is the traceEnabled path for traceAcquire. It's explicitly // broken out to make traceAcquire inlineable to keep the overhead of the tracer // when it's disabled low. @@ -216,6 +202,14 @@ func traceAcquireEnabled() traceLocker { // Prevent preemption. mp := acquirem() + // Check if we're already tracing. It's safe to be reentrant in general, + // because this function (and the invariants of traceLocker.writer) ensure + // that it is. + if mp.trace.seqlock.Load()%2 == 1 { + mp.trace.reentered++ + return traceLocker{mp, trace.gen.Load()} + } + // Acquire the trace seqlock. This prevents traceAdvance from moving forward // until all Ms are observed to be outside of their seqlock critical section. // @@ -224,7 +218,7 @@ func traceAcquireEnabled() traceLocker { // doing. seq := mp.trace.seqlock.Add(1) if debugTraceReentrancy && seq%2 != 1 { - throw("bad use of trace.seqlock or tracer is reentrant") + throw("bad use of trace.seqlock") } // N.B. This load of gen appears redundant with the one in traceEnabled. @@ -244,26 +238,6 @@ func traceAcquireEnabled() traceLocker { return traceLocker{mp, gen} } -// traceTryAcquireEnabled is like traceAcquireEnabled but may return an invalid -// traceLocker under some conditions. See traceTryAcquire for more details. -// -// nosplit for alignment with traceAcquireEnabled, so it can be used in the -// same contexts. -// -//go:nosplit -func traceTryAcquireEnabled() traceLocker { - // Any time we acquire a traceLocker, we may flush a trace buffer. But - // buffer flushes are rare. Record the lock edge even if it doesn't happen - // this time. - lockRankMayTraceFlush() - - // Check if we're already locked. If so, return an invalid traceLocker. - if getg().m.trace.seqlock.Load()%2 == 1 { - return traceLocker{} - } - return traceAcquireEnabled() -} - // ok returns true if the traceLocker is valid (i.e. tracing is enabled). // // nosplit because it's called on the syscall path when stack movement is forbidden. @@ -279,10 +253,14 @@ func (tl traceLocker) ok() bool { // //go:nosplit func traceRelease(tl traceLocker) { - seq := tl.mp.trace.seqlock.Add(1) - if debugTraceReentrancy && seq%2 != 0 { - print("runtime: seq=", seq, "\n") - throw("bad use of trace.seqlock") + if tl.mp.trace.reentered > 0 { + tl.mp.trace.reentered-- + } else { + seq := tl.mp.trace.seqlock.Add(1) + if debugTraceReentrancy && seq%2 != 0 { + print("runtime: seq=", seq, "\n") + throw("bad use of trace.seqlock") + } } releasem(tl.mp) } @@ -301,7 +279,7 @@ func traceExitedSyscall() { // Gomaxprocs emits a ProcsChange event. func (tl traceLocker) Gomaxprocs(procs int32) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvProcsChange, traceArg(procs), tl.stack(1)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvProcsChange, traceArg(procs), tl.stack(1)) } // ProcStart traces a ProcStart event. @@ -312,14 +290,14 @@ func (tl traceLocker) ProcStart() { // Procs are typically started within the scheduler when there is no user goroutine. If there is a user goroutine, // it must be in _Gsyscall because the only time a goroutine is allowed to have its Proc moved around from under it // is during a syscall. - tl.eventWriter(traceGoSyscall, traceProcIdle).commit(traceEvProcStart, traceArg(pp.id), pp.trace.nextSeq(tl.gen)) + tl.eventWriter(traceGoSyscall, traceProcIdle).event(traceEvProcStart, traceArg(pp.id), pp.trace.nextSeq(tl.gen)) } // ProcStop traces a ProcStop event. func (tl traceLocker) ProcStop(pp *p) { // The only time a goroutine is allowed to have its Proc moved around // from under it is during a syscall. - tl.eventWriter(traceGoSyscall, traceProcRunning).commit(traceEvProcStop) + tl.eventWriter(traceGoSyscall, traceProcRunning).event(traceEvProcStop) } // GCActive traces a GCActive event. @@ -327,7 +305,7 @@ func (tl traceLocker) ProcStop(pp *p) { // Must be emitted by an actively running goroutine on an active P. This restriction can be changed // easily and only depends on where it's currently called. func (tl traceLocker) GCActive() { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCActive, traceArg(trace.seqGC)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCActive, traceArg(trace.seqGC)) // N.B. Only one GC can be running at a time, so this is naturally // serialized by the caller. trace.seqGC++ @@ -338,7 +316,7 @@ func (tl traceLocker) GCActive() { // Must be emitted by an actively running goroutine on an active P. This restriction can be changed // easily and only depends on where it's currently called. func (tl traceLocker) GCStart() { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCBegin, traceArg(trace.seqGC), tl.stack(3)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCBegin, traceArg(trace.seqGC), tl.stack(3)) // N.B. Only one GC can be running at a time, so this is naturally // serialized by the caller. trace.seqGC++ @@ -349,7 +327,7 @@ func (tl traceLocker) GCStart() { // Must be emitted by an actively running goroutine on an active P. This restriction can be changed // easily and only depends on where it's currently called. func (tl traceLocker) GCDone() { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCEnd, traceArg(trace.seqGC)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCEnd, traceArg(trace.seqGC)) // N.B. Only one GC can be running at a time, so this is naturally // serialized by the caller. trace.seqGC++ @@ -359,14 +337,14 @@ func (tl traceLocker) GCDone() { func (tl traceLocker) STWStart(reason stwReason) { // Although the current P may be in _Pgcstop here, we model the P as running during the STW. This deviates from the // runtime's state tracking, but it's more accurate and doesn't result in any loss of information. - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvSTWBegin, tl.string(reason.String()), tl.stack(2)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvSTWBegin, tl.string(reason.String()), tl.stack(2)) } // STWDone traces a STWEnd event. func (tl traceLocker) STWDone() { // Although the current P may be in _Pgcstop here, we model the P as running during the STW. This deviates from the // runtime's state tracking, but it's more accurate and doesn't result in any loss of information. - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvSTWEnd) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvSTWEnd) } // GCSweepStart prepares to trace a sweep loop. This does not @@ -398,7 +376,7 @@ func (tl traceLocker) GCSweepSpan(bytesSwept uintptr) { pp := tl.mp.p.ptr() if pp.trace.maySweep { if pp.trace.swept == 0 { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCSweepBegin, tl.stack(1)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCSweepBegin, tl.stack(1)) pp.trace.inSweep = true } pp.trace.swept += bytesSwept @@ -416,7 +394,7 @@ func (tl traceLocker) GCSweepDone() { throw("missing traceGCSweepStart") } if pp.trace.inSweep { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCSweepEnd, traceArg(pp.trace.swept), traceArg(pp.trace.reclaimed)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCSweepEnd, traceArg(pp.trace.swept), traceArg(pp.trace.reclaimed)) pp.trace.inSweep = false } pp.trace.maySweep = false @@ -424,12 +402,12 @@ func (tl traceLocker) GCSweepDone() { // GCMarkAssistStart emits a MarkAssistBegin event. func (tl traceLocker) GCMarkAssistStart() { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCMarkAssistBegin, tl.stack(1)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCMarkAssistBegin, tl.stack(1)) } // GCMarkAssistDone emits a MarkAssistEnd event. func (tl traceLocker) GCMarkAssistDone() { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGCMarkAssistEnd) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGCMarkAssistEnd) } // GoCreate emits a GoCreate event. @@ -439,7 +417,7 @@ func (tl traceLocker) GoCreate(newg *g, pc uintptr, blocked bool) { if blocked { ev = traceEvGoCreateBlocked } - tl.eventWriter(traceGoRunning, traceProcRunning).commit(ev, traceArg(newg.goid), tl.startPC(pc), tl.stack(2)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(ev, traceArg(newg.goid), tl.startPC(pc), tl.stack(2)) } // GoStart emits a GoStart event. @@ -449,18 +427,17 @@ func (tl traceLocker) GoStart() { gp := getg().m.curg pp := gp.m.p w := tl.eventWriter(traceGoRunnable, traceProcRunning) - w = w.write(traceEvGoStart, traceArg(gp.goid), gp.trace.nextSeq(tl.gen)) + w.event(traceEvGoStart, traceArg(gp.goid), gp.trace.nextSeq(tl.gen)) if pp.ptr().gcMarkWorkerMode != gcMarkWorkerNotWorker { - w = w.write(traceEvGoLabel, trace.markWorkerLabels[tl.gen%2][pp.ptr().gcMarkWorkerMode]) + w.event(traceEvGoLabel, trace.markWorkerLabels[tl.gen%2][pp.ptr().gcMarkWorkerMode]) } - w.end() } // GoEnd emits a GoDestroy event. // // TODO(mknyszek): Rename this to GoDestroy. func (tl traceLocker) GoEnd() { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoDestroy) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoDestroy) } // GoSched emits a GoStop event with a GoSched reason. @@ -475,7 +452,7 @@ func (tl traceLocker) GoPreempt() { // GoStop emits a GoStop event with the provided reason. func (tl traceLocker) GoStop(reason traceGoStopReason) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoStop, traceArg(trace.goStopReasons[tl.gen%2][reason]), tl.stack(1)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoStop, traceArg(trace.goStopReasons[tl.gen%2][reason]), tl.stack(1)) } // GoPark emits a GoBlock event with the provided reason. @@ -483,44 +460,38 @@ func (tl traceLocker) GoStop(reason traceGoStopReason) { // TODO(mknyszek): Replace traceBlockReason with waitReason. It's silly // that we have both, and waitReason is way more descriptive. func (tl traceLocker) GoPark(reason traceBlockReason, skip int) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoBlock, traceArg(trace.goBlockReasons[tl.gen%2][reason]), tl.stack(skip)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoBlock, traceArg(trace.goBlockReasons[tl.gen%2][reason]), tl.stack(skip)) } // GoUnpark emits a GoUnblock event. func (tl traceLocker) GoUnpark(gp *g, skip int) { // Emit a GoWaiting status if necessary for the unblocked goroutine. - w := tl.eventWriter(traceGoRunning, traceProcRunning) - // Careful: don't use the event writer. We never want status or in-progress events - // to trigger more in-progress events. - w.w = emitUnblockStatus(w.w, gp, tl.gen) - w.commit(traceEvGoUnblock, traceArg(gp.goid), gp.trace.nextSeq(tl.gen), tl.stack(skip)) + tl.emitUnblockStatus(gp, tl.gen) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoUnblock, traceArg(gp.goid), gp.trace.nextSeq(tl.gen), tl.stack(skip)) } // GoCoroswitch emits a GoSwitch event. If destroy is true, the calling goroutine // is simultaneously being destroyed. func (tl traceLocker) GoSwitch(nextg *g, destroy bool) { // Emit a GoWaiting status if necessary for the unblocked goroutine. + tl.emitUnblockStatus(nextg, tl.gen) w := tl.eventWriter(traceGoRunning, traceProcRunning) - // Careful: don't use the event writer. We never want status or in-progress events - // to trigger more in-progress events. - w.w = emitUnblockStatus(w.w, nextg, tl.gen) ev := traceEvGoSwitch if destroy { ev = traceEvGoSwitchDestroy } - w.commit(ev, traceArg(nextg.goid), nextg.trace.nextSeq(tl.gen)) + w.event(ev, traceArg(nextg.goid), nextg.trace.nextSeq(tl.gen)) } // emitUnblockStatus emits a GoStatus GoWaiting event for a goroutine about to be // unblocked to the trace writer. -func emitUnblockStatus(w traceWriter, gp *g, gen uintptr) traceWriter { +func (tl traceLocker) emitUnblockStatus(gp *g, gen uintptr) { if !gp.trace.statusWasTraced(gen) && gp.trace.acquireStatus(gen) { // TODO(go.dev/issue/65634): Although it would be nice to add a stack trace here of gp, // we cannot safely do so. gp is in _Gwaiting and so we don't have ownership of its stack. // We can fix this by acquiring the goroutine's scan bit. - w = w.writeGoStatus(gp.goid, -1, traceGoWaiting, gp.inMarkAssist, 0) + tl.writer().writeGoStatus(gp.goid, -1, traceGoWaiting, gp.inMarkAssist, 0).end() } - return w } // GoSysCall emits a GoSyscallBegin event. @@ -530,7 +501,7 @@ func (tl traceLocker) GoSysCall() { // Scribble down the M that the P is currently attached to. pp := tl.mp.p.ptr() pp.trace.mSyscallID = int64(tl.mp.procid) - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvGoSyscallBegin, pp.trace.nextSeq(tl.gen), tl.stack(1)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoSyscallBegin, pp.trace.nextSeq(tl.gen), tl.stack(1)) } // GoSysExit emits a GoSyscallEnd event, possibly along with a GoSyscallBlocked event @@ -551,7 +522,7 @@ func (tl traceLocker) GoSysExit(lostP bool) { } else { tl.mp.p.ptr().trace.mSyscallID = -1 } - tl.eventWriter(traceGoSyscall, procStatus).commit(ev) + tl.eventWriter(traceGoSyscall, procStatus).event(ev) } // ProcSteal indicates that our current M stole a P from another M. @@ -564,6 +535,17 @@ func (tl traceLocker) ProcSteal(pp *p, inSyscall bool) { mStolenFrom := pp.trace.mSyscallID pp.trace.mSyscallID = -1 + // Emit the status of the P we're stealing. We may be just about to do this when creating the event + // writer but it's not guaranteed, even if inSyscall is true. Although it might seem like from a + // syscall context we're always stealing a P for ourselves, we may have not wired it up yet (so + // it wouldn't be visible to eventWriter) or we may not even intend to wire it up to ourselves + // at all (e.g. entersyscall_gcwait). + if !pp.trace.statusWasTraced(tl.gen) && pp.trace.acquireStatus(tl.gen) { + // Careful: don't use the event writer. We never want status or in-progress events + // to trigger more in-progress events. + tl.writer().writeProcStatus(uint64(pp.id), traceProcSyscallAbandoned, pp.trace.inSweep).end() + } + // The status of the proc and goroutine, if we need to emit one here, is not evident from the // context of just emitting this event alone. There are two cases. Either we're trying to steal // the P just to get its attention (e.g. STW or sysmon retake) or we're trying to steal a P for @@ -576,24 +558,12 @@ func (tl traceLocker) ProcSteal(pp *p, inSyscall bool) { goStatus = traceGoSyscall procStatus = traceProcSyscallAbandoned } - w := tl.eventWriter(goStatus, procStatus) - - // Emit the status of the P we're stealing. We may have *just* done this when creating the event - // writer but it's not guaranteed, even if inSyscall is true. Although it might seem like from a - // syscall context we're always stealing a P for ourselves, we may have not wired it up yet (so - // it wouldn't be visible to eventWriter) or we may not even intend to wire it up to ourselves - // at all (e.g. entersyscall_gcwait). - if !pp.trace.statusWasTraced(tl.gen) && pp.trace.acquireStatus(tl.gen) { - // Careful: don't use the event writer. We never want status or in-progress events - // to trigger more in-progress events. - w.w = w.w.writeProcStatus(uint64(pp.id), traceProcSyscallAbandoned, pp.trace.inSweep) - } - w.commit(traceEvProcSteal, traceArg(pp.id), pp.trace.nextSeq(tl.gen), traceArg(mStolenFrom)) + tl.eventWriter(goStatus, procStatus).event(traceEvProcSteal, traceArg(pp.id), pp.trace.nextSeq(tl.gen), traceArg(mStolenFrom)) } // HeapAlloc emits a HeapAlloc event. func (tl traceLocker) HeapAlloc(live uint64) { - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvHeapAlloc, traceArg(live)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvHeapAlloc, traceArg(live)) } // HeapGoal reads the current heap goal and emits a HeapGoal event. @@ -603,7 +573,7 @@ func (tl traceLocker) HeapGoal() { // Heap-based triggering is disabled. heapGoal = 0 } - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvHeapGoal, traceArg(heapGoal)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvHeapGoal, traceArg(heapGoal)) } // GoCreateSyscall indicates that a goroutine has transitioned from dead to GoSyscall. @@ -616,7 +586,7 @@ func (tl traceLocker) GoCreateSyscall(gp *g) { // N.B. We should never trace a status for this goroutine (which we're currently running on), // since we want this to appear like goroutine creation. gp.trace.setStatusTraced(tl.gen) - tl.eventWriter(traceGoBad, traceProcBad).commit(traceEvGoCreateSyscall, traceArg(gp.goid)) + tl.eventWriter(traceGoBad, traceProcBad).event(traceEvGoCreateSyscall, traceArg(gp.goid)) } // GoDestroySyscall indicates that a goroutine has transitioned from GoSyscall to dead. @@ -628,7 +598,7 @@ func (tl traceLocker) GoCreateSyscall(gp *g) { func (tl traceLocker) GoDestroySyscall() { // N.B. If we trace a status here, we must never have a P, and we must be on a goroutine // that is in the syscall state. - tl.eventWriter(traceGoSyscall, traceProcBad).commit(traceEvGoDestroySyscall) + tl.eventWriter(traceGoSyscall, traceProcBad).event(traceEvGoDestroySyscall) } // To access runtime functions from runtime/trace. @@ -643,7 +613,7 @@ func trace_userTaskCreate(id, parentID uint64, taskType string) { // Need to do this check because the caller won't have it. return } - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvUserTaskBegin, traceArg(id), traceArg(parentID), tl.string(taskType), tl.stack(3)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvUserTaskBegin, traceArg(id), traceArg(parentID), tl.string(taskType), tl.stack(3)) traceRelease(tl) } @@ -656,7 +626,7 @@ func trace_userTaskEnd(id uint64) { // Need to do this check because the caller won't have it. return } - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvUserTaskEnd, traceArg(id), tl.stack(2)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvUserTaskEnd, traceArg(id), tl.stack(2)) traceRelease(tl) } @@ -681,7 +651,7 @@ func trace_userRegion(id, mode uint64, name string) { default: return } - tl.eventWriter(traceGoRunning, traceProcRunning).commit(ev, traceArg(id), tl.string(name), tl.stack(3)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(ev, traceArg(id), tl.string(name), tl.stack(3)) traceRelease(tl) } @@ -694,7 +664,7 @@ func trace_userLog(id uint64, category, message string) { // Need to do this check because the caller won't have it. return } - tl.eventWriter(traceGoRunning, traceProcRunning).commit(traceEvUserLog, traceArg(id), tl.string(category), tl.uniqueString(message), tl.stack(3)) + tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvUserLog, traceArg(id), tl.string(category), tl.uniqueString(message), tl.stack(3)) traceRelease(tl) } @@ -716,7 +686,7 @@ func traceThreadDestroy(mp *m) { // as well. seq := mp.trace.seqlock.Add(1) if debugTraceReentrancy && seq%2 != 1 { - throw("bad use of trace.seqlock or tracer is reentrant") + throw("bad use of trace.seqlock") } systemstack(func() { lock(&trace.lock) diff --git a/src/runtime/tracestatus.go b/src/runtime/tracestatus.go index 77ccdd139841a7..425ac37ba04ee0 100644 --- a/src/runtime/tracestatus.go +++ b/src/runtime/tracestatus.go @@ -46,6 +46,11 @@ const ( ) // writeGoStatus emits a GoStatus event as well as any active ranges on the goroutine. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) writeGoStatus(goid uint64, mid int64, status traceGoStatus, markAssist bool, stackID uint64) traceWriter { // The status should never be bad. Some invariant must have been violated. if status == traceGoBad { @@ -71,6 +76,11 @@ func (w traceWriter) writeGoStatus(goid uint64, mid int64, status traceGoStatus, // // The caller must fully own pp and it must be prevented from transitioning (e.g. this can be // called by a forEachP callback or from a STW). +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) writeProcStatusForP(pp *p, inSTW bool) traceWriter { if !pp.trace.acquireStatus(w.gen) { return w @@ -106,6 +116,11 @@ func (w traceWriter) writeProcStatusForP(pp *p, inSTW bool) traceWriter { // // The caller must have taken ownership of a P's status writing, and the P must be // prevented from transitioning. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (w traceWriter) writeProcStatus(pid uint64, status traceProcStatus, inSweep bool) traceWriter { // The status should never be bad. Some invariant must have been violated. if status == traceProcBad { @@ -126,6 +141,11 @@ func (w traceWriter) writeProcStatus(pid uint64, status traceProcStatus, inSweep // goStatusToTraceGoStatus translates the internal status to tracGoStatus. // // status must not be _Gdead or any status whose name has the suffix "_unused." +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func goStatusToTraceGoStatus(status uint32, wr waitReason) traceGoStatus { // N.B. Ignore the _Gscan bit. We don't model it in the tracer. var tgs traceGoStatus @@ -177,6 +197,11 @@ type traceSchedResourceState struct { } // acquireStatus acquires the right to emit a Status event for the scheduling resource. +// +// nosplit because it's part of writing an event for an M, which must not +// have any stack growth. +// +//go:nosplit func (r *traceSchedResourceState) acquireStatus(gen uintptr) bool { if !r.statusTraced[gen%3].CompareAndSwap(0, 1) { return false diff --git a/src/runtime/tracetime.go b/src/runtime/tracetime.go index 571012413fffd4..d5ee2b078fc022 100644 --- a/src/runtime/tracetime.go +++ b/src/runtime/tracetime.go @@ -47,7 +47,8 @@ type traceTime uint64 // the timestamp from is specific to tracing, and shouldn't be mixed with other // clock sources. // -// nosplit because it's called from exitsyscall, which is nosplit. +// nosplit because it's called from exitsyscall and various trace writing functions, +// which are nosplit. // // traceClockNow is called by golang.org/x/exp/trace using linkname. // From d69a0883d4c99958d13b14fc02a805e1bc634631 Mon Sep 17 00:00:00 2001 From: Chen Su Date: Thu, 25 Jul 2024 07:30:24 +0000 Subject: [PATCH 056/866] encoding/gob: fix package doc typo for wireType Change-Id: Ib93f2b565e5271dfa3c3ca5d040ef24269c47cf8 GitHub-Last-Rev: 3f1da518a404f5459e38f34427ae9177fe68f51e GitHub-Pull-Request: golang/go#68584 Reviewed-on: https://go-review.googlesource.com/c/go/+/601036 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov --- src/encoding/gob/doc.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/encoding/gob/doc.go b/src/encoding/gob/doc.go index 30e7978b7c9d0d..0866ba1544666d 100644 --- a/src/encoding/gob/doc.go +++ b/src/encoding/gob/doc.go @@ -193,14 +193,13 @@ pair (-type id, encoded-type) where encoded-type is the gob encoding of a wireTy description, constructed from these types: type wireType struct { - ArrayT *ArrayType - SliceT *SliceType - StructT *StructType - MapT *MapType + ArrayT *arrayType + SliceT *sliceType + StructT *structType + MapT *mapType GobEncoderT *gobEncoderType BinaryMarshalerT *gobEncoderType TextMarshalerT *gobEncoderType - } type arrayType struct { CommonType @@ -217,7 +216,7 @@ description, constructed from these types: } type structType struct { CommonType - Field []*fieldType // the fields of the struct. + Field []fieldType // the fields of the struct. } type fieldType struct { Name string // the name of the field. From d8c7230c97ca5639389917cc235175bfe2dc50ab Mon Sep 17 00:00:00 2001 From: HeGaoYuan Date: Thu, 25 Jul 2024 22:21:52 +0000 Subject: [PATCH 057/866] cmd/compile/internal/types: fix typo in comment Change-Id: Iacf22578338c8aa99587826a8342e1da6dc166a6 GitHub-Last-Rev: cdb3235e8ca932776ddf803621ac203c493bc873 GitHub-Pull-Request: golang/go#46598 Reviewed-on: https://go-review.googlesource.com/c/go/+/325510 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/types/type.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index 41fdefe830a352..693bd9385a0de2 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -392,7 +392,7 @@ type ChanArgs struct { T *Type // reference to a chan type whose elements need a width check } -// // FuncArgs contains Type fields specific to TFUNCARGS types. +// FuncArgs contains Type fields specific to TFUNCARGS types. type FuncArgs struct { T *Type // reference to a func type whose elements need a width check } From 9b4b4ae5859393993ec1a2359666a9c49d0d5b73 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 25 Jul 2024 17:17:44 +0700 Subject: [PATCH 058/866] types2, go/types: fix instantiation of named type with generic alias The typechecker is assuming that alias instances cannot be reached from a named type. However, when type parameters on aliases are permited, it can happen. This CL changes the typechecker to propagate the correct named instance is being expanded. Updates #46477 Fixes #68580 Change-Id: Id0879021f4640c0fefe277701d5096c649413811 Reviewed-on: https://go-review.googlesource.com/c/go/+/601115 Auto-Submit: Robert Griesemer Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer Auto-Submit: Cuong Manh Le --- src/cmd/compile/internal/types2/alias.go | 4 ++-- src/cmd/compile/internal/types2/instantiate.go | 8 +++++--- src/cmd/compile/internal/types2/subst.go | 2 +- src/go/types/alias.go | 4 ++-- src/go/types/instantiate.go | 8 +++++--- src/go/types/subst.go | 2 +- test/fixedbugs/issue68580.go | 15 +++++++++++++++ 7 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 test/fixedbugs/issue68580.go diff --git a/src/cmd/compile/internal/types2/alias.go b/src/cmd/compile/internal/types2/alias.go index 5148d5db034142..07f35b1854acaf 100644 --- a/src/cmd/compile/internal/types2/alias.go +++ b/src/cmd/compile/internal/types2/alias.go @@ -134,10 +134,10 @@ func (check *Checker) newAlias(obj *TypeName, rhs Type) *Alias { // newAliasInstance creates a new alias instance for the given origin and type // arguments, recording pos as the position of its synthetic object (for error // reporting). -func (check *Checker) newAliasInstance(pos syntax.Pos, orig *Alias, targs []Type, ctxt *Context) *Alias { +func (check *Checker) newAliasInstance(pos syntax.Pos, orig *Alias, targs []Type, expanding *Named, ctxt *Context) *Alias { assert(len(targs) > 0) obj := NewTypeName(pos, orig.obj.pkg, orig.obj.name, nil) - rhs := check.subst(pos, orig.fromRHS, makeSubstMap(orig.TypeParams().list(), targs), nil, ctxt) + rhs := check.subst(pos, orig.fromRHS, makeSubstMap(orig.TypeParams().list(), targs), expanding, ctxt) res := check.newAlias(obj, rhs) res.orig = orig res.tparams = orig.tparams diff --git a/src/cmd/compile/internal/types2/instantiate.go b/src/cmd/compile/internal/types2/instantiate.go index 72227ab12256dd..308d1f550ad4fa 100644 --- a/src/cmd/compile/internal/types2/instantiate.go +++ b/src/cmd/compile/internal/types2/instantiate.go @@ -11,6 +11,7 @@ import ( "cmd/compile/internal/syntax" "errors" "fmt" + "internal/buildcfg" . "internal/types/errors" ) @@ -126,8 +127,9 @@ func (check *Checker) instance(pos syntax.Pos, orig genericType, targs []Type, e res = check.newNamedInstance(pos, orig, targs, expanding) // substituted lazily case *Alias: - // TODO(gri) is this correct? - assert(expanding == nil) // Alias instances cannot be reached from Named types + if !buildcfg.Experiment.AliasTypeParams { + assert(expanding == nil) // Alias instances cannot be reached from Named types + } tparams := orig.TypeParams() // TODO(gri) investigate if this is needed (type argument and parameter count seem to be correct here) @@ -138,7 +140,7 @@ func (check *Checker) instance(pos syntax.Pos, orig genericType, targs []Type, e return orig // nothing to do (minor optimization) } - return check.newAliasInstance(pos, orig, targs, ctxt) + return check.newAliasInstance(pos, orig, targs, expanding, ctxt) case *Signature: assert(expanding == nil) // function instances cannot be reached from Named types diff --git a/src/cmd/compile/internal/types2/subst.go b/src/cmd/compile/internal/types2/subst.go index 650ae846a61e85..7c4cd732501e43 100644 --- a/src/cmd/compile/internal/types2/subst.go +++ b/src/cmd/compile/internal/types2/subst.go @@ -115,7 +115,7 @@ func (subst *subster) typ(typ Type) Type { // that has a type argument for it. targs, updated := subst.typeList(t.TypeArgs().list()) if updated { - return subst.check.newAliasInstance(subst.pos, t.orig, targs, subst.ctxt) + return subst.check.newAliasInstance(subst.pos, t.orig, targs, subst.expanding, subst.ctxt) } case *Array: diff --git a/src/go/types/alias.go b/src/go/types/alias.go index af43471a324176..7adb3deb58bbc7 100644 --- a/src/go/types/alias.go +++ b/src/go/types/alias.go @@ -137,10 +137,10 @@ func (check *Checker) newAlias(obj *TypeName, rhs Type) *Alias { // newAliasInstance creates a new alias instance for the given origin and type // arguments, recording pos as the position of its synthetic object (for error // reporting). -func (check *Checker) newAliasInstance(pos token.Pos, orig *Alias, targs []Type, ctxt *Context) *Alias { +func (check *Checker) newAliasInstance(pos token.Pos, orig *Alias, targs []Type, expanding *Named, ctxt *Context) *Alias { assert(len(targs) > 0) obj := NewTypeName(pos, orig.obj.pkg, orig.obj.name, nil) - rhs := check.subst(pos, orig.fromRHS, makeSubstMap(orig.TypeParams().list(), targs), nil, ctxt) + rhs := check.subst(pos, orig.fromRHS, makeSubstMap(orig.TypeParams().list(), targs), expanding, ctxt) res := check.newAlias(obj, rhs) res.orig = orig res.tparams = orig.tparams diff --git a/src/go/types/instantiate.go b/src/go/types/instantiate.go index 7bec790b5586ad..0435f2bf261647 100644 --- a/src/go/types/instantiate.go +++ b/src/go/types/instantiate.go @@ -14,6 +14,7 @@ import ( "errors" "fmt" "go/token" + "internal/buildcfg" . "internal/types/errors" ) @@ -129,8 +130,9 @@ func (check *Checker) instance(pos token.Pos, orig genericType, targs []Type, ex res = check.newNamedInstance(pos, orig, targs, expanding) // substituted lazily case *Alias: - // TODO(gri) is this correct? - assert(expanding == nil) // Alias instances cannot be reached from Named types + if !buildcfg.Experiment.AliasTypeParams { + assert(expanding == nil) // Alias instances cannot be reached from Named types + } tparams := orig.TypeParams() // TODO(gri) investigate if this is needed (type argument and parameter count seem to be correct here) @@ -141,7 +143,7 @@ func (check *Checker) instance(pos token.Pos, orig genericType, targs []Type, ex return orig // nothing to do (minor optimization) } - return check.newAliasInstance(pos, orig, targs, ctxt) + return check.newAliasInstance(pos, orig, targs, expanding, ctxt) case *Signature: assert(expanding == nil) // function instances cannot be reached from Named types diff --git a/src/go/types/subst.go b/src/go/types/subst.go index 5ad2ff61eb1d30..6be106d3aa99d6 100644 --- a/src/go/types/subst.go +++ b/src/go/types/subst.go @@ -118,7 +118,7 @@ func (subst *subster) typ(typ Type) Type { // that has a type argument for it. targs, updated := subst.typeList(t.TypeArgs().list()) if updated { - return subst.check.newAliasInstance(subst.pos, t.orig, targs, subst.ctxt) + return subst.check.newAliasInstance(subst.pos, t.orig, targs, subst.expanding, subst.ctxt) } case *Array: diff --git a/test/fixedbugs/issue68580.go b/test/fixedbugs/issue68580.go new file mode 100644 index 00000000000000..b60a7447aaa77b --- /dev/null +++ b/test/fixedbugs/issue68580.go @@ -0,0 +1,15 @@ +// compile -goexperiment aliastypeparams + +// Copyright 2024 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 main + +type A[P any] = struct{ _ P } + +type N[P any] A[P] + +func f[P any](N[P]) {} + +var _ = f[int] From eb3dd019ed6a1f15585852274ccfd4d021d35957 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 17 Nov 2023 18:23:21 +0700 Subject: [PATCH 059/866] cmd/compile: cleanup test code pre Unified IR Change-Id: Ibb9a7ce37ac28873aa720a64d1f89cb87fc5fa27 Reviewed-on: https://go-review.googlesource.com/c/go/+/543315 Reviewed-by: Robert Griesemer Reviewed-by: Matthew Dempsky Auto-Submit: Robert Griesemer Reviewed-by: Tim King LUCI-TryBot-Result: Go LUCI Auto-Submit: Cuong Manh Le --- .../internal/importer/gcimporter_test.go | 17 ++--------------- .../compile/internal/ssa/debug_lines_test.go | 12 ++---------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/src/cmd/compile/internal/importer/gcimporter_test.go b/src/cmd/compile/internal/importer/gcimporter_test.go index 7fe4445dad7638..9235e4bb95612a 100644 --- a/src/cmd/compile/internal/importer/gcimporter_test.go +++ b/src/cmd/compile/internal/importer/gcimporter_test.go @@ -90,15 +90,9 @@ func TestImportTestdata(t *testing.T) { testenv.MustHaveGoBuild(t) testfiles := map[string][]string{ - "exports.go": {"go/ast", "go/token"}, + "exports.go": {"go/ast"}, "generics.go": nil, } - if true /* was goexperiment.Unified */ { - // TODO(mdempsky): Fix test below to flatten the transitive - // Package.Imports graph. Unified IR is more precise about - // recreating the package import graph. - testfiles["exports.go"] = []string{"go/ast"} - } for testfile, wantImports := range testfiles { tmpdir := mktmpdir(t) @@ -336,14 +330,7 @@ func verifyInterfaceMethodRecvs(t *testing.T, named *types2.Named, level int) { // The unified IR importer always sets interface method receiver // parameters to point to the Interface type, rather than the Named. // See #49906. - // - // TODO(mdempsky): This is only true for the types2 importer. For - // the go/types importer, we duplicate the Interface and rewrite its - // receiver methods to match historical behavior. - var want types2.Type = named - if true /* was goexperiment.Unified */ { - want = iface - } + var want types2.Type = iface // check explicitly declared methods for i := 0; i < iface.NumExplicitMethods(); i++ { diff --git a/src/cmd/compile/internal/ssa/debug_lines_test.go b/src/cmd/compile/internal/ssa/debug_lines_test.go index af9e2a34cfc787..043439302ee89e 100644 --- a/src/cmd/compile/internal/ssa/debug_lines_test.go +++ b/src/cmd/compile/internal/ssa/debug_lines_test.go @@ -82,11 +82,7 @@ func TestDebugLinesPushback(t *testing.T) { t.Skip("skipped for many architectures") case "arm64", "amd64": // register ABI - fn := "(*List[go.shape.int_0]).PushBack" - if true /* was buildcfg.Experiment.Unified */ { - // Unified mangles differently - fn = "(*List[go.shape.int]).PushBack" - } + fn := "(*List[go.shape.int]).PushBack" testDebugLines(t, "-N -l", "pushback.go", fn, []int{17, 18, 19, 20, 21, 22, 24}, true) } } @@ -99,11 +95,7 @@ func TestDebugLinesConvert(t *testing.T) { t.Skip("skipped for many architectures") case "arm64", "amd64": // register ABI - fn := "G[go.shape.int_0]" - if true /* was buildcfg.Experiment.Unified */ { - // Unified mangles differently - fn = "G[go.shape.int]" - } + fn := "G[go.shape.int]" testDebugLines(t, "-N -l", "convertline.go", fn, []int{9, 10, 11}, true) } } From deed521ea3daf42cb9c8388ae48fe57f17e252f5 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 24 Jul 2024 15:22:09 +0700 Subject: [PATCH 060/866] go/internal/gcimporter: cleanup test code pre Unified IR Same as CL 543315 did for cmd/compile. Change-Id: I56a200664c92fe34d4b78c2dbf6ed56288e89e0e Reviewed-on: https://go-review.googlesource.com/c/go/+/600675 Auto-Submit: Cuong Manh Le Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer --- src/go/internal/gcimporter/gcimporter_test.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/go/internal/gcimporter/gcimporter_test.go b/src/go/internal/gcimporter/gcimporter_test.go index 07ab13518681ce..fad8625d98fe63 100644 --- a/src/go/internal/gcimporter/gcimporter_test.go +++ b/src/go/internal/gcimporter/gcimporter_test.go @@ -99,12 +99,7 @@ func TestImportTestdata(t *testing.T) { "exports.go": {"go/ast", "go/token"}, "generics.go": nil, } - if true /* was goexperiment.Unified */ { - // TODO(mdempsky): Fix test below to flatten the transitive - // Package.Imports graph. Unified IR is more precise about - // recreating the package import graph. - testfiles["exports.go"] = []string{"go/ast"} - } + testfiles["exports.go"] = []string{"go/ast"} for testfile, wantImports := range testfiles { tmpdir := mktmpdir(t) From b6efbd4efc733f3f398929e2722accfdb2653032 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 26 Jul 2024 18:09:57 +0700 Subject: [PATCH 061/866] cmd/compile, reflect: treat abi.NoEscape as cheap call The abi.NoEscape function is introduced to replace all usages of noescape wrapper in the standard library. However, the last usage in reflect package is still present, because the inlining test failed if abi.NoEscape were used. The reason is that reflect.noescape is treated as a cheap call, while abi.NoEscape is not. By treating abi.NoEscape a cheap call, the last usage of noescape in reflect package can now be removed. Change-Id: I798079780129221a5a26cbcb18c95ee30855b784 Reviewed-on: https://go-review.googlesource.com/c/go/+/601275 Reviewed-by: Dmitri Shuralyov Auto-Submit: Cuong Manh Le LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/cmd/compile/internal/inline/inl.go | 4 ++-- src/reflect/value.go | 12 +----------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 017bc25e460e89..513d2678f66595 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -460,10 +460,10 @@ opSwitch: case "panicrangestate": cheap = true } - // Special case for reflect.noescape. It does just type + // Special case for internal/abi.NoEscape. It does just type // conversions to appease the escape analysis, and doesn't // generate code. - if types.ReflectSymName(name.Sym()) == "noescape" { + if s := name.Sym(); s.Name == "NoEscape" && s.Pkg.Path == "internal/abi" { cheap = true } } diff --git a/src/reflect/value.go b/src/reflect/value.go index 0854371ed413db..8df7d13114d3de 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -2677,7 +2677,7 @@ func (v Value) TrySend(x Value) bool { // Type returns v's type. func (v Value) Type() Type { if v.flag != 0 && v.flag&flagMethod == 0 { - return (*rtype)(noescape(unsafe.Pointer(v.typ_))) // inline of toRType(v.typ()), for own inlining in inline test + return (*rtype)(abi.NoEscape(unsafe.Pointer(v.typ_))) // inline of toRType(v.typ()), for own inlining in inline test } return v.typeSlow() } @@ -4018,13 +4018,3 @@ func contentEscapes(x unsafe.Pointer) { escapes(*(*any)(x)) // the dereference may not always be safe, but never executed } } - -// This is just a wrapper around abi.NoEscape. The inlining heuristics are -// finnicky and for whatever reason treat the local call to noescape as much -// lower cost with respect to the inliner budget. (That is, replacing calls to -// noescape with abi.NoEscape will cause inlining tests to fail.) -// -//go:nosplit -func noescape(p unsafe.Pointer) unsafe.Pointer { - return abi.NoEscape(p) -} From d5976429812c5e3df0027cc44268cb624146904c Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Fri, 26 Jul 2024 12:49:29 -0400 Subject: [PATCH 062/866] net: unskip TestUDPZeroBytePayload on Darwin From information we have available in the issue, this test was flaky on OS X 10.10 but not newer. By now macOS 11 is the minimum required version, and 1000 local runs of the test passed, so try to unskip as the next step. For #29225. Change-Id: I18a24459f01e53ef9de05b50d1dd8786d0683107 Cq-Include-Trybots: luci.golang.try:gotip-darwin-amd64_11,gotip-darwin-amd64_14 Reviewed-on: https://go-review.googlesource.com/c/go/+/601395 Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/net/udpsock_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/udpsock_test.go b/src/net/udpsock_test.go index 8a21aa737055ed..43065d06dab771 100644 --- a/src/net/udpsock_test.go +++ b/src/net/udpsock_test.go @@ -340,7 +340,7 @@ func TestUDPZeroBytePayload(t *testing.T) { switch runtime.GOOS { case "plan9": t.Skipf("not supported on %s", runtime.GOOS) - case "darwin", "ios": + case "ios": testenv.SkipFlaky(t, 29225) } if !testableNetwork("udp") { From fac95803ebe49b95fe93f9f8034bace69cb60119 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sat, 27 Jul 2024 00:09:04 +0700 Subject: [PATCH 063/866] runtime: remove darwin-amd64-10_14 builder check By now macOS 11 is the minimum required version. Updates #43926 Change-Id: I13716e2e521c26bd9997f0ea1b717cf72ab7e47c Reviewed-on: https://go-review.googlesource.com/c/go/+/601276 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Auto-Submit: Cuong Manh Le Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov --- src/runtime/crash_cgo_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/runtime/crash_cgo_test.go b/src/runtime/crash_cgo_test.go index f9fbdd8f1cd14f..57111c9aefa3be 100644 --- a/src/runtime/crash_cgo_test.go +++ b/src/runtime/crash_cgo_test.go @@ -65,10 +65,6 @@ func TestCgoCallbackGC(t *testing.T) { t.Skip("too slow for mips64x builders") } } - if testenv.Builder() == "darwin-amd64-10_14" { - // TODO(#23011): When the 10.14 builders are gone, remove this skip. - t.Skip("skipping due to platform bug on macOS 10.14; see https://golang.org/issue/43926") - } got := runTestProg(t, "testprogcgo", "CgoCallbackGC") want := "OK\n" if got != want { From 2a3e2e9b297955d811f62b1861906a831951ef0e Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Mon, 24 Jun 2024 12:19:00 -0400 Subject: [PATCH 064/866] runtime: allow experimental trace batches to be reused Currently, we can only cache regular trace event buffers on each M. As a result, calling unsafeTraceExpWriter will, in effect, always return a new trace batch, with all of the overhead that entails. This extends that cache to support buffers for experimental trace data. This way, unsafeTraceExpWriter can return a partially used buffer, which the caller can continue to extend. This gives the caller control over when these buffers get flushed and reuses all of the existing trace buffering mechanism. This also has the consequence of simplifying the experimental batch infrastructure a bit. Now, traceWriter needs to know the experiment ID anyway, which means there's no need for a separate traceExpWriter type. Change-Id: Idc2100176c5d02e0fbb229dc8aa4aea2b1cf5231 Reviewed-on: https://go-review.googlesource.com/c/go/+/594595 Auto-Submit: Austin Clements Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/runtime/trace.go | 9 +++++---- src/runtime/tracebuf.go | 20 +++++++------------- src/runtime/traceexp.go | 33 +++++++++++++-------------------- src/runtime/traceruntime.go | 22 ++++++++++++---------- src/runtime/tracetype.go | 2 +- 5 files changed, 38 insertions(+), 48 deletions(-) diff --git a/src/runtime/trace.go b/src/runtime/trace.go index adf7b0951dce4b..bc2978bb4bf6ef 100644 --- a/src/runtime/trace.go +++ b/src/runtime/trace.go @@ -524,10 +524,11 @@ func traceAdvance(stopTrace bool) { // trace.lock needed for traceBufFlush, but also to synchronize // with traceThreadDestroy, which flushes both buffers unconditionally. lock(&trace.lock) - bufp := &mp.trace.buf[gen%2] - if *bufp != nil { - traceBufFlush(*bufp, gen) - *bufp = nil + for exp, buf := range mp.trace.buf[gen%2] { + if buf != nil { + traceBufFlush(buf, gen) + mp.trace.buf[gen%2][exp] = nil + } } unlock(&trace.lock) diff --git a/src/runtime/tracebuf.go b/src/runtime/tracebuf.go index be6e3e582bd572..0849a57809e2ca 100644 --- a/src/runtime/tracebuf.go +++ b/src/runtime/tracebuf.go @@ -24,6 +24,7 @@ const traceBytesPerNumber = 10 // we can change it if it's deemed too error-prone. type traceWriter struct { traceLocker + exp traceExperiment *traceBuf } @@ -47,7 +48,7 @@ func (tl traceLocker) writer() traceWriter { gp.throwsplit = true } } - return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2]} + return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2][traceNoExperiment]} } // unsafeTraceWriter produces a traceWriter that doesn't lock the trace. @@ -105,7 +106,7 @@ func (w traceWriter) end() { // less error-prone. return } - w.mp.trace.buf[w.gen%2] = w.traceBuf + w.mp.trace.buf[w.gen%2][w.exp] = w.traceBuf if debugTraceReentrancy { // The writer is no longer live, we can drop throwsplit (if it wasn't // already set upon entry). @@ -127,7 +128,7 @@ func (w traceWriter) end() { func (w traceWriter) ensure(maxSize int) (traceWriter, bool) { refill := w.traceBuf == nil || !w.available(maxSize) if refill { - w = w.refill(traceNoExperiment) + w = w.refill() } return w, refill } @@ -151,14 +152,7 @@ func (w traceWriter) flush() traceWriter { } // refill puts w.traceBuf on the queue of full buffers and refresh's w's buffer. -// -// exp indicates whether the refilled batch should be EvExperimentalBatch. -// -// nosplit because it's part of writing an event for an M, which must not -// have any stack growth. -// -//go:nosplit -func (w traceWriter) refill(exp traceExperiment) traceWriter { +func (w traceWriter) refill() traceWriter { systemstack(func() { lock(&trace.lock) if w.traceBuf != nil { @@ -192,11 +186,11 @@ func (w traceWriter) refill(exp traceExperiment) traceWriter { } // Write the buffer's header. - if exp == traceNoExperiment { + if w.exp == traceNoExperiment { w.byte(byte(traceEvEventBatch)) } else { w.byte(byte(traceEvExperimentalBatch)) - w.byte(byte(exp)) + w.byte(byte(w.exp)) } w.varint(uint64(w.gen)) w.varint(uint64(mID)) diff --git a/src/runtime/traceexp.go b/src/runtime/traceexp.go index 1438191a9137c1..13eec0c0b66706 100644 --- a/src/runtime/traceexp.go +++ b/src/runtime/traceexp.go @@ -4,15 +4,15 @@ package runtime -// traceExpWriter is a wrapper around trace writer that produces traceEvExperimentalBatch -// batches. This means that the data written to the writer need not conform to the standard -// trace format. -type traceExpWriter struct { - traceWriter - exp traceExperiment +// expWriter returns a traceWriter that writes into the current M's stream for +// the given experiment. +func (tl traceLocker) expWriter(exp traceExperiment) traceWriter { + return traceWriter{traceLocker: tl, traceBuf: tl.mp.trace.buf[tl.gen%2][exp], exp: exp} } -// unsafeTraceExpWriter produces a traceExpWriter that doesn't lock the trace. +// unsafeTraceExpWriter produces a traceWriter for experimental trace batches +// that doesn't lock the trace. Data written to experimental batches need not +// conform to the standard trace format. // // It should only be used in contexts where either: // - Another traceLocker is held. @@ -21,19 +21,8 @@ type traceExpWriter struct { // This does not have the same stack growth restrictions as traceLocker.writer. // // buf may be nil. -func unsafeTraceExpWriter(gen uintptr, buf *traceBuf, exp traceExperiment) traceExpWriter { - return traceExpWriter{traceWriter{traceLocker: traceLocker{gen: gen}, traceBuf: buf}, exp} -} - -// ensure makes sure that at least maxSize bytes are available to write. -// -// Returns whether the buffer was flushed. -func (w traceExpWriter) ensure(maxSize int) (traceExpWriter, bool) { - refill := w.traceBuf == nil || !w.available(maxSize) - if refill { - w.traceWriter = w.traceWriter.refill(w.exp) - } - return w, refill +func unsafeTraceExpWriter(gen uintptr, buf *traceBuf, exp traceExperiment) traceWriter { + return traceWriter{traceLocker: traceLocker{gen: gen}, traceBuf: buf, exp: exp} } // traceExperiment is an enumeration of the different kinds of experiments supported for tracing. @@ -45,6 +34,10 @@ const ( // traceExperimentAllocFree is an experiment to add alloc/free events to the trace. traceExperimentAllocFree + + // traceNumExperiments is the number of trace experiments (and 1 higher than + // the highest numbered experiment). + traceNumExperiments ) // Experimental events. diff --git a/src/runtime/traceruntime.go b/src/runtime/traceruntime.go index 5808fb005037f1..dfbf183de5ba7c 100644 --- a/src/runtime/traceruntime.go +++ b/src/runtime/traceruntime.go @@ -24,11 +24,11 @@ func (s *gTraceState) reset() { // mTraceState is per-M state for the tracer. type mTraceState struct { - seqlock atomic.Uintptr // seqlock indicating that this M is writing to a trace buffer. - buf [2]*traceBuf // Per-M traceBuf for writing. Indexed by trace.gen%2. - link *m // Snapshot of alllink or freelink. - reentered uint32 // Whether we've reentered tracing from within tracing. - oldthrowsplit bool // gp.throwsplit upon calling traceLocker.writer. For debugging. + seqlock atomic.Uintptr // seqlock indicating that this M is writing to a trace buffer. + buf [2][traceNumExperiments]*traceBuf // Per-M traceBuf for writing. Indexed by trace.gen%2. + link *m // Snapshot of alllink or freelink. + reentered uint32 // Whether we've reentered tracing from within tracing. + oldthrowsplit bool // gp.throwsplit upon calling traceLocker.writer. For debugging. } // pTraceState is per-P state for the tracer. @@ -691,11 +691,13 @@ func traceThreadDestroy(mp *m) { systemstack(func() { lock(&trace.lock) for i := range mp.trace.buf { - if mp.trace.buf[i] != nil { - // N.B. traceBufFlush accepts a generation, but it - // really just cares about gen%2. - traceBufFlush(mp.trace.buf[i], uintptr(i)) - mp.trace.buf[i] = nil + for exp, buf := range mp.trace.buf[i] { + if buf != nil { + // N.B. traceBufFlush accepts a generation, but it + // really just cares about gen%2. + traceBufFlush(buf, uintptr(i)) + mp.trace.buf[i][exp] = nil + } } } unlock(&trace.lock) diff --git a/src/runtime/tracetype.go b/src/runtime/tracetype.go index b27a6909168b65..d9e340f64a4cb1 100644 --- a/src/runtime/tracetype.go +++ b/src/runtime/tracetype.go @@ -43,7 +43,7 @@ func (t *traceTypeTable) dump(gen uintptr) { t.tab.reset() } -func dumpTypesRec(node *traceMapNode, w traceExpWriter) traceExpWriter { +func dumpTypesRec(node *traceMapNode, w traceWriter) traceWriter { typ := (*abi.Type)(*(*unsafe.Pointer)(unsafe.Pointer(&node.data[0]))) typName := toRType(typ).string() From dd005f43f136790c18cbf278863aa531a579040d Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 22 May 2024 21:47:35 -0700 Subject: [PATCH 065/866] go/types, types2: factor out list substitution code (cleanup) - Replace the various subst.XList methods with a generic function. - Rename comparable function to comparableType to avoid shadowing predeclared type comparable. - Rename substFunc/Var to cloneFunc/Var which is more accurate. Change-Id: I3243f2093e4c43a537766f47e3348402de517090 Reviewed-on: https://go-review.googlesource.com/c/go/+/587775 Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley --- src/cmd/compile/internal/types2/expr.go | 2 +- .../compile/internal/types2/instantiate.go | 4 +- src/cmd/compile/internal/types2/named.go | 4 +- src/cmd/compile/internal/types2/predicates.go | 8 +- src/cmd/compile/internal/types2/subst.go | 116 ++++++------------ src/cmd/compile/internal/types2/typeset.go | 4 +- src/go/types/expr.go | 2 +- src/go/types/instantiate.go | 4 +- src/go/types/named.go | 4 +- src/go/types/predicates.go | 8 +- src/go/types/subst.go | 116 ++++++------------ src/go/types/typeset.go | 4 +- 12 files changed, 94 insertions(+), 182 deletions(-) diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go index 92949a924dede1..b25cf89fb4efa8 100644 --- a/src/cmd/compile/internal/types2/expr.go +++ b/src/cmd/compile/internal/types2/expr.go @@ -601,7 +601,7 @@ func (check *Checker) incomparableCause(typ Type) string { } // see if we can extract a more specific error var cause string - comparable(typ, true, nil, func(format string, args ...interface{}) { + comparableType(typ, true, nil, func(format string, args ...interface{}) { cause = check.sprintf(format, args...) }) return cause diff --git a/src/cmd/compile/internal/types2/instantiate.go b/src/cmd/compile/internal/types2/instantiate.go index 308d1f550ad4fa..732d076ec3a4a8 100644 --- a/src/cmd/compile/internal/types2/instantiate.go +++ b/src/cmd/compile/internal/types2/instantiate.go @@ -288,12 +288,12 @@ func (check *Checker) implements(pos syntax.Pos, V, T Type, constraint bool, cau } // If T is comparable, V must be comparable. // If V is strictly comparable, we're done. - if comparable(V, false /* strict comparability */, nil, nil) { + if comparableType(V, false /* strict comparability */, nil, nil) { return true } // For constraint satisfaction, use dynamic (spec) comparability // so that ordinary, non-type parameter interfaces implement comparable. - if constraint && comparable(V, true /* spec comparability */, nil, nil) { + if constraint && comparableType(V, true /* spec comparability */, nil, nil) { // V is comparable if we are at Go 1.20 or higher. if check == nil || check.allowVersion(atPos(pos), go1_20) { // atPos needed so that go/types generate passes return true diff --git a/src/cmd/compile/internal/types2/named.go b/src/cmd/compile/internal/types2/named.go index 1859b27aa4edfb..241371b72fea4d 100644 --- a/src/cmd/compile/internal/types2/named.go +++ b/src/cmd/compile/internal/types2/named.go @@ -430,8 +430,8 @@ func (t *Named) expandMethod(i int) *Func { rtyp = t } - sig.recv = substVar(origSig.recv, rtyp) - return substFunc(origm, sig) + sig.recv = cloneVar(origSig.recv, rtyp) + return cloneFunc(origm, sig) } // SetUnderlying sets the underlying type and marks t as complete. diff --git a/src/cmd/compile/internal/types2/predicates.go b/src/cmd/compile/internal/types2/predicates.go index 6403be6bcb5719..155a70fb191284 100644 --- a/src/cmd/compile/internal/types2/predicates.go +++ b/src/cmd/compile/internal/types2/predicates.go @@ -146,12 +146,12 @@ func isGeneric(t Type) bool { // Comparable reports whether values of type T are comparable. func Comparable(T Type) bool { - return comparable(T, true, nil, nil) + return comparableType(T, true, nil, nil) } // If dynamic is set, non-type parameter interfaces are always comparable. // If reportf != nil, it may be used to report why T is not comparable. -func comparable(T Type, dynamic bool, seen map[Type]bool, reportf func(string, ...interface{})) bool { +func comparableType(T Type, dynamic bool, seen map[Type]bool, reportf func(string, ...interface{})) bool { if seen[T] { return true } @@ -169,7 +169,7 @@ func comparable(T Type, dynamic bool, seen map[Type]bool, reportf func(string, . return true case *Struct: for _, f := range t.fields { - if !comparable(f.typ, dynamic, seen, nil) { + if !comparableType(f.typ, dynamic, seen, nil) { if reportf != nil { reportf("struct containing %s cannot be compared", f.typ) } @@ -178,7 +178,7 @@ func comparable(T Type, dynamic bool, seen map[Type]bool, reportf func(string, . } return true case *Array: - if !comparable(t.elem, dynamic, seen, nil) { + if !comparableType(t.elem, dynamic, seen, nil) { if reportf != nil { reportf("%s cannot be compared", t) } diff --git a/src/cmd/compile/internal/types2/subst.go b/src/cmd/compile/internal/types2/subst.go index 7c4cd732501e43..70fb232aa1feac 100644 --- a/src/cmd/compile/internal/types2/subst.go +++ b/src/cmd/compile/internal/types2/subst.go @@ -113,8 +113,7 @@ func (subst *subster) typ(typ Type) Type { // For each (existing) type argument determine if it needs // to be substituted; i.e., if it is or contains a type parameter // that has a type argument for it. - targs, updated := subst.typeList(t.TypeArgs().list()) - if updated { + if targs := substList(t.TypeArgs().list(), subst.typ); targs != nil { return subst.check.newAliasInstance(subst.pos, t.orig, targs, subst.expanding, subst.ctxt) } @@ -131,7 +130,7 @@ func (subst *subster) typ(typ Type) Type { } case *Struct: - if fields, copied := subst.varList(t.fields); copied { + if fields := substList(t.fields, subst.var_); fields != nil { s := &Struct{fields: fields, tags: t.tags} s.markComplete() return s @@ -178,8 +177,7 @@ func (subst *subster) typ(typ Type) Type { } case *Union: - terms, copied := subst.termlist(t.terms) - if copied { + if terms := substList(t.terms, subst.term); terms != nil { // term list substitution may introduce duplicate terms (unlikely but possible). // This is ok; lazy type set computation will determine the actual type set // in normal form. @@ -187,9 +185,15 @@ func (subst *subster) typ(typ Type) Type { } case *Interface: - methods, mcopied := subst.funcList(t.methods) - embeddeds, ecopied := subst.typeList(t.embeddeds) - if mcopied || ecopied { + methods := substList(t.methods, subst.func_) + embeddeds := substList(t.embeddeds, subst.typ) + if methods != nil || embeddeds != nil { + if methods == nil { + methods = t.methods + } + if embeddeds == nil { + embeddeds = t.embeddeds + } iface := subst.check.newInterface() iface.embeddeds = embeddeds iface.embedPos = t.embedPos @@ -251,8 +255,7 @@ func (subst *subster) typ(typ Type) Type { // For each (existing) type argument determine if it needs // to be substituted; i.e., if it is or contains a type parameter // that has a type argument for it. - targs, updated := subst.typeList(t.TypeArgs().list()) - if updated { + if targs := substList(t.TypeArgs().list(), subst.typ); targs != nil { // Create a new instance and populate the context to avoid endless // recursion. The position used here is irrelevant because validation only // occurs on t (we don't call validType on named), but we use subst.pos to @@ -283,13 +286,13 @@ func (subst *subster) typOrNil(typ Type) Type { func (subst *subster) var_(v *Var) *Var { if v != nil { if typ := subst.typ(v.typ); typ != v.typ { - return substVar(v, typ) + return cloneVar(v, typ) } } return v } -func substVar(v *Var, typ Type) *Var { +func cloneVar(v *Var, typ Type) *Var { copy := *v copy.typ = typ copy.origin = v.Origin() @@ -298,26 +301,26 @@ func substVar(v *Var, typ Type) *Var { func (subst *subster) tuple(t *Tuple) *Tuple { if t != nil { - if vars, copied := subst.varList(t.vars); copied { + if vars := substList(t.vars, subst.var_); vars != nil { return &Tuple{vars: vars} } } return t } -func (subst *subster) varList(in []*Var) (out []*Var, copied bool) { - out = in - for i, v := range in { - if w := subst.var_(v); w != v { - if !copied { - // first variable that got substituted => allocate new out slice - // and copy all variables - new := make([]*Var, len(in)) - copy(new, out) - out = new - copied = true +// substList applies subst to each element of the incoming slice. +// If at least one element changes, the result is a new slice with +// all the (possibly updated) elements of the incoming slice; +// otherwise the result it nil. The incoming slice is unchanged. +func substList[T comparable](in []T, subst func(T) T) (out []T) { + for i, t := range in { + if u := subst(t); u != t { + if out == nil { + // lazily allocate a new slice on first substitution + out = make([]T, len(in)) + copy(out, in) } - out[i] = w + out[i] = u } } return @@ -326,71 +329,24 @@ func (subst *subster) varList(in []*Var) (out []*Var, copied bool) { func (subst *subster) func_(f *Func) *Func { if f != nil { if typ := subst.typ(f.typ); typ != f.typ { - return substFunc(f, typ) + return cloneFunc(f, typ) } } return f } -func substFunc(f *Func, typ Type) *Func { +func cloneFunc(f *Func, typ Type) *Func { copy := *f copy.typ = typ copy.origin = f.Origin() return © } -func (subst *subster) funcList(in []*Func) (out []*Func, copied bool) { - out = in - for i, f := range in { - if g := subst.func_(f); g != f { - if !copied { - // first function that got substituted => allocate new out slice - // and copy all functions - new := make([]*Func, len(in)) - copy(new, out) - out = new - copied = true - } - out[i] = g - } - } - return -} - -func (subst *subster) typeList(in []Type) (out []Type, copied bool) { - out = in - for i, t := range in { - if u := subst.typ(t); u != t { - if !copied { - // first function that got substituted => allocate new out slice - // and copy all functions - new := make([]Type, len(in)) - copy(new, out) - out = new - copied = true - } - out[i] = u - } - } - return -} - -func (subst *subster) termlist(in []*Term) (out []*Term, copied bool) { - out = in - for i, t := range in { - if u := subst.typ(t.typ); u != t.typ { - if !copied { - // first function that got substituted => allocate new out slice - // and copy all functions - new := make([]*Term, len(in)) - copy(new, out) - out = new - copied = true - } - out[i] = NewTerm(t.tilde, u) - } +func (subst *subster) term(t *Term) *Term { + if typ := subst.typ(t.typ); typ != t.typ { + return NewTerm(t.tilde, typ) } - return + return t } // replaceRecvType updates any function receivers that have type old to have @@ -413,8 +369,8 @@ func replaceRecvType(in []*Func, old, new Type) (out []*Func, copied bool) { copied = true } newsig := *sig - newsig.recv = substVar(sig.recv, new) - out[i] = substFunc(method, &newsig) + newsig.recv = cloneVar(sig.recv, new) + out[i] = cloneFunc(method, &newsig) } } return diff --git a/src/cmd/compile/internal/types2/typeset.go b/src/cmd/compile/internal/types2/typeset.go index 0457502e393942..9ea0a3e8f9ea28 100644 --- a/src/cmd/compile/internal/types2/typeset.go +++ b/src/cmd/compile/internal/types2/typeset.go @@ -44,7 +44,7 @@ func (s *_TypeSet) IsComparable(seen map[Type]bool) bool { return s.comparable } return s.is(func(t *term) bool { - return t != nil && comparable(t.typ, false, seen, nil) + return t != nil && comparableType(t.typ, false, seen, nil) }) } @@ -332,7 +332,7 @@ func intersectTermLists(xterms termlist, xcomp bool, yterms termlist, ycomp bool i := 0 for _, t := range terms { assert(t.typ != nil) - if comparable(t.typ, false /* strictly comparable */, nil, nil) { + if comparableType(t.typ, false /* strictly comparable */, nil, nil) { terms[i] = t i++ } diff --git a/src/go/types/expr.go b/src/go/types/expr.go index cf8ceddc9ace15..ac125c666b6c51 100644 --- a/src/go/types/expr.go +++ b/src/go/types/expr.go @@ -579,7 +579,7 @@ func (check *Checker) incomparableCause(typ Type) string { } // see if we can extract a more specific error var cause string - comparable(typ, true, nil, func(format string, args ...interface{}) { + comparableType(typ, true, nil, func(format string, args ...interface{}) { cause = check.sprintf(format, args...) }) return cause diff --git a/src/go/types/instantiate.go b/src/go/types/instantiate.go index 0435f2bf261647..cef495314e735d 100644 --- a/src/go/types/instantiate.go +++ b/src/go/types/instantiate.go @@ -291,12 +291,12 @@ func (check *Checker) implements(pos token.Pos, V, T Type, constraint bool, caus } // If T is comparable, V must be comparable. // If V is strictly comparable, we're done. - if comparable(V, false /* strict comparability */, nil, nil) { + if comparableType(V, false /* strict comparability */, nil, nil) { return true } // For constraint satisfaction, use dynamic (spec) comparability // so that ordinary, non-type parameter interfaces implement comparable. - if constraint && comparable(V, true /* spec comparability */, nil, nil) { + if constraint && comparableType(V, true /* spec comparability */, nil, nil) { // V is comparable if we are at Go 1.20 or higher. if check == nil || check.allowVersion(atPos(pos), go1_20) { // atPos needed so that go/types generate passes return true diff --git a/src/go/types/named.go b/src/go/types/named.go index b44fa9d788c345..316cdc9bba41ff 100644 --- a/src/go/types/named.go +++ b/src/go/types/named.go @@ -433,8 +433,8 @@ func (t *Named) expandMethod(i int) *Func { rtyp = t } - sig.recv = substVar(origSig.recv, rtyp) - return substFunc(origm, sig) + sig.recv = cloneVar(origSig.recv, rtyp) + return cloneFunc(origm, sig) } // SetUnderlying sets the underlying type and marks t as complete. diff --git a/src/go/types/predicates.go b/src/go/types/predicates.go index ba7901b3c31b17..4bfbdccc6f3b46 100644 --- a/src/go/types/predicates.go +++ b/src/go/types/predicates.go @@ -149,12 +149,12 @@ func isGeneric(t Type) bool { // Comparable reports whether values of type T are comparable. func Comparable(T Type) bool { - return comparable(T, true, nil, nil) + return comparableType(T, true, nil, nil) } // If dynamic is set, non-type parameter interfaces are always comparable. // If reportf != nil, it may be used to report why T is not comparable. -func comparable(T Type, dynamic bool, seen map[Type]bool, reportf func(string, ...interface{})) bool { +func comparableType(T Type, dynamic bool, seen map[Type]bool, reportf func(string, ...interface{})) bool { if seen[T] { return true } @@ -172,7 +172,7 @@ func comparable(T Type, dynamic bool, seen map[Type]bool, reportf func(string, . return true case *Struct: for _, f := range t.fields { - if !comparable(f.typ, dynamic, seen, nil) { + if !comparableType(f.typ, dynamic, seen, nil) { if reportf != nil { reportf("struct containing %s cannot be compared", f.typ) } @@ -181,7 +181,7 @@ func comparable(T Type, dynamic bool, seen map[Type]bool, reportf func(string, . } return true case *Array: - if !comparable(t.elem, dynamic, seen, nil) { + if !comparableType(t.elem, dynamic, seen, nil) { if reportf != nil { reportf("%s cannot be compared", t) } diff --git a/src/go/types/subst.go b/src/go/types/subst.go index 6be106d3aa99d6..838ce073f942ce 100644 --- a/src/go/types/subst.go +++ b/src/go/types/subst.go @@ -116,8 +116,7 @@ func (subst *subster) typ(typ Type) Type { // For each (existing) type argument determine if it needs // to be substituted; i.e., if it is or contains a type parameter // that has a type argument for it. - targs, updated := subst.typeList(t.TypeArgs().list()) - if updated { + if targs := substList(t.TypeArgs().list(), subst.typ); targs != nil { return subst.check.newAliasInstance(subst.pos, t.orig, targs, subst.expanding, subst.ctxt) } @@ -134,7 +133,7 @@ func (subst *subster) typ(typ Type) Type { } case *Struct: - if fields, copied := subst.varList(t.fields); copied { + if fields := substList(t.fields, subst.var_); fields != nil { s := &Struct{fields: fields, tags: t.tags} s.markComplete() return s @@ -181,8 +180,7 @@ func (subst *subster) typ(typ Type) Type { } case *Union: - terms, copied := subst.termlist(t.terms) - if copied { + if terms := substList(t.terms, subst.term); terms != nil { // term list substitution may introduce duplicate terms (unlikely but possible). // This is ok; lazy type set computation will determine the actual type set // in normal form. @@ -190,9 +188,15 @@ func (subst *subster) typ(typ Type) Type { } case *Interface: - methods, mcopied := subst.funcList(t.methods) - embeddeds, ecopied := subst.typeList(t.embeddeds) - if mcopied || ecopied { + methods := substList(t.methods, subst.func_) + embeddeds := substList(t.embeddeds, subst.typ) + if methods != nil || embeddeds != nil { + if methods == nil { + methods = t.methods + } + if embeddeds == nil { + embeddeds = t.embeddeds + } iface := subst.check.newInterface() iface.embeddeds = embeddeds iface.embedPos = t.embedPos @@ -254,8 +258,7 @@ func (subst *subster) typ(typ Type) Type { // For each (existing) type argument determine if it needs // to be substituted; i.e., if it is or contains a type parameter // that has a type argument for it. - targs, updated := subst.typeList(t.TypeArgs().list()) - if updated { + if targs := substList(t.TypeArgs().list(), subst.typ); targs != nil { // Create a new instance and populate the context to avoid endless // recursion. The position used here is irrelevant because validation only // occurs on t (we don't call validType on named), but we use subst.pos to @@ -286,13 +289,13 @@ func (subst *subster) typOrNil(typ Type) Type { func (subst *subster) var_(v *Var) *Var { if v != nil { if typ := subst.typ(v.typ); typ != v.typ { - return substVar(v, typ) + return cloneVar(v, typ) } } return v } -func substVar(v *Var, typ Type) *Var { +func cloneVar(v *Var, typ Type) *Var { copy := *v copy.typ = typ copy.origin = v.Origin() @@ -301,26 +304,26 @@ func substVar(v *Var, typ Type) *Var { func (subst *subster) tuple(t *Tuple) *Tuple { if t != nil { - if vars, copied := subst.varList(t.vars); copied { + if vars := substList(t.vars, subst.var_); vars != nil { return &Tuple{vars: vars} } } return t } -func (subst *subster) varList(in []*Var) (out []*Var, copied bool) { - out = in - for i, v := range in { - if w := subst.var_(v); w != v { - if !copied { - // first variable that got substituted => allocate new out slice - // and copy all variables - new := make([]*Var, len(in)) - copy(new, out) - out = new - copied = true +// substList applies subst to each element of the incoming slice. +// If at least one element changes, the result is a new slice with +// all the (possibly updated) elements of the incoming slice; +// otherwise the result it nil. The incoming slice is unchanged. +func substList[T comparable](in []T, subst func(T) T) (out []T) { + for i, t := range in { + if u := subst(t); u != t { + if out == nil { + // lazily allocate a new slice on first substitution + out = make([]T, len(in)) + copy(out, in) } - out[i] = w + out[i] = u } } return @@ -329,71 +332,24 @@ func (subst *subster) varList(in []*Var) (out []*Var, copied bool) { func (subst *subster) func_(f *Func) *Func { if f != nil { if typ := subst.typ(f.typ); typ != f.typ { - return substFunc(f, typ) + return cloneFunc(f, typ) } } return f } -func substFunc(f *Func, typ Type) *Func { +func cloneFunc(f *Func, typ Type) *Func { copy := *f copy.typ = typ copy.origin = f.Origin() return © } -func (subst *subster) funcList(in []*Func) (out []*Func, copied bool) { - out = in - for i, f := range in { - if g := subst.func_(f); g != f { - if !copied { - // first function that got substituted => allocate new out slice - // and copy all functions - new := make([]*Func, len(in)) - copy(new, out) - out = new - copied = true - } - out[i] = g - } - } - return -} - -func (subst *subster) typeList(in []Type) (out []Type, copied bool) { - out = in - for i, t := range in { - if u := subst.typ(t); u != t { - if !copied { - // first function that got substituted => allocate new out slice - // and copy all functions - new := make([]Type, len(in)) - copy(new, out) - out = new - copied = true - } - out[i] = u - } - } - return -} - -func (subst *subster) termlist(in []*Term) (out []*Term, copied bool) { - out = in - for i, t := range in { - if u := subst.typ(t.typ); u != t.typ { - if !copied { - // first function that got substituted => allocate new out slice - // and copy all functions - new := make([]*Term, len(in)) - copy(new, out) - out = new - copied = true - } - out[i] = NewTerm(t.tilde, u) - } +func (subst *subster) term(t *Term) *Term { + if typ := subst.typ(t.typ); typ != t.typ { + return NewTerm(t.tilde, typ) } - return + return t } // replaceRecvType updates any function receivers that have type old to have @@ -416,8 +372,8 @@ func replaceRecvType(in []*Func, old, new Type) (out []*Func, copied bool) { copied = true } newsig := *sig - newsig.recv = substVar(sig.recv, new) - out[i] = substFunc(method, &newsig) + newsig.recv = cloneVar(sig.recv, new) + out[i] = cloneFunc(method, &newsig) } } return diff --git a/src/go/types/typeset.go b/src/go/types/typeset.go index d280bf2f5ff5cf..28f0a454684770 100644 --- a/src/go/types/typeset.go +++ b/src/go/types/typeset.go @@ -47,7 +47,7 @@ func (s *_TypeSet) IsComparable(seen map[Type]bool) bool { return s.comparable } return s.is(func(t *term) bool { - return t != nil && comparable(t.typ, false, seen, nil) + return t != nil && comparableType(t.typ, false, seen, nil) }) } @@ -335,7 +335,7 @@ func intersectTermLists(xterms termlist, xcomp bool, yterms termlist, ycomp bool i := 0 for _, t := range terms { assert(t.typ != nil) - if comparable(t.typ, false /* strictly comparable */, nil, nil) { + if comparableType(t.typ, false /* strictly comparable */, nil, nil) { terms[i] = t i++ } From c761174d9618ba1458eb0d149eff4d42e2dc92ae Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 13 Jun 2024 13:54:05 -0700 Subject: [PATCH 066/866] go/types, types2: cleanup of code handling type switch cases Move logic for type-specific variable type into typeCases function which already does all the relevant work. Add more detailed documentation to typeCases function. Uncomment alernative typeCases function so that it is being type- checked and kept up-to-date. Since it's not (yet) used, the code will not appear in the binary. Follow-up on CL 592555. Change-Id: I6e746503827d512a1dbf7b99b48345c480e61200 Reviewed-on: https://go-review.googlesource.com/c/go/+/592616 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/stmt.go | 137 ++++++++++++++--------- src/go/types/stmt.go | 139 +++++++++++++++--------- 2 files changed, 168 insertions(+), 108 deletions(-) diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index b598a4f068621d..b471fb1f348cd6 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -284,10 +284,27 @@ func (check *Checker) isNil(e syntax.Expr) bool { // caseTypes typechecks the type expressions of a type case, checks for duplicate types // using the seen map, and verifies that each type is valid with respect to the type of -// the operand x in the type switch clause. If the type switch expression is invalid, x -// must be nil. The result is the type of the last type expression; it is nil if the -// expression denotes the predeclared nil. -func (check *Checker) caseTypes(x *operand, types []syntax.Expr, seen map[Type]syntax.Expr) (T Type) { +// the operand x corresponding to the type switch expression. If that expression is not +// valid, x must be nil. +// +// switch .(type) { +// case : ... +// ... +// } +// +// caseTypes returns the case-specific type for a variable v introduced through a short +// variable declaration by the type switch: +// +// switch v := .(type) { +// case : // T is the type of in this case +// ... +// } +// +// If there is exactly one type expression, T is the type of that expression. If there +// are multiple type expressions, or if predeclared nil is among the types, the result +// is the type of x. If x is invalid (nil), the result is the invalid type. +func (check *Checker) caseTypes(x *operand, types []syntax.Expr, seen map[Type]syntax.Expr) Type { + var T Type var dummy operand L: for _, e := range types { @@ -322,49 +339,72 @@ L: check.typeAssertion(e, x, T, true) } } - return + + // spec: "In clauses with a case listing exactly one type, the variable has that type; + // otherwise, the variable has the type of the expression in the TypeSwitchGuard. + if len(types) != 1 || T == nil { + T = Typ[Invalid] + if x != nil { + T = x.typ + } + } + + assert(T != nil) + return T } // TODO(gri) Once we are certain that typeHash is correct in all situations, use this version of caseTypes instead. // (Currently it may be possible that different types have identical names and import paths due to ImporterFrom.) -// -// func (check *Checker) caseTypes(x *operand, xtyp *Interface, types []syntax.Expr, seen map[string]syntax.Expr) (T Type) { -// var dummy operand -// L: -// for _, e := range types { -// // The spec allows the value nil instead of a type. -// var hash string -// if check.isNil(e) { -// check.expr(nil, &dummy, e) // run e through expr so we get the usual Info recordings -// T = nil -// hash = "" // avoid collision with a type named nil -// } else { -// T = check.varType(e) -// if !isValid(T) { -// continue L -// } -// hash = typeHash(T, nil) -// } -// // look for duplicate types -// if other := seen[hash]; other != nil { -// // talk about "case" rather than "type" because of nil case -// Ts := "nil" -// if T != nil { -// Ts = TypeString(T, check.qualifier) -// } -// err := check.newError(_DuplicateCase) -// err.addf(e, "duplicate case %s in type switch", Ts) -// err.addf(other, "previous case") -// err.report() -// continue L -// } -// seen[hash] = e -// if T != nil { -// check.typeAssertion(e, x, xtyp, T, true) -// } -// } -// return -// } +func (check *Checker) caseTypes_currently_unused(x *operand, xtyp *Interface, types []syntax.Expr, seen map[string]syntax.Expr) Type { + var T Type + var dummy operand +L: + for _, e := range types { + // The spec allows the value nil instead of a type. + var hash string + if check.isNil(e) { + check.expr(nil, &dummy, e) // run e through expr so we get the usual Info recordings + T = nil + hash = "" // avoid collision with a type named nil + } else { + T = check.varType(e) + if !isValid(T) { + continue L + } + panic("enable typeHash(T, nil)") + // hash = typeHash(T, nil) + } + // look for duplicate types + if other := seen[hash]; other != nil { + // talk about "case" rather than "type" because of nil case + Ts := "nil" + if T != nil { + Ts = TypeString(T, check.qualifier) + } + err := check.newError(DuplicateCase) + err.addf(e, "duplicate case %s in type switch", Ts) + err.addf(other, "previous case") + err.report() + continue L + } + seen[hash] = e + if T != nil { + check.typeAssertion(e, x, T, true) + } + } + + // spec: "In clauses with a case listing exactly one type, the variable has that type; + // otherwise, the variable has the type of the expression in the TypeSwitchGuard. + if len(types) != 1 || T == nil { + T = Typ[Invalid] + if x != nil { + T = x.typ + } + } + + assert(T != nil) + return T +} // stmt typechecks statement s. func (check *Checker) stmt(ctxt stmtContext, s syntax.Stmt) { @@ -777,17 +817,6 @@ func (check *Checker) typeSwitchStmt(inner stmtContext, s *syntax.SwitchStmt, gu check.openScopeUntil(clause, end, "case") // If lhs exists, declare a corresponding variable in the case-local scope. if lhs != nil { - // spec: "The TypeSwitchGuard may include a short variable declaration. - // When that form is used, the variable is declared at the beginning of - // the implicit block in each clause. In clauses with a case listing - // exactly one type, the variable has that type; otherwise, the variable - // has the type of the expression in the TypeSwitchGuard." - if len(cases) != 1 || T == nil { - T = Typ[Invalid] - if sx != nil { - T = sx.typ - } - } obj := NewVar(lhs.Pos(), check.pkg, lhs.Value, T) // TODO(mdempsky): Just use clause.Colon? Why did I even suggest // "at the end of the TypeSwitchCase" in go.dev/issue/16794 instead? diff --git a/src/go/types/stmt.go b/src/go/types/stmt.go index c9f7a4f929ad50..74a64f40aae434 100644 --- a/src/go/types/stmt.go +++ b/src/go/types/stmt.go @@ -281,10 +281,27 @@ func (check *Checker) isNil(e ast.Expr) bool { // caseTypes typechecks the type expressions of a type case, checks for duplicate types // using the seen map, and verifies that each type is valid with respect to the type of -// the operand x in the type switch clause. If the type switch expression is invalid, x -// must be nil. The result is the type of the last type expression; it is nil if the -// expression denotes the predeclared nil. -func (check *Checker) caseTypes(x *operand, types []ast.Expr, seen map[Type]ast.Expr) (T Type) { +// the operand x corresponding to the type switch expression. If that expression is not +// valid, x must be nil. +// +// switch .(type) { +// case : ... +// ... +// } +// +// caseTypes returns the case-specific type for a variable v introduced through a short +// variable declaration by the type switch: +// +// switch v := .(type) { +// case : // T is the type of in this case +// ... +// } +// +// If there is exactly one type expression, T is the type of that expression. If there +// are multiple type expressions, or if predeclared nil is among the types, the result +// is the type of x. If x is invalid (nil), the result is the invalid type. +func (check *Checker) caseTypes(x *operand, types []ast.Expr, seen map[Type]ast.Expr) Type { + var T Type var dummy operand L: for _, e := range types { @@ -319,49 +336,72 @@ L: check.typeAssertion(e, x, T, true) } } - return + + // spec: "In clauses with a case listing exactly one type, the variable has that type; + // otherwise, the variable has the type of the expression in the TypeSwitchGuard. + if len(types) != 1 || T == nil { + T = Typ[Invalid] + if x != nil { + T = x.typ + } + } + + assert(T != nil) + return T } // TODO(gri) Once we are certain that typeHash is correct in all situations, use this version of caseTypes instead. // (Currently it may be possible that different types have identical names and import paths due to ImporterFrom.) -// -// func (check *Checker) caseTypes(x *operand, xtyp *Interface, types []ast.Expr, seen map[string]ast.Expr) (T Type) { -// var dummy operand -// L: -// for _, e := range types { -// // The spec allows the value nil instead of a type. -// var hash string -// if check.isNil(e) { -// check.expr(nil, &dummy, e) // run e through expr so we get the usual Info recordings -// T = nil -// hash = "" // avoid collision with a type named nil -// } else { -// T = check.varType(e) -// if !isValid(T) { -// continue L -// } -// hash = typeHash(T, nil) -// } -// // look for duplicate types -// if other := seen[hash]; other != nil { -// // talk about "case" rather than "type" because of nil case -// Ts := "nil" -// if T != nil { -// Ts = TypeString(T, check.qualifier) -// } -// err := check.newError(_DuplicateCase) -// err.addf(e, "duplicate case %s in type switch", Ts) -// err.addf(other, "previous case") -// err.report() -// continue L -// } -// seen[hash] = e -// if T != nil { -// check.typeAssertion(e.Pos(), x, xtyp, T) -// } -// } -// return -// } +func (check *Checker) caseTypes_currently_unused(x *operand, xtyp *Interface, types []ast.Expr, seen map[string]ast.Expr) Type { + var T Type + var dummy operand +L: + for _, e := range types { + // The spec allows the value nil instead of a type. + var hash string + if check.isNil(e) { + check.expr(nil, &dummy, e) // run e through expr so we get the usual Info recordings + T = nil + hash = "" // avoid collision with a type named nil + } else { + T = check.varType(e) + if !isValid(T) { + continue L + } + panic("enable typeHash(T, nil)") + // hash = typeHash(T, nil) + } + // look for duplicate types + if other := seen[hash]; other != nil { + // talk about "case" rather than "type" because of nil case + Ts := "nil" + if T != nil { + Ts = TypeString(T, check.qualifier) + } + err := check.newError(DuplicateCase) + err.addf(e, "duplicate case %s in type switch", Ts) + err.addf(other, "previous case") + err.report() + continue L + } + seen[hash] = e + if T != nil { + check.typeAssertion(e, x, T, true) + } + } + + // spec: "In clauses with a case listing exactly one type, the variable has that type; + // otherwise, the variable has the type of the expression in the TypeSwitchGuard. + if len(types) != 1 || T == nil { + T = Typ[Invalid] + if x != nil { + T = x.typ + } + } + + assert(T != nil) + return T +} // stmt typechecks statement s. func (check *Checker) stmt(ctxt stmtContext, s ast.Stmt) { @@ -722,18 +762,9 @@ func (check *Checker) stmt(ctxt stmtContext, s ast.Stmt) { check.openScope(clause, "case") // If lhs exists, declare a corresponding variable in the case-local scope. if lhs != nil { - // spec: "The TypeSwitchGuard may include a short variable declaration. - // When that form is used, the variable is declared at the beginning of - // the implicit block in each clause. In clauses with a case listing - // exactly one type, the variable has that type; otherwise, the variable - // has the type of the expression in the TypeSwitchGuard." - if len(clause.List) != 1 || T == nil { - T = Typ[Invalid] - if sx != nil { - T = sx.typ - } - } obj := NewVar(lhs.Pos(), check.pkg, lhs.Name, T) + // TODO(mdempsky): Just use clause.Colon? Why did I even suggest + // "at the end of the TypeSwitchCase" in go.dev/issue/16794 instead? scopePos := clause.Pos() + token.Pos(len("default")) // for default clause (len(List) == 0) if n := len(clause.List); n > 0 { scopePos = clause.List[n-1].End() From e7b7f44ff82e26cf4e548f35f2a9988e6a4a05aa Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 13 Jun 2024 16:24:26 -0700 Subject: [PATCH 067/866] go/types, types2: use ":" as start of implicit type switch case scopes Adjust the respective API test accordingly. Change-Id: I7ecc8899b40ae3b5aeb2c1e032935c672b41e0b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/592675 Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/types2/api_test.go | 13 ++++++++----- src/cmd/compile/internal/types2/stmt.go | 8 +------- src/go/types/api_test.go | 13 ++++++++----- src/go/types/stmt.go | 8 +------- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/cmd/compile/internal/types2/api_test.go b/src/cmd/compile/internal/types2/api_test.go index 5126ac51116cd9..f23c50ba461238 100644 --- a/src/cmd/compile/internal/types2/api_test.go +++ b/src/cmd/compile/internal/types2/api_test.go @@ -1884,6 +1884,9 @@ func TestScopeLookupParent(t *testing.T) { // Each /*name=kind:line*/ comment makes the test look up the // name at that point and checks that it resolves to a decl of // the specified kind and line number. "undef" means undefined. + // Note that type switch case clauses with an empty body (but for + // comments) need the ";" to ensure that the recorded scope extends + // past the comments. mainSrc := ` /*lib=pkgname:5*/ /*X=var:1*/ /*Pi=const:8*/ /*T=typename:9*/ /*Y=var:10*/ /*F=func:12*/ package main @@ -1907,17 +1910,17 @@ func F[T *U, U any](param1, param2 int) /*param1=undef*/ (res1 /*res1=undef*/, r var i interface{} switch y := i.(type) { /*y=undef*/ - case /*y=undef*/ int /*y=var:23*/ : - case float32, /*y=undef*/ float64 /*y=var:23*/ : - default /*y=var:23*/: + case /*y=undef*/ int /*y=undef*/ : /*y=var:23*/ ; + case float32, /*y=undef*/ float64 /*y=undef*/ : /*y=var:23*/ ; + default /*y=undef*/ : /*y=var:23*/ println(y) } /*y=undef*/ switch int := i.(type) { - case /*int=typename:0*/ int /*int=var:31*/ : + case /*int=typename:0*/ int /*int=typename:0*/ : /*int=var:31*/ println(int) - default /*int=var:31*/ : + default /*int=typename:0*/ : /*int=var:31*/ ; } _ = param1 diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index b471fb1f348cd6..e0e4ee6a0277e9 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -818,13 +818,7 @@ func (check *Checker) typeSwitchStmt(inner stmtContext, s *syntax.SwitchStmt, gu // If lhs exists, declare a corresponding variable in the case-local scope. if lhs != nil { obj := NewVar(lhs.Pos(), check.pkg, lhs.Value, T) - // TODO(mdempsky): Just use clause.Colon? Why did I even suggest - // "at the end of the TypeSwitchCase" in go.dev/issue/16794 instead? - scopePos := clause.Pos() // for default clause (len(List) == 0) - if n := len(cases); n > 0 { - scopePos = syntax.EndPos(cases[n-1]) - } - check.declare(check.scope, nil, obj, scopePos) + check.declare(check.scope, nil, obj, clause.Colon) check.recordImplicit(clause, obj) // For the "declared and not used" error, all lhs variables act as // one; i.e., if any one of them is 'used', all of them are 'used'. diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go index beed94f3557996..0854a119c2462e 100644 --- a/src/go/types/api_test.go +++ b/src/go/types/api_test.go @@ -1885,6 +1885,9 @@ func TestScopeLookupParent(t *testing.T) { // Each /*name=kind:line*/ comment makes the test look up the // name at that point and checks that it resolves to a decl of // the specified kind and line number. "undef" means undefined. + // Note that type switch case clauses with an empty body (but for + // comments) need the ";" to ensure that the recorded scope extends + // past the comments. mainSrc := ` /*lib=pkgname:5*/ /*X=var:1*/ /*Pi=const:8*/ /*T=typename:9*/ /*Y=var:10*/ /*F=func:12*/ package main @@ -1908,17 +1911,17 @@ func F[T *U, U any](param1, param2 int) /*param1=undef*/ (res1 /*res1=undef*/, r var i interface{} switch y := i.(type) { /*y=undef*/ - case /*y=undef*/ int /*y=var:23*/ : - case float32, /*y=undef*/ float64 /*y=var:23*/ : - default /*y=var:23*/: + case /*y=undef*/ int /*y=undef*/ : /*y=var:23*/ ; + case float32, /*y=undef*/ float64 /*y=undef*/ : /*y=var:23*/ ; + default /*y=undef*/ : /*y=var:23*/ println(y) } /*y=undef*/ switch int := i.(type) { - case /*int=typename:0*/ int /*int=var:31*/ : + case /*int=typename:0*/ int /*int=typename:0*/ : /*int=var:31*/ println(int) - default /*int=var:31*/ : + default /*int=typename:0*/ : /*int=var:31*/ ; } _ = param1 diff --git a/src/go/types/stmt.go b/src/go/types/stmt.go index 74a64f40aae434..f8514fdbb79ee4 100644 --- a/src/go/types/stmt.go +++ b/src/go/types/stmt.go @@ -763,13 +763,7 @@ func (check *Checker) stmt(ctxt stmtContext, s ast.Stmt) { // If lhs exists, declare a corresponding variable in the case-local scope. if lhs != nil { obj := NewVar(lhs.Pos(), check.pkg, lhs.Name, T) - // TODO(mdempsky): Just use clause.Colon? Why did I even suggest - // "at the end of the TypeSwitchCase" in go.dev/issue/16794 instead? - scopePos := clause.Pos() + token.Pos(len("default")) // for default clause (len(List) == 0) - if n := len(clause.List); n > 0 { - scopePos = clause.List[n-1].End() - } - check.declare(check.scope, nil, obj, scopePos) + check.declare(check.scope, nil, obj, clause.Colon) check.recordImplicit(clause, obj) // For the "declared and not used" error, all lhs variables act as // one; i.e., if any one of them is 'used', all of them are 'used'. From 88bd9852394c02a71040226d523903bcb718e51c Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 17 Jun 2024 15:02:10 -0700 Subject: [PATCH 068/866] cmd/compile/internal/types2: use syntax.EndPos instead of local computation Previously, the end position for a select statement clause body was computed explicitly as the start of the next clause or the closing "}" of the select statement, respectively. Since syntax.EndPos computes the end position of a node, there's no need to compute these positions "manually", we can simply use the syntax.ExdPos for each clause. The positions are not exactly the same as before but for the purpose of identifier visibility in scopes there is no semantic change. Simplifies the code and brings it more in line with go/types. Change-Id: I24bca85a131a0ea31a2adaafc08ab713450258fb Reviewed-on: https://go-review.googlesource.com/c/go/+/593016 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/stmt.go | 26 ++++++------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index e0e4ee6a0277e9..3027aef2e7a512 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -150,11 +150,7 @@ func (check *Checker) multipleSelectDefaults(list []*syntax.CommClause) { } func (check *Checker) openScope(node syntax.Node, comment string) { - check.openScopeUntil(node, syntax.EndPos(node), comment) -} - -func (check *Checker) openScopeUntil(node syntax.Node, end syntax.Pos, comment string) { - scope := NewScope(check.scope, node.Pos(), end, comment) + scope := NewScope(check.scope, node.Pos(), syntax.EndPos(node), comment) check.recordScope(node, scope) check.scope = scope } @@ -637,7 +633,7 @@ func (check *Checker) stmt(ctxt stmtContext, s syntax.Stmt) { check.multipleSelectDefaults(s.Body) - for i, clause := range s.Body { + for _, clause := range s.Body { if clause == nil { continue // error reported before } @@ -667,11 +663,7 @@ func (check *Checker) stmt(ctxt stmtContext, s syntax.Stmt) { check.error(clause.Comm, InvalidSelectCase, "select case must be send or receive (possibly with assignment)") continue } - end := s.Rbrace - if i+1 < len(s.Body) { - end = s.Body[i+1].Pos() - } - check.openScopeUntil(clause, end, "case") + check.openScope(clause, "case") if clause.Comm != nil { check.stmt(inner, clause.Comm) } @@ -747,16 +739,14 @@ func (check *Checker) switchStmt(inner stmtContext, s *syntax.SwitchStmt) { check.error(clause, InvalidSyntaxTree, "incorrect expression switch case") continue } - end := s.Rbrace inner := inner if i+1 < len(s.Body) { - end = s.Body[i+1].Pos() inner |= fallthroughOk } else { inner |= finalSwitchCase } check.caseValues(&x, syntax.UnpackListExpr(clause.Cases), seen) - check.openScopeUntil(clause, end, "case") + check.openScope(clause, "case") check.stmtList(inner, clause.Body) check.closeScope() } @@ -802,19 +792,15 @@ func (check *Checker) typeSwitchStmt(inner stmtContext, s *syntax.SwitchStmt, gu var lhsVars []*Var // list of implicitly declared lhs variables seen := make(map[Type]syntax.Expr) // map of seen types to positions - for i, clause := range s.Body { + for _, clause := range s.Body { if clause == nil { check.error(s, InvalidSyntaxTree, "incorrect type switch case") continue } - end := s.Rbrace - if i+1 < len(s.Body) { - end = s.Body[i+1].Pos() - } // Check each type in this type switch case. cases := syntax.UnpackListExpr(clause.Cases) T := check.caseTypes(sx, cases, seen) - check.openScopeUntil(clause, end, "case") + check.openScope(clause, "case") // If lhs exists, declare a corresponding variable in the case-local scope. if lhs != nil { obj := NewVar(lhs.Pos(), check.pkg, lhs.Value, T) From e0ca2e04b852e4c887be38f3ad7205a863b6c6a7 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 18 Jun 2024 10:34:11 -0700 Subject: [PATCH 069/866] go/types, types2: slightly reorganize method receiver checking - move receiver checks up, closer to where the receiver is collected - adjust some comments after verifying against some test cases - removed some minor discrepancies between the two type checkers For #51343. Change-Id: I75b58efbed1e408df89b8d6536e6c6da45740f93 Reviewed-on: https://go-review.googlesource.com/c/go/+/593336 Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/types2/signature.go | 38 ++++++++++---------- src/go/types/signature.go | 31 ++++++++-------- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go index 7a5a2c155f0032..5050212e15dced 100644 --- a/src/cmd/compile/internal/types2/signature.go +++ b/src/cmd/compile/internal/types2/signature.go @@ -66,7 +66,7 @@ func NewSignatureType(recv *Var, recvTypeParams, typeParams []*TypeParam, params // function. It is ignored when comparing signatures for identity. // // For an abstract method, Recv returns the enclosing interface either -// as a *Named or an *Interface. Due to embedding, an interface may +// as a *[Named] or an *[Interface]. Due to embedding, an interface may // contain methods whose receiver type is a different interface. func (s *Signature) Recv() *Var { return s.recv } @@ -176,37 +176,37 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] // Audit to ensure all lookups honor scopePos and simplify. scope := NewScope(check.scope, nopos, nopos, "function body (temp. scope)") scopePos := syntax.EndPos(ftyp) // all parameters' scopes start after the signature - var recvList []*Var // TODO(gri) remove the need for making a list here - if recvPar != nil { - recvList, _ = check.collectParams(scope, []*syntax.Field{recvPar}, false, scopePos) // use rewritten receiver type, if any - } - params, variadic := check.collectParams(scope, ftyp.ParamList, true, scopePos) - results, _ := check.collectParams(scope, ftyp.ResultList, false, scopePos) - scope.Squash(func(obj, alt Object) { - err := check.newError(DuplicateDecl) - err.addf(obj, "%s redeclared in this block", obj.Name()) - err.addAltDecl(alt) - err.report() - }) + // collect and typecheck receiver, incoming parameters, and results + var recv *Var if recvPar != nil { - // recv parameter list present (may be empty) // spec: "The receiver is specified via an extra parameter section preceding the // method name. That parameter section must declare a single parameter, the receiver." - var recv *Var + recvList, _ := check.collectParams(scope, []*syntax.Field{recvPar}, false, scopePos) // use rewritten receiver type, if any switch len(recvList) { case 0: - // error reported by resolver - recv = NewParam(nopos, nil, "", Typ[Invalid]) // ignore recv below + // error reported by parser + recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by check.later code below default: - // more than one receiver - check.error(recvList[len(recvList)-1].Pos(), InvalidRecv, "method must have exactly one receiver") + // error reported by parser + check.error(recvList[len(recvList)-1].Pos(), InvalidRecv, "method has multiple receivers") fallthrough // continue with first receiver case 1: recv = recvList[0] } sig.recv = recv + } + params, variadic := check.collectParams(scope, ftyp.ParamList, true, scopePos) + results, _ := check.collectParams(scope, ftyp.ResultList, false, scopePos) + + scope.Squash(func(obj, alt Object) { + err := check.newError(DuplicateDecl) + err.addf(obj, "%s redeclared in this block", obj.Name()) + err.addAltDecl(alt) + err.report() + }) + if recv != nil { // Delay validation of receiver type as it may cause premature expansion // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). check.later(func() { diff --git a/src/go/types/signature.go b/src/go/types/signature.go index 770edc2b21b801..9d83dd4fd53403 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -96,8 +96,8 @@ func (s *Signature) Results() *Tuple { return s.results } // Variadic reports whether the signature s is variadic. func (s *Signature) Variadic() bool { return s.variadic } -func (t *Signature) Underlying() Type { return t } -func (t *Signature) String() string { return TypeString(t, nil) } +func (s *Signature) Underlying() Type { return s } +func (s *Signature) String() string { return TypeString(s, nil) } // ---------------------------------------------------------------------------- // Implementation @@ -189,25 +189,17 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast // Audit to ensure all lookups honor scopePos and simplify. scope := NewScope(check.scope, nopos, nopos, "function body (temp. scope)") scopePos := ftyp.End() // all parameters' scopes start after the signature - recvList, _ := check.collectParams(scope, recvPar, false, scopePos) - params, variadic := check.collectParams(scope, ftyp.Params, true, scopePos) - results, _ := check.collectParams(scope, ftyp.Results, false, scopePos) - scope.squash(func(obj, alt Object) { - err := check.newError(DuplicateDecl) - err.addf(obj, "%s redeclared in this block", obj.Name()) - err.addAltDecl(alt) - err.report() - }) + // collect and typecheck receiver, incoming parameters, and results + var recv *Var if recvPar != nil { - // recv parameter list present (may be empty) // spec: "The receiver is specified via an extra parameter section preceding the // method name. That parameter section must declare a single parameter, the receiver." - var recv *Var + recvList, _ := check.collectParams(scope, recvPar, false, scopePos) // use rewritten receiver type, if any switch len(recvList) { case 0: // error reported by resolver - recv = NewParam(nopos, nil, "", Typ[Invalid]) // ignore recv below + recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by check.later code below default: // more than one receiver check.error(recvList[len(recvList)-1], InvalidRecv, "method has multiple receivers") @@ -216,7 +208,18 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast recv = recvList[0] } sig.recv = recv + } + params, variadic := check.collectParams(scope, ftyp.Params, true, scopePos) + results, _ := check.collectParams(scope, ftyp.Results, false, scopePos) + + scope.squash(func(obj, alt Object) { + err := check.newError(DuplicateDecl) + err.addf(obj, "%s redeclared in this block", obj.Name()) + err.addAltDecl(alt) + err.report() + }) + if recv != nil { // Delay validation of receiver type as it may cause premature expansion // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). check.later(func() { From 1b7285d1ab38212433a78dc32a0421250a35c921 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 18 Jun 2024 11:32:18 -0700 Subject: [PATCH 070/866] go/types, types2: factor out method receiver validation While at it, slightly regroup surounding code for clarity. For #51343. Change-Id: Ibb3a58c2ea138afae0be5315d98f698d7633b22a Reviewed-on: https://go-review.googlesource.com/c/go/+/593455 Reviewed-by: Robert Findley Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/types2/signature.go | 118 ++++++++++--------- src/go/types/signature.go | 118 ++++++++++--------- 2 files changed, 124 insertions(+), 112 deletions(-) diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go index 5050212e15dced..ed4ca1f08df6d9 100644 --- a/src/cmd/compile/internal/types2/signature.go +++ b/src/cmd/compile/internal/types2/signature.go @@ -178,15 +178,15 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] scopePos := syntax.EndPos(ftyp) // all parameters' scopes start after the signature // collect and typecheck receiver, incoming parameters, and results - var recv *Var if recvPar != nil { // spec: "The receiver is specified via an extra parameter section preceding the // method name. That parameter section must declare a single parameter, the receiver." recvList, _ := check.collectParams(scope, []*syntax.Field{recvPar}, false, scopePos) // use rewritten receiver type, if any + var recv *Var switch len(recvList) { case 0: // error reported by parser - recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by check.later code below + recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by validateRecv default: // error reported by parser check.error(recvList[len(recvList)-1].Pos(), InvalidRecv, "method has multiple receivers") @@ -195,9 +195,18 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] recv = recvList[0] } sig.recv = recv + // Delay validation of receiver type as it may cause premature expansion + // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). + check.later(func() { + check.validRecv(recv, sig.RecvTypeParams() != nil) + }).describef(recv, "validRecv(%s)", recv) } + params, variadic := check.collectParams(scope, ftyp.ParamList, true, scopePos) results, _ := check.collectParams(scope, ftyp.ResultList, false, scopePos) + sig.params = NewTuple(params...) + sig.results = NewTuple(results...) + sig.variadic = variadic scope.Squash(func(obj, alt Object) { err := check.newError(DuplicateDecl) @@ -205,60 +214,6 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] err.addAltDecl(alt) err.report() }) - - if recv != nil { - // Delay validation of receiver type as it may cause premature expansion - // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). - check.later(func() { - // spec: "The receiver type must be of the form T or *T where T is a type name." - rtyp, _ := deref(recv.typ) - atyp := Unalias(rtyp) - if !isValid(atyp) { - return // error was reported before - } - // spec: "The type denoted by T is called the receiver base type; it must not - // be a pointer or interface type and it must be declared in the same package - // as the method." - switch T := atyp.(type) { - case *Named: - // The receiver type may be an instantiated type referred to - // by an alias (which cannot have receiver parameters for now). - if T.TypeArgs() != nil && sig.RecvTypeParams() == nil { - check.errorf(recv, InvalidRecv, "cannot define new methods on instantiated type %s", rtyp) - break - } - if T.obj.pkg != check.pkg { - check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) - break - } - var cause string - switch u := T.under().(type) { - case *Basic: - // unsafe.Pointer is treated like a regular pointer - if u.kind == UnsafePointer { - cause = "unsafe.Pointer" - } - case *Pointer, *Interface: - cause = "pointer or interface type" - case *TypeParam: - // The underlying type of a receiver base type cannot be a - // type parameter: "type T[P any] P" is not a valid declaration. - panic("unreachable") - } - if cause != "" { - check.errorf(recv, InvalidRecv, "invalid receiver type %s (%s)", rtyp, cause) - } - case *Basic: - check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) - default: - check.errorf(recv, InvalidRecv, "invalid receiver type %s", recv.typ) - } - }).describef(recv, "validate receiver %s", recv) - } - - sig.params = NewTuple(params...) - sig.results = NewTuple(results...) - sig.variadic = variadic } // collectParams declares the parameters of list in scope and returns the corresponding @@ -326,3 +281,54 @@ func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadic return } + +// validRecv verifies that the receiver satisfies its respective spec requirements +// and reports an error otherwise. If hasTypeParams is set, the receiver declares +// type parameters. +func (check *Checker) validRecv(recv *Var, hasTypeParams bool) { + // spec: "The receiver type must be of the form T or *T where T is a type name." + rtyp, _ := deref(recv.typ) + atyp := Unalias(rtyp) + if !isValid(atyp) { + return // error was reported before + } + // spec: "The type denoted by T is called the receiver base type; it must not + // be a pointer or interface type and it must be declared in the same package + // as the method." + switch T := atyp.(type) { + case *Named: + // The receiver type may be an instantiated type referred to + // by an alias (which cannot have receiver parameters for now). + // TODO(gri) revisit this logic since alias types can have + // type parameters in 1.24 + if T.TypeArgs() != nil && !hasTypeParams { + check.errorf(recv, InvalidRecv, "cannot define new methods on instantiated type %s", rtyp) + break + } + if T.obj.pkg != check.pkg { + check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) + break + } + var cause string + switch u := T.under().(type) { + case *Basic: + // unsafe.Pointer is treated like a regular pointer + if u.kind == UnsafePointer { + cause = "unsafe.Pointer" + } + case *Pointer, *Interface: + cause = "pointer or interface type" + case *TypeParam: + // The underlying type of a receiver base type cannot be a + // type parameter: "type T[P any] P" is not a valid declaration. + panic("unreachable") + } + if cause != "" { + check.errorf(recv, InvalidRecv, "invalid receiver type %s (%s)", rtyp, cause) + } + case *Basic: + check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) + default: + check.errorf(recv, InvalidRecv, "invalid receiver type %s", recv.typ) + } +} diff --git a/src/go/types/signature.go b/src/go/types/signature.go index 9d83dd4fd53403..651a333e24f8bd 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -191,15 +191,15 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast scopePos := ftyp.End() // all parameters' scopes start after the signature // collect and typecheck receiver, incoming parameters, and results - var recv *Var if recvPar != nil { // spec: "The receiver is specified via an extra parameter section preceding the // method name. That parameter section must declare a single parameter, the receiver." recvList, _ := check.collectParams(scope, recvPar, false, scopePos) // use rewritten receiver type, if any + var recv *Var switch len(recvList) { case 0: // error reported by resolver - recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by check.later code below + recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by validateRecv default: // more than one receiver check.error(recvList[len(recvList)-1], InvalidRecv, "method has multiple receivers") @@ -208,9 +208,18 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast recv = recvList[0] } sig.recv = recv + // Delay validation of receiver type as it may cause premature expansion + // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). + check.later(func() { + check.validRecv(recv, sig.RecvTypeParams() != nil) + }).describef(recv, "validRecv(%s)", recv) } + params, variadic := check.collectParams(scope, ftyp.Params, true, scopePos) results, _ := check.collectParams(scope, ftyp.Results, false, scopePos) + sig.params = NewTuple(params...) + sig.results = NewTuple(results...) + sig.variadic = variadic scope.squash(func(obj, alt Object) { err := check.newError(DuplicateDecl) @@ -218,60 +227,6 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast err.addAltDecl(alt) err.report() }) - - if recv != nil { - // Delay validation of receiver type as it may cause premature expansion - // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). - check.later(func() { - // spec: "The receiver type must be of the form T or *T where T is a type name." - rtyp, _ := deref(recv.typ) - atyp := Unalias(rtyp) - if !isValid(atyp) { - return // error was reported before - } - // spec: "The type denoted by T is called the receiver base type; it must not - // be a pointer or interface type and it must be declared in the same package - // as the method." - switch T := atyp.(type) { - case *Named: - // The receiver type may be an instantiated type referred to - // by an alias (which cannot have receiver parameters for now). - if T.TypeArgs() != nil && sig.RecvTypeParams() == nil { - check.errorf(recv, InvalidRecv, "cannot define new methods on instantiated type %s", rtyp) - break - } - if T.obj.pkg != check.pkg { - check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) - break - } - var cause string - switch u := T.under().(type) { - case *Basic: - // unsafe.Pointer is treated like a regular pointer - if u.kind == UnsafePointer { - cause = "unsafe.Pointer" - } - case *Pointer, *Interface: - cause = "pointer or interface type" - case *TypeParam: - // The underlying type of a receiver base type cannot be a - // type parameter: "type T[P any] P" is not a valid declaration. - panic("unreachable") - } - if cause != "" { - check.errorf(recv, InvalidRecv, "invalid receiver type %s (%s)", rtyp, cause) - } - case *Basic: - check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) - default: - check.errorf(recv, InvalidRecv, "invalid receiver type %s", recv.typ) - } - }).describef(recv, "validate receiver %s", recv) - } - - sig.params = NewTuple(params...) - sig.results = NewTuple(results...) - sig.variadic = variadic } // collectParams declares the parameters of list in scope and returns the corresponding @@ -333,3 +288,54 @@ func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicO return } + +// validRecv verifies that the receiver satisfies its respective spec requirements +// and reports an error otherwise. If hasTypeParams is set, the receiver declares +// type parameters. +func (check *Checker) validRecv(recv *Var, hasTypeParams bool) { + // spec: "The receiver type must be of the form T or *T where T is a type name." + rtyp, _ := deref(recv.typ) + atyp := Unalias(rtyp) + if !isValid(atyp) { + return // error was reported before + } + // spec: "The type denoted by T is called the receiver base type; it must not + // be a pointer or interface type and it must be declared in the same package + // as the method." + switch T := atyp.(type) { + case *Named: + // The receiver type may be an instantiated type referred to + // by an alias (which cannot have receiver parameters for now). + // TODO(gri) revisit this logic since alias types can have + // type parameters in 1.24 + if T.TypeArgs() != nil && !hasTypeParams { + check.errorf(recv, InvalidRecv, "cannot define new methods on instantiated type %s", rtyp) + break + } + if T.obj.pkg != check.pkg { + check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) + break + } + var cause string + switch u := T.under().(type) { + case *Basic: + // unsafe.Pointer is treated like a regular pointer + if u.kind == UnsafePointer { + cause = "unsafe.Pointer" + } + case *Pointer, *Interface: + cause = "pointer or interface type" + case *TypeParam: + // The underlying type of a receiver base type cannot be a + // type parameter: "type T[P any] P" is not a valid declaration. + panic("unreachable") + } + if cause != "" { + check.errorf(recv, InvalidRecv, "invalid receiver type %s (%s)", rtyp, cause) + } + case *Basic: + check.errorf(recv, InvalidRecv, "cannot define new methods on non-local type %s", rtyp) + default: + check.errorf(recv, InvalidRecv, "invalid receiver type %s", recv.typ) + } +} From 77a3c3b984c22186a9f9ec17b13c2d13060bc9c9 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 25 Jun 2024 12:47:20 -0700 Subject: [PATCH 071/866] go/types, types2: remove superfluous if statement (minor cleanup) Found while re-reading this code. Change-Id: I5c87bb38ce07e49f1d122db1630c48d5ff082a30 Reviewed-on: https://go-review.googlesource.com/c/go/+/594975 Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Reviewed-by: Tim King --- src/cmd/compile/internal/types2/resolver.go | 4 +--- src/go/types/resolver.go | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/cmd/compile/internal/types2/resolver.go b/src/cmd/compile/internal/types2/resolver.go index 5676aa36188d27..4d9b4f92e1d86e 100644 --- a/src/cmd/compile/internal/types2/resolver.go +++ b/src/cmd/compile/internal/types2/resolver.go @@ -560,9 +560,7 @@ L: // unpack receiver type } // unpack receiver name - if name, _ := rtyp.(*syntax.Name); name != nil { - rname = name - } + rname, _ = rtyp.(*syntax.Name) return } diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index e6e882e35f0367..041c4536672fe5 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -545,9 +545,7 @@ L: // unpack receiver type } // unpack receiver name - if name, _ := rtyp.(*ast.Ident); name != nil { - rname = name - } + rname, _ = rtyp.(*ast.Ident) return } From 05099368239650c0931d6521eeb0c707296c90bc Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 25 Jun 2024 15:31:06 -0700 Subject: [PATCH 072/866] go/types, types2: report type name in comp. literal error, if possible When reporting an error for the element type of a struct literal, use the element type's type name rather than it's underlying/core type. Also, combine error reporting for invalid composite literal types in one place, at the end. Fixes #68184. Change-Id: I1f407d5403777948da9a0eca95aacc1389f4bd44 Reviewed-on: https://go-review.googlesource.com/c/go/+/595075 LUCI-TryBot-Result: Go LUCI Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer Reviewed-by: Tim King --- src/cmd/compile/internal/types2/expr.go | 20 +++++++--- src/go/types/expr.go | 20 +++++++--- .../types/testdata/fixedbugs/issue68184.go | 38 +++++++++++++++++++ 3 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 src/internal/types/testdata/fixedbugs/issue68184.go diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go index b25cf89fb4efa8..2be8716d448151 100644 --- a/src/cmd/compile/internal/types2/expr.go +++ b/src/cmd/compile/internal/types2/expr.go @@ -1151,6 +1151,7 @@ func (check *Checker) exprInternal(T *target, x *operand, e syntax.Expr, hint Ty case *syntax.CompositeLit: var typ, base Type + var isElem bool // true if composite literal is an element of an enclosing composite literal switch { case e.Type != nil: @@ -1171,11 +1172,12 @@ func (check *Checker) exprInternal(T *target, x *operand, e syntax.Expr, hint Ty case hint != nil: // no composite literal type present - use hint (element type of enclosing type) typ = hint - base, _ = deref(coreType(typ)) // *T implies &T{} - if base == nil { - check.errorf(e, InvalidLit, "invalid composite literal element type %s (no core type)", typ) - goto Error + base = typ + // *T implies &T{} + if b, ok := deref(coreType(base)); ok { + base = b } + isElem = true default: // TODO(gri) provide better error messages depending on context @@ -1361,7 +1363,15 @@ func (check *Checker) exprInternal(T *target, x *operand, e syntax.Expr, hint Ty } // if utyp is invalid, an error was reported before if isValid(utyp) { - check.errorf(e, InvalidLit, "invalid composite literal type %s", typ) + var qualifier string + if isElem { + qualifier = " element" + } + var cause string + if utyp == nil { + cause = " (no core type)" + } + check.errorf(e, InvalidLit, "invalid composite literal%s type %s%s", qualifier, typ, cause) goto Error } } diff --git a/src/go/types/expr.go b/src/go/types/expr.go index ac125c666b6c51..ea680b8504df3b 100644 --- a/src/go/types/expr.go +++ b/src/go/types/expr.go @@ -1129,6 +1129,7 @@ func (check *Checker) exprInternal(T *target, x *operand, e ast.Expr, hint Type) case *ast.CompositeLit: var typ, base Type + var isElem bool // true if composite literal is an element of an enclosing composite literal switch { case e.Type != nil: @@ -1151,11 +1152,12 @@ func (check *Checker) exprInternal(T *target, x *operand, e ast.Expr, hint Type) case hint != nil: // no composite literal type present - use hint (element type of enclosing type) typ = hint - base, _ = deref(coreType(typ)) // *T implies &T{} - if base == nil { - check.errorf(e, InvalidLit, "invalid composite literal element type %s (no core type)", typ) - goto Error + base = typ + // *T implies &T{} + if b, ok := deref(coreType(base)); ok { + base = b } + isElem = true default: // TODO(gri) provide better error messages depending on context @@ -1343,7 +1345,15 @@ func (check *Checker) exprInternal(T *target, x *operand, e ast.Expr, hint Type) } // if utyp is invalid, an error was reported before if isValid(utyp) { - check.errorf(e, InvalidLit, "invalid composite literal type %s", typ) + var qualifier string + if isElem { + qualifier = " element" + } + var cause string + if utyp == nil { + cause = " (no core type)" + } + check.errorf(e, InvalidLit, "invalid composite literal%s type %s%s", qualifier, typ, cause) goto Error } } diff --git a/src/internal/types/testdata/fixedbugs/issue68184.go b/src/internal/types/testdata/fixedbugs/issue68184.go new file mode 100644 index 00000000000000..9c77365aa9a527 --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue68184.go @@ -0,0 +1,38 @@ +// Copyright 2024 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 p + +type VeryLongStruct struct { + A1 int + A2 int + A3 int + A4 int + A5 int + A6 int + A7 int + A8 int + A9 int + A10 int + A11 int + A12 int + A13 int + A14 int + A15 int + A16 int + A17 int + A18 int + A19 int + A20 int +} + +func _() { + // The error messages in both these cases should print the + // struct name rather than the struct's underlying type. + + var x VeryLongStruct + x.B2 /* ERROR "x.B2 undefined (type VeryLongStruct has no field or method B2)" */ = false + + _ = []VeryLongStruct{{B2 /* ERROR "unknown field B2 in struct literal of type VeryLongStruct" */ : false}} +} From f234c9423bd87e7bf81ad7d1bab2b452c722b3b1 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 25 Jun 2024 17:33:15 -0700 Subject: [PATCH 073/866] go/types, types2: fix test name (for debugging) Change-Id: I982cf4da98af73ac41936a9d0b51588e3dbfd706 Reviewed-on: https://go-review.googlesource.com/c/go/+/594739 Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Tim King Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/api_test.go | 2 +- src/go/types/api_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/types2/api_test.go b/src/cmd/compile/internal/types2/api_test.go index f23c50ba461238..d73e8fa95ecf40 100644 --- a/src/cmd/compile/internal/types2/api_test.go +++ b/src/cmd/compile/internal/types2/api_test.go @@ -764,7 +764,7 @@ func TestUsesInfo(t *testing.T) { // Uses of fields are instantiated. {`package s1; type N[A any] struct{ a A }; var f = N[int]{}.a`, `a`, `field a int`}, - {`package s1; type N[A any] struct{ a A }; func (r N[B]) m(b B) { r.a = b }`, `a`, `field a B`}, + {`package s2; type N[A any] struct{ a A }; func (r N[B]) m(b B) { r.a = b }`, `a`, `field a B`}, // Uses of methods are uses of the instantiated method. {`package m0; type N[A any] int; func (r N[B]) m() { r.n() }; func (N[C]) n() {}`, `n`, `func (m0.N[B]).n()`}, diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go index 0854a119c2462e..f94fe6be4ccae4 100644 --- a/src/go/types/api_test.go +++ b/src/go/types/api_test.go @@ -763,7 +763,7 @@ func TestUsesInfo(t *testing.T) { // Uses of fields are instantiated. {`package s1; type N[A any] struct{ a A }; var f = N[int]{}.a`, `a`, `field a int`}, - {`package s1; type N[A any] struct{ a A }; func (r N[B]) m(b B) { r.a = b }`, `a`, `field a B`}, + {`package s2; type N[A any] struct{ a A }; func (r N[B]) m(b B) { r.a = b }`, `a`, `field a B`}, // Uses of methods are uses of the instantiated method. {`package m0; type N[A any] int; func (r N[B]) m() { r.n() }; func (N[C]) n() {}`, `n`, `func (m0.N[B]).n()`}, From 1d542efe234792c515b3c60ec76f15d11f83aba1 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 26 Jun 2024 15:20:41 -0700 Subject: [PATCH 074/866] go/types, types2: adjust Checker.unpackRecv signature slightly Instead of returning the receiver type name (rname), return the receiver type base expression (base), with pointer indirections stripped. The type base may or may not not be a type name. This is needed for further rewrites of the signature type-checking code. Adjust call sites accordingly to preserve existing behavior. For #51343. Change-Id: Ib472ca25d43ec340762d0a8dd1ad038568c2b2bb Reviewed-on: https://go-review.googlesource.com/c/go/+/595335 Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer Reviewed-by: Tim King LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley --- src/cmd/compile/internal/types2/resolver.go | 39 +++++++++++--------- src/cmd/compile/internal/types2/signature.go | 4 +- src/go/types/resolver.go | 39 +++++++++++--------- src/go/types/signature.go | 4 +- 4 files changed, 46 insertions(+), 40 deletions(-) diff --git a/src/cmd/compile/internal/types2/resolver.go b/src/cmd/compile/internal/types2/resolver.go index 4d9b4f92e1d86e..c47672fa1ea397 100644 --- a/src/cmd/compile/internal/types2/resolver.go +++ b/src/cmd/compile/internal/types2/resolver.go @@ -445,11 +445,11 @@ func (check *Checker) collectObjects() { } else { // method // d.Recv != nil - ptr, recv, _ := check.unpackRecv(s.Recv.Type, false) + ptr, base, _ := check.unpackRecv(s.Recv.Type, false) // Methods with invalid receiver cannot be associated to a type, and // methods with blank _ names are never found; no need to collect any // of them. They will still be type-checked with all the other functions. - if recv != nil && name != "_" { + if recv, _ := base.(*syntax.Name); recv != nil && name != "_" { methods = append(methods, methodInfo{obj, ptr, recv}) } check.recordDef(s.Name, obj) @@ -506,37 +506,43 @@ func (check *Checker) collectObjects() { } } -// unpackRecv unpacks a receiver type and returns its components: ptr indicates whether -// rtyp is a pointer receiver, rname is the receiver type name, and tparams are its -// type parameters, if any. The type parameters are only unpacked if unpackParams is -// set. If rname is nil, the receiver is unusable (i.e., the source has a bug which we -// cannot easily work around). -func (check *Checker) unpackRecv(rtyp syntax.Expr, unpackParams bool) (ptr bool, rname *syntax.Name, tparams []*syntax.Name) { -L: // unpack receiver type +// unpackRecv unpacks a receiver type expression and returns its components: ptr indicates +// whether rtyp is a pointer receiver, base is the receiver base type expression stripped +// of its type parameters (if any), and tparams are its type parameter names, if any. The +// type parameters are only unpacked if unpackParams is set. For instance, given the rtyp +// +// *T[A, _] +// +// ptr is true, base is T, and tparams is [A, _] (assuming unpackParams is set). +// Note that base may not be a *syntax.Name for erroneous programs. +func (check *Checker) unpackRecv(rtyp syntax.Expr, unpackParams bool) (ptr bool, base syntax.Expr, tparams []*syntax.Name) { + // unpack receiver type // This accepts invalid receivers such as ***T and does not // work for other invalid receivers, but we don't care. The // validity of receiver expressions is checked elsewhere. + base = rtyp +L: for { - switch t := rtyp.(type) { + switch t := base.(type) { case *syntax.ParenExpr: - rtyp = t.X + base = t.X // case *ast.StarExpr: // ptr = true - // rtyp = t.X + // base = t.X case *syntax.Operation: if t.Op != syntax.Mul || t.Y != nil { break } ptr = true - rtyp = t.X + base = t.X default: break L } } // unpack type parameters, if any - if ptyp, _ := rtyp.(*syntax.IndexExpr); ptyp != nil { - rtyp = ptyp.X + if ptyp, _ := base.(*syntax.IndexExpr); ptyp != nil { + base = ptyp.X if unpackParams { for _, arg := range syntax.UnpackListExpr(ptyp.Index) { var par *syntax.Name @@ -559,9 +565,6 @@ L: // unpack receiver type } } - // unpack receiver name - rname, _ = rtyp.(*syntax.Name) - return } diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go index ed4ca1f08df6d9..5dacd8fa1a32e5 100644 --- a/src/cmd/compile/internal/types2/signature.go +++ b/src/cmd/compile/internal/types2/signature.go @@ -103,7 +103,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] // collect generic receiver type parameters, if any // - a receiver type parameter is like any other type parameter, except that it is declared implicitly // - the receiver specification acts as local declaration for its type parameters, which may be blank - _, rname, rparams := check.unpackRecv(recvPar.Type, true) + _, base, rparams := check.unpackRecv(recvPar.Type, true) if len(rparams) > 0 { // The scope of the type parameter T in "func (r T[T]) f()" // starts after f, not at "r"; see #52038. @@ -131,7 +131,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] // determine receiver type to get its type parameters // and the respective type parameter bounds var recvTParams []*TypeParam - if rname != nil { + if rname := base.(*syntax.Name); rname != nil { // recv should be a Named type (otherwise an error is reported elsewhere) // Also: Don't report an error via genericType since it will be reported // again when we type-check the signature. diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index 041c4536672fe5..5d6bf7aedac857 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -437,11 +437,11 @@ func (check *Checker) collectObjects() { // when type checking the function type. Confirm that // we don't need to check tparams here. - ptr, recv, _ := check.unpackRecv(d.decl.Recv.List[0].Type, false) + ptr, base, _ := check.unpackRecv(d.decl.Recv.List[0].Type, false) // (Methods with invalid receiver cannot be associated to a type, and // methods with blank _ names are never found; no need to collect any // of them. They will still be type-checked with all the other functions.) - if recv != nil && name != "_" { + if recv, _ := base.(*ast.Ident); recv != nil && name != "_" { methods = append(methods, methodInfo{obj, ptr, recv}) } check.recordDef(d.decl.Name, obj) @@ -496,33 +496,39 @@ func (check *Checker) collectObjects() { } } -// unpackRecv unpacks a receiver type and returns its components: ptr indicates whether -// rtyp is a pointer receiver, rname is the receiver type name, and tparams are its -// type parameters, if any. The type parameters are only unpacked if unpackParams is -// set. If rname is nil, the receiver is unusable (i.e., the source has a bug which we -// cannot easily work around). -func (check *Checker) unpackRecv(rtyp ast.Expr, unpackParams bool) (ptr bool, rname *ast.Ident, tparams []*ast.Ident) { -L: // unpack receiver type +// unpackRecv unpacks a receiver type expression and returns its components: ptr indicates +// whether rtyp is a pointer receiver, base is the receiver base type expression stripped +// of its type parameters (if any), and tparams are its type parameter names, if any. The +// type parameters are only unpacked if unpackParams is set. For instance, given the rtyp +// +// *T[A, _] +// +// ptr is true, base is T, and tparams is [A, _] (assuming unpackParams is set). +// Note that base may not be a *ast.Ident for erroneous programs. +func (check *Checker) unpackRecv(rtyp ast.Expr, unpackParams bool) (ptr bool, base ast.Expr, tparams []*ast.Ident) { + // unpack receiver type // This accepts invalid receivers such as ***T and does not // work for other invalid receivers, but we don't care. The // validity of receiver expressions is checked elsewhere. + base = rtyp +L: for { - switch t := rtyp.(type) { + switch t := base.(type) { case *ast.ParenExpr: - rtyp = t.X + base = t.X case *ast.StarExpr: ptr = true - rtyp = t.X + base = t.X default: break L } } // unpack type parameters, if any - switch rtyp.(type) { + switch base.(type) { case *ast.IndexExpr, *ast.IndexListExpr: - ix := typeparams.UnpackIndexExpr(rtyp) - rtyp = ix.X + ix := typeparams.UnpackIndexExpr(base) + base = ix.X if unpackParams { for _, arg := range ix.Indices { var par *ast.Ident @@ -544,9 +550,6 @@ L: // unpack receiver type } } - // unpack receiver name - rname, _ = rtyp.(*ast.Ident) - return } diff --git a/src/go/types/signature.go b/src/go/types/signature.go index 651a333e24f8bd..bcac0da012824c 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -114,7 +114,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast // collect generic receiver type parameters, if any // - a receiver type parameter is like any other type parameter, except that it is declared implicitly // - the receiver specification acts as local declaration for its type parameters, which may be blank - _, rname, rparams := check.unpackRecv(recvPar.List[0].Type, true) + _, base, rparams := check.unpackRecv(recvPar.List[0].Type, true) if len(rparams) > 0 { // The scope of the type parameter T in "func (r T[T]) f()" // starts after f, not at "r"; see #52038. @@ -139,7 +139,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast // determine receiver type to get its type parameters // and the respective type parameter bounds var recvTParams []*TypeParam - if rname != nil { + if rname := base.(*ast.Ident); rname != nil { // recv should be a Named type (otherwise an error is reported elsewhere) // Also: Don't report an error via genericType since it will be reported // again when we type-check the signature. From ea82219d1c92ecdad513c022ab603358e500d0bb Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 25 Jun 2024 17:31:26 -0700 Subject: [PATCH 075/866] go/types, types2: completely rewrite method receiver type checking 1) Factor out handling of receiver from Checker.funcType into Checker.collectRecv. Analyze the receiver parameter "manually" without resorting to calling Checker.collectParams. The code is more straight-forward and error handling is simpler because constructing the receiver type and variable is all handled in one function. 2) Change Checker.collectParams to collect parameter names and corresponding parameter variables, but do not declare them. Instead return two equal-length slices of parameter names and variables for later declaration. 3) Streamline Checker.funcType into a sequence of simple steps. By declaring the receiver and parameters after type parameters, there is no need for a temporary scope and scope squashing anymore. 4) Simplify Checker.unpackRecv some more: don't strip multiple *'s from receiver type expression because we don't typecheck that expression as a whole later (we don't use collectParams for receiver types anymore). If we have a **T receiver, we need to use *T (one * stripped) as receiver base type expression so that we can report an error later. 5) Remove Checker.recvTParamMap and associated machinery as it is not needed anymore. 6) Remove Scope.Squash/squash as it is not needed anymore. 7) Remove the explicit scope parameter from Checker.collectParams as it is not needed anymore. 8) Minor adjustments to tests: in some cases, error positions have shifted slightly (because we don't use Checker.collectParams to typecheck receivers anymore), and in some cases duplicate errors don't appear anymore (resolves TODOs). Fixes #51343. Change-Id: Ia77e939bb68e2912ef2e4ed68d2a7a0ad605c5ba Reviewed-on: https://go-review.googlesource.com/c/go/+/594740 Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/types2/check.go | 16 +- src/cmd/compile/internal/types2/resolver.go | 25 +- src/cmd/compile/internal/types2/scope.go | 35 --- src/cmd/compile/internal/types2/signature.go | 233 +++++++++-------- src/cmd/compile/internal/types2/typexpr.go | 10 +- src/go/types/check.go | 2 - src/go/types/generate_test.go | 2 +- src/go/types/resolver.go | 19 +- src/go/types/scope.go | 35 --- src/go/types/signature.go | 247 ++++++++++-------- src/go/types/typexpr.go | 10 +- src/internal/types/testdata/check/issues0.go | 2 +- .../types/testdata/fixedbugs/issue47818.go | 2 +- .../types/testdata/fixedbugs/issue51339.go | 6 +- 14 files changed, 296 insertions(+), 348 deletions(-) diff --git a/src/cmd/compile/internal/types2/check.go b/src/cmd/compile/internal/types2/check.go index 91ad474e9df315..44274b194bc462 100644 --- a/src/cmd/compile/internal/types2/check.go +++ b/src/cmd/compile/internal/types2/check.go @@ -139,14 +139,13 @@ type Checker struct { // information collected during type-checking of a set of package files // (initialized by Files, valid only for the duration of check.Files; // maps and lists are allocated on demand) - files []*syntax.File // list of package files - versions map[*syntax.PosBase]string // maps files to version strings (each file has an entry); shared with Info.FileVersions if present - imports []*PkgName // list of imported packages - dotImportMap map[dotImportKey]*PkgName // maps dot-imported objects to the package they were dot-imported through - recvTParamMap map[*syntax.Name]*TypeParam // maps blank receiver type parameters to their type - brokenAliases map[*TypeName]bool // set of aliases with broken (not yet determined) types - unionTypeSets map[*Union]*_TypeSet // computed type sets for union types - mono monoGraph // graph for detecting non-monomorphizable instantiation loops + files []*syntax.File // list of package files + versions map[*syntax.PosBase]string // maps files to version strings (each file has an entry); shared with Info.FileVersions if present + imports []*PkgName // list of imported packages + dotImportMap map[dotImportKey]*PkgName // maps dot-imported objects to the package they were dot-imported through + brokenAliases map[*TypeName]bool // set of aliases with broken (not yet determined) types + unionTypeSets map[*Union]*_TypeSet // computed type sets for union types + mono monoGraph // graph for detecting non-monomorphizable instantiation loops firstErr error // first error encountered methods map[*TypeName][]*Func // maps package scope type names to associated non-blank (non-interface) methods @@ -474,7 +473,6 @@ func (check *Checker) checkFiles(files []*syntax.File) { check.dotImportMap = nil check.pkgPathMap = nil check.seenPkgMap = nil - check.recvTParamMap = nil check.brokenAliases = nil check.unionTypeSets = nil check.ctxt = nil diff --git a/src/cmd/compile/internal/types2/resolver.go b/src/cmd/compile/internal/types2/resolver.go index c47672fa1ea397..b381b541b75785 100644 --- a/src/cmd/compile/internal/types2/resolver.go +++ b/src/cmd/compile/internal/types2/resolver.go @@ -517,27 +517,10 @@ func (check *Checker) collectObjects() { // Note that base may not be a *syntax.Name for erroneous programs. func (check *Checker) unpackRecv(rtyp syntax.Expr, unpackParams bool) (ptr bool, base syntax.Expr, tparams []*syntax.Name) { // unpack receiver type - // This accepts invalid receivers such as ***T and does not - // work for other invalid receivers, but we don't care. The - // validity of receiver expressions is checked elsewhere. - base = rtyp -L: - for { - switch t := base.(type) { - case *syntax.ParenExpr: - base = t.X - // case *ast.StarExpr: - // ptr = true - // base = t.X - case *syntax.Operation: - if t.Op != syntax.Mul || t.Y != nil { - break - } - ptr = true - base = t.X - default: - break L - } + base = syntax.Unparen(rtyp) + if t, _ := base.(*syntax.Operation); t != nil && t.Op == syntax.Mul && t.Y == nil { + ptr = true + base = syntax.Unparen(t.X) } // unpack type parameters, if any diff --git a/src/cmd/compile/internal/types2/scope.go b/src/cmd/compile/internal/types2/scope.go index f5ad25e81e1c3e..f7a16252f9b6cb 100644 --- a/src/cmd/compile/internal/types2/scope.go +++ b/src/cmd/compile/internal/types2/scope.go @@ -141,41 +141,6 @@ func (s *Scope) insert(name string, obj Object) { s.elems[name] = obj } -// Squash merges s with its parent scope p by adding all -// objects of s to p, adding all children of s to the -// children of p, and removing s from p's children. -// The function f is called for each object obj in s which -// has an object alt in p. s should be discarded after -// having been squashed. -func (s *Scope) Squash(err func(obj, alt Object)) { - p := s.parent - assert(p != nil) - for name, obj := range s.elems { - obj = resolve(name, obj) - obj.setParent(nil) - if alt := p.Insert(obj); alt != nil { - err(obj, alt) - } - } - - j := -1 // index of s in p.children - for i, ch := range p.children { - if ch == s { - j = i - break - } - } - assert(j >= 0) - k := len(p.children) - 1 - p.children[j] = p.children[k] - p.children = p.children[:k] - - p.children = append(p.children, s.children...) - - s.children = nil - s.elems = nil -} - // Pos and End describe the scope's source code extent [pos, end). // The results are guaranteed to be valid only if the type-checked // AST has complete position information. The extent is undefined diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go index 5dacd8fa1a32e5..8d597c9e6cfa71 100644 --- a/src/cmd/compile/internal/types2/signature.go +++ b/src/cmd/compile/internal/types2/signature.go @@ -99,126 +99,140 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] sig.scope = check.scope defer check.closeScope() + // collect method receiver, if any + var recv *Var + var rparams *TypeParamList if recvPar != nil { - // collect generic receiver type parameters, if any - // - a receiver type parameter is like any other type parameter, except that it is declared implicitly - // - the receiver specification acts as local declaration for its type parameters, which may be blank - _, base, rparams := check.unpackRecv(recvPar.Type, true) - if len(rparams) > 0 { - // The scope of the type parameter T in "func (r T[T]) f()" - // starts after f, not at "r"; see #52038. - scopePos := ftyp.Pos() - tparams := make([]*TypeParam, len(rparams)) - for i, rparam := range rparams { - tparams[i] = check.declareTypeParam(rparam, scopePos) - } - sig.rparams = bindTParams(tparams) - // Blank identifiers don't get declared, so naive type-checking of the - // receiver type expression would fail in Checker.collectParams below, - // when Checker.ident cannot resolve the _ to a type. - // - // Checker.recvTParamMap maps these blank identifiers to their type parameter - // types, so that they may be resolved in Checker.ident when they fail - // lookup in the scope. - for i, p := range rparams { - if p.Value == "_" { - if check.recvTParamMap == nil { - check.recvTParamMap = make(map[*syntax.Name]*TypeParam) - } - check.recvTParamMap[p] = tparams[i] - } - } - // determine receiver type to get its type parameters - // and the respective type parameter bounds - var recvTParams []*TypeParam - if rname := base.(*syntax.Name); rname != nil { - // recv should be a Named type (otherwise an error is reported elsewhere) - // Also: Don't report an error via genericType since it will be reported - // again when we type-check the signature. - // TODO(gri) maybe the receiver should be marked as invalid instead? - if recv := asNamed(check.genericType(rname, nil)); recv != nil { - recvTParams = recv.TypeParams().list() - } - } - // provide type parameter bounds - if len(tparams) == len(recvTParams) { - smap := makeRenameMap(recvTParams, tparams) - for i, tpar := range tparams { - recvTPar := recvTParams[i] - check.mono.recordCanon(tpar, recvTPar) - // recvTPar.bound is (possibly) parameterized in the context of the - // receiver type declaration. Substitute parameters for the current - // context. - tpar.bound = check.subst(tpar.obj.pos, recvTPar.bound, smap, nil, check.context()) - } - } else if len(tparams) < len(recvTParams) { - // Reporting an error here is a stop-gap measure to avoid crashes in the - // compiler when a type parameter/argument cannot be inferred later. It - // may lead to follow-on errors (see issues go.dev/issue/51339, go.dev/issue/51343). - // TODO(gri) find a better solution - got := measure(len(tparams), "type parameter") - check.errorf(recvPar, BadRecv, "got %s, but receiver base type declares %d", got, len(recvTParams)) - } - } + // all type parameters' scopes start after the method name + scopePos := ftyp.Pos() + recv, rparams = check.collectRecv(recvPar, scopePos) } + // collect and declare function type parameters if tparams != nil { // The parser will complain about invalid type parameters for methods. check.collectTypeParams(&sig.tparams, tparams) } - // Use a temporary scope for all parameter declarations and then - // squash that scope into the parent scope (and report any - // redeclarations at that time). - // - // TODO(adonovan): now that each declaration has the correct - // scopePos, there should be no need for scope squashing. - // Audit to ensure all lookups honor scopePos and simplify. - scope := NewScope(check.scope, nopos, nopos, "function body (temp. scope)") - scopePos := syntax.EndPos(ftyp) // all parameters' scopes start after the signature + // collect ordinary and result parameters + pnames, params, variadic := check.collectParams(ftyp.ParamList, true) + rnames, results, _ := check.collectParams(ftyp.ResultList, false) - // collect and typecheck receiver, incoming parameters, and results - if recvPar != nil { - // spec: "The receiver is specified via an extra parameter section preceding the - // method name. That parameter section must declare a single parameter, the receiver." - recvList, _ := check.collectParams(scope, []*syntax.Field{recvPar}, false, scopePos) // use rewritten receiver type, if any - var recv *Var - switch len(recvList) { - case 0: - // error reported by parser - recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by validateRecv - default: - // error reported by parser - check.error(recvList[len(recvList)-1].Pos(), InvalidRecv, "method has multiple receivers") - fallthrough // continue with first receiver - case 1: - recv = recvList[0] - } - sig.recv = recv - // Delay validation of receiver type as it may cause premature expansion - // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). - check.later(func() { - check.validRecv(recv, sig.RecvTypeParams() != nil) - }).describef(recv, "validRecv(%s)", recv) + // declare named receiver, ordinary, and result parameters + scopePos := syntax.EndPos(ftyp) // all parameter's scopes start after the signature + if recv != nil && recv.name != "" { + check.declare(check.scope, recvPar.Name, recv, scopePos) } + check.declareParams(pnames, params, scopePos) + check.declareParams(rnames, results, scopePos) - params, variadic := check.collectParams(scope, ftyp.ParamList, true, scopePos) - results, _ := check.collectParams(scope, ftyp.ResultList, false, scopePos) + sig.recv = recv + sig.rparams = rparams sig.params = NewTuple(params...) sig.results = NewTuple(results...) sig.variadic = variadic +} + +// collectRecv extracts the method receiver and its type parameters (if any) from rparam. +// It declares the type parameters (but not the receiver) in the the current scope, and +// returns the receiver variable and its type parameter list (if any). +func (check *Checker) collectRecv(rparam *syntax.Field, scopePos syntax.Pos) (recv *Var, recvTParamsList *TypeParamList) { + // Unpack the receiver parameter which is of the form + // + // "(" [rname] ["*"] rbase ["[" rtparams "]"] ")" + // + // The receiver name rname, the pointer indirection, and the + // receiver type parameters rtparams may not be present. + rptr, rbase, rtparams := check.unpackRecv(rparam.Type, true) + + // Determine the receiver base type. + var recvType Type = Typ[Invalid] + if rtparams == nil { + // If there are no type parameters, we can simply typecheck rbase. + // If rbase denotes a generic type, varType will complain. Further + // receiver constraints will be checked later, with validRecv. + recvType = check.varType(rbase) + } else { + // If there are type parameters, rbase must denote a generic base type. + var baseType *Named + var cause string + if t := check.genericType(rbase, &cause); cause == "" { + baseType = asNamed(t) + } else { + check.errorf(rbase, InvalidRecv, "%s", cause) + // ok to continue + } - scope.Squash(func(obj, alt Object) { - err := check.newError(DuplicateDecl) - err.addf(obj, "%s redeclared in this block", obj.Name()) - err.addAltDecl(alt) - err.report() - }) + // Collect the type parameters declared by the receiver (see also + // Checker.collectTypeParams). The scope of the type parameter T in + // "func (r T[T]) f() {}" starts after f, not at r, so we declare it + // after typechecking rbase (see go.dev/issue/52038). + recvTParams := make([]*TypeParam, len(rtparams)) + for i, rparam := range rtparams { + recvTParams[i] = check.declareTypeParam(rparam, scopePos) + } + recvTParamsList = bindTParams(recvTParams) + + // Get the type parameter bounds from the receiver base type + // and set them for the respective (local) receiver type parameters. + if baseType != nil { + baseTParams := baseType.TypeParams().list() + if len(recvTParams) == len(baseTParams) { + smap := makeRenameMap(baseTParams, recvTParams) + for i, recvTPar := range recvTParams { + baseTPar := baseTParams[i] + check.mono.recordCanon(recvTPar, baseTPar) + // baseTPar.bound is possibly parameterized by other type parameters + // defined by the generic base type. Substitute those parameters with + // the receiver type parameters declared by the current method. + recvTPar.bound = check.subst(recvTPar.obj.pos, baseTPar.bound, smap, nil, check.context()) + } + } else { + got := measure(len(recvTParams), "type parameter") + check.errorf(rbase, BadRecv, "receiver declares %s, but receiver base type declares %d", got, len(baseTParams)) + } + + // The type parameters declared by the receiver also serve as + // type arguments for the receiver type. Instantiate the receiver. + check.verifyVersionf(rbase, go1_18, "type instantiation") + targs := make([]Type, len(recvTParams)) + for i, targ := range recvTParams { + targs[i] = targ + } + recvType = check.instance(rparam.Type.Pos(), baseType, targs, nil, check.context()) + check.recordInstance(rbase, targs, recvType) + } + } + + // Reestablish pointerness if needed (but avoid a pointer to an invalid type). + if rptr && isValid(recvType) { + recvType = NewPointer(recvType) + } + + // Create the receiver parameter. + if rname := rparam.Name; rname != nil && rname.Value != "" { + // named receiver + recv = NewParam(rname.Pos(), check.pkg, rname.Value, recvType) + // named receiver is declared by caller + } else { + // anonymous receiver + recv = NewParam(rparam.Pos(), check.pkg, "", recvType) + check.recordImplicit(rparam, recv) + } + + // Delay validation of receiver type as it may cause premature expansion of types + // the receiver type is dependent on (see go.dev/issue/51232, go.dev/issue/51233). + check.later(func() { + check.validRecv(recv, len(rtparams) != 0) + }).describef(recv, "validRecv(%s)", recv) + + return } -// collectParams declares the parameters of list in scope and returns the corresponding -// variable list. -func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadicOk bool, scopePos syntax.Pos) (params []*Var, variadic bool) { +// collectParams collects (but does not delare) all parameters of list and returns +// the list of parameter names, corresponding parameter variables, and whether the +// parameter list is variadic. Anonymous parameters are recorded with nil names. +func (check *Checker) collectParams(list []*syntax.Field, variadicOk bool) (names []*syntax.Name, params []*Var, variadic bool) { if list == nil { return } @@ -253,13 +267,15 @@ func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadic // ok to continue } par := NewParam(field.Name.Pos(), check.pkg, name, typ) - check.declare(scope, field.Name, par, scopePos) + // named parameter is declared by caller + names = append(names, field.Name) params = append(params, par) named = true } else { // anonymous parameter par := NewParam(field.Pos(), check.pkg, "", typ) check.recordImplicit(field, par) + names = append(names, nil) params = append(params, par) anonymous = true } @@ -282,6 +298,15 @@ func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadic return } +// declareParams declares each named parameter in the current scope. +func (check *Checker) declareParams(names []*syntax.Name, params []*Var, scopePos syntax.Pos) { + for i, name := range names { + if name != nil && name.Value != "" { + check.declare(check.scope, name, params[i], scopePos) + } + } +} + // validRecv verifies that the receiver satisfies its respective spec requirements // and reports an error otherwise. If hasTypeParams is set, the receiver declares // type parameters. diff --git a/src/cmd/compile/internal/types2/typexpr.go b/src/cmd/compile/internal/types2/typexpr.go index 6c121ae0545959..3966a21693bc14 100644 --- a/src/cmd/compile/internal/types2/typexpr.go +++ b/src/cmd/compile/internal/types2/typexpr.go @@ -28,15 +28,7 @@ func (check *Checker) ident(x *operand, e *syntax.Name, def *TypeName, wantType switch obj { case nil: if e.Value == "_" { - // Blank identifiers are never declared, but the current identifier may - // be a placeholder for a receiver type parameter. In this case we can - // resolve its type and object from Checker.recvTParamMap. - if tpar := check.recvTParamMap[e]; tpar != nil { - x.mode = typexpr - x.typ = tpar - } else { - check.error(e, InvalidBlank, "cannot use _ as value or type") - } + check.error(e, InvalidBlank, "cannot use _ as value or type") } else { check.errorf(e, UndeclaredName, "undefined: %s", e.Value) } diff --git a/src/go/types/check.go b/src/go/types/check.go index 1a5a41a3bb4b99..a4d0ff97d5b041 100644 --- a/src/go/types/check.go +++ b/src/go/types/check.go @@ -161,7 +161,6 @@ type Checker struct { versions map[*ast.File]string // maps files to version strings (each file has an entry); shared with Info.FileVersions if present imports []*PkgName // list of imported packages dotImportMap map[dotImportKey]*PkgName // maps dot-imported objects to the package they were dot-imported through - recvTParamMap map[*ast.Ident]*TypeParam // maps blank receiver type parameters to their type brokenAliases map[*TypeName]bool // set of aliases with broken (not yet determined) types unionTypeSets map[*Union]*_TypeSet // computed type sets for union types mono monoGraph // graph for detecting non-monomorphizable instantiation loops @@ -496,7 +495,6 @@ func (check *Checker) checkFiles(files []*ast.File) { check.dotImportMap = nil check.pkgPathMap = nil check.seenPkgMap = nil - check.recvTParamMap = nil check.brokenAliases = nil check.unionTypeSets = nil check.ctxt = nil diff --git a/src/go/types/generate_test.go b/src/go/types/generate_test.go index 86b77162961ec8..79a8e77a75c45b 100644 --- a/src/go/types/generate_test.go +++ b/src/go/types/generate_test.go @@ -162,7 +162,7 @@ var filemap = map[string]action{ "package.go": nil, "pointer.go": nil, "predicates.go": nil, - "scope.go": func(f *ast.File) { fixTokenPos(f); renameIdents(f, "Squash->squash", "InsertLazy->_InsertLazy") }, + "scope.go": func(f *ast.File) { fixTokenPos(f); renameIdents(f, "InsertLazy->_InsertLazy") }, "selection.go": nil, "sizes.go": func(f *ast.File) { renameIdents(f, "IsSyncAtomicAlign64->_IsSyncAtomicAlign64") }, "slice.go": nil, diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index 5d6bf7aedac857..2953c4fffc86f0 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -507,21 +507,10 @@ func (check *Checker) collectObjects() { // Note that base may not be a *ast.Ident for erroneous programs. func (check *Checker) unpackRecv(rtyp ast.Expr, unpackParams bool) (ptr bool, base ast.Expr, tparams []*ast.Ident) { // unpack receiver type - // This accepts invalid receivers such as ***T and does not - // work for other invalid receivers, but we don't care. The - // validity of receiver expressions is checked elsewhere. - base = rtyp -L: - for { - switch t := base.(type) { - case *ast.ParenExpr: - base = t.X - case *ast.StarExpr: - ptr = true - base = t.X - default: - break L - } + base = ast.Unparen(rtyp) + if t, _ := base.(*ast.StarExpr); t != nil { + ptr = true + base = ast.Unparen(t.X) } // unpack type parameters, if any diff --git a/src/go/types/scope.go b/src/go/types/scope.go index 176928eda92a55..b19a36bae198b4 100644 --- a/src/go/types/scope.go +++ b/src/go/types/scope.go @@ -144,41 +144,6 @@ func (s *Scope) insert(name string, obj Object) { s.elems[name] = obj } -// Squash merges s with its parent scope p by adding all -// objects of s to p, adding all children of s to the -// children of p, and removing s from p's children. -// The function f is called for each object obj in s which -// has an object alt in p. s should be discarded after -// having been squashed. -func (s *Scope) squash(err func(obj, alt Object)) { - p := s.parent - assert(p != nil) - for name, obj := range s.elems { - obj = resolve(name, obj) - obj.setParent(nil) - if alt := p.Insert(obj); alt != nil { - err(obj, alt) - } - } - - j := -1 // index of s in p.children - for i, ch := range p.children { - if ch == s { - j = i - break - } - } - assert(j >= 0) - k := len(p.children) - 1 - p.children[j] = p.children[k] - p.children = p.children[:k] - - p.children = append(p.children, s.children...) - - s.children = nil - s.elems = nil -} - // Pos and End describe the scope's source code extent [pos, end). // The results are guaranteed to be valid only if the type-checked // AST has complete position information. The extent is undefined diff --git a/src/go/types/signature.go b/src/go/types/signature.go index bcac0da012824c..69266cf4d92ec2 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -110,128 +110,158 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast sig.scope = check.scope defer check.closeScope() - if recvPar != nil && len(recvPar.List) > 0 { - // collect generic receiver type parameters, if any - // - a receiver type parameter is like any other type parameter, except that it is declared implicitly - // - the receiver specification acts as local declaration for its type parameters, which may be blank - _, base, rparams := check.unpackRecv(recvPar.List[0].Type, true) - if len(rparams) > 0 { - // The scope of the type parameter T in "func (r T[T]) f()" - // starts after f, not at "r"; see #52038. - scopePos := ftyp.Params.Pos() - tparams := check.declareTypeParams(nil, rparams, scopePos) - sig.rparams = bindTParams(tparams) - // Blank identifiers don't get declared, so naive type-checking of the - // receiver type expression would fail in Checker.collectParams below, - // when Checker.ident cannot resolve the _ to a type. - // - // Checker.recvTParamMap maps these blank identifiers to their type parameter - // types, so that they may be resolved in Checker.ident when they fail - // lookup in the scope. - for i, p := range rparams { - if p.Name == "_" { - if check.recvTParamMap == nil { - check.recvTParamMap = make(map[*ast.Ident]*TypeParam) - } - check.recvTParamMap[p] = tparams[i] - } - } - // determine receiver type to get its type parameters - // and the respective type parameter bounds - var recvTParams []*TypeParam - if rname := base.(*ast.Ident); rname != nil { - // recv should be a Named type (otherwise an error is reported elsewhere) - // Also: Don't report an error via genericType since it will be reported - // again when we type-check the signature. - // TODO(gri) maybe the receiver should be marked as invalid instead? - if recv := asNamed(check.genericType(rname, nil)); recv != nil { - recvTParams = recv.TypeParams().list() - } - } - // provide type parameter bounds - if len(tparams) == len(recvTParams) { - smap := makeRenameMap(recvTParams, tparams) - for i, tpar := range tparams { - recvTPar := recvTParams[i] - check.mono.recordCanon(tpar, recvTPar) - // recvTPar.bound is (possibly) parameterized in the context of the - // receiver type declaration. Substitute parameters for the current - // context. - tpar.bound = check.subst(tpar.obj.pos, recvTPar.bound, smap, nil, check.context()) - } - } else if len(tparams) < len(recvTParams) { - // Reporting an error here is a stop-gap measure to avoid crashes in the - // compiler when a type parameter/argument cannot be inferred later. It - // may lead to follow-on errors (see issues go.dev/issue/51339, go.dev/issue/51343). - // TODO(gri) find a better solution - got := measure(len(tparams), "type parameter") - check.errorf(recvPar, BadRecv, "got %s, but receiver base type declares %d", got, len(recvTParams)) - } + // collect method receiver, if any + var recv *Var + var rparams *TypeParamList + if recvPar != nil && recvPar.NumFields() > 0 { + // We have at least one receiver; make sure we don't have more than one. + if n := len(recvPar.List); n > 1 { + check.error(recvPar.List[n-1], InvalidRecv, "method has multiple receivers") + // continue with first one } + // all type parameters' scopes start after the method name + scopePos := ftyp.Pos() + recv, rparams = check.collectRecv(recvPar.List[0], scopePos) } + // collect and declare function type parameters if ftyp.TypeParams != nil { - check.collectTypeParams(&sig.tparams, ftyp.TypeParams) // Always type-check method type parameters but complain that they are not allowed. // (A separate check is needed when type-checking interface method signatures because // they don't have a receiver specification.) if recvPar != nil { check.error(ftyp.TypeParams, InvalidMethodTypeParams, "methods cannot have type parameters") } + check.collectTypeParams(&sig.tparams, ftyp.TypeParams) } - // Use a temporary scope for all parameter declarations and then - // squash that scope into the parent scope (and report any - // redeclarations at that time). - // - // TODO(adonovan): now that each declaration has the correct - // scopePos, there should be no need for scope squashing. - // Audit to ensure all lookups honor scopePos and simplify. - scope := NewScope(check.scope, nopos, nopos, "function body (temp. scope)") - scopePos := ftyp.End() // all parameters' scopes start after the signature - - // collect and typecheck receiver, incoming parameters, and results - if recvPar != nil { - // spec: "The receiver is specified via an extra parameter section preceding the - // method name. That parameter section must declare a single parameter, the receiver." - recvList, _ := check.collectParams(scope, recvPar, false, scopePos) // use rewritten receiver type, if any - var recv *Var - switch len(recvList) { - case 0: - // error reported by resolver - recv = NewParam(nopos, nil, "", Typ[Invalid]) // use invalid type so it's ignored by validateRecv - default: - // more than one receiver - check.error(recvList[len(recvList)-1], InvalidRecv, "method has multiple receivers") - fallthrough // continue with first receiver - case 1: - recv = recvList[0] - } - sig.recv = recv - // Delay validation of receiver type as it may cause premature expansion - // of types the receiver type is dependent on (see issues go.dev/issue/51232, go.dev/issue/51233). - check.later(func() { - check.validRecv(recv, sig.RecvTypeParams() != nil) - }).describef(recv, "validRecv(%s)", recv) + // collect ordinary and result parameters + pnames, params, variadic := check.collectParams(ftyp.Params, true) + rnames, results, _ := check.collectParams(ftyp.Results, false) + + // declare named receiver, ordinary, and result parameters + scopePos := ftyp.End() // all parameter's scopes start after the signature + if recv != nil && recv.name != "" { + check.declare(check.scope, recvPar.List[0].Names[0], recv, scopePos) } + check.declareParams(pnames, params, scopePos) + check.declareParams(rnames, results, scopePos) - params, variadic := check.collectParams(scope, ftyp.Params, true, scopePos) - results, _ := check.collectParams(scope, ftyp.Results, false, scopePos) + sig.recv = recv + sig.rparams = rparams sig.params = NewTuple(params...) sig.results = NewTuple(results...) sig.variadic = variadic +} + +// collectRecv extracts the method receiver and its type parameters (if any) from rparam. +// It declares the type parameters (but not the receiver) in the the current scope, and +// returns the receiver variable and its type parameter list (if any). +func (check *Checker) collectRecv(rparam *ast.Field, scopePos token.Pos) (recv *Var, recvTParamsList *TypeParamList) { + // Unpack the receiver parameter which is of the form + // + // "(" [rfield] ["*"] rbase ["[" rtparams "]"] ")" + // + // The receiver name rname, the pointer indirection, and the + // receiver type parameters rtparams may not be present. + rptr, rbase, rtparams := check.unpackRecv(rparam.Type, true) + + // Determine the receiver base type. + var recvType Type = Typ[Invalid] + if rtparams == nil { + // If there are no type parameters, we can simply typecheck rbase. + // If rbase denotes a generic type, varType will complain. Further + // receiver constraints will be checked later, with validRecv. + recvType = check.varType(rbase) + } else { + // If there are type parameters, rbase must denote a generic base type. + var baseType *Named + var cause string + if t := check.genericType(rbase, &cause); cause == "" { + baseType = asNamed(t) + } else { + check.errorf(rbase, InvalidRecv, "%s", cause) + // ok to continue + } - scope.squash(func(obj, alt Object) { - err := check.newError(DuplicateDecl) - err.addf(obj, "%s redeclared in this block", obj.Name()) - err.addAltDecl(alt) - err.report() - }) + // Collect the type parameters declared by the receiver (see also + // Checker.collectTypeParams). The scope of the type parameter T in + // "func (r T[T]) f() {}" starts after f, not at r, so we declare it + // after typechecking rbase (see go.dev/issue/52038). + recvTParams := check.declareTypeParams(nil, rtparams, scopePos) + recvTParamsList = bindTParams(recvTParams) + + // Get the type parameter bounds from the receiver base type + // and set them for the respective (local) receiver type parameters. + if baseType != nil { + baseTParams := baseType.TypeParams().list() + if len(recvTParams) == len(baseTParams) { + smap := makeRenameMap(baseTParams, recvTParams) + for i, recvTPar := range recvTParams { + baseTPar := baseTParams[i] + check.mono.recordCanon(recvTPar, baseTPar) + // baseTPar.bound is possibly parameterized by other type parameters + // defined by the generic base type. Substitute those parameters with + // the receiver type parameters declared by the current method. + recvTPar.bound = check.subst(recvTPar.obj.pos, baseTPar.bound, smap, nil, check.context()) + } + } else { + got := measure(len(recvTParams), "type parameter") + check.errorf(rbase, BadRecv, "receiver declares %s, but receiver base type declares %d", got, len(baseTParams)) + } + + // The type parameters declared by the receiver also serve as + // type arguments for the receiver type. Instantiate the receiver. + check.verifyVersionf(rbase, go1_18, "type instantiation") + targs := make([]Type, len(recvTParams)) + for i, targ := range recvTParams { + targs[i] = targ + } + recvType = check.instance(rparam.Type.Pos(), baseType, targs, nil, check.context()) + check.recordInstance(rbase, targs, recvType) + } + } + + // Reestablish pointerness if needed (but avoid a pointer to an invalid type). + if rptr && isValid(recvType) { + recvType = NewPointer(recvType) + } + + // Make sure we have no more than one receiver name. + var rname *ast.Ident + if n := len(rparam.Names); n >= 1 { + if n > 1 { + check.error(rparam.Names[n-1], InvalidRecv, "method has multiple receivers") + } + rname = rparam.Names[0] + } + + // Create the receiver parameter. + if rname != nil && rname.Name != "" { + // named receiver + recv = NewParam(rname.Pos(), check.pkg, rname.Name, recvType) + // In this case, the receiver is declared by the caller + // because it must be declared after any type parameters + // (otherwise it might shadow one of them). + } else { + // anonymous receiver + recv = NewParam(rparam.Pos(), check.pkg, "", recvType) + check.recordImplicit(rparam, recv) + } + + // Delay validation of receiver type as it may cause premature expansion of types + // the receiver type is dependent on (see go.dev/issue/51232, go.dev/issue/51233). + check.later(func() { + check.validRecv(recv, len(rtparams) != 0) + }).describef(recv, "validRecv(%s)", recv) + + return } -// collectParams declares the parameters of list in scope and returns the corresponding -// variable list. -func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicOk bool, scopePos token.Pos) (params []*Var, variadic bool) { +// collectParams collects (but does not delare) all parameters of list and returns +// the list of parameter names, corresponding parameter variables, and whether the +// parameter list is variadic. Anonymous parameters are recorded with nil names. +func (check *Checker) collectParams(list *ast.FieldList, variadicOk bool) (names []*ast.Ident, params []*Var, variadic bool) { if list == nil { return } @@ -259,7 +289,8 @@ func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicO // ok to continue } par := NewParam(name.Pos(), check.pkg, name.Name, typ) - check.declare(scope, name, par, scopePos) + // named parameter is declared by caller + names = append(names, name) params = append(params, par) } named = true @@ -267,6 +298,7 @@ func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicO // anonymous parameter par := NewParam(ftype.Pos(), check.pkg, "", typ) check.recordImplicit(field, par) + names = append(names, nil) params = append(params, par) anonymous = true } @@ -289,6 +321,15 @@ func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicO return } +// declareParams declares each named parameter in the current scope. +func (check *Checker) declareParams(names []*ast.Ident, params []*Var, scopePos token.Pos) { + for i, name := range names { + if name != nil && name.Name != "" { + check.declare(check.scope, name, params[i], scopePos) + } + } +} + // validRecv verifies that the receiver satisfies its respective spec requirements // and reports an error otherwise. If hasTypeParams is set, the receiver declares // type parameters. diff --git a/src/go/types/typexpr.go b/src/go/types/typexpr.go index b6b6881089de66..62d75885a63e4a 100644 --- a/src/go/types/typexpr.go +++ b/src/go/types/typexpr.go @@ -29,15 +29,7 @@ func (check *Checker) ident(x *operand, e *ast.Ident, def *TypeName, wantType bo switch obj { case nil: if e.Name == "_" { - // Blank identifiers are never declared, but the current identifier may - // be a placeholder for a receiver type parameter. In this case we can - // resolve its type and object from Checker.recvTParamMap. - if tpar := check.recvTParamMap[e]; tpar != nil { - x.mode = typexpr - x.typ = tpar - } else { - check.error(e, InvalidBlank, "cannot use _ as value or type") - } + check.error(e, InvalidBlank, "cannot use _ as value or type") } else { check.errorf(e, UndeclaredName, "undefined: %s", e.Name) } diff --git a/src/internal/types/testdata/check/issues0.go b/src/internal/types/testdata/check/issues0.go index 3bf4a3144656ed..d78b65705a9597 100644 --- a/src/internal/types/testdata/check/issues0.go +++ b/src/internal/types/testdata/check/issues0.go @@ -327,7 +327,7 @@ func issue28281c(a, b, c ... /* ERROR "can only use ... with final parameter" */ func issue28281d(... /* ERROR "can only use ... with final parameter" */ int, int) func issue28281e(a, b, c ... /* ERROR "can only use ... with final parameter" */ int, d int) func issue28281f(... /* ERROR "can only use ... with final parameter" */ int, ... /* ERROR "can only use ... with final parameter" */ int, int) -func (... /* ERROR "can only use ... with final parameter" */ TT) f() +func (... /* ERROR "invalid use of '...'" */ TT) f() func issue28281g() (... /* ERROR "can only use ... with final parameter" */ TT) // Issue #26234: Make various field/method lookup errors easier to read by matching cmd/compile's output diff --git a/src/internal/types/testdata/fixedbugs/issue47818.go b/src/internal/types/testdata/fixedbugs/issue47818.go index 21c85392ab6bfe..4750a4fd0404a8 100644 --- a/src/internal/types/testdata/fixedbugs/issue47818.go +++ b/src/internal/types/testdata/fixedbugs/issue47818.go @@ -25,7 +25,7 @@ func f[P /* ERROR "type parameter requires go1.18 or later" */ any /* ERROR "pre _ = T[ /* ERROR "type instantiation requires go1.18 or later" */ int](struct{}{}) } -func (T[ /* ERROR "type instantiation requires go1.18 or later" */ P]) g(x int) { +func (T /* ERROR "type instantiation requires go1.18 or later" */ [P]) g(x int) { f[ /* ERROR "function instantiation requires go1.18 or later" */ int](0) // explicit instantiation (f[ /* ERROR "function instantiation requires go1.18 or later" */ int])(0) // parentheses (different code path) f( /* ERROR "implicit function instantiation requires go1.18 or later" */ x) // implicit instantiation diff --git a/src/internal/types/testdata/fixedbugs/issue51339.go b/src/internal/types/testdata/fixedbugs/issue51339.go index fd10daa2c24f10..933e426715d057 100644 --- a/src/internal/types/testdata/fixedbugs/issue51339.go +++ b/src/internal/types/testdata/fixedbugs/issue51339.go @@ -11,10 +11,10 @@ type T[P any, B *P] struct{} func (T /* ERROR "cannot use generic type" */) m0() {} -// TODO(rfindley): eliminate the duplicate errors here. -func ( /* ERROR "got 1 type parameter, but receiver base type declares 2" */ T /* ERROR "not enough type arguments for type" */ [_]) m1() { +func (T /* ERROR "receiver declares 1 type parameter, but receiver base type declares 2" */ [_]) m1() { } func (T[_, _]) m2() {} // TODO(gri) this error is unfortunate (issue #51343) -func (T /* ERROR "too many type arguments for type" */ [_, _, _]) m3() {} +func (T /* ERROR "receiver declares 3 type parameters, but receiver base type declares 2" */ [_, _, _]) m3() { +} From 9e40780a4633fd104777243fe2b5d07bc482d5a6 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 28 Jun 2024 11:12:48 -0700 Subject: [PATCH 076/866] go/types, types2: add test for receiver type parameters Issue #51503 was fixed with the rewrite in CL 594740. Add a respective test case. Fixes #51503. For #51343. Change-Id: Iff9e7e3274c5ad40789e107b6f62d17e335e2428 Reviewed-on: https://go-review.googlesource.com/c/go/+/595697 Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Auto-Submit: Robert Griesemer --- .../types/testdata/fixedbugs/issue51503.go | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/internal/types/testdata/fixedbugs/issue51503.go diff --git a/src/internal/types/testdata/fixedbugs/issue51503.go b/src/internal/types/testdata/fixedbugs/issue51503.go new file mode 100644 index 00000000000000..90a4256229a3b8 --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue51503.go @@ -0,0 +1,31 @@ +// Copyright 2024 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 p + +type T[T any] struct{} + +// The inner T in T[T] must not conflict with the receiver base type T. +func (T[T]) m1() {} + +// The receiver parameter r is declared after the receiver type parameter +// r in T[r]. An error is expected for the receiver parameter. +func (r /* ERROR "r redeclared" */ T[r]) m2() {} + +type C any + +// The scope of type parameter C starts after the type name (_) +// because we want to be able to use type parameters in the type +// parameter list. Hence, the 2nd C in the type parameter list below +// refers to the first C. Since constraints cannot be type parameters +// this is an error. +type _[C C /* ERROR "cannot use a type parameter as constraint" */] struct{} + +// Same issue here. +func _[C C /* ERROR "cannot use a type parameter as constraint" */]() {} + +// The scope of ordinary parameter C starts after the function signature. +// Therefore, the 2nd C in the parameter list below refers to the type C. +// This code is correct. +func _(C C) {} // okay From 456785ceed9e209bf3cbdc6a46e752b766722550 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Fri, 26 Jul 2024 12:12:39 -0700 Subject: [PATCH 077/866] os: rm unused code CL 588675 removes pidfdRelease, but misses this one. Change-Id: Id1d93d10baa5b26a42a2289e29624409c4e351f2 Reviewed-on: https://go-review.googlesource.com/c/go/+/601461 Reviewed-by: Dmitri Shuralyov Run-TryBot: Kirill Kolyshkin TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor --- src/os/pidfd_other.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/os/pidfd_other.go b/src/os/pidfd_other.go index dda4bd0feccae6..57804327790199 100644 --- a/src/os/pidfd_other.go +++ b/src/os/pidfd_other.go @@ -20,8 +20,6 @@ func pidfdFind(_ int) (uintptr, error) { return 0, syscall.ENOSYS } -func (p *Process) pidfdRelease() {} - func (_ *Process) pidfdWait() (*ProcessState, error) { panic("unreachable") } From 0a9321ad7f8c91e1b0c7184731257df923977eb9 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Fri, 7 Apr 2023 22:37:57 +0800 Subject: [PATCH 078/866] cmd/internal/obj/loong64: add CPUCFG instructions support The CPUCFG instruction is used to dynamically obtain the features supported by the current CPU during the running of the program. Go asm syntax: CPUCFG RJ, RD Equivalent platform assembler syntax: cpucfg rd, rj Reference: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: I545110ff837ae9c5ccd7c448a1daf2d1277f9aa1 Reviewed-on: https://go-review.googlesource.com/c/go/+/493436 Reviewed-by: sophie zhao Reviewed-by: Dmitri Shuralyov Reviewed-by: Qiqi Huang Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/cmd/asm/internal/asm/testdata/loong64enc1.s | 1 + src/cmd/internal/obj/loong64/a.out.go | 1 + src/cmd/internal/obj/loong64/anames.go | 1 + src/cmd/internal/obj/loong64/asm.go | 10 +++++++--- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index 41156febc63475..a98fca08aabfc6 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -51,6 +51,7 @@ lable2: ROTRV R4, R5, R6 // a6901b00 CLO R4, R5 // 85100000 CLZ R4, R5 // 85140000 + CPUCFG R4, R5 // 856c0000 ADDF F4, F5 // a5900001 ADDF F4, R5, F6 // a6900001 CMPEQF F4, R5 // a010120c diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 2dd2a085a8358f..6d41b6aa03141b 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -448,6 +448,7 @@ const ( ARDTIMELW ARDTIMEHW ARDTIMED + ACPUCFG ALAST diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index f21e8c96302282..b961a2dcd1aab4 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -182,5 +182,6 @@ var Anames = []string{ "RDTIMELW", "RDTIMEHW", "RDTIMED", + "CPUCFG", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 4eaf8bf5edc48c..9ce63c1f585b39 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1230,6 +1230,7 @@ func buildop(ctxt *obj.Link) { case ACLO: opset(ACLZ, r0) + opset(ACPUCFG, r0) case ATEQ: opset(ATNE, r0) @@ -1420,14 +1421,15 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_12IRR(c.opirr(-p.As), uint32(v), uint32(r), uint32(p.To.Reg)) case 9: // sll r1,[r2],r3 - if p.As != ACLO && p.As != ACLZ { + switch p.As { + case ACLO, ACLZ, ACPUCFG: + o1 = OP_RR(c.oprr(p.As), uint32(p.From.Reg), uint32(p.To.Reg)) + default: r := int(p.Reg) if r == 0 { r = int(p.To.Reg) } o1 = OP_RRR(c.oprrr(p.As), uint32(p.From.Reg), uint32(r), uint32(p.To.Reg)) - } else { // clo r1,r2 - o1 = OP_RR(c.oprr(p.As), uint32(p.From.Reg), uint32(p.To.Reg)) } case 10: // add $con,[r1],r2 ==> mov $con, t; add t,[r1],r2 @@ -2091,6 +2093,8 @@ func (c *ctxt0) oprr(a obj.As) uint32 { return 0x4 << 10 case ACLZ: return 0x5 << 10 + case ACPUCFG: + return 0x1b << 10 case ARDTIMELW: return 0x18 << 10 case ARDTIMEHW: From c6117e8f05a55dad96b5d36cd04702b5424eab5a Mon Sep 17 00:00:00 2001 From: limeidan Date: Wed, 17 Apr 2024 11:29:13 +0800 Subject: [PATCH 079/866] cmd/link: pass architecture to isPLTCall The relocation number of each architecture starts from 0. objabi.ElfRelocOffset + objabi.RelocType(xxx) cannot uniquely represent a relocation, so the new argument 'arch' was added to help identify relocation. Change-Id: Ic8121dbfd1a4f31f279d50ffdc9c932ce3066efd Reviewed-on: https://go-review.googlesource.com/c/go/+/580275 Commit-Queue: abner chenc LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Dmitri Shuralyov Reviewed-by: abner chenc Auto-Submit: abner chenc --- src/cmd/link/internal/ld/data.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index b18dc6993bd16d..0f1289cccc8404 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -114,7 +114,7 @@ func trampoline(ctxt *Link, s loader.Sym) { for ri := 0; ri < relocs.Count(); ri++ { r := relocs.At(ri) rt := r.Type() - if !rt.IsDirectCallOrJump() && !isPLTCall(rt) { + if !rt.IsDirectCallOrJump() && !isPLTCall(ctxt.Arch, rt) { continue } rs := r.Sym() @@ -146,19 +146,19 @@ func trampoline(ctxt *Link, s loader.Sym) { // whether rt is a (host object) relocation that will be turned into // a call to PLT. -func isPLTCall(rt objabi.RelocType) bool { +func isPLTCall(arch *sys.Arch, rt objabi.RelocType) bool { const pcrel = 1 - switch rt { + switch uint32(arch.Family) | uint32(rt)<<8 { // ARM64 - case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_CALL26), - objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_JUMP26), - objabi.MachoRelocOffset + MACHO_ARM64_RELOC_BRANCH26*2 + pcrel: + case uint32(sys.ARM64) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_AARCH64_CALL26))<<8, + uint32(sys.ARM64) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_AARCH64_JUMP26))<<8, + uint32(sys.ARM64) | uint32(objabi.MachoRelocOffset+MACHO_ARM64_RELOC_BRANCH26*2+pcrel)<<8: return true // ARM - case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_CALL), - objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_PC24), - objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_JUMP24): + case uint32(sys.ARM) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_ARM_CALL))<<8, + uint32(sys.ARM) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_ARM_PC24))<<8, + uint32(sys.ARM) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_ARM_JUMP24))<<8: return true } // TODO: other architectures. From aec5cc52add9d8da0b5ac4e51758d10ee35589db Mon Sep 17 00:00:00 2001 From: limeidan Date: Tue, 24 Oct 2023 16:41:25 +0800 Subject: [PATCH 080/866] cmd/link/internal/loadelf: remove useless relocation size information of loong64 As of CL 455017 we have switched to following the new style relocations on loong64, these stack based relocations should be removed. Change-Id: Ic129a5665cf6f183a32e13b6f1a55d712a99d721 Reviewed-on: https://go-review.googlesource.com/c/go/+/537335 Reviewed-by: sophie zhao Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Auto-Submit: abner chenc Commit-Queue: abner chenc Reviewed-by: Qiqi Huang Reviewed-by: abner chenc --- src/cmd/link/internal/loadelf/ldelf.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/cmd/link/internal/loadelf/ldelf.go b/src/cmd/link/internal/loadelf/ldelf.go index c5ea6f7f898376..9a560e029f7a88 100644 --- a/src/cmd/link/internal/loadelf/ldelf.go +++ b/src/cmd/link/internal/loadelf/ldelf.go @@ -1026,11 +1026,7 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) { LOONG64 | uint32(elf.R_LARCH_SUB16)<<16: return 2, 2, nil - case LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_PCREL)<<16, - LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_GPREL)<<16, - LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_ABSOLUTE)<<16, - LOONG64 | uint32(elf.R_LARCH_MARK_LA)<<16, - LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_0_10_10_16_S2)<<16, + case LOONG64 | uint32(elf.R_LARCH_MARK_LA)<<16, LOONG64 | uint32(elf.R_LARCH_MARK_PCREL)<<16, LOONG64 | uint32(elf.R_LARCH_ADD24)<<16, LOONG64 | uint32(elf.R_LARCH_ADD32)<<16, From f95ae3d68989505fcac9ec23cacc03d602ec6739 Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Wed, 3 Apr 2024 15:13:04 +0800 Subject: [PATCH 081/866] cmd/asm: change register type for loong64 floating-point On Loong64, the two input operands and one output operand of the ADDF instruction are both floating-point registers; and the floating-point comparison instruction CMPEQ{F,D}, CMPGE{F,D}, CMPGT{F,D} both input operands are floating-point registers, and the output operation is a floating-point condition register, currently, only FCC0 is used as the floating-point condition register. Example: ADDF F0, F1, F0 CMPEQF F0, F1, FCC0 Change-Id: I4c1c453e522d43f294a8dcab7b6b5247f41c9c68 Reviewed-on: https://go-review.googlesource.com/c/go/+/580281 Reviewed-by: Cherry Mui Reviewed-by: abner chenc Auto-Submit: abner chenc Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/asm/internal/arch/loong64.go | 11 -------- src/cmd/asm/internal/asm/asm.go | 6 ----- .../asm/internal/asm/testdata/loong64enc1.s | 14 +++++------ src/cmd/compile/internal/loong64/ssa.go | 2 ++ src/cmd/internal/obj/loong64/asm.go | 25 ++++++++++++++++--- 5 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/cmd/asm/internal/arch/loong64.go b/src/cmd/asm/internal/arch/loong64.go index bf34a94f0782b2..48a62c495230ba 100644 --- a/src/cmd/asm/internal/arch/loong64.go +++ b/src/cmd/asm/internal/arch/loong64.go @@ -21,17 +21,6 @@ func jumpLoong64(word string) bool { return false } -// IsLoong64CMP reports whether the op (as defined by an loong64.A* constant) is -// one of the CMP instructions that require special handling. -func IsLoong64CMP(op obj.As) bool { - switch op { - case loong64.ACMPEQF, loong64.ACMPEQD, loong64.ACMPGEF, loong64.ACMPGED, - loong64.ACMPGTF, loong64.ACMPGTD: - return true - } - return false -} - // IsLoong64MUL reports whether the op (as defined by an loong64.A* constant) is // one of the MUL/DIV/REM instructions that require special handling. func IsLoong64MUL(op obj.As) bool { diff --git a/src/cmd/asm/internal/asm/asm.go b/src/cmd/asm/internal/asm/asm.go index b2eaa0a28dcaa2..bdbb3e17e0654b 100644 --- a/src/cmd/asm/internal/asm/asm.go +++ b/src/cmd/asm/internal/asm/asm.go @@ -642,12 +642,6 @@ func (p *Parser) asmInstruction(op obj.As, cond string, a []obj.Addr) { break } } else if p.arch.Family == sys.Loong64 { - if arch.IsLoong64CMP(op) { - prog.From = a[0] - prog.Reg = p.getRegister(prog, op, &a[1]) - break - } - if arch.IsLoong64RDTIME(op) { // The Loong64 RDTIME family of instructions is a bit special, // in that both its register operands are outputs diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index a98fca08aabfc6..a45ef88150d05a 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -53,8 +53,7 @@ lable2: CLZ R4, R5 // 85140000 CPUCFG R4, R5 // 856c0000 ADDF F4, F5 // a5900001 - ADDF F4, R5, F6 // a6900001 - CMPEQF F4, R5 // a010120c + ADDF F4, F5, F6 // a6900001 ABSF F4, F5 // 85041401 MOVVF F4, F5 // 85181d01 MOVF F4, F5 // 85941401 @@ -220,11 +219,12 @@ lable2: MOVWR y+8(FP), R4 // 6440402e MOVWR 1(R5), R4 // a404402e - CMPGTF F4, R5 // a090110c - CMPGTD F4, R5 // a090210c - CMPGEF F4, R5 // a090130c - CMPGED F4, R5 // a090230c - CMPEQD F4, R5 // a010220c + CMPEQF F4, F5, FCC0 // a010120c + CMPGTF F4, F5, FCC1 // a190110c + CMPGTD F4, F5, FCC2 // a290210c + CMPGEF F4, F5, FCC3 // a390130c + CMPGED F4, F5, FCC4 // a490230c + CMPEQD F4, F5, FCC5 // a510220c RDTIMELW R4, R0 // 80600000 RDTIMEHW R4, R0 // 80640000 diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index e7298bdb9fa570..1b1fdfdc714372 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -244,6 +244,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.From.Type = obj.TYPE_REG p.From.Reg = v.Args[0].Reg() p.Reg = v.Args[1].Reg() + p.To.Type = obj.TYPE_REG + p.To.Reg = loong64.REG_FCC0 case ssa.OpLOONG64MOVVaddr: p := s.Prog(loong64.AMOVV) p.From.Type = obj.TYPE_ADDR diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 9ce63c1f585b39..8325cbf905c651 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -82,13 +82,14 @@ var optab = []Optab{ {ACLO, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 9, 4, 0, 0}, {AADDF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 32, 4, 0, 0}, - {AADDF, C_FREG, C_REG, C_NONE, C_FREG, C_NONE, 32, 4, 0, 0}, - {ACMPEQF, C_FREG, C_REG, C_NONE, C_NONE, C_NONE, 32, 4, 0, 0}, + {AADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 32, 4, 0, 0}, {AABSF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, {AMOVVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, + {ACMPEQF, C_FREG, C_FREG, C_NONE, C_FCCREG, C_NONE, 29, 4, 0, 0}, + {AMOVW, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, {AMOVWU, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, {AMOVV, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, @@ -850,6 +851,21 @@ func (c *ctxt0) aclass(a *obj.Addr) int { return C_GOK } +func (c *ctxt0) rclass(r int16) int { + switch { + case REG_R0 <= r && r <= REG_R31: + return C_REG + case REG_F0 <= r && r <= REG_F31: + return C_FREG + case REG_FCC0 <= r && r <= REG_FCC31: + return C_FCCREG + case REG_FCSR0 <= r && r <= REG_FCSR31: + return C_FCSRREG + } + + return C_GOK +} + func prasm(p *obj.Prog) { fmt.Printf("%v\n", p) } @@ -883,7 +899,7 @@ func (c *ctxt0) oplook(p *obj.Prog) *Optab { // 2nd source operand a2 := C_NONE if p.Reg != 0 { - a2 = C_REG + a2 = c.rclass(p.Reg) } // 2nd destination operand @@ -1620,6 +1636,9 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_12IRR(c.opirr(a), uint32(v), uint32(r), uint32(p.From.Reg)) } + case 29: // fcmp.cond.x fj, fk, fcc + o1 = OP_RRR(c.oprrr(p.As), uint32(p.From.Reg), uint32(p.Reg), uint32(p.To.Reg)) + case 30: // movw r,fr a := OP_TEN(8, 1321) // movgr2fr.w o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) From 0fe775e9f3c60db4a8fa6981bbc5cb0812a01dc5 Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Thu, 27 Jun 2024 10:56:22 +0800 Subject: [PATCH 082/866] cmd/compile: drop TODO in NilCheck for riscv64 Also add log as arm/amd64 do. Change-Id: I3698993e2df0ebf3bfcf8bad5fe389affa0e8eff Reviewed-on: https://go-review.googlesource.com/c/go/+/595355 Reviewed-by: Keith Randall Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/compile/internal/riscv64/ssa.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/riscv64/ssa.go b/src/cmd/compile/internal/riscv64/ssa.go index c9e75b21804af3..3c57bc93bcaa59 100644 --- a/src/cmd/compile/internal/riscv64/ssa.go +++ b/src/cmd/compile/internal/riscv64/ssa.go @@ -7,6 +7,7 @@ package riscv64 import ( "cmd/compile/internal/base" "cmd/compile/internal/ir" + "cmd/compile/internal/logopt" "cmd/compile/internal/objw" "cmd/compile/internal/ssa" "cmd/compile/internal/ssagen" @@ -720,13 +721,15 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { case ssa.OpRISCV64LoweredNilCheck: // Issue a load which will fault if arg is nil. - // TODO: optimizations. See arm and amd64 LoweredNilCheck. p := s.Prog(riscv.AMOVB) p.From.Type = obj.TYPE_MEM p.From.Reg = v.Args[0].Reg() ssagen.AddAux(&p.From, v) p.To.Type = obj.TYPE_REG p.To.Reg = riscv.REG_ZERO + if logopt.Enabled() { + logopt.LogOpt(v.Pos, "nilcheck", "genssa", v.Block.Func.Name) + } if base.Debug.Nil != 0 && v.Pos.Line() > 1 { // v.Pos == 1 in generated wrappers base.WarnfAt(v.Pos, "generated nil check") } From f7ec58b2fcf0677678aac8f939b055c6e4ef8c7d Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 28 Jul 2024 15:08:33 +0000 Subject: [PATCH 083/866] cmd/go: remove comparison that is always true Change-Id: Ia77769e03ee040451c044afb332ae4efae3065b9 GitHub-Last-Rev: 66c6d71c1308a86b1bf770f06a8b412f72a00b4f GitHub-Pull-Request: golang/go#68623 Reviewed-on: https://go-review.googlesource.com/c/go/+/601615 Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/go/internal/test/test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go index 0ac56666201109..ff22e4a457d530 100644 --- a/src/cmd/go/internal/test/test.go +++ b/src/cmd/go/internal/test/test.go @@ -569,7 +569,7 @@ func (f *testVFlag) Set(arg string) error { } if arg == "test2json" { f.on = true - f.json = arg == "test2json" + f.json = true return nil } return fmt.Errorf("invalid flag -test.v=%s", arg) From 33b247437f871a850a778dc214245ba5d1a0c9a0 Mon Sep 17 00:00:00 2001 From: limeidan Date: Thu, 11 Jan 2024 15:04:45 +0800 Subject: [PATCH 084/866] cmd/internal/obj/loong64, cmd/asm: remove invalid optab items Cases 27 and 28 are used to handle floating point operations, MOVW is usually used for integer processing, and, in two cases there is code like this: a :=AMOVF if p.As == AMOVD { a=AMOVD } This means that MOVW was eventually replaced by MOVF, so removed MOVW from cases 27 and 28. Change-Id: Ib438febab88058e98b569e0dfe70b8610668ee31 Reviewed-on: https://go-review.googlesource.com/c/go/+/565622 LUCI-TryBot-Result: Go LUCI Reviewed-by: Qiqi Huang Auto-Submit: abner chenc Reviewed-by: sophie zhao Reviewed-by: abner chenc Reviewed-by: Michael Knyszek Reviewed-by: Cherry Mui --- .../asm/internal/asm/testdata/loong64enc1.s | 4 --- .../asm/internal/asm/testdata/loong64enc3.s | 8 ----- src/cmd/internal/obj/loong64/asm.go | 35 +++---------------- 3 files changed, 4 insertions(+), 43 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index a45ef88150d05a..0f451a9050d387 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -124,16 +124,12 @@ lable2: BNE R4, R0, 1(PC) // 80040044 BNE R0, R4, 1(PC) // 80040044 BLTU R4, 1(PC) // 80040068 - MOVW y+8(FP), F4 // 6440002b MOVF y+8(FP), F4 // 6440002b MOVD y+8(FP), F4 // 6440802b - MOVW 1(F5), F4 // a404002b MOVF 1(F5), F4 // a404002b MOVD 1(F5), F4 // a404802b - MOVW F4, result+16(FP) // 6460402b MOVF F4, result+16(FP) // 6460402b MOVD F4, result+16(FP) // 6460c02b - MOVW F4, 1(F5) // a404402b MOVF F4, 1(F5) // a404402b MOVD F4, 1(F5) // a404c02b MOVW R4, F5 // 85a41401 diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc3.s b/src/cmd/asm/internal/asm/testdata/loong64enc3.s index eceb0d71d001c6..26008843095cdd 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc3.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc3.s @@ -64,28 +64,20 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 MOVV 4096(R5), R4 // 3e000014de971000c403c028 MOVB 4096(R5), R4 // 3e000014de971000c4030028 MOVBU 4096(R5), R4 // 3e000014de971000c403002a - MOVW y+65540(FP), F4 // 1e020014de8f1000c433002b MOVF y+65540(FP), F4 // 1e020014de8f1000c433002b MOVD y+65540(FP), F4 // 1e020014de8f1000c433802b - MOVW y+4097(FP), F4 // 3e000014de8f1000c427002b MOVF y+4097(FP), F4 // 3e000014de8f1000c427002b MOVD y+4097(FP), F4 // 3e000014de8f1000c427802b - MOVW 65536(R5), F4 // 1e020014de971000c403002b MOVF 65536(R5), F4 // 1e020014de971000c403002b MOVD 65536(R5), F4 // 1e020014de971000c403802b - MOVW 4096(R5), F4 // 3e000014de971000c403002b MOVF 4096(R5), F4 // 3e000014de971000c403002b MOVD 4096(R5), F4 // 3e000014de971000c403802b - MOVW F4, result+65540(FP) // 1e020014de8f1000c433402b MOVF F4, result+65540(FP) // 1e020014de8f1000c433402b MOVD F4, result+65540(FP) // 1e020014de8f1000c433c02b - MOVW F4, result+4097(FP) // 3e000014de8f1000c427402b MOVF F4, result+4097(FP) // 3e000014de8f1000c427402b MOVD F4, result+4097(FP) // 3e000014de8f1000c427c02b - MOVW F4, 65536(R5) // 1e020014de971000c403402b MOVF F4, 65536(R5) // 1e020014de971000c403402b MOVD F4, 65536(R5) // 1e020014de971000c403c02b - MOVW F4, 4096(R5) // 3e000014de971000c403402b MOVF F4, 4096(R5) // 3e000014de971000c403402b MOVD F4, 4096(R5) // 3e000014de971000c403c02b diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 8325cbf905c651..fbfa7024d62d9b 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -155,12 +155,9 @@ var optab = []Optab{ {AMOVBU, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, {ASC, C_REG, C_NONE, C_NONE, C_LOREG, C_NONE, 35, 12, REGZERO, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, - {AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVWU, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVV, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, - {AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, - {AMOVBU, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVBU, C_REG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, {AMOVWU, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, @@ -184,12 +181,9 @@ var optab = []Optab{ {AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, {AMOVBU, C_LOREG, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGZERO, 0}, {AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, - {AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, {AMOVWU, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, {AMOVV, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, {AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, - {AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, - {AMOVBU, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, {AMOVBU, C_ADDR, C_NONE, C_NONE, C_REG, C_NONE, 51, 8, 0, 0}, {AMOVW, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, {AMOVWU, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, @@ -202,7 +196,6 @@ var optab = []Optab{ {AMOVW, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, {AMOVV, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, {AMOVW, C_LECON, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, - {AMOVW, C_LECON, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, {AMOVV, C_LECON, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, {AMOVW, C_LACON, C_NONE, C_NONE, C_REG, C_NONE, 26, 12, REGSP, 0}, @@ -280,49 +273,37 @@ var optab = []Optab{ {AMOVW, C_SEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, 0, 0}, {AMOVF, C_SEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, 0, 0}, {AMOVD, C_SEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, 0, 0}, - {AMOVW, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGSP, 0}, {AMOVF, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGSP, 0}, {AMOVD, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGSP, 0}, - {AMOVW, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGZERO, 0}, {AMOVF, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGZERO, 0}, {AMOVD, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGZERO, 0}, {AMOVW, C_LEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, 0, 0}, {AMOVF, C_LEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, 0, 0}, {AMOVD, C_LEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, 0, 0}, - {AMOVW, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGSP, 0}, {AMOVF, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGSP, 0}, {AMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGSP, 0}, - {AMOVW, C_LOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGZERO, 0}, {AMOVF, C_LOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGZERO, 0}, {AMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGZERO, 0}, {AMOVF, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, - {AMOVF, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, - {AMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, {AMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, {AMOVW, C_FREG, C_NONE, C_NONE, C_SEXT, C_NONE, 28, 4, 0, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_SEXT, C_NONE, 28, 4, 0, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_SEXT, C_NONE, 28, 4, 0, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 28, 4, REGSP, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 28, 4, REGSP, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 28, 4, REGSP, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 28, 4, REGZERO, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 28, 4, REGZERO, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 28, 4, REGZERO, 0}, {AMOVW, C_FREG, C_NONE, C_NONE, C_LEXT, C_NONE, 28, 12, 0, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_LEXT, C_NONE, 28, 12, 0, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_LEXT, C_NONE, 28, 12, 0, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 28, 12, REGSP, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 28, 12, REGSP, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 28, 12, REGSP, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_LOREG, C_NONE, 28, 12, REGZERO, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_LOREG, C_NONE, 28, 12, REGZERO, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, C_NONE, 28, 12, REGZERO, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, - {AMOVF, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, - {AMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_FREG, C_NONE, 30, 4, 0, 0}, @@ -1602,18 +1583,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { if r == 0 { r = int(o.param) } - a := -AMOVF - if p.As == AMOVD { - a = -AMOVD - } switch o.size { case 12: o1 = OP_IR(c.opir(ALU12IW), uint32((v+1<<11)>>12), uint32(REGTMP)) o2 = OP_RRR(c.oprrr(add), uint32(r), uint32(REGTMP), uint32(REGTMP)) - o3 = OP_12IRR(c.opirr(a), uint32(v), uint32(REGTMP), uint32(p.To.Reg)) + o3 = OP_12IRR(c.opirr(-p.As), uint32(v), uint32(REGTMP), uint32(p.To.Reg)) case 4: - o1 = OP_12IRR(c.opirr(a), uint32(v), uint32(r), uint32(p.To.Reg)) + o1 = OP_12IRR(c.opirr(-p.As), uint32(v), uint32(r), uint32(p.To.Reg)) } case 28: // mov fr,[sl]ext/auto/oreg @@ -1622,18 +1599,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { if r == 0 { r = int(o.param) } - a := AMOVF - if p.As == AMOVD { - a = AMOVD - } switch o.size { case 12: o1 = OP_IR(c.opir(ALU12IW), uint32((v+1<<11)>>12), uint32(REGTMP)) o2 = OP_RRR(c.oprrr(add), uint32(r), uint32(REGTMP), uint32(REGTMP)) - o3 = OP_12IRR(c.opirr(a), uint32(v), uint32(REGTMP), uint32(p.From.Reg)) + o3 = OP_12IRR(c.opirr(p.As), uint32(v), uint32(REGTMP), uint32(p.From.Reg)) case 4: - o1 = OP_12IRR(c.opirr(a), uint32(v), uint32(r), uint32(p.From.Reg)) + o1 = OP_12IRR(c.opirr(p.As), uint32(v), uint32(r), uint32(p.From.Reg)) } case 29: // fcmp.cond.x fj, fk, fcc From 8173a29aaa670a7b958f05a96a74933ee3ec4469 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sun, 28 Jul 2024 20:12:59 +0700 Subject: [PATCH 085/866] test: add open-coded defer tests for too many exits path Add test cases that will disable open-coded defer when there are too many exits path, even though number of defer statements are not greater than 8. Updates #14939 Updates #34481 Change-Id: If5af0e107ffc30043bc2902063f8c9b131a8bca4 Reviewed-on: https://go-review.googlesource.com/c/go/+/601635 Reviewed-by: Cherry Mui Auto-Submit: Cuong Manh Le LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- test/defererrcheck.go | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/test/defererrcheck.go b/test/defererrcheck.go index 95b91da54db987..c20f090bb8f139 100644 --- a/test/defererrcheck.go +++ b/test/defererrcheck.go @@ -84,3 +84,57 @@ label: fmt.Println("defer") }() } + +// Test for function with too many exits, which will disable open-coded defer +// even though the number of defer statements is not greater than 8. +func f7() { + defer println(1) // ERROR "open-coded defer" + defer println(1) // ERROR "open-coded defer" + defer println(1) // ERROR "open-coded defer" + defer println(1) // ERROR "open-coded defer" + + switch glob { + case 1: + return + case 2: + return + case 3: + return + } +} + +func f8() { + defer println(1) // ERROR "stack-allocated defer" + defer println(1) // ERROR "stack-allocated defer" + defer println(1) // ERROR "stack-allocated defer" + defer println(1) // ERROR "stack-allocated defer" + + switch glob { + case 1: + return + case 2: + return + case 3: + return + case 4: + return + } +} + +func f9() { + defer println(1) // ERROR "open-coded defer" + defer println(1) // ERROR "open-coded defer" + defer println(1) // ERROR "open-coded defer" + defer println(1) // ERROR "open-coded defer" + + switch glob { + case 1: + return + case 2: + return + case 3: + return + case 4: + panic("") + } +} From 705f9848ef42da0ccb15849d69c5ba6687007a2e Mon Sep 17 00:00:00 2001 From: Nick Ripley Date: Fri, 26 Jul 2024 15:16:24 -0400 Subject: [PATCH 086/866] internal/trace: reduce event size by packing goroutine statuses The trace parser was using an otherwise-unused event argument to hold an extra goroutine state argument for the GoStatus & GoStatusStack events. This is needed because the execution tracer just records the "after" for state transitions, but we want to have both the "before" and "after" states available in the StateTransition info for the parsed event. When GoStatusStack was added, the size of the argument array was increased to still have room for the extra status. However, statuses are currently only 1 byte, and the status argument is 8 bytes, so there is plenty of room to pack the "before" and "after" statuses in a single argument. Do that instead to avoid the need for an extra argument. Change-Id: I6886eeb14fb8e5e046b6afcc5b19e04218bcacd4 Reviewed-on: https://go-review.googlesource.com/c/go/+/601455 Reviewed-by: Dmitri Shuralyov Auto-Submit: Michael Knyszek Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/internal/trace/base.go | 6 +----- src/internal/trace/event.go | 5 +++-- src/internal/trace/order.go | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/internal/trace/base.go b/src/internal/trace/base.go index 4cbd3e64f1007c..4f4ce486305434 100644 --- a/src/internal/trace/base.go +++ b/src/internal/trace/base.go @@ -19,11 +19,7 @@ import ( // maxArgs is the maximum number of arguments for "plain" events, // i.e. anything that could reasonably be represented as a baseEvent. -// -// TODO(mknyszek): This is only 6 instead of 5 because GoStatusStack -// has 5 arguments and needs to smuggle in a 6th. Figure out a way to -// shrink this in the future. -const maxArgs = 6 +const maxArgs = 5 // timedEventArgs is an array that is able to hold the arguments for any // timed event. diff --git a/src/internal/trace/event.go b/src/internal/trace/event.go index a5d5637e60da06..4c80a7e5ec4fd7 100644 --- a/src/internal/trace/event.go +++ b/src/internal/trace/event.go @@ -647,8 +647,9 @@ func (e Event) StateTransition() StateTransition { s = goStateTransition(e.ctx.G, GoSyscall, GoRunnable) s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoStatus, go122.EvGoStatusStack: - // N.B. ordering.advance populates e.base.extra. - s = goStateTransition(GoID(e.base.args[0]), GoState(e.base.extra(version.Go122)[0]), go122GoStatus2GoState[e.base.args[2]]) + packedStatus := e.base.args[2] + from, to := packedStatus>>32, packedStatus&((1<<32)-1) + s = goStateTransition(GoID(e.base.args[0]), GoState(from), go122GoStatus2GoState[to]) default: panic(fmt.Sprintf("internal error: unexpected event type for StateTransition kind: %s", go122.EventString(e.base.typ))) } diff --git a/src/internal/trace/order.go b/src/internal/trace/order.go index 4b3b8029fd293a..d0818a500c03c8 100644 --- a/src/internal/trace/order.go +++ b/src/internal/trace/order.go @@ -377,7 +377,7 @@ func (o *ordering) advanceGoStatus(ev *baseEvent, evt *evTable, m ThreadID, gen } else { return curCtx, false, fmt.Errorf("found goroutine status for new goroutine after the first generation: id=%v status=%v", gid, status) } - ev.extra(version.Go122)[0] = uint64(oldState) // Smuggle in the old state for StateTransition. + ev.args[2] = uint64(oldState)<<32 | uint64(status) // Smuggle in the old state for StateTransition. newCtx := curCtx switch status { From d531e344aea38f165a9d13d1e4173816fec35050 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 26 Jul 2024 10:02:55 -0400 Subject: [PATCH 087/866] debug/buildinfo: improve format documentation Existing documentation is a bit sparse, and more importantly focuses almost entirely on the old pre-1.18 format, with the new format as an afterthought. Since the new format is the primary format, make it more prominent. Updates #68592. Change-Id: I108ecde1b33650b4812fa5d278b08cb9197f6329 Reviewed-on: https://go-review.googlesource.com/c/go/+/601456 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Auto-Submit: Michael Pratt --- src/cmd/link/internal/ld/data.go | 8 +++- src/debug/buildinfo/buildinfo.go | 74 +++++++++++++++++++++----------- 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 0f1289cccc8404..92a8656c355d14 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -2351,9 +2351,13 @@ func (ctxt *Link) buildinfo() { s := ldr.CreateSymForUpdate("go:buildinfo", 0) s.SetType(sym.SBUILDINFO) s.SetAlign(16) + // The \xff is invalid UTF-8, meant to make it less likely // to find one of these accidentally. - const prefix = "\xff Go buildinf:" // 14 bytes, plus 2 data bytes filled in below + const prefix = "\xff Go buildinf:" // 14 bytes, plus 1 data byte filled in below + + // Header is always 32-bytes, a hold-over from before + // https://go.dev/cl/369977. data := make([]byte, 32) copy(data, prefix) data[len(prefix)] = byte(ctxt.Arch.PtrSize) @@ -2364,7 +2368,7 @@ func (ctxt *Link) buildinfo() { data[len(prefix)+1] |= 2 // signals new pointer-free format data = appendString(data, strdata["runtime.buildVersion"]) data = appendString(data, strdata["runtime.modinfo"]) - // MacOS linker gets very upset if the size os not a multiple of alignment. + // MacOS linker gets very upset if the size is not a multiple of alignment. for len(data)%16 != 0 { data = append(data, 0) } diff --git a/src/debug/buildinfo/buildinfo.go b/src/debug/buildinfo/buildinfo.go index 1dd70a9f33a41c..8338f03fa580de 100644 --- a/src/debug/buildinfo/buildinfo.go +++ b/src/debug/buildinfo/buildinfo.go @@ -52,10 +52,9 @@ var errUnrecognizedFormat = errors.New("unrecognized file format") //go:linkname errNotGoExe var errNotGoExe = errors.New("not a Go executable") -// The build info blob left by the linker is identified by -// a 16-byte header, consisting of buildInfoMagic (14 bytes), -// the binary's pointer size (1 byte), -// and whether the binary is big endian (1 byte). +// The build info blob left by the linker is identified by a 32-byte header, +// consisting of buildInfoMagic (14 bytes), followed by version-dependent +// fields. var buildInfoMagic = []byte("\xff Go buildinf:") // ReadFile returns build information embedded in a Go binary @@ -171,37 +170,64 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { return "", "", err } const ( - buildInfoAlign = 16 - buildInfoSize = 32 + buildInfoAlign = 16 + buildInfoHeaderSize = 32 + + ptrSizeOffset = 14 + flagsOffset = 15 + versPtrOffset = 16 + + flagsEndianMask = 0x1 + flagsEndianLittle = 0x0 + flagsEndianBig = 0x1 + + flagsVersionMask = 0x2 + flagsVersionPtr = 0x0 + flagsVersionInl = 0x2 ) for { i := bytes.Index(data, buildInfoMagic) - if i < 0 || len(data)-i < buildInfoSize { + if i < 0 || len(data)-i < buildInfoHeaderSize { return "", "", errNotGoExe } - if i%buildInfoAlign == 0 && len(data)-i >= buildInfoSize { + if i%buildInfoAlign == 0 && len(data)-i >= buildInfoHeaderSize { data = data[i:] break } data = data[(i+buildInfoAlign-1)&^(buildInfoAlign-1):] } - // Decode the blob. - // The first 14 bytes are buildInfoMagic. - // The next two bytes indicate pointer size in bytes (4 or 8) and endianness - // (0 for little, 1 for big). - // Two virtual addresses to Go strings follow that: runtime.buildVersion, - // and runtime.modinfo. - // On 32-bit platforms, the last 8 bytes are unused. - // If the endianness has the 2 bit set, then the pointers are zero - // and the 32-byte header is followed by varint-prefixed string data - // for the two string values we care about. - ptrSize := int(data[14]) - if data[15]&2 != 0 { - vers, data = decodeString(data[32:]) + // Decode the blob. The blob is a 32-byte header, optionally followed + // by 2 varint-prefixed string contents. + // + // type buildInfoHeader struct { + // magic [14]byte + // ptrSize uint8 // used if flagsVersionPtr + // flags uint8 + // versPtr targetUintptr // used if flagsVersionPtr + // modPtr targetUintptr // used if flagsVersionPtr + // } + // + // The version bit of the flags field determines the details of the format. + // + // Prior to 1.18, the flags version bit is flagsVersionPtr. In this + // case, the header includes pointers to the version and modinfo Go + // strings in the header. The ptrSize field indicates the size of the + // pointers and the endian bit of the flag indicates the pointer + // endianness. + // + // Since 1.18, the flags version bit is flagsVersionInl. In this case, + // the header is followed by the string contents inline as + // length-prefixed (as varint) string contents. First is the version + // string, followed immediately by the modinfo string. + flags := data[flagsOffset] + if flags&flagsVersionMask == flagsVersionInl { + vers, data = decodeString(data[buildInfoHeaderSize:]) mod, data = decodeString(data) } else { - bigEndian := data[15] != 0 + // flagsVersionPtr (<1.18) + ptrSize := int(data[ptrSizeOffset]) + bigEndian := flags&flagsEndianMask == flagsEndianBig var bo binary.ByteOrder if bigEndian { bo = binary.BigEndian @@ -216,8 +242,8 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { } else { return "", "", errNotGoExe } - vers = readString(x, ptrSize, readPtr, readPtr(data[16:])) - mod = readString(x, ptrSize, readPtr, readPtr(data[16+ptrSize:])) + vers = readString(x, ptrSize, readPtr, readPtr(data[versPtrOffset:])) + mod = readString(x, ptrSize, readPtr, readPtr(data[versPtrOffset+ptrSize:])) } if vers == "" { return "", "", errNotGoExe From 28aed4015ee7ba85b29007d685de9150e01a9acd Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 26 Jul 2024 12:05:40 -0400 Subject: [PATCH 088/866] debug/buildinfo: add old-Go and not-Go tests There is currently no coverage for the pre-1.18 buildinfo format, or for parsing non-Go binaries. Add basic tests for each of these. Updates #68592. Change-Id: Iec14d29ffc1392e46f592c0c7bebf2eb75f7d0d3 Reviewed-on: https://go-review.googlesource.com/c/go/+/601457 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt --- src/debug/buildinfo/buildinfo_test.go | 56 ++++++++++++++++++++++++++ src/debug/buildinfo/testdata/go117 | Bin 0 -> 1166278 bytes src/debug/buildinfo/testdata/notgo | Bin 0 -> 15832 bytes 3 files changed, 56 insertions(+) create mode 100755 src/debug/buildinfo/testdata/go117 create mode 100755 src/debug/buildinfo/testdata/notgo diff --git a/src/debug/buildinfo/buildinfo_test.go b/src/debug/buildinfo/buildinfo_test.go index ea7228c30052cb..9f9756a22c2fbb 100644 --- a/src/debug/buildinfo/buildinfo_test.go +++ b/src/debug/buildinfo/buildinfo_test.go @@ -248,6 +248,62 @@ func TestReadFile(t *testing.T) { } } +// Test117 verifies that parsing of the old, pre-1.18 format works. +func Test117(t *testing.T) { + // go117 was generated for linux-amd64 with: + // + // main.go: + // + // package main + // func main() {} + // + // GOTOOLCHAIN=go1.17 go mod init example.com/go117 + // GOTOOLCHAIN=go1.17 go build + // + // TODO(prattmic): Ideally this would be built on the fly to better + // cover all executable formats, but then we need a network connection + // to download an old Go toolchain. + info, err := buildinfo.ReadFile("testdata/go117") + if err != nil { + t.Fatalf("ReadFile got err %v, want nil", err) + } + + if info.GoVersion != "go1.17" { + t.Errorf("GoVersion got %s want go1.17", info.GoVersion) + } + if info.Path != "example.com/go117" { + t.Errorf("Path got %s want example.com/go117", info.Path) + } + if info.Main.Path != "example.com/go117" { + t.Errorf("Main.Path got %s want example.com/go117", info.Main.Path) + } +} + +// TestNotGo verifies that parsing of a non-Go binary returns the proper error. +func TestNotGo(t *testing.T) { + // notgo was generated for linux-amd64 with: + // + // main.c: + // + // int main(void) { return 0; } + // + // cc -o notgo main.c + // + // TODO(prattmic): Ideally this would be built on the fly to better + // cover all executable formats, but then we need to encode the + // intricacies of calling each platform's C compiler. + _, err := buildinfo.ReadFile("testdata/notgo") + if err == nil { + t.Fatalf("ReadFile got nil err, want non-nil") + } + + // The precise error text here isn't critical, but we want something + // like errNotGoExe rather than e.g., a file read error. + if !strings.Contains(err.Error(), "not a Go executable") { + t.Errorf("ReadFile got err %v want not a Go executable", err) + } +} + // FuzzIssue57002 is a regression test for golang.org/issue/57002. // // The cause of issue 57002 is when pointerSize is not being checked, diff --git a/src/debug/buildinfo/testdata/go117 b/src/debug/buildinfo/testdata/go117 new file mode 100755 index 0000000000000000000000000000000000000000..d7acbeef28cdb33abf3c09a7c93a798e765610f3 GIT binary patch literal 1166278 zcmeEvdwf*Y)%JvBV7P=cK!V|-3>q|eBSFzbj7}iH89c$DR3p+hDyC>rG0Z>^)PzZZ z<9KwW)=TlV*xJ@xTd&APF$s_av>KoalC~mL-P6$)F9ibCe9yD@naNBNXy5Pq^J{*; z%-LsO)?RzO24dlekJJ>kj8RQIUV`0uRxzFEiHY@l?D8JF{Hj5*5ul)W z5`iH+3I8k~r(v8=72kT0miT9PYdngrOf2uQ%X@6TuO1Z7Dg&P6SI1zyCzfCPk{Ty# zUsClS8l7CAYxyiBlcq8J*Y38=mB({r_a#D6^T zkP2+TgZRh)JXfmVepUalq{J?Hk#iK%6SE8(t;!GkSe5_T1&OK2d0El>_)pC7%B)gG zJ6_31m(MK|A`;_Te{~h39j!Mj0lzpiF*P|a^WD&;{IpG~!=^1&oZ4p|b9MeDLvuLTTJmrV z%h)^;n_pt{NDM;qXmU8#B$SQi;j{Fhs=suJiXDo_b@-2sfATH=eu@7W@5%`KXYCv{ zaL&9VF}8dAlT-iu_FoG8mjeH#z<(+5Ukdz}0{_2KfI14bAU>x-f4Js*71v#NYr$2M zrcN!Gdclth3T~R}8<%_S_pU9wq2k&Zc{fxQUwrH2*|YDOJ#NX8D*uApFTV9hi)Sq^ znLmH_%nPor8n@)O8RvcPM*Z3gF23cOoAMUja@~C2RSw_83iqOXJ@|Q+ZqCnk>lS~^ z;%tv@&dJWH2#ck#2=x#nLWmIO0vA2ROu?;LTbR?uoNn>TAg9ddVm^2DH}9xF!CFut z_|xmQ-#u_jUVYwS-TW|`r;YMD^nwqyl|Ln9>&_It;A?I9-FzAQwr(x$@R>*TBOmDv z9hd8)ztdBi^k941vj3^cziC0>{J>B1c4?y=5uXI#D8ZZl>;(pzRI1nQ((bDI`6!@4TPDA=hj--GTlOe0$-UCQ;bI}Pi) z4g=w=67x^KBW=Eh1J#hkV*|`Q?=JK+!aMN$L_e@KRQ}LOatYJJeQH* z-cb>_daAZ=mb+I`^|6Y;G$7L_Ft!+F@>%AF`GJwzx@Gyjywx4^1B3KX;h!7(JM!w; zzIwI~=y>%|W;0@Sb5?eKUVWqz)J3|OxVaZ-=e#PTw__7kT`|2G5$NzTc4U^A$XCnx z+C@nBF#T*hy`1T~7@^YN>V3`*;uKu3Btf4e-S2RNp z*}PS=l`OYK4>ou-cZxQsHoF?{n!Cu&a2Vn0H?kkY!=csoMW2&G=sY94N?Z3t_Tz}J zZSybDL$9j5mpS~sYuf^q=%kPW#VQx*q5HE}A+Myh_~Z@Qf~Uryg~JdlzS*W)hE`u9(ERB z4=3!Z$N8S8$9rIPE`I~u|Nt=fYP=)TAc?8A-*4mfN6zdAa!br-rS z!rtod&JBpjjfg;Yjuz{8GVxNkHmca+07n)EK8ZYqIG;5MBeYesT2Lu?G_StD!w6-L z=L69}Cur|88})|$P9rp@4+P1jeZnOLZwH!4;9LXUlB1hP4f8{B<^Xg`eP9gft+kybhA;E z$hSif&!SNV_lZmJ46_GaYNEKWf8s0H3u;+@N9-N=F6}hMob5t(ps2t8w_;KFw z004`Lj}Vn+-I{Rc&3zmd+NfIKM$x98EOCe>4vF+rSn+L+U}5j);1ojEV&toPn{Bbu z|MU6`Y6ETdR7jRd0vXTa|iq zQ^;89KUQzK>g|W>tyH~Tt={MrMb4?}Ev()yQg1J+w=>mSE8Zf*WmFa0;6ya}L$sx% z)m9Z7bLh7N9pY{E&K4cu`zH0yX6@$t^YVSY-L?isJ*J}U2L7H=bt=kk<^M3MQbpNK z4IxU_f4z!!D{L1rr>>%MRn%NYO;Ay#D(Y%Rovxx5sHjPd(o|GfMdcz2<8J`lxBf*H zH=NmoifUC+PDZ`YsAgy5CX5>PMYHoQI~XiH`WtXV027Dv=ZK3A(5=Ep5D-t1QJd4U zkstCIz@})|cFZ+G7mhg!Z2_Xv1^y2nP0^OGL?Rg6vmQCCbu%qn{Hmwyrt`jEfyn?8 zsSZ)oLmoFoO@_AdiTG}yn3?%L}2ttM2v1(<$MT$5akIT?X$2SwZt4~iMd-=8QG)QYWn9y2tUb?i?as+ zMkDl8{i@qlnyPD$a%E2`b2@pQD0o`UnI&>*@@N(S0BvBAXyudlD>m9J>)T zAE5mL?RG;S%fQ5+g{fxb7MWuM&~<1jt(0Gg9iU=60ZRS(CdeiaB~2D3O_mS>5!jv>UWv9MTv;SBKQ&7X-T#S}Q-SLn| zx6%gb!TtAk?Y(#2sV@A}GZ_BiAs zH0TpLIv|M7)`Ly3uA1Gxpm0b3h&S{{b8d7nLLP)XQCBR7uD!8W&#S+0z-gBZ7^OX0 zk7iB*eLExyi~8%K-g-!bDihGAhl+b2ogOm!9L1|YpldC$?SLlM*jH z-5RhB$UF2SANsF=es^@SQx9DfbxjZXdmq(z|6SkxDYQBndpTp50qE|3=(|7DwRd&x zJw5M;KLc>zW7goOgd31Z0aHD1JLshSyk2{_LAQ#FI=1vo1g&l~iXd&O8$VaNlS!o2 z9fvN;R1Z@L_1IvO7o>zzC-8sNtF5>Nv5`Aa>9+6g7>fT<_^ zq1_(S&G#ZN!=CA$K@T1WGkwkO2p;!p%U?&Rx-jS0U?~4Q74eU=!T*s8t*sINpW=TjIIuO=7CjjC)Y};ok}x5Ck7+%Ayf^XrLZC1v$aR&G-j5 z7wq&Ol+}cc(~d$MjRKSI)E<`gI{X(y82lMcBtIr_BeZ8^-u?FkR)jK-qF}|bN5G8) z@XkAW!QOyNZ?30+f(!+*Khn*&BfpCEMo;OX*{(>fouNY4Zm+M<%I*IJ_3Q`tvRS%$ z1Obn>(jsP7@o9&mnV@lOFz?jf*ahON6Um^ew3WlAN>_W5Iwsa z&?TP7Py>=Wg(8g@H4oiaoSkJ@#o3-nON_W+XF30zo;?3-=!f1AHzHS0Q--*uBQ0Ti zi@w=?P$b0k2;Yr95eKkOq(}ID|2OdE%+}f5gql@QTj$E}uUM^H8Y8sVT@?i<$q;g# zEEW74!uU8zd6gbWmpTV@4G31KX4}mc8|SYzH-v+`zjl5DlC(ATqZ{IB#P2Jl{G;?M zbnXzPU-_vfGl*aC3%6)xy+LnQeAy4k9m zUyJ!*-5zUrJ!7)R)i^plI`QVdVhf)D$Rl`(|@_PZow(u z!%ZIlAidyia4TDoL)|>QMGuYF&ApI`9UsJFx5V{1nQ4po;J0ax4I^0zEN$~In8>YD zHxKI#|AJUEB+Vfnxsgd*V3ZH|37i<8nY|KCekzh#V)gMv0?~7mMgQbPNU2z7^zbD8 zv=tBa*uG2kkQcqA+IU&KjS#s>ZT!!g`1K3jo7k4s+aWd%Mgw2FA=bciR-=KvdurfI z$GSDJBK)7V?*Y}m1Rks|EP4`pY1p4%U0BSJe_VCpr8014xXF3ZqY&{R_uXp-IyP0y zj`>h5_yL_t^J4~s<^18}NcGsMS1~o1J{@uJ5uM-}FD(wXr@?@CM6N%1|A6ZfRt|ij z8M%7Mq+6gC_QXT=*e(GxNKU$7v)Sk^6&GxD>!u18Jk)|*n550)V&F8@0_eY3T_8Io z!>=y9;xWPK3f-T$!jCVDy*AnfIbJdCTuU%kbxSq zSi?xMYbZQ|i5`fAM#sx{8$nY3+y*KF`}wpk`4gJt4o%Mr%^n%5^n~upHbRqfxa^Um zhps|5WB>zNyTpL@FfafnBgIQ6K)_&6ptlJ*xHW%^aG~|l6$%wKepiyn$?_>!nExz# z!ap5!Uj{o9ec?ea^hJ8ijSd!pPC;^bNMF3dv(o=?H`2!Z3~}O#itea(W}@K?n94sb zjsqSk3D%@BZFFIGNxzB7TuA!qq3M7!K#@vZ)Kh(miN&#hf*R|)b&MSW$Y7cISZzVi zl%c)k(es}HWo-Xs?b(=dF!X-{zSrtb#S17UeNxqh=P}Yhz(5zF@6dtt%8)s$*g&}S zW&vDXy;l1q30vS^+*>awbuG?A)_HMaF~3_pJh%&YAx{?2$&Nh0vZ&J@DaCT668gHZs ztMVvj&p`#4KgDn~Ci>V(`WI~`^PzupstXrC#D1)O4J4EPXW2cENCHZVfp)&oR1~2= z>!{8}e|J>p<5v%@^77G)A85Bv?^kT=X{ydb42GW+P+&;7b3pl7^iIORE!K3UHJafD zbhw?+l%^V%c66AmLOckdNJdh8v{=p^hp=)X9a1l1)J7+ zdLl`zTp+sJmYyoCchqyixS-)4T@PK@sE0Q1MP8q|SB)RN;7QI#aA6c2uRH~*f{+TH z+|S4@)E|#8eB;F6!zWSwWuw7akbd(iq4)!~2k%Qh->c|PS4C~Te>TTwuJ}T}1tzhN z4f9LZ@A99m7wDz_?BM!CK+3`OTM3{6E4F_K4|GJ&Vaq*ec@9*WlZOUV-5Y^bw#u({ z3(JOJl7hVpKkFhycV5B=P=)}M16K-KC}$k55OEl;j~(hVTsy(Z@ujV( zA&g{7#API;i|X;6KbP$DTdss0-by z@Y83l%=!0GSaYK&6hl{n2}KxqMt+zoK(5fzPl_P~!MhAv$Ty?_IwzLJ4pG03MfNyI zfFDNdd~gl$gB?Qr4B}T#tbh>o5F&|2w20rsya8$$Fytk!sfICr`cj!dw&*O@1sGes zves@PfI)*L$^;k!r@o!HT@*;vXCaLXv=ARi8qan69G^7+ZJY&M3L5W4B{Ap;EkSM7 z#J`I8S3w!4J7?i^ee4dsV2`d%JEpBGJ>_tt*MAzgdCyZE<-0h_$5Yq9DBqQL7#ljG zV^I>g?WGadmpc|vR~2YeEnA{OK92N*MnR+YKnN($2n}c|2|dKoT@rd+4f;PB1-mPq zMnPNUa3t+lNgVNve+%&oH=-(YpD}i~Z|p8#=pg~Y0*~?)R@&*T`T^`%WA3>ro%3Y@lTg$nrHrhWl#Tu@LUi;AC|;riU`%y^f~qH3vK3 zUp7Mb?{hdjC|h*j%$ur@_45B1gxY*Mq4~@&!#*o5S8ou*p*uEI`35ry1_-xz)E*;IBtzEIjQ(SVg<@V8b+4Fv3nsZF(k zESaygeR!X|at*&289Z{;zbJS#b)l=Mqdr=L`9&}I%HLn_XaX4`w?i}(n_IBrVD7gRG1Ek_#KXb@N@U%k&P1 zIm}Yf7K*c!uk{qP3{s36q_C4JSdaY~*gCNAX8qaAQA5C`t-C<)*b?ov^Y37vMaa>3 zG`d&Y_^D&zE-9kX5gE2Hq&Ns=q`>PT3b5P>F@qs$D?m~vAQ^KV=#Pyys6HBI18nJM zIjo&s_hyv)&QouUT(A=cP#$OWK%m6SFo2?d+7 z40EqxZa2)`MrbPN>nm_A@{xGpU_XZj#Vh(FpL8svRaI`7^&(TU4|Az0Lkd}L{sIB# zk%0LWxaB1wNU8>(x!tEtYYCT_jlQuhzOmbVDf^6q=0$L?mZcbDn~j2f+Jg%Kk@ooy zY{s;)ww#9r=1=U8vFFd@_hPQZ&YZDF470&7--ZQ%<&GR#YC$geW8k7oNg7NwHr5#K z1}6#(5b*T%l0J&QQf1`m0|(53SRme@FWxTF3%>MWxM&x@nHXx5f{NWaOJ|Im?%Y%h$S3=e2zJgMB-oDQ*Qp^C^MT|E+%9Btfx35dbMSrQgj^dx%~xuaM_VbEIQ7VUq7 zmS?s^&tG2-xG_v7+n7|jgM~w7X^4#~H~pmTq6rel?#w|IW@%Qi@aq*s7Fl#pv@bCA zh+o)wbi}#XgSi+XSfsF=&s3wotWzHv*N6Kr0#X;7c^q6Pce34gw~RO+?!irG0wJ*k z5n(o0b-XY?W96~#j$8r;i+5+YK(getDFb;U&L9orGP7H`ScKw_e>#ylNmGgM52AVe zE5NGV9vBy_8tI^%gA!A>E6@+xSiS>JX~@z7H=eb-`~#HZM$K-k?CHpSLhcNt6q2rs zVBwTnP;;>}Z&x@vS`>(G^J5w;Vwfs+emVLqy^KS`3re+!GjVt-mQ19yI&7kHL@x!B zNfk)!Jjumyw6w&+wkWgRFyDiYl($Pf6CuOBr{>S&e6g0g#A+G4 zFFHC{_-hHR57daN{OBM|z2beDtI8|hL7@7s3myK^MhNOsLtcH6?9@Y3w3k*@VGI?) zJzW$$l!ARYW`jxtfGN}iF2?u-g&UHFT>y5?DaA` zWwvgZj_CQICuEk&Ay%Qo5#a^iVbR7HvstPb;_rAVFuyC0KJ`h@NAzQIi8!t7E%@F2)AEiK7-gVv2G|W z3EfgE`@f{_3qL$ouP!H%1{&r(x6hp7@|i`Y(ZvP?o&<~S&+nF)5%CYe^;t_?VyeXL zGtR#g5d>P8HKJ34h4Uqx!9Y#&A>il|);WeXPr>?!LNQx`!v4xn*v!ww*LbQH`m8WC zFo)uu;uZZMu?~;zjlPA0WdnDAy#;@>8Z3~nBYuhQM?YdB}%`v3Bke_5Rkw<%dW|pq~exIItotxTh7+J-NN6G6CD{&R7%z=Wen|Ksdy0}_CDThtfJ9@=N z&Y~;3!IzGNd4}bL`GO9Rjz0slJhy`Gj#Z>v%d+Qf#(;DPZei$#qT>4C5{TVF=q49U z|6$BMWihB>IWN0Q&NLT~?c)%u?~qXkIMIw?p3%q?L-73>lxfa^Dt{m5zY+Pvozo7e zZ>t-9KL)47=O5BgsT+~j9=4)N|L<7LLg2o*7Yn{$EN@svW#O>6o;710Qr;*rU_W&C z9kJO*t$%APBEUC!CZo1ks&wt((kzF+n1f8mf|f^c4?6n)Ue*7aV$No-^w)4(J9!o2 zCU3ix562IZ@1eNL;;Bllz^)(jSjSH0&8h{kOaco?odKhH75Os?g0E+QoR}|O1(>Fy z30N6glH>4ai&_vV$@{5?FljNXZWe*DY*PSE-Rn}sDNm7iWA;lY%{z5GHaAB+_)#L| z2~AO+T5wKeXHSZNr2ll#E|>IIUQ~jGRwBpj_2^WnOmJq1hcJ!XrXjpF^mSmw>*8ns zV5KY@#9qWM$U%SkOE;XN_a*n=qS6!Be>Lits^r_!pR!Z*?}7#T6!?jZlVKqi^?*d3 zL_+B=pK^jrTEj`wUtVD{=;76EEg}bu-=gN{HlONZFGrbHcMGyM7mWmqNvFP)ve8qT zCQZOtfdB-TKe85SDDUSAi6gQNZ$)z8!XHcZ;X#yTo6&W%v%=i7Qbai;UVfNt`}{I; z8km-S+gzlW7J`Sb){-npuUqBtgQmm!vJ_}&(%`!D#6U1ek6Z^TgX_#4c6NY6@$t32 zgN2vK3ZX1KLS|NWy0w{MTR*{ojEuxgu7_qS{pWnXSW6)AE3v*`ci3MH{bwoB9;!D_ zl@!skY@)OwcWM>F#dtNJ&| zY)ic2Wdx+=b1E>0+9PRts91YxMHMLO)gEpN9!`mBHmy;*8f|cRYY%I6MZh?6FNQ~A zKmBAalF?6GwR!+SyLBL47`vS?gSik@C2}thgiR8m; zQ-g)gcac~i`A;Ote#B-EhNFQ$BG2sK&b(O&*YN?e+Gf5Cs=s7gdqv8N8M=MIGJNfsW=k>(z+t-AF79j z=hc(WLDE@!cuVl>l&CAOO|1{qwrO>xB=1`wubNGA#7Z6VF;j1@CW-mCNlsz8PpB!{ z&1H;X;jn67y&oGVR;@)Y$|ZNSg~CSJN-=mB10H6l1qWn|)tJRWRx$ zM4>-n7>SB~XevaQD;zm~^8L$@3h1c$99{TPMraOk0TNk|c%FZ=fWh;5N7eZ}izoeR zK4(Ajd|ox5mi?raM0a5AcI<}Pg+0r3RP#hqDQx0hw2|P`h30%%nMpT>N=L$RgL7&p z%{CGK0k8v#V%n>OW+KM~*Td~9s{hISxumBR=p{wUPD<`d;Kfwd=0}D}zr0wl3UM_c9ENhimv%Mvu8@(lU zfAzycoG!s>hFK0v6B5#APVz_l z1q;(8lmt6-QoaOqE=*ws=rbF+5fac{`C_#V=)O20!&=^HXiiyyC2psMRRO7XZU7w} zZ_y#9yfUvojGl)?_fqRAjSpY=M{R@iTV#d(yO8wnZg9@SJU9s5XB(W@0SPm5JIzQ+ zudz7s(4x%9`KgKZ&@hGJ19NhS1dKT?-kEW`QtIGk;GI%zj(rrAUa|Z^o{k?6(lcR972d8SOXh|0053 zHPM}eKGAA_hc-PwI&mYTh7VWJkUe$&EyZ8h2Y1V)@(MNk&zc{>w%q^pHFuDgXP z?aKo6t(#hu+NIJ|y&e>Rfxn8wJ8##DL6Gj|Ua{aZn|V9=MXGC(Ma9dliB(5`t(Y+6 z{L5_v9b*n%-l0_&Rw0P}T7_$S_j34$Nd72nWw;NbQZdWQp%HZz?#CPapw)$!QBL`t z^oL?=*DB{_fRLooDf^JygwO`?;(Tx=G{I8hG>?R-;(%O0Jj-?S)$D4tD0;rQ`O9v^ zX9m!F0eNE{kD4w>4YF+2rM@t1;yrAWfIrk|h)CZXWQ zGAwO7?#)1`oT0_=rEi?a&?1QbR`DtE#oDuu7!^Q-L;M3P8C_U{ekE(wJm#;fr{~(C zYg0btx&L2aFF^?VogiHF%`A@jgI-o#IWQ}`%7A`WjYu)#2dQ-WTItV$bStsHfy4=J zE$iwDNMIuIZemY%Wup6%m?&BQCav>H`rPP9kU} zv$wXxza330=UoOob7w6|!TObeHgxwAy^v2WxEzg=cU@S8N4cHCybx!fUmS+LAe=vs z`~?efx@LT7SbB=D;p0?a!%^He(J+0Wa2lo%`^L^W%N=4(A>O^XgajBJq?_u|XmO`%a9&us+HDFWMJ}lznjp{G6~a zl+yiz@;zGi6H6y@rT|Zrqk)nq%Gs$np$NW(zsCs8a~sy#6c!5NweJm!vZ4cJSLp`k&V|-#j(jbRa%w-ubH>n%u zSIYj^3m&RRom!pjE>Pa97xY_rhh8wY(;=n(QS z1kr{(3}xwNTDF@1uixH-Omk5Rz$+GW6aePFzd`pomGBc|w|0+BP;L-Z^8XTPFeUCJ z#{Lqw95-rDH+weJOPv2DI-ssT04YRwaq~3SaMTzq{O3GQ{y6#WJO#^!y4i=P;GO*u z7Hi%iedmL1gV;~2lpQoPUo;*`g?zvvxB=ROa!E0Gyno<(ddTftKlkPv13#L4!+hu; z*sc{gt)iyNHUEOZkm{;_ppO6P6CgO$lM~V;t z{B*5$6^S1_K2WPWk8z1L5#|}PmWwV3oB~t_KmxePKP(Pl z7y;zx6$IP>Fdk}RCr5yj;aWfLx(Bl3)HC05IySh7YOqP}Pr-J@PG+M55G-6(5o5O7 zKJR3<8xR)f??_@cNb6EA6I1au3UKd^ucO5<@qUR^V6jE`u$cI-R9wQ);RiKrmgeeS zu<&%&g7q^p@(p`B>-iqSq6vetvkBtbCU`Ah#>|pDw)h75QA+utQ-0`8#o7J2|DM}x zAe-PK*C8^pAR!8L2x;tWQ#yHsR}b+9yw1)AKz1{xVL)XF;$%R! z7_+Ub)Ucesbeu-Ie=FQA%YcRdJdy=6M9&482AB^mz!cD7`tcj)<^r=uDoy5n0;s~d zf=uqF<*yQPwp_<>E`=tk#SYiRQBTD(l_s>;*4?PWHS$Bo8o)0UXI##~O zmAwLkwze16znByKhy63sWTiyf$RR5Fwy^VFV!P-+JnWyLhnB#H^IhNulEmBONC~YZ zHArmTOzl`nqBP4WHXr0^)y+pq9t77Dj^13u2mhi_k6N2*NT?Jf*Q`Z=1hbV!%Nf}T zL7jnECEwS~hNUVp(Jhe|lQcucOVYkr04~CmFdy9oE^_-q53nJ62->I*WHho}!NSU$ zNSSnB^9rW%4;ul%HLB6D$j77E;ylEMNiFz29$1SP(7&KR_`=_)INFVV&DtWy0H0_O zD5(DZ4Ra>VguZ4j?0|=1Q-Q1dNNvE)C{A=P89>)V8MNm$H*)oM*mI%ftYuDQkW(PG z4cSv5S_yt3K(vj^NugdHtt^?MDv^x9IFd9MxZ=3bbzWuLsaFDUiJP~uISBnH=jRqp zO{Oo;=2RCraQ+&|d&Gt^z&E+&2Is28IS?^jYz+2`q}r7rV)VDFa4{aIq3h6$O?_oz`so{;4%}b@pZ$dkQ7xNm zX9V?2Nxmv-r5Mp-2s6MTtiWKSkXm1po%Rle1xl3bu`OIEaG)}wKyZl%I^tG|n(Wuw z>}rXEx;YNFgzYD993pQV607Ajb{o*oycN=ds=KmoYO~j(6e-6(t75`4_6x9mSl)q% zLVI3Oh1N5zxi-5V&oqXCUWL9E_|P=Io&Nltep2R)HSgfSZ)DH1Bq`p8HV*Lq=;W^#`OZ&pUuTy znU0*1)v~G>m5ZRCZz36icUVG`u7y~#4;|AYekSS6ZRNP?4F@~1(xY-K`8pBRppsGC zxMiR9!dzUq?GvYCvxj&L-;?Typ4uh(@{f^x8k3KIz=qjuRI`=bg*}Wtc3YdASY)@o z^4gmV)_u}HyL5N=_H9rcM%N7l0=)aqb2dBSx}gq<8}@u=8-bnr?z>Qhmi9y+ zDT6~_gz%o0r6iy;EB zx}?;Ib~&H_pTK{%9`FaA06rx_mT)IkLT=9rN1sd(Mm+@C7FUwTEjg26J)NBoM}QJx ze|4h&YChMcoOmJI%O^w_pI&X<9$eemR|~#`Ot>ltUW_!uNTCLBHQBBYPTGK{+Tn(5msIvWA75+Uz&* z!as6+y?oxgKMtGxlOVPJ1f7%jq;EAObhM8<4EOx~`| z8Xj-W#gAdBdazBlqtP%w^+9+%5CLX{udR3vl1nmMY30yF-hBug^GiSx2Odua=$oV-0qJ8mkWO@Z`Cu2Q=HoC4O8d-u>77>1 z=i0!uDXT`}{;kM7bdF)oPAS2?l`Dn-7w%!KnuPns2B*M2tv*(z)nPXrSGFri`WtlX z8cd3N7G432eh|k9OJ1TB80ps4!01HC;ND8OYr5l7)RdNcp3mH>AK4r2%_kH)^bQwI z_-BAeI6=U#a<^mi5QHKVF(r|H)yI}-b#lF+t}Pk2#!F(QY0VU4EjMIW`64A~|eCGT5*sq{rVa*vHH^aK;bHhCD!$rWx=K= z)X4p%(x^$`%NX}0aj|3^DsJU+naIEtNQmIyFzAaVo(;4(#P8nXWNN=Wg%@9No1`o` z36zzr1?L$kdbD5VxULlS9r;936!cd_EgAcXBL z!p+;9K*j6vqR#Y)QW+2OZ5LByY`t=2TN- za7Ru1{k_I4(N=O^Q2wc!_T%^d;(Tpo5V+U0Z|mJL1P4~E^eL#!=KmJ0E(l24y3|$0 z*+axRbGfgWp^qzQ*{;ERq!t-$NOjjB3<$woLV)KS%fr41^E9WQR`#a9Hu z|HlDETtgt2OCUd-bXf)bk5+oGi=4FISw0mhs9!3Z;yIKi9T!Oa#3rl+i=iyv0sFvi zVBJoH0plJtLqcf4J1!!cjN6ESLKcGk5yD-X;(CC?YjJkQ*V^oQgwSCKZ5NH$ZpHmU zNRK=%L3gaV{E@|X*R-E+<*f)z0QgZ8Z16X-I<@p!D*D<8Vgrm9>mS5#5rO*frcpQgO#W#qH{8_SqWQV%nBMc}b0Yzef!`JMT$+&I_6v{=gKSDU@B??ef zc9#dg1`ZZK^CJNKC1QbJ#FQ`##dMsC(!f?V?W^}pe^W6O(rem#75#RT?9e-7opB+n zzDaiHJkfT8YV17mB?vAI;yD2sZ2QXwSLa|EEB(9+ZFCQzDx2b7@u&^MD}GDVT!ir@ zGRXSRs_*?ya{aHethU)kV0IjV1w`O&yhfNKHa=w2>Z)1BO8;WKUH<~Ss}5fvvTO(o z#QCh=B!o(&v;S+_U!BvjUt38bSkpdu@%r}z69H!o;B=0!GYDKkD-%1)6+y}rf46ab zTttxkgp>`gj!tEOc{0yN=VQKyCc|086^0OehA?d<|1Gt_LDh#>QQS{<`V4Uqni&=0 zn)Y|A-~U|F=b`g#U{YXfZ`t&@#0D@=l(Kctvn+GO=(Bdgw1=x0#ForQ@n~61`>{K(J|auCohxhQEf2C(x!7)(D3|3``&sIAaV4saju6i< zgXMhVX?PhhCLH2*cHCfz=L^}@h|%qhft_+#T<}t&_>DY`>kFw$DF01mACw7ht){kH zMH>aCckJ+$eRvB~3pHpFy^)iHTrHoI?V-nj(b_uSDb?*bUBrQ1-JYhch=`>O?<0+lycm*VfBy%Rwn)^?`D!~>;Nl10jbf%AN~?e1R&fm%m_$5@CSx7 zlBUFyHn3YVK$FN*u-jvhwRH~2>r=$iWWe_;z`f(8mm-4l{1h>WY-~9{|Ak$r;=k(& zeI0;ACIfmk?hd~`Rt3h8#J*GvO|IlDRmoE^NMa}>fPJYLps-&VPg3%q@UfZ{$6nXo zvO#b9zA9Qy{`H7=z(hcDYP|d=Mo7>vVG=;nxv?aL{~B`LVE~B)0l&Jvx3=;RvOAoC zdGUtaWLGvLsWQob*Q*NOe=61!(_*DEWv%)$6lIfB3#8#=^E)}27Nov#) zMU*?^Fg|4j8-?>>oJ}m}HSsj|zZesTkDJ%fsy+$5qAJlvO>!lxRV4%BfNJbYbg>u$ z6LoyGHrB=p*3p3S;YbPK$LIu}BI|p_naQ9pR-j*smp{`6?S+1;U_TO1>qpo(1AwB> z7jnQ1&{lH!uDZRSw(?!sJ$(bW#H)SXuJ-rWCz4Ikf0LsBggE@?7y;UORr(sm)kEXy z_aR+;0!XU<+faY3B1Ji`n3hzJC{tDJ`gx2z(_&RXKbWZCuZt(1P550U}ziIQuKr(evYgK4t_PBKAGO?Sh5S?KEs@SS3 z4t6&qkd7j7FpI4!y&|6e3hNojde#7o?j!_tbn12nlz<;4*Hwk0ig@^CdNcY*G$IrB z_h1pDYj>k3bt=;IkBJeYSOdI|_5u&qncO+z=4U%P zx~%d5QEtz?|1GI$7GdcGD~+%}8nxw5Bg(LfdSSWy-ZP|Y^x99cj-4k7{YG{*pYQ>^ zh;QkL=P$#^S$-=@$noPVsMnU45+qy#%m{y!QP6?kjDn(u1Fk83cj5~@?dRtNej`&- zu)K42U=4X9hc{Zt#T{$XcZ@(I8esG4*s^7euGdqJb}A`s92Wi9xUpi@Gu;};g*cqi zxc^B~&eE|&j>d6*gC~F47}=!!18CCuYzi=?PJ<>vzO}uDMtx9-My;H~!m!8G4GDHG zY)?(=gC-mudw$?`oGPRzG0f7|y{*uH68wkvNeztd^9kQP1EmlCYnc&_E;_g9e2#A` zMA};Uj)Q;9C_O{ggjqjR_T*&E9P*I>Rrwh32D zuu}~8CIIB#PS|R z+b$3L*gkB;KNjKDEJn!T+Ym#kB(KH5r4qipeXrNPXrXRUVJ;%`L{ofp>0xysRWo7@?&(zC8G{nho3LsAauIw7Dp4Fweh&atxWIYV zaPV_4r4f8f z{NZgE!748{CCf{_Fh`V9#_HO-g&DXCIVCVm%5R>Y{{y%eV;OEq6v5?b@abV0H1nbH z{lUy!ZKwb7C#(V@w(bCU9L=_zAA0%y86LF6=GnQ-jG0^KvQnvl4y@(}6!CjlF;56t z&R?O7$Z@j>qAcQUB2*Q?_c{z@ zHeD=)CY8FPfZr@*#ovEL;ehK);5`R2rS|xjlS{J~)nfkK!8sPSV|pmY>j+>fQR_$4 zEUfCtM9?nF5y+$)vkXfkLlf!KNh!czN^ocgW%L=*eXh0Ocax!i;GBtSX>GbKsX zEiw{y+$O@cH^g{?g?Gt3I1>xS1Tl!E;H<;Ki^6ZsIO=D-U4xoSIvN=LQ*6r++jsnF zHW?R9kSyX0yhWc14Hs$Ov(K+w|9#5M1pIEj3HUiBe&1dG@A2Cw^K`}U6D+B^G~;1lhC@rAC*4Q}M*iG2~D;THp@d>qF>C6K;^UtVnZ2X;7LdN03_vi#@F z0bK{(i>|;L3Hr?23m+{@jonxD6OZB}5BVCsJzn4WsczzQ3~mR`#eBV+8=SC{CYKN} z#w7!L;XkEo2UJ42t5GxezZ6{K3QP@G7mm6N-HX$imb2-6e9vj-uORwlPJGM@5&Ftu zK>B%xKx#0b9OqZaw!}B-SkCO7=&7?1D_+Dz4q%_q!shCyoS)YqQgxqr@kzVaB28Gd zQTi=?brLb0$$2;Ab6x|ll zh&v2dp%q1;Ima;Rw@CVLx|)0e3yVzv6R7;5kvj;!3i5%iL-WHZC}v!zUaCn8jJEuk z@gu&Ojg-1Jbw>s$QIso2%gitom4SiA%#)}~Nh4cC`Tc8xLe*X=k3)0%feB&7iGvV8 z3MFh%d*7%vi}Uz zhx>3bHH7SbjeXk^D~CC9&?jKIjHH(6W0M(7Bp+0Jiz=-a97lq4B>Ecmr!nB26dH+L ze68Z0D;0%EuB2wAsb(2hsb-bIP>>%+m=Gu7m)EMKeBA9QlQKDbhMvf-1}w4gXKXmO zdGe>M7VB5jsEVMKvS<7xHt3HbX=Im&@Bk4(UojB~iAN-8b>dW8H~4U4iXUgsVdAVu zLmW|g=`nVI?vvFHmDOUYR`SR3$5{)qqRP6fB`r~ZWJdy3WA{`L8RAN60nKC*bI0Ad zUywMs2;xJLjo>B@1~L4XjNGSQ((z(TgJ1lN3j@%@;$qqX9d$6;si zY7Hg#V!v{K&~;t+2T@!DNf6nsu5{zYo2}4R#r-&tz$B>$pgPpaB}I9^4?}jv^MOJz zc?;2aARy_@Ebhen=NI9Is?Sm3d_aY6sOBIt8!ozYPW0i1W!&H>eF&TeLZ_Bq(ciJ& zjV@8wDYWB8BFRBiwt|J*FXmXq4tS}sxFE%q_LUdh??Azl0=_t zPC_4?^obMa4q_sSgFXN$fCMNh)<2`bpM*G>Nf<=USoLy!WYG^$KiFtKs15pnQsjSd zl~>)*kjJonx5WM5fGMa%#5=-+*5*Kopj2Yv?r%gH(+zq>0urkpO(X{inHBMO;~a&e z4ww9}_mHl= zG!VC$;M>HXupzPC(^Pe9Q^yN^=f&ScP$iz|iArVU% zxIfTN#MfD9AFRQ#Jt{r-Bb`nUakiZf?S$z|ReFVmbh$yIpPdftMy3P4xMnJTW-2t+ zJ&c?K07<1^e@;w)k{lv_{L@6{__zCq6@8ZjTvs0ECvn|+x};~rQBV@sA{R8MqbrI_ z6*pcoSrG$dgLh4w!&l2W?^R&QFW!htNFWf)EyB~$iqI7NtWcSxcXlu{{q*cuE5vgT z+YONI`*+_@k^DU>nZIz8%_p`@RvXjh01`7}fVR!zyCG=ES(553IU9(S_b&nr(m znoRjFbQI&pLE-OPnnCusw6STB|bhN zX9pf+UA8bB{T<8aidSFlp&*7*Qb8aCFGtFOskB`qyb^k@q?*tgckrD9xs^6hOBiNv(v*aL1 z{S6{`hlO|z5s*`m<6_4{|7-rf3++#seHfnzS| ztM)K+{21n8tPhOW>gc{^@Z3t`*^CUqvIV5~3s8(W__oG|ef5)90@bTcD6ehx?M4R_)F=#!+D ztpQoiWAK{G4|0fsXU4nf3>1>;P-NH%rdG*kXf;|DpOw%^ulk$}wwvl{x}LI^)XR!yNp+pL$7ZXy^|9dp7F0CC zuE;+SCMW56k8_hGD`Wy@?aJJy6{Mw<6JE@Yd2MR`n24RmDE_C@;?x_JOue5y*bOgg zZlRf-y@M~NgoZ<0ogEhQv0b^#!Vz16uH(wc{nIHHfRQ)U4{J$3txsr6GMIQmoFeF`Ur91l5E;XxHS^q6v$JPvt zt*_$sg8^wxfJHoFexsUgJp`Hs`dkl$UGL9c8{qSVZ4pdu&GMEWgS zj#$j*AXSX2;xo*G_MHimK3(UBv#>nM>h~q0EoQVwoTo*Fb0l;&tHD#?8*nNaP`gLp&KyE56(xD=`@hE z{$6B@P9}q4@^sdm1*7+`A=Y3Z0*hD;ALr<>-yM#6{Of(;@&`|+-+(jM@JJ(v^BM-N zNwj?KUQf!}CLXSW(9O(Tq8Umb%SW)?s}I{Hr!{@|L4L2g;M6Q61a?Qh4-ORX}5zrAKUmH_X6-W3h<{tja7Fus#ExHx>z-BHIgL$J5T@wiK3Te z`>`|)nrwU>>DhoPo-GQ7b3#q^Hp$TeAel(p?}rBzvKpLZ709Kq!tWqg?8ju3HbbDecB+$nQ zIhT(asC=RD@WnuGhCfym0VMlJtNpE{qTSxmlY%fq5~gmhP;XEv@Ts3v!+d}>>Y)c% zBfsULU5QyjX2O@auo!_mc|;%S0Exi^J~3#aM_AfNtEON_B^JUZ7(Mg|E1~~(`4CtY zJn@QyxyhHN&_DSgraaLP`T_<_@MSRe=|EhxkC3e2x)~AD{O6h+4`4zrOEFn8o#bW)MF z?oJ$5K3t+r*$t||1dR^q%*vBFz_|_lg$rn3L?IZPQa}K8Sd$QLYJ!yfca9txF=4=S z%Gj1Hn`70m56IIC#GpE&cfUjdGgyrcT->SBN788K%C4H9 zj&tfp`FSL=EzJcuL6RVlPD$K4_zEW|+@5eZHIoJTn4(8ayS7VtB0dB7K1X%$E-4RQc7CgVth>^xunU4_C?yH z8>Tzq>=;GA2nSda{c2%r>_&NLoMa;{NSjNN5r?%Kofe!q>4 zNpU(>V3Hq7&iAnYC(8W`&PtjoRH(&ts7~7J#o0r(*XzmuYSH@&>R0`lel}GrcCzB{ z5l9z{a`AJgf^;4&GOD&JeQBl~QvJe+<*{^eD1qqVDP@ZG*d@Z2=Z9%Z`lMw?Qy>P$NQ%s|la4G`Tg-xSC zMXh!vstXow2MLQ0h2JEQ)9}oA)jWdA-s8(AxaKo&ASctu{i<95n8)2ba3|1)+v$Z}s^X zDzv3?fxCE>k$omnFUO}8t5NOBEucK^uY__!qQiJ~Yr&r*RKhRHtIq1@3pV!g1rHpJ zj@DI2F$SMlJn*lmrfuBs2;&n1zK%vjd^f`y>GlPWyBFi*IOT5MRy+;+Trx_`vMgVR z*Q45mb~wVJ2S^BOW{3F*1Mpa%$Th1v7zhC-Zb8=GI9T+i7a&Ts;!o863}5hH-n;K8 z3EherblDg%$sS+mDqNOzY|;0xwC0b&2ZL@)!5n!x3I+P&+Cq7Kd$GE-FL=ybGVHI| zwCLL%Eg5~V#6%V5t+_?o>sOU`G*%RuSCs?UJlsvY$Cr9lR;+hWJ`A7S>DGmplz<43#fKJEO}8>| ztn;cA{Yazi4Yj`JD`tCor;bt#?`?`rMszzZlijv z%f9uuzb2z}tidW6b9%GnuIWe{xW}CQnC1q^ao=47D_e&hR zG7VUVaEJqL;>^yOVnUHV0A7$YWzm}$I*xF3A*%0NY`#|%{4yol8v$%T!YoZ9gWG5O+5H`xbyN!>4go5c53t~iThI4HmW$<+kOFIhjD_uP?0$^f zriEAlo8)50k3HnGMsjLdj~rZH*n-PgRT@e|rF5co`;iZ`r z^COfphgx!|OF(w1z#>q$2T2yb3FE% zs=_$CCIN~z3`QBpJLV+ZS=pt{%cW=s+F`W_Y2DLdZj{3AyB>udyZS8LqkkIj)DNQ^ zt`#0E9jrVIqi%i#@an=JWw9|+a6cRa_`U~F<>oJn7PUJ}+yZefQK>Gxdnj{rVqAt$ z=fs$j&UZD(VKiVfgFHKc4_DsD2~RQ}Fu1(B@Zdy3z}H;{XCM$587%x_2m{!Lo0*F_ zNH547#Hr|!M$U66)1TG{oF!ZCB3-^!QE+&VkjxaXt~&q z7XvSpSKwd!jWSNWix)sS_!?B43lV|-8!pN9D=ury?$2f(Y(X6z%uEh-y_ElCo4pW$`QiSe|-;hBaHR=&{d%u;b#C8Rrpq; z%-$Z-Qdee#T ze=Sr6+)^Ko{)%Mu$lWGne-}%+#d*oifc}3y%)>4?C%#Jj&jJ1(;tyo_gFUsd#wjr% zz(o5$l{ek?`LZ&x&2N({x;YVA_ps6*g9MdaNAP%x|1wzoi;m-TW+{i3e#>F)U=$+_j)UK`nO4rVA3|HvdJut|2!|ggw$M=h| zn6lxY{dhbt?E|?TIM^{-3$8`|at9C&!{9sNP>JDBPJt?;H$+CrO+p%r7$3N_Yj+Xw z?yt16)~~cVEp|l>UuoCj-<>{peQ)Hvt_A5k@$TFz-{-U;E55NCpy2n4korfCi0iqF94MCB@(bgFS;22x=9JZBwljEmkBK zuv`pG(2Ud3cxko8wpv?j`)RAT7D22{0282IxL8GK6;R;}V=G|G)so-qz4w{P1^j%! z&;S4Yo*zDD&N=(O_S);V*Is)=tO6^NKqDssdkVnY8;l%YIf8z=Wo*oSW(07HKZ`Y< z9{P1^cUup6B!j6)Fp>lH;6+l+U#J9&H&UI2H&)}0nI(_u)Zq!N;vVw-xA$UwBEMij zm;Jz$5kd$F-Sj)WHQWtJs(P;jLmyy@J?L9Bd4KmDdLxG`xUwtKDqN<@ahsb!6O zlx`(foQQe$3-xpVbxd+?5BT)3|8e3KMBL6n5@UWLELBpM$e z`}%efL2LDp+~(OOSTKBsp$i#tW<=k|5N zz(O z$yqIx(R($hi6~W-kq7mNxJ`iRw2IHtt{6JFQ$9$YCv@y^Gt}d`bSCom-a{qhm_MGQ zjQi_2h$)W+_a-Q^5XX@rjQdYWcBhzcsu=TD7v4p=Aj+3P)dn*-k1*z7&VV#I@C~-t zWwB?vKr5_+{Rq%JG=ivkcY?VF+=4VaH$Z1v+y{DcAn_Zjt89}w+7OVrzU%P@k#cNJITJP*FeZ{}lmGat`Tt_^%>>0+sNt>pLc z%CiKuLZ%YCzW+c$@RxBX`GYuHY!G9WrSKhR1di^b*=L%aH)kQII&iW*1rX@m9pBI7 zqJ!hcp7=?yY-{b5MvflUP4pyYGkg#UX+Bf}=edN?M)iY0`@Pj&Tc%KH|HC{ z=+{f5e>D7ImEjMo^js0y*S33L#i)IeL&uX0p-}dN03l3?82u9c)IXJ$@@qOo`0Hq&ranQP=8P5uqnta7&0(|dQ0;hGnH(yf zl;fkoCim>1BE~Hc<()$0>jzD>m`?g7eC`#=F6o>U-oKC(stHCocoVyHOSt@IlbPXQ z5^y4!Tez%MkM012R>x{*`+G>Q4gEa-EQRYmN8AD0pk>PWz;Ouk zOXWsx)-9SBNo_{FdQnTJGP*>|qB63?E}$cAdj?jHdSfD&$BjDN_HjSf(ZtBQine%O z#i%2dk$aW-^4OrP$W*RIPxx>{!Pu>M^lS-jh_sm#an6=K&Zdt;vCO+B#V);vvsH7q z%8EsD^MvdsBs{!9m^9=LTs|=$>~q)hf%~8P2^W|L!JdSGY`9(6gRhliZtq1?; zNv7Q3%oAtqE1$K?Vdrm{r4M68A6V`B!{FaBmvlH=b}OLKl4AlvbY39b_Nl#tG`M9) zFnu3Ko2w#iA^$TS!NrHu8f9p^o197cgpbA?S60>A9QOm}1w-31w}+ukakDUEpBwL= zHo^Zw&eX)$t4?C1yUdpT8M%xp&l>3zg_|1V)Oa~%uTGpDj5VhfBAb`3Yw%$*Nepb^ zODEhA898l-;uEt4Uw1l(==@FZXnclugCLkM4;|t%WgXZinD#oZuQZQl7tuuLmskhj zA(rdwz9>RkXld7%u(lmGRH=@WAM3bu&Mi0-D#;$3dHIf~SQRF4>$ox?w+$t1aS!ab zWDOLOkO=!8C$mGb|AmIDoX+)BOQeD}R`V#kn)z^`1y#B(1H z#pIFnq;vc*VmnoDeNA{8|8hpOgU{{aRA5(TdPTVPctzvkj5$~>_B(Cv z*h_u28R1r++zu1tqqDE^zqmWI7LH6K4F;5!w!QeWWLVv}M)V+|-t%Q$e)voq0AKgDNc3)jTuKcZ!C*Bk}!lFC3T8IE1 z5W78?6`iZjq}8&qn(ajAmf}f__JNsBX1&N?JKrKy_F&IT(x9wRO>jv(BJc(9yr>3* z9LZilg8!LA2x$Pe4(yH%qI*|mMT4}kGhHn}-8Xvn&m^8PfNBPAw$UwrS#|`M5Q9IO zI}d@Ly6Hp`wfUq7WbtQ5roo?iqE9e1{`A0~-;pe=vB-jd3&`Sy;O*ujg}iVA%79Z~ zlFjR1eq~m8e`YfWZ^HB0W4J=r*G8cxdn-hzGeU`b$_FCfAEax=G3Ci-F3%GW_TFOi z^W3nvMyURIQwwKa;Ts`!E}1W7Ha1LPT{0&f$?k!^;I6p@9@AGyq?Ylo#tzb-)2hn;=3g=b;aAatm5n8Kb$`Mv zHTX=7@9<8)wUSqCd4I;lvTgqGzhOr4@2MrxRP+{YHk?DTYY{mAim%VWs@PSBtD>hO zf60$yt1;4aksJA+zi4)uP$no75EAsCls2eT@pU%#fp|Kj`JT4NZf6^odP>sV0SKT|33`mZgW zZ?odYYQ>$U1vahsRB53hGm821$1$5c#{VduBVEqJz~~$;>x^3DV=ib!E}|{uP06R* z@j^>x^Dm#o>YZa&Z=qeiIcSD>+9l~j`~twvGznIh8Y9{#p~z16Eo2h;CVI_LM|H@8 ziNFBCtW>8XZ^5t3U<`N+WTK1c+n%)AYXz(t2Q??TR*d|z9X6{$)<|~#-SONcqw=}m zyir7eL8q$s(ASKgz`v#;TYY-%1UnbeuQPPJ6b=5m^S%13Rex3Y`qNGQcJUdwI&2mz z5Vb((K8aha?D$LzI(zeAjooaubYh)Ju6z8^v?%o*OoG02WY!gi_Z$l}FUpEu#khAF zLI?q8@rpEQza1Jl<2Gm@6NCP-?BCb{V!msVU)+1`hwvdr9~=JCQy5?0=6uTuG;+z; zPo$CmVgt21cTJxE`JMP<5B};zPlI!al8AdODoToSVsEia8(>2(8~EYcS=-N0Hq4pJ zug(f@$ZEbiOVR_3wmBs5Tn!BYKOwN$>95Nv$L%mW5iQ< z0Uf(>6Z#9cC!v|HubbpVM@ccA;DqnQw|D8&D6ap)e})%3H@YJbE!LPraCz=f0w5QqmW-uhsk;|CW0X^q6e-$2TZz(iR;*zo(=w z{?~9Ta|`#FB`(Y#<|$k3PU{PnmsQ`V6OF)}$u&mM*CU&HvXA{O?lpkR5)Q*j7|@l4 zYPG=ql1WkBVb1CH;?(GW)4O+1a43j>yUWxe|L2YNa)asONsB*vR`uZ*sR?po_SgTy zY%!$$PDU*z+~t=GMXogcuQ=F-&{fg74wzOZ@Ba>N*-3`M72(y$T}LzgOa4M#p%`1) zM4A7R9(4a94|d5WpC2Wcp5Y|bS0TY|4rN@8S1QH0BN|#y?0u@8R*f&=HaHAl>^kS; z)mHlZQWeaH;?u5z)NirHZ5y@*8(sT^N*>oxX(wP73?hg22PA^D@+(R?HgTy_c6DJr zZdI%-B>t^P{FZ(JUM9u^*W$H;-WoFi_~2mi!64!rct2E1a!m_uS3{e>j%jnyTN(ss z^>6iLpFZ_JcA~QbPIysPTHXCvgszg{>wjiL3o*|QBMh)Z)s|(%1G8?q{-NYsT^17no;oa$p)95KQE#!Z)HQ;}+ zT`$A62?}}a20HP%!iosG1t1ht$HSdbDxken5jj-B#SSTmGno@(Q~Fdk=ZwdLxw)ucWi+69-;q{3THoi%i>rLaLBsT`BE^YYf{{;&I24Q=!admH|0)(hC~`a$ z*^^*Ot4k+EZ^)S^fm9A;0qk$am(Ako|JGT-yn9c*o}|}~nH+7((P-&RRrKs|d2zBo zg^8Pjk^d(9v)e6AcID#)+@^Z$r08R&pb=9yx_A8l){{w{00_VZswbxd58zScx5m{r9gyayh?x9V`RTrMWu)dV+j#BZ2n2_=Y9S-~9~vz$(}uG4Uh0 z5Sjm@)vyu_lM(I+U%Wb9G^lKodlheTfTDQ!1KE}(#hnb8Y>?mcO-XmwZMd5#{Td; z-LUqD-|!^Xl(Ih@Y{UGZxb}_nvt{#+UYQp+oDD)#Xhnw(oCA_PmdRER^d%2a6<}eg#=>B>RSq}t zy+8Ix>k0w!!;Qx*JVOBqDe%RM&KMvfwCWy7>JJu&@&-sig>M=uSP-1wd0?e5#D%9QNQZ7zLnQr!$Wt%0D*X~pVPEuO$SA@M+Sl={ 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

&zq8NR{l!%vA_CXF@m=DGcgEmWVz4Dd3hwc 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 z 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�>r=H9pbyN#E($pWHsd3_gt;Uh#8_ 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

Wo9)|)dbsq_>#sZK_5S6gA68c%`M(YXCgL^qS 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%0Df_(CH5{C<&eOSSI<+)&(2PMEvzoq1z=3 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≦& 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

EUtt8S#1 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 type +// ---------------------- +// (*(T[P])) *T[P] +// *(T[P]) *T[P] +// (T[P]) T[P] +// T[P] T[P] +func (check *Checker) recordParenthesizedRecvTypes(expr syntax.Expr, typ Type) { + for { + check.recordTypeAndValue(expr, typexpr, typ, nil) + switch e := expr.(type) { + case *syntax.ParenExpr: + expr = e.X + case *syntax.Operation: + if e.Op == syntax.Mul && e.Y == nil { + expr = e.X + // In a correct program, typ must be an unnamed + // pointer type. But be careful and don't panic. + ptr, _ := typ.(*Pointer) + if ptr == nil { + return // something is wrong + } + typ = ptr.base + break + } + return // cannot unpack any further + default: + return // cannot unpack any further + } + } +} + // collectParams collects (but does not delare) all parameters of list and returns // the list of parameter names, corresponding parameter variables, and whether the // parameter list is variadic. Anonymous parameters are recorded with nil names. diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go index f94fe6be4ccae4..febb5893436e4f 100644 --- a/src/go/types/api_test.go +++ b/src/go/types/api_test.go @@ -403,6 +403,116 @@ func TestTypesInfo(t *testing.T) { {`package s8; func _() { f(g, h) }; func f[P any](func(int, P), func(P, string)) {}; func g[P any](P, P) {}; func h[P, Q any](P, Q) {}`, `h`, `func(int, string)`}, {`package s9; func _() { f(g, h[int]) }; func f[P any](func(int, P), func(P, string)) {}; func g[P any](P, P) {}; func h[P, Q any](P, Q) {}`, `h`, `func[P, Q any](P, Q)`}, // go.dev/issues/60212 {`package s10; func _() { f(g, h[int]) }; func f[P any](func(int, P), func(P, string)) {}; func g[P any](P, P) {}; func h[P, Q any](P, Q) {}`, `h[int]`, `func(int, string)`}, + + // go.dev/issue/68639 + // parenthesized and pointer type expressions in various positions + // - as variable type, not generic + {`package qa1; type T int; var x T`, `T`, `qa1.T`}, + {`package qa2; type T int; var x (T)`, `T`, `qa2.T`}, + {`package qa3; type T int; var x (T)`, `(T)`, `qa3.T`}, + {`package qa4; type T int; var x ((T))`, `T`, `qa4.T`}, + {`package qa5; type T int; var x ((T))`, `(T)`, `qa5.T`}, + {`package qa6; type T int; var x ((T))`, `((T))`, `qa6.T`}, + {`package qa7; type T int; var x *T`, `T`, `qa7.T`}, + {`package qa8; type T int; var x *T`, `*T`, `*qa8.T`}, + {`package qa9; type T int; var x (*T)`, `T`, `qa9.T`}, + {`package qa10; type T int; var x (*T)`, `*T`, `*qa10.T`}, + {`package qa11; type T int; var x *(T)`, `T`, `qa11.T`}, + {`package qa12; type T int; var x *(T)`, `(T)`, `qa12.T`}, + {`package qa13; type T int; var x *(T)`, `*(T)`, `*qa13.T`}, + {`package qa14; type T int; var x (*(T))`, `(T)`, `qa14.T`}, + {`package qa15; type T int; var x (*(T))`, `*(T)`, `*qa15.T`}, + {`package qa16; type T int; var x (*(T))`, `(*(T))`, `*qa16.T`}, + + // - as ordinary function parameter, not generic + {`package qb1; type T int; func _(T)`, `T`, `qb1.T`}, + {`package qb2; type T int; func _((T))`, `T`, `qb2.T`}, + {`package qb3; type T int; func _((T))`, `(T)`, `qb3.T`}, + {`package qb4; type T int; func _(((T)))`, `T`, `qb4.T`}, + {`package qb5; type T int; func _(((T)))`, `(T)`, `qb5.T`}, + {`package qb6; type T int; func _(((T)))`, `((T))`, `qb6.T`}, + {`package qb7; type T int; func _(*T)`, `T`, `qb7.T`}, + {`package qb8; type T int; func _(*T)`, `*T`, `*qb8.T`}, + {`package qb9; type T int; func _((*T))`, `T`, `qb9.T`}, + {`package qb10; type T int; func _((*T))`, `*T`, `*qb10.T`}, + {`package qb11; type T int; func _(*(T))`, `T`, `qb11.T`}, + {`package qb12; type T int; func _(*(T))`, `(T)`, `qb12.T`}, + {`package qb13; type T int; func _(*(T))`, `*(T)`, `*qb13.T`}, + {`package qb14; type T int; func _((*(T)))`, `(T)`, `qb14.T`}, + {`package qb15; type T int; func _((*(T)))`, `*(T)`, `*qb15.T`}, + {`package qb16; type T int; func _((*(T)))`, `(*(T))`, `*qb16.T`}, + + // - as method receiver, not generic + {`package qc1; type T int; func (T) _() {}`, `T`, `qc1.T`}, + {`package qc2; type T int; func ((T)) _() {}`, `T`, `qc2.T`}, + {`package qc3; type T int; func ((T)) _() {}`, `(T)`, `qc3.T`}, + {`package qc4; type T int; func (((T))) _() {}`, `T`, `qc4.T`}, + {`package qc5; type T int; func (((T))) _() {}`, `(T)`, `qc5.T`}, + {`package qc6; type T int; func (((T))) _() {}`, `((T))`, `qc6.T`}, + {`package qc7; type T int; func (*T) _() {}`, `T`, `qc7.T`}, + {`package qc8; type T int; func (*T) _() {}`, `*T`, `*qc8.T`}, + {`package qc9; type T int; func ((*T)) _() {}`, `T`, `qc9.T`}, + {`package qc10; type T int; func ((*T)) _() {}`, `*T`, `*qc10.T`}, + {`package qc11; type T int; func (*(T)) _() {}`, `T`, `qc11.T`}, + {`package qc12; type T int; func (*(T)) _() {}`, `(T)`, `qc12.T`}, + {`package qc13; type T int; func (*(T)) _() {}`, `*(T)`, `*qc13.T`}, + {`package qc14; type T int; func ((*(T))) _() {}`, `(T)`, `qc14.T`}, + {`package qc15; type T int; func ((*(T))) _() {}`, `*(T)`, `*qc15.T`}, + {`package qc16; type T int; func ((*(T))) _() {}`, `(*(T))`, `*qc16.T`}, + + // - as variable type, generic + {`package qd1; type T[_ any] int; var x T[int]`, `T`, `qd1.T[_ any]`}, + {`package qd2; type T[_ any] int; var x (T[int])`, `T[int]`, `qd2.T[int]`}, + {`package qd3; type T[_ any] int; var x (T[int])`, `(T[int])`, `qd3.T[int]`}, + {`package qd4; type T[_ any] int; var x ((T[int]))`, `T`, `qd4.T[_ any]`}, + {`package qd5; type T[_ any] int; var x ((T[int]))`, `(T[int])`, `qd5.T[int]`}, + {`package qd6; type T[_ any] int; var x ((T[int]))`, `((T[int]))`, `qd6.T[int]`}, + {`package qd7; type T[_ any] int; var x *T[int]`, `T`, `qd7.T[_ any]`}, + {`package qd8; type T[_ any] int; var x *T[int]`, `*T[int]`, `*qd8.T[int]`}, + {`package qd9; type T[_ any] int; var x (*T[int])`, `T`, `qd9.T[_ any]`}, + {`package qd10; type T[_ any] int; var x (*T[int])`, `*T[int]`, `*qd10.T[int]`}, + {`package qd11; type T[_ any] int; var x *(T[int])`, `T[int]`, `qd11.T[int]`}, + {`package qd12; type T[_ any] int; var x *(T[int])`, `(T[int])`, `qd12.T[int]`}, + {`package qd13; type T[_ any] int; var x *(T[int])`, `*(T[int])`, `*qd13.T[int]`}, + {`package qd14; type T[_ any] int; var x (*(T[int]))`, `(T[int])`, `qd14.T[int]`}, + {`package qd15; type T[_ any] int; var x (*(T[int]))`, `*(T[int])`, `*qd15.T[int]`}, + {`package qd16; type T[_ any] int; var x (*(T[int]))`, `(*(T[int]))`, `*qd16.T[int]`}, + + // - as ordinary function parameter, generic + {`package qe1; type T[_ any] int; func _(T[int])`, `T`, `qe1.T[_ any]`}, + {`package qe2; type T[_ any] int; func _((T[int]))`, `T[int]`, `qe2.T[int]`}, + {`package qe3; type T[_ any] int; func _((T[int]))`, `(T[int])`, `qe3.T[int]`}, + {`package qe4; type T[_ any] int; func _(((T[int])))`, `T`, `qe4.T[_ any]`}, + {`package qe5; type T[_ any] int; func _(((T[int])))`, `(T[int])`, `qe5.T[int]`}, + {`package qe6; type T[_ any] int; func _(((T[int])))`, `((T[int]))`, `qe6.T[int]`}, + {`package qe7; type T[_ any] int; func _(*T[int])`, `T`, `qe7.T[_ any]`}, + {`package qe8; type T[_ any] int; func _(*T[int])`, `*T[int]`, `*qe8.T[int]`}, + {`package qe9; type T[_ any] int; func _((*T[int]))`, `T`, `qe9.T[_ any]`}, + {`package qe10; type T[_ any] int; func _((*T[int]))`, `*T[int]`, `*qe10.T[int]`}, + {`package qe11; type T[_ any] int; func _(*(T[int]))`, `T[int]`, `qe11.T[int]`}, + {`package qe12; type T[_ any] int; func _(*(T[int]))`, `(T[int])`, `qe12.T[int]`}, + {`package qe13; type T[_ any] int; func _(*(T[int]))`, `*(T[int])`, `*qe13.T[int]`}, + {`package qe14; type T[_ any] int; func _((*(T[int])))`, `(T[int])`, `qe14.T[int]`}, + {`package qe15; type T[_ any] int; func _((*(T[int])))`, `*(T[int])`, `*qe15.T[int]`}, + {`package qe16; type T[_ any] int; func _((*(T[int])))`, `(*(T[int]))`, `*qe16.T[int]`}, + + // - as method receiver, generic + {`package qf1; type T[_ any] int; func (T[_]) _() {}`, `T`, `qf1.T[_ any]`}, + {`package qf2; type T[_ any] int; func ((T[_])) _() {}`, `T[_]`, `qf2.T[_]`}, + {`package qf3; type T[_ any] int; func ((T[_])) _() {}`, `(T[_])`, `qf3.T[_]`}, + {`package qf4; type T[_ any] int; func (((T[_]))) _() {}`, `T`, `qf4.T[_ any]`}, + {`package qf5; type T[_ any] int; func (((T[_]))) _() {}`, `(T[_])`, `qf5.T[_]`}, + {`package qf6; type T[_ any] int; func (((T[_]))) _() {}`, `((T[_]))`, `qf6.T[_]`}, + {`package qf7; type T[_ any] int; func (*T[_]) _() {}`, `T`, `qf7.T[_ any]`}, + {`package qf8; type T[_ any] int; func (*T[_]) _() {}`, `*T[_]`, `*qf8.T[_]`}, + {`package qf9; type T[_ any] int; func ((*T[_])) _() {}`, `T`, `qf9.T[_ any]`}, + {`package qf10; type T[_ any] int; func ((*T[_])) _() {}`, `*T[_]`, `*qf10.T[_]`}, + {`package qf11; type T[_ any] int; func (*(T[_])) _() {}`, `T[_]`, `qf11.T[_]`}, + {`package qf12; type T[_ any] int; func (*(T[_])) _() {}`, `(T[_])`, `qf12.T[_]`}, + {`package qf13; type T[_ any] int; func (*(T[_])) _() {}`, `*(T[_])`, `*qf13.T[_]`}, + {`package qf14; type T[_ any] int; func ((*(T[_]))) _() {}`, `(T[_])`, `qf14.T[_]`}, + {`package qf15; type T[_ any] int; func ((*(T[_]))) _() {}`, `*(T[_])`, `*qf15.T[_]`}, + {`package qf16; type T[_ any] int; func ((*(T[_]))) _() {}`, `(*(T[_]))`, `*qf16.T[_]`}, } for _, test := range tests { diff --git a/src/go/types/expr.go b/src/go/types/expr.go index ea680b8504df3b..8289de223fff5b 100644 --- a/src/go/types/expr.go +++ b/src/go/types/expr.go @@ -1362,7 +1362,7 @@ func (check *Checker) exprInternal(T *target, x *operand, e ast.Expr, hint Type) x.typ = typ case *ast.ParenExpr: - // type inference doesn't go past parentheses (targe type T = nil) + // type inference doesn't go past parentheses (target type T = nil) kind := check.rawExpr(nil, x, e.X, nil, false) x.expr = e return kind diff --git a/src/go/types/signature.go b/src/go/types/signature.go index 69266cf4d92ec2..a6cc3024275008 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -169,10 +169,12 @@ func (check *Checker) collectRecv(rparam *ast.Field, scopePos token.Pos) (recv * // Determine the receiver base type. var recvType Type = Typ[Invalid] if rtparams == nil { - // If there are no type parameters, we can simply typecheck rbase. - // If rbase denotes a generic type, varType will complain. Further - // receiver constraints will be checked later, with validRecv. - recvType = check.varType(rbase) + // If there are no type parameters, we can simply typecheck rparam.Type. + // If that is a generic type, varType will complain. + // Further receiver constraints will be checked later, with validRecv. + // We use rparam.Type (rather than base) to correctly record pointer + // and parentheses in types.Info (was bug, see go.dev/issue/68639). + recvType = check.varType(rparam.Type) } else { // If there are type parameters, rbase must denote a generic base type. var baseType *Named @@ -219,12 +221,14 @@ func (check *Checker) collectRecv(rparam *ast.Field, scopePos token.Pos) (recv * } recvType = check.instance(rparam.Type.Pos(), baseType, targs, nil, check.context()) check.recordInstance(rbase, targs, recvType) - } - } - // Reestablish pointerness if needed (but avoid a pointer to an invalid type). - if rptr && isValid(recvType) { - recvType = NewPointer(recvType) + // Reestablish pointerness if needed (but avoid a pointer to an invalid type). + if rptr && isValid(recvType) { + recvType = NewPointer(recvType) + } + + check.recordParenthesizedRecvTypes(rparam.Type, recvType) + } } // Make sure we have no more than one receiver name. @@ -258,6 +262,37 @@ func (check *Checker) collectRecv(rparam *ast.Field, scopePos token.Pos) (recv * return } +// recordParenthesizedRecvTypes records parenthesized intermediate receiver type +// expressions that all map to the same type, by recursively unpacking expr and +// recording the corresponding type for it. Example: +// +// expression --> type +// ---------------------- +// (*(T[P])) *T[P] +// *(T[P]) *T[P] +// (T[P]) T[P] +// T[P] T[P] +func (check *Checker) recordParenthesizedRecvTypes(expr ast.Expr, typ Type) { + for { + check.recordTypeAndValue(expr, typexpr, typ, nil) + switch e := expr.(type) { + case *ast.ParenExpr: + expr = e.X + case *ast.StarExpr: + expr = e.X + // In a correct program, typ must be an unnamed + // pointer type. But be careful and don't panic. + ptr, _ := typ.(*Pointer) + if ptr == nil { + return // something is wrong + } + typ = ptr.base + default: + return // cannot unpack any further + } + } +} + // collectParams collects (but does not delare) all parameters of list and returns // the list of parameter names, corresponding parameter variables, and whether the // parameter list is variadic. Anonymous parameters are recorded with nil names. From b60f88d81022e4172e44aef2f0bdade87ed6916d Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Mon, 29 Jul 2024 17:40:10 +0000 Subject: [PATCH 123/866] cmd/internal/script: new hook for adding in toolchain script conditions Introduce a new function AddToolChainScriptConditions that augments a default "script.Cond" set with a collection of useful conditions, including godebug/goexperiment, cgo, race support, buildmode, asan, msan, and so on. Having these conditions available makes it easier to write script tests that deal with specific build-flavor corner cases. The functions backing the new conditions are helper functions migrated over from the Go command's script test setup. Updates #68606. Change-Id: I14def1115b54dc47529c983abcd2c5ea9326b9de Reviewed-on: https://go-review.googlesource.com/c/go/+/601715 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- .../testdata/script/script_test_basics.txt | 1 + src/cmd/go/script_test.go | 2 +- src/cmd/go/scriptconds_test.go | 88 +------------ .../internal/script/scripttest/conditions.go | 116 ++++++++++++++++++ src/cmd/internal/script/scripttest/run.go | 12 +- 5 files changed, 126 insertions(+), 93 deletions(-) create mode 100644 src/cmd/internal/script/scripttest/conditions.go diff --git a/src/cmd/compile/testdata/script/script_test_basics.txt b/src/cmd/compile/testdata/script/script_test_basics.txt index ecc28951a1e58d..7fe99dbbc2f042 100644 --- a/src/cmd/compile/testdata/script/script_test_basics.txt +++ b/src/cmd/compile/testdata/script/script_test_basics.txt @@ -4,6 +4,7 @@ go build [!cgo] skip cc -c testdata/mumble.c +[GOEXPERIMENT:fieldtrack] help exec -- go.mod -- module main diff --git a/src/cmd/go/script_test.go b/src/cmd/go/script_test.go index 36605bb66c91fc..09232100f53b74 100644 --- a/src/cmd/go/script_test.go +++ b/src/cmd/go/script_test.go @@ -89,7 +89,7 @@ func TestScript(t *testing.T) { t.Fatal(err) } engine := &script.Engine{ - Conds: scriptConditions(), + Conds: scriptConditions(t), Cmds: scriptCommands(quitSignal(), gracePeriod), Quiet: !testing.Verbose(), } diff --git a/src/cmd/go/scriptconds_test.go b/src/cmd/go/scriptconds_test.go index b4f139a983c1ae..262214f6a96c76 100644 --- a/src/cmd/go/scriptconds_test.go +++ b/src/cmd/go/scriptconds_test.go @@ -10,21 +10,21 @@ import ( "cmd/internal/script/scripttest" "errors" "fmt" - "internal/buildcfg" - "internal/platform" "internal/testenv" "os" "os/exec" "path/filepath" "runtime" "runtime/debug" - "strings" "sync" + "testing" ) -func scriptConditions() map[string]script.Cond { +func scriptConditions(t *testing.T) map[string]script.Cond { conds := scripttest.DefaultConds() + scripttest.AddToolChainScriptConditions(t, conds, goHostOS, goHostArch) + add := func(name string, cond script.Cond) { if _, ok := conds[name]; ok { panic(fmt.Sprintf("condition %q is already registered", name)) @@ -37,26 +37,10 @@ func scriptConditions() map[string]script.Cond { } add("abscc", script.Condition("default $CC path is absolute and exists", defaultCCIsAbsolute)) - add("asan", sysCondition("-asan", platform.ASanSupported, true)) - add("buildmode", script.PrefixCondition("go supports -buildmode=", hasBuildmode)) add("case-sensitive", script.OnceCondition("$WORK filesystem is case-sensitive", isCaseSensitive)) add("cc", script.PrefixCondition("go env CC = (ignoring the go/env file)", ccIs)) - add("cgo", script.BoolCondition("host CGO_ENABLED", testenv.HasCGO())) - add("cgolinkext", script.Condition("platform requires external linking for cgo", cgoLinkExt)) - add("cross", script.BoolCondition("cmd/go GOOS/GOARCH != GOHOSTOS/GOHOSTARCH", goHostOS != runtime.GOOS || goHostArch != runtime.GOARCH)) - add("fuzz", sysCondition("-fuzz", platform.FuzzSupported, false)) - add("fuzz-instrumented", sysCondition("-fuzz with instrumentation", platform.FuzzInstrumented, false)) add("git", lazyBool("the 'git' executable exists and provides the standard CLI", hasWorkingGit)) - add("GODEBUG", script.PrefixCondition("GODEBUG contains ", hasGodebug)) - add("GOEXPERIMENT", script.PrefixCondition("GOEXPERIMENT is enabled", hasGoexperiment)) - add("go-builder", script.BoolCondition("GO_BUILDER_NAME is non-empty", testenv.Builder() != "")) - add("link", lazyBool("testenv.HasLink()", testenv.HasLink)) - add("msan", sysCondition("-msan", platform.MSanSupported, true)) - add("mustlinkext", script.Condition("platform always requires external linking", mustLinkExt)) add("net", script.PrefixCondition("can connect to external network host ", hasNet)) - add("pielinkext", script.Condition("platform requires external linking for PIE", pieLinkExt)) - add("race", sysCondition("-race", platform.RaceDetectorSupported, true)) - add("symlink", lazyBool("testenv.HasSymlink()", testenv.HasSymlink)) add("trimpath", script.OnceCondition("test binary was built with -trimpath", isTrimpath)) return conds @@ -84,23 +68,6 @@ func ccIs(s *script.State, want string) (bool, error) { return cfg.DefaultCC(GOOS, GOARCH) == want, nil } -func sysCondition(flag string, f func(goos, goarch string) bool, needsCgo bool) script.Cond { - return script.Condition( - "GOOS/GOARCH supports "+flag, - func(s *script.State) (bool, error) { - GOOS, _ := s.LookupEnv("GOOS") - GOARCH, _ := s.LookupEnv("GOARCH") - cross := goHostOS != GOOS || goHostArch != GOARCH - return (!needsCgo || (testenv.HasCGO() && !cross)) && f(GOOS, GOARCH), nil - }) -} - -func hasBuildmode(s *script.State, mode string) (bool, error) { - GOOS, _ := s.LookupEnv("GOOS") - GOARCH, _ := s.LookupEnv("GOARCH") - return platform.BuildModeSupported(runtime.Compiler, mode, GOOS, GOARCH), nil -} - var scriptNetEnabled sync.Map // testing.TB → already enabled func hasNet(s *script.State, host string) (bool, error) { @@ -137,35 +104,6 @@ func hasNet(s *script.State, host string) (bool, error) { return true, nil } -func hasGodebug(s *script.State, value string) (bool, error) { - godebug, _ := s.LookupEnv("GODEBUG") - for _, p := range strings.Split(godebug, ",") { - if strings.TrimSpace(p) == value { - return true, nil - } - } - return false, nil -} - -func hasGoexperiment(s *script.State, value string) (bool, error) { - GOOS, _ := s.LookupEnv("GOOS") - GOARCH, _ := s.LookupEnv("GOARCH") - goexp, _ := s.LookupEnv("GOEXPERIMENT") - flags, err := buildcfg.ParseGOEXPERIMENT(GOOS, GOARCH, goexp) - if err != nil { - return false, err - } - for _, exp := range flags.All() { - if value == exp { - return true, nil - } - if strings.TrimPrefix(value, "no") == strings.TrimPrefix(exp, "no") { - return false, nil - } - } - return false, fmt.Errorf("unrecognized GOEXPERIMENT %q", value) -} - func isCaseSensitive() (bool, error) { tmpdir, err := os.MkdirTemp(testTmpDir, "case-sensitive") if err != nil { @@ -213,21 +151,3 @@ func hasWorkingGit() bool { _, err := exec.LookPath("git") return err == nil } - -func cgoLinkExt(s *script.State) (bool, error) { - GOOS, _ := s.LookupEnv("GOOS") - GOARCH, _ := s.LookupEnv("GOARCH") - return platform.MustLinkExternal(GOOS, GOARCH, true), nil -} - -func mustLinkExt(s *script.State) (bool, error) { - GOOS, _ := s.LookupEnv("GOOS") - GOARCH, _ := s.LookupEnv("GOARCH") - return platform.MustLinkExternal(GOOS, GOARCH, false), nil -} - -func pieLinkExt(s *script.State) (bool, error) { - GOOS, _ := s.LookupEnv("GOOS") - GOARCH, _ := s.LookupEnv("GOARCH") - return !platform.InternalLinkPIESupported(GOOS, GOARCH), nil -} diff --git a/src/cmd/internal/script/scripttest/conditions.go b/src/cmd/internal/script/scripttest/conditions.go new file mode 100644 index 00000000000000..66dbfc2ac623a4 --- /dev/null +++ b/src/cmd/internal/script/scripttest/conditions.go @@ -0,0 +1,116 @@ +// Copyright 2024 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 scripttest + +import ( + "cmd/internal/script" + "fmt" + "internal/buildcfg" + "internal/platform" + "internal/testenv" + "runtime" + "strings" + "testing" +) + +// AddToolChainConditions accepts a script.Cond map and adds into it a +// set of commonly used conditions for doing toolchains testing, +// including whether the platform supports cgo, a buildmode condition, +// support for GOEXPERIMENT testing, etc. Callers must also pass in +// current GOHOSTOOS/GOHOSTARCH settings, since some of the conditions +// introduced can be influenced by them. +func AddToolChainScriptConditions(t *testing.T, conds map[string]script.Cond, goHostOS, goHostArch string) { + add := func(name string, cond script.Cond) { + if _, ok := conds[name]; ok { + t.Fatalf("condition %q is already registered", name) + } + conds[name] = cond + } + + lazyBool := func(summary string, f func() bool) script.Cond { + return script.OnceCondition(summary, func() (bool, error) { return f(), nil }) + } + + add("asan", sysCondition("-asan", platform.ASanSupported, true, goHostOS, goHostArch)) + add("buildmode", script.PrefixCondition("go supports -buildmode=", hasBuildmode)) + add("cgo", script.BoolCondition("host CGO_ENABLED", testenv.HasCGO())) + add("cgolinkext", script.Condition("platform requires external linking for cgo", cgoLinkExt)) + add("cross", script.BoolCondition("cmd/go GOOS/GOARCH != GOHOSTOS/GOHOSTARCH", goHostOS != runtime.GOOS || goHostArch != runtime.GOARCH)) + add("fuzz", sysCondition("-fuzz", platform.FuzzSupported, false, goHostOS, goHostArch)) + add("fuzz-instrumented", sysCondition("-fuzz with instrumentation", platform.FuzzInstrumented, false, goHostOS, goHostArch)) + add("GODEBUG", script.PrefixCondition("GODEBUG contains ", hasGodebug)) + add("GOEXPERIMENT", script.PrefixCondition("GOEXPERIMENT is enabled", hasGoexperiment)) + add("go-builder", script.BoolCondition("GO_BUILDER_NAME is non-empty", testenv.Builder() != "")) + add("link", lazyBool("testenv.HasLink()", testenv.HasLink)) + add("msan", sysCondition("-msan", platform.MSanSupported, true, goHostOS, goHostArch)) + add("mustlinkext", script.Condition("platform always requires external linking", mustLinkExt)) + add("pielinkext", script.Condition("platform requires external linking for PIE", pieLinkExt)) + add("race", sysCondition("-race", platform.RaceDetectorSupported, true, goHostOS, goHostArch)) + add("symlink", lazyBool("testenv.HasSymlink()", testenv.HasSymlink)) +} + +func sysCondition(flag string, f func(goos, goarch string) bool, needsCgo bool, goHostOS, goHostArch string) script.Cond { + return script.Condition( + "GOOS/GOARCH supports "+flag, + func(s *script.State) (bool, error) { + GOOS, _ := s.LookupEnv("GOOS") + GOARCH, _ := s.LookupEnv("GOARCH") + cross := goHostOS != GOOS || goHostArch != GOARCH + return (!needsCgo || (testenv.HasCGO() && !cross)) && f(GOOS, GOARCH), nil + }) +} + +func hasBuildmode(s *script.State, mode string) (bool, error) { + GOOS, _ := s.LookupEnv("GOOS") + GOARCH, _ := s.LookupEnv("GOARCH") + return platform.BuildModeSupported(runtime.Compiler, mode, GOOS, GOARCH), nil +} + +func cgoLinkExt(s *script.State) (bool, error) { + GOOS, _ := s.LookupEnv("GOOS") + GOARCH, _ := s.LookupEnv("GOARCH") + return platform.MustLinkExternal(GOOS, GOARCH, true), nil +} + +func mustLinkExt(s *script.State) (bool, error) { + GOOS, _ := s.LookupEnv("GOOS") + GOARCH, _ := s.LookupEnv("GOARCH") + return platform.MustLinkExternal(GOOS, GOARCH, false), nil +} + +func pieLinkExt(s *script.State) (bool, error) { + GOOS, _ := s.LookupEnv("GOOS") + GOARCH, _ := s.LookupEnv("GOARCH") + return !platform.InternalLinkPIESupported(GOOS, GOARCH), nil +} + +func hasGodebug(s *script.State, value string) (bool, error) { + godebug, _ := s.LookupEnv("GODEBUG") + for _, p := range strings.Split(godebug, ",") { + if strings.TrimSpace(p) == value { + return true, nil + } + } + return false, nil +} + +func hasGoexperiment(s *script.State, value string) (bool, error) { + GOOS, _ := s.LookupEnv("GOOS") + GOARCH, _ := s.LookupEnv("GOARCH") + goexp, _ := s.LookupEnv("GOEXPERIMENT") + flags, err := buildcfg.ParseGOEXPERIMENT(GOOS, GOARCH, goexp) + if err != nil { + return false, err + } + for _, exp := range flags.All() { + if value == exp { + return true, nil + } + if strings.TrimPrefix(value, "no") == strings.TrimPrefix(exp, "no") { + return false, nil + } + } + return false, fmt.Errorf("unrecognized GOEXPERIMENT %q", value) +} diff --git a/src/cmd/internal/script/scripttest/run.go b/src/cmd/internal/script/scripttest/run.go index d2f3ed8ca9f3f6..29eb6f88f243a0 100644 --- a/src/cmd/internal/script/scripttest/run.go +++ b/src/cmd/internal/script/scripttest/run.go @@ -71,13 +71,6 @@ func RunToolScriptTest(t *testing.T, repls []ToolReplacement, pattern string) { cmds[name] = cmd } - addcond := func(name string, cond script.Cond) { - if _, ok := conds[name]; ok { - panic(fmt.Sprintf("condition %q is already registered", name)) - } - conds[name] = cond - } - prependToPath := func(env []string, dir string) { found := false for k := range env { @@ -135,7 +128,10 @@ func RunToolScriptTest(t *testing.T, repls []ToolReplacement, pattern string) { cccmd := script.Program(goEnv("CC"), interrupt, gracePeriod) addcmd("go", gocmd) addcmd("cc", cccmd) - addcond("cgo", script.BoolCondition("host CGO_ENABLED", testenv.HasCGO())) + + // Add various helpful conditions related to builds and toolchain use. + goHostOS, goHostArch := goEnv("GOHOSTOS"), goEnv("GOHOSTARCH") + AddToolChainScriptConditions(t, conds, goHostOS, goHostArch) // Environment setup. env := os.Environ() From 8246171baee397165318638390c37e07b5b3ebc7 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 30 Jul 2024 14:20:53 +0000 Subject: [PATCH 124/866] cmd: add README generation for compiler + linker script tests Add in automatic README generation and README consistency checking for the cmd/compile and cmd/link script tests. This code is adapted from the similar facility in cmd/go (e.g. scriptreadme_test.go); the README helps folks writing new tests understand the mechanics. Updates #68606. Change-Id: I8ff7ff8e814abd4385bd670440511b2c60a4cef6 Reviewed-on: https://go-review.googlesource.com/c/go/+/601756 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/script_test.go | 7 +- src/cmd/compile/testdata/script/README | 286 +++++++++++++++++++ src/cmd/internal/script/scripttest/readme.go | 142 +++++++++ src/cmd/internal/script/scripttest/run.go | 23 +- src/cmd/link/script_test.go | 7 +- src/cmd/link/testdata/script/README | 286 +++++++++++++++++++ 6 files changed, 746 insertions(+), 5 deletions(-) create mode 100644 src/cmd/compile/testdata/script/README create mode 100644 src/cmd/internal/script/scripttest/readme.go create mode 100644 src/cmd/link/testdata/script/README diff --git a/src/cmd/compile/script_test.go b/src/cmd/compile/script_test.go index 962e4bb7540db2..0e32e0769ee2e2 100644 --- a/src/cmd/compile/script_test.go +++ b/src/cmd/compile/script_test.go @@ -6,12 +6,17 @@ package main import ( "cmd/internal/script/scripttest" + "flag" "internal/testenv" "os" "runtime" "testing" ) +//go:generate go test cmd/compile -v -run=TestScript/README --fixreadme + +var fixReadme = flag.Bool("fixreadme", false, "if true, update README for script tests") + var testCompiler string // TestMain allows this test binary to run as the compiler @@ -58,5 +63,5 @@ func TestScript(t *testing.T) { }, } } - scripttest.RunToolScriptTest(t, repls, "testdata/script/*.txt") + scripttest.RunToolScriptTest(t, repls, "testdata/script", *fixReadme) } diff --git a/src/cmd/compile/testdata/script/README b/src/cmd/compile/testdata/script/README new file mode 100644 index 00000000000000..9ec997a138f0f2 --- /dev/null +++ b/src/cmd/compile/testdata/script/README @@ -0,0 +1,286 @@ +This file is generated by 'go generate'. DO NOT EDIT. + +This directory holds test scripts *.txt run during 'go test cmd/'. +To run a specific script foo.txt + + go test cmd/ -run=Script/^foo$ + +In general script files should have short names: a few words, + not whole sentences. +The first word should be the general category of behavior being tested, +often the name of a go subcommand (build, link, compile, ...) or concept (vendor, pattern). + +Each script is a text archive (go doc internal/txtar). +The script begins with an actual command script to run +followed by the content of zero or more supporting files to +create in the script's temporary file system before it starts executing. + +As an example, run_hello.txt says: + + # hello world + go run hello.go + stderr 'hello world' + ! stdout . + + -- hello.go -- + package main + func main() { println("hello world") } + +Each script runs in a fresh temporary work directory tree, available to scripts as $WORK. +Scripts also have access to other environment variables, including: + + GOARCH= + GOOS= + TMPDIR=$WORK/tmp + devnull= + goversion= + +On Plan 9, the variables $path and $home are set instead of $PATH and $HOME. +On Windows, the variables $USERPROFILE and $TMP are set instead of +$HOME and $TMPDIR. + +The lines at the top of the script are a sequence of commands to be executed by +a small script engine configured in .../cmd/internal/script/scripttest/run.go (not the system shell). + +Each line of a script is parsed into a sequence of space-separated command +words, with environment variable expansion within each word and # marking +an end-of-line comment. Additional variables named ':' and '/' are expanded +within script arguments (expanding to the value of os.PathListSeparator and +os.PathSeparator respectively) but are not inherited in subprocess environments. + +Adding single quotes around text keeps spaces in that text from being treated +as word separators and also disables environment variable expansion. Inside a +single-quoted block of text, a repeated single quote indicates a literal single +quote, as in: + + 'Don''t communicate by sharing memory.' + +A line beginning with # is a comment and conventionally explains what is being +done or tested at the start of a new section of the script. + +Commands are executed one at a time, and errors are checked for each command; +if any command fails unexpectedly, no subsequent commands in the script are +executed. The command prefix ! indicates that the command on the rest of the +line (typically go or a matching predicate) must fail instead of succeeding. +The command prefix ? indicates that the command may or may not succeed, but the +script should continue regardless. + +The command prefix [cond] indicates that the command on the rest of the line +should only run when the condition is satisfied. + +A condition can be negated: [!root] means to run the rest of the line only if +the user is not root. Multiple conditions may be given for a single command, +for example, '[linux] [amd64] skip'. The command will run if all conditions are +satisfied. + +When TestScript runs a script and the script fails, by default TestScript shows +the execution of the most recent phase of the script (since the last # comment) +and only shows the # comments for earlier phases. + +Note also that in reported output, the actual name of the per-script temporary directory +has been consistently replaced with the literal string $WORK. + +The available commands are: +cat files... + concatenate files and print to the script's stdout buffer + + +cc args... + run the platform C compiler + + +cd dir + change the working directory + + +chmod perm paths... + change file mode bits + + Changes the permissions of the named files or directories to + be equal to perm. + Only numerical permissions are supported. + +cmp [-q] file1 file2 + compare files for differences + + By convention, file1 is the actual data and file2 is the + expected data. + The command succeeds if the file contents are identical. + File1 can be 'stdout' or 'stderr' to compare the stdout or + stderr buffer from the most recent command. + +cmpenv [-q] file1 file2 + compare files for differences, with environment expansion + + By convention, file1 is the actual data and file2 is the + expected data. + The command succeeds if the file contents are identical + after substituting variables from the script environment. + File1 can be 'stdout' or 'stderr' to compare the script's + stdout or stderr buffer. + +cp src... dst + copy files to a target file or directory + + src can include 'stdout' or 'stderr' to copy from the + script's stdout or stderr buffer. + +echo string... + display a line of text + + +env [key[=value]...] + set or log the values of environment variables + + With no arguments, print the script environment to the log. + Otherwise, add the listed key=value pairs to the environment + or print the listed keys. + +exec program [args...] [&] + run an executable program with arguments + + Note that 'exec' does not terminate the script (unlike Unix + shells). + +exists [-readonly] [-exec] file... + check that files exist + + +go [args...] [&] + run the 'go' program provided by the script host + + +grep [-count=N] [-q] 'pattern' file + find lines in a file that match a pattern + + The command succeeds if at least one match (or the exact + count, if given) is found. + The -q flag suppresses printing of matches. + +help [-v] name... + log help text for commands and conditions + + To display help for a specific condition, enclose it in + brackets: 'help [amd64]'. + To display complete documentation when listing all commands, + pass the -v flag. + +mkdir path... + create directories, if they do not already exist + + Unlike Unix mkdir, parent directories are always created if + needed. + +mv old new + rename a file or directory to a new path + + OS-specific restrictions may apply when old and new are in + different directories. + +replace [old new]... file + replace strings in a file + + The 'old' and 'new' arguments are unquoted as if in quoted + Go strings. + +rm path... + remove a file or directory + + If the path is a directory, its contents are removed + recursively. + +skip [msg] + skip the current test + + +sleep duration [&] + sleep for a specified duration + + The duration must be given as a Go time.Duration string. + +stderr [-count=N] [-q] 'pattern' file + find lines in the stderr buffer that match a pattern + + The command succeeds if at least one match (or the exact + count, if given) is found. + The -q flag suppresses printing of matches. + +stdout [-count=N] [-q] 'pattern' file + find lines in the stdout buffer that match a pattern + + The command succeeds if at least one match (or the exact + count, if given) is found. + The -q flag suppresses printing of matches. + +stop [msg] + stop execution of the script + + The message is written to the script log, but no error is + reported from the script engine. + +symlink path -> target + create a symlink + + Creates path as a symlink to target. + The '->' token (like in 'ls -l' output on Unix) is required. + +wait + wait for completion of background commands + + Waits for all background commands to complete. + The output (and any error) from each command is printed to + the log in the order in which the commands were started. + After the call to 'wait', the script's stdout and stderr + buffers contain the concatenation of the background + commands' outputs. + + + +The available conditions are: +[GOARCH:*] + runtime.GOARCH == +[GODEBUG:*] + GODEBUG contains +[GOEXPERIMENT:*] + GOEXPERIMENT is enabled +[GOOS:*] + runtime.GOOS == +[asan] + GOOS/GOARCH supports -asan +[buildmode:*] + go supports -buildmode= +[cgo] + host CGO_ENABLED +[cgolinkext] + platform requires external linking for cgo +[compiler:*] + runtime.Compiler == +[cross] + cmd/go GOOS/GOARCH != GOHOSTOS/GOHOSTARCH +[exec:*] + names an executable in the test binary's PATH +[fuzz] + GOOS/GOARCH supports -fuzz +[fuzz-instrumented] + GOOS/GOARCH supports -fuzz with instrumentation +[go-builder] + GO_BUILDER_NAME is non-empty +[link] + testenv.HasLink() +[msan] + GOOS/GOARCH supports -msan +[mustlinkext] + platform always requires external linking +[pielinkext] + platform requires external linking for PIE +[race] + GOOS/GOARCH supports -race +[root] + os.Geteuid() == 0 +[short] + testing.Short() +[symlink] + testenv.HasSymlink() +[verbose] + testing.Verbose() + diff --git a/src/cmd/internal/script/scripttest/readme.go b/src/cmd/internal/script/scripttest/readme.go new file mode 100644 index 00000000000000..af7397223f5574 --- /dev/null +++ b/src/cmd/internal/script/scripttest/readme.go @@ -0,0 +1,142 @@ +// Copyright 2024 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 scripttest + +import ( + "bytes" + "cmd/internal/script" + "internal/diff" + "internal/testenv" + "os" + "path/filepath" + "strings" + "testing" + "text/template" +) + +func checkScriptReadme(t *testing.T, engine *script.Engine, env []string, scriptspath, gotool string, fixReadme bool) { + var args struct { + Language string + Commands string + Conditions string + } + + cmds := new(strings.Builder) + if err := engine.ListCmds(cmds, true); err != nil { + t.Fatal(err) + } + args.Commands = cmds.String() + + conds := new(strings.Builder) + if err := engine.ListConds(conds, nil); err != nil { + t.Fatal(err) + } + args.Conditions = conds.String() + + doc := new(strings.Builder) + cmd := testenv.Command(t, gotool, "doc", "cmd/internal/script") + cmd.Env = env + cmd.Stdout = doc + if err := cmd.Run(); err != nil { + t.Fatal(cmd, ":", err) + } + _, lang, ok := strings.Cut(doc.String(), "# Script Language\n\n") + if !ok { + t.Fatalf("%q did not include Script Language section", cmd) + } + lang, _, ok = strings.Cut(lang, "\n\nvar ") + if !ok { + t.Fatalf("%q did not include vars after Script Language section", cmd) + } + args.Language = lang + + tmpl := template.Must(template.New("README").Parse(readmeTmpl[1:])) + buf := new(bytes.Buffer) + if err := tmpl.Execute(buf, args); err != nil { + t.Fatal(err) + } + + readmePath := filepath.Join(scriptspath, "README") + old, err := os.ReadFile(readmePath) + if err != nil { + t.Fatal(err) + } + diff := diff.Diff(readmePath, old, "readmeTmpl", buf.Bytes()) + if diff == nil { + t.Logf("%s is up to date.", readmePath) + return + } + + if fixReadme { + if err := os.WriteFile(readmePath, buf.Bytes(), 0666); err != nil { + t.Fatal(err) + } + t.Logf("wrote %d bytes to %s", buf.Len(), readmePath) + } else { + t.Logf("\n%s", diff) + t.Errorf("%s is stale. To update, run 'go generate cmd/go'.", readmePath) + } +} + +const readmeTmpl = ` +This file is generated by 'go generate'. DO NOT EDIT. + +This directory holds test scripts *.txt run during 'go test cmd/'. +To run a specific script foo.txt + + go test cmd/ -run=Script/^foo$ + +In general script files should have short names: a few words, + not whole sentences. +The first word should be the general category of behavior being tested, +often the name of a go subcommand (build, link, compile, ...) or concept (vendor, pattern). + +Each script is a text archive (go doc internal/txtar). +The script begins with an actual command script to run +followed by the content of zero or more supporting files to +create in the script's temporary file system before it starts executing. + +As an example, run_hello.txt says: + + # hello world + go run hello.go + stderr 'hello world' + ! stdout . + + -- hello.go -- + package main + func main() { println("hello world") } + +Each script runs in a fresh temporary work directory tree, available to scripts as $WORK. +Scripts also have access to other environment variables, including: + + GOARCH= + GOOS= + TMPDIR=$WORK/tmp + devnull= + goversion= + +On Plan 9, the variables $path and $home are set instead of $PATH and $HOME. +On Windows, the variables $USERPROFILE and $TMP are set instead of +$HOME and $TMPDIR. + +The lines at the top of the script are a sequence of commands to be executed by +a small script engine configured in .../cmd/internal/script/scripttest/run.go (not the system shell). + +{{.Language}} + +When TestScript runs a script and the script fails, by default TestScript shows +the execution of the most recent phase of the script (since the last # comment) +and only shows the # comments for earlier phases. + +Note also that in reported output, the actual name of the per-script temporary directory +has been consistently replaced with the literal string $WORK. + +The available commands are: +{{.Commands}} + +The available conditions are: +{{.Conditions}} +` diff --git a/src/cmd/internal/script/scripttest/run.go b/src/cmd/internal/script/scripttest/run.go index 29eb6f88f243a0..8dff13e22edfc4 100644 --- a/src/cmd/internal/script/scripttest/run.go +++ b/src/cmd/internal/script/scripttest/run.go @@ -34,7 +34,7 @@ type ToolReplacement struct { // is that we'll be called from the top level cmd/X dir for tool X, // and that instead of executing the install tool X we'll use the // test binary instead. -func RunToolScriptTest(t *testing.T, repls []ToolReplacement, pattern string) { +func RunToolScriptTest(t *testing.T, repls []ToolReplacement, scriptsdir string, fixReadme bool) { // Nearly all script tests involve doing builds, so don't // bother here if we don't have "go build". testenv.MustHaveGoBuild(t) @@ -125,9 +125,9 @@ func RunToolScriptTest(t *testing.T, repls []ToolReplacement, pattern string) { // Add in commands for "go" and "cc". testgo := filepath.Join(tgr, "bin", "go") gocmd := script.Program(testgo, interrupt, gracePeriod) - cccmd := script.Program(goEnv("CC"), interrupt, gracePeriod) addcmd("go", gocmd) - addcmd("cc", cccmd) + cmdExec := cmds["exec"] + addcmd("cc", scriptCC(cmdExec, goEnv("CC"))) // Add various helpful conditions related to builds and toolchain use. goHostOS, goHostArch := goEnv("GOHOSTOS"), goEnv("GOHOSTARCH") @@ -153,8 +153,13 @@ func RunToolScriptTest(t *testing.T, repls []ToolReplacement, pattern string) { Quiet: !testing.Verbose(), } + t.Run("README", func(t *testing.T) { + checkScriptReadme(t, engine, env, scriptsdir, gotool, fixReadme) + }) + // ... and kick off tests. ctx := context.Background() + pattern := filepath.Join(scriptsdir, "*.txt") RunTests(t, ctx, engine, env, pattern) } @@ -253,3 +258,15 @@ func tempEnvName() string { return "TMPDIR" } } + +// scriptCC runs the platform C compiler. +func scriptCC(cmdExec script.Cmd, ccexe string) script.Cmd { + return script.Command( + script.CmdUsage{ + Summary: "run the platform C compiler", + Args: "args...", + }, + func(s *script.State, args ...string) (script.WaitFunc, error) { + return cmdExec.Run(s, append([]string{ccexe}, args...)...) + }) +} diff --git a/src/cmd/link/script_test.go b/src/cmd/link/script_test.go index 379d47593e0306..670a939b74b2e7 100644 --- a/src/cmd/link/script_test.go +++ b/src/cmd/link/script_test.go @@ -6,11 +6,16 @@ package main import ( "cmd/internal/script/scripttest" + "flag" "internal/testenv" "runtime" "testing" ) +//go:generate go test cmd/link -v -run=TestScript/README --fixreadme + +var fixReadme = flag.Bool("fixreadme", false, "if true, update README for script tests") + func TestScript(t *testing.T) { testenv.MustHaveGoBuild(t) doReplacement := true @@ -33,5 +38,5 @@ func TestScript(t *testing.T) { }, } } - scripttest.RunToolScriptTest(t, repls, "testdata/script/*.txt") + scripttest.RunToolScriptTest(t, repls, "testdata/script", *fixReadme) } diff --git a/src/cmd/link/testdata/script/README b/src/cmd/link/testdata/script/README new file mode 100644 index 00000000000000..9ec997a138f0f2 --- /dev/null +++ b/src/cmd/link/testdata/script/README @@ -0,0 +1,286 @@ +This file is generated by 'go generate'. DO NOT EDIT. + +This directory holds test scripts *.txt run during 'go test cmd/'. +To run a specific script foo.txt + + go test cmd/ -run=Script/^foo$ + +In general script files should have short names: a few words, + not whole sentences. +The first word should be the general category of behavior being tested, +often the name of a go subcommand (build, link, compile, ...) or concept (vendor, pattern). + +Each script is a text archive (go doc internal/txtar). +The script begins with an actual command script to run +followed by the content of zero or more supporting files to +create in the script's temporary file system before it starts executing. + +As an example, run_hello.txt says: + + # hello world + go run hello.go + stderr 'hello world' + ! stdout . + + -- hello.go -- + package main + func main() { println("hello world") } + +Each script runs in a fresh temporary work directory tree, available to scripts as $WORK. +Scripts also have access to other environment variables, including: + + GOARCH= + GOOS= + TMPDIR=$WORK/tmp + devnull= + goversion= + +On Plan 9, the variables $path and $home are set instead of $PATH and $HOME. +On Windows, the variables $USERPROFILE and $TMP are set instead of +$HOME and $TMPDIR. + +The lines at the top of the script are a sequence of commands to be executed by +a small script engine configured in .../cmd/internal/script/scripttest/run.go (not the system shell). + +Each line of a script is parsed into a sequence of space-separated command +words, with environment variable expansion within each word and # marking +an end-of-line comment. Additional variables named ':' and '/' are expanded +within script arguments (expanding to the value of os.PathListSeparator and +os.PathSeparator respectively) but are not inherited in subprocess environments. + +Adding single quotes around text keeps spaces in that text from being treated +as word separators and also disables environment variable expansion. Inside a +single-quoted block of text, a repeated single quote indicates a literal single +quote, as in: + + 'Don''t communicate by sharing memory.' + +A line beginning with # is a comment and conventionally explains what is being +done or tested at the start of a new section of the script. + +Commands are executed one at a time, and errors are checked for each command; +if any command fails unexpectedly, no subsequent commands in the script are +executed. The command prefix ! indicates that the command on the rest of the +line (typically go or a matching predicate) must fail instead of succeeding. +The command prefix ? indicates that the command may or may not succeed, but the +script should continue regardless. + +The command prefix [cond] indicates that the command on the rest of the line +should only run when the condition is satisfied. + +A condition can be negated: [!root] means to run the rest of the line only if +the user is not root. Multiple conditions may be given for a single command, +for example, '[linux] [amd64] skip'. The command will run if all conditions are +satisfied. + +When TestScript runs a script and the script fails, by default TestScript shows +the execution of the most recent phase of the script (since the last # comment) +and only shows the # comments for earlier phases. + +Note also that in reported output, the actual name of the per-script temporary directory +has been consistently replaced with the literal string $WORK. + +The available commands are: +cat files... + concatenate files and print to the script's stdout buffer + + +cc args... + run the platform C compiler + + +cd dir + change the working directory + + +chmod perm paths... + change file mode bits + + Changes the permissions of the named files or directories to + be equal to perm. + Only numerical permissions are supported. + +cmp [-q] file1 file2 + compare files for differences + + By convention, file1 is the actual data and file2 is the + expected data. + The command succeeds if the file contents are identical. + File1 can be 'stdout' or 'stderr' to compare the stdout or + stderr buffer from the most recent command. + +cmpenv [-q] file1 file2 + compare files for differences, with environment expansion + + By convention, file1 is the actual data and file2 is the + expected data. + The command succeeds if the file contents are identical + after substituting variables from the script environment. + File1 can be 'stdout' or 'stderr' to compare the script's + stdout or stderr buffer. + +cp src... dst + copy files to a target file or directory + + src can include 'stdout' or 'stderr' to copy from the + script's stdout or stderr buffer. + +echo string... + display a line of text + + +env [key[=value]...] + set or log the values of environment variables + + With no arguments, print the script environment to the log. + Otherwise, add the listed key=value pairs to the environment + or print the listed keys. + +exec program [args...] [&] + run an executable program with arguments + + Note that 'exec' does not terminate the script (unlike Unix + shells). + +exists [-readonly] [-exec] file... + check that files exist + + +go [args...] [&] + run the 'go' program provided by the script host + + +grep [-count=N] [-q] 'pattern' file + find lines in a file that match a pattern + + The command succeeds if at least one match (or the exact + count, if given) is found. + The -q flag suppresses printing of matches. + +help [-v] name... + log help text for commands and conditions + + To display help for a specific condition, enclose it in + brackets: 'help [amd64]'. + To display complete documentation when listing all commands, + pass the -v flag. + +mkdir path... + create directories, if they do not already exist + + Unlike Unix mkdir, parent directories are always created if + needed. + +mv old new + rename a file or directory to a new path + + OS-specific restrictions may apply when old and new are in + different directories. + +replace [old new]... file + replace strings in a file + + The 'old' and 'new' arguments are unquoted as if in quoted + Go strings. + +rm path... + remove a file or directory + + If the path is a directory, its contents are removed + recursively. + +skip [msg] + skip the current test + + +sleep duration [&] + sleep for a specified duration + + The duration must be given as a Go time.Duration string. + +stderr [-count=N] [-q] 'pattern' file + find lines in the stderr buffer that match a pattern + + The command succeeds if at least one match (or the exact + count, if given) is found. + The -q flag suppresses printing of matches. + +stdout [-count=N] [-q] 'pattern' file + find lines in the stdout buffer that match a pattern + + The command succeeds if at least one match (or the exact + count, if given) is found. + The -q flag suppresses printing of matches. + +stop [msg] + stop execution of the script + + The message is written to the script log, but no error is + reported from the script engine. + +symlink path -> target + create a symlink + + Creates path as a symlink to target. + The '->' token (like in 'ls -l' output on Unix) is required. + +wait + wait for completion of background commands + + Waits for all background commands to complete. + The output (and any error) from each command is printed to + the log in the order in which the commands were started. + After the call to 'wait', the script's stdout and stderr + buffers contain the concatenation of the background + commands' outputs. + + + +The available conditions are: +[GOARCH:*] + runtime.GOARCH == +[GODEBUG:*] + GODEBUG contains +[GOEXPERIMENT:*] + GOEXPERIMENT is enabled +[GOOS:*] + runtime.GOOS == +[asan] + GOOS/GOARCH supports -asan +[buildmode:*] + go supports -buildmode= +[cgo] + host CGO_ENABLED +[cgolinkext] + platform requires external linking for cgo +[compiler:*] + runtime.Compiler == +[cross] + cmd/go GOOS/GOARCH != GOHOSTOS/GOHOSTARCH +[exec:*] + names an executable in the test binary's PATH +[fuzz] + GOOS/GOARCH supports -fuzz +[fuzz-instrumented] + GOOS/GOARCH supports -fuzz with instrumentation +[go-builder] + GO_BUILDER_NAME is non-empty +[link] + testenv.HasLink() +[msan] + GOOS/GOARCH supports -msan +[mustlinkext] + platform always requires external linking +[pielinkext] + platform requires external linking for PIE +[race] + GOOS/GOARCH supports -race +[root] + os.Geteuid() == 0 +[short] + testing.Short() +[symlink] + testenv.HasSymlink() +[verbose] + testing.Verbose() + From b6e81a51299f46b29ff7057dd043da8a42134eb0 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 26 Jul 2024 13:41:12 -0400 Subject: [PATCH 125/866] debug/buildinfo: read data in chunks Rather than reading the entire data segment into memory, read it in smaller chunks to keep memory usage low. For typically Go binaries, this doesn't matter much. For those, we read the .go.buildinfo section, which should be quite small. But for non-Go binaries (or Go binaries with section headers stripped), we search the entire loadable data segment, which could be quite large. This reduces the time for `go version` on a 2.5GB non-Go binary from ~1.2s and 1GB RSS (!!) to ~1s and ~25MB RSS. Fixes #68592. Change-Id: I9218854c5b6f2aa1331f561ab0850a9fd62ef23b Reviewed-on: https://go-review.googlesource.com/c/go/+/601459 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/debug/buildinfo/buildinfo.go | 136 +++++++++++++++++++++----- src/debug/buildinfo/search_test.go | 148 +++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+), 26 deletions(-) create mode 100644 src/debug/buildinfo/search_test.go diff --git a/src/debug/buildinfo/buildinfo.go b/src/debug/buildinfo/buildinfo.go index 8338f03fa580de..fd26aa8139eda2 100644 --- a/src/debug/buildinfo/buildinfo.go +++ b/src/debug/buildinfo/buildinfo.go @@ -57,6 +57,11 @@ var errNotGoExe = errors.New("not a Go executable") // fields. var buildInfoMagic = []byte("\xff Go buildinf:") +const ( + buildInfoAlign = 16 + buildInfoHeaderSize = 32 +) + // ReadFile returns build information embedded in a Go binary // file at the given path. Most information is only available for binaries built // with module support. @@ -165,14 +170,19 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { if dataSize == 0 { return "", "", errNotGoExe } - data, err := x.ReadData(dataAddr, dataSize) + + addr, err := searchMagic(x, dataAddr, dataSize) + if err != nil { + return "", "", err + } + + // Read in the full header first. + header, err := x.ReadData(addr, buildInfoHeaderSize) if err != nil { return "", "", err } - const ( - buildInfoAlign = 16 - buildInfoHeaderSize = 32 + const ( ptrSizeOffset = 14 flagsOffset = 15 versPtrOffset = 16 @@ -185,17 +195,6 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { flagsVersionPtr = 0x0 flagsVersionInl = 0x2 ) - for { - i := bytes.Index(data, buildInfoMagic) - if i < 0 || len(data)-i < buildInfoHeaderSize { - return "", "", errNotGoExe - } - if i%buildInfoAlign == 0 && len(data)-i >= buildInfoHeaderSize { - data = data[i:] - break - } - data = data[(i+buildInfoAlign-1)&^(buildInfoAlign-1):] - } // Decode the blob. The blob is a 32-byte header, optionally followed // by 2 varint-prefixed string contents. @@ -220,13 +219,19 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { // the header is followed by the string contents inline as // length-prefixed (as varint) string contents. First is the version // string, followed immediately by the modinfo string. - flags := data[flagsOffset] + flags := header[flagsOffset] if flags&flagsVersionMask == flagsVersionInl { - vers, data = decodeString(data[buildInfoHeaderSize:]) - mod, data = decodeString(data) + vers, addr, err = decodeString(x, addr+buildInfoHeaderSize) + if err != nil { + return "", "", err + } + mod, _, err = decodeString(x, addr) + if err != nil { + return "", "", err + } } else { // flagsVersionPtr (<1.18) - ptrSize := int(data[ptrSizeOffset]) + ptrSize := int(header[ptrSizeOffset]) bigEndian := flags&flagsEndianMask == flagsEndianBig var bo binary.ByteOrder if bigEndian { @@ -242,8 +247,8 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { } else { return "", "", errNotGoExe } - vers = readString(x, ptrSize, readPtr, readPtr(data[versPtrOffset:])) - mod = readString(x, ptrSize, readPtr, readPtr(data[versPtrOffset+ptrSize:])) + vers = readString(x, ptrSize, readPtr, readPtr(header[versPtrOffset:])) + mod = readString(x, ptrSize, readPtr, readPtr(header[versPtrOffset+ptrSize:])) } if vers == "" { return "", "", errNotGoExe @@ -270,12 +275,33 @@ func hasPlan9Magic(magic []byte) bool { return false } -func decodeString(data []byte) (s string, rest []byte) { - u, n := binary.Uvarint(data) - if n <= 0 || u > uint64(len(data)-n) { - return "", nil +func decodeString(x exe, addr uint64) (string, uint64, error) { + // varint length followed by length bytes of data. + + // N.B. ReadData reads _up to_ size bytes from the section containing + // addr. So we don't need to check that size doesn't overflow the + // section. + b, err := x.ReadData(addr, binary.MaxVarintLen64) + if err != nil { + return "", 0, err + } + + length, n := binary.Uvarint(b) + if n <= 0 { + return "", 0, errNotGoExe + } + addr += uint64(n) + + b, err = x.ReadData(addr, length) + if err != nil { + return "", 0, err + } + if uint64(len(b)) < length { + // Section ended before we could read the full string. + return "", 0, errNotGoExe } - return string(data[n : uint64(n)+u]), data[uint64(n)+u:] + + return string(b), addr + length, nil } // readString returns the string at address addr in the executable x. @@ -293,6 +319,64 @@ func readString(x exe, ptrSize int, readPtr func([]byte) uint64, addr uint64) st return string(data) } +const searchChunkSize = 1 << 20 // 1 MB + +// searchMagic returns the aligned first instance of buildInfoMagic in the data +// range [addr, addr+size). Returns false if not found. +func searchMagic(x exe, start, size uint64) (uint64, error) { + end := start + size + if end < start { + // Overflow. + return 0, errUnrecognizedFormat + } + + // Round up start; magic can't occur in the initial unaligned portion. + start = (start + buildInfoAlign - 1) &^ (buildInfoAlign - 1) + if start >= end { + return 0, errNotGoExe + } + + for start < end { + // Read in chunks to avoid consuming too much memory if data is large. + // + // Normally it would be somewhat painful to handle the magic crossing a + // chunk boundary, but since it must be 16-byte aligned we know it will + // fall within a single chunk. + remaining := end - start + chunkSize := uint64(searchChunkSize) + if chunkSize > remaining { + chunkSize = remaining + } + + data, err := x.ReadData(start, chunkSize) + if err != nil { + return 0, err + } + + for len(data) > 0 { + i := bytes.Index(data, buildInfoMagic) + if i < 0 { + break + } + if remaining-uint64(i) < buildInfoHeaderSize { + // Found magic, but not enough space left for the full header. + return 0, errNotGoExe + } + if i%buildInfoAlign != 0 { + // Found magic, but misaligned. Keep searching. + data = data[(i+buildInfoAlign-1)&^(buildInfoAlign-1):] + continue + } + // Good match! + return start + uint64(i), nil + } + + start += chunkSize + } + + return 0, errNotGoExe +} + // elfExe is the ELF implementation of the exe interface. type elfExe struct { f *elf.File diff --git a/src/debug/buildinfo/search_test.go b/src/debug/buildinfo/search_test.go new file mode 100644 index 00000000000000..cef6f25314257f --- /dev/null +++ b/src/debug/buildinfo/search_test.go @@ -0,0 +1,148 @@ +// Copyright 2024 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 buildinfo + +import ( + "fmt" + "testing" +) + +type byteExe struct { + b []byte +} + +func (x *byteExe) ReadData(addr, size uint64) ([]byte, error) { + end := addr + size + if end < addr { + return nil, fmt.Errorf("ReadData(%d, %d) overflow", addr, size) + } + if addr >= uint64(len(x.b)) || end-1 >= uint64(len(x.b)) { + return nil, fmt.Errorf("ReadData(%d, %d) out of bounds of %d-byte slice", addr, size, len(x.b)) + } + return x.b[addr:end], nil +} + +func (x *byteExe) DataStart() (uint64, uint64) { + return 0, uint64(len(x.b)) +} + +func TestSearchMagic(t *testing.T) { + tests := []struct { + name string + data []byte + want uint64 + wantErr error + }{ + { + name: "beginning", + data: func() []byte { + b := make([]byte, buildInfoHeaderSize) + copy(b, buildInfoMagic) + return b + }(), + want: 0, + }, + { + name: "offset", + data: func() []byte { + b := make([]byte, 512) + copy(b[4*buildInfoAlign:], buildInfoMagic) + return b + }(), + want: 4 * buildInfoAlign, + }, + { + name: "second_chunk", + data: func() []byte { + b := make([]byte, 4*searchChunkSize) + copy(b[searchChunkSize+4*buildInfoAlign:], buildInfoMagic) + return b + }(), + want: searchChunkSize + 4*buildInfoAlign, + }, + { + name: "second_chunk_short", + data: func() []byte { + // Magic is 64-bytes into the second chunk, + // which is short; only exactly long enough to + // hold the header. + b := make([]byte, searchChunkSize+4*buildInfoAlign+buildInfoHeaderSize) + copy(b[searchChunkSize+4*buildInfoAlign:], buildInfoMagic) + return b + }(), + want: searchChunkSize + 4*buildInfoAlign, + }, + { + name: "missing", + data: func() []byte { + b := make([]byte, buildInfoHeaderSize) + return b + }(), + wantErr: errNotGoExe, + }, + { + name: "too_short", + data: func() []byte { + // There needs to be space for the entire + // header, not just the magic. + b := make([]byte, len(buildInfoMagic)) + copy(b, buildInfoMagic) + return b + }(), + wantErr: errNotGoExe, + }, + { + name: "misaligned", + data: func() []byte { + b := make([]byte, 512) + copy(b[7:], buildInfoMagic) + return b + }(), + wantErr: errNotGoExe, + }, + { + name: "misaligned_across_chunk", + data: func() []byte { + // Magic crosses chunk boundary. By definition, + // it has to be misaligned. + b := make([]byte, 2*searchChunkSize) + copy(b[searchChunkSize-8:], buildInfoMagic) + return b + }(), + wantErr: errNotGoExe, + }, + { + name: "header_across_chunk", + data: func() []byte { + // The magic is aligned within the first chunk, + // but the rest of the 32-byte header crosses + // the chunk boundary. + b := make([]byte, 2*searchChunkSize) + copy(b[searchChunkSize-buildInfoAlign:], buildInfoMagic) + return b + }(), + want: searchChunkSize - buildInfoAlign, + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + x := &byteExe{tc.data} + dataAddr, dataSize := x.DataStart() + addr, err := searchMagic(x, dataAddr, dataSize) + if tc.wantErr == nil { + if err != nil { + t.Errorf("searchMagic got err %v want nil", err) + } + if addr != tc.want { + t.Errorf("searchMagic got addr %d want %d", addr, tc.want) + } + } else { + if err != tc.wantErr { + t.Errorf("searchMagic got err %v want %v", err, tc.wantErr) + } + } + }) + } +} From eea2e929fae6abbc1422f8ee26de02a4b7e4f8cd Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 26 Jul 2024 15:57:27 -0400 Subject: [PATCH 126/866] debug/buildinfo: reuse buffer in searchMagic Allocating a new buffer for each chunk in searchMagic is very inefficient. Refactor reading to allow us to reuse the same buffer for each iteration. This reduces the runtime of `go version` on a 2.5GB non-Go binary from ~1s and ~25MB RSS to ~250ms and ~15MB RSS. For #68592. Change-Id: Idae5c2c9b3b8a7158d5cc7f2f008998be75fd7af Reviewed-on: https://go-review.googlesource.com/c/go/+/601460 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/debug/buildinfo/buildinfo.go | 101 ++++++++++++++++++----------- src/debug/buildinfo/search_test.go | 14 ++-- 2 files changed, 68 insertions(+), 47 deletions(-) diff --git a/src/debug/buildinfo/buildinfo.go b/src/debug/buildinfo/buildinfo.go index fd26aa8139eda2..fa02344cd3f572 100644 --- a/src/debug/buildinfo/buildinfo.go +++ b/src/debug/buildinfo/buildinfo.go @@ -99,13 +99,14 @@ func Read(r io.ReaderAt) (*BuildInfo, error) { } type exe interface { - // ReadData reads and returns up to size bytes starting at virtual address addr. - ReadData(addr, size uint64) ([]byte, error) - // DataStart returns the virtual address and size of the segment or section that // should contain build information. This is either a specially named section // or the first writable non-zero data segment. DataStart() (uint64, uint64) + + // DataReader returns an io.ReaderAt that reads from addr until the end + // of segment or section that contains addr. + DataReader(addr uint64) (io.ReaderAt, error) } // readRawBuildInfo extracts the Go toolchain version and module information @@ -177,7 +178,7 @@ func readRawBuildInfo(r io.ReaderAt) (vers, mod string, err error) { } // Read in the full header first. - header, err := x.ReadData(addr, buildInfoHeaderSize) + header, err := readData(x, addr, buildInfoHeaderSize) if err != nil { return "", "", err } @@ -281,7 +282,7 @@ func decodeString(x exe, addr uint64) (string, uint64, error) { // N.B. ReadData reads _up to_ size bytes from the section containing // addr. So we don't need to check that size doesn't overflow the // section. - b, err := x.ReadData(addr, binary.MaxVarintLen64) + b, err := readData(x, addr, binary.MaxVarintLen64) if err != nil { return "", 0, err } @@ -292,7 +293,7 @@ func decodeString(x exe, addr uint64) (string, uint64, error) { } addr += uint64(n) - b, err = x.ReadData(addr, length) + b, err = readData(x, addr, length) if err != nil { return "", 0, err } @@ -306,13 +307,13 @@ func decodeString(x exe, addr uint64) (string, uint64, error) { // readString returns the string at address addr in the executable x. func readString(x exe, ptrSize int, readPtr func([]byte) uint64, addr uint64) string { - hdr, err := x.ReadData(addr, uint64(2*ptrSize)) + hdr, err := readData(x, addr, uint64(2*ptrSize)) if err != nil || len(hdr) < 2*ptrSize { return "" } dataAddr := readPtr(hdr) dataLen := readPtr(hdr[ptrSize:]) - data, err := x.ReadData(dataAddr, dataLen) + data, err := readData(x, dataAddr, dataLen) if err != nil || uint64(len(data)) < dataLen { return "" } @@ -336,6 +337,7 @@ func searchMagic(x exe, start, size uint64) (uint64, error) { return 0, errNotGoExe } + var buf []byte for start < end { // Read in chunks to avoid consuming too much memory if data is large. // @@ -348,11 +350,21 @@ func searchMagic(x exe, start, size uint64) (uint64, error) { chunkSize = remaining } - data, err := x.ReadData(start, chunkSize) + if buf == nil { + buf = make([]byte, chunkSize) + } else { + // N.B. chunkSize can only decrease, and only on the + // last chunk. + buf = buf[:chunkSize] + clear(buf) + } + + n, err := readDataInto(x, start, buf) if err != nil { return 0, err } + data := buf[:n] for len(data) > 0 { i := bytes.Index(data, buildInfoMagic) if i < 0 { @@ -377,19 +389,42 @@ func searchMagic(x exe, start, size uint64) (uint64, error) { return 0, errNotGoExe } +func readData(x exe, addr, size uint64) ([]byte, error) { + r, err := x.DataReader(addr) + if err != nil { + return nil, err + } + + b, err := saferio.ReadDataAt(r, size, 0) + if err == io.EOF { + err = nil + } + return b, err +} + +func readDataInto(x exe, addr uint64, b []byte) (int, error) { + r, err := x.DataReader(addr) + if err != nil { + return 0, err + } + + n, err := r.ReadAt(b, 0) + if err == io.EOF { + err = nil + } + return n, err +} + // elfExe is the ELF implementation of the exe interface. type elfExe struct { f *elf.File } -func (x *elfExe) ReadData(addr, size uint64) ([]byte, error) { +func (x *elfExe) DataReader(addr uint64) (io.ReaderAt, error) { for _, prog := range x.f.Progs { if prog.Vaddr <= addr && addr <= prog.Vaddr+prog.Filesz-1 { - n := prog.Vaddr + prog.Filesz - addr - if n > size { - n = size - } - return saferio.ReadDataAt(prog, n, int64(addr-prog.Vaddr)) + remaining := prog.Vaddr + prog.Filesz - addr + return io.NewSectionReader(prog, int64(addr-prog.Vaddr), int64(remaining)), nil } } return nil, errUnrecognizedFormat @@ -424,15 +459,12 @@ func (x *peExe) imageBase() uint64 { return 0 } -func (x *peExe) ReadData(addr, size uint64) ([]byte, error) { +func (x *peExe) DataReader(addr uint64) (io.ReaderAt, error) { addr -= x.imageBase() for _, sect := range x.f.Sections { if uint64(sect.VirtualAddress) <= addr && addr <= uint64(sect.VirtualAddress+sect.Size-1) { - n := uint64(sect.VirtualAddress+sect.Size) - addr - if n > size { - n = size - } - return saferio.ReadDataAt(sect, n, int64(addr-uint64(sect.VirtualAddress))) + remaining := uint64(sect.VirtualAddress+sect.Size) - addr + return io.NewSectionReader(sect, int64(addr-uint64(sect.VirtualAddress)), int64(remaining)), nil } } return nil, errUnrecognizedFormat @@ -465,7 +497,7 @@ type machoExe struct { f *macho.File } -func (x *machoExe) ReadData(addr, size uint64) ([]byte, error) { +func (x *machoExe) DataReader(addr uint64) (io.ReaderAt, error) { for _, load := range x.f.Loads { seg, ok := load.(*macho.Segment) if !ok { @@ -475,11 +507,8 @@ func (x *machoExe) ReadData(addr, size uint64) ([]byte, error) { if seg.Name == "__PAGEZERO" { continue } - n := seg.Addr + seg.Filesz - addr - if n > size { - n = size - } - return saferio.ReadDataAt(seg, n, int64(addr-seg.Addr)) + remaining := seg.Addr + seg.Filesz - addr + return io.NewSectionReader(seg, int64(addr-seg.Addr), int64(remaining)), nil } } return nil, errUnrecognizedFormat @@ -508,14 +537,11 @@ type xcoffExe struct { f *xcoff.File } -func (x *xcoffExe) ReadData(addr, size uint64) ([]byte, error) { +func (x *xcoffExe) DataReader(addr uint64) (io.ReaderAt, error) { for _, sect := range x.f.Sections { if sect.VirtualAddress <= addr && addr <= sect.VirtualAddress+sect.Size-1 { - n := sect.VirtualAddress + sect.Size - addr - if n > size { - n = size - } - return saferio.ReadDataAt(sect, n, int64(addr-sect.VirtualAddress)) + remaining := sect.VirtualAddress + sect.Size - addr + return io.NewSectionReader(sect, int64(addr-sect.VirtualAddress), int64(remaining)), nil } } return nil, errors.New("address not mapped") @@ -540,14 +566,11 @@ func (x *plan9objExe) DataStart() (uint64, uint64) { return 0, 0 } -func (x *plan9objExe) ReadData(addr, size uint64) ([]byte, error) { +func (x *plan9objExe) DataReader(addr uint64) (io.ReaderAt, error) { for _, sect := range x.f.Sections { if uint64(sect.Offset) <= addr && addr <= uint64(sect.Offset+sect.Size-1) { - n := uint64(sect.Offset+sect.Size) - addr - if n > size { - n = size - } - return saferio.ReadDataAt(sect, n, int64(addr-uint64(sect.Offset))) + remaining := uint64(sect.Offset+sect.Size) - addr + return io.NewSectionReader(sect, int64(addr-uint64(sect.Offset)), int64(remaining)), nil } } return nil, errors.New("address not mapped") diff --git a/src/debug/buildinfo/search_test.go b/src/debug/buildinfo/search_test.go index cef6f25314257f..c598dcdf8d5dd5 100644 --- a/src/debug/buildinfo/search_test.go +++ b/src/debug/buildinfo/search_test.go @@ -5,7 +5,9 @@ package buildinfo import ( + "bytes" "fmt" + "io" "testing" ) @@ -13,15 +15,11 @@ type byteExe struct { b []byte } -func (x *byteExe) ReadData(addr, size uint64) ([]byte, error) { - end := addr + size - if end < addr { - return nil, fmt.Errorf("ReadData(%d, %d) overflow", addr, size) +func (x *byteExe) DataReader(addr uint64) (io.ReaderAt, error) { + if addr >= uint64(len(x.b)) { + return nil, fmt.Errorf("ReadData(%d) out of bounds of %d-byte slice", addr, len(x.b)) } - if addr >= uint64(len(x.b)) || end-1 >= uint64(len(x.b)) { - return nil, fmt.Errorf("ReadData(%d, %d) out of bounds of %d-byte slice", addr, size, len(x.b)) - } - return x.b[addr:end], nil + return bytes.NewReader(x.b[addr:]), nil } func (x *byteExe) DataStart() (uint64, uint64) { From d32133af7791325afd30ba999c2e11bf5c82b6f6 Mon Sep 17 00:00:00 2001 From: David Chase Date: Wed, 31 Jul 2024 09:55:14 -0400 Subject: [PATCH 127/866] cmd/compile: fix order of map iteration in deadlocals This makes builds reproducible again. Fixes #68672 Updates #65158 Change-Id: I260180f52e992c702ab89050deb6484087ae265f Reviewed-on: https://go-review.googlesource.com/c/go/+/602075 LUCI-TryBot-Result: Go LUCI Auto-Submit: Cuong Manh Le Reviewed-by: Cuong Manh Le Reviewed-by: Than McIntosh --- src/cmd/compile/internal/deadlocals/deadlocals.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/deadlocals/deadlocals.go b/src/cmd/compile/internal/deadlocals/deadlocals.go index f40ca719700f04..8bc04b7ff0fe01 100644 --- a/src/cmd/compile/internal/deadlocals/deadlocals.go +++ b/src/cmd/compile/internal/deadlocals/deadlocals.go @@ -30,7 +30,8 @@ func Funcs(fns []*ir.Func) { v := newVisitor(fn) v.nodes(fn.Body) - for _, assigns := range v.defs { + for _, k := range v.defsKeys { + assigns := v.defs[k] for _, as := range assigns { // Kludge for "missing func info" linker panic. // See also closureInitLSym in inline/inl.go. @@ -51,7 +52,8 @@ type visitor struct { curfn *ir.Func // defs[name] contains assignments that can be discarded if name can be discarded. // if defs[name] is defined nil, then name is actually used. - defs map[*ir.Name][]assign + defs map[*ir.Name][]assign + defsKeys []*ir.Name // insertion order of keys, for reproducible iteration (and builds) doNode func(ir.Node) bool } @@ -96,9 +98,11 @@ func (v *visitor) node(n ir.Node) { n = n.Canonical() if isLocal(n, false) { // Force any lazy definitions. - s := v.defs[n] + s, ok := v.defs[n] + if !ok { + v.defsKeys = append(v.defsKeys, n) + } v.defs[n] = nil - for _, as := range s { // do the visit that was skipped in v.assign when as was appended to v.defs[n] v.node(*as.rhs) @@ -161,6 +165,9 @@ func (v *visitor) assign(pos src.XPos, lhs, rhs *ir.Node, blankIsNotUse bool) { if isLocal(name, blankIsNotUse) && !hasEffects(*rhs) { if s, ok := v.defs[name]; !ok || s != nil { // !ok || s != nil is FALSE if previously "v.defs[name] = nil" -- that marks a use. + if !ok { + v.defsKeys = append(v.defsKeys, name) + } v.defs[name] = append(s, assign{pos, lhs, rhs}) return // don't visit rhs unless that node ends up live, later. } From 0214749fef334f9879287d6eec3f059e803a5270 Mon Sep 17 00:00:00 2001 From: limeidan Date: Fri, 12 Jan 2024 09:58:35 +0800 Subject: [PATCH 128/866] cmd/internal/obj/loong64: rename Class to represent the external symbol address There is no need to define another C_SECON Class to express short external symbol address, because the external symbol address is unknown in assembler, relocate it in linker. Change-Id: Id9fbd848c43ca63a21f2b6640e947140c26eeaf7 Reviewed-on: https://go-review.googlesource.com/c/go/+/565624 Reviewed-by: Qiqi Huang Reviewed-by: sophie zhao Reviewed-by: Dmitri Shuralyov Reviewed-by: abner chenc Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Auto-Submit: abner chenc --- src/cmd/internal/obj/loong64/a.out.go | 3 +-- src/cmd/internal/obj/loong64/asm.go | 10 ++++------ src/cmd/internal/obj/loong64/cnames.go | 3 +-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 23f71fd8ab28a7..251c34c6abe68a 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -209,9 +209,8 @@ const ( C_LCON // other 32 C_DCON // other 64 (could subdivide further) C_SACON // $n(REG) where n <= int12 - C_SECON C_LACON // $n(REG) where int12 < n <= int32 - C_LECON + C_EXTADDR // external symbol address C_DACON // $n(REG) where int32 < n C_SBRA C_LBRA diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 99cebe3e4e1de0..26ec30af37582e 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -179,12 +179,10 @@ var optab = []Optab{ {AMOVB, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, {AMOVBU, C_TLS_LE, C_NONE, C_NONE, C_REG, C_NONE, 54, 16, 0, 0}, - {AMOVW, C_SECON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, 0, 0}, - {AMOVV, C_SECON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, 0, 0}, {AMOVW, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, {AMOVV, C_SACON, C_NONE, C_NONE, C_REG, C_NONE, 3, 4, REGSP, 0}, - {AMOVW, C_LECON, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, - {AMOVV, C_LECON, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, + {AMOVW, C_EXTADDR, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, + {AMOVV, C_EXTADDR, C_NONE, C_NONE, C_REG, C_NONE, 52, 8, 0, NOTUSETMP}, {AMOVW, C_LACON, C_NONE, C_NONE, C_REG, C_NONE, 26, 12, REGSP, 0}, {AMOVV, C_LACON, C_NONE, C_NONE, C_REG, C_NONE, 26, 12, REGSP, 0}, @@ -747,7 +745,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { if s.Type == objabi.STLSBSS { c.ctxt.Diag("taking address of TLS variable is not supported") } - return C_LECON + return C_EXTADDR case obj.NAME_AUTO: if a.Reg == REGSP { @@ -1684,7 +1682,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { rel2.Add = p.From.Offset rel2.Type = objabi.R_LOONG64_ADDR_LO - case 52: // mov $lext, r + case 52: // mov $ext, r // NOTE: this case does not use REGTMP. If it ever does, // remove the NOTUSETMP flag in optab. o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(p.To.Reg)) diff --git a/src/cmd/internal/obj/loong64/cnames.go b/src/cmd/internal/obj/loong64/cnames.go index 3841296f3acc5b..955c464d2fce22 100644 --- a/src/cmd/internal/obj/loong64/cnames.go +++ b/src/cmd/internal/obj/loong64/cnames.go @@ -21,9 +21,8 @@ var cnames0 = []string{ "LCON", "DCON", "SACON", - "SECON", "LACON", - "LECON", + "EXTADDR", "DACON", "SBRA", "LBRA", From 5ca7d4645ffcb01c9a8497ced818b25911ab3cbf Mon Sep 17 00:00:00 2001 From: limeidan Date: Sat, 6 Jan 2024 11:34:34 +0800 Subject: [PATCH 129/866] cmd/internal/obj/loong64: remove case 17 in func asmout There is no relative optab item case 17, remove it. Change-Id: I3ceaa3283c3641afafd46362737ff847a1d80665 Reviewed-on: https://go-review.googlesource.com/c/go/+/565617 Reviewed-by: abner chenc Reviewed-by: Dmitri Shuralyov Auto-Submit: abner chenc LUCI-TryBot-Result: Go LUCI Reviewed-by: Qiqi Huang Reviewed-by: sophie zhao Reviewed-by: Michael Knyszek --- src/cmd/internal/obj/loong64/asm.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 26ec30af37582e..fe71b90e8815e1 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1491,9 +1491,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_16IRR(c.opirr(p.As), uint32(v)&0x1f, uint32(r), uint32(p.To.Reg)) } - case 17: - o1 = OP_RRR(c.oprrr(p.As), uint32(REGZERO), uint32(p.From.Reg), uint32(p.To.Reg)) - case 18: // jmp [r1],0(r2) r := int(p.Reg) if r == 0 { From b53809d75dced5729f30d247d8694bfc2940da18 Mon Sep 17 00:00:00 2001 From: limeidan Date: Thu, 11 Jan 2024 15:12:50 +0800 Subject: [PATCH 130/866] cmd/internal/obj/loong64: optimize instruction implementation The plan9 instructions ASLLV and -ASLLV are translated into the same assembly instructions, so -ASLLV can be removed and replaced with ASLLV in the corresponding position. ASRLV and -ASRLV have the same reason as the above two instructions. Change-Id: I4bd79ca7bb070f7a924a0205ef2f19cf2b9ae2c9 Reviewed-on: https://go-review.googlesource.com/c/go/+/565623 Reviewed-by: abner chenc Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Auto-Submit: abner chenc Reviewed-by: Qiqi Huang Reviewed-by: Michael Knyszek Reviewed-by: sophie zhao --- src/cmd/internal/obj/loong64/asm.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index fe71b90e8815e1..ee4a8bb8cb0b8a 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1453,8 +1453,8 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { case 14: // movwu r,r // NOTE: this case does not use REGTMP. If it ever does, // remove the NOTUSETMP flag in optab. - o1 = OP_16IRR(c.opirr(-ASLLV), uint32(32)&0x3f, uint32(p.From.Reg), uint32(p.To.Reg)) - o2 = OP_16IRR(c.opirr(-ASRLV), uint32(32)&0x3f, uint32(p.To.Reg), uint32(p.To.Reg)) + o1 = OP_16IRR(c.opirr(ASLLV), uint32(32)&0x3f, uint32(p.From.Reg), uint32(p.To.Reg)) + o2 = OP_16IRR(c.opirr(ASRLV), uint32(32)&0x3f, uint32(p.To.Reg), uint32(p.To.Reg)) case 15: // teq $c r,r v := c.regoff(&p.From) @@ -2169,17 +2169,13 @@ func (c *ctxt0) opirr(a obj.As) uint32 { case -AMOVD: return 0x0ae << 22 - case ASLLV, - -ASLLV: + case ASLLV: return 0x0041 << 16 - case ASRLV, - -ASRLV: + case ASRLV: return 0x0045 << 16 - case ASRAV, - -ASRAV: + case ASRAV: return 0x0049 << 16 - case AROTRV, - -AROTRV: + case AROTRV: return 0x004d << 16 case -ALL: return 0x020 << 24 From 650abbc0b03c3000fa1a068466eb104bef88b54d Mon Sep 17 00:00:00 2001 From: Manuel Sabin Date: Wed, 19 Jun 2024 12:49:32 -0400 Subject: [PATCH 131/866] crypto/internal/cryptotest: add tests for the cipher.Block interface This CL creates tests for the cipher.Block interface in the cryptotest package. This set of tests is called from the tests of implementation of the Block interface e.g. aes_test.go and des_test.go. Updates #25309 Change-Id: Ieea3752147c8163fc73a849cfcb8fa011205d2c2 Reviewed-on: https://go-review.googlesource.com/c/go/+/594018 Reviewed-by: Than McIntosh Reviewed-by: Michael Knyszek Reviewed-by: Filippo Valsorda Reviewed-by: Russell Webb Auto-Submit: Filippo Valsorda LUCI-TryBot-Result: Go LUCI --- src/crypto/aes/aes_test.go | 35 +--- src/crypto/des/des_test.go | 12 ++ src/crypto/internal/cryptotest/block.go | 254 ++++++++++++++++++++++++ 3 files changed, 275 insertions(+), 26 deletions(-) create mode 100644 src/crypto/internal/cryptotest/block.go diff --git a/src/crypto/aes/aes_test.go b/src/crypto/aes/aes_test.go index 6035f16050cfe1..8d2da5e177308a 100644 --- a/src/crypto/aes/aes_test.go +++ b/src/crypto/aes/aes_test.go @@ -5,6 +5,8 @@ package aes import ( + "crypto/internal/cryptotest" + "fmt" "testing" ) @@ -316,32 +318,13 @@ func TestCipherDecrypt(t *testing.T) { } } -// Test short input/output. -// Assembly used to not notice. -// See issue 7928. -func TestShortBlocks(t *testing.T) { - bytes := func(n int) []byte { return make([]byte, n) } - - c, _ := NewCipher(bytes(16)) - - mustPanic(t, "crypto/aes: input not full block", func() { c.Encrypt(bytes(1), bytes(1)) }) - mustPanic(t, "crypto/aes: input not full block", func() { c.Decrypt(bytes(1), bytes(1)) }) - mustPanic(t, "crypto/aes: input not full block", func() { c.Encrypt(bytes(100), bytes(1)) }) - mustPanic(t, "crypto/aes: input not full block", func() { c.Decrypt(bytes(100), bytes(1)) }) - mustPanic(t, "crypto/aes: output not full block", func() { c.Encrypt(bytes(1), bytes(100)) }) - mustPanic(t, "crypto/aes: output not full block", func() { c.Decrypt(bytes(1), bytes(100)) }) -} - -func mustPanic(t *testing.T, msg string, f func()) { - defer func() { - err := recover() - if err == nil { - t.Errorf("function did not panic, wanted %q", msg) - } else if err != msg { - t.Errorf("got panic %v, wanted %q", err, msg) - } - }() - f() +// Test AES against the general cipher.Block interface tester +func TestAESBlock(t *testing.T) { + for _, keylen := range []int{128, 192, 256} { + t.Run(fmt.Sprintf("AES-%d", keylen), func(t *testing.T) { + cryptotest.TestBlock(t, keylen/8, NewCipher) + }) + } } func BenchmarkEncrypt(b *testing.B) { diff --git a/src/crypto/des/des_test.go b/src/crypto/des/des_test.go index 7bebcd93d4137b..e72b4b15c71b17 100644 --- a/src/crypto/des/des_test.go +++ b/src/crypto/des/des_test.go @@ -8,6 +8,7 @@ import ( "bytes" "crypto/cipher" "crypto/des" + "crypto/internal/cryptotest" "testing" ) @@ -1506,6 +1507,17 @@ func TestSubstitutionTableKnownAnswerDecrypt(t *testing.T) { } } +// Test DES against the general cipher.Block interface tester +func TestDESBlock(t *testing.T) { + t.Run("DES", func(t *testing.T) { + cryptotest.TestBlock(t, 8, des.NewCipher) + }) + + t.Run("TripleDES", func(t *testing.T) { + cryptotest.TestBlock(t, 24, des.NewTripleDESCipher) + }) +} + func BenchmarkEncrypt(b *testing.B) { tt := encryptDESTests[0] c, err := des.NewCipher(tt.key) diff --git a/src/crypto/internal/cryptotest/block.go b/src/crypto/internal/cryptotest/block.go new file mode 100644 index 00000000000000..a1c3bd20d79d4e --- /dev/null +++ b/src/crypto/internal/cryptotest/block.go @@ -0,0 +1,254 @@ +// Copyright 2024 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 cryptotest + +import ( + "bytes" + "crypto/cipher" + "testing" +) + +type MakeBlock func(key []byte) (cipher.Block, error) + +// TestBlock performs a set of tests on cipher.Block implementations, checking +// the documented requirements of BlockSize, Encrypt, and Decrypt. +func TestBlock(t *testing.T, keySize int, mb MakeBlock) { + // Generate random key + key := make([]byte, keySize) + newRandReader(t).Read(key) + t.Logf("Cipher key: 0x%x", key) + + block, err := mb(key) + if err != nil { + t.Fatal(err) + } + + blockSize := block.BlockSize() + + t.Run("Encryption", func(t *testing.T) { + testCipher(t, block.Encrypt, blockSize) + }) + + t.Run("Decryption", func(t *testing.T) { + testCipher(t, block.Decrypt, blockSize) + }) + + // Checks baseline Encrypt/Decrypt functionality. More thorough + // implementation-specific characterization/golden tests should be done + // for each block cipher implementation. + t.Run("Roundtrip", func(t *testing.T) { + rng := newRandReader(t) + + // Check Decrypt inverts Encrypt + before, ciphertext, after := make([]byte, blockSize), make([]byte, blockSize), make([]byte, blockSize) + + rng.Read(before) + + block.Encrypt(ciphertext, before) + block.Decrypt(after, ciphertext) + + if !bytes.Equal(after, before) { + t.Errorf("plaintext is different after an encrypt/decrypt cycle; got %x, want %x", after, before) + } + + // Check Encrypt inverts Decrypt (assumes block ciphers are deterministic) + before, plaintext, after := make([]byte, blockSize), make([]byte, blockSize), make([]byte, blockSize) + + rng.Read(before) + + block.Decrypt(plaintext, before) + block.Encrypt(after, plaintext) + + if !bytes.Equal(after, before) { + t.Errorf("ciphertext is different after a decrypt/encrypt cycle; got %x, want %x", after, before) + } + }) + +} + +func testCipher(t *testing.T, cipher func(dst, src []byte), blockSize int) { + t.Run("AlterInput", func(t *testing.T) { + rng := newRandReader(t) + + // Make long src that shouldn't be modified at all, within block + // size scope or beyond it + src, before := make([]byte, blockSize*2), make([]byte, blockSize*2) + rng.Read(src) + copy(before, src) + + dst := make([]byte, blockSize) + + cipher(dst, src) + if !bytes.Equal(src, before) { + t.Errorf("block cipher modified src; got %x, want %x", src, before) + } + }) + + t.Run("Aliasing", func(t *testing.T) { + rng := newRandReader(t) + + buff, expectedOutput := make([]byte, blockSize), make([]byte, blockSize) + + // Record what output is when src and dst are different + rng.Read(buff) + cipher(expectedOutput, buff) + + // Check that the same output is generated when src=dst alias to the same + // memory + cipher(buff, buff) + if !bytes.Equal(buff, expectedOutput) { + t.Errorf("block cipher produced different output when dst = src; got %x, want %x", buff, expectedOutput) + } + }) + + t.Run("OutOfBoundsWrite", func(t *testing.T) { + rng := newRandReader(t) + + src := make([]byte, blockSize) + rng.Read(src) + + // Make a buffer with dst in the middle and data on either end + buff := make([]byte, blockSize*3) + endOfPrefix, startOfSuffix := blockSize, blockSize*2 + rng.Read(buff[:endOfPrefix]) + rng.Read(buff[startOfSuffix:]) + dst := buff[endOfPrefix:startOfSuffix] + + // Record the prefix and suffix data to make sure they aren't written to + initPrefix, initSuffix := make([]byte, blockSize), make([]byte, blockSize) + copy(initPrefix, buff[:endOfPrefix]) + copy(initSuffix, buff[startOfSuffix:]) + + // Write to dst (the middle of the buffer) and make sure it doesn't write + // beyond the dst slice + cipher(dst, src) + if !bytes.Equal(buff[startOfSuffix:], initSuffix) { + t.Errorf("block cipher did out of bounds write after end of dst slice; got %x, want %x", buff[startOfSuffix:], initSuffix) + } + if !bytes.Equal(buff[:endOfPrefix], initPrefix) { + t.Errorf("block cipher did out of bounds write before beginning of dst slice; got %x, want %x", buff[:endOfPrefix], initPrefix) + } + + // Check that dst isn't written to beyond BlockSize even if there is room + // in the slice + dst = buff[endOfPrefix:] // Extend dst to include suffix + cipher(dst, src) + if !bytes.Equal(buff[startOfSuffix:], initSuffix) { + t.Errorf("block cipher modified dst past BlockSize bytes; got %x, want %x", buff[startOfSuffix:], initSuffix) + } + }) + + // Check that output of cipher isn't affected by adjacent data beyond input + // slice scope + // For encryption, this assumes block ciphers encrypt deterministically + t.Run("OutOfBoundsRead", func(t *testing.T) { + rng := newRandReader(t) + + src := make([]byte, blockSize) + rng.Read(src) + expectedDst := make([]byte, blockSize) + cipher(expectedDst, src) + + // Make a buffer with src in the middle and data on either end + buff := make([]byte, blockSize*3) + endOfPrefix, startOfSuffix := blockSize, blockSize*2 + + copy(buff[endOfPrefix:startOfSuffix], src) + rng.Read(buff[:endOfPrefix]) + rng.Read(buff[startOfSuffix:]) + + testDst := make([]byte, blockSize) + cipher(testDst, buff[endOfPrefix:startOfSuffix]) + if !bytes.Equal(testDst, expectedDst) { + t.Errorf("block cipher affected by data outside of src slice bounds; got %x, want %x", testDst, expectedDst) + } + + // Check that src isn't read from beyond BlockSize even if the slice is + // longer and contains data in the suffix + cipher(testDst, buff[endOfPrefix:]) // Input long src + if !bytes.Equal(testDst, expectedDst) { + t.Errorf("block cipher affected by src data beyond BlockSize bytes; got %x, want %x", buff[startOfSuffix:], expectedDst) + } + }) + + t.Run("NonZeroDst", func(t *testing.T) { + rng := newRandReader(t) + + // Record what the cipher writes into a destination of zeroes + src := make([]byte, blockSize) + rng.Read(src) + expectedDst := make([]byte, blockSize) + + cipher(expectedDst, src) + + // Make nonzero dst + dst := make([]byte, blockSize*2) + rng.Read(dst) + + // Remember the random suffix which shouldn't be written to + expectedDst = append(expectedDst, dst[blockSize:]...) + + cipher(dst, src) + if !bytes.Equal(dst, expectedDst) { + t.Errorf("block cipher behavior differs when given non-zero dst; got %x, want %x", dst, expectedDst) + } + }) + + t.Run("BufferOverlap", func(t *testing.T) { + rng := newRandReader(t) + + buff := make([]byte, blockSize*2) + rng.Read((buff)) + + // Make src and dst slices point to same array with inexact overlap + src := buff[:blockSize] + dst := buff[1 : blockSize+1] + mustPanic(t, "invalid buffer overlap", func() { cipher(dst, src) }) + + // Only overlap on one byte + src = buff[:blockSize] + dst = buff[blockSize-1 : 2*blockSize-1] + mustPanic(t, "invalid buffer overlap", func() { cipher(dst, src) }) + + // src comes after dst with one byte overlap + src = buff[blockSize-1 : 2*blockSize-1] + dst = buff[:blockSize] + mustPanic(t, "invalid buffer overlap", func() { cipher(dst, src) }) + }) + + // Test short input/output. + // Assembly used to not notice. + // See issue 7928. + t.Run("ShortBlock", func(t *testing.T) { + // Returns slice of n bytes of an n+1 length array. Lets us test that a + // slice is still considered too short even if the underlying array it + // points to is large enough + byteSlice := func(n int) []byte { return make([]byte, n+1)[0:n] } + + // Off by one byte + mustPanic(t, "input not full block", func() { cipher(byteSlice(blockSize), byteSlice(blockSize-1)) }) + mustPanic(t, "output not full block", func() { cipher(byteSlice(blockSize-1), byteSlice(blockSize)) }) + + // Small slices + mustPanic(t, "input not full block", func() { cipher(byteSlice(1), byteSlice(1)) }) + mustPanic(t, "input not full block", func() { cipher(byteSlice(100), byteSlice(1)) }) + mustPanic(t, "output not full block", func() { cipher(byteSlice(1), byteSlice(100)) }) + }) +} + +func mustPanic(t *testing.T, msg string, f func()) { + t.Helper() + + defer func() { + t.Helper() + + err := recover() + + if err == nil { + t.Errorf("function did not panic for %q", msg) + } + }() + f() +} From 34ddde165d770e0a0dbca1bd64260ed878eb48c8 Mon Sep 17 00:00:00 2001 From: Sam Thanawalla Date: Wed, 31 Jul 2024 14:55:51 +0000 Subject: [PATCH 132/866] cmd/go: fix windows test failure for test_buildinfo_godebug_issue68053 Fix required adding $GOEXE because windows will produce a .exe file. Fixes: #68673 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Change-Id: I25206de362ee4be6a9c54bd1baa405f325d79313 Reviewed-on: https://go-review.googlesource.com/c/go/+/602095 Reviewed-by: Michael Matloob LUCI-TryBot-Result: Go LUCI --- .../go/testdata/script/test_buildinfo_godebug_issue68053.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/go/testdata/script/test_buildinfo_godebug_issue68053.txt b/src/cmd/go/testdata/script/test_buildinfo_godebug_issue68053.txt index 1257f7352a4118..e8b8ca215839ea 100644 --- a/src/cmd/go/testdata/script/test_buildinfo_godebug_issue68053.txt +++ b/src/cmd/go/testdata/script/test_buildinfo_godebug_issue68053.txt @@ -4,7 +4,7 @@ go list -test -f '{{.ImportPath}} {{.DefaultGODEBUG}}' stdout 'example.com/foo\.test.*panicnil=1.*' go test -c -go version -m ./foo.test +go version -m ./foo.test$GOEXE stdout 'build\tDefaultGODEBUG=.*panicnil=1.*' -- go.mod -- From ab7435abd9db52732d2d1d3494aae669d91937f1 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 3 Jul 2024 22:46:30 +0700 Subject: [PATCH 133/866] cmd/compile: add comment for the context on mismatch import path Follow up suggestion in CL 596396. Updates #54542 Change-Id: I47bf66684bb8397dc1cfbc4479e2279e59a40cfb Reviewed-on: https://go-review.googlesource.com/c/go/+/596515 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Keith Randall Auto-Submit: Cuong Manh Le --- src/cmd/compile/internal/noder/unified.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go index 6bc23cc5f92274..a5f0974838752f 100644 --- a/src/cmd/compile/internal/noder/unified.go +++ b/src/cmd/compile/internal/noder/unified.go @@ -404,6 +404,7 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) { r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic) pkg := r.pkg() + // This error can happen if "go tool compile" is called with wrong "-p" flag, see issue #54542. if pkg != importpkg { base.ErrorfAt(base.AutogeneratedPos, errors.BadImportPath, "mismatched import path, have %q (%p), want %q (%p)", pkg.Path, pkg, importpkg.Path, importpkg) base.ErrorExit() From 385e963e70aaf54a9d96a2c8c28e0a2df3527028 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 30 Jul 2024 19:35:27 -0700 Subject: [PATCH 134/866] go/types, types2: record type parameters in receiver expressions as uses CL 594740 rewrote type checking of method receiver types. Because that CL takes apart receivers "manually" rather than using the regular code for type checking type expressions, type parameters in receiver type expressions were only recorded as definitions (in Info.Defs). Before that CL, such type parameters were simultaneously considered definitions (they are declared by the receiver type expression) and uses (they are used to instantiate the receiver type expression). Adjust the receiver type checking code accordingly and record its type parameters also in Info.Uses and Info.Types. While at it, in go/types, replace declareTypeParams (plural) with declareTypeParam (singular) to more closely match types2 code. No functionality or semantic change. Fixes #68670. For #51343. Change-Id: Ibbca1a9b92e31b0dc972052a2827deeab49da98b Reviewed-on: https://go-review.googlesource.com/c/go/+/601935 Auto-Submit: Robert Griesemer Reviewed-by: Tim King LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/types2/api_test.go | 18 ++++++++++++++++ src/cmd/compile/internal/types2/signature.go | 8 ++++++- src/go/types/api_test.go | 18 ++++++++++++++++ src/go/types/decl.go | 22 +++++++------------- src/go/types/signature.go | 11 +++++++++- 5 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/cmd/compile/internal/types2/api_test.go b/src/cmd/compile/internal/types2/api_test.go index 2a3c76bb885bcf..d9ba620888078a 100644 --- a/src/cmd/compile/internal/types2/api_test.go +++ b/src/cmd/compile/internal/types2/api_test.go @@ -515,6 +515,13 @@ func TestTypesInfo(t *testing.T) { // {`package qf14; type T[_ any] int; func ((*(T[_]))) _() {}`, `(T[_])`, `qf14.T[_]`}, // parser doesn't record parens // {`package qf15; type T[_ any] int; func ((*(T[_]))) _() {}`, `*(T[_])`, `*qf15.T[_]`}, // parser doesn't record parens // {`package qf16; type T[_ any] int; func ((*(T[_]))) _() {}`, `(*(T[_]))`, `*qf16.T[_]`}, // parser doesn't record parens + + // For historic reasons, type parameters in receiver type expressions + // are considered both definitions and uses and thus also show up in + // the Info.Types map (see go.dev/issue/68670). + {`package t1; type T[_ any] int; func (T[P]) _() {}`, `P`, `P`}, + {`package t2; type T[_, _ any] int; func (T[P, Q]) _() {}`, `P`, `P`}, + {`package t3; type T[_, _ any] int; func (T[P, Q]) _() {}`, `Q`, `Q`}, } for _, test := range tests { @@ -829,6 +836,11 @@ func TestDefsInfo(t *testing.T) { {`package g0; type x[T any] int`, `x`, `type g0.x[T any] int`}, {`package g1; func f[T any]() {}`, `f`, `func g1.f[T any]()`}, {`package g2; type x[T any] int; func (*x[_]) m() {}`, `m`, `func (*g2.x[_]).m()`}, + + // Type parameters in receiver type expressions are definitions. + {`package r0; type T[_ any] int; func (T[P]) _() {}`, `P`, `type parameter P any`}, + {`package r1; type T[_, _ any] int; func (T[P, Q]) _() {}`, `P`, `type parameter P any`}, + {`package r2; type T[_, _ any] int; func (T[P, Q]) _() {}`, `Q`, `type parameter Q any`}, } for _, test := range tests { @@ -894,6 +906,12 @@ func TestUsesInfo(t *testing.T) { `m`, `func (m10.E[int]).m()`, }, + + // For historic reasons, type parameters in receiver type expressions + // are considered both definitions and uses (see go.dev/issue/68670). + {`package r0; type T[_ any] int; func (T[P]) _() {}`, `P`, `type parameter P any`}, + {`package r1; type T[_, _ any] int; func (T[P, Q]) _() {}`, `P`, `type parameter P any`}, + {`package r2; type T[_, _ any] int; func (T[P, Q]) _() {}`, `Q`, `type parameter Q any`}, } for _, test := range tests { diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go index 9cbcbe467c8a7f..8754f5492ceb33 100644 --- a/src/cmd/compile/internal/types2/signature.go +++ b/src/cmd/compile/internal/types2/signature.go @@ -171,7 +171,13 @@ func (check *Checker) collectRecv(rparam *syntax.Field, scopePos syntax.Pos) (re // after typechecking rbase (see go.dev/issue/52038). recvTParams := make([]*TypeParam, len(rtparams)) for i, rparam := range rtparams { - recvTParams[i] = check.declareTypeParam(rparam, scopePos) + tpar := check.declareTypeParam(rparam, scopePos) + recvTParams[i] = tpar + // For historic reasons, type parameters in receiver type expressions + // are considered both definitions and uses and thus must be recorded + // in the Info.Uses and Info.Types maps (see go.dev/issue/68670). + check.recordUse(rparam, tpar.obj) + check.recordTypeAndValue(rparam, typexpr, tpar, nil) } recvTParamsList = bindTParams(recvTParams) diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go index febb5893436e4f..f5bf49b4f8fe5c 100644 --- a/src/go/types/api_test.go +++ b/src/go/types/api_test.go @@ -513,6 +513,13 @@ func TestTypesInfo(t *testing.T) { {`package qf14; type T[_ any] int; func ((*(T[_]))) _() {}`, `(T[_])`, `qf14.T[_]`}, {`package qf15; type T[_ any] int; func ((*(T[_]))) _() {}`, `*(T[_])`, `*qf15.T[_]`}, {`package qf16; type T[_ any] int; func ((*(T[_]))) _() {}`, `(*(T[_]))`, `*qf16.T[_]`}, + + // For historic reasons, type parameters in receiver type expressions + // are considered both definitions and uses and thus also show up in + // the Info.Types map (see go.dev/issue/68670). + {`package t1; type T[_ any] int; func (T[P]) _() {}`, `P`, `P`}, + {`package t2; type T[_, _ any] int; func (T[P, Q]) _() {}`, `P`, `P`}, + {`package t3; type T[_, _ any] int; func (T[P, Q]) _() {}`, `Q`, `Q`}, } for _, test := range tests { @@ -826,6 +833,11 @@ func TestDefsInfo(t *testing.T) { {`package g0; type x[T any] int`, `x`, `type g0.x[T any] int`}, {`package g1; func f[T any]() {}`, `f`, `func g1.f[T any]()`}, {`package g2; type x[T any] int; func (*x[_]) m() {}`, `m`, `func (*g2.x[_]).m()`}, + + // Type parameters in receiver type expressions are definitions. + {`package r0; type T[_ any] int; func (T[P]) _() {}`, `P`, `type parameter P any`}, + {`package r1; type T[_, _ any] int; func (T[P, Q]) _() {}`, `P`, `type parameter P any`}, + {`package r2; type T[_, _ any] int; func (T[P, Q]) _() {}`, `Q`, `type parameter Q any`}, } for _, test := range tests { @@ -893,6 +905,12 @@ func TestUsesInfo(t *testing.T) { }, {`package m11; type T[A any] interface{ m(); n() }; func _(t1 T[int], t2 T[string]) { t1.m(); t2.n() }`, `m`, `func (m11.T[int]).m()`}, {`package m12; type T[A any] interface{ m(); n() }; func _(t1 T[int], t2 T[string]) { t1.m(); t2.n() }`, `n`, `func (m12.T[string]).n()`}, + + // For historic reasons, type parameters in receiver type expressions + // are considered both definitions and uses (see go.dev/issue/68670). + {`package r0; type T[_ any] int; func (T[P]) _() {}`, `P`, `type parameter P any`}, + {`package r1; type T[_, _ any] int; func (T[P, Q]) _() {}`, `P`, `type parameter P any`}, + {`package r2; type T[_, _ any] int; func (T[P, Q]) _() {}`, `Q`, `type parameter Q any`}, } for _, test := range tests { diff --git a/src/go/types/decl.go b/src/go/types/decl.go index e9bf802cb8b1df..f4bccb5209298a 100644 --- a/src/go/types/decl.go +++ b/src/go/types/decl.go @@ -674,7 +674,9 @@ func (check *Checker) collectTypeParams(dst **TypeParamList, list *ast.FieldList // list (so we can have mutually recursive parameterized interfaces). scopePos := list.Pos() for _, f := range list.List { - tparams = check.declareTypeParams(tparams, f.Names, scopePos) + for _, name := range f.Names { + tparams = append(tparams, check.declareTypeParam(name, scopePos)) + } } // Set the type parameters before collecting the type constraints because @@ -743,25 +745,17 @@ func (check *Checker) bound(x ast.Expr) Type { return check.typ(x) } -func (check *Checker) declareTypeParams(tparams []*TypeParam, names []*ast.Ident, scopePos token.Pos) []*TypeParam { +func (check *Checker) declareTypeParam(name *ast.Ident, scopePos token.Pos) *TypeParam { // Use Typ[Invalid] for the type constraint to ensure that a type // is present even if the actual constraint has not been assigned // yet. // TODO(gri) Need to systematically review all uses of type parameter // constraints to make sure we don't rely on them if they // are not properly set yet. - for _, name := range names { - tname := NewTypeName(name.Pos(), check.pkg, name.Name, nil) - tpar := check.newTypeParam(tname, Typ[Invalid]) // assigns type to tpar as a side-effect - check.declare(check.scope, name, tname, scopePos) - tparams = append(tparams, tpar) - } - - if check.conf._Trace && len(names) > 0 { - check.trace(names[0].Pos(), "type params = %v", tparams[len(tparams)-len(names):]) - } - - return tparams + tname := NewTypeName(name.Pos(), check.pkg, name.Name, nil) + tpar := check.newTypeParam(tname, Typ[Invalid]) // assigns type to tname as a side-effect + check.declare(check.scope, name, tname, scopePos) + return tpar } func (check *Checker) collectMethods(obj *TypeName) { diff --git a/src/go/types/signature.go b/src/go/types/signature.go index a6cc3024275008..ea25ef49310efa 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -190,7 +190,16 @@ func (check *Checker) collectRecv(rparam *ast.Field, scopePos token.Pos) (recv * // Checker.collectTypeParams). The scope of the type parameter T in // "func (r T[T]) f() {}" starts after f, not at r, so we declare it // after typechecking rbase (see go.dev/issue/52038). - recvTParams := check.declareTypeParams(nil, rtparams, scopePos) + recvTParams := make([]*TypeParam, len(rtparams)) + for i, rparam := range rtparams { + tpar := check.declareTypeParam(rparam, scopePos) + recvTParams[i] = tpar + // For historic reasons, type parameters in receiver type expressions + // are considered both definitions and uses and thus must be recorded + // in the Info.Uses and Info.Types maps (see go.dev/issue/68670). + check.recordUse(rparam, tpar.obj) + check.recordTypeAndValue(rparam, typexpr, tpar, nil) + } recvTParamsList = bindTParams(recvTParams) // Get the type parameter bounds from the receiver base type From 7dac9898c3d34378de8f523a77a01bcc86033562 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 24 Jun 2024 17:17:13 -0400 Subject: [PATCH 135/866] reflect: add flag tests for MapOf Add two tests that verify that MapOf sets the map NeedsKeyUpdate and HashMightPanic flags in the created map. Missing these flags would cause correctness issues not otherwise caught in the reflect tests. For #54766. Change-Id: Icd5f117e0794e7b4d1b70fa94e5afbe97c4543e3 Reviewed-on: https://go-review.googlesource.com/c/go/+/594656 Reviewed-by: Keith Randall Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/reflect/all_test.go | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index a57f17f8c30f12..277c703eddeaf7 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -8603,3 +8603,48 @@ func TestSliceAt(t *testing.T) { // _ = SliceAt(typ, unsafe.Pointer(last), 1) shouldPanic("", func() { _ = SliceAt(typ, unsafe.Pointer(last), 2) }) } + +// Test that maps created with MapOf properly updates keys on overwrite as +// expected (i.e., it sets the key update flag in the map). +// +// This test is based on runtime.TestNegativeZero. +func TestMapOfKeyUpdate(t *testing.T) { + m := MakeMap(MapOf(TypeFor[float64](), TypeFor[bool]())) + + zero := float64(0.0) + negZero := math.Copysign(zero, -1.0) + + m.SetMapIndex(ValueOf(zero), ValueOf(true)) + m.SetMapIndex(ValueOf(negZero), ValueOf(true)) + + if m.Len() != 1 { + t.Errorf("map length got %d want 1", m.Len()) + } + + iter := m.MapRange() + for iter.Next() { + k := iter.Key().Float() + if math.Copysign(1.0, k) > 0 { + t.Errorf("map key %f has positive sign", k) + } + } +} + +// Test that maps created with MapOf properly panic on unhashable keys, even if +// the map is empty. (i.e., it sets the hash might panic flag in the map). +// +// This test is a simplified version of runtime.TestEmptyMapWithInterfaceKey +// for reflect. +func TestMapOfKeyPanic(t *testing.T) { + defer func() { + r := recover() + if r == nil { + t.Errorf("didn't panic") + } + }() + + m := MakeMap(MapOf(TypeFor[any](), TypeFor[bool]())) + + var slice []int + m.MapIndex(ValueOf(slice)) +} From 31e692be43eea8b6bdaae6d0557f829fe56187be Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 31 Jul 2024 09:40:33 -0700 Subject: [PATCH 136/866] go/types, types2: move type recording functionality in its own files This CL simply moves recording functions into recording.go and adjust the imports as needed. There are no other code changes. Preparation for generating go/types/recording.go from types2 sources. Change-Id: Idc5850462a78afb1bfce78ba216722d07c8bca1e Reviewed-on: https://go-review.googlesource.com/c/go/+/602116 LUCI-TryBot-Result: Go LUCI Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer Reviewed-by: Tim King --- src/cmd/compile/internal/types2/check.go | 225 ------------------ src/cmd/compile/internal/types2/recording.go | 238 +++++++++++++++++++ src/go/types/check.go | 185 -------------- src/go/types/recording.go | 199 ++++++++++++++++ 4 files changed, 437 insertions(+), 410 deletions(-) create mode 100644 src/cmd/compile/internal/types2/recording.go create mode 100644 src/go/types/recording.go diff --git a/src/cmd/compile/internal/types2/check.go b/src/cmd/compile/internal/types2/check.go index 44274b194bc462..f344142011686f 100644 --- a/src/cmd/compile/internal/types2/check.go +++ b/src/cmd/compile/internal/types2/check.go @@ -514,228 +514,3 @@ func (check *Checker) cleanup() { } check.cleaners = nil } - -func (check *Checker) record(x *operand) { - // convert x into a user-friendly set of values - // TODO(gri) this code can be simplified - var typ Type - var val constant.Value - switch x.mode { - case invalid: - typ = Typ[Invalid] - case novalue: - typ = (*Tuple)(nil) - case constant_: - typ = x.typ - val = x.val - default: - typ = x.typ - } - assert(x.expr != nil && typ != nil) - - if isUntyped(typ) { - // delay type and value recording until we know the type - // or until the end of type checking - check.rememberUntyped(x.expr, false, x.mode, typ.(*Basic), val) - } else { - check.recordTypeAndValue(x.expr, x.mode, typ, val) - } -} - -func (check *Checker) recordUntyped() { - if !debug && !check.recordTypes() { - return // nothing to do - } - - for x, info := range check.untyped { - if debug && isTyped(info.typ) { - check.dump("%v: %s (type %s) is typed", atPos(x), x, info.typ) - panic("unreachable") - } - check.recordTypeAndValue(x, info.mode, info.typ, info.val) - } -} - -func (check *Checker) recordTypeAndValue(x syntax.Expr, mode operandMode, typ Type, val constant.Value) { - assert(x != nil) - assert(typ != nil) - if mode == invalid { - return // omit - } - if mode == constant_ { - assert(val != nil) - // We check allBasic(typ, IsConstType) here as constant expressions may be - // recorded as type parameters. - assert(!isValid(typ) || allBasic(typ, IsConstType)) - } - if m := check.Types; m != nil { - m[x] = TypeAndValue{mode, typ, val} - } - if check.StoreTypesInSyntax { - tv := TypeAndValue{mode, typ, val} - stv := syntax.TypeAndValue{Type: typ, Value: val} - if tv.IsVoid() { - stv.SetIsVoid() - } - if tv.IsType() { - stv.SetIsType() - } - if tv.IsBuiltin() { - stv.SetIsBuiltin() - } - if tv.IsValue() { - stv.SetIsValue() - } - if tv.IsNil() { - stv.SetIsNil() - } - if tv.Addressable() { - stv.SetAddressable() - } - if tv.Assignable() { - stv.SetAssignable() - } - if tv.HasOk() { - stv.SetHasOk() - } - x.SetTypeInfo(stv) - } -} - -func (check *Checker) recordBuiltinType(f syntax.Expr, sig *Signature) { - // f must be a (possibly parenthesized, possibly qualified) - // identifier denoting a built-in (including unsafe's non-constant - // functions Add and Slice): record the signature for f and possible - // children. - for { - check.recordTypeAndValue(f, builtin, sig, nil) - switch p := f.(type) { - case *syntax.Name, *syntax.SelectorExpr: - return // we're done - case *syntax.ParenExpr: - f = p.X - default: - panic("unreachable") - } - } -} - -// recordCommaOkTypes updates recorded types to reflect that x is used in a commaOk context -// (and therefore has tuple type). -func (check *Checker) recordCommaOkTypes(x syntax.Expr, a []*operand) { - assert(x != nil) - assert(len(a) == 2) - if a[0].mode == invalid { - return - } - t0, t1 := a[0].typ, a[1].typ - assert(isTyped(t0) && isTyped(t1) && (allBoolean(t1) || t1 == universeError)) - if m := check.Types; m != nil { - for { - tv := m[x] - assert(tv.Type != nil) // should have been recorded already - pos := x.Pos() - tv.Type = NewTuple( - NewVar(pos, check.pkg, "", t0), - NewVar(pos, check.pkg, "", t1), - ) - m[x] = tv - // if x is a parenthesized expression (p.X), update p.X - p, _ := x.(*syntax.ParenExpr) - if p == nil { - break - } - x = p.X - } - } - if check.StoreTypesInSyntax { - // Note: this loop is duplicated because the type of tv is different. - // Above it is types2.TypeAndValue, here it is syntax.TypeAndValue. - for { - tv := x.GetTypeInfo() - assert(tv.Type != nil) // should have been recorded already - pos := x.Pos() - tv.Type = NewTuple( - NewVar(pos, check.pkg, "", t0), - NewVar(pos, check.pkg, "", t1), - ) - x.SetTypeInfo(tv) - p, _ := x.(*syntax.ParenExpr) - if p == nil { - break - } - x = p.X - } - } -} - -// recordInstance records instantiation information into check.Info, if the -// Instances map is non-nil. The given expr must be an ident, selector, or -// index (list) expr with ident or selector operand. -// -// TODO(rfindley): the expr parameter is fragile. See if we can access the -// instantiated identifier in some other way. -func (check *Checker) recordInstance(expr syntax.Expr, targs []Type, typ Type) { - ident := instantiatedIdent(expr) - assert(ident != nil) - assert(typ != nil) - if m := check.Instances; m != nil { - m[ident] = Instance{newTypeList(targs), typ} - } -} - -func instantiatedIdent(expr syntax.Expr) *syntax.Name { - var selOrIdent syntax.Expr - switch e := expr.(type) { - case *syntax.IndexExpr: - selOrIdent = e.X - case *syntax.SelectorExpr, *syntax.Name: - selOrIdent = e - } - switch x := selOrIdent.(type) { - case *syntax.Name: - return x - case *syntax.SelectorExpr: - return x.Sel - } - panic("instantiated ident not found") -} - -func (check *Checker) recordDef(id *syntax.Name, obj Object) { - assert(id != nil) - if m := check.Defs; m != nil { - m[id] = obj - } -} - -func (check *Checker) recordUse(id *syntax.Name, obj Object) { - assert(id != nil) - assert(obj != nil) - if m := check.Uses; m != nil { - m[id] = obj - } -} - -func (check *Checker) recordImplicit(node syntax.Node, obj Object) { - assert(node != nil) - assert(obj != nil) - if m := check.Implicits; m != nil { - m[node] = obj - } -} - -func (check *Checker) recordSelection(x *syntax.SelectorExpr, kind SelectionKind, recv Type, obj Object, index []int, indirect bool) { - assert(obj != nil && (recv == nil || len(index) > 0)) - check.recordUse(x.Sel, obj) - if m := check.Selections; m != nil { - m[x] = &Selection{kind, recv, obj, index, indirect} - } -} - -func (check *Checker) recordScope(node syntax.Node, scope *Scope) { - assert(node != nil) - assert(scope != nil) - if m := check.Scopes; m != nil { - m[node] = scope - } -} diff --git a/src/cmd/compile/internal/types2/recording.go b/src/cmd/compile/internal/types2/recording.go new file mode 100644 index 00000000000000..cdd38ddb115e58 --- /dev/null +++ b/src/cmd/compile/internal/types2/recording.go @@ -0,0 +1,238 @@ +// Copyright 2024 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. + +// This file implements recording of type information +// in the types2.Info maps. + +package types2 + +import ( + "cmd/compile/internal/syntax" + "go/constant" +) + +func (check *Checker) record(x *operand) { + // convert x into a user-friendly set of values + // TODO(gri) this code can be simplified + var typ Type + var val constant.Value + switch x.mode { + case invalid: + typ = Typ[Invalid] + case novalue: + typ = (*Tuple)(nil) + case constant_: + typ = x.typ + val = x.val + default: + typ = x.typ + } + assert(x.expr != nil && typ != nil) + + if isUntyped(typ) { + // delay type and value recording until we know the type + // or until the end of type checking + check.rememberUntyped(x.expr, false, x.mode, typ.(*Basic), val) + } else { + check.recordTypeAndValue(x.expr, x.mode, typ, val) + } +} + +func (check *Checker) recordUntyped() { + if !debug && !check.recordTypes() { + return // nothing to do + } + + for x, info := range check.untyped { + if debug && isTyped(info.typ) { + check.dump("%v: %s (type %s) is typed", atPos(x), x, info.typ) + panic("unreachable") + } + check.recordTypeAndValue(x, info.mode, info.typ, info.val) + } +} + +func (check *Checker) recordTypeAndValue(x syntax.Expr, mode operandMode, typ Type, val constant.Value) { + assert(x != nil) + assert(typ != nil) + if mode == invalid { + return // omit + } + if mode == constant_ { + assert(val != nil) + // We check allBasic(typ, IsConstType) here as constant expressions may be + // recorded as type parameters. + assert(!isValid(typ) || allBasic(typ, IsConstType)) + } + if m := check.Types; m != nil { + m[x] = TypeAndValue{mode, typ, val} + } + if check.StoreTypesInSyntax { + tv := TypeAndValue{mode, typ, val} + stv := syntax.TypeAndValue{Type: typ, Value: val} + if tv.IsVoid() { + stv.SetIsVoid() + } + if tv.IsType() { + stv.SetIsType() + } + if tv.IsBuiltin() { + stv.SetIsBuiltin() + } + if tv.IsValue() { + stv.SetIsValue() + } + if tv.IsNil() { + stv.SetIsNil() + } + if tv.Addressable() { + stv.SetAddressable() + } + if tv.Assignable() { + stv.SetAssignable() + } + if tv.HasOk() { + stv.SetHasOk() + } + x.SetTypeInfo(stv) + } +} + +func (check *Checker) recordBuiltinType(f syntax.Expr, sig *Signature) { + // f must be a (possibly parenthesized, possibly qualified) + // identifier denoting a built-in (including unsafe's non-constant + // functions Add and Slice): record the signature for f and possible + // children. + for { + check.recordTypeAndValue(f, builtin, sig, nil) + switch p := f.(type) { + case *syntax.Name, *syntax.SelectorExpr: + return // we're done + case *syntax.ParenExpr: + f = p.X + default: + panic("unreachable") + } + } +} + +// recordCommaOkTypes updates recorded types to reflect that x is used in a commaOk context +// (and therefore has tuple type). +func (check *Checker) recordCommaOkTypes(x syntax.Expr, a []*operand) { + assert(x != nil) + assert(len(a) == 2) + if a[0].mode == invalid { + return + } + t0, t1 := a[0].typ, a[1].typ + assert(isTyped(t0) && isTyped(t1) && (allBoolean(t1) || t1 == universeError)) + if m := check.Types; m != nil { + for { + tv := m[x] + assert(tv.Type != nil) // should have been recorded already + pos := x.Pos() + tv.Type = NewTuple( + NewVar(pos, check.pkg, "", t0), + NewVar(pos, check.pkg, "", t1), + ) + m[x] = tv + // if x is a parenthesized expression (p.X), update p.X + p, _ := x.(*syntax.ParenExpr) + if p == nil { + break + } + x = p.X + } + } + if check.StoreTypesInSyntax { + // Note: this loop is duplicated because the type of tv is different. + // Above it is types2.TypeAndValue, here it is syntax.TypeAndValue. + for { + tv := x.GetTypeInfo() + assert(tv.Type != nil) // should have been recorded already + pos := x.Pos() + tv.Type = NewTuple( + NewVar(pos, check.pkg, "", t0), + NewVar(pos, check.pkg, "", t1), + ) + x.SetTypeInfo(tv) + p, _ := x.(*syntax.ParenExpr) + if p == nil { + break + } + x = p.X + } + } +} + +// recordInstance records instantiation information into check.Info, if the +// Instances map is non-nil. The given expr must be an ident, selector, or +// index (list) expr with ident or selector operand. +// +// TODO(rfindley): the expr parameter is fragile. See if we can access the +// instantiated identifier in some other way. +func (check *Checker) recordInstance(expr syntax.Expr, targs []Type, typ Type) { + ident := instantiatedIdent(expr) + assert(ident != nil) + assert(typ != nil) + if m := check.Instances; m != nil { + m[ident] = Instance{newTypeList(targs), typ} + } +} + +func instantiatedIdent(expr syntax.Expr) *syntax.Name { + var selOrIdent syntax.Expr + switch e := expr.(type) { + case *syntax.IndexExpr: + selOrIdent = e.X + case *syntax.SelectorExpr, *syntax.Name: + selOrIdent = e + } + switch x := selOrIdent.(type) { + case *syntax.Name: + return x + case *syntax.SelectorExpr: + return x.Sel + } + panic("instantiated ident not found") +} + +func (check *Checker) recordDef(id *syntax.Name, obj Object) { + assert(id != nil) + if m := check.Defs; m != nil { + m[id] = obj + } +} + +func (check *Checker) recordUse(id *syntax.Name, obj Object) { + assert(id != nil) + assert(obj != nil) + if m := check.Uses; m != nil { + m[id] = obj + } +} + +func (check *Checker) recordImplicit(node syntax.Node, obj Object) { + assert(node != nil) + assert(obj != nil) + if m := check.Implicits; m != nil { + m[node] = obj + } +} + +func (check *Checker) recordSelection(x *syntax.SelectorExpr, kind SelectionKind, recv Type, obj Object, index []int, indirect bool) { + assert(obj != nil && (recv == nil || len(index) > 0)) + check.recordUse(x.Sel, obj) + if m := check.Selections; m != nil { + m[x] = &Selection{kind, recv, obj, index, indirect} + } +} + +func (check *Checker) recordScope(node syntax.Node, scope *Scope) { + assert(node != nil) + assert(scope != nil) + if m := check.Scopes; m != nil { + m[node] = scope + } +} diff --git a/src/go/types/check.go b/src/go/types/check.go index a4d0ff97d5b041..a31e049c716e47 100644 --- a/src/go/types/check.go +++ b/src/go/types/check.go @@ -13,7 +13,6 @@ import ( "go/token" "internal/godebug" . "internal/types/errors" - "strings" "sync/atomic" ) @@ -536,187 +535,3 @@ func (check *Checker) cleanup() { } check.cleaners = nil } - -func (check *Checker) record(x *operand) { - // convert x into a user-friendly set of values - // TODO(gri) this code can be simplified - var typ Type - var val constant.Value - switch x.mode { - case invalid: - typ = Typ[Invalid] - case novalue: - typ = (*Tuple)(nil) - case constant_: - typ = x.typ - val = x.val - default: - typ = x.typ - } - assert(x.expr != nil && typ != nil) - - if isUntyped(typ) { - // delay type and value recording until we know the type - // or until the end of type checking - check.rememberUntyped(x.expr, false, x.mode, typ.(*Basic), val) - } else { - check.recordTypeAndValue(x.expr, x.mode, typ, val) - } -} - -func (check *Checker) recordUntyped() { - if !debug && check.Types == nil { - return // nothing to do - } - - for x, info := range check.untyped { - if debug && isTyped(info.typ) { - check.dump("%v: %s (type %s) is typed", x.Pos(), x, info.typ) - panic("unreachable") - } - check.recordTypeAndValue(x, info.mode, info.typ, info.val) - } -} - -func (check *Checker) recordTypeAndValue(x ast.Expr, mode operandMode, typ Type, val constant.Value) { - assert(x != nil) - assert(typ != nil) - if mode == invalid { - return // omit - } - if mode == constant_ { - assert(val != nil) - // We check allBasic(typ, IsConstType) here as constant expressions may be - // recorded as type parameters. - assert(!isValid(typ) || allBasic(typ, IsConstType)) - } - if m := check.Types; m != nil { - m[x] = TypeAndValue{mode, typ, val} - } -} - -func (check *Checker) recordBuiltinType(f ast.Expr, sig *Signature) { - // f must be a (possibly parenthesized, possibly qualified) - // identifier denoting a built-in (including unsafe's non-constant - // functions Add and Slice): record the signature for f and possible - // children. - for { - check.recordTypeAndValue(f, builtin, sig, nil) - switch p := f.(type) { - case *ast.Ident, *ast.SelectorExpr: - return // we're done - case *ast.ParenExpr: - f = p.X - default: - panic("unreachable") - } - } -} - -// recordCommaOkTypes updates recorded types to reflect that x is used in a commaOk context -// (and therefore has tuple type). -func (check *Checker) recordCommaOkTypes(x ast.Expr, a []*operand) { - assert(x != nil) - assert(len(a) == 2) - if a[0].mode == invalid { - return - } - t0, t1 := a[0].typ, a[1].typ - assert(isTyped(t0) && isTyped(t1) && (allBoolean(t1) || t1 == universeError)) - if m := check.Types; m != nil { - for { - tv := m[x] - assert(tv.Type != nil) // should have been recorded already - pos := x.Pos() - tv.Type = NewTuple( - NewVar(pos, check.pkg, "", t0), - NewVar(pos, check.pkg, "", t1), - ) - m[x] = tv - // if x is a parenthesized expression (p.X), update p.X - p, _ := x.(*ast.ParenExpr) - if p == nil { - break - } - x = p.X - } - } -} - -// recordInstance records instantiation information into check.Info, if the -// Instances map is non-nil. The given expr must be an ident, selector, or -// index (list) expr with ident or selector operand. -// -// TODO(rfindley): the expr parameter is fragile. See if we can access the -// instantiated identifier in some other way. -func (check *Checker) recordInstance(expr ast.Expr, targs []Type, typ Type) { - ident := instantiatedIdent(expr) - assert(ident != nil) - assert(typ != nil) - if m := check.Instances; m != nil { - m[ident] = Instance{newTypeList(targs), typ} - } -} - -func instantiatedIdent(expr ast.Expr) *ast.Ident { - var selOrIdent ast.Expr - switch e := expr.(type) { - case *ast.IndexExpr: - selOrIdent = e.X - case *ast.IndexListExpr: - selOrIdent = e.X - case *ast.SelectorExpr, *ast.Ident: - selOrIdent = e - } - switch x := selOrIdent.(type) { - case *ast.Ident: - return x - case *ast.SelectorExpr: - return x.Sel - } - - // extra debugging of #63933 - var buf strings.Builder - buf.WriteString("instantiated ident not found; please report: ") - ast.Fprint(&buf, token.NewFileSet(), expr, ast.NotNilFilter) - panic(buf.String()) -} - -func (check *Checker) recordDef(id *ast.Ident, obj Object) { - assert(id != nil) - if m := check.Defs; m != nil { - m[id] = obj - } -} - -func (check *Checker) recordUse(id *ast.Ident, obj Object) { - assert(id != nil) - assert(obj != nil) - if m := check.Uses; m != nil { - m[id] = obj - } -} - -func (check *Checker) recordImplicit(node ast.Node, obj Object) { - assert(node != nil) - assert(obj != nil) - if m := check.Implicits; m != nil { - m[node] = obj - } -} - -func (check *Checker) recordSelection(x *ast.SelectorExpr, kind SelectionKind, recv Type, obj Object, index []int, indirect bool) { - assert(obj != nil && (recv == nil || len(index) > 0)) - check.recordUse(x.Sel, obj) - if m := check.Selections; m != nil { - m[x] = &Selection{kind, recv, obj, index, indirect} - } -} - -func (check *Checker) recordScope(node ast.Node, scope *Scope) { - assert(node != nil) - assert(scope != nil) - if m := check.Scopes; m != nil { - m[node] = scope - } -} diff --git a/src/go/types/recording.go b/src/go/types/recording.go new file mode 100644 index 00000000000000..aae2b20d2711a4 --- /dev/null +++ b/src/go/types/recording.go @@ -0,0 +1,199 @@ +// Copyright 2024 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. + +// This file implements recording of type information +// in the types.Info maps. + +package types + +import ( + "go/ast" + "go/constant" + "go/token" + "strings" +) + +func (check *Checker) record(x *operand) { + // convert x into a user-friendly set of values + // TODO(gri) this code can be simplified + var typ Type + var val constant.Value + switch x.mode { + case invalid: + typ = Typ[Invalid] + case novalue: + typ = (*Tuple)(nil) + case constant_: + typ = x.typ + val = x.val + default: + typ = x.typ + } + assert(x.expr != nil && typ != nil) + + if isUntyped(typ) { + // delay type and value recording until we know the type + // or until the end of type checking + check.rememberUntyped(x.expr, false, x.mode, typ.(*Basic), val) + } else { + check.recordTypeAndValue(x.expr, x.mode, typ, val) + } +} + +func (check *Checker) recordUntyped() { + if !debug && check.Types == nil { + return // nothing to do + } + + for x, info := range check.untyped { + if debug && isTyped(info.typ) { + check.dump("%v: %s (type %s) is typed", x.Pos(), x, info.typ) + panic("unreachable") + } + check.recordTypeAndValue(x, info.mode, info.typ, info.val) + } +} + +func (check *Checker) recordTypeAndValue(x ast.Expr, mode operandMode, typ Type, val constant.Value) { + assert(x != nil) + assert(typ != nil) + if mode == invalid { + return // omit + } + if mode == constant_ { + assert(val != nil) + // We check allBasic(typ, IsConstType) here as constant expressions may be + // recorded as type parameters. + assert(!isValid(typ) || allBasic(typ, IsConstType)) + } + if m := check.Types; m != nil { + m[x] = TypeAndValue{mode, typ, val} + } +} + +func (check *Checker) recordBuiltinType(f ast.Expr, sig *Signature) { + // f must be a (possibly parenthesized, possibly qualified) + // identifier denoting a built-in (including unsafe's non-constant + // functions Add and Slice): record the signature for f and possible + // children. + for { + check.recordTypeAndValue(f, builtin, sig, nil) + switch p := f.(type) { + case *ast.Ident, *ast.SelectorExpr: + return // we're done + case *ast.ParenExpr: + f = p.X + default: + panic("unreachable") + } + } +} + +// recordCommaOkTypes updates recorded types to reflect that x is used in a commaOk context +// (and therefore has tuple type). +func (check *Checker) recordCommaOkTypes(x ast.Expr, a []*operand) { + assert(x != nil) + assert(len(a) == 2) + if a[0].mode == invalid { + return + } + t0, t1 := a[0].typ, a[1].typ + assert(isTyped(t0) && isTyped(t1) && (allBoolean(t1) || t1 == universeError)) + if m := check.Types; m != nil { + for { + tv := m[x] + assert(tv.Type != nil) // should have been recorded already + pos := x.Pos() + tv.Type = NewTuple( + NewVar(pos, check.pkg, "", t0), + NewVar(pos, check.pkg, "", t1), + ) + m[x] = tv + // if x is a parenthesized expression (p.X), update p.X + p, _ := x.(*ast.ParenExpr) + if p == nil { + break + } + x = p.X + } + } +} + +// recordInstance records instantiation information into check.Info, if the +// Instances map is non-nil. The given expr must be an ident, selector, or +// index (list) expr with ident or selector operand. +// +// TODO(rfindley): the expr parameter is fragile. See if we can access the +// instantiated identifier in some other way. +func (check *Checker) recordInstance(expr ast.Expr, targs []Type, typ Type) { + ident := instantiatedIdent(expr) + assert(ident != nil) + assert(typ != nil) + if m := check.Instances; m != nil { + m[ident] = Instance{newTypeList(targs), typ} + } +} + +func instantiatedIdent(expr ast.Expr) *ast.Ident { + var selOrIdent ast.Expr + switch e := expr.(type) { + case *ast.IndexExpr: + selOrIdent = e.X + case *ast.IndexListExpr: + selOrIdent = e.X + case *ast.SelectorExpr, *ast.Ident: + selOrIdent = e + } + switch x := selOrIdent.(type) { + case *ast.Ident: + return x + case *ast.SelectorExpr: + return x.Sel + } + + // extra debugging of #63933 + var buf strings.Builder + buf.WriteString("instantiated ident not found; please report: ") + ast.Fprint(&buf, token.NewFileSet(), expr, ast.NotNilFilter) + panic(buf.String()) +} + +func (check *Checker) recordDef(id *ast.Ident, obj Object) { + assert(id != nil) + if m := check.Defs; m != nil { + m[id] = obj + } +} + +func (check *Checker) recordUse(id *ast.Ident, obj Object) { + assert(id != nil) + assert(obj != nil) + if m := check.Uses; m != nil { + m[id] = obj + } +} + +func (check *Checker) recordImplicit(node ast.Node, obj Object) { + assert(node != nil) + assert(obj != nil) + if m := check.Implicits; m != nil { + m[node] = obj + } +} + +func (check *Checker) recordSelection(x *ast.SelectorExpr, kind SelectionKind, recv Type, obj Object, index []int, indirect bool) { + assert(obj != nil && (recv == nil || len(index) > 0)) + check.recordUse(x.Sel, obj) + if m := check.Selections; m != nil { + m[x] = &Selection{kind, recv, obj, index, indirect} + } +} + +func (check *Checker) recordScope(node ast.Node, scope *Scope) { + assert(node != nil) + assert(scope != nil) + if m := check.Scopes; m != nil { + m[node] = scope + } +} From c5de95076669ad2416aeec941912af723f2ccf78 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 16 May 2024 13:09:51 -0400 Subject: [PATCH 137/866] time: optimize time <-> date conversions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Optimize the time -> date and date -> time conversions using the methods outlined in: Cassio Neri and Lorenz Schneider, “Euclidean affine functions and their application to calendar algorithms,” SP&E 2023. https://doi.org/10.1002/spe.3172 I took the opportunity to introduce some types to make the code significantly clearer and optimize a few other parts I noticed along the way. The result is noticeably faster across the board. Probably this doesn't matter much in real programs, but all the other languages are picking this up, and it is less code than what we had before. Proposal #63844 suggested adopting this algorithm and simultaneously restricting the range of valid years supported by the package from its current ±292277022399 (plenty for anyone) to a mere ±32767. This CL does NOT make any such restriction. The range of valid years is almost exactly what it was before. (It is the same size but shifted 10 months earlier, which no one will ever care about.) This CL removes any real need to consider the proposal, since it would be a breaking change for truly insignificant benefit. Thanks to Normandes Junior and Cassio Neri for CL 548155 and for discussion on #63844, which prompted me to write this CL. This CL is all new code and does not include code from CL 548155 except as noted in the isLeap function implementation. For #63844. goos: linux goarch: amd64 pkg: time cpu: AMD Ryzen 9 7950X 16-Core Processor │ timeold.txt │ timenew.txt │ │ sec/op │ sec/op vs base │ Format-32 156.5n ± 1% 148.1n ± 1% -5.37% (n=125) FormatRFC3339-32 118.5n ± 1% 112.1n ± 1% -5.40% (n=125) FormatRFC3339Nano-32 119.2n ± 1% 113.0n ± 1% -5.20% (n=125) FormatNow-32 96.88n ± 2% 97.22n ± 1% ~ (p=0.173 n=125) MarshalJSON-32 79.77n ± 1% 75.82n ± 1% -4.95% (n=125) MarshalText-32 79.25n ± 1% 76.18n ± 1% -3.87% (p=0.000 n=125) Parse-32 79.80n ± 1% 78.28n ± 1% -1.90% (p=0.000 n=125) ParseRFC3339UTC-32 29.10n ± 1% 28.90n ± 0% ~ (p=0.094 n=125) ParseRFC3339UTCBytes-32 30.72n ± 1% 30.88n ± 1% ~ (p=0.894 n=125) ParseRFC3339TZ-32 92.29n ± 0% 90.27n ± 1% -2.19% (p=0.000 n=125) ParseRFC3339TZBytes-32 133.4n ± 1% 132.0n ± 1% ~ (p=0.004 n=125) ParseDuration-32 41.11n ± 3% 44.08n ± 2% ~ (p=0.088 n=125) Hour-32 2.834n ± 0% 2.829n ± 1% ~ (p=0.891 n=125) Second-32 2.811n ± 1% 2.828n ± 1% ~ (p=0.208 n=125) Date-32 9.228n ± 1% 5.788n ± 0% -37.28% (n=125) Year-32 6.404n ± 1% 4.673n ± 1% -27.03% (n=125) YearDay-32 6.399n ± 1% 5.802n ± 0% -9.33% (n=125) Month-32 9.108n ± 1% 4.700n ± 1% -48.40% (n=125) Day-32 9.106n ± 1% 4.686n ± 1% -48.54% (n=125) ISOWeek-32 10.060n ± 0% 7.998n ± 1% -20.50% (n=125) GoString-32 84.59n ± 1% 83.82n ± 1% ~ (p=0.027 n=125) DateFunc-32 6.993n ± 0% 6.144n ± 1% -12.14% (n=125) UnmarshalText-32 94.78n ± 2% 89.49n ± 1% -5.58% (n=125) geomean 29.60n 26.13n -11.70% goos: darwin goarch: arm64 pkg: time cpu: Apple M3 Pro │ timeold-m3.txt │ timenew-m3.txt │ │ sec/op │ sec/op vs base │ Format-12 152.6n ± 0% 147.4n ± 0% -3.41% (n=125) FormatRFC3339-12 101.50n ± 0% 92.02n ± 0% -9.34% (n=125) FormatRFC3339Nano-12 101.30n ± 0% 92.68n ± 0% -8.51% (n=125) FormatNow-12 93.50n ± 0% 94.65n ± 0% +1.23% (p=0.000 n=125) MarshalJSON-12 50.06n ± 0% 48.25n ± 0% -3.62% (n=125) MarshalText-12 49.70n ± 0% 47.51n ± 0% -4.41% (n=125) Parse-12 97.91n ± 0% 95.90n ± 0% -2.05% (n=125) ParseRFC3339UTC-12 36.45n ± 0% 35.78n ± 1% -1.84% (n=125) ParseRFC3339UTCBytes-12 38.11n ± 0% 37.42n ± 0% -1.81% (n=125) ParseRFC3339TZ-12 100.80n ± 1% 97.58n ± 0% -3.19% (n=125) ParseRFC3339TZBytes-12 111.8n ± 1% 107.4n ± 0% -3.94% (n=125) ParseDuration-12 52.70n ± 0% 52.84n ± 0% ~ (p=0.028 n=125) Hour-12 2.657n ± 0% 2.655n ± 0% ~ (p=0.018 n=125) Second-12 2.656n ± 0% 2.654n ± 0% ~ (p=0.084 n=125) Date-12 8.201n ± 0% 5.055n ± 0% -38.36% (n=125) Year-12 5.694n ± 0% 4.086n ± 0% -28.24% (n=125) YearDay-12 5.693n ± 0% 4.828n ± 0% -15.19% (n=125) Month-12 8.206n ± 0% 4.231n ± 0% -48.44% (n=125) Day-12 8.199n ± 0% 4.551n ± 0% -44.49% (n=125) ISOWeek-12 9.032n ± 0% 7.298n ± 0% -19.20% (n=125) GoString-12 62.78n ± 0% 60.61n ± 0% -3.46% (n=125) DateFunc-12 7.318n ± 0% 6.431n ± 0% -12.12% (n=125) UnmarshalText-12 99.66n ± 0% 95.64n ± 0% -4.03% (n=125) Change-Id: I089a072a731914702f8087018d00960e129f86b0 Reviewed-on: https://go-review.googlesource.com/c/go/+/586257 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/time/abs_test.go | 183 ++++++++++ src/time/format.go | 34 +- src/time/format_rfc3339.go | 4 +- src/time/linkname_test.go | 41 +++ src/time/time.go | 671 ++++++++++++++++++++++++------------- src/time/time_test.go | 48 ++- src/time/zoneinfo.go | 21 +- 7 files changed, 724 insertions(+), 278 deletions(-) create mode 100644 src/time/abs_test.go create mode 100644 src/time/linkname_test.go diff --git a/src/time/abs_test.go b/src/time/abs_test.go new file mode 100644 index 00000000000000..61d093a30e76a2 --- /dev/null +++ b/src/time/abs_test.go @@ -0,0 +1,183 @@ +// Copyright 2024 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 time + +type testingT interface { + Error(args ...any) + Errorf(format string, args ...any) + Fail() + FailNow() + Failed() bool + Fatal(args ...any) + Fatalf(format string, args ...any) + Helper() + Log(args ...any) + Logf(format string, args ...any) + Skip(args ...any) + SkipNow() + Skipf(format string, args ...any) +} + +var InternalTests = []struct { + Name string + Test func(testingT) +}{ + {"AbsDaysSplit", testAbsDaysSplit}, + {"AbsYdaySplit", testAbsYdaySplit}, + {"AbsDate", testAbsDate}, + {"DateToAbsDays", testDateToAbsDays}, + {"DaysIn", testDaysIn}, + {"DaysBefore", testDaysBefore}, +} + +func testAbsDaysSplit(t testingT) { + isLeap := func(year uint64) bool { + return year%4 == 0 && (year%100 != 0 || year%400 == 0) + } + bad := 0 + wantYear := uint64(0) + wantYday := absYday(0) + for days := range absDays(1e6) { + century, cyear, yday := days.split() + if century != absCentury(wantYear/100) || cyear != absCyear(wantYear%100) || yday != wantYday { + t.Errorf("absDays(%d).split() = %d, %d, %d, want %d, %d, %d", + days, century, cyear, yday, + wantYear/100, wantYear%100, wantYday) + if bad++; bad >= 20 { + t.Fatalf("too many errors") + } + } + end := absYday(365) + if isLeap(wantYear + 1) { + end = 366 + } + if wantYday++; wantYday == end { + wantYear++ + wantYday = 0 + } + } +} + +func testAbsYdaySplit(t testingT) { + ends := []int{31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 29} + bad := 0 + wantMonth := absMonth(3) + wantDay := 1 + for yday := range absYday(366) { + month, day := yday.split() + if month != wantMonth || day != wantDay { + t.Errorf("absYday(%d).split() = %d, %d, want %d, %d", yday, month, day, wantMonth, wantDay) + if bad++; bad >= 20 { + t.Fatalf("too many errors") + } + } + if wantDay++; wantDay > ends[wantMonth-3] { + wantMonth++ + wantDay = 1 + } + } +} + +func testAbsDate(t testingT) { + ends := []int{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} + isLeap := func(year int) bool { + y := uint64(year) + absoluteYears + return y%4 == 0 && (y%100 != 0 || y%400 == 0) + } + wantYear := 0 + wantMonth := March + wantMday := 1 + wantYday := 31 + 29 + 1 + bad := 0 + absoluteYears := int64(absoluteYears) + for days := range absDays(1e6) { + year, month, mday := days.date() + year += int(absoluteYears) + if year != wantYear || month != wantMonth || mday != wantMday { + t.Errorf("days(%d).date() = %v, %v, %v, want %v, %v, %v", days, + year, month, mday, + wantYear, wantMonth, wantMday) + if bad++; bad >= 20 { + t.Fatalf("too many errors") + } + } + + year, yday := days.yearYday() + year += int(absoluteYears) + if year != wantYear || yday != wantYday { + t.Errorf("days(%d).yearYday() = %v, %v, want %v, %v, ", days, + year, yday, + wantYear, wantYday) + if bad++; bad >= 20 { + t.Fatalf("too many errors") + } + } + + if wantMday++; wantMday == ends[wantMonth-1]+1 || wantMonth == February && wantMday == 29 && !isLeap(year) { + wantMonth++ + wantMday = 1 + } + wantYday++ + if wantMonth == December+1 { + wantYear++ + wantMonth = January + wantMday = 1 + wantYday = 1 + } + } +} + +func testDateToAbsDays(t testingT) { + isLeap := func(year int64) bool { + return year%4 == 0 && (year%100 != 0 || year%400 == 0) + } + wantDays := absDays(marchThruDecember) + bad := 0 + for year := int64(1); year < 10000; year++ { + days := dateToAbsDays(year-absoluteYears, January, 1) + if days != wantDays { + t.Errorf("dateToAbsDays(abs %d, Jan, 1) = %d, want %d", year, days, wantDays) + if bad++; bad >= 20 { + t.Fatalf("too many errors") + } + } + wantDays += 365 + if isLeap(year) { + wantDays++ + } + } +} + +func testDaysIn(t testingT) { + isLeap := func(year int) bool { + return year%4 == 0 && (year%100 != 0 || year%400 == 0) + } + want := []int{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} + bad := 0 + for year := 0; year <= 1600; year++ { + for m := January; m <= December; m++ { + w := want[m] + if m == February && isLeap(year) { + w++ + } + d := daysIn(m, year-800) + if d != w { + t.Errorf("daysIn(%v, %d) = %d, want %d", m, year-800, d, w) + if bad++; bad >= 20 { + t.Fatalf("too many errors") + } + } + } + } +} + +func testDaysBefore(t testingT) { + for m, want := range []int{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365} { + d := daysBefore(Month(m + 1)) + if d != want { + t.Errorf("daysBefore(%d) = %d, want %d", m, d, want) + } + } +} diff --git a/src/time/format.go b/src/time/format.go index c9e68b3eb25417..c8cb9c65bc6716 100644 --- a/src/time/format.go +++ b/src/time/format.go @@ -140,7 +140,7 @@ const ( stdDay // "2" stdUnderDay // "_2" stdZeroDay // "02" - stdUnderYearDay // "__2" + stdUnderYearDay = iota + stdNeedYday // "__2" stdZeroYearDay // "002" stdHour = iota + stdNeedClock // "15" stdHour12 // "3" @@ -168,7 +168,8 @@ const ( stdFracSecond9 // ".9", ".99", ..., trailing zeros omitted stdNeedDate = 1 << 8 // need month, day, year - stdNeedClock = 2 << 8 // need hour, minute, second + stdNeedYday = 1 << 9 // need yday + stdNeedClock = 1 << 10 // need hour, minute, second stdArgShift = 16 // extra argument in high bits, above low stdArgShift stdSeparatorShift = 28 // extra argument in high 4 bits for fractional second separators stdMask = 1< 0, +// which they call a Euclidean affine function or EAF, then: +// +// f(n) = (c n + c - b - 1) / a +// f°(n) = (c n + c - b - 1) % a / c +// +// This gives a fairly direct calculation for any calendrical division for which +// we can write the calendrical multiplication in EAF form. +// Because the epoch has been shifted to March 1, all the calendrical +// multiplications turn out to be possible to write in EAF form. +// When a date is broken into [century, cyear, amonth, mday], +// with century, cyear, and mday 0-based, +// and amonth 3-based (March = 3, ..., January = 13, February = 14), +// the calendrical multiplications written in EAF form are: +// +// yday = (153 (amonth-3) + 2) / 5 = (153 amonth - 457) / 5 +// cday = 365 cyear + cyear/4 = 1461 cyear / 4 +// centurydays = 36524 century + century/4 = 146097 century / 4 +// days = centurydays + cday + yday + mday. +// +// We can only handle one periodic cycle per equation, so the year +// calculation must be split into [century, cyear], handling both the +// 100-year cycle and the 400-year cycle. +// +// The yday calculation is not obvious but derives from the fact +// that the March through January calendar repeats the 5-month +// 153-day cycle 31, 30, 31, 30, 31 (we don't care about February +// because yday only ever count the days _before_ February 1, +// since February is the last month). +// +// Using the rule for deriving f and f° from f*, these multiplications +// convert to these divisions: +// +// century := (4 days + 3) / 146097 +// cdays := (4 days + 3) % 146097 / 4 +// cyear := (4 cdays + 3) / 1461 +// ayday := (4 cdays + 3) % 1461 / 4 +// amonth := (5 ayday + 461) / 153 +// mday := (5 ayday + 461) % 153 / 5 +// +// The a in ayday and amonth stands for absolute (March 1-based) +// to distinguish from the standard yday (January 1-based). +// +// After computing these, we can translate from the March 1 calendar +// to the standard January 1 calendar with branch-free math assuming a +// branch-free conversion from bool to int 0 or 1, denoted int(b) here: +// +// isJanFeb := int(yday >= marchThruDecember) +// month := amonth - isJanFeb*12 +// year := century*100 + cyear + isJanFeb +// isLeap := int(cyear%4 == 0) & (int(cyear != 0) | int(century%4 == 0)) +// day := 1 + mday +// yday := 1 + ayday + 31 + 28 + isLeap&^isJanFeb - 365*isJanFeb +// +// isLeap is the standard leap-year rule, but the split year form +// makes the divisions all reduce to binary masking. +// Note that day and yday are 1-based, in contrast to mday and ayday. +// To keep the various units separate, we define integer types +// for each. These are never stored in interfaces nor allocated, +// so their type information does not appear in Go binaries. const ( - // The unsigned zero year for internal calculations. - // Must be 1 mod 400, and times before it will not compute correctly, - // but otherwise can be changed at will. - absoluteZeroYear = -292277022399 + secondsPerMinute = 60 + secondsPerHour = 60 * secondsPerMinute + secondsPerDay = 24 * secondsPerHour + secondsPerWeek = 7 * secondsPerDay + daysPer400Years = 365*400 + 97 + + // Days from March 1 through end of year + marchThruDecember = 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + + // absoluteYears is the number of years we subtract from internal time to get absolute time. + // This value must be 0 mod 400, and it defines the “absolute zero instant” + // mentioned in the “Computations on Times” comment above: March 1, -absoluteYears. + // Dates before the absolute epoch will not compute correctly, + // but otherwise the value can be changed as needed. + absoluteYears = 292277022400 // The year of the zero Time. // Assumed by the unixToInternal computation below. internalYear = 1 // Offsets to convert between internal and absolute or Unix times. - absoluteToInternal int64 = (absoluteZeroYear - internalYear) * 365.2425 * secondsPerDay + absoluteToInternal int64 = -(absoluteYears*365.2425 + marchThruDecember) * secondsPerDay internalToAbsolute = -absoluteToInternal unixToInternal int64 = (1969*365 + 1969/4 - 1969/100 + 1969/400) * secondsPerDay internalToUnix int64 = -unixToInternal + absoluteToUnix = absoluteToInternal + internalToUnix + unixToAbsolute = unixToInternal + internalToAbsolute + wallToInternal int64 = (1884*365 + 1884/4 - 1884/100 + 1884/400) * secondsPerDay ) -// IsZero reports whether t represents the zero time instant, -// January 1, year 1, 00:00:00 UTC. -func (t Time) IsZero() bool { - return t.sec() == 0 && t.nsec() == 0 +// An absSeconds counts the number of seconds since the absolute zero instant. +type absSeconds uint64 + +// An absDays counts the number of days since the absolute zero instant. +type absDays uint64 + +// An absCentury counts the number of centuries since the absolute zero instant. +type absCentury uint64 + +// An absCyear counts the number of years since the start of a century. +type absCyear int + +// An absYday counts the number of days since the start of a year. +// Note that absolute years start on March 1. +type absYday int + +// An absMonth counts the number of months since the start of a year. +// absMonth=0 denotes March. +type absMonth int + +// An absLeap is a single bit (0 or 1) denoting whether a given year is a leap year. +type absLeap int + +// An absJanFeb is a single bit (0 or 1) denoting whether a given day falls in January or February. +// That is a special case because the absolute years start in March (unlike normal calendar years). +type absJanFeb int + +// dateToAbsDays takes a standard year/month/day and returns the +// number of days from the absolute epoch to that day. +func dateToAbsDays(year int64, month Month, day int) absDays { + // See “Computations on Times” comment above. + amonth := uint32(month) + janFeb := uint32(0) + if amonth < 3 { + janFeb = 1 + } + amonth += 12 * janFeb + y := uint64(year) - uint64(janFeb) + absoluteYears + + // For amonth is in the range [3,14], we want: + // + // ayday := (153*amonth - 457) / 5 + // + // (See the “Computations on Times” comment above + // as well as Neri and Schneider, section 7.) + // + // That is equivalent to: + // + // ayday := (979*amonth - 2919) >> 5 + // + // and the latter form uses a couple fewer instructions, + // so use it, saving a few cycles. + // See Neri and Schneider, section 8.3 + // for more about this optimization. + // + // (Note that there is no saved division, because the compiler + // implements / 5 without division in all cases.) + ayday := (979*amonth - 2919) >> 5 + + century := y / 100 + cyear := uint32(y % 100) + cday := 1461 * cyear / 4 + centurydays := 146097 * century / 4 + + return absDays(centurydays + uint64(cday+ayday+uint32(day)-1)) +} + +// days converts absolute seconds to absolute days. +func (abs absSeconds) days() absDays { + return absDays(abs / secondsPerDay) +} + +// split splits days into century, cyear, ayday. +func (days absDays) split() (century absCentury, cyear absCyear, ayday absYday) { + // See “Computations on Times” comment above. + d := 4*uint64(days) + 3 + century = absCentury(d / 146097) + + // This should be + // cday := uint32(d % 146097) / 4 + // cd := 4*cday + 3 + // which is to say + // cday := uint32(d % 146097) >> 2 + // cd := cday<<2 + 3 + // but of course (x>>2<<2)+3 == x|3, + // so do that instead. + cd := uint32(d%146097) | 3 + + // For cdays in the range [0,146097] (100 years), we want: + // + // cyear := (4 cdays + 3) / 1461 + // yday := (4 cdays + 3) % 1461 / 4 + // + // (See the “Computations on Times” comment above + // as well as Neri and Schneider, section 7.) + // + // That is equivalent to: + // + // cyear := (2939745 cdays) >> 32 + // yday := (2939745 cdays) & 0xFFFFFFFF / 2939745 / 4 + // + // so do that instead, saving a few cycles. + // See Neri and Schneider, section 8.3 + // for more about this optimization. + hi, lo := bits.Mul32(2939745, uint32(cd)) + cyear = absCyear(hi) + ayday = absYday(lo / 2939745 / 4) + return +} + +// split splits ayday into absolute month and standard (1-based) day-in-month. +func (ayday absYday) split() (m absMonth, mday int) { + // See “Computations on Times” comment above. + // + // For yday in the range [0,366], + // + // amonth := (5 yday + 461) / 153 + // mday := (5 yday + 461) % 153 / 5 + // + // is equivalent to: + // + // amonth = (2141 yday + 197913) >> 16 + // mday = (2141 yday + 197913) & 0xFFFF / 2141 + // + // so do that instead, saving a few cycles. + // See Neri and Schneider, section 8.3. + d := 2141*uint32(ayday) + 197913 + return absMonth(d >> 16), 1 + int((d&0xFFFF)/2141) +} + +// janFeb returns 1 if the March 1-based ayday is in January or February, 0 otherwise. +func (ayday absYday) janFeb() absJanFeb { + // See “Computations on Times” comment above. + jf := absJanFeb(0) + if ayday >= marchThruDecember { + jf = 1 + } + return jf +} + +// month returns the standard Month for (m, janFeb) +func (m absMonth) month(janFeb absJanFeb) Month { + // See “Computations on Times” comment above. + return Month(m) - Month(janFeb)*12 } -// abs returns the time t as an absolute time, adjusted by the zone offset. +// leap returns 1 if (century, cyear) is a leap year, 0 otherwise. +func (century absCentury) leap(cyear absCyear) absLeap { + // See “Computations on Times” comment above. + y4ok := 0 + if cyear%4 == 0 { + y4ok = 1 + } + y100ok := 0 + if cyear != 0 { + y100ok = 1 + } + y400ok := 0 + if century%4 == 0 { + y400ok = 1 + } + return absLeap(y4ok & (y100ok | y400ok)) +} + +// year returns the standard year for (century, cyear, janFeb). +func (century absCentury) year(cyear absCyear, janFeb absJanFeb) int { + // See “Computations on Times” comment above. + return int(uint64(century)*100-absoluteYears) + int(cyear) + int(janFeb) +} + +// yday returns the standard 1-based yday for (ayday, janFeb, leap). +func (ayday absYday) yday(janFeb absJanFeb, leap absLeap) int { + // See “Computations on Times” comment above. + return int(ayday) + (1 + 31 + 28) + int(leap)&^int(janFeb) - 365*int(janFeb) +} + +// date converts days into standard year, month, day. +func (days absDays) date() (year int, month Month, day int) { + century, cyear, ayday := days.split() + amonth, day := ayday.split() + janFeb := ayday.janFeb() + year = century.year(cyear, janFeb) + month = amonth.month(janFeb) + return +} + +// yearYday converts days into the standard year and 1-based yday. +func (days absDays) yearYday() (year, yday int) { + century, cyear, ayday := days.split() + janFeb := ayday.janFeb() + year = century.year(cyear, janFeb) + yday = ayday.yday(janFeb, century.leap(cyear)) + return +} + +// absSec returns the time t as an absolute seconds, adjusted by the zone offset. // It is called when computing a presentation property like Month or Hour. -func (t Time) abs() uint64 { +// We'd rather call it abs, but there are linknames to abs that make that problematic. +// See timeAbs below. +func (t Time) absSec() absSeconds { l := t.loc // Avoid function calls when possible. if l == nil || l == &localLoc { @@ -483,12 +776,12 @@ func (t Time) abs() uint64 { sec += int64(offset) } } - return uint64(sec + (unixToInternal + internalToAbsolute)) + return absSeconds(sec + (unixToInternal + internalToAbsolute)) } // locabs is a combination of the Zone and abs methods, // extracting both return values from a single zone lookup. -func (t Time) locabs() (name string, offset int, abs uint64) { +func (t Time) locabs() (name string, offset int, abs absSeconds) { l := t.loc if l == nil || l == &localLoc { l = l.get() @@ -506,44 +799,45 @@ func (t Time) locabs() (name string, offset int, abs uint64) { } else { name = "UTC" } - abs = uint64(sec + (unixToInternal + internalToAbsolute)) + abs = absSeconds(sec + (unixToInternal + internalToAbsolute)) return } // Date returns the year, month, and day in which t occurs. func (t Time) Date() (year int, month Month, day int) { - year, month, day, _ = t.date(true) - return + return t.absSec().days().date() } // Year returns the year in which t occurs. func (t Time) Year() int { - year, _, _, _ := t.date(false) - return year + century, cyear, ayday := t.absSec().days().split() + janFeb := ayday.janFeb() + return century.year(cyear, janFeb) } // Month returns the month of the year specified by t. func (t Time) Month() Month { - _, month, _, _ := t.date(true) - return month + _, _, ayday := t.absSec().days().split() + amonth, _ := ayday.split() + return amonth.month(ayday.janFeb()) } // Day returns the day of the month specified by t. func (t Time) Day() int { - _, _, day, _ := t.date(true) + _, _, ayday := t.absSec().days().split() + _, day := ayday.split() return day } // Weekday returns the day of the week specified by t. func (t Time) Weekday() Weekday { - return absWeekday(t.abs()) + return t.absSec().days().weekday() } -// absWeekday is like Weekday but operates on an absolute time. -func absWeekday(abs uint64) Weekday { - // January 1 of the absolute year, like January 1 of 2001, was a Monday. - sec := (abs + uint64(Monday)*secondsPerDay) % secondsPerWeek - return Weekday(int(sec) / secondsPerDay) +// weekday returns the day of the week specified by days. +func (days absDays) weekday() Weekday { + // March 1 of the absolute year, like March 1 of 2000, was a Wednesday. + return Weekday((uint64(days) + uint64(Wednesday)) % 7) } // ISOWeek returns the ISO 8601 year and week number in which t occurs. @@ -561,35 +855,19 @@ func (t Time) ISOWeek() (year, week int) { // 1 2 3 4 5 6 7 // +3 +2 +1 0 -1 -2 -3 // the offset to Thursday - abs := t.abs() - d := Thursday - absWeekday(abs) - // handle Sunday - if d == 4 { - d = -3 - } - // find the Thursday of the calendar week - abs += uint64(d) * secondsPerDay - year, _, _, yday := absDate(abs, false) - return year, yday/7 + 1 + days := t.absSec().days() + thu := days + absDays(Thursday-((days-1).weekday()+1)) + year, yday := thu.yearYday() + return year, (yday-1)/7 + 1 } // Clock returns the hour, minute, and second within the day specified by t. func (t Time) Clock() (hour, min, sec int) { - return absClock(t.abs()) + return t.absSec().clock() } -// absClock is like clock but operates on an absolute time. -// -// absClock should be an internal detail, -// but widely used packages access it using linkname. -// Notable members of the hall of shame include: -// - github.com/phuslu/log -// -// Do not remove or change the type signature. -// See go.dev/issue/67401. -// -//go:linkname absClock -func absClock(abs uint64) (hour, min, sec int) { +// clock returns the hour, minute, and second within the day specified by abs. +func (abs absSeconds) clock() (hour, min, sec int) { sec = int(abs % secondsPerDay) hour = sec / secondsPerHour sec -= hour * secondsPerHour @@ -600,17 +878,17 @@ func absClock(abs uint64) (hour, min, sec int) { // Hour returns the hour within the day specified by t, in the range [0, 23]. func (t Time) Hour() int { - return int(t.abs()%secondsPerDay) / secondsPerHour + return int(t.absSec()%secondsPerDay) / secondsPerHour } // Minute returns the minute offset within the hour specified by t, in the range [0, 59]. func (t Time) Minute() int { - return int(t.abs()%secondsPerHour) / secondsPerMinute + return int(t.absSec()%secondsPerHour) / secondsPerMinute } // Second returns the second offset within the minute specified by t, in the range [0, 59]. func (t Time) Second() int { - return int(t.abs() % secondsPerMinute) + return int(t.absSec() % secondsPerMinute) } // Nanosecond returns the nanosecond offset within the second specified by t, @@ -622,8 +900,8 @@ func (t Time) Nanosecond() int { // YearDay returns the day of the year specified by t, in the range [1,365] for non-leap years, // and [1,366] in leap years. func (t Time) YearDay() int { - _, _, _, yday := t.date(false) - return yday + 1 + _, yday := t.absSec().days().yearYday() + return yday } // A Duration represents the elapsed time between two instants @@ -870,7 +1148,8 @@ func (d Duration) Round(m Duration) Duration { } // Abs returns the absolute value of d. -// As a special case, [math.MinInt64] is converted to [math.MaxInt64]. +// As a special case, Duration([math.MinInt64]) is converted to Duration([math.MaxInt64]), +// reducing its magnitude by 1 nanosecond. func (d Duration) Abs() Duration { switch { case d >= 0: @@ -981,159 +1260,39 @@ func (t Time) AddDate(years int, months int, days int) Time { return Date(year+years, month+Month(months), day+days, hour, min, sec, int(t.nsec()), t.Location()) } -const ( - secondsPerMinute = 60 - secondsPerHour = 60 * secondsPerMinute - secondsPerDay = 24 * secondsPerHour - secondsPerWeek = 7 * secondsPerDay - daysPer400Years = 365*400 + 97 - daysPer100Years = 365*100 + 24 - daysPer4Years = 365*4 + 1 -) - -// date computes the year, day of year, and when full=true, -// the month and day in which t occurs. -func (t Time) date(full bool) (year int, month Month, day int, yday int) { - return absDate(t.abs(), full) -} - -// absDate is like date but operates on an absolute time. -// -// absDate should be an internal detail, -// but widely used packages access it using linkname. -// Notable members of the hall of shame include: -// - github.com/phuslu/log -// - gitee.com/quant1x/gox -// -// Do not remove or change the type signature. -// See go.dev/issue/67401. -// -//go:linkname absDate -func absDate(abs uint64, full bool) (year int, month Month, day int, yday int) { - // Split into time and day. - d := abs / secondsPerDay - - // Account for 400 year cycles. - n := d / daysPer400Years - y := 400 * n - d -= daysPer400Years * n - - // Cut off 100-year cycles. - // The last cycle has one extra leap year, so on the last day - // of that year, day / daysPer100Years will be 4 instead of 3. - // Cut it back down to 3 by subtracting n>>2. - n = d / daysPer100Years - n -= n >> 2 - y += 100 * n - d -= daysPer100Years * n - - // Cut off 4-year cycles. - // The last cycle has a missing leap year, which does not - // affect the computation. - n = d / daysPer4Years - y += 4 * n - d -= daysPer4Years * n - - // Cut off years within a 4-year cycle. - // The last year is a leap year, so on the last day of that year, - // day / 365 will be 4 instead of 3. Cut it back down to 3 - // by subtracting n>>2. - n = d / 365 - n -= n >> 2 - y += n - d -= 365 * n - - year = int(int64(y) + absoluteZeroYear) - yday = int(d) - - if !full { - return - } - - day = yday - if isLeap(year) { - // Leap year - switch { - case day > 31+29-1: - // After leap day; pretend it wasn't there. - day-- - case day == 31+29-1: - // Leap day. - month = February - day = 29 - return - } +// daysBefore returns the number of days in a non-leap year before month m. +// daysBefore(December+1) returns 365. +func daysBefore(m Month) int { + adj := 0 + if m >= March { + adj = -2 } - // Estimate month on assumption that every month has 31 days. - // The estimate may be too low by at most one month, so adjust. - month = Month(day / 31) - end := int(daysBefore[month+1]) - var begin int - if day >= end { - month++ - begin = end - } else { - begin = int(daysBefore[month]) - } - - month++ // because January is 1 - day = day - begin + 1 - return -} - -// daysBefore[m] counts the number of days in a non-leap year -// before month m begins. There is an entry for m=12, counting -// the number of days before January of next year (365). -var daysBefore = [...]int32{ - 0, - 31, - 31 + 28, - 31 + 28 + 31, - 31 + 28 + 31 + 30, - 31 + 28 + 31 + 30 + 31, - 31 + 28 + 31 + 30 + 31 + 30, - 31 + 28 + 31 + 30 + 31 + 30 + 31, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, - 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31, + // With the -2 adjustment after February, + // we need to compute the running sum of: + // 0 31 30 31 30 31 30 31 31 30 31 30 31 + // which is: + // 0 31 61 92 122 153 183 214 245 275 306 336 367 + // This is almost exactly 367/12×(m-1) except for the + // occasonal off-by-one suggesting there may be an + // integer approximation of the form (a×m + b)/c. + // A brute force search over small a, b, c finds that + // (214×m - 211) / 7 computes the function perfectly. + return (214*int(m)-211)/7 + adj } func daysIn(m Month, year int) int { - if m == February && isLeap(year) { - return 29 + if m == February { + if isLeap(year) { + return 29 + } + return 28 } - return int(daysBefore[m] - daysBefore[m-1]) -} - -// daysSinceEpoch takes a year and returns the number of days from -// the absolute epoch to the start of that year. -// This is basically (year - zeroYear) * 365, but accounting for leap days. -func daysSinceEpoch(year int) uint64 { - y := uint64(int64(year) - absoluteZeroYear) - - // Add in days from 400-year cycles. - n := y / 400 - y -= 400 * n - d := daysPer400Years * n - - // Add in 100-year cycles. - n = y / 100 - y -= 100 * n - d += daysPer100Years * n - - // Add in 4-year cycles. - n = y / 4 - y -= 4 * n - d += daysPer4Years * n - - // Add in non-leap years. - n = y - d += 365 * n - - return d + // With the special case of February eliminated, the pattern is + // 31 30 31 30 31 30 31 31 30 31 30 31 + // Adding m&1 produces the basic alternation; + // adding (m>>3)&1 inverts the alternation starting in August. + return 30 + int((m+m>>3)&1) } // Provided by package runtime. @@ -1385,7 +1544,7 @@ func (t *Time) GobDecode(data []byte) error { return t.UnmarshalBinary(data) } -// MarshalJSON implements the [json.Marshaler] interface. +// MarshalJSON implements the [encoding/json.Marshaler] interface. // The time is a quoted string in the RFC 3339 format with sub-second precision. // If the timestamp cannot be represented as valid RFC 3339 // (e.g., the year is out of range), then an error is reported. @@ -1400,7 +1559,7 @@ func (t Time) MarshalJSON() ([]byte, error) { return b, nil } -// UnmarshalJSON implements the [json.Unmarshaler] interface. +// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface. // The time must be a quoted string in the RFC 3339 format. func (t *Time) UnmarshalJSON(data []byte) error { if string(data) == "null" { @@ -1474,7 +1633,15 @@ func (t Time) IsDST() bool { } func isLeap(year int) bool { - return year%4 == 0 && (year%100 != 0 || year%400 == 0) + // year%4 == 0 && (year%100 != 0 || year%400 == 0) + // Bottom 2 bits must be clear. + // For multiples of 25, bottom 4 bits must be clear. + // Thanks to Cassio Neri for this trick. + mask := 0xf + if year%25 != 0 { + mask = 3 + } + return year&mask == 0 } // norm returns nhi, nlo such that @@ -1529,23 +1696,10 @@ func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) T hour, min = norm(hour, min, 60) day, hour = norm(day, hour, 24) - // Compute days since the absolute epoch. - d := daysSinceEpoch(year) - - // Add in days before this month. - d += uint64(daysBefore[month-1]) - if isLeap(year) && month >= March { - d++ // February 29 - } - - // Add in days before today. - d += uint64(day - 1) - - // Add in time elapsed today. - abs := d * secondsPerDay - abs += uint64(hour*secondsPerHour + min*secondsPerMinute + sec) - - unix := int64(abs) + (absoluteToInternal + internalToUnix) + // Convert to absolute time and then Unix time. + unix := int64(dateToAbsDays(int64(year), month, day))*secondsPerDay + + int64(hour*secondsPerHour+min*secondsPerMinute+sec) + + absoluteToUnix // Look for zone offset for expected time, so we can adjust to UTC. // The lookup function expects UTC, so first we pass unix in the @@ -1693,3 +1847,50 @@ func div(t Time, d Duration) (qmod2 int, r Duration) { } return } + +// Regrettable Linkname Compatibility +// +// timeAbs, absDate, and absClock mimic old internal details, no longer used. +// Widely used packages linknamed these to get “faster” time routines. +// Notable members of the hall of shame include: +// - gitee.com/quant1x/gox +// - github.com/phuslu/log +// +// phuslu hard-coded 'Unix time + 9223372028715321600' [sic] +// as the input to absDate and absClock, using the old Jan 1-based +// absolute times. +// quant1x linknamed the time.Time.abs method and passed the +// result of that method to absDate and absClock. +// +// Keeping both of these working forces us to provide these three +// routines here, operating on the old Jan 1-based epoch instead +// of the new March 1-based epoch. And the fact that time.Time.abs +// was linknamed means that we have to call the current abs method +// something different (time.Time.absSec, defined above) to make it +// possible to provide this simulation of the old routines here. +// +// None of this code is linked into the binary if not referenced by +// these linkname-happy packages. In particular, despite its name, +// time.Time.abs does not appear in the time.Time method table. +// +// Do not remove these routines or their linknames, or change the +// type signature or meaning of arguments. + +//go:linkname legacyTimeTimeAbs time.Time.abs +func legacyTimeTimeAbs(t Time) uint64 { + return uint64(t.absSec() - marchThruDecember*secondsPerDay) +} + +//go:linkname legacyAbsClock time.absClock +func legacyAbsClock(abs uint64) (hour, min, sec int) { + return absSeconds(abs + marchThruDecember*secondsPerDay).clock() +} + +//go:linkname legacyAbsDate time.absDate +func legacyAbsDate(abs uint64, full bool) (year int, month Month, day int, yday int) { + d := absSeconds(abs + marchThruDecember*secondsPerDay).days() + year, month, day = d.date() + _, yday = d.yearYday() + yday-- // yearYday is 1-based, old API was 0-based + return +} diff --git a/src/time/time_test.go b/src/time/time_test.go index 70eb61478480e0..bd2c01649fb461 100644 --- a/src/time/time_test.go +++ b/src/time/time_test.go @@ -21,6 +21,26 @@ import ( . "time" ) +func TestInternal(t *testing.T) { + for _, tt := range InternalTests { + t.Run(tt.Name, func(t *testing.T) { tt.Test(t) }) + } +} + +func TestZeroTime(t *testing.T) { + var zero Time + year, month, day := zero.Date() + hour, min, sec := zero.Clock() + nsec := zero.Nanosecond() + yday := zero.YearDay() + wday := zero.Weekday() + if year != 1 || month != January || day != 1 || hour != 0 || min != 0 || sec != 0 || nsec != 0 || yday != 1 || wday != Monday { + t.Errorf("zero time = %v %v %v year %v %02d:%02d:%02d.%09d yday %d want Monday Jan 1 year 1 00:00:00.000000000 yday 1", + wday, month, day, year, hour, min, sec, nsec, yday) + } + +} + // We should be in PST/PDT, but if the time zone files are missing we // won't be. The purpose of this test is to at least explain why some of // the subsequent tests fail. @@ -102,75 +122,75 @@ func same(t Time, u *parsedTime) bool { t.Weekday() == u.Weekday } -func TestSecondsToUTC(t *testing.T) { +func TestUnixUTC(t *testing.T) { for _, test := range utctests { sec := test.seconds golden := &test.golden tm := Unix(sec, 0).UTC() newsec := tm.Unix() if newsec != sec { - t.Errorf("SecondsToUTC(%d).Seconds() = %d", sec, newsec) + t.Errorf("Unix(%d, 0).Unix() = %d", sec, newsec) } if !same(tm, golden) { - t.Errorf("SecondsToUTC(%d): // %#v", sec, tm) + t.Errorf("Unix(%d, 0): // %#v", sec, tm) t.Errorf(" want=%+v", *golden) t.Errorf(" have=%v", tm.Format(RFC3339+" MST")) } } } -func TestNanosecondsToUTC(t *testing.T) { +func TestUnixNanoUTC(t *testing.T) { for _, test := range nanoutctests { golden := &test.golden nsec := test.seconds*1e9 + int64(golden.Nanosecond) tm := Unix(0, nsec).UTC() newnsec := tm.Unix()*1e9 + int64(tm.Nanosecond()) if newnsec != nsec { - t.Errorf("NanosecondsToUTC(%d).Nanoseconds() = %d", nsec, newnsec) + t.Errorf("Unix(0, %d).Nanoseconds() = %d", nsec, newnsec) } if !same(tm, golden) { - t.Errorf("NanosecondsToUTC(%d):", nsec) + t.Errorf("Unix(0, %d):", nsec) t.Errorf(" want=%+v", *golden) t.Errorf(" have=%+v", tm.Format(RFC3339+" MST")) } } } -func TestSecondsToLocalTime(t *testing.T) { +func TestUnix(t *testing.T) { for _, test := range localtests { sec := test.seconds golden := &test.golden tm := Unix(sec, 0) newsec := tm.Unix() if newsec != sec { - t.Errorf("SecondsToLocalTime(%d).Seconds() = %d", sec, newsec) + t.Errorf("Unix(%d, 0).Seconds() = %d", sec, newsec) } if !same(tm, golden) { - t.Errorf("SecondsToLocalTime(%d):", sec) + t.Errorf("Unix(%d, 0):", sec) t.Errorf(" want=%+v", *golden) t.Errorf(" have=%+v", tm.Format(RFC3339+" MST")) } } } -func TestNanosecondsToLocalTime(t *testing.T) { +func TestUnixNano(t *testing.T) { for _, test := range nanolocaltests { golden := &test.golden nsec := test.seconds*1e9 + int64(golden.Nanosecond) tm := Unix(0, nsec) newnsec := tm.Unix()*1e9 + int64(tm.Nanosecond()) if newnsec != nsec { - t.Errorf("NanosecondsToLocalTime(%d).Seconds() = %d", nsec, newnsec) + t.Errorf("Unix(0, %d).Seconds() = %d", nsec, newnsec) } if !same(tm, golden) { - t.Errorf("NanosecondsToLocalTime(%d):", nsec) + t.Errorf("Unix(0, %d):", nsec) t.Errorf(" want=%+v", *golden) t.Errorf(" have=%+v", tm.Format(RFC3339+" MST")) } } } -func TestSecondsToUTCAndBack(t *testing.T) { +func TestUnixUTCAndBack(t *testing.T) { f := func(sec int64) bool { return Unix(sec, 0).UTC().Unix() == sec } f32 := func(sec int32) bool { return f(int64(sec)) } cfg := &quick.Config{MaxCount: 10000} @@ -184,7 +204,7 @@ func TestSecondsToUTCAndBack(t *testing.T) { } } -func TestNanosecondsToUTCAndBack(t *testing.T) { +func TestUnixNanoUTCAndBack(t *testing.T) { f := func(nsec int64) bool { t := Unix(0, nsec).UTC() ns := t.Unix()*1e9 + int64(t.Nanosecond()) diff --git a/src/time/zoneinfo.go b/src/time/zoneinfo.go index 0fe13630e9a20e..aee0e5408b81f2 100644 --- a/src/time/zoneinfo.go +++ b/src/time/zoneinfo.go @@ -331,14 +331,11 @@ func tzset(s string, lastTxSec, sec int64) (name string, offset int, start, end return "", 0, 0, 0, false, false } - year, _, _, yday := absDate(uint64(sec+unixToInternal+internalToAbsolute), false) - - ysec := int64(yday*secondsPerDay) + sec%secondsPerDay - - // Compute start of year in seconds since Unix epoch. - d := daysSinceEpoch(year) - abs := int64(d * secondsPerDay) - abs += absoluteToInternal + internalToUnix + // Compute start of year in seconds since Unix epoch, + // and seconds since then to get to sec. + year, yday := absSeconds(sec + unixToInternal + internalToAbsolute).days().yearYday() + ysec := int64((yday-1)*secondsPerDay) + sec%secondsPerDay + ystart := sec - ysec startSec := int64(tzruleTime(year, startRule, stdOffset)) endSec := int64(tzruleTime(year, endRule, dstOffset)) @@ -358,11 +355,11 @@ func tzset(s string, lastTxSec, sec int64) (name string, offset int, start, end // just the start and end of the year. That suffices for // the only caller that cares, which is Date. if ysec < startSec { - return stdName, stdOffset, abs, startSec + abs, stdIsDST, true + return stdName, stdOffset, ystart, startSec + ystart, stdIsDST, true } else if ysec >= endSec { - return stdName, stdOffset, endSec + abs, abs + 365*secondsPerDay, stdIsDST, true + return stdName, stdOffset, endSec + ystart, ystart + 365*secondsPerDay, stdIsDST, true } else { - return dstName, dstOffset, startSec + abs, endSec + abs, dstIsDST, true + return dstName, dstOffset, startSec + ystart, endSec + ystart, dstIsDST, true } } @@ -596,7 +593,7 @@ func tzruleTime(year int, r rule, off int) int { } d += 7 } - d += int(daysBefore[r.mon-1]) + d += int(daysBefore(Month(r.mon))) if isLeap(year) && r.mon > 2 { d++ } From 1b6bb779ef92de489a51b177035362795636624b Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 31 Jul 2024 09:59:28 -0700 Subject: [PATCH 138/866] go/types, types2: factor out typechecker-specific code from recording.go With this CL, the go/types and types2 recording.go files are mostly identical except for the use of different syntax trees. Preparation for generating go/types/recording.go from types2 sources. Change-Id: Iea85f8554ee04f1e1f7da63f8019725ac8f6caf5 Reviewed-on: https://go-review.googlesource.com/c/go/+/602117 Reviewed-by: Tim King Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/types2/check.go | 77 ++++++++++++++++++++ src/cmd/compile/internal/types2/recording.go | 67 +---------------- src/go/types/check.go | 35 +++++++++ src/go/types/recording.go | 30 +------- 4 files changed, 117 insertions(+), 92 deletions(-) diff --git a/src/cmd/compile/internal/types2/check.go b/src/cmd/compile/internal/types2/check.go index f344142011686f..cd1b2d513c106c 100644 --- a/src/cmd/compile/internal/types2/check.go +++ b/src/cmd/compile/internal/types2/check.go @@ -514,3 +514,80 @@ func (check *Checker) cleanup() { } check.cleaners = nil } + +// types2-specific support for recording type information in the syntax tree. +func (check *Checker) recordTypeAndValueInSyntax(x syntax.Expr, mode operandMode, typ Type, val constant.Value) { + if check.StoreTypesInSyntax { + tv := TypeAndValue{mode, typ, val} + stv := syntax.TypeAndValue{Type: typ, Value: val} + if tv.IsVoid() { + stv.SetIsVoid() + } + if tv.IsType() { + stv.SetIsType() + } + if tv.IsBuiltin() { + stv.SetIsBuiltin() + } + if tv.IsValue() { + stv.SetIsValue() + } + if tv.IsNil() { + stv.SetIsNil() + } + if tv.Addressable() { + stv.SetAddressable() + } + if tv.Assignable() { + stv.SetAssignable() + } + if tv.HasOk() { + stv.SetHasOk() + } + x.SetTypeInfo(stv) + } +} + +// types2-specific support for recording type information in the syntax tree. +func (check *Checker) recordCommaOkTypesInSyntax(x syntax.Expr, t0, t1 Type) { + if check.StoreTypesInSyntax { + // Note: this loop is duplicated because the type of tv is different. + // Above it is types2.TypeAndValue, here it is syntax.TypeAndValue. + for { + tv := x.GetTypeInfo() + assert(tv.Type != nil) // should have been recorded already + pos := x.Pos() + tv.Type = NewTuple( + NewVar(pos, check.pkg, "", t0), + NewVar(pos, check.pkg, "", t1), + ) + x.SetTypeInfo(tv) + p, _ := x.(*syntax.ParenExpr) + if p == nil { + break + } + x = p.X + } + } +} + +// instantiatedIdent determines the identifier of the type instantiated in expr. +// Helper function for recordInstance in recording.go. +func instantiatedIdent(expr syntax.Expr) *syntax.Name { + var selOrIdent syntax.Expr + switch e := expr.(type) { + case *syntax.IndexExpr: + selOrIdent = e.X + case *syntax.SelectorExpr, *syntax.Name: + selOrIdent = e + } + switch x := selOrIdent.(type) { + case *syntax.Name: + return x + case *syntax.SelectorExpr: + return x.Sel + } + + // extra debugging of go.dev/issue/63933 + panic(sprintf(nil, true, "instantiated ident not found; please report: %s", expr)) +} diff --git a/src/cmd/compile/internal/types2/recording.go b/src/cmd/compile/internal/types2/recording.go index cdd38ddb115e58..7badd022b19b06 100644 --- a/src/cmd/compile/internal/types2/recording.go +++ b/src/cmd/compile/internal/types2/recording.go @@ -68,35 +68,7 @@ func (check *Checker) recordTypeAndValue(x syntax.Expr, mode operandMode, typ Ty if m := check.Types; m != nil { m[x] = TypeAndValue{mode, typ, val} } - if check.StoreTypesInSyntax { - tv := TypeAndValue{mode, typ, val} - stv := syntax.TypeAndValue{Type: typ, Value: val} - if tv.IsVoid() { - stv.SetIsVoid() - } - if tv.IsType() { - stv.SetIsType() - } - if tv.IsBuiltin() { - stv.SetIsBuiltin() - } - if tv.IsValue() { - stv.SetIsValue() - } - if tv.IsNil() { - stv.SetIsNil() - } - if tv.Addressable() { - stv.SetAddressable() - } - if tv.Assignable() { - stv.SetAssignable() - } - if tv.HasOk() { - stv.SetHasOk() - } - x.SetTypeInfo(stv) - } + check.recordTypeAndValueInSyntax(x, mode, typ, val) } func (check *Checker) recordBuiltinType(f syntax.Expr, sig *Signature) { @@ -145,25 +117,7 @@ func (check *Checker) recordCommaOkTypes(x syntax.Expr, a []*operand) { x = p.X } } - if check.StoreTypesInSyntax { - // Note: this loop is duplicated because the type of tv is different. - // Above it is types2.TypeAndValue, here it is syntax.TypeAndValue. - for { - tv := x.GetTypeInfo() - assert(tv.Type != nil) // should have been recorded already - pos := x.Pos() - tv.Type = NewTuple( - NewVar(pos, check.pkg, "", t0), - NewVar(pos, check.pkg, "", t1), - ) - x.SetTypeInfo(tv) - p, _ := x.(*syntax.ParenExpr) - if p == nil { - break - } - x = p.X - } - } + check.recordCommaOkTypesInSyntax(x, t0, t1) } // recordInstance records instantiation information into check.Info, if the @@ -181,23 +135,6 @@ func (check *Checker) recordInstance(expr syntax.Expr, targs []Type, typ Type) { } } -func instantiatedIdent(expr syntax.Expr) *syntax.Name { - var selOrIdent syntax.Expr - switch e := expr.(type) { - case *syntax.IndexExpr: - selOrIdent = e.X - case *syntax.SelectorExpr, *syntax.Name: - selOrIdent = e - } - switch x := selOrIdent.(type) { - case *syntax.Name: - return x - case *syntax.SelectorExpr: - return x.Sel - } - panic("instantiated ident not found") -} - func (check *Checker) recordDef(id *syntax.Name, obj Object) { assert(id != nil) if m := check.Defs; m != nil { diff --git a/src/go/types/check.go b/src/go/types/check.go index a31e049c716e47..2d56b0f75c5846 100644 --- a/src/go/types/check.go +++ b/src/go/types/check.go @@ -535,3 +535,38 @@ func (check *Checker) cleanup() { } check.cleaners = nil } + +// go/types doesn't support recording of types directly in the AST. +// dummy function to match types2 code. +func (check *Checker) recordTypeAndValueInSyntax(x ast.Expr, mode operandMode, typ Type, val constant.Value) { + // nothing to do +} + +// go/types doesn't support recording of types directly in the AST. +// dummy function to match types2 code. +func (check *Checker) recordCommaOkTypesInSyntax(x ast.Expr, t0, t1 Type) { + // nothing to do +} + +// instantiatedIdent determines the identifier of the type instantiated in expr. +// Helper function for recordInstance in recording.go. +func instantiatedIdent(expr ast.Expr) *ast.Ident { + var selOrIdent ast.Expr + switch e := expr.(type) { + case *ast.IndexExpr: + selOrIdent = e.X + case *ast.IndexListExpr: // only exists in go/ast, not syntax + selOrIdent = e.X + case *ast.SelectorExpr, *ast.Ident: + selOrIdent = e + } + switch x := selOrIdent.(type) { + case *ast.Ident: + return x + case *ast.SelectorExpr: + return x.Sel + } + + // extra debugging of go.dev/issue/63933 + panic(sprintf(nil, nil, true, "instantiated ident not found; please report: %s", expr)) +} diff --git a/src/go/types/recording.go b/src/go/types/recording.go index aae2b20d2711a4..fa7383598303d8 100644 --- a/src/go/types/recording.go +++ b/src/go/types/recording.go @@ -10,8 +10,6 @@ package types import ( "go/ast" "go/constant" - "go/token" - "strings" ) func (check *Checker) record(x *operand) { @@ -42,7 +40,7 @@ func (check *Checker) record(x *operand) { } func (check *Checker) recordUntyped() { - if !debug && check.Types == nil { + if !debug && !check.recordTypes() { return // nothing to do } @@ -70,6 +68,7 @@ func (check *Checker) recordTypeAndValue(x ast.Expr, mode operandMode, typ Type, if m := check.Types; m != nil { m[x] = TypeAndValue{mode, typ, val} } + check.recordTypeAndValueInSyntax(x, mode, typ, val) } func (check *Checker) recordBuiltinType(f ast.Expr, sig *Signature) { @@ -118,6 +117,7 @@ func (check *Checker) recordCommaOkTypes(x ast.Expr, a []*operand) { x = p.X } } + check.recordCommaOkTypesInSyntax(x, t0, t1) } // recordInstance records instantiation information into check.Info, if the @@ -135,30 +135,6 @@ func (check *Checker) recordInstance(expr ast.Expr, targs []Type, typ Type) { } } -func instantiatedIdent(expr ast.Expr) *ast.Ident { - var selOrIdent ast.Expr - switch e := expr.(type) { - case *ast.IndexExpr: - selOrIdent = e.X - case *ast.IndexListExpr: - selOrIdent = e.X - case *ast.SelectorExpr, *ast.Ident: - selOrIdent = e - } - switch x := selOrIdent.(type) { - case *ast.Ident: - return x - case *ast.SelectorExpr: - return x.Sel - } - - // extra debugging of #63933 - var buf strings.Builder - buf.WriteString("instantiated ident not found; please report: ") - ast.Fprint(&buf, token.NewFileSet(), expr, ast.NotNilFilter) - panic(buf.String()) -} - func (check *Checker) recordDef(id *ast.Ident, obj Object) { assert(id != nil) if m := check.Defs; m != nil { From 38c427c9dc729597df5e735a7db9549feea0ebc1 Mon Sep 17 00:00:00 2001 From: aimuz Date: Tue, 28 May 2024 13:53:53 +0000 Subject: [PATCH 139/866] net: replace sort with slices for address and DNS record sorting This change replaces the usage of the "sort" package with the "slices" package for sorting IP addresses and DNS records. The new approach simplifies the code and improves readability by leveraging the slices.SortFunc and slices.SortStableFunc functions. - Updated addrselect.go to use slices.SortStableFunc for sorting IP addresses based on RFC 6724. - Refactored dnsclient.go to use slices.SortFunc for sorting SRV and MX records by priority and weight. This change also reduces the dependency tree for the package by removing the dependency on "sort" and its transitive dependencies, resulting in a leaner build. Change-Id: I436dacc8dd1e8f2f7eeac44d6719ce248394d8a9 GitHub-Last-Rev: 3720a490815e2dc2fad06b107f21c67f5ad6c6c8 GitHub-Pull-Request: golang/go#67503 Reviewed-on: https://go-review.googlesource.com/c/go/+/586635 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Reviewed-by: Damien Neil Auto-Submit: Ian Lance Taylor --- src/net/addrselect.go | 78 +++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/src/net/addrselect.go b/src/net/addrselect.go index caff09b3772ff7..0ff8ec37c8de35 100644 --- a/src/net/addrselect.go +++ b/src/net/addrselect.go @@ -8,7 +8,7 @@ package net import ( "net/netip" - "sort" + "slices" ) func sortByRFC6724(addrs []IPAddr) { @@ -22,19 +22,20 @@ func sortByRFC6724withSrcs(addrs []IPAddr, srcs []netip.Addr) { if len(addrs) != len(srcs) { panic("internal error") } - addrAttr := make([]ipAttr, len(addrs)) - srcAttr := make([]ipAttr, len(srcs)) + addrInfos := make([]byRFC6724Info, len(addrs)) for i, v := range addrs { addrAttrIP, _ := netip.AddrFromSlice(v.IP) - addrAttr[i] = ipAttrOf(addrAttrIP) - srcAttr[i] = ipAttrOf(srcs[i]) + addrInfos[i] = byRFC6724Info{ + addr: addrs[i], + addrAttr: ipAttrOf(addrAttrIP), + src: srcs[i], + srcAttr: ipAttrOf(srcs[i]), + } + } + slices.SortStableFunc(addrInfos, compareByRFC6724) + for i := range addrInfos { + addrs[i] = addrInfos[i].addr } - sort.Stable(&byRFC6724{ - addrs: addrs, - addrAttr: addrAttr, - srcs: srcs, - srcAttr: srcAttr, - }) } // srcAddrs tries to UDP-connect to each address to see if it has a @@ -75,45 +76,36 @@ func ipAttrOf(ip netip.Addr) ipAttr { } } -type byRFC6724 struct { - addrs []IPAddr // addrs to sort - addrAttr []ipAttr - srcs []netip.Addr // or not valid addr if unreachable - srcAttr []ipAttr -} - -func (s *byRFC6724) Len() int { return len(s.addrs) } - -func (s *byRFC6724) Swap(i, j int) { - s.addrs[i], s.addrs[j] = s.addrs[j], s.addrs[i] - s.srcs[i], s.srcs[j] = s.srcs[j], s.srcs[i] - s.addrAttr[i], s.addrAttr[j] = s.addrAttr[j], s.addrAttr[i] - s.srcAttr[i], s.srcAttr[j] = s.srcAttr[j], s.srcAttr[i] +type byRFC6724Info struct { + addr IPAddr + addrAttr ipAttr + src netip.Addr + srcAttr ipAttr } -// Less reports whether i is a better destination address for this -// host than j. -// -// The algorithm and variable names comes from RFC 6724 section 6. -func (s *byRFC6724) Less(i, j int) bool { - DA := s.addrs[i].IP - DB := s.addrs[j].IP - SourceDA := s.srcs[i] - SourceDB := s.srcs[j] - attrDA := &s.addrAttr[i] - attrDB := &s.addrAttr[j] - attrSourceDA := &s.srcAttr[i] - attrSourceDB := &s.srcAttr[j] - - const preferDA = true - const preferDB = false +// compareByRFC6724 compares two byRFC6724Info records and returns an integer +// indicating the order. It follows the algorithm and variable names from +// RFC 6724 section 6. Returns -1 if a is preferred, 1 if b is preferred, +// and 0 if they are equal. +func compareByRFC6724(a, b byRFC6724Info) int { + DA := a.addr.IP + DB := b.addr.IP + SourceDA := a.src + SourceDB := b.src + attrDA := &a.addrAttr + attrDB := &b.addrAttr + attrSourceDA := &a.srcAttr + attrSourceDB := &b.srcAttr + + const preferDA = -1 + const preferDB = 1 // Rule 1: Avoid unusable destinations. // If DB is known to be unreachable or if Source(DB) is undefined, then // prefer DA. Similarly, if DA is known to be unreachable or if // Source(DA) is undefined, then prefer DB. if !SourceDA.IsValid() && !SourceDB.IsValid() { - return false // "equal" + return 0 // "equal" } if !SourceDB.IsValid() { return preferDA @@ -212,7 +204,7 @@ func (s *byRFC6724) Less(i, j int) bool { // Rule 10: Otherwise, leave the order unchanged. // If DA preceded DB in the original list, prefer DA. // Otherwise, prefer DB. - return false // "equal" + return 0 // "equal" } type policyTableEntry struct { From 0a4215c234fedb3c888dd184416fa1ef08dfe9ae Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Wed, 26 Jun 2024 14:58:12 -0400 Subject: [PATCH 140/866] cmd/compile: keep internal/runtime packages sorted This is a minor cleanup from CL 600436. For #65355. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-darwin-amd64-longtest Change-Id: I8e27f0c6ba6bd35f4aa2b9d53c394fb5f1eb433d Reviewed-on: https://go-review.googlesource.com/c/go/+/595116 Reviewed-by: Austin Clements Auto-Submit: Michael Pratt Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/test/inl_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/test/inl_test.go b/src/cmd/compile/internal/test/inl_test.go index 58f5df953b46d4..5a8a156f02a9e9 100644 --- a/src/cmd/compile/internal/test/inl_test.go +++ b/src/cmd/compile/internal/test/inl_test.go @@ -97,10 +97,6 @@ func TestIntendedInlining(t *testing.T) { "traceLocker.ok", "traceEnabled", }, - "internal/runtime/sys": {}, - "internal/runtime/math": { - "MulUintptr", - }, "bytes": { "(*Buffer).Bytes", "(*Buffer).Cap", @@ -117,6 +113,10 @@ func TestIntendedInlining(t *testing.T) { "internal/abi": { "UseInterfaceSwitchCache", }, + "internal/runtime/math": { + "MulUintptr", + }, + "internal/runtime/sys": {}, "compress/flate": { "byLiteral.Len", "byLiteral.Less", From 2c1bbe7e32e9e56905cc2c4b34530d69bb5cbc6e Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Sun, 31 Mar 2024 18:37:12 -0400 Subject: [PATCH 141/866] go/types: add go1.23 iterator methods for 10 exported types These methods will not be mirrored in types2 until the bootstrap compiler reaches go1.23; therefore range-over-func statements must not be used in code common to types + types2. Fixes #66626 Change-Id: I3c2c15e3652ee95d9aff208d8a188b912ed5bc9a Reviewed-on: https://go-review.googlesource.com/c/go/+/575455 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer --- api/next/66626.txt | 11 ++ doc/next/6-stdlib/99-minor/go/types/66626.md | 32 ++++ src/go/types/example_test.go | 5 +- src/go/types/iter.go | 159 +++++++++++++++++++ 4 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 api/next/66626.txt create mode 100644 doc/next/6-stdlib/99-minor/go/types/66626.md create mode 100644 src/go/types/iter.go diff --git a/api/next/66626.txt b/api/next/66626.txt new file mode 100644 index 00000000000000..7b9f8fabb59e37 --- /dev/null +++ b/api/next/66626.txt @@ -0,0 +1,11 @@ +pkg go/types, method (*Interface) EmbeddedTypes() iter.Seq[Type] #66626 +pkg go/types, method (*Interface) ExplicitMethods() iter.Seq[*Func] #66626 +pkg go/types, method (*Interface) Methods() iter.Seq[*Func] #66626 +pkg go/types, method (*MethodSet) Methods() iter.Seq[*Selection] #66626 +pkg go/types, method (*Named) Methods() iter.Seq[*Func] #66626 +pkg go/types, method (*Scope) Children() iter.Seq[*Scope] #66626 +pkg go/types, method (*Struct) Fields() iter.Seq[*Var] #66626 +pkg go/types, method (*Tuple) Variables() iter.Seq[*Var] #66626 +pkg go/types, method (*TypeList) Types() iter.Seq[Type] #66626 +pkg go/types, method (*TypeParamList) TypeParams() iter.Seq[*TypeParam] #66626 +pkg go/types, method (*Union) Terms() iter.Seq[*Term] #66626 diff --git a/doc/next/6-stdlib/99-minor/go/types/66626.md b/doc/next/6-stdlib/99-minor/go/types/66626.md new file mode 100644 index 00000000000000..62e8a488207f77 --- /dev/null +++ b/doc/next/6-stdlib/99-minor/go/types/66626.md @@ -0,0 +1,32 @@ + +All `go/types` data structures that expose sequences using a pair of +methods such as `Len() int` and `At(int) T` now also methods that +return iterators, allowing you to simplify code such as this: + +```go +params := fn.Type.(*types.Signature).Params() +for i := 0; i < params.Len(); i++ { + use(params.At(i)) +} +``` + +to this: + +```go +for param := range fn.Signature().Params().Variables() { + use(param) +} +``` + +The methods are: +[`Interface.EmbeddedTypes`](/pkg/go/types#Interface.EmbeddedTypes), +[`Interface.ExplicitMethods`](/pkg/go/types#Interface.ExplicitMethods), +[`Interface.Methods`](/pkg/go/types#Interface.Methods), +[`MethodSet.Methods`](/pkg/go/types#MethodSet.Methods), +[`Named.Methods`](/pkg/go/types#Named.Methods), +[`Scope.Children`](/pkg/go/types#Scope.Children), +[`Struct.Fields`](/pkg/go/types#Struct.Fields), +[`Tuple.Variables`](/pkg/go/types#Tuple.Variables), +[`TypeList.Types`](/pkg/go/types#TypeList.Types), +[`TypeParamList.TypeParams`](/pkg/go/types#TypeParamList.TypeParams), +[`Union.Terms`](/pkg/go/types#Union.Terms). \ No newline at end of file diff --git a/src/go/types/example_test.go b/src/go/types/example_test.go index 7dd1c75852704c..279771121aaaae 100644 --- a/src/go/types/example_test.go +++ b/src/go/types/example_test.go @@ -136,9 +136,8 @@ type I interface { m() byte } celsius := pkg.Scope().Lookup("Celsius").Type() for _, t := range []types.Type{celsius, types.NewPointer(celsius)} { fmt.Printf("Method set of %s:\n", t) - mset := types.NewMethodSet(t) - for i := 0; i < mset.Len(); i++ { - fmt.Println(mset.At(i)) + for m := range types.NewMethodSet(t).Methods() { + fmt.Println(m) } fmt.Println() } diff --git a/src/go/types/iter.go b/src/go/types/iter.go new file mode 100644 index 00000000000000..e6dee158fd6cb3 --- /dev/null +++ b/src/go/types/iter.go @@ -0,0 +1,159 @@ +// Copyright 2024 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 types + +import "iter" + +// This file defines go1.23 iterator methods for a variety of data +// types. They are not mirrored to cmd/compile/internal/types2, as +// there is no point doing so until the bootstrap compiler it at least +// go1.23; therefore go1.23-style range statements should not be used +// in code common to types and types2, though clients of go/types are +// free to use them. + +// Methods returns a go1.23 iterator over all the methods of an +// interface, ordered by Id. +// +// Example: for m := range t.Methods() { ... } +func (t *Interface) Methods() iter.Seq[*Func] { + return func(yield func(m *Func) bool) { + for i := range t.NumMethods() { + if !yield(t.Method(i)) { + break + } + } + } +} + +// ExplicitMethods returns a go1.23 iterator over the explicit methods of +// an interface, ordered by Id. +// +// Example: for m := range t.ExplicitMethods() { ... } +func (t *Interface) ExplicitMethods() iter.Seq[*Func] { + return func(yield func(m *Func) bool) { + for i := range t.NumExplicitMethods() { + if !yield(t.ExplicitMethod(i)) { + break + } + } + } +} + +// EmbeddedTypes returns a go1.23 iterator over the types embedded within an interface. +// +// Example: for e := range t.EmbeddedTypes() { ... } +func (t *Interface) EmbeddedTypes() iter.Seq[Type] { + return func(yield func(e Type) bool) { + for i := range t.NumEmbeddeds() { + if !yield(t.EmbeddedType(i)) { + break + } + } + } +} + +// Methods returns a go1.23 iterator over the declared methods of a named type. +// +// Example: for m := range t.Methods() { ... } +func (t *Named) Methods() iter.Seq[*Func] { + return func(yield func(m *Func) bool) { + for i := range t.NumMethods() { + if !yield(t.Method(i)) { + break + } + } + } +} + +// Children returns a go1.23 iterator over the child scopes nested within scope s. +// +// Example: for child := range scope.Children() { ... } +func (s *Scope) Children() iter.Seq[*Scope] { + return func(yield func(child *Scope) bool) { + for i := range s.NumChildren() { + if !yield(s.Child(i)) { + break + } + } + } +} + +// Fields returns a go1.23 iterator over the fields of a struct type. +// +// Example: for field := range s.Fields() { ... } +func (s *Struct) Fields() iter.Seq[*Var] { + return func(yield func(field *Var) bool) { + for i := range s.NumFields() { + if !yield(s.Field(i)) { + break + } + } + } +} + +// Variables returns a go1.23 iterator over the variables of a tuple type. +// +// Example: for v := range tuple.Variables() { ... } +func (t *Tuple) Variables() iter.Seq[*Var] { + return func(yield func(v *Var) bool) { + for i := range t.Len() { + if !yield(t.At(i)) { + break + } + } + } +} + +// MethodSet returns a go1.23 iterator over the methods of a method set. +// +// Example: for method := range s.Methods() { ... } +func (s *MethodSet) Methods() iter.Seq[*Selection] { + return func(yield func(method *Selection) bool) { + for i := range s.Len() { + if !yield(s.At(i)) { + break + } + } + } +} + +// Terms returns a go1.23 iterator over the terms of a union. +// +// Example: for term := range union.Terms() { ... } +func (u *Union) Terms() iter.Seq[*Term] { + return func(yield func(term *Term) bool) { + for i := range u.Len() { + if !yield(u.Term(i)) { + break + } + } + } +} + +// TypeParams returns a go1.23 iterator over a list of type parameters. +// +// Example: for tparam := range l.TypeParams() { ... } +func (l *TypeParamList) TypeParams() iter.Seq[*TypeParam] { + return func(yield func(tparam *TypeParam) bool) { + for i := range l.Len() { + if !yield(l.At(i)) { + break + } + } + } +} + +// Types returns a go1.23 iterator over the elements of a list of types. +// +// Example: for t := range l.Types() { ... } +func (l *TypeList) Types() iter.Seq[Type] { + return func(yield func(t Type) bool) { + for i := range l.Len() { + if !yield(l.At(i)) { + break + } + } + } +} From fa861f882205516624ad123346ff3e6f0c44ac9c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 31 Jul 2024 13:16:23 -0700 Subject: [PATCH 142/866] cmd/cgo: document workaround for C struct_stat function For #68682 Change-Id: I13b61f915925a9ee510e0a42e95da7a83678b3b5 Reviewed-on: https://go-review.googlesource.com/c/go/+/602215 Reviewed-by: Cherry Mui Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/cmd/cgo/doc.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go index 3d4789fafb77ec..8e11a127407244 100644 --- a/src/cmd/cgo/doc.go +++ b/src/cmd/cgo/doc.go @@ -163,10 +163,14 @@ type in Go are instead represented by a uintptr. See the Special cases section below. To access a struct, union, or enum type directly, prefix it with -struct_, union_, or enum_, as in C.struct_stat. - -The size of any C type T is available as C.sizeof_T, as in -C.sizeof_struct_stat. +struct_, union_, or enum_, as in C.struct_stat. The size of any C type +T is available as C.sizeof_T, as in C.sizeof_struct_stat. These +special prefixes means that there is no way to directly reference a C +identifier that starts with "struct_", "union_", "enum_", or +"sizeof_", such as a function named "struct_function". +A workaround is to use a "#define" in the preamble, as in +"#define c_struct_function struct_function" and then in the +Go code refer to "C.c_struct_function". A C function may be declared in the Go file with a parameter type of the special name _GoString_. This function may be called with an From 4b2716348cfcc336469d38ce9a8e23f0b909ab05 Mon Sep 17 00:00:00 2001 From: Manuel Sabin Date: Mon, 24 Jun 2024 13:58:35 -0400 Subject: [PATCH 143/866] crypto/internal/cryptotest: add tests for the cipher.BlockMode interface This CL creates tests for the cipher.BlockMode interface in the new cryptotest package. This set of tests is called from the tests of implementations of the BlockMode interface e.g. cbc_test.go Updates #25309 Change-Id: I3685bbee24d08d66f5bb4b7f001cbf520c844881 Reviewed-on: https://go-review.googlesource.com/c/go/+/595120 Reviewed-by: Filippo Valsorda Auto-Submit: Filippo Valsorda Reviewed-by: Russell Webb LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: Dmitri Shuralyov --- src/crypto/cipher/cbc_test.go | 57 +++++ src/crypto/internal/cryptotest/blockmode.go | 224 ++++++++++++++++++++ 2 files changed, 281 insertions(+) create mode 100644 src/crypto/cipher/cbc_test.go create mode 100644 src/crypto/internal/cryptotest/blockmode.go diff --git a/src/crypto/cipher/cbc_test.go b/src/crypto/cipher/cbc_test.go new file mode 100644 index 00000000000000..e6666d2cff9e8d --- /dev/null +++ b/src/crypto/cipher/cbc_test.go @@ -0,0 +1,57 @@ +// Copyright 2024 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 cipher_test + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/des" + "crypto/internal/cryptotest" + "fmt" + "io" + "math/rand" + "testing" + "time" +) + +// Test CBC Blockmode against the general cipher.BlockMode interface tester +func TestCBCBlockMode(t *testing.T) { + for _, keylen := range []int{128, 192, 256} { + + t.Run(fmt.Sprintf("AES-%d", keylen), func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, keylen/8) + rng.Read(key) + + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + cryptotest.TestBlockMode(t, block, cipher.NewCBCEncrypter, cipher.NewCBCDecrypter) + }) + } + + t.Run("DES", func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, 8) + rng.Read(key) + + block, err := des.NewCipher(key) + if err != nil { + panic(err) + } + + cryptotest.TestBlockMode(t, block, cipher.NewCBCEncrypter, cipher.NewCBCDecrypter) + }) +} + +func newRandReader(t *testing.T) io.Reader { + seed := time.Now().UnixNano() + t.Logf("Deterministic RNG seed: 0x%x", seed) + return rand.New(rand.NewSource(seed)) +} diff --git a/src/crypto/internal/cryptotest/blockmode.go b/src/crypto/internal/cryptotest/blockmode.go new file mode 100644 index 00000000000000..d3271e583f826d --- /dev/null +++ b/src/crypto/internal/cryptotest/blockmode.go @@ -0,0 +1,224 @@ +// Copyright 2024 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 cryptotest + +import ( + "bytes" + "crypto/cipher" + "testing" +) + +// MakeBlockMode returns a cipher.BlockMode instance. +// It expects len(iv) == b.BlockSize(). +type MakeBlockMode func(b cipher.Block, iv []byte) cipher.BlockMode + +// TestBlockMode performs a set of tests on cipher.BlockMode implementations, +// checking the documented requirements of CryptBlocks. +func TestBlockMode(t *testing.T, block cipher.Block, makeEncrypter, makeDecrypter MakeBlockMode) { + rng := newRandReader(t) + iv := make([]byte, block.BlockSize()) + rng.Read(iv) + + testBlockModePair(t, block, makeEncrypter, makeDecrypter, iv) +} + +func testBlockModePair(t *testing.T, b cipher.Block, enc, dec MakeBlockMode, iv []byte) { + t.Run("Encryption", func(t *testing.T) { + testBlockMode(t, enc, b, iv) + }) + + t.Run("Decryption", func(t *testing.T) { + testBlockMode(t, dec, b, iv) + }) + + t.Run("Roundtrip", func(t *testing.T) { + rng := newRandReader(t) + + blockSize := enc(b, iv).BlockSize() + if decBlockSize := dec(b, iv).BlockSize(); decBlockSize != blockSize { + t.Errorf("decryption blocksize different than encryption's; got %d, want %d", decBlockSize, blockSize) + } + + before, dst, after := make([]byte, blockSize*2), make([]byte, blockSize*2), make([]byte, blockSize*2) + rng.Read(before) + + enc(b, iv).CryptBlocks(dst, before) + dec(b, iv).CryptBlocks(after, dst) + if !bytes.Equal(after, before) { + t.Errorf("plaintext is different after an encrypt/decrypt cycle; got %x, want %x", after, before) + } + }) +} + +func testBlockMode(t *testing.T, bm MakeBlockMode, b cipher.Block, iv []byte) { + blockSize := bm(b, iv).BlockSize() + + t.Run("WrongIVLen", func(t *testing.T) { + iv := make([]byte, b.BlockSize()+1) + mustPanic(t, "IV length must equal block size", func() { bm(b, iv) }) + }) + + t.Run("AlterInput", func(t *testing.T) { + rng := newRandReader(t) + + src, dst, before := make([]byte, blockSize*2), make([]byte, blockSize*2), make([]byte, blockSize*2) + + for _, length := range []int{0, blockSize, blockSize * 2} { + rng.Read(src) + copy(before, src) + + bm(b, iv).CryptBlocks(dst[:length], src[:length]) + if !bytes.Equal(src, before) { + t.Errorf("CryptBlocks modified src; got %x, want %x", src, before) + } + } + }) + + t.Run("Aliasing", func(t *testing.T) { + rng := newRandReader(t) + + buff, expectedOutput := make([]byte, blockSize*2), make([]byte, blockSize*2) + + for _, length := range []int{0, blockSize, blockSize * 2} { + // Record what output is when src and dst are different + rng.Read(buff) + bm(b, iv).CryptBlocks(expectedOutput[:length], buff[:length]) + + // Check that the same output is generated when src=dst alias to the same + // memory + bm(b, iv).CryptBlocks(buff[:length], buff[:length]) + if !bytes.Equal(buff[:length], expectedOutput[:length]) { + t.Errorf("block cipher produced different output when dst = src; got %x, want %x", buff[:length], expectedOutput[:length]) + } + } + }) + + t.Run("OutOfBoundsWrite", func(t *testing.T) { // Issue 21104 + rng := newRandReader(t) + + src := make([]byte, blockSize) + rng.Read(src) + + // Make a buffer with dst in the middle and data on either end + buff := make([]byte, blockSize*3) + endOfPrefix, startOfSuffix := blockSize, blockSize*2 + rng.Read(buff[:endOfPrefix]) + rng.Read(buff[startOfSuffix:]) + dst := buff[endOfPrefix:startOfSuffix] + + // Record the prefix and suffix data to make sure they aren't written to + initPrefix, initSuffix := make([]byte, blockSize), make([]byte, blockSize) + copy(initPrefix, buff[:endOfPrefix]) + copy(initSuffix, buff[startOfSuffix:]) + + // Write to dst (the middle of the buffer) and make sure it doesn't write + // beyond the dst slice on a valid CryptBlocks call + bm(b, iv).CryptBlocks(dst, src) + if !bytes.Equal(buff[startOfSuffix:], initSuffix) { + t.Errorf("block cipher did out of bounds write after end of dst slice; got %x, want %x", buff[startOfSuffix:], initSuffix) + } + if !bytes.Equal(buff[:endOfPrefix], initPrefix) { + t.Errorf("block cipher did out of bounds write before beginning of dst slice; got %x, want %x", buff[:endOfPrefix], initPrefix) + } + + // Check that dst isn't written to beyond len(src) even if there is room in + // the slice + dst = buff[endOfPrefix:] // Extend dst to include suffix + bm(b, iv).CryptBlocks(dst, src) + if !bytes.Equal(buff[startOfSuffix:], initSuffix) { + t.Errorf("CryptBlocks modified dst past len(src); got %x, want %x", buff[startOfSuffix:], initSuffix) + } + + // Issue 21104: Shouldn't write to anything outside of dst even if src is bigger + src = make([]byte, blockSize*3) + rng.Read(src) + + mustPanic(t, "output smaller than input", func() { + bm(b, iv).CryptBlocks(dst, src) + }) + + if !bytes.Equal(buff[startOfSuffix:], initSuffix) { + t.Errorf("block cipher did out of bounds write after end of dst slice; got %x, want %x", buff[startOfSuffix:], initSuffix) + } + if !bytes.Equal(buff[:endOfPrefix], initPrefix) { + t.Errorf("block cipher did out of bounds write before beginning of dst slice; got %x, want %x", buff[:endOfPrefix], initPrefix) + } + }) + + // Check that output of cipher isn't affected by adjacent data beyond input + // slice scope + t.Run("OutOfBoundsRead", func(t *testing.T) { + rng := newRandReader(t) + + src := make([]byte, blockSize) + rng.Read(src) + expectedDst := make([]byte, blockSize) + bm(b, iv).CryptBlocks(expectedDst, src) + + // Make a buffer with src in the middle and data on either end + buff := make([]byte, blockSize*3) + endOfPrefix, startOfSuffix := blockSize, blockSize*2 + + copy(buff[endOfPrefix:startOfSuffix], src) + rng.Read(buff[:endOfPrefix]) + rng.Read(buff[startOfSuffix:]) + + testDst := make([]byte, blockSize) + bm(b, iv).CryptBlocks(testDst, buff[endOfPrefix:startOfSuffix]) + + if !bytes.Equal(testDst, expectedDst) { + t.Errorf("CryptBlocks affected by data outside of src slice bounds; got %x, want %x", testDst, expectedDst) + } + }) + + t.Run("BufferOverlap", func(t *testing.T) { + rng := newRandReader(t) + + buff := make([]byte, blockSize*2) + rng.Read(buff) + + // Make src and dst slices point to same array with inexact overlap + src := buff[:blockSize] + dst := buff[1 : blockSize+1] + mustPanic(t, "invalid buffer overlap", func() { bm(b, iv).CryptBlocks(dst, src) }) + + // Only overlap on one byte + src = buff[:blockSize] + dst = buff[blockSize-1 : 2*blockSize-1] + mustPanic(t, "invalid buffer overlap", func() { bm(b, iv).CryptBlocks(dst, src) }) + + // src comes after dst with one byte overlap + src = buff[blockSize-1 : 2*blockSize-1] + dst = buff[:blockSize] + mustPanic(t, "invalid buffer overlap", func() { bm(b, iv).CryptBlocks(dst, src) }) + }) + + // Input to CryptBlocks should be a multiple of BlockSize + t.Run("PartialBlocks", func(t *testing.T) { + // Check a few cases of not being a multiple of BlockSize + for _, srcSize := range []int{blockSize - 1, blockSize + 1, 2*blockSize - 1, 2*blockSize + 1} { + src := make([]byte, srcSize) + dst := make([]byte, 3*blockSize) // Make a dst large enough for all src + mustPanic(t, "input not full blocks", func() { bm(b, iv).CryptBlocks(dst, src) }) + } + }) + + t.Run("KeepState", func(t *testing.T) { + rng := newRandReader(t) + + src, serialDst, compositeDst := make([]byte, blockSize*4), make([]byte, blockSize*4), make([]byte, blockSize*4) + rng.Read(src) + + length, block := 2*blockSize, bm(b, iv) + block.CryptBlocks(serialDst, src[:length]) + block.CryptBlocks(serialDst[length:], src[length:]) + + bm(b, iv).CryptBlocks(compositeDst, src) + + if !bytes.Equal(serialDst, compositeDst) { + t.Errorf("two successive CryptBlocks calls returned a different result than a single one; got %x, want %x", serialDst, compositeDst) + } + }) +} From ecadbe9faa1752fb949471b95743a48e89a65ee2 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 31 Jul 2024 13:12:50 -0700 Subject: [PATCH 144/866] go/types: generate recording.go Change-Id: I530df137bcb5094a828f97ecbe204265b50c8546 Reviewed-on: https://go-review.googlesource.com/c/go/+/602118 Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer Reviewed-by: Tim King --- src/go/types/generate_test.go | 12 +++++++++--- src/go/types/recording.go | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/go/types/generate_test.go b/src/go/types/generate_test.go index 79a8e77a75c45b..de2e63d163bf2e 100644 --- a/src/go/types/generate_test.go +++ b/src/go/types/generate_test.go @@ -159,9 +159,15 @@ var filemap = map[string]action{ "syntax.StringLit->token.STRING") // must happen before renaming identifiers renameIdents(f, "syntax->ast") }, - "package.go": nil, - "pointer.go": nil, - "predicates.go": nil, + "package.go": nil, + "pointer.go": nil, + "predicates.go": nil, + "recording.go": func(f *ast.File) { + renameImportPath(f, `"cmd/compile/internal/syntax"->"go/ast"`) + renameSelectorExprs(f, "syntax.Name->ast.Ident") // must happen before renaming identifiers + renameIdents(f, "syntax->ast") + fixAtPosCall(f) + }, "scope.go": func(f *ast.File) { fixTokenPos(f); renameIdents(f, "InsertLazy->_InsertLazy") }, "selection.go": nil, "sizes.go": func(f *ast.File) { renameIdents(f, "IsSyncAtomicAlign64->_IsSyncAtomicAlign64") }, diff --git a/src/go/types/recording.go b/src/go/types/recording.go index fa7383598303d8..8bdc0dfa0e8ec9 100644 --- a/src/go/types/recording.go +++ b/src/go/types/recording.go @@ -1,9 +1,12 @@ +// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT. +// Source: ../../cmd/compile/internal/types2/recording.go + // Copyright 2024 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. // This file implements recording of type information -// in the types.Info maps. +// in the types2.Info maps. package types From ee3da5061789cd3d2a6558b71a99ab7ecda23777 Mon Sep 17 00:00:00 2001 From: limeidan Date: Fri, 5 Jan 2024 10:33:42 +0800 Subject: [PATCH 145/866] cmd/internal/obj/loong64: reclassify three-register operation instructions and two-register operation instructions The instructions belonging to case 32 have the same structure as the instructions in case 2. The instructions in case 33 are actually two-register operation instructions. We move their definitions from function oprrr to oprr and merge their implementation into case 9. Change-Id: Id04aaa497e78d8198a58f8d406876d16b3f393a7 Reviewed-on: https://go-review.googlesource.com/c/go/+/565616 Reviewed-by: Qiqi Huang Reviewed-by: abner chenc LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: sophie zhao Reviewed-by: Michael Knyszek --- src/cmd/internal/obj/loong64/asm.go | 130 +++++++++++----------------- 1 file changed, 52 insertions(+), 78 deletions(-) diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index ee4a8bb8cb0b8a..933c9c978dd4da 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -74,21 +74,23 @@ var optab = []Optab{ {ANEGW, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, {ANEGV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, {AMASKEQZ, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLL, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLL, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLLV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {ASLLV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AMUL, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AMUL, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AMULV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AMULV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, + {AADDF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 2, 4, 0, 0}, + {AADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 2, 4, 0, 0}, + {ACMPEQF, C_FREG, C_FREG, C_NONE, C_FCCREG, C_NONE, 2, 4, 0, 0}, - {ASLL, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 9, 4, 0, 0}, - {ASLL, C_REG, C_REG, C_NONE, C_REG, C_NONE, 9, 4, 0, 0}, - {ASLLV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 9, 4, 0, 0}, - {ASLLV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 9, 4, 0, 0}, {ACLO, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 9, 4, 0, 0}, - - {AADDF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 32, 4, 0, 0}, - {AADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 32, 4, 0, 0}, - {AABSF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, - {AMOVVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, - {AMOVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, - {AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 33, 4, 0, 0}, - - {ACMPEQF, C_FREG, C_FREG, C_NONE, C_FCCREG, C_NONE, 29, 4, 0, 0}, + {AABSF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0}, + {AMOVVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0}, + {AMOVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0}, + {AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, {AMOVWU, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, @@ -197,11 +199,6 @@ var optab = []Optab{ {AMOVV, C_LCON, C_NONE, C_NONE, C_REG, C_NONE, 19, 8, 0, NOTUSETMP}, {AMOVV, C_DCON, C_NONE, C_NONE, C_REG, C_NONE, 59, 16, 0, NOTUSETMP}, - {AMUL, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, - {AMUL, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, - {AMULV, C_REG, C_NONE, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, - {AMULV, C_REG, C_REG, C_NONE, C_REG, C_NONE, 2, 4, 0, 0}, - {AADD, C_ADD0CON, C_REG, C_NONE, C_REG, C_NONE, 4, 4, 0, 0}, {AADD, C_ADD0CON, C_NONE, C_NONE, C_REG, C_NONE, 4, 4, 0, 0}, {AADD, C_ANDCON, C_REG, C_NONE, C_REG, C_NONE, 10, 8, 0, 0}, @@ -1388,16 +1385,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_12IRR(c.opirr(-p.As), uint32(v), uint32(r), uint32(p.To.Reg)) case 9: // sll r1,[r2],r3 - switch p.As { - case ACLO, ACLZ, ACPUCFG: - o1 = OP_RR(c.oprr(p.As), uint32(p.From.Reg), uint32(p.To.Reg)) - default: - r := int(p.Reg) - if r == 0 { - r = int(p.To.Reg) - } - o1 = OP_RRR(c.oprrr(p.As), uint32(p.From.Reg), uint32(r), uint32(p.To.Reg)) - } + o1 = OP_RR(c.oprr(p.As), uint32(p.From.Reg), uint32(p.To.Reg)) case 10: // add $con,[r1],r2 ==> mov $con, t; add t,[r1],r2 v := c.regoff(&p.From) @@ -1576,9 +1564,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_12IRR(c.opirr(p.As), uint32(v), uint32(r), uint32(p.From.Reg)) } - case 29: // fcmp.cond.x fj, fk, fcc - o1 = OP_RRR(c.oprrr(p.As), uint32(p.From.Reg), uint32(p.Reg), uint32(p.To.Reg)) - case 30: // movw r,fr a := OP_TEN(8, 1321) // movgr2fr.w o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) @@ -1587,16 +1572,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { a := OP_TEN(8, 1325) // movfr2gr.s o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) - case 32: // fadd fr1,[fr2],fr3 - r := int(p.Reg) - if r == 0 { - r = int(p.To.Reg) - } - o1 = OP_RRR(c.oprrr(p.As), uint32(p.From.Reg), uint32(r), uint32(p.To.Reg)) - - case 33: // fabs fr1, fr3 - o1 = OP_RRR(c.oprrr(p.As), uint32(0), uint32(p.From.Reg), uint32(p.To.Reg)) - case 34: // mov $con,fr v := c.regoff(&p.From) a := AADDU @@ -1960,6 +1935,42 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return 0x201 << 15 case AADDD: return 0x202 << 15 + case ACMPEQF: + return 0x0c1<<20 | 0x4<<15 // FCMP.CEQ.S + case ACMPEQD: + return 0x0c2<<20 | 0x4<<15 // FCMP.CEQ.D + case ACMPGED: + return 0x0c2<<20 | 0x7<<15 // FCMP.SLE.D + case ACMPGEF: + return 0x0c1<<20 | 0x7<<15 // FCMP.SLE.S + case ACMPGTD: + return 0x0c2<<20 | 0x3<<15 // FCMP.SLT.D + case ACMPGTF: + return 0x0c1<<20 | 0x3<<15 // FCMP.SLT.S + } + + if a < 0 { + c.ctxt.Diag("bad rrr opcode -%v", -a) + } else { + c.ctxt.Diag("bad rrr opcode %v", a) + } + return 0 +} + +func (c *ctxt0) oprr(a obj.As) uint32 { + switch a { + case ACLO: + return 0x4 << 10 + case ACLZ: + return 0x5 << 10 + case ACPUCFG: + return 0x1b << 10 + case ARDTIMELW: + return 0x18 << 10 + case ARDTIMEHW: + return 0x19 << 10 + case ARDTIMED: + return 0x1a << 10 case ATRUNCFV: return 0x46a9 << 10 case ATRUNCDV: @@ -2000,49 +2011,12 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return 0x4505 << 10 case ANEGD: return 0x4506 << 10 - case ACMPEQF: - return 0x0c1<<20 | 0x4<<15 // FCMP.CEQ.S - case ACMPEQD: - return 0x0c2<<20 | 0x4<<15 // FCMP.CEQ.D - case ACMPGED: - return 0x0c2<<20 | 0x7<<15 // FCMP.SLE.D - case ACMPGEF: - return 0x0c1<<20 | 0x7<<15 // FCMP.SLE.S - case ACMPGTD: - return 0x0c2<<20 | 0x3<<15 // FCMP.SLT.D - case ACMPGTF: - return 0x0c1<<20 | 0x3<<15 // FCMP.SLT.S - case ASQRTF: return 0x4511 << 10 case ASQRTD: return 0x4512 << 10 } - if a < 0 { - c.ctxt.Diag("bad rrr opcode -%v", -a) - } else { - c.ctxt.Diag("bad rrr opcode %v", a) - } - return 0 -} - -func (c *ctxt0) oprr(a obj.As) uint32 { - switch a { - case ACLO: - return 0x4 << 10 - case ACLZ: - return 0x5 << 10 - case ACPUCFG: - return 0x1b << 10 - case ARDTIMELW: - return 0x18 << 10 - case ARDTIMEHW: - return 0x19 << 10 - case ARDTIMED: - return 0x1a << 10 - } - c.ctxt.Diag("bad rr opcode %v", a) return 0 } From 864513dda9d96dfd0fbdbe4c2b68ebbfa3d34bc7 Mon Sep 17 00:00:00 2001 From: limeidan Date: Tue, 16 Jan 2024 17:42:48 +0800 Subject: [PATCH 146/866] cmd/internal/obj/loong64: merge two branch classes into one When the kind of the operand is TYPE_BRANCH, we cannot determine whether it is a long branch or a short branch, so we merge these two classes into one. Change-Id: I7d7fa8f62ff02791ec3de4e3e3f7610bc9cb1743 Reviewed-on: https://go-review.googlesource.com/c/go/+/565626 LUCI-TryBot-Result: Go LUCI Reviewed-by: sophie zhao Reviewed-by: Qiqi Huang Reviewed-by: Dmitri Shuralyov Reviewed-by: abner chenc Reviewed-by: Michael Knyszek --- src/cmd/internal/obj/loong64/a.out.go | 3 +-- src/cmd/internal/obj/loong64/asm.go | 23 +++++++++-------------- src/cmd/internal/obj/loong64/cnames.go | 3 +-- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 251c34c6abe68a..29ee1bb2829636 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -212,8 +212,7 @@ const ( C_LACON // $n(REG) where int12 < n <= int32 C_EXTADDR // external symbol address C_DACON // $n(REG) where int32 < n - C_SBRA - C_LBRA + C_BRAN C_SAUTO C_LAUTO C_SEXT diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 933c9c978dd4da..2f2caa8b6d1de4 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -240,13 +240,13 @@ var optab = []Optab{ {ASYSCALL, C_NONE, C_NONE, C_NONE, C_NONE, C_NONE, 5, 4, 0, 0}, {ASYSCALL, C_ANDCON, C_NONE, C_NONE, C_NONE, C_NONE, 5, 4, 0, 0}, - {ABEQ, C_REG, C_REG, C_NONE, C_SBRA, C_NONE, 6, 4, 0, 0}, - {ABEQ, C_REG, C_NONE, C_NONE, C_SBRA, C_NONE, 6, 4, 0, 0}, - {ABLEZ, C_REG, C_NONE, C_NONE, C_SBRA, C_NONE, 6, 4, 0, 0}, - {ABFPT, C_NONE, C_NONE, C_NONE, C_SBRA, C_NONE, 6, 4, 0, NOTUSETMP}, + {ABEQ, C_REG, C_REG, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0}, + {ABEQ, C_REG, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0}, + {ABLEZ, C_REG, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, 0}, + {ABFPT, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 6, 4, 0, NOTUSETMP}, - {AJMP, C_NONE, C_NONE, C_NONE, C_LBRA, C_NONE, 11, 4, 0, 0}, // b - {AJAL, C_NONE, C_NONE, C_NONE, C_LBRA, C_NONE, 11, 4, 0, 0}, // bl + {AJMP, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // b + {AJAL, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // bl {AJMP, C_NONE, C_NONE, C_NONE, C_ZOREG, C_NONE, 18, 4, REGZERO, 0}, // jirl r0, rj, 0 {AJAL, C_NONE, C_NONE, C_NONE, C_ZOREG, C_NONE, 18, 4, REGLINK, 0}, // jirl r1, rj, 0 @@ -331,8 +331,8 @@ var optab = []Optab{ {obj.ANOP, C_DCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, // nop variants, see #40689 {obj.ANOP, C_REG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, {obj.ANOP, C_FREG, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, - {obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_LBRA, C_NONE, 11, 4, 0, 0}, // same as AJMP - {obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_LBRA, C_NONE, 11, 4, 0, 0}, // same as AJMP + {obj.ADUFFZERO, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // same as AJMP + {obj.ADUFFCOPY, C_NONE, C_NONE, C_NONE, C_BRAN, C_NONE, 11, 4, 0, 0}, // same as AJMP {obj.AXXX, C_NONE, C_NONE, C_NONE, C_NONE, C_NONE, 0, 4, 0, 0}, } @@ -807,7 +807,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { return C_LCON case obj.TYPE_BRANCH: - return C_SBRA + return C_BRAN } return C_GOK @@ -950,11 +950,6 @@ func cmp(a int, b int) bool { return true } - case C_LBRA: - if b == C_SBRA { - return true - } - case C_LEXT: if b == C_SEXT { return true diff --git a/src/cmd/internal/obj/loong64/cnames.go b/src/cmd/internal/obj/loong64/cnames.go index 955c464d2fce22..02b18272ca2d14 100644 --- a/src/cmd/internal/obj/loong64/cnames.go +++ b/src/cmd/internal/obj/loong64/cnames.go @@ -24,8 +24,7 @@ var cnames0 = []string{ "LACON", "EXTADDR", "DACON", - "SBRA", - "LBRA", + "BRAN", "SAUTO", "LAUTO", "SEXT", From 01ab9a016afe7239ed7b43cdd820103ec91aba09 Mon Sep 17 00:00:00 2001 From: limeidan Date: Wed, 17 Jan 2024 17:49:37 +0800 Subject: [PATCH 147/866] cmd/internal/obj/loong64: optimize the code logic of jump instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If p.To.Sym is nil, that means we can get the target offset from p.To.Target().pc - c.pc,only when p.To.Sym is not nil, we need relocation to get the true address of target symbol. Change-Id: Ied52f675c6aa6e8fb8d972b7699f5cadd1ecb268 Reviewed-on: https://go-review.googlesource.com/c/go/+/565627 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: sophie zhao Reviewed-by: Qiqi Huang Reviewed-by: Dmitri Shuralyov Reviewed-by: abner chenc Reviewed-by: Meidan Li --- src/cmd/internal/obj/loong64/asm.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 2f2caa8b6d1de4..1e4dd111f15dc8 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1401,19 +1401,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { v = int32(p.To.Target().Pc-p.Pc) >> 2 } o1 = OP_B_BL(c.opirr(p.As), uint32(v)) - if p.To.Sym == nil { - if p.As == AJMP { - break - } - p.To.Sym = c.cursym.Func().Text.From.Sym - p.To.Offset = p.To.Target().Pc + if p.To.Sym != nil { + rel := obj.Addrel(c.cursym) + rel.Off = int32(c.pc) + rel.Siz = 4 + rel.Sym = p.To.Sym + rel.Add = p.To.Offset + rel.Type = objabi.R_CALLLOONG64 } - rel := obj.Addrel(c.cursym) - rel.Off = int32(c.pc) - rel.Siz = 4 - rel.Sym = p.To.Sym - rel.Add = p.To.Offset - rel.Type = objabi.R_CALLLOONG64 case 12: // movbs r,r // NOTE: this case does not use REGTMP. If it ever does, From 3214129a835d7ab5b857c77b8389a9aba4f9d5df Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 23 Apr 2024 17:01:28 +0800 Subject: [PATCH 148/866] cmd/compiler,internal/runtime/atomic: optimize Load{64,32,8} on loong64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The LoadAcquire barrier on Loong64 is "dbar 0x14", using the correct barrier in Load{8,32,64} implementation can improve performance. goos: linux goarch: loong64 pkg: internal/runtime/atomic cpu: Loongson-3A6000-HV @ 2500.00MHz | bench.old | bench.new | | sec/op | sec/op vs base | AtomicLoad64 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad64-2 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad64-4 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad 17.220n ± 0% 4.402n ± 0% -74.44% (p=0.000 n=20) AtomicLoad-2 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad-4 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad8 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad8-2 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) AtomicLoad8-4 17.210n ± 0% 4.402n ± 0% -74.42% (p=0.000 n=20) geomean 17.21n 4.402n -74.42% goos: linux goarch: loong64 pkg: internal/runtime/atomic cpu: Loongson-3A5000 @ 2500.00MHz | bench.old | bench.new | | sec/op | sec/op vs base | AtomicLoad64 18.82n ± 0% 10.41n ± 0% -44.69% (p=0.000 n=20) AtomicLoad64-2 18.81n ± 0% 10.41n ± 0% -44.66% (p=0.000 n=20) AtomicLoad64-4 18.82n ± 0% 10.41n ± 0% -44.69% (p=0.000 n=20) AtomicLoad 18.81n ± 0% 10.41n ± 0% -44.66% (p=0.000 n=20) AtomicLoad-2 18.82n ± 0% 10.41n ± 0% -44.69% (p=0.000 n=20) AtomicLoad-4 18.81n ± 0% 10.42n ± 0% -44.63% (p=0.000 n=20) AtomicLoad8 18.82n ± 0% 10.41n ± 0% -44.69% (p=0.000 n=20) AtomicLoad8-2 18.82n ± 0% 10.41n ± 0% -44.70% (p=0.000 n=20) AtomicLoad8-4 18.82n ± 0% 10.41n ± 0% -44.69% (p=0.000 n=20) geomean 18.82n 10.41n -44.68% Change-Id: I9d47c9d6f359c4f2e41035ca656429aade2e7847 Reviewed-on: https://go-review.googlesource.com/c/go/+/581357 Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/loong64/ssa.go | 8 ++++++-- src/internal/runtime/atomic/atomic_loong64.s | 16 ++++------------ src/internal/runtime/atomic/bench_test.go | 8 ++++++++ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index 1b1fdfdc714372..7cdf5637f20142 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -468,6 +468,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.To.Sym = ssagen.BoundsCheckFunc[v.AuxInt] s.UseArgs(16) // space used in callee args area by assembly stubs case ssa.OpLOONG64LoweredAtomicLoad8, ssa.OpLOONG64LoweredAtomicLoad32, ssa.OpLOONG64LoweredAtomicLoad64: + // MOVB (Rarg0), Rout + // DBAR 0x14 as := loong64.AMOVV switch v.Op { case ssa.OpLOONG64LoweredAtomicLoad8: @@ -475,13 +477,15 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { case ssa.OpLOONG64LoweredAtomicLoad32: as = loong64.AMOVW } - s.Prog(loong64.ADBAR) p := s.Prog(as) p.From.Type = obj.TYPE_MEM p.From.Reg = v.Args[0].Reg() p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg0() - s.Prog(loong64.ADBAR) + p1 := s.Prog(loong64.ADBAR) + p1.From.Type = obj.TYPE_CONST + p1.From.Offset = 0x14 + case ssa.OpLOONG64LoweredAtomicStore8, ssa.OpLOONG64LoweredAtomicStore32, ssa.OpLOONG64LoweredAtomicStore64: as := loong64.AMOVV switch v.Op { diff --git a/src/internal/runtime/atomic/atomic_loong64.s b/src/internal/runtime/atomic/atomic_loong64.s index 1812cb95fd4edd..9bed8654c85c17 100644 --- a/src/internal/runtime/atomic/atomic_loong64.s +++ b/src/internal/runtime/atomic/atomic_loong64.s @@ -319,38 +319,30 @@ TEXT ·Oruintptr(SB), NOSPLIT, $0-24 // uint32 internal∕runtime∕atomic·Load(uint32 volatile* ptr) TEXT ·Load(SB),NOSPLIT|NOFRAME,$0-12 MOVV ptr+0(FP), R19 - DBAR MOVWU 0(R19), R19 - DBAR + DBAR $0x14 // LoadAcquire barrier MOVW R19, ret+8(FP) RET // uint8 internal∕runtime∕atomic·Load8(uint8 volatile* ptr) TEXT ·Load8(SB),NOSPLIT|NOFRAME,$0-9 MOVV ptr+0(FP), R19 - DBAR MOVBU 0(R19), R19 - DBAR + DBAR $0x14 MOVB R19, ret+8(FP) RET // uint64 internal∕runtime∕atomic·Load64(uint64 volatile* ptr) TEXT ·Load64(SB),NOSPLIT|NOFRAME,$0-16 MOVV ptr+0(FP), R19 - DBAR MOVV 0(R19), R19 - DBAR + DBAR $0x14 MOVV R19, ret+8(FP) RET // void *internal∕runtime∕atomic·Loadp(void *volatile *ptr) TEXT ·Loadp(SB),NOSPLIT|NOFRAME,$0-16 - MOVV ptr+0(FP), R19 - DBAR - MOVV 0(R19), R19 - DBAR - MOVV R19, ret+8(FP) - RET + JMP ·Load64(SB) // uint32 internal∕runtime∕atomic·LoadAcq(uint32 volatile* ptr) TEXT ·LoadAcq(SB),NOSPLIT|NOFRAME,$0-12 diff --git a/src/internal/runtime/atomic/bench_test.go b/src/internal/runtime/atomic/bench_test.go index 798431cf7258c2..6e3f14cbe46384 100644 --- a/src/internal/runtime/atomic/bench_test.go +++ b/src/internal/runtime/atomic/bench_test.go @@ -43,6 +43,14 @@ func BenchmarkAtomicStore(b *testing.B) { } } +func BenchmarkAtomicLoad8(b *testing.B) { + var x uint8 + sink = &x + for i := 0; i < b.N; i++ { + atomic.Load8(&x) + } +} + func BenchmarkAnd8(b *testing.B) { var x [512]uint8 // give byte its own cache line sink = &x From bd85a3b1535928bcdc9bb4512f3dd9048de14617 Mon Sep 17 00:00:00 2001 From: limeidan Date: Thu, 4 Jan 2024 20:39:57 +0800 Subject: [PATCH 149/866] cmd/internal/obj/loong64: remove Class C_LEXT and C_SEXT There is no need to check whether the symbol is empty, since we have already checked it before. In addition, it is enough to use C_ADDR to represent memory access, C_LEXT and C_SEXT are not needed. Change-Id: I7158d6b549482b35cd9ac5fba781648fb3f21922 Reviewed-on: https://go-review.googlesource.com/c/go/+/565615 LUCI-TryBot-Result: Go LUCI Auto-Submit: abner chenc Reviewed-by: Michael Knyszek Reviewed-by: Dmitri Shuralyov Reviewed-by: sophie zhao Reviewed-by: abner chenc Reviewed-by: Qiqi Huang --- src/cmd/internal/obj/loong64/a.out.go | 16 ++++---- src/cmd/internal/obj/loong64/asm.go | 52 +++----------------------- src/cmd/internal/obj/loong64/cnames.go | 2 - 3 files changed, 13 insertions(+), 57 deletions(-) diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 29ee1bb2829636..cf5c74fde2ebb0 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -204,19 +204,17 @@ const ( C_UCON // 32 bit signed, low 12 bits 0 C_ADD0CON C_AND0CON - C_ADDCON // -0x800 <= v < 0 - C_ANDCON // 0 < v <= 0xFFF - C_LCON // other 32 - C_DCON // other 64 (could subdivide further) - C_SACON // $n(REG) where n <= int12 - C_LACON // $n(REG) where int12 < n <= int32 + C_ADDCON // -0x800 <= v < 0 + C_ANDCON // 0 < v <= 0xFFF + C_LCON // other 32 + C_DCON // other 64 (could subdivide further) + C_SACON // $n(REG) where n <= int12 + C_LACON // $n(REG) where int12 < n <= int32 C_EXTADDR // external symbol address - C_DACON // $n(REG) where int32 < n + C_DACON // $n(REG) where int32 < n C_BRAN C_SAUTO C_LAUTO - C_SEXT - C_LEXT C_ZOREG C_SOREG C_LOREG diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 1e4dd111f15dc8..0636ec18626789 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -92,11 +92,6 @@ var optab = []Optab{ {AMOVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0}, - {AMOVW, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, - {AMOVWU, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, - {AMOVV, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, - {AMOVB, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, - {AMOVBU, C_REG, C_NONE, C_NONE, C_SEXT, C_NONE, 7, 4, 0, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, {AMOVWU, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, {AMOVV, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0}, @@ -110,11 +105,6 @@ var optab = []Optab{ {ASC, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, {ASCV, C_REG, C_NONE, C_NONE, C_SOREG, C_NONE, 7, 4, REGZERO, 0}, - {AMOVW, C_SEXT, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, 0, 0}, - {AMOVWU, C_SEXT, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, 0, 0}, - {AMOVV, C_SEXT, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, 0, 0}, - {AMOVB, C_SEXT, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, 0, 0}, - {AMOVBU, C_SEXT, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, 0, 0}, {AMOVW, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, {AMOVWU, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, {AMOVV, C_SAUTO, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGSP, 0}, @@ -128,11 +118,6 @@ var optab = []Optab{ {ALL, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, {ALLV, C_SOREG, C_NONE, C_NONE, C_REG, C_NONE, 8, 4, REGZERO, 0}, - {AMOVW, C_REG, C_NONE, C_NONE, C_LEXT, C_NONE, 35, 12, 0, 0}, - {AMOVWU, C_REG, C_NONE, C_NONE, C_LEXT, C_NONE, 35, 12, 0, 0}, - {AMOVV, C_REG, C_NONE, C_NONE, C_LEXT, C_NONE, 35, 12, 0, 0}, - {AMOVB, C_REG, C_NONE, C_NONE, C_LEXT, C_NONE, 35, 12, 0, 0}, - {AMOVBU, C_REG, C_NONE, C_NONE, C_LEXT, C_NONE, 35, 12, 0, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, {AMOVWU, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, {AMOVV, C_REG, C_NONE, C_NONE, C_LAUTO, C_NONE, 35, 12, REGSP, 0}, @@ -155,11 +140,6 @@ var optab = []Optab{ {AMOVB, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, {AMOVBU, C_REG, C_NONE, C_NONE, C_TLS_LE, C_NONE, 53, 16, 0, 0}, - {AMOVW, C_LEXT, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, 0, 0}, - {AMOVWU, C_LEXT, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, 0, 0}, - {AMOVV, C_LEXT, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, 0, 0}, - {AMOVB, C_LEXT, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, 0, 0}, - {AMOVBU, C_LEXT, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, 0, 0}, {AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, {AMOVWU, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, {AMOVV, C_LAUTO, C_NONE, C_NONE, C_REG, C_NONE, 36, 12, REGSP, 0}, @@ -251,17 +231,11 @@ var optab = []Optab{ {AJMP, C_NONE, C_NONE, C_NONE, C_ZOREG, C_NONE, 18, 4, REGZERO, 0}, // jirl r0, rj, 0 {AJAL, C_NONE, C_NONE, C_NONE, C_ZOREG, C_NONE, 18, 4, REGLINK, 0}, // jirl r1, rj, 0 - {AMOVW, C_SEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, 0, 0}, - {AMOVF, C_SEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, 0, 0}, - {AMOVD, C_SEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, 0, 0}, {AMOVF, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGSP, 0}, {AMOVD, C_SAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGSP, 0}, {AMOVF, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGZERO, 0}, {AMOVD, C_SOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 4, REGZERO, 0}, - {AMOVW, C_LEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, 0, 0}, - {AMOVF, C_LEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, 0, 0}, - {AMOVD, C_LEXT, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, 0, 0}, {AMOVF, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGSP, 0}, {AMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGSP, 0}, {AMOVF, C_LOREG, C_NONE, C_NONE, C_FREG, C_NONE, 27, 12, REGZERO, 0}, @@ -269,17 +243,11 @@ var optab = []Optab{ {AMOVF, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, {AMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, C_NONE, 51, 8, 0, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_SEXT, C_NONE, 28, 4, 0, 0}, - {AMOVF, C_FREG, C_NONE, C_NONE, C_SEXT, C_NONE, 28, 4, 0, 0}, - {AMOVD, C_FREG, C_NONE, C_NONE, C_SEXT, C_NONE, 28, 4, 0, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 28, 4, REGSP, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_SAUTO, C_NONE, 28, 4, REGSP, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 28, 4, REGZERO, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_SOREG, C_NONE, 28, 4, REGZERO, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_LEXT, C_NONE, 28, 12, 0, 0}, - {AMOVF, C_FREG, C_NONE, C_NONE, C_LEXT, C_NONE, 28, 12, 0, 0}, - {AMOVD, C_FREG, C_NONE, C_NONE, C_LEXT, C_NONE, 28, 12, 0, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 28, 12, REGSP, 0}, {AMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, C_NONE, 28, 12, REGSP, 0}, {AMOVF, C_FREG, C_NONE, C_NONE, C_LOREG, C_NONE, 28, 12, REGZERO, 0}, @@ -661,17 +629,14 @@ func (c *ctxt0) aclass(a *obj.Addr) int { break } c.instoffset = a.Offset - if a.Sym != nil { // use relocation - if a.Sym.Type == objabi.STLSBSS { - if c.ctxt.Flag_shared { - return C_TLS_IE - } else { - return C_TLS_LE - } + if a.Sym.Type == objabi.STLSBSS { + if c.ctxt.Flag_shared { + return C_TLS_IE + } else { + return C_TLS_LE } - return C_ADDR } - return C_LEXT + return C_ADDR case obj.NAME_AUTO: if a.Reg == REGSP { @@ -950,11 +915,6 @@ func cmp(a int, b int) bool { return true } - case C_LEXT: - if b == C_SEXT { - return true - } - case C_LAUTO: if b == C_SAUTO { return true diff --git a/src/cmd/internal/obj/loong64/cnames.go b/src/cmd/internal/obj/loong64/cnames.go index 02b18272ca2d14..8e103b888f49bc 100644 --- a/src/cmd/internal/obj/loong64/cnames.go +++ b/src/cmd/internal/obj/loong64/cnames.go @@ -27,8 +27,6 @@ var cnames0 = []string{ "BRAN", "SAUTO", "LAUTO", - "SEXT", - "LEXT", "ZOREG", "SOREG", "LOREG", From 6ac87aa5b36e7a9389754cf5569af94447266b47 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Fri, 26 Jul 2024 10:14:20 -0700 Subject: [PATCH 150/866] runtime: measure speed of procyield and osyield These are delay primitives for lock2. If a mutex isn't immediately available, we can use procyield to tell the processor to wait for a moment, or osyield to allow the OS to run a different process or thread if one is waiting. We expect a processor-level yield to be faster than an os-level yield, and for both of them to be fast relative to entering a full sleep (via futexsleep or semasleep). Each architecture has its own way of hinting to the processor that it's in a spin-wait loop, so procyield presents an architecture-independent interface for use in lock_futex.go and lock_sema.go. Measure the (single-threaded) speed of these to confirm. For #68578 Change-Id: I90cd46ea553f2990395aceb048206285558c877e Reviewed-on: https://go-review.googlesource.com/c/go/+/601396 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Michael Knyszek --- src/runtime/export_test.go | 3 +++ src/runtime/runtime_test.go | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 759463755ac5d9..b18480d0af26ac 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -1223,6 +1223,9 @@ func PageCachePagesLeaked() (leaked uintptr) { return } +var ProcYield = procyield +var OSYield = osyield + type Mutex = mutex var Lock = lock diff --git a/src/runtime/runtime_test.go b/src/runtime/runtime_test.go index c1bf7f87dbd825..0b51dd8c8d15b1 100644 --- a/src/runtime/runtime_test.go +++ b/src/runtime/runtime_test.go @@ -539,3 +539,25 @@ func TestTimediv(t *testing.T) { }) } } + +func BenchmarkProcYield(b *testing.B) { + benchN := func(n uint32) func(*testing.B) { + return func(b *testing.B) { + for i := 0; i < b.N; i++ { + ProcYield(n) + } + } + } + + b.Run("1", benchN(1)) + b.Run("10", benchN(10)) + b.Run("30", benchN(30)) // active_spin_cnt in lock_sema.go and lock_futex.go + b.Run("100", benchN(100)) + b.Run("1000", benchN(1000)) +} + +func BenchmarkOSYield(b *testing.B) { + for i := 0; i < b.N; i++ { + OSYield() + } +} From 4c05a23bb63efee928f3c3cbe712ae7d562ba588 Mon Sep 17 00:00:00 2001 From: Xin Hao Date: Thu, 1 Aug 2024 02:47:35 +0000 Subject: [PATCH 151/866] go/types: fix typo in comment Change-Id: Ic0ea0f0de3f94e2d89bf76176c51f42e87b1bad7 GitHub-Last-Rev: 29517a07f9af17d3dfea9a1d242d734040bc575e GitHub-Pull-Request: golang/go#68695 Reviewed-on: https://go-review.googlesource.com/c/go/+/602177 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Knyszek --- src/go/types/iter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/go/types/iter.go b/src/go/types/iter.go index e6dee158fd6cb3..dcd15bdfaed7a9 100644 --- a/src/go/types/iter.go +++ b/src/go/types/iter.go @@ -106,7 +106,7 @@ func (t *Tuple) Variables() iter.Seq[*Var] { } } -// MethodSet returns a go1.23 iterator over the methods of a method set. +// Methods returns a go1.23 iterator over the methods of a method set. // // Example: for method := range s.Methods() { ... } func (s *MethodSet) Methods() iter.Seq[*Selection] { From 09eefb3a4d15bb409ad8a85b505ec9230702a27a Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 25 Aug 2023 22:10:38 +0700 Subject: [PATCH 152/866] cmd/compile: add race instrumentation during walkCompare So the racy usage could be detected after re-writing "==" to runtime.memequal call. Updates #61204 Change-Id: Idb4ac37e55813cc87f9d16aa656fb447edf69ea1 Reviewed-on: https://go-review.googlesource.com/c/go/+/601117 Reviewed-by: Egon Elbre Auto-Submit: Cuong Manh Le Reviewed-by: Michael Knyszek Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/walk/compare.go | 14 +++++- src/runtime/race/output_test.go | 54 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/walk/compare.go b/src/cmd/compile/internal/walk/compare.go index 625cfecee0c8fe..25160008ee90ba 100644 --- a/src/cmd/compile/internal/walk/compare.go +++ b/src/cmd/compile/internal/walk/compare.go @@ -192,8 +192,18 @@ func walkCompare(n *ir.BinaryExpr, init *ir.Nodes) ir.Node { // is handled by walkCompare. fn, needsLength := reflectdata.EqFor(t) call := ir.NewCallExpr(base.Pos, ir.OCALL, fn, nil) - call.Args.Append(typecheck.NodAddr(cmpl)) - call.Args.Append(typecheck.NodAddr(cmpr)) + addrCmpl := typecheck.NodAddr(cmpl) + addrCmpR := typecheck.NodAddr(cmpr) + if !types.IsNoRacePkg(types.LocalPkg) && base.Flag.Race { + ptrL := typecheck.Conv(typecheck.Conv(addrCmpl, types.Types[types.TUNSAFEPTR]), types.Types[types.TUINTPTR]) + ptrR := typecheck.Conv(typecheck.Conv(addrCmpR, types.Types[types.TUNSAFEPTR]), types.Types[types.TUINTPTR]) + raceFn := typecheck.LookupRuntime("racereadrange") + size := ir.NewInt(base.Pos, t.Size()) + call.PtrInit().Append(mkcall1(raceFn, nil, init, ptrL, size)) + call.PtrInit().Append(mkcall1(raceFn, nil, init, ptrR, size)) + } + call.Args.Append(addrCmpl) + call.Args.Append(addrCmpR) if needsLength { call.Args.Append(ir.NewInt(base.Pos, t.Size())) } diff --git a/src/runtime/race/output_test.go b/src/runtime/race/output_test.go index 0ee0f41334bea6..0d5c9096f0ccf1 100644 --- a/src/runtime/race/output_test.go +++ b/src/runtime/race/output_test.go @@ -476,5 +476,59 @@ Previous write at 0x[0-9,a-f]+ by main goroutine: main\.main\(\) .*/main.go:10 \+0x[0-9,a-f]+ +`}}, + {"non_inline_array_compare", "run", "", "atexit_sleep_ms=0", ` +package main + +import ( + "math/rand/v2" +) + +var x = [1024]byte{} + +var ch = make(chan bool) + +func main() { + started := make(chan struct{}) + go func() { + close(started) + var y = [len(x)]byte{} + eq := x == y + ch <- eq + }() + <-started + x[rand.IntN(len(x))]++ + println(<-ch) +} +`, []string{`================== +WARNING: DATA RACE +`}}, + {"non_inline_struct_compare", "run", "", "atexit_sleep_ms=0", ` +package main + +import "math/rand/v2" + +type S struct { + a [1024]byte +} + +var x = S{a: [1024]byte{}} + +var ch = make(chan bool) + +func main() { + started := make(chan struct{}) + go func() { + close(started) + var y = S{a: [len(x.a)]byte{}} + eq := x == y + ch <- eq + }() + <-started + x.a[rand.IntN(len(x.a))]++ + println(<-ch) +} +`, []string{`================== +WARNING: DATA RACE `}}, } From b26134bf17972f959daf178087fcc0bd74b4015c Mon Sep 17 00:00:00 2001 From: Mateusz Poliwczak Date: Thu, 1 Aug 2024 06:26:48 +0000 Subject: [PATCH 153/866] crypto: implement encoding.BinaryAppender for all crypto hashes For #62384 Change-Id: I6fc7a7b8b85e02c880f1d16e0467f5076d477f0f GitHub-Last-Rev: 90ba7bae6aa9ddfbcd622682314c05e5f65cbb56 GitHub-Pull-Request: golang/go#68651 Reviewed-on: https://go-review.googlesource.com/c/go/+/601776 Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- .../6-stdlib/99-minor/crypto/md5/62384.md | 1 + .../6-stdlib/99-minor/crypto/sha1/62384.md | 1 + .../6-stdlib/99-minor/crypto/sha256/62384.md | 1 + .../6-stdlib/99-minor/crypto/sha512/62384.md | 1 + src/crypto/internal/boring/sha.go | 35 +++++++++++++------ src/crypto/md5/md5.go | 14 +++++--- src/crypto/md5/md5_test.go | 12 +++++++ src/crypto/sha1/sha1.go | 14 +++++--- src/crypto/sha1/sha1_test.go | 12 +++++++ src/crypto/sha256/sha256.go | 16 ++++++--- src/crypto/sha256/sha256_test.go | 12 +++++++ src/crypto/sha512/sha512.go | 27 ++++++++++---- src/crypto/sha512/sha512_test.go | 12 +++++++ 13 files changed, 127 insertions(+), 31 deletions(-) create mode 100644 doc/next/6-stdlib/99-minor/crypto/md5/62384.md create mode 100644 doc/next/6-stdlib/99-minor/crypto/sha1/62384.md create mode 100644 doc/next/6-stdlib/99-minor/crypto/sha256/62384.md create mode 100644 doc/next/6-stdlib/99-minor/crypto/sha512/62384.md diff --git a/doc/next/6-stdlib/99-minor/crypto/md5/62384.md b/doc/next/6-stdlib/99-minor/crypto/md5/62384.md new file mode 100644 index 00000000000000..5ff3b58bb8421b --- /dev/null +++ b/doc/next/6-stdlib/99-minor/crypto/md5/62384.md @@ -0,0 +1 @@ +The value returned by [md5.New] now also implements the [encoding.BinaryAppender] interface. diff --git a/doc/next/6-stdlib/99-minor/crypto/sha1/62384.md b/doc/next/6-stdlib/99-minor/crypto/sha1/62384.md new file mode 100644 index 00000000000000..1b4a36aaad46a0 --- /dev/null +++ b/doc/next/6-stdlib/99-minor/crypto/sha1/62384.md @@ -0,0 +1 @@ +The value returned by [sha1.New] now also implements the [encoding.BinaryAppender] interface. diff --git a/doc/next/6-stdlib/99-minor/crypto/sha256/62384.md b/doc/next/6-stdlib/99-minor/crypto/sha256/62384.md new file mode 100644 index 00000000000000..d5efbc915267b8 --- /dev/null +++ b/doc/next/6-stdlib/99-minor/crypto/sha256/62384.md @@ -0,0 +1 @@ +The values returned by [sha256.New] and [sha256.New224] now also implement the [encoding.BinaryAppender] interface diff --git a/doc/next/6-stdlib/99-minor/crypto/sha512/62384.md b/doc/next/6-stdlib/99-minor/crypto/sha512/62384.md new file mode 100644 index 00000000000000..5f4a44c144bfef --- /dev/null +++ b/doc/next/6-stdlib/99-minor/crypto/sha512/62384.md @@ -0,0 +1 @@ +The values returned by [sha512.New], [sha512.New384], [sha512.New512_224] and [sha512.New512_256] now also implement the [encoding.BinaryAppender] interface. diff --git a/src/crypto/internal/boring/sha.go b/src/crypto/internal/boring/sha.go index a49c1197389729..524069db4f159d 100644 --- a/src/crypto/internal/boring/sha.go +++ b/src/crypto/internal/boring/sha.go @@ -159,8 +159,11 @@ const ( ) func (h *sha1Hash) MarshalBinary() ([]byte, error) { + return h.AppendBinary(make([]byte, 0, sha1MarshaledSize)) +} + +func (h *sha1Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha1Ctx)(unsafe.Pointer(&h.ctx)) - b := make([]byte, 0, sha1MarshaledSize) b = append(b, sha1Magic...) b = appendUint32(b, d.h[0]) b = appendUint32(b, d.h[1]) @@ -168,7 +171,7 @@ func (h *sha1Hash) MarshalBinary() ([]byte, error) { b = appendUint32(b, d.h[3]) b = appendUint32(b, d.h[4]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-int(d.nx)] // already zero + b = append(b, make([]byte, len(d.x)-int(d.nx))...) b = appendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) return b, nil } @@ -285,8 +288,11 @@ type sha256Ctx struct { } func (h *sha224Hash) MarshalBinary() ([]byte, error) { + return h.AppendBinary(make([]byte, 0, marshaledSize256)) +} + +func (h *sha224Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha256Ctx)(unsafe.Pointer(&h.ctx)) - b := make([]byte, 0, marshaledSize256) b = append(b, magic224...) b = appendUint32(b, d.h[0]) b = appendUint32(b, d.h[1]) @@ -297,14 +303,17 @@ func (h *sha224Hash) MarshalBinary() ([]byte, error) { b = appendUint32(b, d.h[6]) b = appendUint32(b, d.h[7]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-int(d.nx)] // already zero + b = append(b, make([]byte, len(d.x)-int(d.nx))...) b = appendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) return b, nil } func (h *sha256Hash) MarshalBinary() ([]byte, error) { + return h.AppendBinary(make([]byte, 0, marshaledSize256)) +} + +func (h *sha256Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha256Ctx)(unsafe.Pointer(&h.ctx)) - b := make([]byte, 0, marshaledSize256) b = append(b, magic256...) b = appendUint32(b, d.h[0]) b = appendUint32(b, d.h[1]) @@ -315,7 +324,7 @@ func (h *sha256Hash) MarshalBinary() ([]byte, error) { b = appendUint32(b, d.h[6]) b = appendUint32(b, d.h[7]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-int(d.nx)] // already zero + b = append(b, make([]byte, len(d.x)-int(d.nx))...) b = appendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) return b, nil } @@ -462,8 +471,11 @@ const ( ) func (h *sha384Hash) MarshalBinary() ([]byte, error) { + return h.AppendBinary(make([]byte, 0, marshaledSize512)) +} + +func (h *sha384Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha512Ctx)(unsafe.Pointer(&h.ctx)) - b := make([]byte, 0, marshaledSize512) b = append(b, magic384...) b = appendUint64(b, d.h[0]) b = appendUint64(b, d.h[1]) @@ -474,14 +486,17 @@ func (h *sha384Hash) MarshalBinary() ([]byte, error) { b = appendUint64(b, d.h[6]) b = appendUint64(b, d.h[7]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-int(d.nx)] // already zero + b = append(b, make([]byte, len(d.x)-int(d.nx))...) b = appendUint64(b, d.nl>>3|d.nh<<61) return b, nil } func (h *sha512Hash) MarshalBinary() ([]byte, error) { + return h.AppendBinary(make([]byte, 0, marshaledSize512)) +} + +func (h *sha512Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha512Ctx)(unsafe.Pointer(&h.ctx)) - b := make([]byte, 0, marshaledSize512) b = append(b, magic512...) b = appendUint64(b, d.h[0]) b = appendUint64(b, d.h[1]) @@ -492,7 +507,7 @@ func (h *sha512Hash) MarshalBinary() ([]byte, error) { b = appendUint64(b, d.h[6]) b = appendUint64(b, d.h[7]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-int(d.nx)] // already zero + b = append(b, make([]byte, len(d.x)-int(d.nx))...) b = appendUint64(b, d.nl>>3|d.nh<<61) return b, nil } diff --git a/src/crypto/md5/md5.go b/src/crypto/md5/md5.go index 843678702bf93f..c984c3f4968598 100644 --- a/src/crypto/md5/md5.go +++ b/src/crypto/md5/md5.go @@ -57,14 +57,17 @@ const ( ) func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + +func (d *digest) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic...) b = byteorder.BeAppendUint32(b, d.s[0]) b = byteorder.BeAppendUint32(b, d.s[1]) b = byteorder.BeAppendUint32(b, d.s[2]) b = byteorder.BeAppendUint32(b, d.s[3]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-d.nx] // already zero + b = append(b, make([]byte, len(d.x)-d.nx)...) b = byteorder.BeAppendUint64(b, d.len) return b, nil } @@ -95,9 +98,10 @@ func consumeUint32(b []byte) ([]byte, uint32) { return b[4:], byteorder.BeUint32(b[0:4]) } -// New returns a new hash.Hash computing the MD5 checksum. The Hash also -// implements [encoding.BinaryMarshaler] and [encoding.BinaryUnmarshaler] to -// marshal and unmarshal the internal state of the hash. +// New returns a new [hash.Hash] computing the MD5 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.AppendBinary] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New() hash.Hash { d := new(digest) d.Reset() diff --git a/src/crypto/md5/md5_test.go b/src/crypto/md5/md5_test.go index a5b661126dd716..c445b10832f783 100644 --- a/src/crypto/md5/md5_test.go +++ b/src/crypto/md5/md5_test.go @@ -100,11 +100,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfState { t.Errorf("md5(%q) state = %q, want %q", g.in, state, g.halfState) continue } + if string(stateAppend) != g.halfState { + t.Errorf("md5(%q) stateAppend = %q, want %q", g.in, stateAppend, g.halfState) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue diff --git a/src/crypto/sha1/sha1.go b/src/crypto/sha1/sha1.go index c0742b9d83c527..8189d1946d8ea5 100644 --- a/src/crypto/sha1/sha1.go +++ b/src/crypto/sha1/sha1.go @@ -49,7 +49,10 @@ const ( ) func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + +func (d *digest) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic...) b = byteorder.BeAppendUint32(b, d.h[0]) b = byteorder.BeAppendUint32(b, d.h[1]) @@ -57,7 +60,7 @@ func (d *digest) MarshalBinary() ([]byte, error) { b = byteorder.BeAppendUint32(b, d.h[3]) b = byteorder.BeAppendUint32(b, d.h[4]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-d.nx] // already zero + b = append(b, make([]byte, len(d.x)-d.nx)...) b = byteorder.BeAppendUint64(b, d.len) return b, nil } @@ -99,9 +102,10 @@ func (d *digest) Reset() { d.len = 0 } -// New returns a new hash.Hash computing the SHA1 checksum. The Hash also -// implements [encoding.BinaryMarshaler] and [encoding.BinaryUnmarshaler] to -// marshal and unmarshal the internal state of the hash. +// New512_224 returns a new [hash.Hash] computing the SHA1 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New() hash.Hash { if boring.Enabled { return boring.NewSHA1() diff --git a/src/crypto/sha1/sha1_test.go b/src/crypto/sha1/sha1_test.go index 634ab9de1ba4cb..32b01d4dee362f 100644 --- a/src/crypto/sha1/sha1_test.go +++ b/src/crypto/sha1/sha1_test.go @@ -111,11 +111,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfState { t.Errorf("sha1(%q) state = %+q, want %+q", g.in, state, g.halfState) continue } + if string(stateAppend) != g.halfState { + t.Errorf("sha1(%q) stateAppend = %+q, want %+q", g.in, stateAppend, g.halfState) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue diff --git a/src/crypto/sha256/sha256.go b/src/crypto/sha256/sha256.go index 68244fd63b0c1e..7844f191e16b57 100644 --- a/src/crypto/sha256/sha256.go +++ b/src/crypto/sha256/sha256.go @@ -64,7 +64,10 @@ const ( ) func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + +func (d *digest) AppendBinary(b []byte) ([]byte, error) { if d.is224 { b = append(b, magic224...) } else { @@ -79,7 +82,7 @@ func (d *digest) MarshalBinary() ([]byte, error) { b = byteorder.BeAppendUint32(b, d.h[6]) b = byteorder.BeAppendUint32(b, d.h[7]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-d.nx] // already zero + b = append(b, make([]byte, len(d.x)-d.nx)...) b = byteorder.BeAppendUint64(b, d.len) return b, nil } @@ -138,8 +141,8 @@ func (d *digest) Reset() { d.len = 0 } -// New returns a new hash.Hash computing the SHA256 checksum. The Hash -// also implements [encoding.BinaryMarshaler] and +// New returns a new [hash.Hash] computing the SHA256 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and // [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal // state of the hash. func New() hash.Hash { @@ -151,7 +154,10 @@ func New() hash.Hash { return d } -// New224 returns a new hash.Hash computing the SHA224 checksum. +// New224 returns a new [hash.Hash] computing the SHA224 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New224() hash.Hash { if boring.Enabled { return boring.NewSHA224() diff --git a/src/crypto/sha256/sha256_test.go b/src/crypto/sha256/sha256_test.go index d91f01e9ba3a5f..92268f32da996b 100644 --- a/src/crypto/sha256/sha256_test.go +++ b/src/crypto/sha256/sha256_test.go @@ -163,11 +163,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfState { t.Errorf("sha%s(%q) state = %q, want %q", tt.name, g.in, state, g.halfState) continue } + if string(stateAppend) != g.halfState { + t.Errorf("sha%s(%q) stateAppend = %q, want %q", tt.name, g.in, stateAppend, g.halfState) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue diff --git a/src/crypto/sha512/sha512.go b/src/crypto/sha512/sha512.go index dde83625f7b852..0e2a34a1e347cf 100644 --- a/src/crypto/sha512/sha512.go +++ b/src/crypto/sha512/sha512.go @@ -140,7 +140,10 @@ const ( ) func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + +func (d *digest) AppendBinary(b []byte) ([]byte, error) { switch d.function { case crypto.SHA384: b = append(b, magic384...) @@ -162,7 +165,7 @@ func (d *digest) MarshalBinary() ([]byte, error) { b = byteorder.BeAppendUint64(b, d.h[6]) b = byteorder.BeAppendUint64(b, d.h[7]) b = append(b, d.x[:d.nx]...) - b = b[:len(b)+len(d.x)-d.nx] // already zero + b = append(b, make([]byte, len(d.x)-d.nx)...) b = byteorder.BeAppendUint64(b, d.len) return b, nil } @@ -201,7 +204,10 @@ func consumeUint64(b []byte) ([]byte, uint64) { return b[8:], byteorder.BeUint64(b) } -// New returns a new hash.Hash computing the SHA-512 checksum. +// New returns a new [hash.Hash] computing the SHA-512 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New() hash.Hash { if boring.Enabled { return boring.NewSHA512() @@ -211,21 +217,30 @@ func New() hash.Hash { return d } -// New512_224 returns a new hash.Hash computing the SHA-512/224 checksum. +// New512_224 returns a new [hash.Hash] computing the SHA-512/224 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New512_224() hash.Hash { d := &digest{function: crypto.SHA512_224} d.Reset() return d } -// New512_256 returns a new hash.Hash computing the SHA-512/256 checksum. +// New512_256 returns a new [hash.Hash] computing the SHA-512/256 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.BinaryAppender] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New512_256() hash.Hash { d := &digest{function: crypto.SHA512_256} d.Reset() return d } -// New384 returns a new hash.Hash computing the SHA-384 checksum. +// New384 returns a new [hash.Hash] computing the SHA-384 checksum. The Hash +// also implements [encoding.BinaryMarshaler], [encoding.AppendBinary] and +// [encoding.BinaryUnmarshaler] to marshal and unmarshal the internal +// state of the hash. func New384() hash.Hash { if boring.Enabled { return boring.NewSHA384() diff --git a/src/crypto/sha512/sha512_test.go b/src/crypto/sha512/sha512_test.go index a1ff571383e542..cfe6b571975b27 100644 --- a/src/crypto/sha512/sha512_test.go +++ b/src/crypto/sha512/sha512_test.go @@ -745,11 +745,23 @@ func TestGoldenMarshal(t *testing.T) { return } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + return + } + stateAppend = stateAppend[4:] + if string(state) != test.halfState { t.Errorf("New%s(%q) state = %q, want %q", tt.name, test.in, state, test.halfState) continue } + if string(stateAppend) != test.halfState { + t.Errorf("New%s(%q) stateAppend = %q, want %q", tt.name, test.in, stateAppend, test.halfState) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) return From 38f0a829aa041cbe5f694da52d733352aa5b70bc Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Thu, 1 Aug 2024 10:17:14 -0400 Subject: [PATCH 154/866] debug/buildid: treat too large string as "not a Go executable" If the length does not fit in int, saferio.ReadDataAt returns io.ErrUnexpectedEOF. Treat is as an invalid format. Fixes #68692. For #68592. Cq-Include-Trybots: luci.golang.try:gotip-linux-386-longtest Change-Id: Ie856f29c907fd10e6d9b7dfbb6f0d8008a75a1c6 Reviewed-on: https://go-review.googlesource.com/c/go/+/602435 Auto-Submit: Michael Pratt Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/debug/buildinfo/buildinfo.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/debug/buildinfo/buildinfo.go b/src/debug/buildinfo/buildinfo.go index fa02344cd3f572..f3d38b26e84af9 100644 --- a/src/debug/buildinfo/buildinfo.go +++ b/src/debug/buildinfo/buildinfo.go @@ -295,6 +295,10 @@ func decodeString(x exe, addr uint64) (string, uint64, error) { b, err = readData(x, addr, length) if err != nil { + if err == io.ErrUnexpectedEOF { + // Length too large to allocate. Clearly bogus value. + return "", 0, errNotGoExe + } return "", 0, err } if uint64(len(b)) < length { From 2caf638e2f8abf3ed765d553164fc3e46e1bf407 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Thu, 27 Jun 2024 17:18:51 -0400 Subject: [PATCH 155/866] runtime: don't use maps in js note implementation notes are used in sensitive locations in the runtime, such as those with write barriers forbidden. Maps aren't designed for this sort of internal use. Notably, newm -> notewakeup doesn't allow write barriers, but mapaccess1 -> panic contains write barriers. The js runtime only builds right now because the map access is optimized to mapaccess1_fast64, which happens to not have a panic call. The initial swisstable map implementation doesn't have a fast64 variant. While we could add one, it is a bad idea in general to use a map in such a fragile location. Simplify the implementation by storing the metadata directly in the note, and using a linked list for checkTimeouts. For #54766. Cq-Include-Trybots: luci.golang.try:gotip-js-wasm Change-Id: Ib9d39f064ae4ad32dcc873f799428717eb6c2d5a Reviewed-on: https://go-review.googlesource.com/c/go/+/595558 LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt Reviewed-by: Cherry Mui --- src/runtime/lock_js.go | 72 ++++++++++++++++++--------------------- src/runtime/note_js.go | 40 ++++++++++++++++++++++ src/runtime/note_other.go | 33 ++++++++++++++++++ src/runtime/runtime2.go | 27 --------------- 4 files changed, 106 insertions(+), 66 deletions(-) create mode 100644 src/runtime/note_js.go create mode 100644 src/runtime/note_other.go diff --git a/src/runtime/lock_js.go b/src/runtime/lock_js.go index b6ee5ec7afe269..fcb813df8182b8 100644 --- a/src/runtime/lock_js.go +++ b/src/runtime/lock_js.go @@ -63,29 +63,21 @@ func unlock2(l *mutex) { // One-time notifications. -type noteWithTimeout struct { - gp *g - deadline int64 -} - -var ( - notes = make(map[*note]*g) - notesWithTimeout = make(map[*note]noteWithTimeout) -) +// Linked list of notes with a deadline. +var allDeadlineNotes *note func noteclear(n *note) { - n.key = note_cleared + n.status = note_cleared } func notewakeup(n *note) { - // gp := getg() - if n.key == note_woken { + if n.status == note_woken { throw("notewakeup - double wakeup") } - cleared := n.key == note_cleared - n.key = note_woken + cleared := n.status == note_cleared + n.status = note_woken if cleared { - goready(notes[n], 1) + goready(n.gp, 1) } } @@ -113,48 +105,50 @@ func notetsleepg(n *note, ns int64) bool { } id := scheduleTimeoutEvent(delay) - mp := acquirem() - notes[n] = gp - notesWithTimeout[n] = noteWithTimeout{gp: gp, deadline: deadline} - releasem(mp) + + n.gp = gp + n.deadline = deadline + if allDeadlineNotes != nil { + allDeadlineNotes.allprev = n + } + n.allnext = allDeadlineNotes + allDeadlineNotes = n gopark(nil, nil, waitReasonSleep, traceBlockSleep, 1) clearTimeoutEvent(id) // note might have woken early, clear timeout - mp = acquirem() - delete(notes, n) - delete(notesWithTimeout, n) - releasem(mp) + n.gp = nil + n.deadline = 0 + if n.allprev != nil { + n.allprev.allnext = n.allnext + } + if allDeadlineNotes == n { + allDeadlineNotes = n.allnext + } + n.allprev = nil + n.allnext = nil - return n.key == note_woken + return n.status == note_woken } - for n.key != note_woken { - mp := acquirem() - notes[n] = gp - releasem(mp) + for n.status != note_woken { + n.gp = gp gopark(nil, nil, waitReasonZero, traceBlockGeneric, 1) - mp = acquirem() - delete(notes, n) - releasem(mp) + n.gp = nil } return true } // checkTimeouts resumes goroutines that are waiting on a note which has reached its deadline. -// TODO(drchase): need to understand if write barriers are really okay in this context. -// -//go:yeswritebarrierrec func checkTimeouts() { now := nanotime() - // TODO: map iteration has the write barriers in it; is that okay? - for n, nt := range notesWithTimeout { - if n.key == note_cleared && now >= nt.deadline { - n.key = note_timeout - goready(nt.gp, 1) + for n := allDeadlineNotes; n != nil; n = n.allnext { + if n.status == note_cleared && n.deadline != 0 && now >= n.deadline { + n.status = note_timeout + goready(n.gp, 1) } } } diff --git a/src/runtime/note_js.go b/src/runtime/note_js.go new file mode 100644 index 00000000000000..be43fa42b0bc59 --- /dev/null +++ b/src/runtime/note_js.go @@ -0,0 +1,40 @@ +// Copyright 2024 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 runtime + +// sleep and wakeup on one-time events. +// before any calls to notesleep or notewakeup, +// must call noteclear to initialize the Note. +// then, exactly one thread can call notesleep +// and exactly one thread can call notewakeup (once). +// once notewakeup has been called, the notesleep +// will return. future notesleep will return immediately. +// subsequent noteclear must be called only after +// previous notesleep has returned, e.g. it's disallowed +// to call noteclear straight after notewakeup. +// +// notetsleep is like notesleep but wakes up after +// a given number of nanoseconds even if the event +// has not yet happened. if a goroutine uses notetsleep to +// wake up early, it must wait to call noteclear until it +// can be sure that no other goroutine is calling +// notewakeup. +// +// notesleep/notetsleep are generally called on g0, +// notetsleepg is similar to notetsleep but is called on user g. +type note struct { + status int32 + + // The G waiting on this note. + gp *g + + // Deadline, if any. 0 indicates no timeout. + deadline int64 + + // allprev and allnext are used to form the allDeadlineNotes linked + // list. These are unused if there is no deadline. + allprev *note + allnext *note +} diff --git a/src/runtime/note_other.go b/src/runtime/note_other.go new file mode 100644 index 00000000000000..7f62c1c6c5f301 --- /dev/null +++ b/src/runtime/note_other.go @@ -0,0 +1,33 @@ +// Copyright 2024 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. + +//go:build !js + +package runtime + +// sleep and wakeup on one-time events. +// before any calls to notesleep or notewakeup, +// must call noteclear to initialize the Note. +// then, exactly one thread can call notesleep +// and exactly one thread can call notewakeup (once). +// once notewakeup has been called, the notesleep +// will return. future notesleep will return immediately. +// subsequent noteclear must be called only after +// previous notesleep has returned, e.g. it's disallowed +// to call noteclear straight after notewakeup. +// +// notetsleep is like notesleep but wakes up after +// a given number of nanoseconds even if the event +// has not yet happened. if a goroutine uses notetsleep to +// wake up early, it must wait to call noteclear until it +// can be sure that no other goroutine is calling +// notewakeup. +// +// notesleep/notetsleep are generally called on g0, +// notetsleepg is similar to notetsleep but is called on user g. +type note struct { + // Futex-based impl treats it as uint32 key, + // while sema-based impl as M* waitm. + key uintptr +} diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 62ed77aae56fed..68b0be48aa9bc3 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -170,33 +170,6 @@ type mutex struct { key uintptr } -// sleep and wakeup on one-time events. -// before any calls to notesleep or notewakeup, -// must call noteclear to initialize the Note. -// then, exactly one thread can call notesleep -// and exactly one thread can call notewakeup (once). -// once notewakeup has been called, the notesleep -// will return. future notesleep will return immediately. -// subsequent noteclear must be called only after -// previous notesleep has returned, e.g. it's disallowed -// to call noteclear straight after notewakeup. -// -// notetsleep is like notesleep but wakes up after -// a given number of nanoseconds even if the event -// has not yet happened. if a goroutine uses notetsleep to -// wake up early, it must wait to call noteclear until it -// can be sure that no other goroutine is calling -// notewakeup. -// -// notesleep/notetsleep are generally called on g0, -// notetsleepg is similar to notetsleep but is called on user g. -type note struct { - // Futex-based impl treats it as uint32 key, - // while sema-based impl as M* waitm. - // Used to be a union, but unions break precise GC. - key uintptr -} - type funcval struct { fn uintptr // variable-size, fn-specific data here From e50913cefcdb590cdf7d9432455de2847ef93851 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Thu, 1 Aug 2024 11:15:30 -0700 Subject: [PATCH 156/866] runtime: avoid futile mark worker acquisition During the GC mark phase, one of the first behaviors of findRunnable is to check if it should execute a GC mark worker. Mark workers often run for many milliseconds in a row, so programs that invoke the scheduler more frequently will see that condition trigger only a tiny fraction of the time. Obtaining a mark worker from the gcBgMarkWorkerPool involves a CAS on a single memory location that's shared across the process. When GOMAXPROCS is large, the resulting contention can waste a significant amount of CPU time. But a sufficiently large GOMAXPROCS also means there's no need for fractional mark workers, making it easier to check ahead of time if we need to run a worker. Check, without committing to a particular worker, whether we would even want to run one. For #68399 Change-Id: I5d8578c2101ee20a8a4156a029584356095ea118 Reviewed-on: https://go-review.googlesource.com/c/go/+/602477 Reviewed-by: Michael Pratt Auto-Submit: Rhys Hiltner Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/runtime/mgcpacer.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/runtime/mgcpacer.go b/src/runtime/mgcpacer.go index cda87fe9484483..3e80fae4f53464 100644 --- a/src/runtime/mgcpacer.go +++ b/src/runtime/mgcpacer.go @@ -752,6 +752,17 @@ func (c *gcControllerState) findRunnableGCWorker(pp *p, now int64) (*g, int64) { return nil, now } + if c.dedicatedMarkWorkersNeeded.Load() <= 0 && c.fractionalUtilizationGoal == 0 { + // No current need for dedicated workers, and no need at all for + // fractional workers. Check before trying to acquire a worker; when + // GOMAXPROCS is large, that can be expensive and is often unnecessary. + // + // When a dedicated worker stops running, the gcBgMarkWorker loop notes + // the need for the worker before returning it to the pool. If we don't + // see the need now, we wouldn't have found it in the pool anyway. + return nil, now + } + // Grab a worker before we commit to running below. node := (*gcBgMarkWorkerNode)(gcBgMarkWorkerPool.pop()) if node == nil { From 67c3f012cf5bfd69841c74666243281f0698e09f Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Thu, 1 Aug 2024 16:18:06 +0000 Subject: [PATCH 157/866] bytes,slices,strings: optimize Repeat a bit Like slices.Repeat, use math/bits.Mul to detect overflow in order to avoid a divide which is slow. While here, also use builtin min/max to simplify code. Change-Id: I4a6d8cd5df97fa75f4e324d4be1405ce53c03d31 GitHub-Last-Rev: 54ba5c7126b1d4a301e95d664b5f6deee6d579d9 GitHub-Pull-Request: golang/go#68704 Reviewed-on: https://go-review.googlesource.com/c/go/+/602475 Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Reviewed-by: Michael Knyszek --- src/bytes/bytes.go | 11 +++++------ src/slices/slices.go | 5 +++-- src/strings/strings.go | 14 +++++--------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/bytes/bytes.go b/src/bytes/bytes.go index 45d8d074753562..5c03e54d78761f 100644 --- a/src/bytes/bytes.go +++ b/src/bytes/bytes.go @@ -8,6 +8,7 @@ package bytes import ( "internal/bytealg" + "math/bits" "unicode" "unicode/utf8" _ "unsafe" // for linkname @@ -594,10 +595,11 @@ func Repeat(b []byte, count int) []byte { if count < 0 { panic("bytes: negative Repeat count") } - if len(b) > maxInt/count { + hi, lo := bits.Mul(uint(len(b)), uint(count)) + if hi > 0 || lo > uint(maxInt) { panic("bytes: Repeat output length overflow") } - n := len(b) * count + n := int(lo) // lo = len(b) * count if len(b) == 0 { return []byte{} @@ -624,10 +626,7 @@ func Repeat(b []byte, count int) []byte { nb := bytealg.MakeNoZero(n)[:n:n] bp := copy(nb, b) for bp < n { - chunk := bp - if chunk > chunkMax { - chunk = chunkMax - } + chunk := min(bp, chunkMax) bp += copy(nb[bp:], nb[:chunk]) } return nb diff --git a/src/slices/slices.go b/src/slices/slices.go index b3cd4e2c054001..200e653dde5067 100644 --- a/src/slices/slices.go +++ b/src/slices/slices.go @@ -496,11 +496,12 @@ func Repeat[S ~[]E, E any](x S, count int) S { } const maxInt = ^uint(0) >> 1 - if hi, lo := bits.Mul(uint(len(x)), uint(count)); hi > 0 || lo > maxInt { + hi, lo := bits.Mul(uint(len(x)), uint(count)) + if hi > 0 || lo > maxInt { panic("the result of (len(x) * count) overflows") } - newslice := make(S, len(x)*count) + newslice := make(S, int(lo)) // lo = len(x) * count n := copy(newslice, x) for n < len(newslice) { n += copy(newslice[n:], newslice[:n]) diff --git a/src/strings/strings.go b/src/strings/strings.go index 0bd3c1c2337801..0729c4ad425d34 100644 --- a/src/strings/strings.go +++ b/src/strings/strings.go @@ -10,6 +10,7 @@ package strings import ( "internal/bytealg" "internal/stringslite" + "math/bits" "unicode" "unicode/utf8" ) @@ -568,10 +569,11 @@ func Repeat(s string, count int) string { if count < 0 { panic("strings: negative Repeat count") } - if len(s) > maxInt/count { + hi, lo := bits.Mul(uint(len(s)), uint(count)) + if hi > 0 || lo > uint(maxInt) { panic("strings: Repeat output length overflow") } - n := len(s) * count + n := int(lo) // lo = len(s) * count if len(s) == 0 { return "" @@ -617,13 +619,7 @@ func Repeat(s string, count int) string { b.Grow(n) b.WriteString(s) for b.Len() < n { - chunk := n - b.Len() - if chunk > b.Len() { - chunk = b.Len() - } - if chunk > chunkMax { - chunk = chunkMax - } + chunk := min(n-b.Len(), b.Len(), chunkMax) b.WriteString(b.String()[:chunk]) } return b.String() From 11dbbaffe1db00d8726215c3fa56e02d66e78de5 Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Mon, 1 Apr 2024 15:05:45 +0800 Subject: [PATCH 158/866] cmd/internal/obj/loong64: add support for MOV{GR2FCSR/FCSR2GR/FR2CF/CF2FR} instructions Go asm syntax example: MOVV R4, FCSR0 MOVV FCSR1, R5 MOVV F4, FCC0 MOVV FCC1, F5 Equivalent platform assembler syntax: movgr2fcsr fcsr0, r4 movfcsr2gr r5, fcsr1 movfr2cf fcc0, f4 movcf2fr f5, fcc1 Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html This change also merges the case of floating point move instructions and add checks for the range of special registers. Change-Id: Ib08fbce83e7a31dc0ab4857bf9ba959855241d1c Reviewed-on: https://go-review.googlesource.com/c/go/+/580279 LUCI-TryBot-Result: Go LUCI Reviewed-by: abner chenc Reviewed-by: Michael Knyszek Reviewed-by: Cherry Mui --- .../asm/internal/asm/testdata/loong64enc1.s | 4 + src/cmd/internal/obj/loong64/asm.go | 125 +++++++++++------- 2 files changed, 81 insertions(+), 48 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index bd06f7227325e5..e648d178dddc19 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -213,6 +213,10 @@ lable2: RDTIMEHW R4, R0 // 80640000 RDTIMED R4, R5 // 85680000 + MOVV R4, FCSR3 // 83c01401 + MOVV FCSR3, R4 // 64c81401 + MOVV F4, FCC0 // 80d01401 + MOVV FCC0, F4 // 04d41401 MOVV FCC0, R4 // 04dc1401 MOVV R4, FCC0 // 80d81401 diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 0636ec18626789..8c9ff2096ed14a 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -256,12 +256,15 @@ var optab = []Optab{ {AMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, C_NONE, 50, 8, 0, 0}, {AMOVW, C_REG, C_NONE, C_NONE, C_FREG, C_NONE, 30, 4, 0, 0}, - {AMOVW, C_FREG, C_NONE, C_NONE, C_REG, C_NONE, 31, 4, 0, 0}, - {AMOVV, C_REG, C_NONE, C_NONE, C_FREG, C_NONE, 47, 4, 0, 0}, - {AMOVV, C_FREG, C_NONE, C_NONE, C_REG, C_NONE, 48, 4, 0, 0}, - - {AMOVV, C_FCCREG, C_NONE, C_NONE, C_REG, C_NONE, 63, 4, 0, 0}, - {AMOVV, C_REG, C_NONE, C_NONE, C_FCCREG, C_NONE, 64, 4, 0, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_FREG, C_NONE, 30, 4, 0, 0}, + {AMOVW, C_FREG, C_NONE, C_NONE, C_REG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_FREG, C_NONE, C_NONE, C_REG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_FCCREG, C_NONE, C_NONE, C_REG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_FCSRREG, C_NONE, C_NONE, C_REG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_FCCREG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_FCSRREG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_FREG, C_NONE, C_NONE, C_FCCREG, C_NONE, 30, 4, 0, 0}, + {AMOVV, C_FCCREG, C_NONE, C_NONE, C_FREG, C_NONE, 30, 4, 0, 0}, {AMOVW, C_ADDCON, C_NONE, C_NONE, C_FREG, C_NONE, 34, 8, 0, 0}, {AMOVW, C_ANDCON, C_NONE, C_NONE, C_FREG, C_NONE, 34, 8, 0, 0}, @@ -607,19 +610,7 @@ func (c *ctxt0) aclass(a *obj.Addr) int { return C_NONE case obj.TYPE_REG: - if REG_R0 <= a.Reg && a.Reg <= REG_R31 { - return C_REG - } - if REG_F0 <= a.Reg && a.Reg <= REG_F31 { - return C_FREG - } - if REG_FCSR0 <= a.Reg && a.Reg <= REG_FCSR31 { - return C_FCSRREG - } - if REG_FCC0 <= a.Reg && a.Reg <= REG_FCC31 { - return C_FCCREG - } - return C_GOK + return c.rclass(a.Reg) case obj.TYPE_MEM: switch a.Name { @@ -778,21 +769,27 @@ func (c *ctxt0) aclass(a *obj.Addr) int { return C_GOK } +// In Loong64,there are 8 CFRs, denoted as fcc0-fcc7. +// There are 4 FCSRs, denoted as fcsr0-fcsr3. func (c *ctxt0) rclass(r int16) int { switch { case REG_R0 <= r && r <= REG_R31: return C_REG case REG_F0 <= r && r <= REG_F31: return C_FREG - case REG_FCC0 <= r && r <= REG_FCC31: + case REG_FCC0 <= r && r <= REG_FCC7: return C_FCCREG - case REG_FCSR0 <= r && r <= REG_FCSR31: + case REG_FCSR0 <= r && r <= REG_FCSR3: return C_FCSRREG } return C_GOK } +func oclass(a *obj.Addr) int { + return int(a.Class) - 1 +} + func prasm(p *obj.Prog) { fmt.Printf("%v\n", p) } @@ -1179,10 +1176,6 @@ func buildop(ctxt *obj.Link) { } } -func OP_TEN(x uint32, y uint32) uint32 { - return x<<21 | y<<10 -} - // r1 -> rk // r2 -> rj // r3 -> rd @@ -1514,12 +1507,8 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_12IRR(c.opirr(p.As), uint32(v), uint32(r), uint32(p.From.Reg)) } - case 30: // movw r,fr - a := OP_TEN(8, 1321) // movgr2fr.w - o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) - - case 31: // movw fr,r - a := OP_TEN(8, 1325) // movfr2gr.s + case 30: // mov gr/fr/fcc/fcsr, fr/fcc/fcsr/gr + a := c.specailFpMovInst(p.As, oclass(&p.From), oclass(&p.To)) o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) case 34: // mov $con,fr @@ -1528,8 +1517,9 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { if o.from1 == C_ANDCON { a = AOR } + a2 := c.specailFpMovInst(p.As, C_REG, oclass(&p.To)) o1 = OP_12IRR(c.opirr(a), uint32(v), uint32(0), uint32(REGTMP)) - o2 = OP_RR(OP_TEN(8, 1321), uint32(REGTMP), uint32(p.To.Reg)) // movgr2fr.w + o2 = OP_RR(a2, uint32(REGTMP), uint32(p.To.Reg)) case 35: // mov r,lext/auto/oreg v := c.regoff(&p.To) @@ -1554,14 +1544,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { case 40: // word o1 = uint32(c.regoff(&p.From)) - case 47: // movv r,fr - a := OP_TEN(8, 1322) // movgr2fr.d - o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) - - case 48: // movv fr,r - a := OP_TEN(8, 1326) // movfr2gr.d - o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) - case 49: if p.As == ANOOP { // andi r0, r0, 0 @@ -1570,6 +1552,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { // undef o1 = OP_15I(c.opi(ABREAK), 0) } + // relocation operations case 50: // mov r,addr ==> pcalau12i + sw o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(REGTMP)) @@ -1726,14 +1709,6 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { case 62: // rdtimex rd, rj o1 = OP_RR(c.oprr(p.As), uint32(p.To.Reg), uint32(p.RegTo2)) - case 63: // movv c_fcc0, c_reg ==> movcf2gr rd, cj - a := OP_TEN(8, 1335) - o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) - - case 64: // movv c_reg, c_fcc0 ==> movgr2cf cd, rj - a := OP_TEN(8, 1334) - o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) - case 65: // mov sym@GOT, r ==> pcalau12i + ld.d o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(p.To.Reg)) rel := obj.Addrel(c.cursym) @@ -2119,6 +2094,60 @@ func (c *ctxt0) opirr(a obj.As) uint32 { return 0 } +func (c *ctxt0) specailFpMovInst(a obj.As, fclass int, tclass int) uint32 { + switch a { + case AMOVV: + switch fclass { + case C_REG: + switch tclass { + case C_FREG: + return 0x452a << 10 // movgr2fr.d + case C_FCCREG: + return 0x4536 << 10 // movgr2cf + case C_FCSRREG: + return 0x4530 << 10 // movgr2fcsr + } + case C_FREG: + switch tclass { + case C_REG: + return 0x452e << 10 // movfr2gr.d + case C_FCCREG: + return 0x4534 << 10 // movfr2cf + } + case C_FCCREG: + switch tclass { + case C_REG: + return 0x4537 << 10 // movcf2gr + case C_FREG: + return 0x4535 << 10 // movcf2fr + } + case C_FCSRREG: + switch tclass { + case C_REG: + return 0x4532 << 10 // movfcsr2gr + } + } + + case AMOVW: + switch fclass { + case C_REG: + switch tclass { + case C_FREG: + return 0x4529 << 10 // movgr2fr.w + } + case C_FREG: + switch tclass { + case C_REG: + return 0x452d << 10 // movfr2gr.s + } + } + } + + c.ctxt.Diag("bad class combination: %s %s,%s\n", a, fclass, tclass) + + return 0 +} + func vshift(a obj.As) bool { switch a { case ASLLV, From 9abd11440c5fa027304d6cda051fc0a30b6b430b Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Thu, 27 Jun 2024 19:52:30 +1000 Subject: [PATCH 159/866] math/big: implement addVV in riscv64 assembly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This provides an assembly implementation of addVV for riscv64, processing up to four words per loop, resulting in a significant performance gain. On a StarFive VisionFive 2: │ addvv.1 │ addvv.2 │ │ sec/op │ sec/op vs base │ AddVV/1-4 73.45n ± 0% 48.08n ± 0% -34.54% (p=0.000 n=10) AddVV/2-4 88.14n ± 0% 58.76n ± 0% -33.33% (p=0.000 n=10) AddVV/3-4 102.80n ± 0% 69.44n ± 0% -32.45% (p=0.000 n=10) AddVV/4-4 117.50n ± 0% 72.18n ± 0% -38.57% (p=0.000 n=10) AddVV/5-4 132.20n ± 0% 82.79n ± 0% -37.38% (p=0.000 n=10) AddVV/10-4 216.3n ± 0% 126.8n ± 0% -41.35% (p=0.000 n=10) AddVV/100-4 1659.0n ± 0% 885.2n ± 0% -46.64% (p=0.000 n=10) AddVV/1000-4 16.089µ ± 0% 8.400µ ± 0% -47.79% (p=0.000 n=10) AddVV/10000-4 245.3µ ± 0% 176.9µ ± 0% -27.88% (p=0.000 n=10) AddVV/100000-4 2.537m ± 0% 1.873m ± 0% -26.17% (p=0.000 n=10) geomean 1.435µ 904.5n -36.99% │ addvv.1 │ addvv.2 │ │ B/s │ B/s vs base │ AddVV/1-4 830.9Mi ± 0% 1269.5Mi ± 0% +52.78% (p=0.000 n=10) AddVV/2-4 1.353Gi ± 0% 2.029Gi ± 0% +50.00% (p=0.000 n=10) AddVV/3-4 1.739Gi ± 0% 2.575Gi ± 0% +48.09% (p=0.000 n=10) AddVV/4-4 2.029Gi ± 0% 3.303Gi ± 0% +62.82% (p=0.000 n=10) AddVV/5-4 2.254Gi ± 0% 3.600Gi ± 0% +59.69% (p=0.000 n=10) AddVV/10-4 2.755Gi ± 0% 4.699Gi ± 0% +70.54% (p=0.000 n=10) AddVV/100-4 3.594Gi ± 0% 6.734Gi ± 0% +87.37% (p=0.000 n=10) AddVV/1000-4 3.705Gi ± 0% 7.096Gi ± 0% +91.54% (p=0.000 n=10) AddVV/10000-4 2.430Gi ± 0% 3.369Gi ± 0% +38.65% (p=0.000 n=10) AddVV/100000-4 2.350Gi ± 0% 3.183Gi ± 0% +35.44% (p=0.000 n=10) geomean 2.119Gi 3.364Gi +58.71% Change-Id: I727b3d9f8ab01eada7270046480b1430d56d0a96 Reviewed-on: https://go-review.googlesource.com/c/go/+/595395 Reviewed-by: Cherry Mui Reviewed-by: David Chase Reviewed-by: M Zhuo LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh --- src/math/big/arith_riscv64.s | 81 +++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/src/math/big/arith_riscv64.s b/src/math/big/arith_riscv64.s index bad32497b71c67..67812dd646f734 100644 --- a/src/math/big/arith_riscv64.s +++ b/src/math/big/arith_riscv64.s @@ -10,7 +10,86 @@ // arithmetic operations on vectors implemented in arith.go. TEXT ·addVV(SB),NOSPLIT,$0 - JMP ·addVV_g(SB) + MOV x+24(FP), X5 + MOV y+48(FP), X6 + MOV z+0(FP), X7 + MOV z_len+8(FP), X30 + + MOV $4, X28 + MOV $0, X29 // c = 0 + + BEQZ X30, done + BLTU X30, X28, loop1 + +loop4: + MOV 0(X5), X8 // x[0] + MOV 0(X6), X9 // y[0] + MOV 8(X5), X11 // x[1] + MOV 8(X6), X12 // y[1] + MOV 16(X5), X14 // x[2] + MOV 16(X6), X15 // y[2] + MOV 24(X5), X17 // x[3] + MOV 24(X6), X18 // y[3] + + ADD X8, X9, X21 // z[0] = x[0] + y[0] + SLTU X8, X21, X22 + ADD X21, X29, X10 // z[0] = x[0] + y[0] + c + SLTU X21, X10, X23 + ADD X22, X23, X29 // next c + + ADD X11, X12, X24 // z[1] = x[1] + y[1] + SLTU X11, X24, X25 + ADD X24, X29, X13 // z[1] = x[1] + y[1] + c + SLTU X24, X13, X26 + ADD X25, X26, X29 // next c + + ADD X14, X15, X21 // z[2] = x[2] + y[2] + SLTU X14, X21, X22 + ADD X21, X29, X16 // z[2] = x[2] + y[2] + c + SLTU X21, X16, X23 + ADD X22, X23, X29 // next c + + ADD X17, X18, X21 // z[3] = x[3] + y[3] + SLTU X17, X21, X22 + ADD X21, X29, X19 // z[3] = x[3] + y[3] + c + SLTU X21, X19, X23 + ADD X22, X23, X29 // next c + + MOV X10, 0(X7) // z[0] + MOV X13, 8(X7) // z[1] + MOV X16, 16(X7) // z[2] + MOV X19, 24(X7) // z[3] + + ADD $32, X5 + ADD $32, X6 + ADD $32, X7 + SUB $4, X30 + + BGEU X30, X28, loop4 + BEQZ X30, done + +loop1: + MOV 0(X5), X10 // x + MOV 0(X6), X11 // y + + ADD X10, X11, X12 // z = x + y + SLTU X10, X12, X14 + ADD X12, X29, X13 // z = x + y + c + SLTU X12, X13, X15 + ADD X14, X15, X29 // next c + + MOV X13, 0(X7) // z + + ADD $8, X5 + ADD $8, X6 + ADD $8, X7 + SUB $1, X30 + + BNEZ X30, loop1 + +done: + MOV X29, c+72(FP) // return c + RET TEXT ·subVV(SB),NOSPLIT,$0 JMP ·subVV_g(SB) From e7619216888cdd25e445d06bc424532a922fdf94 Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Wed, 10 Apr 2024 11:37:56 +0800 Subject: [PATCH 160/866] cmd/internal/obj/loong64: add support for instructions F{MAX/NIN}.{S/D} Go asm syntax: F{MAX/MIN}{F/D} FK, FJ, FD Equivalent platform assembler syntax: f{max/min}.{s/d} fd, fj, fk Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: Ib11fed1fe3700be5ebba33b5818661c4071b7b7c Reviewed-on: https://go-review.googlesource.com/c/go/+/590676 Reviewed-by: abner chenc Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Auto-Submit: abner chenc --- src/cmd/asm/internal/asm/testdata/loong64enc1.s | 9 +++++++++ src/cmd/internal/obj/loong64/a.out.go | 6 ++++++ src/cmd/internal/obj/loong64/anames.go | 4 ++++ src/cmd/internal/obj/loong64/asm.go | 12 ++++++++++++ 4 files changed, 31 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index e648d178dddc19..e16bd78feefeeb 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -269,3 +269,12 @@ lable2: AMMAXDBVU R14, (R13), R12 // acb97038 AMMINDBWU R14, (R13), R12 // ac397138 AMMINDBVU R14, (R13), R12 // acb97138 + + FMINF F4, F5, F6 // a6900a01 + FMINF F4, F5 // a5900a01 + FMIND F4, F5, F6 // a6100b01 + FMIND F4, F5 // a5100b01 + FMAXF F4, F5, F6 // a6900801 + FMAXF F4, F5 // a5900801 + FMAXD F4, F5, F6 // a6100901 + FMAXD F4, F5 // a5100901 diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index cf5c74fde2ebb0..9309a3b09a9c1f 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -440,6 +440,12 @@ const ( ARDTIMED ACPUCFG + // 3.2.1.3 + AFMINF + AFMIND + AFMAXF + AFMAXD + ALAST // aliases diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index 9bfc57e239b7e7..42d9ea4d18e5aa 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -179,5 +179,9 @@ var Anames = []string{ "RDTIMEHW", "RDTIMED", "CPUCFG", + "FMINF", + "FMIND", + "FMAXF", + "FMAXD", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 8c9ff2096ed14a..c0f9dee380491d 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1052,6 +1052,10 @@ func buildop(ctxt *obj.Link) { opset(ASUBF, r0) opset(ASUBD, r0) opset(AADDD, r0) + opset(AFMINF, r0) + opset(AFMIND, r0) + opset(AFMAXF, r0) + opset(AFMAXD, r0) case AAND: opset(AOR, r0) @@ -1872,6 +1876,14 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return 0x0c2<<20 | 0x3<<15 // FCMP.SLT.D case ACMPGTF: return 0x0c1<<20 | 0x3<<15 // FCMP.SLT.S + case AFMINF: + return 0x215 << 15 // fmin.s + case AFMIND: + return 0x216 << 15 // fmin.d + case AFMAXF: + return 0x211 << 15 // fmax.s + case AFMAXD: + return 0x212 << 15 // fmax.d } if a < 0 { From 492e2b64dad81094a284f572b66eed93ee342fa7 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Thu, 1 Aug 2024 23:42:58 +0000 Subject: [PATCH 161/866] time: fix some typos in CL 512355 Change-Id: Id0fb180a2d7910cdff7f4ab7154d9ceeb2f1cb71 GitHub-Last-Rev: 03658dd9747684f69ea238a8d1d7f7d15446099e GitHub-Pull-Request: golang/go#68709 Reviewed-on: https://go-review.googlesource.com/c/go/+/602675 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Auto-Submit: Ian Lance Taylor --- src/runtime/time.go | 2 +- src/time/sleep.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/time.go b/src/runtime/time.go index 79f0514c6eec0a..abaf99aec51ac1 100644 --- a/src/runtime/time.go +++ b/src/runtime/time.go @@ -38,7 +38,7 @@ type timer struct { // The arg and seq are client-specified opaque arguments passed back to f. // When used from netpoll, arg and seq have meanings defined by netpoll // and are completely opaque to this code; in that context, seq is a sequence - // number to recognize and squech stale function invocations. + // number to recognize and squelch stale function invocations. // When used from package time, arg is a channel (for After, NewTicker) // or the function to call (for AfterFunc) and seq is unused (0). // diff --git a/src/time/sleep.go b/src/time/sleep.go index 7e2fa0c20af46e..d128efb0f1497b 100644 --- a/src/time/sleep.go +++ b/src/time/sleep.go @@ -180,7 +180,7 @@ func (t *Timer) Reset(d Duration) bool { func sendTime(c any, seq uintptr, delta int64) { // delta is how long ago the channel send was supposed to happen. // The current time can be arbitrarily far into the future, because the runtime - // can delay a sendTime call until a goroutines tries to receive from + // can delay a sendTime call until a goroutine tries to receive from // the channel. Subtract delta to go back to the old time that we // used to send. select { From 3a55b92ccffc9211d2aac68802433712f126ec75 Mon Sep 17 00:00:00 2001 From: limeidan Date: Tue, 21 May 2024 19:23:44 +0800 Subject: [PATCH 162/866] runtime: add debug call injection support on loong64 Change-Id: Iaf2bd9da0b35c20c5b57db2eb9b2eea2b662140c Reviewed-on: https://go-review.googlesource.com/c/go/+/587055 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: abner chenc Reviewed-by: Michael Knyszek Auto-Submit: abner chenc --- src/runtime/asm_loong64.s | 227 +++++++++++++++++++++++ src/runtime/debug_test.go | 2 +- src/runtime/debugcall.go | 2 +- src/runtime/export_debug_loong64_test.go | 227 +++++++++++++++++++++++ src/runtime/export_debug_test.go | 2 +- src/runtime/signal_loong64.go | 7 +- 6 files changed, 461 insertions(+), 6 deletions(-) create mode 100644 src/runtime/export_debug_loong64_test.go diff --git a/src/runtime/asm_loong64.s b/src/runtime/asm_loong64.s index c16b27a0f27669..c6e46f5f69285c 100644 --- a/src/runtime/asm_loong64.s +++ b/src/runtime/asm_loong64.s @@ -69,6 +69,10 @@ nocgo: // start this M JAL runtime·mstart(SB) + // Prevent dead-code elimination of debugCallV2, which is + // intended to be called by debuggers. + MOVV $runtime·debugCallV2(SB), R0 + MOVV R0, 1(R0) RET @@ -882,6 +886,229 @@ TEXT runtime·gcWriteBarrier8(SB),NOSPLIT,$0 MOVV $64, R29 JMP gcWriteBarrier<>(SB) +DATA debugCallFrameTooLarge<>+0x00(SB)/20, $"call frame too large" +GLOBL debugCallFrameTooLarge<>(SB), RODATA, $20 // Size duplicated below + +// debugCallV2 is the entry point for debugger-injected function +// calls on running goroutines. It informs the runtime that a +// debug call has been injected and creates a call frame for the +// debugger to fill in. +// +// To inject a function call, a debugger should: +// 1. Check that the goroutine is in state _Grunning and that +// there are at least 280 bytes free on the stack. +// 2. Set SP as SP-8. +// 3. Store the current LR in (SP) (using the SP after step 2). +// 4. Store the current PC in the LR register. +// 5. Write the desired argument frame size at SP-8 +// 6. Save all machine registers so they can be restored later by the debugger. +// 7. Set the PC to debugCallV2 and resume execution. +// +// If the goroutine is in state _Grunnable, then it's not generally +// safe to inject a call because it may return out via other runtime +// operations. Instead, the debugger should unwind the stack to find +// the return to non-runtime code, add a temporary breakpoint there, +// and inject the call once that breakpoint is hit. +// +// If the goroutine is in any other state, it's not safe to inject a call. +// +// This function communicates back to the debugger by setting R19 and +// invoking BREAK to raise a breakpoint signal. Note that the signal PC of +// the signal triggered by the BREAK instruction is the PC where the signal +// is trapped, not the next PC, so to resume execution, the debugger needs +// to set the signal PC to PC+4. See the comments in the implementation for +// the protocol the debugger is expected to follow. InjectDebugCall in the +// runtime tests demonstrates this protocol. +// +// The debugger must ensure that any pointers passed to the function +// obey escape analysis requirements. Specifically, it must not pass +// a stack pointer to an escaping argument. debugCallV2 cannot check +// this invariant. +// +// This is ABIInternal because Go code injects its PC directly into new +// goroutine stacks. +TEXT runtime·debugCallV2(SB),NOSPLIT|NOFRAME,$0-0 + MOVV R1, -272(R3) + ADDV $-272, R3 + + // We can't do anything that might clobber any of these + // registers before this. + MOVV R2, (4*8)(R3) + MOVV R4, (5*8)(R3) + MOVV R5, (6*8)(R3) + MOVV R6, (7*8)(R3) + MOVV R7, (8*8)(R3) + MOVV R8, (9*8)(R3) + MOVV R9, (10*8)(R3) + MOVV R10, (11*8)(R3) + MOVV R11, (12*8)(R3) + MOVV R12, (13*8)(R3) + MOVV R13, (14*8)(R3) + MOVV R14, (15*8)(R3) + MOVV R15, (16*8)(R3) + MOVV R16, (17*8)(R3) + MOVV R17, (18*8)(R3) + MOVV R18, (19*8)(R3) + MOVV R19, (20*8)(R3) + MOVV R20, (21*8)(R3) + MOVV R21, (22*8)(R3) + MOVV g, (23*8)(R3) + MOVV R23, (24*8)(R3) + MOVV R24, (25*8)(R3) + MOVV R25, (26*8)(R3) + MOVV R26, (27*8)(R3) + MOVV R27, (28*8)(R3) + MOVV R28, (29*8)(R3) + MOVV R29, (30*8)(R3) + MOVV R30, (31*8)(R3) + MOVV R31, (32*8)(R3) + + // Perform a safe-point check. + MOVV R1, 8(R3) + CALL runtime·debugCallCheck(SB) + MOVV 16(R3), R30 + BEQ R30, good + + // The safety check failed. Put the reason string at the top + // of the stack. + MOVV R30, 8(R3) + + MOVV 24(R3), R30 + MOVV R30, 16(R3) + + MOVV $8, R19 + BREAK + JMP restore + +good: + // Registers are saved and it's safe to make a call. + // Open up a call frame, moving the stack if necessary. + // + // Once the frame is allocated, this will set R19 to 0 and + // invoke BREAK. The debugger should write the argument + // frame for the call at SP+8, set up argument registers, + // set the LR as the signal PC + 4, set the PC to the function + // to call, set R29 to point to the closure (if a closure call), + // and resume execution. + // + // If the function returns, this will set R19 to 1 and invoke + // BREAK. The debugger can then inspect any return value saved + // on the stack at SP+8 and in registers. To resume execution, + // the debugger should restore the LR from (SP). + // + // If the function panics, this will set R19 to 2 and invoke BREAK. + // The interface{} value of the panic will be at SP+8. The debugger + // can inspect the panic value and resume execution again. +#define DEBUG_CALL_DISPATCH(NAME,MAXSIZE) \ + MOVV $MAXSIZE, R27; \ + BLT R27, R30, 5(PC); \ + MOVV $NAME(SB), R28; \ + MOVV R28, 8(R3); \ + CALL runtime·debugCallWrap(SB); \ + JMP restore + + MOVV 264(R3), R30 // the argument frame size + DEBUG_CALL_DISPATCH(debugCall32<>, 32) + DEBUG_CALL_DISPATCH(debugCall64<>, 64) + DEBUG_CALL_DISPATCH(debugCall128<>, 128) + DEBUG_CALL_DISPATCH(debugCall256<>, 256) + DEBUG_CALL_DISPATCH(debugCall512<>, 512) + DEBUG_CALL_DISPATCH(debugCall1024<>, 1024) + DEBUG_CALL_DISPATCH(debugCall2048<>, 2048) + DEBUG_CALL_DISPATCH(debugCall4096<>, 4096) + DEBUG_CALL_DISPATCH(debugCall8192<>, 8192) + DEBUG_CALL_DISPATCH(debugCall16384<>, 16384) + DEBUG_CALL_DISPATCH(debugCall32768<>, 32768) + DEBUG_CALL_DISPATCH(debugCall65536<>, 65536) + // The frame size is too large. Report the error. + MOVV $debugCallFrameTooLarge<>(SB), R30 + MOVV R30, 8(R3) + MOVV $20, R30 + MOVV R30, 16(R3) // length of debugCallFrameTooLarge string + MOVV $8, R19 + BREAK + JMP restore + +restore: + // Calls and failures resume here. + // + // Set R19 to 16 and invoke BREAK. The debugger should restore + // all registers except for PC and SP and resume execution. + MOVV $16, R19 + BREAK + // We must not modify flags after this point. + + // Restore pointer-containing registers, which may have been + // modified from the debugger's copy by stack copying. + MOVV (4*8)(R3), R2 + MOVV (5*8)(R3), R4 + MOVV (6*8)(R3), R5 + MOVV (7*8)(R3), R6 + MOVV (8*8)(R3), R7 + MOVV (9*8)(R3), R8 + MOVV (10*8)(R3), R9 + MOVV (11*8)(R3), R10 + MOVV (12*8)(R3), R11 + MOVV (13*8)(R3), R12 + MOVV (14*8)(R3), R13 + MOVV (15*8)(R3), R14 + MOVV (16*8)(R3), R15 + MOVV (17*8)(R3), R16 + MOVV (18*8)(R3), R17 + MOVV (19*8)(R3), R18 + MOVV (20*8)(R3), R19 + MOVV (21*8)(R3), R20 + MOVV (22*8)(R3), R21 + MOVV (23*8)(R3), g + MOVV (24*8)(R3), R23 + MOVV (25*8)(R3), R24 + MOVV (26*8)(R3), R25 + MOVV (27*8)(R3), R26 + MOVV (28*8)(R3), R27 + MOVV (29*8)(R3), R28 + MOVV (30*8)(R3), R29 + MOVV (31*8)(R3), R30 + MOVV (32*8)(R3), R31 + + MOVV 0(R3), R30 + ADDV $280, R3 // Add 8 more bytes, see saveSigContext + MOVV -8(R3), R1 + JMP (R30) + +// runtime.debugCallCheck assumes that functions defined with the +// DEBUG_CALL_FN macro are safe points to inject calls. +#define DEBUG_CALL_FN(NAME,MAXSIZE) \ +TEXT NAME(SB),WRAPPER,$MAXSIZE-0; \ + NO_LOCAL_POINTERS; \ + MOVV $0, R19; \ + BREAK; \ + MOVV $1, R19; \ + BREAK; \ + RET +DEBUG_CALL_FN(debugCall32<>, 32) +DEBUG_CALL_FN(debugCall64<>, 64) +DEBUG_CALL_FN(debugCall128<>, 128) +DEBUG_CALL_FN(debugCall256<>, 256) +DEBUG_CALL_FN(debugCall512<>, 512) +DEBUG_CALL_FN(debugCall1024<>, 1024) +DEBUG_CALL_FN(debugCall2048<>, 2048) +DEBUG_CALL_FN(debugCall4096<>, 4096) +DEBUG_CALL_FN(debugCall8192<>, 8192) +DEBUG_CALL_FN(debugCall16384<>, 16384) +DEBUG_CALL_FN(debugCall32768<>, 32768) +DEBUG_CALL_FN(debugCall65536<>, 65536) + +// func debugCallPanicked(val interface{}) +TEXT runtime·debugCallPanicked(SB),NOSPLIT,$16-16 + // Copy the panic value to the top of stack at SP+8. + MOVV val_type+0(FP), R30 + MOVV R30, 8(R3) + MOVV val_data+8(FP), R30 + MOVV R30, 16(R3) + MOVV $2, R19 + BREAK + RET + // Note: these functions use a special calling convention to save generated code space. // Arguments are passed in registers, but the space for those arguments are allocated // in the caller's stack frame. These stubs write the args into that stack space and diff --git a/src/runtime/debug_test.go b/src/runtime/debug_test.go index 1c00d2fb0d918b..0ee873d43f52e1 100644 --- a/src/runtime/debug_test.go +++ b/src/runtime/debug_test.go @@ -9,7 +9,7 @@ // spends all of its time in the race runtime, which isn't a safe // point. -//go:build (amd64 || arm64 || ppc64le) && linux && !race +//go:build (amd64 || arm64 || loong64 || ppc64le) && linux && !race package runtime_test diff --git a/src/runtime/debugcall.go b/src/runtime/debugcall.go index fee4116aa5e707..a9be4f4ee35d49 100644 --- a/src/runtime/debugcall.go +++ b/src/runtime/debugcall.go @@ -5,7 +5,7 @@ // Though the debug call function feature is not enabled on // ppc64, inserted ppc64 to avoid missing Go declaration error // for debugCallPanicked while building runtime.test -//go:build amd64 || arm64 || ppc64le || ppc64 +//go:build amd64 || arm64 || loong64 || ppc64le || ppc64 package runtime diff --git a/src/runtime/export_debug_loong64_test.go b/src/runtime/export_debug_loong64_test.go new file mode 100644 index 00000000000000..eaaf3598923c7c --- /dev/null +++ b/src/runtime/export_debug_loong64_test.go @@ -0,0 +1,227 @@ +// Copyright 2024 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. + +//go:build loong64 && linux + +package runtime + +import ( + "internal/abi" + "internal/goarch" + "unsafe" +) + +type sigContext struct { + savedRegs sigcontext +} + +func sigctxtSetContextRegister(ctxt *sigctxt, x uint64) { + ctxt.regs().sc_regs[29] = x +} + +func sigctxtAtTrapInstruction(ctxt *sigctxt) bool { + return *(*uint32)(unsafe.Pointer(ctxt.sigpc())) == 0x002a0000 // BREAK 0 +} + +func sigctxtStatus(ctxt *sigctxt) uint64 { + return ctxt.r19() +} + +func (h *debugCallHandler) saveSigContext(ctxt *sigctxt) { + sp := ctxt.sp() + sp -= goarch.PtrSize + ctxt.set_sp(sp) + *(*uint64)(unsafe.Pointer(uintptr(sp))) = ctxt.link() // save the current lr + ctxt.set_link(ctxt.pc()) // set new lr to the current pc + // Write the argument frame size. + *(*uintptr)(unsafe.Pointer(uintptr(sp - 8))) = h.argSize + // Save current registers. + h.sigCtxt.savedRegs = *ctxt.regs() +} + +// case 0 +func (h *debugCallHandler) debugCallRun(ctxt *sigctxt) { + sp := ctxt.sp() + memmove(unsafe.Pointer(uintptr(sp)+8), h.argp, h.argSize) + if h.regArgs != nil { + storeRegArgs(ctxt.regs(), h.regArgs) + } + // Push return PC, which should be the signal PC+4, because + // the signal PC is the PC of the trap instruction itself. + ctxt.set_link(ctxt.pc() + 4) + // Set PC to call and context register. + ctxt.set_pc(uint64(h.fv.fn)) + sigctxtSetContextRegister(ctxt, uint64(uintptr(unsafe.Pointer(h.fv)))) +} + +// case 1 +func (h *debugCallHandler) debugCallReturn(ctxt *sigctxt) { + sp := ctxt.sp() + memmove(h.argp, unsafe.Pointer(uintptr(sp)+8), h.argSize) + if h.regArgs != nil { + loadRegArgs(h.regArgs, ctxt.regs()) + } + // Restore the old lr from *sp + olr := *(*uint64)(unsafe.Pointer(uintptr(sp))) + ctxt.set_link(olr) + pc := ctxt.pc() + ctxt.set_pc(pc + 4) // step to next instruction +} + +// case 2 +func (h *debugCallHandler) debugCallPanicOut(ctxt *sigctxt) { + sp := ctxt.sp() + memmove(unsafe.Pointer(&h.panic), unsafe.Pointer(uintptr(sp)+8), 2*goarch.PtrSize) + ctxt.set_pc(ctxt.pc() + 4) +} + +// case 8 +func (h *debugCallHandler) debugCallUnsafe(ctxt *sigctxt) { + sp := ctxt.sp() + reason := *(*string)(unsafe.Pointer(uintptr(sp) + 8)) + h.err = plainError(reason) + ctxt.set_pc(ctxt.pc() + 4) +} + +// case 16 +func (h *debugCallHandler) restoreSigContext(ctxt *sigctxt) { + // Restore all registers except for pc and sp + pc, sp := ctxt.pc(), ctxt.sp() + *ctxt.regs() = h.sigCtxt.savedRegs + ctxt.set_pc(pc + 4) + ctxt.set_sp(sp) +} + +func getVal32(base uintptr, off uintptr) uint32 { + return *(*uint32)(unsafe.Pointer(base + off)) +} + +func getVal64(base uintptr, off uintptr) uint64 { + return *(*uint64)(unsafe.Pointer(base + off)) +} + +func setVal64(base uintptr, off uintptr, val uint64) { + *(*uint64)(unsafe.Pointer(base + off)) = val +} + +// Layout for sigcontext on linux/loong64: arch/loongarch/include/uapi/asm/sigcontext.h +// +// sc_extcontext | sctx_info +// ------------------------------------------ +// | {fpu,lsx,lasx}_context +// --------------------------- +// | sctx_info +// --------------------------- +// | lbt_context +// + +const ( + INVALID_MAGIC uint32 = 0 + FPU_CTX_MAGIC = 0x46505501 + LSX_CTX_MAGIC = 0x53580001 + LASX_CTX_MAGIC = 0x41535801 + LBT_CTX_MAGIC = 0x42540001 +) + +const ( + SCTX_INFO_SIZE = 4 + 4 + 8 + FPU_CTX_SIZE = 8*32 + 8 + 4 // fpu context size + LSX_CTX_SIZE = 8*64 + 8 + 4 // lsx context size + LASX_CTX_SIZE = 8*128 + 8 + 4 // lasx context size + LBT_CTX_SIZE = 8*4 + 4 + 4 // lbt context size +) + +// storeRegArgs sets up argument registers in the signal context state +// from an abi.RegArgs. +// +// Both src and dst must be non-nil. +func storeRegArgs(dst *sigcontext, src *abi.RegArgs) { + // R4..R19 are used to pass int arguments in registers on loong64 + for i := 0; i < abi.IntArgRegs; i++ { + dst.sc_regs[i+4] = (uint64)(src.Ints[i]) + } + + // F0..F15 are used to pass float arguments in registers on loong64 + offset := (uintptr)(0) + baseAddr := (uintptr)(unsafe.Pointer(&dst.sc_extcontext)) + + for { + magic := getVal32(baseAddr, offset) + size := getVal32(baseAddr, offset+4) + + switch magic { + case INVALID_MAGIC: + return + + case FPU_CTX_MAGIC: + offset += SCTX_INFO_SIZE + for i := 0; i < abi.FloatArgRegs; i++ { + setVal64(baseAddr, ((uintptr)(i*8) + offset), src.Floats[i]) + } + return + + case LSX_CTX_MAGIC: + offset += SCTX_INFO_SIZE + for i := 0; i < abi.FloatArgRegs; i++ { + setVal64(baseAddr, ((uintptr)(i*16) + offset), src.Floats[i]) + } + return + + case LASX_CTX_MAGIC: + offset += SCTX_INFO_SIZE + for i := 0; i < abi.FloatArgRegs; i++ { + setVal64(baseAddr, ((uintptr)(i*32) + offset), src.Floats[i]) + } + return + + case LBT_CTX_MAGIC: + offset += uintptr(size) + } + } +} + +func loadRegArgs(dst *abi.RegArgs, src *sigcontext) { + // R4..R19 are used to pass int arguments in registers on loong64 + for i := 0; i < abi.IntArgRegs; i++ { + dst.Ints[i] = uintptr(src.sc_regs[i+4]) + } + + // F0..F15 are used to pass float arguments in registers on loong64 + offset := (uintptr)(0) + baseAddr := (uintptr)(unsafe.Pointer(&src.sc_extcontext)) + + for { + magic := getVal32(baseAddr, offset) + size := getVal32(baseAddr, (offset + 4)) + + switch magic { + case INVALID_MAGIC: + return + + case FPU_CTX_MAGIC: + offset += SCTX_INFO_SIZE + for i := 0; i < abi.FloatArgRegs; i++ { + dst.Floats[i] = getVal64(baseAddr, (uintptr(i*8) + offset)) + } + return + + case LSX_CTX_MAGIC: + offset += SCTX_INFO_SIZE + for i := 0; i < abi.FloatArgRegs; i++ { + dst.Floats[i] = getVal64(baseAddr, (uintptr(i*16) + offset)) + } + return + + case LASX_CTX_MAGIC: + offset += SCTX_INFO_SIZE + for i := 0; i < abi.FloatArgRegs; i++ { + dst.Floats[i] = getVal64(baseAddr, (uintptr(i*32) + offset)) + } + return + + case LBT_CTX_MAGIC: + offset += uintptr(size) + } + } +} diff --git a/src/runtime/export_debug_test.go b/src/runtime/export_debug_test.go index 4e0a4ef97e9d07..96f6fd9eea46ea 100644 --- a/src/runtime/export_debug_test.go +++ b/src/runtime/export_debug_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 (amd64 || arm64 || ppc64le) && linux +//go:build (amd64 || arm64 || loong64 || ppc64le) && linux package runtime diff --git a/src/runtime/signal_loong64.go b/src/runtime/signal_loong64.go index ac842c0c9494f8..970af01ceee976 100644 --- a/src/runtime/signal_loong64.go +++ b/src/runtime/signal_loong64.go @@ -53,9 +53,10 @@ func dumpregs(c *sigctxt) { //go:nowritebarrierrec func (c *sigctxt) sigpc() uintptr { return uintptr(c.pc()) } -func (c *sigctxt) sigsp() uintptr { return uintptr(c.sp()) } -func (c *sigctxt) siglr() uintptr { return uintptr(c.link()) } -func (c *sigctxt) fault() uintptr { return uintptr(c.sigaddr()) } +func (c *sigctxt) setsigpc(x uint64) { c.set_pc(x) } +func (c *sigctxt) sigsp() uintptr { return uintptr(c.sp()) } +func (c *sigctxt) siglr() uintptr { return uintptr(c.link()) } +func (c *sigctxt) fault() uintptr { return uintptr(c.sigaddr()) } // preparePanic sets up the stack to look like a call to sigpanic. func (c *sigctxt) preparePanic(sig uint32, gp *g) { From a9ad410801a762282eddad132c5346462881a2cb Mon Sep 17 00:00:00 2001 From: limeidan Date: Fri, 12 Jan 2024 10:46:57 +0800 Subject: [PATCH 163/866] cmd/internal/obj/loong64: adjust the order of class names Change-Id: I0ff9a4f7b4758f44eaedfd821ad80a86b58e55a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/565625 Reviewed-by: Qiqi Huang Reviewed-by: Michael Knyszek Reviewed-by: sophie zhao LUCI-TryBot-Result: Go LUCI Auto-Submit: abner chenc Reviewed-by: abner chenc Reviewed-by: Dmitri Shuralyov --- src/cmd/internal/obj/loong64/a.out.go | 4 ++-- src/cmd/internal/obj/loong64/cnames.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 9309a3b09a9c1f..e48160eaa292ef 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -210,21 +210,21 @@ const ( C_DCON // other 64 (could subdivide further) C_SACON // $n(REG) where n <= int12 C_LACON // $n(REG) where int12 < n <= int32 - C_EXTADDR // external symbol address C_DACON // $n(REG) where int32 < n + C_EXTADDR // external symbol address C_BRAN C_SAUTO C_LAUTO C_ZOREG C_SOREG C_LOREG - C_GOK C_ADDR C_TLS_LE C_TLS_IE C_GOTADDR C_TEXTSIZE + C_GOK C_NCLASS // must be the last ) diff --git a/src/cmd/internal/obj/loong64/cnames.go b/src/cmd/internal/obj/loong64/cnames.go index 8e103b888f49bc..985a331defa0fd 100644 --- a/src/cmd/internal/obj/loong64/cnames.go +++ b/src/cmd/internal/obj/loong64/cnames.go @@ -22,19 +22,19 @@ var cnames0 = []string{ "DCON", "SACON", "LACON", - "EXTADDR", "DACON", + "EXTADDR", "BRAN", "SAUTO", "LAUTO", "ZOREG", "SOREG", "LOREG", - "GOK", "ADDR", "TLS_LE", "TLS_IE", "GOTADDR", "TEXTSIZE", + "GOK", "NCLASS", } From c5f2e4e56e2d3b13737de597be62f3020d59c137 Mon Sep 17 00:00:00 2001 From: Manuel Sabin Date: Thu, 27 Jun 2024 15:06:55 -0400 Subject: [PATCH 164/866] crypto/internal/cryptotest: add tests for the cipher.Stream interface This CL creates tests for the cipher.Stream interface in the new cryptotest package. This set of tests is called from the tests of implementations of the Stream interface e.g. ctr_test.go, ofb_test.go, rc4_test.go, etc. Updates #25309 Change-Id: I57204ef9f4c0ec09b94e88466deb03c6715e411d Reviewed-on: https://go-review.googlesource.com/c/go/+/595564 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Michael Knyszek Auto-Submit: Filippo Valsorda Reviewed-by: Filippo Valsorda Reviewed-by: Russell Webb --- src/crypto/cipher/cfb_test.go | 47 +++++ src/crypto/cipher/ctr_test.go | 38 ++++ src/crypto/cipher/ofb_test.go | 37 ++++ src/crypto/internal/cryptotest/stream.go | 241 +++++++++++++++++++++++ src/crypto/rc4/rc4_test.go | 9 + 5 files changed, 372 insertions(+) create mode 100644 src/crypto/internal/cryptotest/stream.go diff --git a/src/crypto/cipher/cfb_test.go b/src/crypto/cipher/cfb_test.go index 72f62e69d3d39c..67033d9a3bba1a 100644 --- a/src/crypto/cipher/cfb_test.go +++ b/src/crypto/cipher/cfb_test.go @@ -8,8 +8,11 @@ import ( "bytes" "crypto/aes" "crypto/cipher" + "crypto/des" + "crypto/internal/cryptotest" "crypto/rand" "encoding/hex" + "fmt" "testing" ) @@ -111,3 +114,47 @@ func TestCFBInverse(t *testing.T) { t.Errorf("got: %x, want: %x", plaintextCopy, plaintext) } } + +func TestCFBStream(t *testing.T) { + + for _, keylen := range []int{128, 192, 256} { + + t.Run(fmt.Sprintf("AES-%d", keylen), func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, keylen/8) + rng.Read(key) + + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + t.Run("Encrypter", func(t *testing.T) { + cryptotest.TestStreamFromBlock(t, block, cipher.NewCFBEncrypter) + }) + t.Run("Decrypter", func(t *testing.T) { + cryptotest.TestStreamFromBlock(t, block, cipher.NewCFBDecrypter) + }) + }) + } + + t.Run("DES", func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, 8) + rng.Read(key) + + block, err := des.NewCipher(key) + if err != nil { + panic(err) + } + + t.Run("Encrypter", func(t *testing.T) { + cryptotest.TestStreamFromBlock(t, block, cipher.NewCFBEncrypter) + }) + t.Run("Decrypter", func(t *testing.T) { + cryptotest.TestStreamFromBlock(t, block, cipher.NewCFBDecrypter) + }) + }) +} diff --git a/src/crypto/cipher/ctr_test.go b/src/crypto/cipher/ctr_test.go index e5cce576c79e26..4bb9deab809658 100644 --- a/src/crypto/cipher/ctr_test.go +++ b/src/crypto/cipher/ctr_test.go @@ -6,7 +6,11 @@ package cipher_test import ( "bytes" + "crypto/aes" "crypto/cipher" + "crypto/des" + "crypto/internal/cryptotest" + "fmt" "testing" ) @@ -53,3 +57,37 @@ func TestCTR(t *testing.T) { } } } + +func TestCTRStream(t *testing.T) { + + for _, keylen := range []int{128, 192, 256} { + + t.Run(fmt.Sprintf("AES-%d", keylen), func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, keylen/8) + rng.Read(key) + + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + cryptotest.TestStreamFromBlock(t, block, cipher.NewCTR) + }) + } + + t.Run("DES", func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, 8) + rng.Read(key) + + block, err := des.NewCipher(key) + if err != nil { + panic(err) + } + + cryptotest.TestStreamFromBlock(t, block, cipher.NewCTR) + }) +} diff --git a/src/crypto/cipher/ofb_test.go b/src/crypto/cipher/ofb_test.go index 8d3c5d3a3899bd..036b76c45c620a 100644 --- a/src/crypto/cipher/ofb_test.go +++ b/src/crypto/cipher/ofb_test.go @@ -14,6 +14,9 @@ import ( "bytes" "crypto/aes" "crypto/cipher" + "crypto/des" + "crypto/internal/cryptotest" + "fmt" "testing" ) @@ -100,3 +103,37 @@ func TestOFB(t *testing.T) { } } } + +func TestOFBStream(t *testing.T) { + + for _, keylen := range []int{128, 192, 256} { + + t.Run(fmt.Sprintf("AES-%d", keylen), func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, keylen/8) + rng.Read(key) + + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + cryptotest.TestStreamFromBlock(t, block, cipher.NewOFB) + }) + } + + t.Run("DES", func(t *testing.T) { + rng := newRandReader(t) + + key := make([]byte, 8) + rng.Read(key) + + block, err := des.NewCipher(key) + if err != nil { + panic(err) + } + + cryptotest.TestStreamFromBlock(t, block, cipher.NewOFB) + }) +} diff --git a/src/crypto/internal/cryptotest/stream.go b/src/crypto/internal/cryptotest/stream.go new file mode 100644 index 00000000000000..fb9c553bd1c458 --- /dev/null +++ b/src/crypto/internal/cryptotest/stream.go @@ -0,0 +1,241 @@ +// Copyright 2024 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 cryptotest + +import ( + "bytes" + "crypto/cipher" + "crypto/subtle" + "fmt" + "strings" + "testing" +) + +// Each test is executed with each of the buffer lengths in bufLens. +var ( + bufLens = []int{0, 1, 3, 4, 8, 10, 15, 16, 20, 32, 50, 4096, 5000} + bufCap = 10000 +) + +// MakeStream returns a cipher.Stream instance. +// +// Multiple calls to MakeStream must return equivalent instances, +// so for example the key and/or IV must be fixed. +type MakeStream func() cipher.Stream + +// TestStream performs a set of tests on cipher.Stream implementations, +// checking the documented requirements of XORKeyStream. +func TestStream(t *testing.T, ms MakeStream) { + + t.Run("XORSemantics", func(t *testing.T) { + if strings.Contains(t.Name(), "TestCFBStream") { + // This is ugly, but so is CFB's abuse of cipher.Stream. + // Don't want to make it easier for anyone else to do that. + t.Skip("CFB implements cipher.Stream but does not follow XOR semantics") + } + + // Test that XORKeyStream inverts itself for encryption/decryption. + t.Run("Roundtrip", func(t *testing.T) { + + for _, length := range bufLens { + t.Run(fmt.Sprintf("BuffLength=%d", length), func(t *testing.T) { + rng := newRandReader(t) + + plaintext := make([]byte, length) + rng.Read(plaintext) + + ciphertext := make([]byte, length) + decrypted := make([]byte, length) + + ms().XORKeyStream(ciphertext, plaintext) // Encrypt plaintext + ms().XORKeyStream(decrypted, ciphertext) // Decrypt ciphertext + if !bytes.Equal(decrypted, plaintext) { + t.Errorf("plaintext is different after an encrypt/decrypt cycle; got %s, want %s", truncateHex(decrypted), truncateHex(plaintext)) + } + }) + } + }) + + // Test that XORKeyStream behaves the same as directly XORing + // plaintext with the stream. + t.Run("DirectXOR", func(t *testing.T) { + + for _, length := range bufLens { + t.Run(fmt.Sprintf("BuffLength=%d", length), func(t *testing.T) { + rng := newRandReader(t) + + plaintext := make([]byte, length) + rng.Read(plaintext) + + // Encrypting all zeros should reveal the stream itself + stream, directXOR := make([]byte, length), make([]byte, length) + ms().XORKeyStream(stream, stream) + // Encrypt plaintext by directly XORing the stream + subtle.XORBytes(directXOR, stream, plaintext) + + // Encrypt plaintext with XORKeyStream + ciphertext := make([]byte, length) + ms().XORKeyStream(ciphertext, plaintext) + if !bytes.Equal(ciphertext, directXOR) { + t.Errorf("xor semantics were not preserved; got %s, want %s", truncateHex(ciphertext), truncateHex(directXOR)) + } + }) + } + }) + }) + + t.Run("AlterInput", func(t *testing.T) { + rng := newRandReader(t) + src, dst, before := make([]byte, bufCap), make([]byte, bufCap), make([]byte, bufCap) + rng.Read(src) + + for _, length := range bufLens { + + t.Run(fmt.Sprintf("BuffLength=%d", length), func(t *testing.T) { + copy(before, src) + + ms().XORKeyStream(dst[:length], src[:length]) + if !bytes.Equal(src, before) { + t.Errorf("XORKeyStream modified src; got %s, want %s", truncateHex(src), truncateHex(before)) + } + }) + } + }) + + t.Run("Aliasing", func(t *testing.T) { + rng := newRandReader(t) + + buff, expectedOutput := make([]byte, bufCap), make([]byte, bufCap) + + for _, length := range bufLens { + // Record what output is when src and dst are different + rng.Read(buff) + ms().XORKeyStream(expectedOutput[:length], buff[:length]) + + // Check that the same output is generated when src=dst alias to the same + // memory + ms().XORKeyStream(buff[:length], buff[:length]) + if !bytes.Equal(buff[:length], expectedOutput[:length]) { + t.Errorf("block cipher produced different output when dst = src; got %x, want %x", buff[:length], expectedOutput[:length]) + } + } + }) + + t.Run("OutOfBoundsWrite", func(t *testing.T) { // Issue 21104 + rng := newRandReader(t) + + plaintext := make([]byte, bufCap) + rng.Read(plaintext) + ciphertext := make([]byte, bufCap) + + for _, length := range bufLens { + copy(ciphertext, plaintext) // Reset ciphertext buffer + + t.Run(fmt.Sprintf("BuffLength=%d", length), func(t *testing.T) { + mustPanic(t, "output smaller than input", func() { ms().XORKeyStream(ciphertext[:length], plaintext) }) + + if !bytes.Equal(ciphertext[length:], plaintext[length:]) { + t.Errorf("XORKeyStream did out of bounds write; got %s, want %s", truncateHex(ciphertext[length:]), truncateHex(plaintext[length:])) + } + }) + } + }) + + t.Run("BufferOverlap", func(t *testing.T) { + rng := newRandReader(t) + + buff := make([]byte, bufCap) + rng.Read(buff) + + for _, length := range bufLens { + if length == 0 || length == 1 { + continue + } + + t.Run(fmt.Sprintf("BuffLength=%d", length), func(t *testing.T) { + // Make src and dst slices point to same array with inexact overlap + src := buff[:length] + dst := buff[1 : length+1] + mustPanic(t, "invalid buffer overlap", func() { ms().XORKeyStream(dst, src) }) + + // Only overlap on one byte + src = buff[:length] + dst = buff[length-1 : 2*length-1] + mustPanic(t, "invalid buffer overlap", func() { ms().XORKeyStream(dst, src) }) + + // src comes after dst with one byte overlap + src = buff[length-1 : 2*length-1] + dst = buff[:length] + mustPanic(t, "invalid buffer overlap", func() { ms().XORKeyStream(dst, src) }) + }) + } + }) + + t.Run("KeepState", func(t *testing.T) { + rng := newRandReader(t) + + plaintext := make([]byte, bufCap) + rng.Read(plaintext) + ciphertext := make([]byte, bufCap) + + // Make one long call to XORKeyStream + ms().XORKeyStream(ciphertext, plaintext) + + for _, step := range bufLens { + if step == 0 { + continue + } + stepMsg := fmt.Sprintf("step %d: ", step) + + dst := make([]byte, bufCap) + + // Make a bunch of small calls to (stateful) XORKeyStream + stream := ms() + i := 0 + for i+step < len(plaintext) { + stream.XORKeyStream(dst[i:], plaintext[i:i+step]) + i += step + } + stream.XORKeyStream(dst[i:], plaintext[i:]) + + if !bytes.Equal(dst, ciphertext) { + t.Errorf(stepMsg+"successive XORKeyStream calls returned a different result than a single one; got %s, want %s", truncateHex(dst), truncateHex(ciphertext)) + } + } + }) +} + +// TestStreamFromBlock creates a Stream from a cipher.Block used in a +// cipher.BlockMode. It addresses Issue 68377 by checking for a panic when the +// BlockMode uses an IV with incorrect length. +// For a valid IV, it also runs all TestStream tests on the resulting stream. +func TestStreamFromBlock(t *testing.T, block cipher.Block, blockMode func(b cipher.Block, iv []byte) cipher.Stream) { + + t.Run("WrongIVLen", func(t *testing.T) { + t.Skip("see Issue 68377") + + rng := newRandReader(t) + iv := make([]byte, block.BlockSize()+1) + rng.Read(iv) + mustPanic(t, "IV length must equal block size", func() { blockMode(block, iv) }) + }) + + t.Run("BlockModeStream", func(t *testing.T) { + rng := newRandReader(t) + iv := make([]byte, block.BlockSize()) + rng.Read(iv) + + TestStream(t, func() cipher.Stream { return blockMode(block, iv) }) + }) +} + +func truncateHex(b []byte) string { + numVals := 50 + + if len(b) <= numVals { + return fmt.Sprintf("%x", b) + } + return fmt.Sprintf("%x...", b[:numVals]) +} diff --git a/src/crypto/rc4/rc4_test.go b/src/crypto/rc4/rc4_test.go index e7356aa45de1b2..f092f4f26591e6 100644 --- a/src/crypto/rc4/rc4_test.go +++ b/src/crypto/rc4/rc4_test.go @@ -6,6 +6,8 @@ package rc4 import ( "bytes" + "crypto/cipher" + "crypto/internal/cryptotest" "fmt" "testing" ) @@ -136,6 +138,13 @@ func TestBlock(t *testing.T) { } } +func TestRC4Stream(t *testing.T) { + cryptotest.TestStream(t, func() cipher.Stream { + c, _ := NewCipher(golden[0].key) + return c + }) +} + func benchmark(b *testing.B, size int64) { buf := make([]byte, size) c, err := NewCipher(golden[0].key) From 057b703407fa833193cbdc1f37179561c6c9da90 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 19 Apr 2024 11:46:54 -0400 Subject: [PATCH 165/866] all: create swissmap experiment and fork files The _swiss.go files are identical to the originals (except build tag). Later CLs will change them. For #54766. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest-swissmap Change-Id: I9943e2d6f1cfa227ffbf27c9ddc9ce853695d225 Reviewed-on: https://go-review.googlesource.com/c/go/+/580778 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Auto-Submit: Michael Pratt Commit-Queue: Michael Pratt Reviewed-by: Keith Randall --- src/internal/goexperiment/exp_swissmap_off.go | 8 + src/internal/goexperiment/exp_swissmap_on.go | 8 + src/internal/goexperiment/flags.go | 3 + src/reflect/map_noswiss.go | 473 +++++ src/reflect/map_swiss.go | 473 +++++ src/reflect/type.go | 151 +- src/reflect/value.go | 311 --- .../{map_fast32.go => map_fast32_noswiss.go} | 2 + src/runtime/map_fast32_swiss.go | 464 +++++ .../{map_fast64.go => map_fast64_noswiss.go} | 2 + src/runtime/map_fast64_swiss.go | 472 +++++ ...{map_faststr.go => map_faststr_noswiss.go} | 2 + src/runtime/map_faststr_swiss.go | 487 +++++ src/runtime/{map.go => map_noswiss.go} | 2 + src/runtime/map_swiss.go | 1724 +++++++++++++++++ 15 files changed, 4121 insertions(+), 461 deletions(-) create mode 100644 src/internal/goexperiment/exp_swissmap_off.go create mode 100644 src/internal/goexperiment/exp_swissmap_on.go create mode 100644 src/reflect/map_noswiss.go create mode 100644 src/reflect/map_swiss.go rename src/runtime/{map_fast32.go => map_fast32_noswiss.go} (99%) create mode 100644 src/runtime/map_fast32_swiss.go rename src/runtime/{map_fast64.go => map_fast64_noswiss.go} (99%) create mode 100644 src/runtime/map_fast64_swiss.go rename src/runtime/{map_faststr.go => map_faststr_noswiss.go} (99%) create mode 100644 src/runtime/map_faststr_swiss.go rename src/runtime/{map.go => map_noswiss.go} (99%) create mode 100644 src/runtime/map_swiss.go diff --git a/src/internal/goexperiment/exp_swissmap_off.go b/src/internal/goexperiment/exp_swissmap_off.go new file mode 100644 index 00000000000000..2af40aa60be861 --- /dev/null +++ b/src/internal/goexperiment/exp_swissmap_off.go @@ -0,0 +1,8 @@ +// Code generated by mkconsts.go. DO NOT EDIT. + +//go:build !goexperiment.swissmap + +package goexperiment + +const SwissMap = false +const SwissMapInt = 0 diff --git a/src/internal/goexperiment/exp_swissmap_on.go b/src/internal/goexperiment/exp_swissmap_on.go new file mode 100644 index 00000000000000..73be49b6065ff8 --- /dev/null +++ b/src/internal/goexperiment/exp_swissmap_on.go @@ -0,0 +1,8 @@ +// Code generated by mkconsts.go. DO NOT EDIT. + +//go:build goexperiment.swissmap + +package goexperiment + +const SwissMap = true +const SwissMapInt = 1 diff --git a/src/internal/goexperiment/flags.go b/src/internal/goexperiment/flags.go index 3f9c5af68e36eb..33a24433cbd6b6 100644 --- a/src/internal/goexperiment/flags.go +++ b/src/internal/goexperiment/flags.go @@ -115,4 +115,7 @@ type Flags struct { // Requires that gotypesalias=1 is set with GODEBUG. // This flag will be removed with Go 1.24. AliasTypeParams bool + + // SwissMap enables the SwissTable-based map implementation. + SwissMap bool } diff --git a/src/reflect/map_noswiss.go b/src/reflect/map_noswiss.go new file mode 100644 index 00000000000000..de92e76df01c0e --- /dev/null +++ b/src/reflect/map_noswiss.go @@ -0,0 +1,473 @@ +// Copyright 2024 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. + +//go:build !goexperiment.swissmap + +package reflect + +import ( + "internal/abi" + "internal/goarch" + "unsafe" +) + +// mapType represents a map type. +type mapType struct { + abi.MapType +} + +func (t *rtype) Key() Type { + if t.Kind() != Map { + panic("reflect: Key of non-map type " + t.String()) + } + tt := (*mapType)(unsafe.Pointer(t)) + return toType(tt.Key) +} + +// MapOf returns the map type with the given key and element types. +// For example, if k represents int and e represents string, +// MapOf(k, e) represents map[int]string. +// +// If the key type is not a valid map key type (that is, if it does +// not implement Go's == operator), MapOf panics. +func MapOf(key, elem Type) Type { + ktyp := key.common() + etyp := elem.common() + + if ktyp.Equal == nil { + panic("reflect.MapOf: invalid key type " + stringFor(ktyp)) + } + + // Look in cache. + ckey := cacheKey{Map, ktyp, etyp, 0} + if mt, ok := lookupCache.Load(ckey); ok { + return mt.(Type) + } + + // Look in known types. + s := "map[" + stringFor(ktyp) + "]" + stringFor(etyp) + for _, tt := range typesByString(s) { + mt := (*mapType)(unsafe.Pointer(tt)) + if mt.Key == ktyp && mt.Elem == etyp { + ti, _ := lookupCache.LoadOrStore(ckey, toRType(tt)) + return ti.(Type) + } + } + + // Make a map type. + // Note: flag values must match those used in the TMAP case + // in ../cmd/compile/internal/reflectdata/reflect.go:writeType. + var imap any = (map[unsafe.Pointer]unsafe.Pointer)(nil) + mt := **(**mapType)(unsafe.Pointer(&imap)) + mt.Str = resolveReflectName(newName(s, "", false, false)) + mt.TFlag = 0 + mt.Hash = fnv1(etyp.Hash, 'm', byte(ktyp.Hash>>24), byte(ktyp.Hash>>16), byte(ktyp.Hash>>8), byte(ktyp.Hash)) + mt.Key = ktyp + mt.Elem = etyp + mt.Bucket = bucketOf(ktyp, etyp) + mt.Hasher = func(p unsafe.Pointer, seed uintptr) uintptr { + return typehash(ktyp, p, seed) + } + mt.Flags = 0 + if ktyp.Size_ > abi.MapMaxKeyBytes { + mt.KeySize = uint8(goarch.PtrSize) + mt.Flags |= 1 // indirect key + } else { + mt.KeySize = uint8(ktyp.Size_) + } + if etyp.Size_ > abi.MapMaxElemBytes { + mt.ValueSize = uint8(goarch.PtrSize) + mt.Flags |= 2 // indirect value + } else { + mt.ValueSize = uint8(etyp.Size_) + } + mt.BucketSize = uint16(mt.Bucket.Size_) + if isReflexive(ktyp) { + mt.Flags |= 4 + } + if needKeyUpdate(ktyp) { + mt.Flags |= 8 + } + if hashMightPanic(ktyp) { + mt.Flags |= 16 + } + mt.PtrToThis = 0 + + ti, _ := lookupCache.LoadOrStore(ckey, toRType(&mt.Type)) + return ti.(Type) +} + +func bucketOf(ktyp, etyp *abi.Type) *abi.Type { + if ktyp.Size_ > abi.MapMaxKeyBytes { + ktyp = ptrTo(ktyp) + } + if etyp.Size_ > abi.MapMaxElemBytes { + etyp = ptrTo(etyp) + } + + // Prepare GC data if any. + // A bucket is at most bucketSize*(1+maxKeySize+maxValSize)+ptrSize bytes, + // or 2064 bytes, or 258 pointer-size words, or 33 bytes of pointer bitmap. + // Note that since the key and value are known to be <= 128 bytes, + // they're guaranteed to have bitmaps instead of GC programs. + var gcdata *byte + var ptrdata uintptr + + size := abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize + if size&uintptr(ktyp.Align_-1) != 0 || size&uintptr(etyp.Align_-1) != 0 { + panic("reflect: bad size computation in MapOf") + } + + if ktyp.Pointers() || etyp.Pointers() { + nptr := (abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize + n := (nptr + 7) / 8 + + // Runtime needs pointer masks to be a multiple of uintptr in size. + n = (n + goarch.PtrSize - 1) &^ (goarch.PtrSize - 1) + mask := make([]byte, n) + base := uintptr(abi.MapBucketCount / goarch.PtrSize) + + if ktyp.Pointers() { + emitGCMask(mask, base, ktyp, abi.MapBucketCount) + } + base += abi.MapBucketCount * ktyp.Size_ / goarch.PtrSize + + if etyp.Pointers() { + emitGCMask(mask, base, etyp, abi.MapBucketCount) + } + base += abi.MapBucketCount * etyp.Size_ / goarch.PtrSize + + word := base + mask[word/8] |= 1 << (word % 8) + gcdata = &mask[0] + ptrdata = (word + 1) * goarch.PtrSize + + // overflow word must be last + if ptrdata != size { + panic("reflect: bad layout computation in MapOf") + } + } + + b := &abi.Type{ + Align_: goarch.PtrSize, + Size_: size, + Kind_: abi.Struct, + PtrBytes: ptrdata, + GCData: gcdata, + } + s := "bucket(" + stringFor(ktyp) + "," + stringFor(etyp) + ")" + b.Str = resolveReflectName(newName(s, "", false, false)) + return b +} + +var stringType = rtypeOf("") + +// MapIndex returns the value associated with key in the map v. +// It panics if v's Kind is not [Map]. +// It returns the zero Value if key is not found in the map or if v represents a nil map. +// As in Go, the key's value must be assignable to the map's key type. +func (v Value) MapIndex(key Value) Value { + v.mustBe(Map) + tt := (*mapType)(unsafe.Pointer(v.typ())) + + // Do not require key to be exported, so that DeepEqual + // and other programs can use all the keys returned by + // MapKeys as arguments to MapIndex. If either the map + // or the key is unexported, though, the result will be + // considered unexported. This is consistent with the + // behavior for structs, which allow read but not write + // of unexported fields. + + var e unsafe.Pointer + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + k := *(*string)(key.ptr) + e = mapaccess_faststr(v.typ(), v.pointer(), k) + } else { + key = key.assignTo("reflect.Value.MapIndex", tt.Key, nil) + var k unsafe.Pointer + if key.flag&flagIndir != 0 { + k = key.ptr + } else { + k = unsafe.Pointer(&key.ptr) + } + e = mapaccess(v.typ(), v.pointer(), k) + } + if e == nil { + return Value{} + } + typ := tt.Elem + fl := (v.flag | key.flag).ro() + fl |= flag(typ.Kind()) + return copyVal(typ, fl, e) +} + +// MapKeys returns a slice containing all the keys present in the map, +// in unspecified order. +// It panics if v's Kind is not [Map]. +// It returns an empty slice if v represents a nil map. +func (v Value) MapKeys() []Value { + v.mustBe(Map) + tt := (*mapType)(unsafe.Pointer(v.typ())) + keyType := tt.Key + + fl := v.flag.ro() | flag(keyType.Kind()) + + m := v.pointer() + mlen := int(0) + if m != nil { + mlen = maplen(m) + } + var it hiter + mapiterinit(v.typ(), m, &it) + a := make([]Value, mlen) + var i int + for i = 0; i < len(a); i++ { + key := mapiterkey(&it) + if key == nil { + // Someone deleted an entry from the map since we + // called maplen above. It's a data race, but nothing + // we can do about it. + break + } + a[i] = copyVal(keyType, fl, key) + mapiternext(&it) + } + return a[:i] +} + +// hiter's structure matches runtime.hiter's structure. +// Having a clone here allows us to embed a map iterator +// inside type MapIter so that MapIters can be re-used +// without doing any allocations. +type hiter struct { + key unsafe.Pointer + elem unsafe.Pointer + t unsafe.Pointer + h unsafe.Pointer + buckets unsafe.Pointer + bptr unsafe.Pointer + overflow *[]unsafe.Pointer + oldoverflow *[]unsafe.Pointer + startBucket uintptr + offset uint8 + wrapped bool + B uint8 + i uint8 + bucket uintptr + checkBucket uintptr +} + +func (h *hiter) initialized() bool { + return h.t != nil +} + +// A MapIter is an iterator for ranging over a map. +// See [Value.MapRange]. +type MapIter struct { + m Value + hiter hiter +} + +// Key returns the key of iter's current map entry. +func (iter *MapIter) Key() Value { + if !iter.hiter.initialized() { + panic("MapIter.Key called before Next") + } + iterkey := mapiterkey(&iter.hiter) + if iterkey == nil { + panic("MapIter.Key called on exhausted iterator") + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + ktype := t.Key + return copyVal(ktype, iter.m.flag.ro()|flag(ktype.Kind()), iterkey) +} + +// SetIterKey assigns to v the key of iter's current map entry. +// It is equivalent to v.Set(iter.Key()), but it avoids allocating a new Value. +// As in Go, the key must be assignable to v's type and +// must not be derived from an unexported field. +func (v Value) SetIterKey(iter *MapIter) { + if !iter.hiter.initialized() { + panic("reflect: Value.SetIterKey called before Next") + } + iterkey := mapiterkey(&iter.hiter) + if iterkey == nil { + panic("reflect: Value.SetIterKey called on exhausted iterator") + } + + v.mustBeAssignable() + var target unsafe.Pointer + if v.kind() == Interface { + target = v.ptr + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + ktype := t.Key + + iter.m.mustBeExported() // do not let unexported m leak + key := Value{ktype, iterkey, iter.m.flag | flag(ktype.Kind()) | flagIndir} + key = key.assignTo("reflect.MapIter.SetKey", v.typ(), target) + typedmemmove(v.typ(), v.ptr, key.ptr) +} + +// Value returns the value of iter's current map entry. +func (iter *MapIter) Value() Value { + if !iter.hiter.initialized() { + panic("MapIter.Value called before Next") + } + iterelem := mapiterelem(&iter.hiter) + if iterelem == nil { + panic("MapIter.Value called on exhausted iterator") + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + vtype := t.Elem + return copyVal(vtype, iter.m.flag.ro()|flag(vtype.Kind()), iterelem) +} + +// SetIterValue assigns to v the value of iter's current map entry. +// It is equivalent to v.Set(iter.Value()), but it avoids allocating a new Value. +// As in Go, the value must be assignable to v's type and +// must not be derived from an unexported field. +func (v Value) SetIterValue(iter *MapIter) { + if !iter.hiter.initialized() { + panic("reflect: Value.SetIterValue called before Next") + } + iterelem := mapiterelem(&iter.hiter) + if iterelem == nil { + panic("reflect: Value.SetIterValue called on exhausted iterator") + } + + v.mustBeAssignable() + var target unsafe.Pointer + if v.kind() == Interface { + target = v.ptr + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + vtype := t.Elem + + iter.m.mustBeExported() // do not let unexported m leak + elem := Value{vtype, iterelem, iter.m.flag | flag(vtype.Kind()) | flagIndir} + elem = elem.assignTo("reflect.MapIter.SetValue", v.typ(), target) + typedmemmove(v.typ(), v.ptr, elem.ptr) +} + +// Next advances the map iterator and reports whether there is another +// entry. It returns false when iter is exhausted; subsequent +// calls to [MapIter.Key], [MapIter.Value], or [MapIter.Next] will panic. +func (iter *MapIter) Next() bool { + if !iter.m.IsValid() { + panic("MapIter.Next called on an iterator that does not have an associated map Value") + } + if !iter.hiter.initialized() { + mapiterinit(iter.m.typ(), iter.m.pointer(), &iter.hiter) + } else { + if mapiterkey(&iter.hiter) == nil { + panic("MapIter.Next called on exhausted iterator") + } + mapiternext(&iter.hiter) + } + return mapiterkey(&iter.hiter) != nil +} + +// Reset modifies iter to iterate over v. +// It panics if v's Kind is not [Map] and v is not the zero Value. +// Reset(Value{}) causes iter to not to refer to any map, +// which may allow the previously iterated-over map to be garbage collected. +func (iter *MapIter) Reset(v Value) { + if v.IsValid() { + v.mustBe(Map) + } + iter.m = v + iter.hiter = hiter{} +} + +// MapRange returns a range iterator for a map. +// It panics if v's Kind is not [Map]. +// +// Call [MapIter.Next] to advance the iterator, and [MapIter.Key]/[MapIter.Value] to access each entry. +// [MapIter.Next] returns false when the iterator is exhausted. +// MapRange follows the same iteration semantics as a range statement. +// +// Example: +// +// iter := reflect.ValueOf(m).MapRange() +// for iter.Next() { +// k := iter.Key() +// v := iter.Value() +// ... +// } +func (v Value) MapRange() *MapIter { + // This is inlinable to take advantage of "function outlining". + // The allocation of MapIter can be stack allocated if the caller + // does not allow it to escape. + // See https://blog.filippo.io/efficient-go-apis-with-the-inliner/ + if v.kind() != Map { + v.panicNotMap() + } + return &MapIter{m: v} +} + +// SetMapIndex sets the element associated with key in the map v to elem. +// It panics if v's Kind is not [Map]. +// If elem is the zero Value, SetMapIndex deletes the key from the map. +// Otherwise if v holds a nil map, SetMapIndex will panic. +// As in Go, key's elem must be assignable to the map's key type, +// and elem's value must be assignable to the map's elem type. +func (v Value) SetMapIndex(key, elem Value) { + v.mustBe(Map) + v.mustBeExported() + key.mustBeExported() + tt := (*mapType)(unsafe.Pointer(v.typ())) + + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + k := *(*string)(key.ptr) + if elem.typ() == nil { + mapdelete_faststr(v.typ(), v.pointer(), k) + return + } + elem.mustBeExported() + elem = elem.assignTo("reflect.Value.SetMapIndex", tt.Elem, nil) + var e unsafe.Pointer + if elem.flag&flagIndir != 0 { + e = elem.ptr + } else { + e = unsafe.Pointer(&elem.ptr) + } + mapassign_faststr(v.typ(), v.pointer(), k, e) + return + } + + key = key.assignTo("reflect.Value.SetMapIndex", tt.Key, nil) + var k unsafe.Pointer + if key.flag&flagIndir != 0 { + k = key.ptr + } else { + k = unsafe.Pointer(&key.ptr) + } + if elem.typ() == nil { + mapdelete(v.typ(), v.pointer(), k) + return + } + elem.mustBeExported() + elem = elem.assignTo("reflect.Value.SetMapIndex", tt.Elem, nil) + var e unsafe.Pointer + if elem.flag&flagIndir != 0 { + e = elem.ptr + } else { + e = unsafe.Pointer(&elem.ptr) + } + mapassign(v.typ(), v.pointer(), k, e) +} + +// Force slow panicking path not inlined, so it won't add to the +// inlining budget of the caller. +// TODO: undo when the inliner is no longer bottom-up only. +// +//go:noinline +func (f flag) panicNotMap() { + f.mustBe(Map) +} diff --git a/src/reflect/map_swiss.go b/src/reflect/map_swiss.go new file mode 100644 index 00000000000000..a42a9d6f895058 --- /dev/null +++ b/src/reflect/map_swiss.go @@ -0,0 +1,473 @@ +// Copyright 2024 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. + +//go:build goexperiment.swissmap + +package reflect + +import ( + "internal/abi" + "internal/goarch" + "unsafe" +) + +// mapType represents a map type. +type mapType struct { + abi.MapType +} + +func (t *rtype) Key() Type { + if t.Kind() != Map { + panic("reflect: Key of non-map type " + t.String()) + } + tt := (*mapType)(unsafe.Pointer(t)) + return toType(tt.Key) +} + +// MapOf returns the map type with the given key and element types. +// For example, if k represents int and e represents string, +// MapOf(k, e) represents map[int]string. +// +// If the key type is not a valid map key type (that is, if it does +// not implement Go's == operator), MapOf panics. +func MapOf(key, elem Type) Type { + ktyp := key.common() + etyp := elem.common() + + if ktyp.Equal == nil { + panic("reflect.MapOf: invalid key type " + stringFor(ktyp)) + } + + // Look in cache. + ckey := cacheKey{Map, ktyp, etyp, 0} + if mt, ok := lookupCache.Load(ckey); ok { + return mt.(Type) + } + + // Look in known types. + s := "map[" + stringFor(ktyp) + "]" + stringFor(etyp) + for _, tt := range typesByString(s) { + mt := (*mapType)(unsafe.Pointer(tt)) + if mt.Key == ktyp && mt.Elem == etyp { + ti, _ := lookupCache.LoadOrStore(ckey, toRType(tt)) + return ti.(Type) + } + } + + // Make a map type. + // Note: flag values must match those used in the TMAP case + // in ../cmd/compile/internal/reflectdata/reflect.go:writeType. + var imap any = (map[unsafe.Pointer]unsafe.Pointer)(nil) + mt := **(**mapType)(unsafe.Pointer(&imap)) + mt.Str = resolveReflectName(newName(s, "", false, false)) + mt.TFlag = 0 + mt.Hash = fnv1(etyp.Hash, 'm', byte(ktyp.Hash>>24), byte(ktyp.Hash>>16), byte(ktyp.Hash>>8), byte(ktyp.Hash)) + mt.Key = ktyp + mt.Elem = etyp + mt.Bucket = bucketOf(ktyp, etyp) + mt.Hasher = func(p unsafe.Pointer, seed uintptr) uintptr { + return typehash(ktyp, p, seed) + } + mt.Flags = 0 + if ktyp.Size_ > abi.MapMaxKeyBytes { + mt.KeySize = uint8(goarch.PtrSize) + mt.Flags |= 1 // indirect key + } else { + mt.KeySize = uint8(ktyp.Size_) + } + if etyp.Size_ > abi.MapMaxElemBytes { + mt.ValueSize = uint8(goarch.PtrSize) + mt.Flags |= 2 // indirect value + } else { + mt.ValueSize = uint8(etyp.Size_) + } + mt.BucketSize = uint16(mt.Bucket.Size_) + if isReflexive(ktyp) { + mt.Flags |= 4 + } + if needKeyUpdate(ktyp) { + mt.Flags |= 8 + } + if hashMightPanic(ktyp) { + mt.Flags |= 16 + } + mt.PtrToThis = 0 + + ti, _ := lookupCache.LoadOrStore(ckey, toRType(&mt.Type)) + return ti.(Type) +} + +func bucketOf(ktyp, etyp *abi.Type) *abi.Type { + if ktyp.Size_ > abi.MapMaxKeyBytes { + ktyp = ptrTo(ktyp) + } + if etyp.Size_ > abi.MapMaxElemBytes { + etyp = ptrTo(etyp) + } + + // Prepare GC data if any. + // A bucket is at most bucketSize*(1+maxKeySize+maxValSize)+ptrSize bytes, + // or 2064 bytes, or 258 pointer-size words, or 33 bytes of pointer bitmap. + // Note that since the key and value are known to be <= 128 bytes, + // they're guaranteed to have bitmaps instead of GC programs. + var gcdata *byte + var ptrdata uintptr + + size := abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize + if size&uintptr(ktyp.Align_-1) != 0 || size&uintptr(etyp.Align_-1) != 0 { + panic("reflect: bad size computation in MapOf") + } + + if ktyp.Pointers() || etyp.Pointers() { + nptr := (abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize + n := (nptr + 7) / 8 + + // Runtime needs pointer masks to be a multiple of uintptr in size. + n = (n + goarch.PtrSize - 1) &^ (goarch.PtrSize - 1) + mask := make([]byte, n) + base := uintptr(abi.MapBucketCount / goarch.PtrSize) + + if ktyp.Pointers() { + emitGCMask(mask, base, ktyp, abi.MapBucketCount) + } + base += abi.MapBucketCount * ktyp.Size_ / goarch.PtrSize + + if etyp.Pointers() { + emitGCMask(mask, base, etyp, abi.MapBucketCount) + } + base += abi.MapBucketCount * etyp.Size_ / goarch.PtrSize + + word := base + mask[word/8] |= 1 << (word % 8) + gcdata = &mask[0] + ptrdata = (word + 1) * goarch.PtrSize + + // overflow word must be last + if ptrdata != size { + panic("reflect: bad layout computation in MapOf") + } + } + + b := &abi.Type{ + Align_: goarch.PtrSize, + Size_: size, + Kind_: abi.Struct, + PtrBytes: ptrdata, + GCData: gcdata, + } + s := "bucket(" + stringFor(ktyp) + "," + stringFor(etyp) + ")" + b.Str = resolveReflectName(newName(s, "", false, false)) + return b +} + +var stringType = rtypeOf("") + +// MapIndex returns the value associated with key in the map v. +// It panics if v's Kind is not [Map]. +// It returns the zero Value if key is not found in the map or if v represents a nil map. +// As in Go, the key's value must be assignable to the map's key type. +func (v Value) MapIndex(key Value) Value { + v.mustBe(Map) + tt := (*mapType)(unsafe.Pointer(v.typ())) + + // Do not require key to be exported, so that DeepEqual + // and other programs can use all the keys returned by + // MapKeys as arguments to MapIndex. If either the map + // or the key is unexported, though, the result will be + // considered unexported. This is consistent with the + // behavior for structs, which allow read but not write + // of unexported fields. + + var e unsafe.Pointer + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + k := *(*string)(key.ptr) + e = mapaccess_faststr(v.typ(), v.pointer(), k) + } else { + key = key.assignTo("reflect.Value.MapIndex", tt.Key, nil) + var k unsafe.Pointer + if key.flag&flagIndir != 0 { + k = key.ptr + } else { + k = unsafe.Pointer(&key.ptr) + } + e = mapaccess(v.typ(), v.pointer(), k) + } + if e == nil { + return Value{} + } + typ := tt.Elem + fl := (v.flag | key.flag).ro() + fl |= flag(typ.Kind()) + return copyVal(typ, fl, e) +} + +// MapKeys returns a slice containing all the keys present in the map, +// in unspecified order. +// It panics if v's Kind is not [Map]. +// It returns an empty slice if v represents a nil map. +func (v Value) MapKeys() []Value { + v.mustBe(Map) + tt := (*mapType)(unsafe.Pointer(v.typ())) + keyType := tt.Key + + fl := v.flag.ro() | flag(keyType.Kind()) + + m := v.pointer() + mlen := int(0) + if m != nil { + mlen = maplen(m) + } + var it hiter + mapiterinit(v.typ(), m, &it) + a := make([]Value, mlen) + var i int + for i = 0; i < len(a); i++ { + key := mapiterkey(&it) + if key == nil { + // Someone deleted an entry from the map since we + // called maplen above. It's a data race, but nothing + // we can do about it. + break + } + a[i] = copyVal(keyType, fl, key) + mapiternext(&it) + } + return a[:i] +} + +// hiter's structure matches runtime.hiter's structure. +// Having a clone here allows us to embed a map iterator +// inside type MapIter so that MapIters can be re-used +// without doing any allocations. +type hiter struct { + key unsafe.Pointer + elem unsafe.Pointer + t unsafe.Pointer + h unsafe.Pointer + buckets unsafe.Pointer + bptr unsafe.Pointer + overflow *[]unsafe.Pointer + oldoverflow *[]unsafe.Pointer + startBucket uintptr + offset uint8 + wrapped bool + B uint8 + i uint8 + bucket uintptr + checkBucket uintptr +} + +func (h *hiter) initialized() bool { + return h.t != nil +} + +// A MapIter is an iterator for ranging over a map. +// See [Value.MapRange]. +type MapIter struct { + m Value + hiter hiter +} + +// Key returns the key of iter's current map entry. +func (iter *MapIter) Key() Value { + if !iter.hiter.initialized() { + panic("MapIter.Key called before Next") + } + iterkey := mapiterkey(&iter.hiter) + if iterkey == nil { + panic("MapIter.Key called on exhausted iterator") + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + ktype := t.Key + return copyVal(ktype, iter.m.flag.ro()|flag(ktype.Kind()), iterkey) +} + +// SetIterKey assigns to v the key of iter's current map entry. +// It is equivalent to v.Set(iter.Key()), but it avoids allocating a new Value. +// As in Go, the key must be assignable to v's type and +// must not be derived from an unexported field. +func (v Value) SetIterKey(iter *MapIter) { + if !iter.hiter.initialized() { + panic("reflect: Value.SetIterKey called before Next") + } + iterkey := mapiterkey(&iter.hiter) + if iterkey == nil { + panic("reflect: Value.SetIterKey called on exhausted iterator") + } + + v.mustBeAssignable() + var target unsafe.Pointer + if v.kind() == Interface { + target = v.ptr + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + ktype := t.Key + + iter.m.mustBeExported() // do not let unexported m leak + key := Value{ktype, iterkey, iter.m.flag | flag(ktype.Kind()) | flagIndir} + key = key.assignTo("reflect.MapIter.SetKey", v.typ(), target) + typedmemmove(v.typ(), v.ptr, key.ptr) +} + +// Value returns the value of iter's current map entry. +func (iter *MapIter) Value() Value { + if !iter.hiter.initialized() { + panic("MapIter.Value called before Next") + } + iterelem := mapiterelem(&iter.hiter) + if iterelem == nil { + panic("MapIter.Value called on exhausted iterator") + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + vtype := t.Elem + return copyVal(vtype, iter.m.flag.ro()|flag(vtype.Kind()), iterelem) +} + +// SetIterValue assigns to v the value of iter's current map entry. +// It is equivalent to v.Set(iter.Value()), but it avoids allocating a new Value. +// As in Go, the value must be assignable to v's type and +// must not be derived from an unexported field. +func (v Value) SetIterValue(iter *MapIter) { + if !iter.hiter.initialized() { + panic("reflect: Value.SetIterValue called before Next") + } + iterelem := mapiterelem(&iter.hiter) + if iterelem == nil { + panic("reflect: Value.SetIterValue called on exhausted iterator") + } + + v.mustBeAssignable() + var target unsafe.Pointer + if v.kind() == Interface { + target = v.ptr + } + + t := (*mapType)(unsafe.Pointer(iter.m.typ())) + vtype := t.Elem + + iter.m.mustBeExported() // do not let unexported m leak + elem := Value{vtype, iterelem, iter.m.flag | flag(vtype.Kind()) | flagIndir} + elem = elem.assignTo("reflect.MapIter.SetValue", v.typ(), target) + typedmemmove(v.typ(), v.ptr, elem.ptr) +} + +// Next advances the map iterator and reports whether there is another +// entry. It returns false when iter is exhausted; subsequent +// calls to [MapIter.Key], [MapIter.Value], or [MapIter.Next] will panic. +func (iter *MapIter) Next() bool { + if !iter.m.IsValid() { + panic("MapIter.Next called on an iterator that does not have an associated map Value") + } + if !iter.hiter.initialized() { + mapiterinit(iter.m.typ(), iter.m.pointer(), &iter.hiter) + } else { + if mapiterkey(&iter.hiter) == nil { + panic("MapIter.Next called on exhausted iterator") + } + mapiternext(&iter.hiter) + } + return mapiterkey(&iter.hiter) != nil +} + +// Reset modifies iter to iterate over v. +// It panics if v's Kind is not [Map] and v is not the zero Value. +// Reset(Value{}) causes iter to not to refer to any map, +// which may allow the previously iterated-over map to be garbage collected. +func (iter *MapIter) Reset(v Value) { + if v.IsValid() { + v.mustBe(Map) + } + iter.m = v + iter.hiter = hiter{} +} + +// MapRange returns a range iterator for a map. +// It panics if v's Kind is not [Map]. +// +// Call [MapIter.Next] to advance the iterator, and [MapIter.Key]/[MapIter.Value] to access each entry. +// [MapIter.Next] returns false when the iterator is exhausted. +// MapRange follows the same iteration semantics as a range statement. +// +// Example: +// +// iter := reflect.ValueOf(m).MapRange() +// for iter.Next() { +// k := iter.Key() +// v := iter.Value() +// ... +// } +func (v Value) MapRange() *MapIter { + // This is inlinable to take advantage of "function outlining". + // The allocation of MapIter can be stack allocated if the caller + // does not allow it to escape. + // See https://blog.filippo.io/efficient-go-apis-with-the-inliner/ + if v.kind() != Map { + v.panicNotMap() + } + return &MapIter{m: v} +} + +// SetMapIndex sets the element associated with key in the map v to elem. +// It panics if v's Kind is not [Map]. +// If elem is the zero Value, SetMapIndex deletes the key from the map. +// Otherwise if v holds a nil map, SetMapIndex will panic. +// As in Go, key's elem must be assignable to the map's key type, +// and elem's value must be assignable to the map's elem type. +func (v Value) SetMapIndex(key, elem Value) { + v.mustBe(Map) + v.mustBeExported() + key.mustBeExported() + tt := (*mapType)(unsafe.Pointer(v.typ())) + + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + k := *(*string)(key.ptr) + if elem.typ() == nil { + mapdelete_faststr(v.typ(), v.pointer(), k) + return + } + elem.mustBeExported() + elem = elem.assignTo("reflect.Value.SetMapIndex", tt.Elem, nil) + var e unsafe.Pointer + if elem.flag&flagIndir != 0 { + e = elem.ptr + } else { + e = unsafe.Pointer(&elem.ptr) + } + mapassign_faststr(v.typ(), v.pointer(), k, e) + return + } + + key = key.assignTo("reflect.Value.SetMapIndex", tt.Key, nil) + var k unsafe.Pointer + if key.flag&flagIndir != 0 { + k = key.ptr + } else { + k = unsafe.Pointer(&key.ptr) + } + if elem.typ() == nil { + mapdelete(v.typ(), v.pointer(), k) + return + } + elem.mustBeExported() + elem = elem.assignTo("reflect.Value.SetMapIndex", tt.Elem, nil) + var e unsafe.Pointer + if elem.flag&flagIndir != 0 { + e = elem.ptr + } else { + e = unsafe.Pointer(&elem.ptr) + } + mapassign(v.typ(), v.pointer(), k, e) +} + +// Force slow panicking path not inlined, so it won't add to the +// inlining budget of the caller. +// TODO: undo when the inliner is no longer bottom-up only. +// +//go:noinline +func (f flag) panicNotMap() { + f.mustBe(Map) +} diff --git a/src/reflect/type.go b/src/reflect/type.go index 07e2bf16447bbb..f790182547d34e 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -262,7 +262,7 @@ type Type interface { /* * These data structures are known to the compiler (../cmd/compile/internal/reflectdata/reflect.go). * A few are known to ../runtime/type.go to convey to debuggers. - * They are also known to ../runtime/type.go. + * They are also known to ../internal/abi/type.go. */ // A Kind represents the specific kind of type that a [Type] represents. @@ -388,11 +388,6 @@ func (t *interfaceType) uncommon() *abi.UncommonType { return t.Uncommon() } -// mapType represents a map type. -type mapType struct { - abi.MapType -} - // ptrType represents a pointer type. type ptrType struct { abi.PtrType @@ -773,14 +768,6 @@ func (t *rtype) FieldByNameFunc(match func(string) bool) (StructField, bool) { return tt.FieldByNameFunc(match) } -func (t *rtype) Key() Type { - if t.Kind() != Map { - panic("reflect: Key of non-map type " + t.String()) - } - tt := (*mapType)(unsafe.Pointer(t)) - return toType(tt.Key) -} - func (t *rtype) Len() int { if t.Kind() != Array { panic("reflect: Len of non-array type " + t.String()) @@ -1801,79 +1788,6 @@ func ChanOf(dir ChanDir, t Type) Type { return ti.(Type) } -// MapOf returns the map type with the given key and element types. -// For example, if k represents int and e represents string, -// MapOf(k, e) represents map[int]string. -// -// If the key type is not a valid map key type (that is, if it does -// not implement Go's == operator), MapOf panics. -func MapOf(key, elem Type) Type { - ktyp := key.common() - etyp := elem.common() - - if ktyp.Equal == nil { - panic("reflect.MapOf: invalid key type " + stringFor(ktyp)) - } - - // Look in cache. - ckey := cacheKey{Map, ktyp, etyp, 0} - if mt, ok := lookupCache.Load(ckey); ok { - return mt.(Type) - } - - // Look in known types. - s := "map[" + stringFor(ktyp) + "]" + stringFor(etyp) - for _, tt := range typesByString(s) { - mt := (*mapType)(unsafe.Pointer(tt)) - if mt.Key == ktyp && mt.Elem == etyp { - ti, _ := lookupCache.LoadOrStore(ckey, toRType(tt)) - return ti.(Type) - } - } - - // Make a map type. - // Note: flag values must match those used in the TMAP case - // in ../cmd/compile/internal/reflectdata/reflect.go:writeType. - var imap any = (map[unsafe.Pointer]unsafe.Pointer)(nil) - mt := **(**mapType)(unsafe.Pointer(&imap)) - mt.Str = resolveReflectName(newName(s, "", false, false)) - mt.TFlag = 0 - mt.Hash = fnv1(etyp.Hash, 'm', byte(ktyp.Hash>>24), byte(ktyp.Hash>>16), byte(ktyp.Hash>>8), byte(ktyp.Hash)) - mt.Key = ktyp - mt.Elem = etyp - mt.Bucket = bucketOf(ktyp, etyp) - mt.Hasher = func(p unsafe.Pointer, seed uintptr) uintptr { - return typehash(ktyp, p, seed) - } - mt.Flags = 0 - if ktyp.Size_ > abi.MapMaxKeyBytes { - mt.KeySize = uint8(goarch.PtrSize) - mt.Flags |= 1 // indirect key - } else { - mt.KeySize = uint8(ktyp.Size_) - } - if etyp.Size_ > abi.MapMaxElemBytes { - mt.ValueSize = uint8(goarch.PtrSize) - mt.Flags |= 2 // indirect value - } else { - mt.MapType.ValueSize = uint8(etyp.Size_) - } - mt.MapType.BucketSize = uint16(mt.Bucket.Size_) - if isReflexive(ktyp) { - mt.Flags |= 4 - } - if needKeyUpdate(ktyp) { - mt.Flags |= 8 - } - if hashMightPanic(ktyp) { - mt.Flags |= 16 - } - mt.PtrToThis = 0 - - ti, _ := lookupCache.LoadOrStore(ckey, toRType(&mt.Type)) - return ti.(Type) -} - var funcTypes []Type var funcTypesMutex sync.Mutex @@ -2106,69 +2020,6 @@ func hashMightPanic(t *abi.Type) bool { } } -func bucketOf(ktyp, etyp *abi.Type) *abi.Type { - if ktyp.Size_ > abi.MapMaxKeyBytes { - ktyp = ptrTo(ktyp) - } - if etyp.Size_ > abi.MapMaxElemBytes { - etyp = ptrTo(etyp) - } - - // Prepare GC data if any. - // A bucket is at most bucketSize*(1+maxKeySize+maxValSize)+ptrSize bytes, - // or 2064 bytes, or 258 pointer-size words, or 33 bytes of pointer bitmap. - // Note that since the key and value are known to be <= 128 bytes, - // they're guaranteed to have bitmaps instead of GC programs. - var gcdata *byte - var ptrdata uintptr - - size := abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize - if size&uintptr(ktyp.Align_-1) != 0 || size&uintptr(etyp.Align_-1) != 0 { - panic("reflect: bad size computation in MapOf") - } - - if ktyp.Pointers() || etyp.Pointers() { - nptr := (abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize - n := (nptr + 7) / 8 - - // Runtime needs pointer masks to be a multiple of uintptr in size. - n = (n + goarch.PtrSize - 1) &^ (goarch.PtrSize - 1) - mask := make([]byte, n) - base := uintptr(abi.MapBucketCount / goarch.PtrSize) - - if ktyp.Pointers() { - emitGCMask(mask, base, ktyp, abi.MapBucketCount) - } - base += abi.MapBucketCount * ktyp.Size_ / goarch.PtrSize - - if etyp.Pointers() { - emitGCMask(mask, base, etyp, abi.MapBucketCount) - } - base += abi.MapBucketCount * etyp.Size_ / goarch.PtrSize - - word := base - mask[word/8] |= 1 << (word % 8) - gcdata = &mask[0] - ptrdata = (word + 1) * goarch.PtrSize - - // overflow word must be last - if ptrdata != size { - panic("reflect: bad layout computation in MapOf") - } - } - - b := &abi.Type{ - Align_: goarch.PtrSize, - Size_: size, - Kind_: abi.Struct, - PtrBytes: ptrdata, - GCData: gcdata, - } - s := "bucket(" + stringFor(ktyp) + "," + stringFor(etyp) + ")" - b.Str = resolveReflectName(newName(s, "", false, false)) - return b -} - func (t *rtype) gcSlice(begin, end uintptr) []byte { return (*[1 << 30]byte)(unsafe.Pointer(t.t.GCData))[begin:end:end] } diff --git a/src/reflect/value.go b/src/reflect/value.go index 8df7d13114d3de..7bac530b5bc932 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -1779,265 +1779,6 @@ func (v Value) lenNonSlice() int { panic(&ValueError{"reflect.Value.Len", v.kind()}) } -var stringType = rtypeOf("") - -// MapIndex returns the value associated with key in the map v. -// It panics if v's Kind is not [Map]. -// It returns the zero Value if key is not found in the map or if v represents a nil map. -// As in Go, the key's value must be assignable to the map's key type. -func (v Value) MapIndex(key Value) Value { - v.mustBe(Map) - tt := (*mapType)(unsafe.Pointer(v.typ())) - - // Do not require key to be exported, so that DeepEqual - // and other programs can use all the keys returned by - // MapKeys as arguments to MapIndex. If either the map - // or the key is unexported, though, the result will be - // considered unexported. This is consistent with the - // behavior for structs, which allow read but not write - // of unexported fields. - - var e unsafe.Pointer - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { - k := *(*string)(key.ptr) - e = mapaccess_faststr(v.typ(), v.pointer(), k) - } else { - key = key.assignTo("reflect.Value.MapIndex", tt.Key, nil) - var k unsafe.Pointer - if key.flag&flagIndir != 0 { - k = key.ptr - } else { - k = unsafe.Pointer(&key.ptr) - } - e = mapaccess(v.typ(), v.pointer(), k) - } - if e == nil { - return Value{} - } - typ := tt.Elem - fl := (v.flag | key.flag).ro() - fl |= flag(typ.Kind()) - return copyVal(typ, fl, e) -} - -// MapKeys returns a slice containing all the keys present in the map, -// in unspecified order. -// It panics if v's Kind is not [Map]. -// It returns an empty slice if v represents a nil map. -func (v Value) MapKeys() []Value { - v.mustBe(Map) - tt := (*mapType)(unsafe.Pointer(v.typ())) - keyType := tt.Key - - fl := v.flag.ro() | flag(keyType.Kind()) - - m := v.pointer() - mlen := int(0) - if m != nil { - mlen = maplen(m) - } - var it hiter - mapiterinit(v.typ(), m, &it) - a := make([]Value, mlen) - var i int - for i = 0; i < len(a); i++ { - key := mapiterkey(&it) - if key == nil { - // Someone deleted an entry from the map since we - // called maplen above. It's a data race, but nothing - // we can do about it. - break - } - a[i] = copyVal(keyType, fl, key) - mapiternext(&it) - } - return a[:i] -} - -// hiter's structure matches runtime.hiter's structure. -// Having a clone here allows us to embed a map iterator -// inside type MapIter so that MapIters can be re-used -// without doing any allocations. -type hiter struct { - key unsafe.Pointer - elem unsafe.Pointer - t unsafe.Pointer - h unsafe.Pointer - buckets unsafe.Pointer - bptr unsafe.Pointer - overflow *[]unsafe.Pointer - oldoverflow *[]unsafe.Pointer - startBucket uintptr - offset uint8 - wrapped bool - B uint8 - i uint8 - bucket uintptr - checkBucket uintptr -} - -func (h *hiter) initialized() bool { - return h.t != nil -} - -// A MapIter is an iterator for ranging over a map. -// See [Value.MapRange]. -type MapIter struct { - m Value - hiter hiter -} - -// Key returns the key of iter's current map entry. -func (iter *MapIter) Key() Value { - if !iter.hiter.initialized() { - panic("MapIter.Key called before Next") - } - iterkey := mapiterkey(&iter.hiter) - if iterkey == nil { - panic("MapIter.Key called on exhausted iterator") - } - - t := (*mapType)(unsafe.Pointer(iter.m.typ())) - ktype := t.Key - return copyVal(ktype, iter.m.flag.ro()|flag(ktype.Kind()), iterkey) -} - -// SetIterKey assigns to v the key of iter's current map entry. -// It is equivalent to v.Set(iter.Key()), but it avoids allocating a new Value. -// As in Go, the key must be assignable to v's type and -// must not be derived from an unexported field. -func (v Value) SetIterKey(iter *MapIter) { - if !iter.hiter.initialized() { - panic("reflect: Value.SetIterKey called before Next") - } - iterkey := mapiterkey(&iter.hiter) - if iterkey == nil { - panic("reflect: Value.SetIterKey called on exhausted iterator") - } - - v.mustBeAssignable() - var target unsafe.Pointer - if v.kind() == Interface { - target = v.ptr - } - - t := (*mapType)(unsafe.Pointer(iter.m.typ())) - ktype := t.Key - - iter.m.mustBeExported() // do not let unexported m leak - key := Value{ktype, iterkey, iter.m.flag | flag(ktype.Kind()) | flagIndir} - key = key.assignTo("reflect.MapIter.SetKey", v.typ(), target) - typedmemmove(v.typ(), v.ptr, key.ptr) -} - -// Value returns the value of iter's current map entry. -func (iter *MapIter) Value() Value { - if !iter.hiter.initialized() { - panic("MapIter.Value called before Next") - } - iterelem := mapiterelem(&iter.hiter) - if iterelem == nil { - panic("MapIter.Value called on exhausted iterator") - } - - t := (*mapType)(unsafe.Pointer(iter.m.typ())) - vtype := t.Elem - return copyVal(vtype, iter.m.flag.ro()|flag(vtype.Kind()), iterelem) -} - -// SetIterValue assigns to v the value of iter's current map entry. -// It is equivalent to v.Set(iter.Value()), but it avoids allocating a new Value. -// As in Go, the value must be assignable to v's type and -// must not be derived from an unexported field. -func (v Value) SetIterValue(iter *MapIter) { - if !iter.hiter.initialized() { - panic("reflect: Value.SetIterValue called before Next") - } - iterelem := mapiterelem(&iter.hiter) - if iterelem == nil { - panic("reflect: Value.SetIterValue called on exhausted iterator") - } - - v.mustBeAssignable() - var target unsafe.Pointer - if v.kind() == Interface { - target = v.ptr - } - - t := (*mapType)(unsafe.Pointer(iter.m.typ())) - vtype := t.Elem - - iter.m.mustBeExported() // do not let unexported m leak - elem := Value{vtype, iterelem, iter.m.flag | flag(vtype.Kind()) | flagIndir} - elem = elem.assignTo("reflect.MapIter.SetValue", v.typ(), target) - typedmemmove(v.typ(), v.ptr, elem.ptr) -} - -// Next advances the map iterator and reports whether there is another -// entry. It returns false when iter is exhausted; subsequent -// calls to [MapIter.Key], [MapIter.Value], or [MapIter.Next] will panic. -func (iter *MapIter) Next() bool { - if !iter.m.IsValid() { - panic("MapIter.Next called on an iterator that does not have an associated map Value") - } - if !iter.hiter.initialized() { - mapiterinit(iter.m.typ(), iter.m.pointer(), &iter.hiter) - } else { - if mapiterkey(&iter.hiter) == nil { - panic("MapIter.Next called on exhausted iterator") - } - mapiternext(&iter.hiter) - } - return mapiterkey(&iter.hiter) != nil -} - -// Reset modifies iter to iterate over v. -// It panics if v's Kind is not [Map] and v is not the zero Value. -// Reset(Value{}) causes iter to not to refer to any map, -// which may allow the previously iterated-over map to be garbage collected. -func (iter *MapIter) Reset(v Value) { - if v.IsValid() { - v.mustBe(Map) - } - iter.m = v - iter.hiter = hiter{} -} - -// MapRange returns a range iterator for a map. -// It panics if v's Kind is not [Map]. -// -// Call [MapIter.Next] to advance the iterator, and [MapIter.Key]/[MapIter.Value] to access each entry. -// [MapIter.Next] returns false when the iterator is exhausted. -// MapRange follows the same iteration semantics as a range statement. -// -// Example: -// -// iter := reflect.ValueOf(m).MapRange() -// for iter.Next() { -// k := iter.Key() -// v := iter.Value() -// ... -// } -func (v Value) MapRange() *MapIter { - // This is inlinable to take advantage of "function outlining". - // The allocation of MapIter can be stack allocated if the caller - // does not allow it to escape. - // See https://blog.filippo.io/efficient-go-apis-with-the-inliner/ - if v.kind() != Map { - v.panicNotMap() - } - return &MapIter{m: v} -} - -// Force slow panicking path not inlined, so it won't add to the -// inlining budget of the caller. -// TODO: undo when the inliner is no longer bottom-up only. -// -//go:noinline -func (f flag) panicNotMap() { - f.mustBe(Map) -} - // copyVal returns a Value containing the map key or value at ptr, // allocating a new variable as needed. func copyVal(typ *abi.Type, fl flag, ptr unsafe.Pointer) Value { @@ -2426,58 +2167,6 @@ func (v Value) SetCap(n int) { s.Cap = n } -// SetMapIndex sets the element associated with key in the map v to elem. -// It panics if v's Kind is not [Map]. -// If elem is the zero Value, SetMapIndex deletes the key from the map. -// Otherwise if v holds a nil map, SetMapIndex will panic. -// As in Go, key's elem must be assignable to the map's key type, -// and elem's value must be assignable to the map's elem type. -func (v Value) SetMapIndex(key, elem Value) { - v.mustBe(Map) - v.mustBeExported() - key.mustBeExported() - tt := (*mapType)(unsafe.Pointer(v.typ())) - - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { - k := *(*string)(key.ptr) - if elem.typ() == nil { - mapdelete_faststr(v.typ(), v.pointer(), k) - return - } - elem.mustBeExported() - elem = elem.assignTo("reflect.Value.SetMapIndex", tt.Elem, nil) - var e unsafe.Pointer - if elem.flag&flagIndir != 0 { - e = elem.ptr - } else { - e = unsafe.Pointer(&elem.ptr) - } - mapassign_faststr(v.typ(), v.pointer(), k, e) - return - } - - key = key.assignTo("reflect.Value.SetMapIndex", tt.Key, nil) - var k unsafe.Pointer - if key.flag&flagIndir != 0 { - k = key.ptr - } else { - k = unsafe.Pointer(&key.ptr) - } - if elem.typ() == nil { - mapdelete(v.typ(), v.pointer(), k) - return - } - elem.mustBeExported() - elem = elem.assignTo("reflect.Value.SetMapIndex", tt.Elem, nil) - var e unsafe.Pointer - if elem.flag&flagIndir != 0 { - e = elem.ptr - } else { - e = unsafe.Pointer(&elem.ptr) - } - mapassign(v.typ(), v.pointer(), k, e) -} - // SetUint sets v's underlying value to x. // It panics if v's Kind is not [Uint], [Uintptr], [Uint8], [Uint16], [Uint32], or [Uint64], or if [Value.CanSet] returns false. func (v Value) SetUint(x uint64) { diff --git a/src/runtime/map_fast32.go b/src/runtime/map_fast32_noswiss.go similarity index 99% rename from src/runtime/map_fast32.go rename to src/runtime/map_fast32_noswiss.go index 0eb8562f5102dc..58d5a050f50b4e 100644 --- a/src/runtime/map_fast32.go +++ b/src/runtime/map_fast32_noswiss.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. +//go:build !goexperiment.swissmap + package runtime import ( diff --git a/src/runtime/map_fast32_swiss.go b/src/runtime/map_fast32_swiss.go new file mode 100644 index 00000000000000..a6fb26716b3977 --- /dev/null +++ b/src/runtime/map_fast32_swiss.go @@ -0,0 +1,464 @@ +// 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. + +//go:build goexperiment.swissmap + +package runtime + +import ( + "internal/abi" + "internal/goarch" + "unsafe" +) + +func mapaccess1_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess1_fast32)) + } + if h == nil || h.count == 0 { + return unsafe.Pointer(&zeroVal[0]) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + var b *bmap + if h.B == 0 { + // One-bucket table. No need to hash. + b = (*bmap)(h.buckets) + } else { + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + m := bucketMask(h.B) + b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + } + for ; b != nil; b = b.overflow(t) { + for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)) + } + } + } + return unsafe.Pointer(&zeroVal[0]) +} + +func mapaccess2_fast32(t *maptype, h *hmap, key uint32) (unsafe.Pointer, bool) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess2_fast32)) + } + if h == nil || h.count == 0 { + return unsafe.Pointer(&zeroVal[0]), false + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + var b *bmap + if h.B == 0 { + // One-bucket table. No need to hash. + b = (*bmap)(h.buckets) + } else { + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + m := bucketMask(h.B) + b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + } + for ; b != nil; b = b.overflow(t) { + for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)), true + } + } + } + return unsafe.Pointer(&zeroVal[0]), false +} + +func mapassign_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer { + if h == nil { + panic(plainError("assignment to entry in nil map")) + } + if raceenabled { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast32)) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapassign. + h.flags ^= hashWriting + + if h.buckets == nil { + h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) + } + +again: + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_fast32(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + + var insertb *bmap + var inserti uintptr + var insertk unsafe.Pointer + +bucketloop: + for { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if isEmpty(b.tophash[i]) { + if insertb == nil { + inserti = i + insertb = b + } + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := *((*uint32)(add(unsafe.Pointer(b), dataOffset+i*4))) + if k != key { + continue + } + inserti = i + insertb = b + goto done + } + ovf := b.overflow(t) + if ovf == nil { + break + } + b = ovf + } + + // Did not find mapping for key. Allocate new cell & add entry. + + // If we hit the max load factor or we have too many overflow buckets, + // and we're not already in the middle of growing, start growing. + if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { + hashGrow(t, h) + goto again // Growing the table invalidates everything, so try again + } + + if insertb == nil { + // The current bucket and all the overflow buckets connected to it are full, allocate a new one. + insertb = h.newoverflow(t, b) + inserti = 0 // not necessary, but avoids needlessly spilling inserti + } + insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + + insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) + // store new key at insert position + *(*uint32)(insertk) = key + + h.count++ + +done: + elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*4+inserti*uintptr(t.ValueSize)) + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting + return elem +} + +func mapassign_fast32ptr(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { + if h == nil { + panic(plainError("assignment to entry in nil map")) + } + if raceenabled { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast32)) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapassign. + h.flags ^= hashWriting + + if h.buckets == nil { + h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) + } + +again: + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_fast32(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + + var insertb *bmap + var inserti uintptr + var insertk unsafe.Pointer + +bucketloop: + for { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if isEmpty(b.tophash[i]) { + if insertb == nil { + inserti = i + insertb = b + } + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := *((*unsafe.Pointer)(add(unsafe.Pointer(b), dataOffset+i*4))) + if k != key { + continue + } + inserti = i + insertb = b + goto done + } + ovf := b.overflow(t) + if ovf == nil { + break + } + b = ovf + } + + // Did not find mapping for key. Allocate new cell & add entry. + + // If we hit the max load factor or we have too many overflow buckets, + // and we're not already in the middle of growing, start growing. + if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { + hashGrow(t, h) + goto again // Growing the table invalidates everything, so try again + } + + if insertb == nil { + // The current bucket and all the overflow buckets connected to it are full, allocate a new one. + insertb = h.newoverflow(t, b) + inserti = 0 // not necessary, but avoids needlessly spilling inserti + } + insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + + insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) + // store new key at insert position + *(*unsafe.Pointer)(insertk) = key + + h.count++ + +done: + elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*4+inserti*uintptr(t.ValueSize)) + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting + return elem +} + +func mapdelete_fast32(t *maptype, h *hmap, key uint32) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapdelete_fast32)) + } + if h == nil || h.count == 0 { + return + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapdelete + h.flags ^= hashWriting + + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_fast32(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + bOrig := b +search: + for ; b != nil; b = b.overflow(t) { + for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + if key != *(*uint32)(k) || isEmpty(b.tophash[i]) { + continue + } + // Only clear key if there are pointers in it. + // This can only happen if pointers are 32 bit + // wide as 64 bit pointers do not fit into a 32 bit key. + if goarch.PtrSize == 4 && t.Key.Pointers() { + // The key must be a pointer as we checked pointers are + // 32 bits wide and the key is 32 bits wide also. + *(*unsafe.Pointer)(k) = nil + } + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)) + if t.Elem.Pointers() { + memclrHasPointers(e, t.Elem.Size_) + } else { + memclrNoHeapPointers(e, t.Elem.Size_) + } + b.tophash[i] = emptyOne + // If the bucket now ends in a bunch of emptyOne states, + // change those to emptyRest states. + if i == abi.MapBucketCount-1 { + if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { + goto notLast + } + } else { + if b.tophash[i+1] != emptyRest { + goto notLast + } + } + for { + b.tophash[i] = emptyRest + if i == 0 { + if b == bOrig { + break // beginning of initial bucket, we're done. + } + // Find previous bucket, continue at its last entry. + c := b + for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { + } + i = abi.MapBucketCount - 1 + } else { + i-- + } + if b.tophash[i] != emptyOne { + break + } + } + notLast: + h.count-- + // Reset the hash seed to make it more difficult for attackers to + // repeatedly trigger hash collisions. See issue 25237. + if h.count == 0 { + h.hash0 = uint32(rand()) + } + break search + } + } + + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting +} + +func growWork_fast32(t *maptype, h *hmap, bucket uintptr) { + // make sure we evacuate the oldbucket corresponding + // to the bucket we're about to use + evacuate_fast32(t, h, bucket&h.oldbucketmask()) + + // evacuate one more oldbucket to make progress on growing + if h.growing() { + evacuate_fast32(t, h, h.nevacuate) + } +} + +func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { + b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) + newbit := h.noldbuckets() + if !evacuated(b) { + // TODO: reuse overflow buckets instead of using new ones, if there + // is no iterator using the old buckets. (If !oldIterator.) + + // xy contains the x and y (low and high) evacuation destinations. + var xy [2]evacDst + x := &xy[0] + x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) + x.k = add(unsafe.Pointer(x.b), dataOffset) + x.e = add(x.k, abi.MapBucketCount*4) + + if !h.sameSizeGrow() { + // Only calculate y pointers if we're growing bigger. + // Otherwise GC can see bad pointers. + y := &xy[1] + y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) + y.k = add(unsafe.Pointer(y.b), dataOffset) + y.e = add(y.k, abi.MapBucketCount*4) + } + + for ; b != nil; b = b.overflow(t) { + k := add(unsafe.Pointer(b), dataOffset) + e := add(k, abi.MapBucketCount*4) + for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 4), add(e, uintptr(t.ValueSize)) { + top := b.tophash[i] + if isEmpty(top) { + b.tophash[i] = evacuatedEmpty + continue + } + if top < minTopHash { + throw("bad map state") + } + var useY uint8 + if !h.sameSizeGrow() { + // Compute hash to make our evacuation decision (whether we need + // to send this key/elem to bucket x or bucket y). + hash := t.Hasher(k, uintptr(h.hash0)) + if hash&newbit != 0 { + useY = 1 + } + } + + b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap + dst := &xy[useY] // evacuation destination + + if dst.i == abi.MapBucketCount { + dst.b = h.newoverflow(t, dst.b) + dst.i = 0 + dst.k = add(unsafe.Pointer(dst.b), dataOffset) + dst.e = add(dst.k, abi.MapBucketCount*4) + } + dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + + // Copy key. + if goarch.PtrSize == 4 && t.Key.Pointers() && writeBarrier.enabled { + // Write with a write barrier. + *(*unsafe.Pointer)(dst.k) = *(*unsafe.Pointer)(k) + } else { + *(*uint32)(dst.k) = *(*uint32)(k) + } + + typedmemmove(t.Elem, dst.e, e) + dst.i++ + // These updates might push these pointers past the end of the + // key or elem arrays. That's ok, as we have the overflow pointer + // at the end of the bucket to protect against pointing past the + // end of the bucket. + dst.k = add(dst.k, 4) + dst.e = add(dst.e, uintptr(t.ValueSize)) + } + } + // Unlink the overflow buckets & clear key/elem to help GC. + if h.flags&oldIterator == 0 && t.Bucket.Pointers() { + b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) + // Preserve b.tophash because the evacuation + // state is maintained there. + ptr := add(b, dataOffset) + n := uintptr(t.BucketSize) - dataOffset + memclrHasPointers(ptr, n) + } + } + + if oldbucket == h.nevacuate { + advanceEvacuationMark(h, t, newbit) + } +} diff --git a/src/runtime/map_fast64.go b/src/runtime/map_fast64_noswiss.go similarity index 99% rename from src/runtime/map_fast64.go rename to src/runtime/map_fast64_noswiss.go index aca60eb2a80b02..bd3c1c34da0338 100644 --- a/src/runtime/map_fast64.go +++ b/src/runtime/map_fast64_noswiss.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. +//go:build !goexperiment.swissmap + package runtime import ( diff --git a/src/runtime/map_fast64_swiss.go b/src/runtime/map_fast64_swiss.go new file mode 100644 index 00000000000000..105b2ea5171183 --- /dev/null +++ b/src/runtime/map_fast64_swiss.go @@ -0,0 +1,472 @@ +// 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. + +//go:build goexperiment.swissmap + +package runtime + +import ( + "internal/abi" + "internal/goarch" + "unsafe" +) + +func mapaccess1_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess1_fast64)) + } + if h == nil || h.count == 0 { + return unsafe.Pointer(&zeroVal[0]) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + var b *bmap + if h.B == 0 { + // One-bucket table. No need to hash. + b = (*bmap)(h.buckets) + } else { + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + m := bucketMask(h.B) + b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + } + for ; b != nil; b = b.overflow(t) { + for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)) + } + } + } + return unsafe.Pointer(&zeroVal[0]) +} + +func mapaccess2_fast64(t *maptype, h *hmap, key uint64) (unsafe.Pointer, bool) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess2_fast64)) + } + if h == nil || h.count == 0 { + return unsafe.Pointer(&zeroVal[0]), false + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + var b *bmap + if h.B == 0 { + // One-bucket table. No need to hash. + b = (*bmap)(h.buckets) + } else { + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + m := bucketMask(h.B) + b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + } + for ; b != nil; b = b.overflow(t) { + for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)), true + } + } + } + return unsafe.Pointer(&zeroVal[0]), false +} + +func mapassign_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer { + if h == nil { + panic(plainError("assignment to entry in nil map")) + } + if raceenabled { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast64)) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapassign. + h.flags ^= hashWriting + + if h.buckets == nil { + h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) + } + +again: + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_fast64(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + + var insertb *bmap + var inserti uintptr + var insertk unsafe.Pointer + +bucketloop: + for { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if isEmpty(b.tophash[i]) { + if insertb == nil { + insertb = b + inserti = i + } + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := *((*uint64)(add(unsafe.Pointer(b), dataOffset+i*8))) + if k != key { + continue + } + insertb = b + inserti = i + goto done + } + ovf := b.overflow(t) + if ovf == nil { + break + } + b = ovf + } + + // Did not find mapping for key. Allocate new cell & add entry. + + // If we hit the max load factor or we have too many overflow buckets, + // and we're not already in the middle of growing, start growing. + if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { + hashGrow(t, h) + goto again // Growing the table invalidates everything, so try again + } + + if insertb == nil { + // The current bucket and all the overflow buckets connected to it are full, allocate a new one. + insertb = h.newoverflow(t, b) + inserti = 0 // not necessary, but avoids needlessly spilling inserti + } + insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + + insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) + // store new key at insert position + *(*uint64)(insertk) = key + + h.count++ + +done: + elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*8+inserti*uintptr(t.ValueSize)) + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting + return elem +} + +func mapassign_fast64ptr(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { + if h == nil { + panic(plainError("assignment to entry in nil map")) + } + if raceenabled { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast64)) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapassign. + h.flags ^= hashWriting + + if h.buckets == nil { + h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) + } + +again: + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_fast64(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + + var insertb *bmap + var inserti uintptr + var insertk unsafe.Pointer + +bucketloop: + for { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if isEmpty(b.tophash[i]) { + if insertb == nil { + insertb = b + inserti = i + } + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := *((*unsafe.Pointer)(add(unsafe.Pointer(b), dataOffset+i*8))) + if k != key { + continue + } + insertb = b + inserti = i + goto done + } + ovf := b.overflow(t) + if ovf == nil { + break + } + b = ovf + } + + // Did not find mapping for key. Allocate new cell & add entry. + + // If we hit the max load factor or we have too many overflow buckets, + // and we're not already in the middle of growing, start growing. + if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { + hashGrow(t, h) + goto again // Growing the table invalidates everything, so try again + } + + if insertb == nil { + // The current bucket and all the overflow buckets connected to it are full, allocate a new one. + insertb = h.newoverflow(t, b) + inserti = 0 // not necessary, but avoids needlessly spilling inserti + } + insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + + insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) + // store new key at insert position + *(*unsafe.Pointer)(insertk) = key + + h.count++ + +done: + elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*8+inserti*uintptr(t.ValueSize)) + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting + return elem +} + +func mapdelete_fast64(t *maptype, h *hmap, key uint64) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapdelete_fast64)) + } + if h == nil || h.count == 0 { + return + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + + hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapdelete + h.flags ^= hashWriting + + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_fast64(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + bOrig := b +search: + for ; b != nil; b = b.overflow(t) { + for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + if key != *(*uint64)(k) || isEmpty(b.tophash[i]) { + continue + } + // Only clear key if there are pointers in it. + if t.Key.Pointers() { + if goarch.PtrSize == 8 { + *(*unsafe.Pointer)(k) = nil + } else { + // There are three ways to squeeze at one or more 32 bit pointers into 64 bits. + // Just call memclrHasPointers instead of trying to handle all cases here. + memclrHasPointers(k, 8) + } + } + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)) + if t.Elem.Pointers() { + memclrHasPointers(e, t.Elem.Size_) + } else { + memclrNoHeapPointers(e, t.Elem.Size_) + } + b.tophash[i] = emptyOne + // If the bucket now ends in a bunch of emptyOne states, + // change those to emptyRest states. + if i == abi.MapBucketCount-1 { + if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { + goto notLast + } + } else { + if b.tophash[i+1] != emptyRest { + goto notLast + } + } + for { + b.tophash[i] = emptyRest + if i == 0 { + if b == bOrig { + break // beginning of initial bucket, we're done. + } + // Find previous bucket, continue at its last entry. + c := b + for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { + } + i = abi.MapBucketCount - 1 + } else { + i-- + } + if b.tophash[i] != emptyOne { + break + } + } + notLast: + h.count-- + // Reset the hash seed to make it more difficult for attackers to + // repeatedly trigger hash collisions. See issue 25237. + if h.count == 0 { + h.hash0 = uint32(rand()) + } + break search + } + } + + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting +} + +func growWork_fast64(t *maptype, h *hmap, bucket uintptr) { + // make sure we evacuate the oldbucket corresponding + // to the bucket we're about to use + evacuate_fast64(t, h, bucket&h.oldbucketmask()) + + // evacuate one more oldbucket to make progress on growing + if h.growing() { + evacuate_fast64(t, h, h.nevacuate) + } +} + +func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { + b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) + newbit := h.noldbuckets() + if !evacuated(b) { + // TODO: reuse overflow buckets instead of using new ones, if there + // is no iterator using the old buckets. (If !oldIterator.) + + // xy contains the x and y (low and high) evacuation destinations. + var xy [2]evacDst + x := &xy[0] + x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) + x.k = add(unsafe.Pointer(x.b), dataOffset) + x.e = add(x.k, abi.MapBucketCount*8) + + if !h.sameSizeGrow() { + // Only calculate y pointers if we're growing bigger. + // Otherwise GC can see bad pointers. + y := &xy[1] + y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) + y.k = add(unsafe.Pointer(y.b), dataOffset) + y.e = add(y.k, abi.MapBucketCount*8) + } + + for ; b != nil; b = b.overflow(t) { + k := add(unsafe.Pointer(b), dataOffset) + e := add(k, abi.MapBucketCount*8) + for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 8), add(e, uintptr(t.ValueSize)) { + top := b.tophash[i] + if isEmpty(top) { + b.tophash[i] = evacuatedEmpty + continue + } + if top < minTopHash { + throw("bad map state") + } + var useY uint8 + if !h.sameSizeGrow() { + // Compute hash to make our evacuation decision (whether we need + // to send this key/elem to bucket x or bucket y). + hash := t.Hasher(k, uintptr(h.hash0)) + if hash&newbit != 0 { + useY = 1 + } + } + + b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap + dst := &xy[useY] // evacuation destination + + if dst.i == abi.MapBucketCount { + dst.b = h.newoverflow(t, dst.b) + dst.i = 0 + dst.k = add(unsafe.Pointer(dst.b), dataOffset) + dst.e = add(dst.k, abi.MapBucketCount*8) + } + dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + + // Copy key. + if t.Key.Pointers() && writeBarrier.enabled { + if goarch.PtrSize == 8 { + // Write with a write barrier. + *(*unsafe.Pointer)(dst.k) = *(*unsafe.Pointer)(k) + } else { + // There are three ways to squeeze at least one 32 bit pointer into 64 bits. + // Give up and call typedmemmove. + typedmemmove(t.Key, dst.k, k) + } + } else { + *(*uint64)(dst.k) = *(*uint64)(k) + } + + typedmemmove(t.Elem, dst.e, e) + dst.i++ + // These updates might push these pointers past the end of the + // key or elem arrays. That's ok, as we have the overflow pointer + // at the end of the bucket to protect against pointing past the + // end of the bucket. + dst.k = add(dst.k, 8) + dst.e = add(dst.e, uintptr(t.ValueSize)) + } + } + // Unlink the overflow buckets & clear key/elem to help GC. + if h.flags&oldIterator == 0 && t.Bucket.Pointers() { + b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) + // Preserve b.tophash because the evacuation + // state is maintained there. + ptr := add(b, dataOffset) + n := uintptr(t.BucketSize) - dataOffset + memclrHasPointers(ptr, n) + } + } + + if oldbucket == h.nevacuate { + advanceEvacuationMark(h, t, newbit) + } +} diff --git a/src/runtime/map_faststr.go b/src/runtime/map_faststr_noswiss.go similarity index 99% rename from src/runtime/map_faststr.go rename to src/runtime/map_faststr_noswiss.go index 5461a9f81e8143..6dfe61ec465da0 100644 --- a/src/runtime/map_faststr.go +++ b/src/runtime/map_faststr_noswiss.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. +//go:build !goexperiment.swissmap + package runtime import ( diff --git a/src/runtime/map_faststr_swiss.go b/src/runtime/map_faststr_swiss.go new file mode 100644 index 00000000000000..9f3e14d869529c --- /dev/null +++ b/src/runtime/map_faststr_swiss.go @@ -0,0 +1,487 @@ +// 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. + +//go:build goexperiment.swissmap + +package runtime + +import ( + "internal/abi" + "internal/goarch" + "unsafe" +) + +func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess1_faststr)) + } + if h == nil || h.count == 0 { + return unsafe.Pointer(&zeroVal[0]) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + key := stringStructOf(&ky) + if h.B == 0 { + // One-bucket table. + b := (*bmap)(h.buckets) + if key.len < 32 { + // short key, doing lots of comparisons is ok + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || isEmpty(b.tophash[i]) { + if b.tophash[i] == emptyRest { + break + } + continue + } + if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + } + } + return unsafe.Pointer(&zeroVal[0]) + } + // long key, try not to do more comparisons than necessary + keymaybe := uintptr(abi.MapBucketCount) + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || isEmpty(b.tophash[i]) { + if b.tophash[i] == emptyRest { + break + } + continue + } + if k.str == key.str { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + } + // check first 4 bytes + if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { + continue + } + // check last 4 bytes + if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { + continue + } + if keymaybe != abi.MapBucketCount { + // Two keys are potential matches. Use hash to distinguish them. + goto dohash + } + keymaybe = i + } + if keymaybe != abi.MapBucketCount { + k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) + if memequal(k.str, key.str, uintptr(key.len)) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)) + } + } + return unsafe.Pointer(&zeroVal[0]) + } +dohash: + hash := t.Hasher(noescape(unsafe.Pointer(&ky)), uintptr(h.hash0)) + m := bucketMask(h.B) + b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + top := tophash(hash) + for ; b != nil; b = b.overflow(t) { + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || b.tophash[i] != top { + continue + } + if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + } + } + } + return unsafe.Pointer(&zeroVal[0]) +} + +func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess2_faststr)) + } + if h == nil || h.count == 0 { + return unsafe.Pointer(&zeroVal[0]), false + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + key := stringStructOf(&ky) + if h.B == 0 { + // One-bucket table. + b := (*bmap)(h.buckets) + if key.len < 32 { + // short key, doing lots of comparisons is ok + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || isEmpty(b.tophash[i]) { + if b.tophash[i] == emptyRest { + break + } + continue + } + if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + } + } + return unsafe.Pointer(&zeroVal[0]), false + } + // long key, try not to do more comparisons than necessary + keymaybe := uintptr(abi.MapBucketCount) + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || isEmpty(b.tophash[i]) { + if b.tophash[i] == emptyRest { + break + } + continue + } + if k.str == key.str { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + } + // check first 4 bytes + if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { + continue + } + // check last 4 bytes + if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { + continue + } + if keymaybe != abi.MapBucketCount { + // Two keys are potential matches. Use hash to distinguish them. + goto dohash + } + keymaybe = i + } + if keymaybe != abi.MapBucketCount { + k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) + if memequal(k.str, key.str, uintptr(key.len)) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)), true + } + } + return unsafe.Pointer(&zeroVal[0]), false + } +dohash: + hash := t.Hasher(noescape(unsafe.Pointer(&ky)), uintptr(h.hash0)) + m := bucketMask(h.B) + b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + top := tophash(hash) + for ; b != nil; b = b.overflow(t) { + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || b.tophash[i] != top { + continue + } + if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { + return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + } + } + } + return unsafe.Pointer(&zeroVal[0]), false +} + +func mapassign_faststr(t *maptype, h *hmap, s string) unsafe.Pointer { + if h == nil { + panic(plainError("assignment to entry in nil map")) + } + if raceenabled { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_faststr)) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + key := stringStructOf(&s) + hash := t.Hasher(noescape(unsafe.Pointer(&s)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapassign. + h.flags ^= hashWriting + + if h.buckets == nil { + h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) + } + +again: + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_faststr(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + top := tophash(hash) + + var insertb *bmap + var inserti uintptr + var insertk unsafe.Pointer + +bucketloop: + for { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if b.tophash[i] != top { + if isEmpty(b.tophash[i]) && insertb == nil { + insertb = b + inserti = i + } + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+i*2*goarch.PtrSize)) + if k.len != key.len { + continue + } + if k.str != key.str && !memequal(k.str, key.str, uintptr(key.len)) { + continue + } + // already have a mapping for key. Update it. + inserti = i + insertb = b + // Overwrite existing key, so it can be garbage collected. + // The size is already guaranteed to be set correctly. + k.str = key.str + goto done + } + ovf := b.overflow(t) + if ovf == nil { + break + } + b = ovf + } + + // Did not find mapping for key. Allocate new cell & add entry. + + // If we hit the max load factor or we have too many overflow buckets, + // and we're not already in the middle of growing, start growing. + if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { + hashGrow(t, h) + goto again // Growing the table invalidates everything, so try again + } + + if insertb == nil { + // The current bucket and all the overflow buckets connected to it are full, allocate a new one. + insertb = h.newoverflow(t, b) + inserti = 0 // not necessary, but avoids needlessly spilling inserti + } + insertb.tophash[inserti&(abi.MapBucketCount-1)] = top // mask inserti to avoid bounds checks + + insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*2*goarch.PtrSize) + // store new key at insert position + *((*stringStruct)(insertk)) = *key + h.count++ + +done: + elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+inserti*uintptr(t.ValueSize)) + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting + return elem +} + +func mapdelete_faststr(t *maptype, h *hmap, ky string) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapdelete_faststr)) + } + if h == nil || h.count == 0 { + return + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + + key := stringStructOf(&ky) + hash := t.Hasher(noescape(unsafe.Pointer(&ky)), uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher for consistency with mapdelete + h.flags ^= hashWriting + + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork_faststr(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + bOrig := b + top := tophash(hash) +search: + for ; b != nil; b = b.overflow(t) { + for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + k := (*stringStruct)(kptr) + if k.len != key.len || b.tophash[i] != top { + continue + } + if k.str != key.str && !memequal(k.str, key.str, uintptr(key.len)) { + continue + } + // Clear key's pointer. + k.str = nil + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + if t.Elem.Pointers() { + memclrHasPointers(e, t.Elem.Size_) + } else { + memclrNoHeapPointers(e, t.Elem.Size_) + } + b.tophash[i] = emptyOne + // If the bucket now ends in a bunch of emptyOne states, + // change those to emptyRest states. + if i == abi.MapBucketCount-1 { + if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { + goto notLast + } + } else { + if b.tophash[i+1] != emptyRest { + goto notLast + } + } + for { + b.tophash[i] = emptyRest + if i == 0 { + if b == bOrig { + break // beginning of initial bucket, we're done. + } + // Find previous bucket, continue at its last entry. + c := b + for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { + } + i = abi.MapBucketCount - 1 + } else { + i-- + } + if b.tophash[i] != emptyOne { + break + } + } + notLast: + h.count-- + // Reset the hash seed to make it more difficult for attackers to + // repeatedly trigger hash collisions. See issue 25237. + if h.count == 0 { + h.hash0 = uint32(rand()) + } + break search + } + } + + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting +} + +func growWork_faststr(t *maptype, h *hmap, bucket uintptr) { + // make sure we evacuate the oldbucket corresponding + // to the bucket we're about to use + evacuate_faststr(t, h, bucket&h.oldbucketmask()) + + // evacuate one more oldbucket to make progress on growing + if h.growing() { + evacuate_faststr(t, h, h.nevacuate) + } +} + +func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { + b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) + newbit := h.noldbuckets() + if !evacuated(b) { + // TODO: reuse overflow buckets instead of using new ones, if there + // is no iterator using the old buckets. (If !oldIterator.) + + // xy contains the x and y (low and high) evacuation destinations. + var xy [2]evacDst + x := &xy[0] + x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) + x.k = add(unsafe.Pointer(x.b), dataOffset) + x.e = add(x.k, abi.MapBucketCount*2*goarch.PtrSize) + + if !h.sameSizeGrow() { + // Only calculate y pointers if we're growing bigger. + // Otherwise GC can see bad pointers. + y := &xy[1] + y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) + y.k = add(unsafe.Pointer(y.b), dataOffset) + y.e = add(y.k, abi.MapBucketCount*2*goarch.PtrSize) + } + + for ; b != nil; b = b.overflow(t) { + k := add(unsafe.Pointer(b), dataOffset) + e := add(k, abi.MapBucketCount*2*goarch.PtrSize) + for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 2*goarch.PtrSize), add(e, uintptr(t.ValueSize)) { + top := b.tophash[i] + if isEmpty(top) { + b.tophash[i] = evacuatedEmpty + continue + } + if top < minTopHash { + throw("bad map state") + } + var useY uint8 + if !h.sameSizeGrow() { + // Compute hash to make our evacuation decision (whether we need + // to send this key/elem to bucket x or bucket y). + hash := t.Hasher(k, uintptr(h.hash0)) + if hash&newbit != 0 { + useY = 1 + } + } + + b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap + dst := &xy[useY] // evacuation destination + + if dst.i == abi.MapBucketCount { + dst.b = h.newoverflow(t, dst.b) + dst.i = 0 + dst.k = add(unsafe.Pointer(dst.b), dataOffset) + dst.e = add(dst.k, abi.MapBucketCount*2*goarch.PtrSize) + } + dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + + // Copy key. + *(*string)(dst.k) = *(*string)(k) + + typedmemmove(t.Elem, dst.e, e) + dst.i++ + // These updates might push these pointers past the end of the + // key or elem arrays. That's ok, as we have the overflow pointer + // at the end of the bucket to protect against pointing past the + // end of the bucket. + dst.k = add(dst.k, 2*goarch.PtrSize) + dst.e = add(dst.e, uintptr(t.ValueSize)) + } + } + // Unlink the overflow buckets & clear key/elem to help GC. + if h.flags&oldIterator == 0 && t.Bucket.Pointers() { + b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) + // Preserve b.tophash because the evacuation + // state is maintained there. + ptr := add(b, dataOffset) + n := uintptr(t.BucketSize) - dataOffset + memclrHasPointers(ptr, n) + } + } + + if oldbucket == h.nevacuate { + advanceEvacuationMark(h, t, newbit) + } +} diff --git a/src/runtime/map.go b/src/runtime/map_noswiss.go similarity index 99% rename from src/runtime/map.go rename to src/runtime/map_noswiss.go index 9169d5733eef4f..aff124691f81d0 100644 --- a/src/runtime/map.go +++ b/src/runtime/map_noswiss.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. +//go:build !goexperiment.swissmap + package runtime // This file contains the implementation of Go's map type. diff --git a/src/runtime/map_swiss.go b/src/runtime/map_swiss.go new file mode 100644 index 00000000000000..d6c97e465440b3 --- /dev/null +++ b/src/runtime/map_swiss.go @@ -0,0 +1,1724 @@ +// Copyright 2014 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. + +//go:build goexperiment.swissmap + +package runtime + +// This file contains the implementation of Go's map type. +// +// A map is just a hash table. The data is arranged +// into an array of buckets. Each bucket contains up to +// 8 key/elem pairs. The low-order bits of the hash are +// used to select a bucket. Each bucket contains a few +// high-order bits of each hash to distinguish the entries +// within a single bucket. +// +// If more than 8 keys hash to a bucket, we chain on +// extra buckets. +// +// When the hashtable grows, we allocate a new array +// of buckets twice as big. Buckets are incrementally +// copied from the old bucket array to the new bucket array. +// +// Map iterators walk through the array of buckets and +// return the keys in walk order (bucket #, then overflow +// chain order, then bucket index). To maintain iteration +// semantics, we never move keys within their bucket (if +// we did, keys might be returned 0 or 2 times). When +// growing the table, iterators remain iterating through the +// old table and must check the new table if the bucket +// they are iterating through has been moved ("evacuated") +// to the new table. + +// Picking loadFactor: too large and we have lots of overflow +// buckets, too small and we waste a lot of space. I wrote +// a simple program to check some stats for different loads: +// (64-bit, 8 byte keys and elems) +// loadFactor %overflow bytes/entry hitprobe missprobe +// 4.00 2.13 20.77 3.00 4.00 +// 4.50 4.05 17.30 3.25 4.50 +// 5.00 6.85 14.77 3.50 5.00 +// 5.50 10.55 12.94 3.75 5.50 +// 6.00 15.27 11.67 4.00 6.00 +// 6.50 20.90 10.79 4.25 6.50 +// 7.00 27.14 10.15 4.50 7.00 +// 7.50 34.03 9.73 4.75 7.50 +// 8.00 41.10 9.40 5.00 8.00 +// +// %overflow = percentage of buckets which have an overflow bucket +// bytes/entry = overhead bytes used per key/elem pair +// hitprobe = # of entries to check when looking up a present key +// missprobe = # of entries to check when looking up an absent key +// +// Keep in mind this data is for maximally loaded tables, i.e. just +// before the table grows. Typical tables will be somewhat less loaded. + +import ( + "internal/abi" + "internal/goarch" + "internal/runtime/atomic" + "internal/runtime/math" + "unsafe" +) + +const ( + // Maximum number of key/elem pairs a bucket can hold. + bucketCntBits = abi.MapBucketCountBits + + // Maximum average load of a bucket that triggers growth is bucketCnt*13/16 (about 80% full) + // Because of minimum alignment rules, bucketCnt is known to be at least 8. + // Represent as loadFactorNum/loadFactorDen, to allow integer math. + loadFactorDen = 2 + loadFactorNum = loadFactorDen * abi.MapBucketCount * 13 / 16 + + // data offset should be the size of the bmap struct, but needs to be + // aligned correctly. For amd64p32 this means 64-bit alignment + // even though pointers are 32 bit. + dataOffset = unsafe.Offsetof(struct { + b bmap + v int64 + }{}.v) + + // Possible tophash values. We reserve a few possibilities for special marks. + // Each bucket (including its overflow buckets, if any) will have either all or none of its + // entries in the evacuated* states (except during the evacuate() method, which only happens + // during map writes and thus no one else can observe the map during that time). + emptyRest = 0 // this cell is empty, and there are no more non-empty cells at higher indexes or overflows. + emptyOne = 1 // this cell is empty + evacuatedX = 2 // key/elem is valid. Entry has been evacuated to first half of larger table. + evacuatedY = 3 // same as above, but evacuated to second half of larger table. + evacuatedEmpty = 4 // cell is empty, bucket is evacuated. + minTopHash = 5 // minimum tophash for a normal filled cell. + + // flags + iterator = 1 // there may be an iterator using buckets + oldIterator = 2 // there may be an iterator using oldbuckets + hashWriting = 4 // a goroutine is writing to the map + sameSizeGrow = 8 // the current map growth is to a new map of the same size + + // sentinel bucket ID for iterator checks + noCheck = 1<<(8*goarch.PtrSize) - 1 +) + +// isEmpty reports whether the given tophash array entry represents an empty bucket entry. +func isEmpty(x uint8) bool { + return x <= emptyOne +} + +// A header for a Go map. +type hmap struct { + // Note: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go. + // Make sure this stays in sync with the compiler's definition. + count int // # live cells == size of map. Must be first (used by len() builtin) + flags uint8 + B uint8 // log_2 of # of buckets (can hold up to loadFactor * 2^B items) + noverflow uint16 // approximate number of overflow buckets; see incrnoverflow for details + hash0 uint32 // hash seed + + buckets unsafe.Pointer // array of 2^B Buckets. may be nil if count==0. + oldbuckets unsafe.Pointer // previous bucket array of half the size, non-nil only when growing + nevacuate uintptr // progress counter for evacuation (buckets less than this have been evacuated) + + extra *mapextra // optional fields +} + +// mapextra holds fields that are not present on all maps. +type mapextra struct { + // If both key and elem do not contain pointers and are inline, then we mark bucket + // type as containing no pointers. This avoids scanning such maps. + // However, bmap.overflow is a pointer. In order to keep overflow buckets + // alive, we store pointers to all overflow buckets in hmap.extra.overflow and hmap.extra.oldoverflow. + // overflow and oldoverflow are only used if key and elem do not contain pointers. + // overflow contains overflow buckets for hmap.buckets. + // oldoverflow contains overflow buckets for hmap.oldbuckets. + // The indirection allows to store a pointer to the slice in hiter. + overflow *[]*bmap + oldoverflow *[]*bmap + + // nextOverflow holds a pointer to a free overflow bucket. + nextOverflow *bmap +} + +// A bucket for a Go map. +type bmap struct { + // tophash generally contains the top byte of the hash value + // for each key in this bucket. If tophash[0] < minTopHash, + // tophash[0] is a bucket evacuation state instead. + tophash [abi.MapBucketCount]uint8 + // Followed by bucketCnt keys and then bucketCnt elems. + // NOTE: packing all the keys together and then all the elems together makes the + // code a bit more complicated than alternating key/elem/key/elem/... but it allows + // us to eliminate padding which would be needed for, e.g., map[int64]int8. + // Followed by an overflow pointer. +} + +// A hash iteration structure. +// If you modify hiter, also change cmd/compile/internal/reflectdata/reflect.go +// and reflect/value.go to match the layout of this structure. +type hiter struct { + key unsafe.Pointer // Must be in first position. Write nil to indicate iteration end (see cmd/compile/internal/walk/range.go). + elem unsafe.Pointer // Must be in second position (see cmd/compile/internal/walk/range.go). + t *maptype + h *hmap + buckets unsafe.Pointer // bucket ptr at hash_iter initialization time + bptr *bmap // current bucket + overflow *[]*bmap // keeps overflow buckets of hmap.buckets alive + oldoverflow *[]*bmap // keeps overflow buckets of hmap.oldbuckets alive + startBucket uintptr // bucket iteration started at + offset uint8 // intra-bucket offset to start from during iteration (should be big enough to hold bucketCnt-1) + wrapped bool // already wrapped around from end of bucket array to beginning + B uint8 + i uint8 + bucket uintptr + checkBucket uintptr +} + +// bucketShift returns 1<> (goarch.PtrSize*8 - 8)) + if top < minTopHash { + top += minTopHash + } + return top +} + +func evacuated(b *bmap) bool { + h := b.tophash[0] + return h > emptyOne && h < minTopHash +} + +func (b *bmap) overflow(t *maptype) *bmap { + return *(**bmap)(add(unsafe.Pointer(b), uintptr(t.BucketSize)-goarch.PtrSize)) +} + +func (b *bmap) setoverflow(t *maptype, ovf *bmap) { + *(**bmap)(add(unsafe.Pointer(b), uintptr(t.BucketSize)-goarch.PtrSize)) = ovf +} + +func (b *bmap) keys() unsafe.Pointer { + return add(unsafe.Pointer(b), dataOffset) +} + +// incrnoverflow increments h.noverflow. +// noverflow counts the number of overflow buckets. +// This is used to trigger same-size map growth. +// See also tooManyOverflowBuckets. +// To keep hmap small, noverflow is a uint16. +// When there are few buckets, noverflow is an exact count. +// When there are many buckets, noverflow is an approximate count. +func (h *hmap) incrnoverflow() { + // We trigger same-size map growth if there are + // as many overflow buckets as buckets. + // We need to be able to count to 1< maxAlloc { + hint = 0 + } + + // initialize Hmap + if h == nil { + h = new(hmap) + } + h.hash0 = uint32(rand()) + + // Find the size parameter B which will hold the requested # of elements. + // For hint < 0 overLoadFactor returns false since hint < bucketCnt. + B := uint8(0) + for overLoadFactor(hint, B) { + B++ + } + h.B = B + + // allocate initial hash table + // if B == 0, the buckets field is allocated lazily later (in mapassign) + // If hint is large zeroing this memory could take a while. + if h.B != 0 { + var nextOverflow *bmap + h.buckets, nextOverflow = makeBucketArray(t, h.B, nil) + if nextOverflow != nil { + h.extra = new(mapextra) + h.extra.nextOverflow = nextOverflow + } + } + + return h +} + +// makeBucketArray initializes a backing array for map buckets. +// 1<= 4 { + // Add on the estimated number of overflow buckets + // required to insert the median number of elements + // used with this value of b. + nbuckets += bucketShift(b - 4) + sz := t.Bucket.Size_ * nbuckets + up := roundupsize(sz, !t.Bucket.Pointers()) + if up != sz { + nbuckets = up / t.Bucket.Size_ + } + } + + if dirtyalloc == nil { + buckets = newarray(t.Bucket, int(nbuckets)) + } else { + // dirtyalloc was previously generated by + // the above newarray(t.Bucket, int(nbuckets)) + // but may not be empty. + buckets = dirtyalloc + size := t.Bucket.Size_ * nbuckets + if t.Bucket.Pointers() { + memclrHasPointers(buckets, size) + } else { + memclrNoHeapPointers(buckets, size) + } + } + + if base != nbuckets { + // We preallocated some overflow buckets. + // To keep the overhead of tracking these overflow buckets to a minimum, + // we use the convention that if a preallocated overflow bucket's overflow + // pointer is nil, then there are more available by bumping the pointer. + // We need a safe non-nil pointer for the last overflow bucket; just use buckets. + nextOverflow = (*bmap)(add(buckets, base*uintptr(t.BucketSize))) + last := (*bmap)(add(buckets, (nbuckets-1)*uintptr(t.BucketSize))) + last.setoverflow(t, (*bmap)(buckets)) + } + return buckets, nextOverflow +} + +// mapaccess1 returns a pointer to h[key]. Never returns nil, instead +// it will return a reference to the zero object for the elem type if +// the key is not in the map. +// NOTE: The returned pointer may keep the whole map live, so don't +// hold onto it for very long. +func mapaccess1(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { + if raceenabled && h != nil { + callerpc := getcallerpc() + pc := abi.FuncPCABIInternal(mapaccess1) + racereadpc(unsafe.Pointer(h), callerpc, pc) + raceReadObjectPC(t.Key, key, callerpc, pc) + } + if msanenabled && h != nil { + msanread(key, t.Key.Size_) + } + if asanenabled && h != nil { + asanread(key, t.Key.Size_) + } + if h == nil || h.count == 0 { + if err := mapKeyError(t, key); err != nil { + panic(err) // see issue 23734 + } + return unsafe.Pointer(&zeroVal[0]) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + hash := t.Hasher(key, uintptr(h.hash0)) + m := bucketMask(h.B) + b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + top := tophash(hash) +bucketloop: + for ; b != nil; b = b.overflow(t) { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if b.tophash[i] != top { + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) + if t.IndirectKey() { + k = *((*unsafe.Pointer)(k)) + } + if t.Key.Equal(key, k) { + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + if t.IndirectElem() { + e = *((*unsafe.Pointer)(e)) + } + return e + } + } + } + return unsafe.Pointer(&zeroVal[0]) +} + +func mapaccess2(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, bool) { + if raceenabled && h != nil { + callerpc := getcallerpc() + pc := abi.FuncPCABIInternal(mapaccess2) + racereadpc(unsafe.Pointer(h), callerpc, pc) + raceReadObjectPC(t.Key, key, callerpc, pc) + } + if msanenabled && h != nil { + msanread(key, t.Key.Size_) + } + if asanenabled && h != nil { + asanread(key, t.Key.Size_) + } + if h == nil || h.count == 0 { + if err := mapKeyError(t, key); err != nil { + panic(err) // see issue 23734 + } + return unsafe.Pointer(&zeroVal[0]), false + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + hash := t.Hasher(key, uintptr(h.hash0)) + m := bucketMask(h.B) + b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + top := tophash(hash) +bucketloop: + for ; b != nil; b = b.overflow(t) { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if b.tophash[i] != top { + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) + if t.IndirectKey() { + k = *((*unsafe.Pointer)(k)) + } + if t.Key.Equal(key, k) { + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + if t.IndirectElem() { + e = *((*unsafe.Pointer)(e)) + } + return e, true + } + } + } + return unsafe.Pointer(&zeroVal[0]), false +} + +// returns both key and elem. Used by map iterator. +func mapaccessK(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, unsafe.Pointer) { + if h == nil || h.count == 0 { + return nil, nil + } + hash := t.Hasher(key, uintptr(h.hash0)) + m := bucketMask(h.B) + b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) + if c := h.oldbuckets; c != nil { + if !h.sameSizeGrow() { + // There used to be half as many buckets; mask down one more power of two. + m >>= 1 + } + oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) + if !evacuated(oldb) { + b = oldb + } + } + top := tophash(hash) +bucketloop: + for ; b != nil; b = b.overflow(t) { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if b.tophash[i] != top { + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) + if t.IndirectKey() { + k = *((*unsafe.Pointer)(k)) + } + if t.Key.Equal(key, k) { + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + if t.IndirectElem() { + e = *((*unsafe.Pointer)(e)) + } + return k, e + } + } + } + return nil, nil +} + +func mapaccess1_fat(t *maptype, h *hmap, key, zero unsafe.Pointer) unsafe.Pointer { + e := mapaccess1(t, h, key) + if e == unsafe.Pointer(&zeroVal[0]) { + return zero + } + return e +} + +func mapaccess2_fat(t *maptype, h *hmap, key, zero unsafe.Pointer) (unsafe.Pointer, bool) { + e := mapaccess1(t, h, key) + if e == unsafe.Pointer(&zeroVal[0]) { + return zero, false + } + return e, true +} + +// Like mapaccess, but allocates a slot for the key if it is not present in the map. +func mapassign(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { + if h == nil { + panic(plainError("assignment to entry in nil map")) + } + if raceenabled { + callerpc := getcallerpc() + pc := abi.FuncPCABIInternal(mapassign) + racewritepc(unsafe.Pointer(h), callerpc, pc) + raceReadObjectPC(t.Key, key, callerpc, pc) + } + if msanenabled { + msanread(key, t.Key.Size_) + } + if asanenabled { + asanread(key, t.Key.Size_) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + hash := t.Hasher(key, uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher, since t.hasher may panic, + // in which case we have not actually done a write. + h.flags ^= hashWriting + + if h.buckets == nil { + h.buckets = newobject(t.Bucket) // newarray(t.Bucket, 1) + } + +again: + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + top := tophash(hash) + + var inserti *uint8 + var insertk unsafe.Pointer + var elem unsafe.Pointer +bucketloop: + for { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if b.tophash[i] != top { + if isEmpty(b.tophash[i]) && inserti == nil { + inserti = &b.tophash[i] + insertk = add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) + elem = add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + } + if b.tophash[i] == emptyRest { + break bucketloop + } + continue + } + k := add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) + if t.IndirectKey() { + k = *((*unsafe.Pointer)(k)) + } + if !t.Key.Equal(key, k) { + continue + } + // already have a mapping for key. Update it. + if t.NeedKeyUpdate() { + typedmemmove(t.Key, k, key) + } + elem = add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + goto done + } + ovf := b.overflow(t) + if ovf == nil { + break + } + b = ovf + } + + // Did not find mapping for key. Allocate new cell & add entry. + + // If we hit the max load factor or we have too many overflow buckets, + // and we're not already in the middle of growing, start growing. + if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { + hashGrow(t, h) + goto again // Growing the table invalidates everything, so try again + } + + if inserti == nil { + // The current bucket and all the overflow buckets connected to it are full, allocate a new one. + newb := h.newoverflow(t, b) + inserti = &newb.tophash[0] + insertk = add(unsafe.Pointer(newb), dataOffset) + elem = add(insertk, abi.MapBucketCount*uintptr(t.KeySize)) + } + + // store new key/elem at insert position + if t.IndirectKey() { + kmem := newobject(t.Key) + *(*unsafe.Pointer)(insertk) = kmem + insertk = kmem + } + if t.IndirectElem() { + vmem := newobject(t.Elem) + *(*unsafe.Pointer)(elem) = vmem + } + typedmemmove(t.Key, insertk, key) + *inserti = top + h.count++ + +done: + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting + if t.IndirectElem() { + elem = *((*unsafe.Pointer)(elem)) + } + return elem +} + +func mapdelete(t *maptype, h *hmap, key unsafe.Pointer) { + if raceenabled && h != nil { + callerpc := getcallerpc() + pc := abi.FuncPCABIInternal(mapdelete) + racewritepc(unsafe.Pointer(h), callerpc, pc) + raceReadObjectPC(t.Key, key, callerpc, pc) + } + if msanenabled && h != nil { + msanread(key, t.Key.Size_) + } + if asanenabled && h != nil { + asanread(key, t.Key.Size_) + } + if h == nil || h.count == 0 { + if err := mapKeyError(t, key); err != nil { + panic(err) // see issue 23734 + } + return + } + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + + hash := t.Hasher(key, uintptr(h.hash0)) + + // Set hashWriting after calling t.hasher, since t.hasher may panic, + // in which case we have not actually done a write (delete). + h.flags ^= hashWriting + + bucket := hash & bucketMask(h.B) + if h.growing() { + growWork(t, h, bucket) + } + b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) + bOrig := b + top := tophash(hash) +search: + for ; b != nil; b = b.overflow(t) { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if b.tophash[i] != top { + if b.tophash[i] == emptyRest { + break search + } + continue + } + k := add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) + k2 := k + if t.IndirectKey() { + k2 = *((*unsafe.Pointer)(k2)) + } + if !t.Key.Equal(key, k2) { + continue + } + // Only clear key if there are pointers in it. + if t.IndirectKey() { + *(*unsafe.Pointer)(k) = nil + } else if t.Key.Pointers() { + memclrHasPointers(k, t.Key.Size_) + } + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + if t.IndirectElem() { + *(*unsafe.Pointer)(e) = nil + } else if t.Elem.Pointers() { + memclrHasPointers(e, t.Elem.Size_) + } else { + memclrNoHeapPointers(e, t.Elem.Size_) + } + b.tophash[i] = emptyOne + // If the bucket now ends in a bunch of emptyOne states, + // change those to emptyRest states. + // It would be nice to make this a separate function, but + // for loops are not currently inlineable. + if i == abi.MapBucketCount-1 { + if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { + goto notLast + } + } else { + if b.tophash[i+1] != emptyRest { + goto notLast + } + } + for { + b.tophash[i] = emptyRest + if i == 0 { + if b == bOrig { + break // beginning of initial bucket, we're done. + } + // Find previous bucket, continue at its last entry. + c := b + for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { + } + i = abi.MapBucketCount - 1 + } else { + i-- + } + if b.tophash[i] != emptyOne { + break + } + } + notLast: + h.count-- + // Reset the hash seed to make it more difficult for attackers to + // repeatedly trigger hash collisions. See issue 25237. + if h.count == 0 { + h.hash0 = uint32(rand()) + } + break search + } + } + + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting +} + +// mapiterinit initializes the hiter struct used for ranging over maps. +// The hiter struct pointed to by 'it' is allocated on the stack +// by the compilers order pass or on the heap by reflect_mapiterinit. +// Both need to have zeroed hiter since the struct contains pointers. +func mapiterinit(t *maptype, h *hmap, it *hiter) { + if raceenabled && h != nil { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapiterinit)) + } + + it.t = t + if h == nil || h.count == 0 { + return + } + + if unsafe.Sizeof(hiter{})/goarch.PtrSize != 12 { + throw("hash_iter size incorrect") // see cmd/compile/internal/reflectdata/reflect.go + } + it.h = h + + // grab snapshot of bucket state + it.B = h.B + it.buckets = h.buckets + if !t.Bucket.Pointers() { + // Allocate the current slice and remember pointers to both current and old. + // This preserves all relevant overflow buckets alive even if + // the table grows and/or overflow buckets are added to the table + // while we are iterating. + h.createOverflow() + it.overflow = h.extra.overflow + it.oldoverflow = h.extra.oldoverflow + } + + // decide where to start + r := uintptr(rand()) + it.startBucket = r & bucketMask(h.B) + it.offset = uint8(r >> h.B & (abi.MapBucketCount - 1)) + + // iterator state + it.bucket = it.startBucket + + // Remember we have an iterator. + // Can run concurrently with another mapiterinit(). + if old := h.flags; old&(iterator|oldIterator) != iterator|oldIterator { + atomic.Or8(&h.flags, iterator|oldIterator) + } + + mapiternext(it) +} + +func mapiternext(it *hiter) { + h := it.h + if raceenabled { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapiternext)) + } + if h.flags&hashWriting != 0 { + fatal("concurrent map iteration and map write") + } + t := it.t + bucket := it.bucket + b := it.bptr + i := it.i + checkBucket := it.checkBucket + +next: + if b == nil { + if bucket == it.startBucket && it.wrapped { + // end of iteration + it.key = nil + it.elem = nil + return + } + if h.growing() && it.B == h.B { + // Iterator was started in the middle of a grow, and the grow isn't done yet. + // If the bucket we're looking at hasn't been filled in yet (i.e. the old + // bucket hasn't been evacuated) then we need to iterate through the old + // bucket and only return the ones that will be migrated to this bucket. + oldbucket := bucket & it.h.oldbucketmask() + b = (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) + if !evacuated(b) { + checkBucket = bucket + } else { + b = (*bmap)(add(it.buckets, bucket*uintptr(t.BucketSize))) + checkBucket = noCheck + } + } else { + b = (*bmap)(add(it.buckets, bucket*uintptr(t.BucketSize))) + checkBucket = noCheck + } + bucket++ + if bucket == bucketShift(it.B) { + bucket = 0 + it.wrapped = true + } + i = 0 + } + for ; i < abi.MapBucketCount; i++ { + offi := (i + it.offset) & (abi.MapBucketCount - 1) + if isEmpty(b.tophash[offi]) || b.tophash[offi] == evacuatedEmpty { + // TODO: emptyRest is hard to use here, as we start iterating + // in the middle of a bucket. It's feasible, just tricky. + continue + } + k := add(unsafe.Pointer(b), dataOffset+uintptr(offi)*uintptr(t.KeySize)) + if t.IndirectKey() { + k = *((*unsafe.Pointer)(k)) + } + e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(offi)*uintptr(t.ValueSize)) + if checkBucket != noCheck && !h.sameSizeGrow() { + // Special case: iterator was started during a grow to a larger size + // and the grow is not done yet. We're working on a bucket whose + // oldbucket has not been evacuated yet. Or at least, it wasn't + // evacuated when we started the bucket. So we're iterating + // through the oldbucket, skipping any keys that will go + // to the other new bucket (each oldbucket expands to two + // buckets during a grow). + if t.ReflexiveKey() || t.Key.Equal(k, k) { + // If the item in the oldbucket is not destined for + // the current new bucket in the iteration, skip it. + hash := t.Hasher(k, uintptr(h.hash0)) + if hash&bucketMask(it.B) != checkBucket { + continue + } + } else { + // Hash isn't repeatable if k != k (NaNs). We need a + // repeatable and randomish choice of which direction + // to send NaNs during evacuation. We'll use the low + // bit of tophash to decide which way NaNs go. + // NOTE: this case is why we need two evacuate tophash + // values, evacuatedX and evacuatedY, that differ in + // their low bit. + if checkBucket>>(it.B-1) != uintptr(b.tophash[offi]&1) { + continue + } + } + } + if (b.tophash[offi] != evacuatedX && b.tophash[offi] != evacuatedY) || + !(t.ReflexiveKey() || t.Key.Equal(k, k)) { + // This is the golden data, we can return it. + // OR + // key!=key, so the entry can't be deleted or updated, so we can just return it. + // That's lucky for us because when key!=key we can't look it up successfully. + it.key = k + if t.IndirectElem() { + e = *((*unsafe.Pointer)(e)) + } + it.elem = e + } else { + // The hash table has grown since the iterator was started. + // The golden data for this key is now somewhere else. + // Check the current hash table for the data. + // This code handles the case where the key + // has been deleted, updated, or deleted and reinserted. + // NOTE: we need to regrab the key as it has potentially been + // updated to an equal() but not identical key (e.g. +0.0 vs -0.0). + rk, re := mapaccessK(t, h, k) + if rk == nil { + continue // key has been deleted + } + it.key = rk + it.elem = re + } + it.bucket = bucket + if it.bptr != b { // avoid unnecessary write barrier; see issue 14921 + it.bptr = b + } + it.i = i + 1 + it.checkBucket = checkBucket + return + } + b = b.overflow(t) + i = 0 + goto next +} + +// mapclear deletes all keys from a map. +func mapclear(t *maptype, h *hmap) { + if raceenabled && h != nil { + callerpc := getcallerpc() + pc := abi.FuncPCABIInternal(mapclear) + racewritepc(unsafe.Pointer(h), callerpc, pc) + } + + if h == nil || h.count == 0 { + return + } + + if h.flags&hashWriting != 0 { + fatal("concurrent map writes") + } + + h.flags ^= hashWriting + + // Mark buckets empty, so existing iterators can be terminated, see issue #59411. + markBucketsEmpty := func(bucket unsafe.Pointer, mask uintptr) { + for i := uintptr(0); i <= mask; i++ { + b := (*bmap)(add(bucket, i*uintptr(t.BucketSize))) + for ; b != nil; b = b.overflow(t) { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + b.tophash[i] = emptyRest + } + } + } + } + markBucketsEmpty(h.buckets, bucketMask(h.B)) + if oldBuckets := h.oldbuckets; oldBuckets != nil { + markBucketsEmpty(oldBuckets, h.oldbucketmask()) + } + + h.flags &^= sameSizeGrow + h.oldbuckets = nil + h.nevacuate = 0 + h.noverflow = 0 + h.count = 0 + + // Reset the hash seed to make it more difficult for attackers to + // repeatedly trigger hash collisions. See issue 25237. + h.hash0 = uint32(rand()) + + // Keep the mapextra allocation but clear any extra information. + if h.extra != nil { + *h.extra = mapextra{} + } + + // makeBucketArray clears the memory pointed to by h.buckets + // and recovers any overflow buckets by generating them + // as if h.buckets was newly alloced. + _, nextOverflow := makeBucketArray(t, h.B, h.buckets) + if nextOverflow != nil { + // If overflow buckets are created then h.extra + // will have been allocated during initial bucket creation. + h.extra.nextOverflow = nextOverflow + } + + if h.flags&hashWriting == 0 { + fatal("concurrent map writes") + } + h.flags &^= hashWriting +} + +func hashGrow(t *maptype, h *hmap) { + // If we've hit the load factor, get bigger. + // Otherwise, there are too many overflow buckets, + // so keep the same number of buckets and "grow" laterally. + bigger := uint8(1) + if !overLoadFactor(h.count+1, h.B) { + bigger = 0 + h.flags |= sameSizeGrow + } + oldbuckets := h.buckets + newbuckets, nextOverflow := makeBucketArray(t, h.B+bigger, nil) + + flags := h.flags &^ (iterator | oldIterator) + if h.flags&iterator != 0 { + flags |= oldIterator + } + // commit the grow (atomic wrt gc) + h.B += bigger + h.flags = flags + h.oldbuckets = oldbuckets + h.buckets = newbuckets + h.nevacuate = 0 + h.noverflow = 0 + + if h.extra != nil && h.extra.overflow != nil { + // Promote current overflow buckets to the old generation. + if h.extra.oldoverflow != nil { + throw("oldoverflow is not nil") + } + h.extra.oldoverflow = h.extra.overflow + h.extra.overflow = nil + } + if nextOverflow != nil { + if h.extra == nil { + h.extra = new(mapextra) + } + h.extra.nextOverflow = nextOverflow + } + + // the actual copying of the hash table data is done incrementally + // by growWork() and evacuate(). +} + +// overLoadFactor reports whether count items placed in 1< abi.MapBucketCount && uintptr(count) > loadFactorNum*(bucketShift(B)/loadFactorDen) +} + +// tooManyOverflowBuckets reports whether noverflow buckets is too many for a map with 1< 15 { + B = 15 + } + // The compiler doesn't see here that B < 16; mask B to generate shorter shift code. + return noverflow >= uint16(1)<<(B&15) +} + +// growing reports whether h is growing. The growth may be to the same size or bigger. +func (h *hmap) growing() bool { + return h.oldbuckets != nil +} + +// sameSizeGrow reports whether the current growth is to a map of the same size. +func (h *hmap) sameSizeGrow() bool { + return h.flags&sameSizeGrow != 0 +} + +// noldbuckets calculates the number of buckets prior to the current map growth. +func (h *hmap) noldbuckets() uintptr { + oldB := h.B + if !h.sameSizeGrow() { + oldB-- + } + return bucketShift(oldB) +} + +// oldbucketmask provides a mask that can be applied to calculate n % noldbuckets(). +func (h *hmap) oldbucketmask() uintptr { + return h.noldbuckets() - 1 +} + +func growWork(t *maptype, h *hmap, bucket uintptr) { + // make sure we evacuate the oldbucket corresponding + // to the bucket we're about to use + evacuate(t, h, bucket&h.oldbucketmask()) + + // evacuate one more oldbucket to make progress on growing + if h.growing() { + evacuate(t, h, h.nevacuate) + } +} + +func bucketEvacuated(t *maptype, h *hmap, bucket uintptr) bool { + b := (*bmap)(add(h.oldbuckets, bucket*uintptr(t.BucketSize))) + return evacuated(b) +} + +// evacDst is an evacuation destination. +type evacDst struct { + b *bmap // current destination bucket + i int // key/elem index into b + k unsafe.Pointer // pointer to current key storage + e unsafe.Pointer // pointer to current elem storage +} + +func evacuate(t *maptype, h *hmap, oldbucket uintptr) { + b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) + newbit := h.noldbuckets() + if !evacuated(b) { + // TODO: reuse overflow buckets instead of using new ones, if there + // is no iterator using the old buckets. (If !oldIterator.) + + // xy contains the x and y (low and high) evacuation destinations. + var xy [2]evacDst + x := &xy[0] + x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) + x.k = add(unsafe.Pointer(x.b), dataOffset) + x.e = add(x.k, abi.MapBucketCount*uintptr(t.KeySize)) + + if !h.sameSizeGrow() { + // Only calculate y pointers if we're growing bigger. + // Otherwise GC can see bad pointers. + y := &xy[1] + y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) + y.k = add(unsafe.Pointer(y.b), dataOffset) + y.e = add(y.k, abi.MapBucketCount*uintptr(t.KeySize)) + } + + for ; b != nil; b = b.overflow(t) { + k := add(unsafe.Pointer(b), dataOffset) + e := add(k, abi.MapBucketCount*uintptr(t.KeySize)) + for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, uintptr(t.KeySize)), add(e, uintptr(t.ValueSize)) { + top := b.tophash[i] + if isEmpty(top) { + b.tophash[i] = evacuatedEmpty + continue + } + if top < minTopHash { + throw("bad map state") + } + k2 := k + if t.IndirectKey() { + k2 = *((*unsafe.Pointer)(k2)) + } + var useY uint8 + if !h.sameSizeGrow() { + // Compute hash to make our evacuation decision (whether we need + // to send this key/elem to bucket x or bucket y). + hash := t.Hasher(k2, uintptr(h.hash0)) + if h.flags&iterator != 0 && !t.ReflexiveKey() && !t.Key.Equal(k2, k2) { + // If key != key (NaNs), then the hash could be (and probably + // will be) entirely different from the old hash. Moreover, + // it isn't reproducible. Reproducibility is required in the + // presence of iterators, as our evacuation decision must + // match whatever decision the iterator made. + // Fortunately, we have the freedom to send these keys either + // way. Also, tophash is meaningless for these kinds of keys. + // We let the low bit of tophash drive the evacuation decision. + // We recompute a new random tophash for the next level so + // these keys will get evenly distributed across all buckets + // after multiple grows. + useY = top & 1 + top = tophash(hash) + } else { + if hash&newbit != 0 { + useY = 1 + } + } + } + + if evacuatedX+1 != evacuatedY || evacuatedX^1 != evacuatedY { + throw("bad evacuatedN") + } + + b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY + dst := &xy[useY] // evacuation destination + + if dst.i == abi.MapBucketCount { + dst.b = h.newoverflow(t, dst.b) + dst.i = 0 + dst.k = add(unsafe.Pointer(dst.b), dataOffset) + dst.e = add(dst.k, abi.MapBucketCount*uintptr(t.KeySize)) + } + dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + if t.IndirectKey() { + *(*unsafe.Pointer)(dst.k) = k2 // copy pointer + } else { + typedmemmove(t.Key, dst.k, k) // copy elem + } + if t.IndirectElem() { + *(*unsafe.Pointer)(dst.e) = *(*unsafe.Pointer)(e) + } else { + typedmemmove(t.Elem, dst.e, e) + } + dst.i++ + // These updates might push these pointers past the end of the + // key or elem arrays. That's ok, as we have the overflow pointer + // at the end of the bucket to protect against pointing past the + // end of the bucket. + dst.k = add(dst.k, uintptr(t.KeySize)) + dst.e = add(dst.e, uintptr(t.ValueSize)) + } + } + // Unlink the overflow buckets & clear key/elem to help GC. + if h.flags&oldIterator == 0 && t.Bucket.Pointers() { + b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) + // Preserve b.tophash because the evacuation + // state is maintained there. + ptr := add(b, dataOffset) + n := uintptr(t.BucketSize) - dataOffset + memclrHasPointers(ptr, n) + } + } + + if oldbucket == h.nevacuate { + advanceEvacuationMark(h, t, newbit) + } +} + +func advanceEvacuationMark(h *hmap, t *maptype, newbit uintptr) { + h.nevacuate++ + // Experiments suggest that 1024 is overkill by at least an order of magnitude. + // Put it in there as a safeguard anyway, to ensure O(1) behavior. + stop := h.nevacuate + 1024 + if stop > newbit { + stop = newbit + } + for h.nevacuate != stop && bucketEvacuated(t, h, h.nevacuate) { + h.nevacuate++ + } + if h.nevacuate == newbit { // newbit == # of oldbuckets + // Growing is all done. Free old main bucket array. + h.oldbuckets = nil + // Can discard old overflow buckets as well. + // If they are still referenced by an iterator, + // then the iterator holds a pointers to the slice. + if h.extra != nil { + h.extra.oldoverflow = nil + } + h.flags &^= sameSizeGrow + } +} + +// Reflect stubs. Called from ../reflect/asm_*.s + +//go:linkname reflect_makemap reflect.makemap +func reflect_makemap(t *maptype, cap int) *hmap { + // Check invariants and reflects math. + if t.Key.Equal == nil { + throw("runtime.reflect_makemap: unsupported map key type") + } + if t.Key.Size_ > abi.MapMaxKeyBytes && (!t.IndirectKey() || t.KeySize != uint8(goarch.PtrSize)) || + t.Key.Size_ <= abi.MapMaxKeyBytes && (t.IndirectKey() || t.KeySize != uint8(t.Key.Size_)) { + throw("key size wrong") + } + if t.Elem.Size_ > abi.MapMaxElemBytes && (!t.IndirectElem() || t.ValueSize != uint8(goarch.PtrSize)) || + t.Elem.Size_ <= abi.MapMaxElemBytes && (t.IndirectElem() || t.ValueSize != uint8(t.Elem.Size_)) { + throw("elem size wrong") + } + if t.Key.Align_ > abi.MapBucketCount { + throw("key align too big") + } + if t.Elem.Align_ > abi.MapBucketCount { + throw("elem align too big") + } + if t.Key.Size_%uintptr(t.Key.Align_) != 0 { + throw("key size not a multiple of key align") + } + if t.Elem.Size_%uintptr(t.Elem.Align_) != 0 { + throw("elem size not a multiple of elem align") + } + if abi.MapBucketCount < 8 { + throw("bucketsize too small for proper alignment") + } + if dataOffset%uintptr(t.Key.Align_) != 0 { + throw("need padding in bucket (key)") + } + if dataOffset%uintptr(t.Elem.Align_) != 0 { + throw("need padding in bucket (elem)") + } + + return makemap(t, cap, nil) +} + +//go:linkname reflect_mapaccess reflect.mapaccess +func reflect_mapaccess(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { + elem, ok := mapaccess2(t, h, key) + if !ok { + // reflect wants nil for a missing element + elem = nil + } + return elem +} + +//go:linkname reflect_mapaccess_faststr reflect.mapaccess_faststr +func reflect_mapaccess_faststr(t *maptype, h *hmap, key string) unsafe.Pointer { + elem, ok := mapaccess2_faststr(t, h, key) + if !ok { + // reflect wants nil for a missing element + elem = nil + } + return elem +} + +//go:linkname reflect_mapassign reflect.mapassign0 +func reflect_mapassign(t *maptype, h *hmap, key unsafe.Pointer, elem unsafe.Pointer) { + p := mapassign(t, h, key) + typedmemmove(t.Elem, p, elem) +} + +//go:linkname reflect_mapassign_faststr reflect.mapassign_faststr0 +func reflect_mapassign_faststr(t *maptype, h *hmap, key string, elem unsafe.Pointer) { + p := mapassign_faststr(t, h, key) + typedmemmove(t.Elem, p, elem) +} + +//go:linkname reflect_mapdelete reflect.mapdelete +func reflect_mapdelete(t *maptype, h *hmap, key unsafe.Pointer) { + mapdelete(t, h, key) +} + +//go:linkname reflect_mapdelete_faststr reflect.mapdelete_faststr +func reflect_mapdelete_faststr(t *maptype, h *hmap, key string) { + mapdelete_faststr(t, h, key) +} + +//go:linkname reflect_mapiterinit reflect.mapiterinit +func reflect_mapiterinit(t *maptype, h *hmap, it *hiter) { + mapiterinit(t, h, it) +} + +//go:linkname reflect_mapiternext reflect.mapiternext +func reflect_mapiternext(it *hiter) { + mapiternext(it) +} + +//go:linkname reflect_mapiterkey reflect.mapiterkey +func reflect_mapiterkey(it *hiter) unsafe.Pointer { + return it.key +} + +//go:linkname reflect_mapiterelem reflect.mapiterelem +func reflect_mapiterelem(it *hiter) unsafe.Pointer { + return it.elem +} + +//go:linkname reflect_maplen reflect.maplen +func reflect_maplen(h *hmap) int { + if h == nil { + return 0 + } + if raceenabled { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(reflect_maplen)) + } + return h.count +} + +//go:linkname reflect_mapclear reflect.mapclear +func reflect_mapclear(t *maptype, h *hmap) { + mapclear(t, h) +} + +//go:linkname reflectlite_maplen internal/reflectlite.maplen +func reflectlite_maplen(h *hmap) int { + if h == nil { + return 0 + } + if raceenabled { + callerpc := getcallerpc() + racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(reflect_maplen)) + } + return h.count +} + +// mapinitnoop is a no-op function known the Go linker; if a given global +// map (of the right size) is determined to be dead, the linker will +// rewrite the relocation (from the package init func) from the outlined +// map init function to this symbol. Defined in assembly so as to avoid +// complications with instrumentation (coverage, etc). +func mapinitnoop() + +// mapclone for implementing maps.Clone +// +//go:linkname mapclone maps.clone +func mapclone(m any) any { + e := efaceOf(&m) + e.data = unsafe.Pointer(mapclone2((*maptype)(unsafe.Pointer(e._type)), (*hmap)(e.data))) + return m +} + +// moveToBmap moves a bucket from src to dst. It returns the destination bucket or new destination bucket if it overflows +// and the pos that the next key/value will be written, if pos == bucketCnt means needs to written in overflow bucket. +func moveToBmap(t *maptype, h *hmap, dst *bmap, pos int, src *bmap) (*bmap, int) { + for i := 0; i < abi.MapBucketCount; i++ { + if isEmpty(src.tophash[i]) { + continue + } + + for ; pos < abi.MapBucketCount; pos++ { + if isEmpty(dst.tophash[pos]) { + break + } + } + + if pos == abi.MapBucketCount { + dst = h.newoverflow(t, dst) + pos = 0 + } + + srcK := add(unsafe.Pointer(src), dataOffset+uintptr(i)*uintptr(t.KeySize)) + srcEle := add(unsafe.Pointer(src), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(i)*uintptr(t.ValueSize)) + dstK := add(unsafe.Pointer(dst), dataOffset+uintptr(pos)*uintptr(t.KeySize)) + dstEle := add(unsafe.Pointer(dst), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(pos)*uintptr(t.ValueSize)) + + dst.tophash[pos] = src.tophash[i] + if t.IndirectKey() { + srcK = *(*unsafe.Pointer)(srcK) + if t.NeedKeyUpdate() { + kStore := newobject(t.Key) + typedmemmove(t.Key, kStore, srcK) + srcK = kStore + } + // Note: if NeedKeyUpdate is false, then the memory + // used to store the key is immutable, so we can share + // it between the original map and its clone. + *(*unsafe.Pointer)(dstK) = srcK + } else { + typedmemmove(t.Key, dstK, srcK) + } + if t.IndirectElem() { + srcEle = *(*unsafe.Pointer)(srcEle) + eStore := newobject(t.Elem) + typedmemmove(t.Elem, eStore, srcEle) + *(*unsafe.Pointer)(dstEle) = eStore + } else { + typedmemmove(t.Elem, dstEle, srcEle) + } + pos++ + h.count++ + } + return dst, pos +} + +func mapclone2(t *maptype, src *hmap) *hmap { + dst := makemap(t, src.count, nil) + dst.hash0 = src.hash0 + dst.nevacuate = 0 + // flags do not need to be copied here, just like a new map has no flags. + + if src.count == 0 { + return dst + } + + if src.flags&hashWriting != 0 { + fatal("concurrent map clone and map write") + } + + if src.B == 0 && !(t.IndirectKey() && t.NeedKeyUpdate()) && !t.IndirectElem() { + // Quick copy for small maps. + dst.buckets = newobject(t.Bucket) + dst.count = src.count + typedmemmove(t.Bucket, dst.buckets, src.buckets) + return dst + } + + if dst.B == 0 { + dst.buckets = newobject(t.Bucket) + } + dstArraySize := int(bucketShift(dst.B)) + srcArraySize := int(bucketShift(src.B)) + for i := 0; i < dstArraySize; i++ { + dstBmap := (*bmap)(add(dst.buckets, uintptr(i*int(t.BucketSize)))) + pos := 0 + for j := 0; j < srcArraySize; j += dstArraySize { + srcBmap := (*bmap)(add(src.buckets, uintptr((i+j)*int(t.BucketSize)))) + for srcBmap != nil { + dstBmap, pos = moveToBmap(t, dst, dstBmap, pos, srcBmap) + srcBmap = srcBmap.overflow(t) + } + } + } + + if src.oldbuckets == nil { + return dst + } + + oldB := src.B + srcOldbuckets := src.oldbuckets + if !src.sameSizeGrow() { + oldB-- + } + oldSrcArraySize := int(bucketShift(oldB)) + + for i := 0; i < oldSrcArraySize; i++ { + srcBmap := (*bmap)(add(srcOldbuckets, uintptr(i*int(t.BucketSize)))) + if evacuated(srcBmap) { + continue + } + + if oldB >= dst.B { // main bucket bits in dst is less than oldB bits in src + dstBmap := (*bmap)(add(dst.buckets, (uintptr(i)&bucketMask(dst.B))*uintptr(t.BucketSize))) + for dstBmap.overflow(t) != nil { + dstBmap = dstBmap.overflow(t) + } + pos := 0 + for srcBmap != nil { + dstBmap, pos = moveToBmap(t, dst, dstBmap, pos, srcBmap) + srcBmap = srcBmap.overflow(t) + } + continue + } + + // oldB < dst.B, so a single source bucket may go to multiple destination buckets. + // Process entries one at a time. + for srcBmap != nil { + // move from oldBlucket to new bucket + for i := uintptr(0); i < abi.MapBucketCount; i++ { + if isEmpty(srcBmap.tophash[i]) { + continue + } + + if src.flags&hashWriting != 0 { + fatal("concurrent map clone and map write") + } + + srcK := add(unsafe.Pointer(srcBmap), dataOffset+i*uintptr(t.KeySize)) + if t.IndirectKey() { + srcK = *((*unsafe.Pointer)(srcK)) + } + + srcEle := add(unsafe.Pointer(srcBmap), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + if t.IndirectElem() { + srcEle = *((*unsafe.Pointer)(srcEle)) + } + dstEle := mapassign(t, dst, srcK) + typedmemmove(t.Elem, dstEle, srcEle) + } + srcBmap = srcBmap.overflow(t) + } + } + return dst +} + +// keys for implementing maps.keys +// +//go:linkname keys maps.keys +func keys(m any, p unsafe.Pointer) { + e := efaceOf(&m) + t := (*maptype)(unsafe.Pointer(e._type)) + h := (*hmap)(e.data) + + if h == nil || h.count == 0 { + return + } + s := (*slice)(p) + r := int(rand()) + offset := uint8(r >> h.B & (abi.MapBucketCount - 1)) + if h.B == 0 { + copyKeys(t, h, (*bmap)(h.buckets), s, offset) + return + } + arraySize := int(bucketShift(h.B)) + buckets := h.buckets + for i := 0; i < arraySize; i++ { + bucket := (i + r) & (arraySize - 1) + b := (*bmap)(add(buckets, uintptr(bucket)*uintptr(t.BucketSize))) + copyKeys(t, h, b, s, offset) + } + + if h.growing() { + oldArraySize := int(h.noldbuckets()) + for i := 0; i < oldArraySize; i++ { + bucket := (i + r) & (oldArraySize - 1) + b := (*bmap)(add(h.oldbuckets, uintptr(bucket)*uintptr(t.BucketSize))) + if evacuated(b) { + continue + } + copyKeys(t, h, b, s, offset) + } + } + return +} + +func copyKeys(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { + for b != nil { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + offi := (i + uintptr(offset)) & (abi.MapBucketCount - 1) + if isEmpty(b.tophash[offi]) { + continue + } + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + k := add(unsafe.Pointer(b), dataOffset+offi*uintptr(t.KeySize)) + if t.IndirectKey() { + k = *((*unsafe.Pointer)(k)) + } + if s.len >= s.cap { + fatal("concurrent map read and map write") + } + typedmemmove(t.Key, add(s.array, uintptr(s.len)*uintptr(t.Key.Size())), k) + s.len++ + } + b = b.overflow(t) + } +} + +// values for implementing maps.values +// +//go:linkname values maps.values +func values(m any, p unsafe.Pointer) { + e := efaceOf(&m) + t := (*maptype)(unsafe.Pointer(e._type)) + h := (*hmap)(e.data) + if h == nil || h.count == 0 { + return + } + s := (*slice)(p) + r := int(rand()) + offset := uint8(r >> h.B & (abi.MapBucketCount - 1)) + if h.B == 0 { + copyValues(t, h, (*bmap)(h.buckets), s, offset) + return + } + arraySize := int(bucketShift(h.B)) + buckets := h.buckets + for i := 0; i < arraySize; i++ { + bucket := (i + r) & (arraySize - 1) + b := (*bmap)(add(buckets, uintptr(bucket)*uintptr(t.BucketSize))) + copyValues(t, h, b, s, offset) + } + + if h.growing() { + oldArraySize := int(h.noldbuckets()) + for i := 0; i < oldArraySize; i++ { + bucket := (i + r) & (oldArraySize - 1) + b := (*bmap)(add(h.oldbuckets, uintptr(bucket)*uintptr(t.BucketSize))) + if evacuated(b) { + continue + } + copyValues(t, h, b, s, offset) + } + } + return +} + +func copyValues(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { + for b != nil { + for i := uintptr(0); i < abi.MapBucketCount; i++ { + offi := (i + uintptr(offset)) & (abi.MapBucketCount - 1) + if isEmpty(b.tophash[offi]) { + continue + } + + if h.flags&hashWriting != 0 { + fatal("concurrent map read and map write") + } + + ele := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+offi*uintptr(t.ValueSize)) + if t.IndirectElem() { + ele = *((*unsafe.Pointer)(ele)) + } + if s.len >= s.cap { + fatal("concurrent map read and map write") + } + typedmemmove(t.Elem, add(s.array, uintptr(s.len)*uintptr(t.Elem.Size())), ele) + s.len++ + } + b = b.overflow(t) + } +} From 4f7dc282c4bdfba4e63b39bbe9846c1469dc7ee5 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 19 Apr 2024 13:52:31 -0400 Subject: [PATCH 166/866] all: split old and swiss map abi and compiler integration The two map implementations are still identical, but now the compiler targets the appropriate ABI depending on GOEXPERIMENT. For #54766. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-linux-amd64-longtest-swissmap Change-Id: I8438f64f044ba9de30ddbf2b8ceb9b4edd2d5614 Reviewed-on: https://go-review.googlesource.com/c/go/+/580779 Reviewed-by: Michael Knyszek Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt --- .../internal/reflectdata/map_noswiss.go | 303 ++++++++++++++++++ .../compile/internal/reflectdata/map_swiss.go | 303 ++++++++++++++++++ .../compile/internal/reflectdata/reflect.go | 291 +---------------- src/cmd/compile/internal/rttype/rttype.go | 6 +- src/cmd/compile/internal/ssagen/ssa.go | 14 +- src/cmd/compile/internal/types/fmt.go | 2 +- src/cmd/compile/internal/types/sizeof_test.go | 2 +- src/cmd/compile/internal/types/type.go | 67 ++-- src/cmd/compile/internal/walk/builtin.go | 113 ++++++- src/cmd/compile/internal/walk/order.go | 7 +- src/cmd/compile/internal/walk/walk.go | 38 ++- src/cmd/link/internal/ld/deadcode.go | 8 +- src/cmd/link/internal/ld/dwarf.go | 132 +++++++- src/cmd/link/internal/ld/dwarf_test.go | 11 +- src/internal/abi/map.go | 19 -- src/internal/abi/map_noswiss.go | 55 ++++ src/internal/abi/map_select_noswiss.go | 10 + src/internal/abi/map_select_swiss.go | 22 ++ src/internal/abi/map_swiss.go | 55 ++++ src/internal/abi/type.go | 43 +-- src/reflect/all_test.go | 79 ++++- src/reflect/map_noswiss.go | 28 +- src/reflect/map_swiss.go | 28 +- src/runtime/export_map_noswiss_test.go | 58 ++++ src/runtime/export_map_swiss_test.go | 58 ++++ src/runtime/export_test.go | 46 --- src/runtime/map_fast32_noswiss.go | 42 +-- src/runtime/map_fast32_swiss.go | 42 +-- src/runtime/map_fast64_noswiss.go | 42 +-- src/runtime/map_fast64_swiss.go | 42 +-- src/runtime/map_faststr_noswiss.go | 68 ++-- src/runtime/map_faststr_swiss.go | 68 ++-- src/runtime/map_noswiss.go | 104 +++--- src/runtime/map_noswiss_test.go | 188 +++++++++++ src/runtime/map_swiss.go | 104 +++--- src/runtime/map_swiss_test.go | 188 +++++++++++ src/runtime/map_test.go | 176 ---------- src/runtime/runtime-gdb.py | 1 + src/runtime/runtime-gdb_test.go | 4 +- src/runtime/type.go | 12 +- 40 files changed, 1969 insertions(+), 910 deletions(-) create mode 100644 src/cmd/compile/internal/reflectdata/map_noswiss.go create mode 100644 src/cmd/compile/internal/reflectdata/map_swiss.go delete mode 100644 src/internal/abi/map.go create mode 100644 src/internal/abi/map_noswiss.go create mode 100644 src/internal/abi/map_select_noswiss.go create mode 100644 src/internal/abi/map_select_swiss.go create mode 100644 src/internal/abi/map_swiss.go create mode 100644 src/runtime/export_map_noswiss_test.go create mode 100644 src/runtime/export_map_swiss_test.go create mode 100644 src/runtime/map_noswiss_test.go create mode 100644 src/runtime/map_swiss_test.go diff --git a/src/cmd/compile/internal/reflectdata/map_noswiss.go b/src/cmd/compile/internal/reflectdata/map_noswiss.go new file mode 100644 index 00000000000000..e2dc4ecace10f1 --- /dev/null +++ b/src/cmd/compile/internal/reflectdata/map_noswiss.go @@ -0,0 +1,303 @@ +// Copyright 2024 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 reflectdata + +import ( + "internal/abi" + + "cmd/compile/internal/base" + "cmd/compile/internal/ir" + "cmd/compile/internal/rttype" + "cmd/compile/internal/types" + "cmd/internal/obj" + "cmd/internal/objabi" + "cmd/internal/src" +) + +// OldMapBucketType makes the map bucket type given the type of the map. +func OldMapBucketType(t *types.Type) *types.Type { + // Builds a type representing a Bucket structure for + // the given map type. This type is not visible to users - + // we include only enough information to generate a correct GC + // program for it. + // Make sure this stays in sync with runtime/map.go. + // + // A "bucket" is a "struct" { + // tophash [abi.OldMapBucketCount]uint8 + // keys [abi.OldMapBucketCount]keyType + // elems [abi.OldMapBucketCount]elemType + // overflow *bucket + // } + if t.MapType().OldBucket != nil { + return t.MapType().OldBucket + } + + keytype := t.Key() + elemtype := t.Elem() + types.CalcSize(keytype) + types.CalcSize(elemtype) + if keytype.Size() > abi.OldMapMaxKeyBytes { + keytype = types.NewPtr(keytype) + } + if elemtype.Size() > abi.OldMapMaxElemBytes { + elemtype = types.NewPtr(elemtype) + } + + field := make([]*types.Field, 0, 5) + + // The first field is: uint8 topbits[BUCKETSIZE]. + arr := types.NewArray(types.Types[types.TUINT8], abi.OldMapBucketCount) + field = append(field, makefield("topbits", arr)) + + arr = types.NewArray(keytype, abi.OldMapBucketCount) + arr.SetNoalg(true) + keys := makefield("keys", arr) + field = append(field, keys) + + arr = types.NewArray(elemtype, abi.OldMapBucketCount) + arr.SetNoalg(true) + elems := makefield("elems", arr) + field = append(field, elems) + + // If keys and elems have no pointers, the map implementation + // can keep a list of overflow pointers on the side so that + // buckets can be marked as having no pointers. + // Arrange for the bucket to have no pointers by changing + // the type of the overflow field to uintptr in this case. + // See comment on hmap.overflow in runtime/map.go. + otyp := types.Types[types.TUNSAFEPTR] + if !elemtype.HasPointers() && !keytype.HasPointers() { + otyp = types.Types[types.TUINTPTR] + } + overflow := makefield("overflow", otyp) + field = append(field, overflow) + + // link up fields + bucket := types.NewStruct(field[:]) + bucket.SetNoalg(true) + types.CalcSize(bucket) + + // Check invariants that map code depends on. + if !types.IsComparable(t.Key()) { + base.Fatalf("unsupported map key type for %v", t) + } + if abi.OldMapBucketCount < 8 { + base.Fatalf("bucket size %d too small for proper alignment %d", abi.OldMapBucketCount, 8) + } + if uint8(keytype.Alignment()) > abi.OldMapBucketCount { + base.Fatalf("key align too big for %v", t) + } + if uint8(elemtype.Alignment()) > abi.OldMapBucketCount { + base.Fatalf("elem align %d too big for %v, BUCKETSIZE=%d", elemtype.Alignment(), t, abi.OldMapBucketCount) + } + if keytype.Size() > abi.OldMapMaxKeyBytes { + base.Fatalf("key size too large for %v", t) + } + if elemtype.Size() > abi.OldMapMaxElemBytes { + base.Fatalf("elem size too large for %v", t) + } + if t.Key().Size() > abi.OldMapMaxKeyBytes && !keytype.IsPtr() { + base.Fatalf("key indirect incorrect for %v", t) + } + if t.Elem().Size() > abi.OldMapMaxElemBytes && !elemtype.IsPtr() { + base.Fatalf("elem indirect incorrect for %v", t) + } + if keytype.Size()%keytype.Alignment() != 0 { + base.Fatalf("key size not a multiple of key align for %v", t) + } + if elemtype.Size()%elemtype.Alignment() != 0 { + base.Fatalf("elem size not a multiple of elem align for %v", t) + } + if uint8(bucket.Alignment())%uint8(keytype.Alignment()) != 0 { + base.Fatalf("bucket align not multiple of key align %v", t) + } + if uint8(bucket.Alignment())%uint8(elemtype.Alignment()) != 0 { + base.Fatalf("bucket align not multiple of elem align %v", t) + } + if keys.Offset%keytype.Alignment() != 0 { + base.Fatalf("bad alignment of keys in bmap for %v", t) + } + if elems.Offset%elemtype.Alignment() != 0 { + base.Fatalf("bad alignment of elems in bmap for %v", t) + } + + // Double-check that overflow field is final memory in struct, + // with no padding at end. + if overflow.Offset != bucket.Size()-int64(types.PtrSize) { + base.Fatalf("bad offset of overflow in bmap for %v, overflow.Offset=%d, bucket.Size()-int64(types.PtrSize)=%d", + t, overflow.Offset, bucket.Size()-int64(types.PtrSize)) + } + + t.MapType().OldBucket = bucket + + bucket.StructType().Map = t + return bucket +} + +var oldHmapType *types.Type + +// OldMapType returns a type interchangeable with runtime.hmap. +// Make sure this stays in sync with runtime/map.go. +func OldMapType() *types.Type { + if oldHmapType != nil { + return oldHmapType + } + + // build a struct: + // type hmap struct { + // count int + // flags uint8 + // B uint8 + // noverflow uint16 + // hash0 uint32 + // buckets unsafe.Pointer + // oldbuckets unsafe.Pointer + // nevacuate uintptr + // extra unsafe.Pointer // *mapextra + // } + // must match runtime/map.go:hmap. + fields := []*types.Field{ + makefield("count", types.Types[types.TINT]), + makefield("flags", types.Types[types.TUINT8]), + makefield("B", types.Types[types.TUINT8]), + makefield("noverflow", types.Types[types.TUINT16]), + makefield("hash0", types.Types[types.TUINT32]), // Used in walk.go for OMAKEMAP. + makefield("buckets", types.Types[types.TUNSAFEPTR]), // Used in walk.go for OMAKEMAP. + makefield("oldbuckets", types.Types[types.TUNSAFEPTR]), + makefield("nevacuate", types.Types[types.TUINTPTR]), + makefield("extra", types.Types[types.TUNSAFEPTR]), + } + + n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("hmap")) + hmap := types.NewNamed(n) + n.SetType(hmap) + n.SetTypecheck(1) + + hmap.SetUnderlying(types.NewStruct(fields)) + types.CalcSize(hmap) + + // The size of hmap should be 48 bytes on 64 bit + // and 28 bytes on 32 bit platforms. + if size := int64(8 + 5*types.PtrSize); hmap.Size() != size { + base.Fatalf("hmap size not correct: got %d, want %d", hmap.Size(), size) + } + + oldHmapType = hmap + return hmap +} + +var oldHiterType *types.Type + +// OldMapIterType returns a type interchangeable with runtime.hiter. +// Make sure this stays in sync with runtime/map.go. +func OldMapIterType() *types.Type { + if oldHiterType != nil { + return oldHiterType + } + + hmap := OldMapType() + + // build a struct: + // type hiter struct { + // key unsafe.Pointer // *Key + // elem unsafe.Pointer // *Elem + // t unsafe.Pointer // *OldMapType + // h *hmap + // buckets unsafe.Pointer + // bptr unsafe.Pointer // *bmap + // overflow unsafe.Pointer // *[]*bmap + // oldoverflow unsafe.Pointer // *[]*bmap + // startBucket uintptr + // offset uint8 + // wrapped bool + // B uint8 + // i uint8 + // bucket uintptr + // checkBucket uintptr + // } + // must match runtime/map.go:hiter. + fields := []*types.Field{ + makefield("key", types.Types[types.TUNSAFEPTR]), // Used in range.go for TMAP. + makefield("elem", types.Types[types.TUNSAFEPTR]), // Used in range.go for TMAP. + makefield("t", types.Types[types.TUNSAFEPTR]), + makefield("h", types.NewPtr(hmap)), + makefield("buckets", types.Types[types.TUNSAFEPTR]), + makefield("bptr", types.Types[types.TUNSAFEPTR]), + makefield("overflow", types.Types[types.TUNSAFEPTR]), + makefield("oldoverflow", types.Types[types.TUNSAFEPTR]), + makefield("startBucket", types.Types[types.TUINTPTR]), + makefield("offset", types.Types[types.TUINT8]), + makefield("wrapped", types.Types[types.TBOOL]), + makefield("B", types.Types[types.TUINT8]), + makefield("i", types.Types[types.TUINT8]), + makefield("bucket", types.Types[types.TUINTPTR]), + makefield("checkBucket", types.Types[types.TUINTPTR]), + } + + // build iterator struct holding the above fields + n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("hiter")) + hiter := types.NewNamed(n) + n.SetType(hiter) + n.SetTypecheck(1) + + hiter.SetUnderlying(types.NewStruct(fields)) + types.CalcSize(hiter) + if hiter.Size() != int64(12*types.PtrSize) { + base.Fatalf("hash_iter size not correct %d %d", hiter.Size(), 12*types.PtrSize) + } + + oldHiterType = hiter + return hiter +} + +func writeOldMapType(t *types.Type, lsym *obj.LSym, c rttype.Cursor) { + // internal/abi.OldMapType + s1 := writeType(t.Key()) + s2 := writeType(t.Elem()) + s3 := writeType(OldMapBucketType(t)) + hasher := genhash(t.Key()) + + c.Field("Key").WritePtr(s1) + c.Field("Elem").WritePtr(s2) + c.Field("Bucket").WritePtr(s3) + c.Field("Hasher").WritePtr(hasher) + var flags uint32 + // Note: flags must match maptype accessors in ../../../../runtime/type.go + // and maptype builder in ../../../../reflect/type.go:MapOf. + if t.Key().Size() > abi.OldMapMaxKeyBytes { + c.Field("KeySize").WriteUint8(uint8(types.PtrSize)) + flags |= 1 // indirect key + } else { + c.Field("KeySize").WriteUint8(uint8(t.Key().Size())) + } + + if t.Elem().Size() > abi.OldMapMaxElemBytes { + c.Field("ValueSize").WriteUint8(uint8(types.PtrSize)) + flags |= 2 // indirect value + } else { + c.Field("ValueSize").WriteUint8(uint8(t.Elem().Size())) + } + c.Field("BucketSize").WriteUint16(uint16(OldMapBucketType(t).Size())) + if types.IsReflexive(t.Key()) { + flags |= 4 // reflexive key + } + if needkeyupdate(t.Key()) { + flags |= 8 // need key update + } + if hashMightPanic(t.Key()) { + flags |= 16 // hash might panic + } + c.Field("Flags").WriteUint32(flags) + + if u := t.Underlying(); u != t { + // If t is a named map type, also keep the underlying map + // type live in the binary. This is important to make sure that + // a named map and that same map cast to its underlying type via + // reflection, use the same hash function. See issue 37716. + r := obj.Addrel(lsym) + r.Sym = writeType(u) + r.Type = objabi.R_KEEP + } +} diff --git a/src/cmd/compile/internal/reflectdata/map_swiss.go b/src/cmd/compile/internal/reflectdata/map_swiss.go new file mode 100644 index 00000000000000..4fed93517e6b4b --- /dev/null +++ b/src/cmd/compile/internal/reflectdata/map_swiss.go @@ -0,0 +1,303 @@ +// Copyright 2024 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 reflectdata + +import ( + "internal/abi" + + "cmd/compile/internal/base" + "cmd/compile/internal/ir" + "cmd/compile/internal/rttype" + "cmd/compile/internal/types" + "cmd/internal/obj" + "cmd/internal/objabi" + "cmd/internal/src" +) + +// SwissMapBucketType makes the map bucket type given the type of the map. +func SwissMapBucketType(t *types.Type) *types.Type { + // Builds a type representing a Bucket structure for + // the given map type. This type is not visible to users - + // we include only enough information to generate a correct GC + // program for it. + // Make sure this stays in sync with runtime/map.go. + // + // A "bucket" is a "struct" { + // tophash [abi.SwissMapBucketCount]uint8 + // keys [abi.SwissMapBucketCount]keyType + // elems [abi.SwissMapBucketCount]elemType + // overflow *bucket + // } + if t.MapType().SwissBucket != nil { + return t.MapType().SwissBucket + } + + keytype := t.Key() + elemtype := t.Elem() + types.CalcSize(keytype) + types.CalcSize(elemtype) + if keytype.Size() > abi.SwissMapMaxKeyBytes { + keytype = types.NewPtr(keytype) + } + if elemtype.Size() > abi.SwissMapMaxElemBytes { + elemtype = types.NewPtr(elemtype) + } + + field := make([]*types.Field, 0, 5) + + // The first field is: uint8 topbits[BUCKETSIZE]. + arr := types.NewArray(types.Types[types.TUINT8], abi.SwissMapBucketCount) + field = append(field, makefield("topbits", arr)) + + arr = types.NewArray(keytype, abi.SwissMapBucketCount) + arr.SetNoalg(true) + keys := makefield("keys", arr) + field = append(field, keys) + + arr = types.NewArray(elemtype, abi.SwissMapBucketCount) + arr.SetNoalg(true) + elems := makefield("elems", arr) + field = append(field, elems) + + // If keys and elems have no pointers, the map implementation + // can keep a list of overflow pointers on the side so that + // buckets can be marked as having no pointers. + // Arrange for the bucket to have no pointers by changing + // the type of the overflow field to uintptr in this case. + // See comment on hmap.overflow in runtime/map.go. + otyp := types.Types[types.TUNSAFEPTR] + if !elemtype.HasPointers() && !keytype.HasPointers() { + otyp = types.Types[types.TUINTPTR] + } + overflow := makefield("overflow", otyp) + field = append(field, overflow) + + // link up fields + bucket := types.NewStruct(field[:]) + bucket.SetNoalg(true) + types.CalcSize(bucket) + + // Check invariants that map code depends on. + if !types.IsComparable(t.Key()) { + base.Fatalf("unsupported map key type for %v", t) + } + if abi.SwissMapBucketCount < 8 { + base.Fatalf("bucket size %d too small for proper alignment %d", abi.SwissMapBucketCount, 8) + } + if uint8(keytype.Alignment()) > abi.SwissMapBucketCount { + base.Fatalf("key align too big for %v", t) + } + if uint8(elemtype.Alignment()) > abi.SwissMapBucketCount { + base.Fatalf("elem align %d too big for %v, BUCKETSIZE=%d", elemtype.Alignment(), t, abi.SwissMapBucketCount) + } + if keytype.Size() > abi.SwissMapMaxKeyBytes { + base.Fatalf("key size too large for %v", t) + } + if elemtype.Size() > abi.SwissMapMaxElemBytes { + base.Fatalf("elem size too large for %v", t) + } + if t.Key().Size() > abi.SwissMapMaxKeyBytes && !keytype.IsPtr() { + base.Fatalf("key indirect incorrect for %v", t) + } + if t.Elem().Size() > abi.SwissMapMaxElemBytes && !elemtype.IsPtr() { + base.Fatalf("elem indirect incorrect for %v", t) + } + if keytype.Size()%keytype.Alignment() != 0 { + base.Fatalf("key size not a multiple of key align for %v", t) + } + if elemtype.Size()%elemtype.Alignment() != 0 { + base.Fatalf("elem size not a multiple of elem align for %v", t) + } + if uint8(bucket.Alignment())%uint8(keytype.Alignment()) != 0 { + base.Fatalf("bucket align not multiple of key align %v", t) + } + if uint8(bucket.Alignment())%uint8(elemtype.Alignment()) != 0 { + base.Fatalf("bucket align not multiple of elem align %v", t) + } + if keys.Offset%keytype.Alignment() != 0 { + base.Fatalf("bad alignment of keys in bmap for %v", t) + } + if elems.Offset%elemtype.Alignment() != 0 { + base.Fatalf("bad alignment of elems in bmap for %v", t) + } + + // Double-check that overflow field is final memory in struct, + // with no padding at end. + if overflow.Offset != bucket.Size()-int64(types.PtrSize) { + base.Fatalf("bad offset of overflow in bmap for %v, overflow.Offset=%d, bucket.Size()-int64(types.PtrSize)=%d", + t, overflow.Offset, bucket.Size()-int64(types.PtrSize)) + } + + t.MapType().SwissBucket = bucket + + bucket.StructType().Map = t + return bucket +} + +var swissHmapType *types.Type + +// SwissMapType returns a type interchangeable with runtime.hmap. +// Make sure this stays in sync with runtime/map.go. +func SwissMapType() *types.Type { + if swissHmapType != nil { + return swissHmapType + } + + // build a struct: + // type hmap struct { + // count int + // flags uint8 + // B uint8 + // noverflow uint16 + // hash0 uint32 + // buckets unsafe.Pointer + // oldbuckets unsafe.Pointer + // nevacuate uintptr + // extra unsafe.Pointer // *mapextra + // } + // must match runtime/map.go:hmap. + fields := []*types.Field{ + makefield("count", types.Types[types.TINT]), + makefield("flags", types.Types[types.TUINT8]), + makefield("B", types.Types[types.TUINT8]), + makefield("noverflow", types.Types[types.TUINT16]), + makefield("hash0", types.Types[types.TUINT32]), // Used in walk.go for OMAKEMAP. + makefield("buckets", types.Types[types.TUNSAFEPTR]), // Used in walk.go for OMAKEMAP. + makefield("oldbuckets", types.Types[types.TUNSAFEPTR]), + makefield("nevacuate", types.Types[types.TUINTPTR]), + makefield("extra", types.Types[types.TUNSAFEPTR]), + } + + n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("hmap")) + hmap := types.NewNamed(n) + n.SetType(hmap) + n.SetTypecheck(1) + + hmap.SetUnderlying(types.NewStruct(fields)) + types.CalcSize(hmap) + + // The size of hmap should be 48 bytes on 64 bit + // and 28 bytes on 32 bit platforms. + if size := int64(8 + 5*types.PtrSize); hmap.Size() != size { + base.Fatalf("hmap size not correct: got %d, want %d", hmap.Size(), size) + } + + swissHmapType = hmap + return hmap +} + +var swissHiterType *types.Type + +// SwissMapIterType returns a type interchangeable with runtime.hiter. +// Make sure this stays in sync with runtime/map.go. +func SwissMapIterType() *types.Type { + if swissHiterType != nil { + return swissHiterType + } + + hmap := SwissMapType() + + // build a struct: + // type hiter struct { + // key unsafe.Pointer // *Key + // elem unsafe.Pointer // *Elem + // t unsafe.Pointer // *SwissMapType + // h *hmap + // buckets unsafe.Pointer + // bptr unsafe.Pointer // *bmap + // overflow unsafe.Pointer // *[]*bmap + // oldoverflow unsafe.Pointer // *[]*bmap + // startBucket uintptr + // offset uint8 + // wrapped bool + // B uint8 + // i uint8 + // bucket uintptr + // checkBucket uintptr + // } + // must match runtime/map.go:hiter. + fields := []*types.Field{ + makefield("key", types.Types[types.TUNSAFEPTR]), // Used in range.go for TMAP. + makefield("elem", types.Types[types.TUNSAFEPTR]), // Used in range.go for TMAP. + makefield("t", types.Types[types.TUNSAFEPTR]), + makefield("h", types.NewPtr(hmap)), + makefield("buckets", types.Types[types.TUNSAFEPTR]), + makefield("bptr", types.Types[types.TUNSAFEPTR]), + makefield("overflow", types.Types[types.TUNSAFEPTR]), + makefield("oldoverflow", types.Types[types.TUNSAFEPTR]), + makefield("startBucket", types.Types[types.TUINTPTR]), + makefield("offset", types.Types[types.TUINT8]), + makefield("wrapped", types.Types[types.TBOOL]), + makefield("B", types.Types[types.TUINT8]), + makefield("i", types.Types[types.TUINT8]), + makefield("bucket", types.Types[types.TUINTPTR]), + makefield("checkBucket", types.Types[types.TUINTPTR]), + } + + // build iterator struct hswissing the above fields + n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("hiter")) + hiter := types.NewNamed(n) + n.SetType(hiter) + n.SetTypecheck(1) + + hiter.SetUnderlying(types.NewStruct(fields)) + types.CalcSize(hiter) + if hiter.Size() != int64(12*types.PtrSize) { + base.Fatalf("hash_iter size not correct %d %d", hiter.Size(), 12*types.PtrSize) + } + + swissHiterType = hiter + return hiter +} + +func writeSwissMapType(t *types.Type, lsym *obj.LSym, c rttype.Cursor) { + // internal/abi.SwissMapType + s1 := writeType(t.Key()) + s2 := writeType(t.Elem()) + s3 := writeType(SwissMapBucketType(t)) + hasher := genhash(t.Key()) + + c.Field("Key").WritePtr(s1) + c.Field("Elem").WritePtr(s2) + c.Field("Bucket").WritePtr(s3) + c.Field("Hasher").WritePtr(hasher) + var flags uint32 + // Note: flags must match maptype accessors in ../../../../runtime/type.go + // and maptype builder in ../../../../reflect/type.go:MapOf. + if t.Key().Size() > abi.SwissMapMaxKeyBytes { + c.Field("KeySize").WriteUint8(uint8(types.PtrSize)) + flags |= 1 // indirect key + } else { + c.Field("KeySize").WriteUint8(uint8(t.Key().Size())) + } + + if t.Elem().Size() > abi.SwissMapMaxElemBytes { + c.Field("ValueSize").WriteUint8(uint8(types.PtrSize)) + flags |= 2 // indirect value + } else { + c.Field("ValueSize").WriteUint8(uint8(t.Elem().Size())) + } + c.Field("BucketSize").WriteUint16(uint16(SwissMapBucketType(t).Size())) + if types.IsReflexive(t.Key()) { + flags |= 4 // reflexive key + } + if needkeyupdate(t.Key()) { + flags |= 8 // need key update + } + if hashMightPanic(t.Key()) { + flags |= 16 // hash might panic + } + c.Field("Flags").WriteUint32(flags) + + if u := t.Underlying(); u != t { + // If t is a named map type, also keep the underlying map + // type live in the binary. This is important to make sure that + // a named map and that same map cast to its underlying type via + // reflection, use the same hash function. See issue 37716. + r := obj.Addrel(lsym) + r.Sym = writeType(u) + r.Type = objabi.R_KEEP + } +} diff --git a/src/cmd/compile/internal/reflectdata/reflect.go b/src/cmd/compile/internal/reflectdata/reflect.go index 816ccc627fccb7..06a3314c479b6f 100644 --- a/src/cmd/compile/internal/reflectdata/reflect.go +++ b/src/cmd/compile/internal/reflectdata/reflect.go @@ -8,6 +8,7 @@ import ( "encoding/binary" "fmt" "internal/abi" + "internal/buildcfg" "os" "sort" "strings" @@ -69,242 +70,6 @@ func makefield(name string, t *types.Type) *types.Field { return types.NewField(src.NoXPos, sym, t) } -// MapBucketType makes the map bucket type given the type of the map. -func MapBucketType(t *types.Type) *types.Type { - // Builds a type representing a Bucket structure for - // the given map type. This type is not visible to users - - // we include only enough information to generate a correct GC - // program for it. - // Make sure this stays in sync with runtime/map.go. - // - // A "bucket" is a "struct" { - // tophash [abi.MapBucketCount]uint8 - // keys [abi.MapBucketCount]keyType - // elems [abi.MapBucketCount]elemType - // overflow *bucket - // } - if t.MapType().Bucket != nil { - return t.MapType().Bucket - } - - keytype := t.Key() - elemtype := t.Elem() - types.CalcSize(keytype) - types.CalcSize(elemtype) - if keytype.Size() > abi.MapMaxKeyBytes { - keytype = types.NewPtr(keytype) - } - if elemtype.Size() > abi.MapMaxElemBytes { - elemtype = types.NewPtr(elemtype) - } - - field := make([]*types.Field, 0, 5) - - // The first field is: uint8 topbits[BUCKETSIZE]. - arr := types.NewArray(types.Types[types.TUINT8], abi.MapBucketCount) - field = append(field, makefield("topbits", arr)) - - arr = types.NewArray(keytype, abi.MapBucketCount) - arr.SetNoalg(true) - keys := makefield("keys", arr) - field = append(field, keys) - - arr = types.NewArray(elemtype, abi.MapBucketCount) - arr.SetNoalg(true) - elems := makefield("elems", arr) - field = append(field, elems) - - // If keys and elems have no pointers, the map implementation - // can keep a list of overflow pointers on the side so that - // buckets can be marked as having no pointers. - // Arrange for the bucket to have no pointers by changing - // the type of the overflow field to uintptr in this case. - // See comment on hmap.overflow in runtime/map.go. - otyp := types.Types[types.TUNSAFEPTR] - if !elemtype.HasPointers() && !keytype.HasPointers() { - otyp = types.Types[types.TUINTPTR] - } - overflow := makefield("overflow", otyp) - field = append(field, overflow) - - // link up fields - bucket := types.NewStruct(field[:]) - bucket.SetNoalg(true) - types.CalcSize(bucket) - - // Check invariants that map code depends on. - if !types.IsComparable(t.Key()) { - base.Fatalf("unsupported map key type for %v", t) - } - if abi.MapBucketCount < 8 { - base.Fatalf("bucket size %d too small for proper alignment %d", abi.MapBucketCount, 8) - } - if uint8(keytype.Alignment()) > abi.MapBucketCount { - base.Fatalf("key align too big for %v", t) - } - if uint8(elemtype.Alignment()) > abi.MapBucketCount { - base.Fatalf("elem align %d too big for %v, BUCKETSIZE=%d", elemtype.Alignment(), t, abi.MapBucketCount) - } - if keytype.Size() > abi.MapMaxKeyBytes { - base.Fatalf("key size too large for %v", t) - } - if elemtype.Size() > abi.MapMaxElemBytes { - base.Fatalf("elem size too large for %v", t) - } - if t.Key().Size() > abi.MapMaxKeyBytes && !keytype.IsPtr() { - base.Fatalf("key indirect incorrect for %v", t) - } - if t.Elem().Size() > abi.MapMaxElemBytes && !elemtype.IsPtr() { - base.Fatalf("elem indirect incorrect for %v", t) - } - if keytype.Size()%keytype.Alignment() != 0 { - base.Fatalf("key size not a multiple of key align for %v", t) - } - if elemtype.Size()%elemtype.Alignment() != 0 { - base.Fatalf("elem size not a multiple of elem align for %v", t) - } - if uint8(bucket.Alignment())%uint8(keytype.Alignment()) != 0 { - base.Fatalf("bucket align not multiple of key align %v", t) - } - if uint8(bucket.Alignment())%uint8(elemtype.Alignment()) != 0 { - base.Fatalf("bucket align not multiple of elem align %v", t) - } - if keys.Offset%keytype.Alignment() != 0 { - base.Fatalf("bad alignment of keys in bmap for %v", t) - } - if elems.Offset%elemtype.Alignment() != 0 { - base.Fatalf("bad alignment of elems in bmap for %v", t) - } - - // Double-check that overflow field is final memory in struct, - // with no padding at end. - if overflow.Offset != bucket.Size()-int64(types.PtrSize) { - base.Fatalf("bad offset of overflow in bmap for %v, overflow.Offset=%d, bucket.Size()-int64(types.PtrSize)=%d", - t, overflow.Offset, bucket.Size()-int64(types.PtrSize)) - } - - t.MapType().Bucket = bucket - - bucket.StructType().Map = t - return bucket -} - -var hmapType *types.Type - -// MapType returns a type interchangeable with runtime.hmap. -// Make sure this stays in sync with runtime/map.go. -func MapType() *types.Type { - if hmapType != nil { - return hmapType - } - - // build a struct: - // type hmap struct { - // count int - // flags uint8 - // B uint8 - // noverflow uint16 - // hash0 uint32 - // buckets unsafe.Pointer - // oldbuckets unsafe.Pointer - // nevacuate uintptr - // extra unsafe.Pointer // *mapextra - // } - // must match runtime/map.go:hmap. - fields := []*types.Field{ - makefield("count", types.Types[types.TINT]), - makefield("flags", types.Types[types.TUINT8]), - makefield("B", types.Types[types.TUINT8]), - makefield("noverflow", types.Types[types.TUINT16]), - makefield("hash0", types.Types[types.TUINT32]), // Used in walk.go for OMAKEMAP. - makefield("buckets", types.Types[types.TUNSAFEPTR]), // Used in walk.go for OMAKEMAP. - makefield("oldbuckets", types.Types[types.TUNSAFEPTR]), - makefield("nevacuate", types.Types[types.TUINTPTR]), - makefield("extra", types.Types[types.TUNSAFEPTR]), - } - - n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("hmap")) - hmap := types.NewNamed(n) - n.SetType(hmap) - n.SetTypecheck(1) - - hmap.SetUnderlying(types.NewStruct(fields)) - types.CalcSize(hmap) - - // The size of hmap should be 48 bytes on 64 bit - // and 28 bytes on 32 bit platforms. - if size := int64(8 + 5*types.PtrSize); hmap.Size() != size { - base.Fatalf("hmap size not correct: got %d, want %d", hmap.Size(), size) - } - - hmapType = hmap - return hmap -} - -var hiterType *types.Type - -// MapIterType returns a type interchangeable with runtime.hiter. -// Make sure this stays in sync with runtime/map.go. -func MapIterType() *types.Type { - if hiterType != nil { - return hiterType - } - - hmap := MapType() - - // build a struct: - // type hiter struct { - // key unsafe.Pointer // *Key - // elem unsafe.Pointer // *Elem - // t unsafe.Pointer // *MapType - // h *hmap - // buckets unsafe.Pointer - // bptr unsafe.Pointer // *bmap - // overflow unsafe.Pointer // *[]*bmap - // oldoverflow unsafe.Pointer // *[]*bmap - // startBucket uintptr - // offset uint8 - // wrapped bool - // B uint8 - // i uint8 - // bucket uintptr - // checkBucket uintptr - // } - // must match runtime/map.go:hiter. - fields := []*types.Field{ - makefield("key", types.Types[types.TUNSAFEPTR]), // Used in range.go for TMAP. - makefield("elem", types.Types[types.TUNSAFEPTR]), // Used in range.go for TMAP. - makefield("t", types.Types[types.TUNSAFEPTR]), - makefield("h", types.NewPtr(hmap)), - makefield("buckets", types.Types[types.TUNSAFEPTR]), - makefield("bptr", types.Types[types.TUNSAFEPTR]), - makefield("overflow", types.Types[types.TUNSAFEPTR]), - makefield("oldoverflow", types.Types[types.TUNSAFEPTR]), - makefield("startBucket", types.Types[types.TUINTPTR]), - makefield("offset", types.Types[types.TUINT8]), - makefield("wrapped", types.Types[types.TBOOL]), - makefield("B", types.Types[types.TUINT8]), - makefield("i", types.Types[types.TUINT8]), - makefield("bucket", types.Types[types.TUINTPTR]), - makefield("checkBucket", types.Types[types.TUINTPTR]), - } - - // build iterator struct holding the above fields - n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("hiter")) - hiter := types.NewNamed(n) - n.SetType(hiter) - n.SetTypecheck(1) - - hiter.SetUnderlying(types.NewStruct(fields)) - types.CalcSize(hiter) - if hiter.Size() != int64(12*types.PtrSize) { - base.Fatalf("hash_iter size not correct %d %d", hiter.Size(), 12*types.PtrSize) - } - - hiterType = hiter - return hiter -} - // methods returns the methods of the non-interface type t, sorted by name. // Generates stub functions as needed. func methods(t *types.Type) []*typeSig { @@ -1005,7 +770,11 @@ func writeType(t *types.Type) *obj.LSym { rt = rttype.InterfaceType dataAdd = len(imethods(t)) * int(rttype.IMethod.Size()) case types.TMAP: - rt = rttype.MapType + if buildcfg.Experiment.SwissMap { + rt = rttype.SwissMapType + } else { + rt = rttype.OldMapType + } case types.TPTR: rt = rttype.PtrType // TODO: use rttype.Type for Elem() is ANY? @@ -1105,52 +874,10 @@ func writeType(t *types.Type) *obj.LSym { } case types.TMAP: - // internal/abi.MapType - s1 := writeType(t.Key()) - s2 := writeType(t.Elem()) - s3 := writeType(MapBucketType(t)) - hasher := genhash(t.Key()) - - c.Field("Key").WritePtr(s1) - c.Field("Elem").WritePtr(s2) - c.Field("Bucket").WritePtr(s3) - c.Field("Hasher").WritePtr(hasher) - var flags uint32 - // Note: flags must match maptype accessors in ../../../../runtime/type.go - // and maptype builder in ../../../../reflect/type.go:MapOf. - if t.Key().Size() > abi.MapMaxKeyBytes { - c.Field("KeySize").WriteUint8(uint8(types.PtrSize)) - flags |= 1 // indirect key - } else { - c.Field("KeySize").WriteUint8(uint8(t.Key().Size())) - } - - if t.Elem().Size() > abi.MapMaxElemBytes { - c.Field("ValueSize").WriteUint8(uint8(types.PtrSize)) - flags |= 2 // indirect value + if buildcfg.Experiment.SwissMap { + writeSwissMapType(t, lsym, c) } else { - c.Field("ValueSize").WriteUint8(uint8(t.Elem().Size())) - } - c.Field("BucketSize").WriteUint16(uint16(MapBucketType(t).Size())) - if types.IsReflexive(t.Key()) { - flags |= 4 // reflexive key - } - if needkeyupdate(t.Key()) { - flags |= 8 // need key update - } - if hashMightPanic(t.Key()) { - flags |= 16 // hash might panic - } - c.Field("Flags").WriteUint32(flags) - - if u := t.Underlying(); u != t { - // If t is a named map type, also keep the underlying map - // type live in the binary. This is important to make sure that - // a named map and that same map cast to its underlying type via - // reflection, use the same hash function. See issue 37716. - r := obj.Addrel(lsym) - r.Sym = writeType(u) - r.Type = objabi.R_KEEP + writeOldMapType(t, lsym, c) } case types.TPTR: diff --git a/src/cmd/compile/internal/rttype/rttype.go b/src/cmd/compile/internal/rttype/rttype.go index b90e23dc5b4cfd..7a57f4a0775b30 100644 --- a/src/cmd/compile/internal/rttype/rttype.go +++ b/src/cmd/compile/internal/rttype/rttype.go @@ -27,7 +27,8 @@ var ArrayType *types.Type var ChanType *types.Type var FuncType *types.Type var InterfaceType *types.Type -var MapType *types.Type +var OldMapType *types.Type +var SwissMapType *types.Type var PtrType *types.Type var SliceType *types.Type var StructType *types.Type @@ -54,7 +55,8 @@ func Init() { ChanType = fromReflect(reflect.TypeOf(abi.ChanType{})) FuncType = fromReflect(reflect.TypeOf(abi.FuncType{})) InterfaceType = fromReflect(reflect.TypeOf(abi.InterfaceType{})) - MapType = fromReflect(reflect.TypeOf(abi.MapType{})) + OldMapType = fromReflect(reflect.TypeOf(abi.OldMapType{})) + SwissMapType = fromReflect(reflect.TypeOf(abi.SwissMapType{})) PtrType = fromReflect(reflect.TypeOf(abi.PtrType{})) SliceType = fromReflect(reflect.TypeOf(abi.SliceType{})) StructType = fromReflect(reflect.TypeOf(abi.StructType{})) diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 765f4c2e98cdc4..6919901f050a8a 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -88,7 +88,11 @@ func InitConfig() { _ = types.NewPtr(types.Types[types.TINT16]) // *int16 _ = types.NewPtr(types.Types[types.TINT64]) // *int64 _ = types.NewPtr(types.ErrorType) // *error - _ = types.NewPtr(reflectdata.MapType()) // *runtime.hmap + if buildcfg.Experiment.SwissMap { + _ = types.NewPtr(reflectdata.SwissMapType()) // *runtime.hmap + } else { + _ = types.NewPtr(reflectdata.OldMapType()) // *runtime.hmap + } _ = types.NewPtr(deferstruct()) // *runtime._defer types.NewPtrCacheEnabled = false ssaConfig = ssa.NewConfig(base.Ctxt.Arch.Name, *types_, base.Ctxt, base.Flag.N == 0, Arch.SoftFloat) @@ -2939,7 +2943,13 @@ func (s *state) exprCheckPtr(n ir.Node, checkPtrOK bool) *ssa.Value { } // map <--> *hmap - if to.Kind() == types.TMAP && from == types.NewPtr(reflectdata.MapType()) { + var mt *types.Type + if buildcfg.Experiment.SwissMap { + mt = types.NewPtr(reflectdata.SwissMapType()) + } else { + mt = types.NewPtr(reflectdata.OldMapType()) + } + if to.Kind() == types.TMAP && from == mt { return v } diff --git a/src/cmd/compile/internal/types/fmt.go b/src/cmd/compile/internal/types/fmt.go index c9b9853f78d8f7..d6cc2483a6b6be 100644 --- a/src/cmd/compile/internal/types/fmt.go +++ b/src/cmd/compile/internal/types/fmt.go @@ -474,7 +474,7 @@ func tconv2(b *bytes.Buffer, t *Type, verb rune, mode fmtMode, visited map[*Type // Format the bucket struct for map[x]y as map.bucket[x]y. // This avoids a recursive print that generates very long names. switch t { - case mt.Bucket: + case mt.OldBucket, mt.SwissBucket: b.WriteString("map.bucket[") default: base.Fatalf("unknown internal map type") diff --git a/src/cmd/compile/internal/types/sizeof_test.go b/src/cmd/compile/internal/types/sizeof_test.go index 7e3e7769d78e37..27845fbd2dac78 100644 --- a/src/cmd/compile/internal/types/sizeof_test.go +++ b/src/cmd/compile/internal/types/sizeof_test.go @@ -22,7 +22,7 @@ func TestSizeof(t *testing.T) { }{ {Sym{}, 32, 64}, {Type{}, 64, 104}, - {Map{}, 12, 24}, + {Map{}, 16, 32}, {Forward{}, 20, 32}, {Func{}, 32, 56}, {Struct{}, 12, 24}, diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index 693bd9385a0de2..d8950ba89465a8 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -10,6 +10,7 @@ import ( "cmd/internal/src" "fmt" "go/constant" + "internal/buildcfg" "internal/types/errors" "sync" ) @@ -313,7 +314,17 @@ type Map struct { Key *Type // Key type Elem *Type // Val (elem) type - Bucket *Type // internal struct type representing a hash bucket + // Note: It would be cleaner to completely split Map into OldMap and + // SwissMap, but 99% of the types map code doesn't care about the + // implementation at all, so it is tons of churn to split the type. + // Only code that looks at the bucket field can care about the + // implementation. + + // GOEXPERIMENT=noswissmap fields + OldBucket *Type // internal struct type representing a hash bucket + + // GOEXPERIMENT=swissmap fields + SwissBucket *Type // internal struct type representing a hash bucket } // MapType returns t's extra map-specific fields. @@ -1206,23 +1217,43 @@ func (t *Type) cmp(x *Type) Cmp { // by the general code after the switch. case TSTRUCT: - if t.StructType().Map == nil { - if x.StructType().Map != nil { - return CMPlt // nil < non-nil - } - // to the fallthrough - } else if x.StructType().Map == nil { - return CMPgt // nil > non-nil - } else if t.StructType().Map.MapType().Bucket == t { - // Both have non-nil Map - // Special case for Maps which include a recursive type where the recursion is not broken with a named type - if x.StructType().Map.MapType().Bucket != x { - return CMPlt // bucket maps are least - } - return t.StructType().Map.cmp(x.StructType().Map) - } else if x.StructType().Map.MapType().Bucket == x { - return CMPgt // bucket maps are least - } // If t != t.Map.Bucket, fall through to general case + if buildcfg.Experiment.SwissMap { + if t.StructType().Map == nil { + if x.StructType().Map != nil { + return CMPlt // nil < non-nil + } + // to the fallthrough + } else if x.StructType().Map == nil { + return CMPgt // nil > non-nil + } else if t.StructType().Map.MapType().SwissBucket == t { + // Both have non-nil Map + // Special case for Maps which include a recursive type where the recursion is not broken with a named type + if x.StructType().Map.MapType().SwissBucket != x { + return CMPlt // bucket maps are least + } + return t.StructType().Map.cmp(x.StructType().Map) + } else if x.StructType().Map.MapType().SwissBucket == x { + return CMPgt // bucket maps are least + } // If t != t.Map.SwissBucket, fall through to general case + } else { + if t.StructType().Map == nil { + if x.StructType().Map != nil { + return CMPlt // nil < non-nil + } + // to the fallthrough + } else if x.StructType().Map == nil { + return CMPgt // nil > non-nil + } else if t.StructType().Map.MapType().OldBucket == t { + // Both have non-nil Map + // Special case for Maps which include a recursive type where the recursion is not broken with a named type + if x.StructType().Map.MapType().OldBucket != x { + return CMPlt // bucket maps are least + } + return t.StructType().Map.cmp(x.StructType().Map) + } else if x.StructType().Map.MapType().OldBucket == x { + return CMPgt // bucket maps are least + } // If t != t.Map.OldBucket, fall through to general case + } tfs := t.Fields() xfs := x.Fields() diff --git a/src/cmd/compile/internal/walk/builtin.go b/src/cmd/compile/internal/walk/builtin.go index 02e64c12a13c3b..c4147b2e2e7802 100644 --- a/src/cmd/compile/internal/walk/builtin.go +++ b/src/cmd/compile/internal/walk/builtin.go @@ -9,6 +9,7 @@ import ( "go/constant" "go/token" "internal/abi" + "internal/buildcfg" "strings" "cmd/compile/internal/base" @@ -311,8 +312,110 @@ func walkMakeChan(n *ir.MakeExpr, init *ir.Nodes) ir.Node { // walkMakeMap walks an OMAKEMAP node. func walkMakeMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { + if buildcfg.Experiment.SwissMap { + return walkMakeSwissMap(n, init) + } + return walkMakeOldMap(n, init) +} + +func walkMakeSwissMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { + t := n.Type() + hmapType := reflectdata.SwissMapType() + hint := n.Len + + // var h *hmap + var h ir.Node + if n.Esc() == ir.EscNone { + // Allocate hmap on stack. + + // var hv hmap + // h = &hv + h = stackTempAddr(init, hmapType) + + // Allocate one bucket pointed to by hmap.buckets on stack if hint + // is not larger than BUCKETSIZE. In case hint is larger than + // BUCKETSIZE runtime.makemap will allocate the buckets on the heap. + // Maximum key and elem size is 128 bytes, larger objects + // are stored with an indirection. So max bucket size is 2048+eps. + if !ir.IsConst(hint, constant.Int) || + constant.Compare(hint.Val(), token.LEQ, constant.MakeInt64(abi.SwissMapBucketCount)) { + + // In case hint is larger than BUCKETSIZE runtime.makemap + // will allocate the buckets on the heap, see #20184 + // + // if hint <= BUCKETSIZE { + // var bv bmap + // b = &bv + // h.buckets = b + // } + + nif := ir.NewIfStmt(base.Pos, ir.NewBinaryExpr(base.Pos, ir.OLE, hint, ir.NewInt(base.Pos, abi.SwissMapBucketCount)), nil, nil) + nif.Likely = true + + // var bv bmap + // b = &bv + b := stackTempAddr(&nif.Body, reflectdata.SwissMapBucketType(t)) + + // h.buckets = b + bsym := hmapType.Field(5).Sym // hmap.buckets see reflect.go:hmap + na := ir.NewAssignStmt(base.Pos, ir.NewSelectorExpr(base.Pos, ir.ODOT, h, bsym), typecheck.ConvNop(b, types.Types[types.TUNSAFEPTR])) + nif.Body.Append(na) + appendWalkStmt(init, nif) + } + } + + if ir.IsConst(hint, constant.Int) && constant.Compare(hint.Val(), token.LEQ, constant.MakeInt64(abi.SwissMapBucketCount)) { + // Handling make(map[any]any) and + // make(map[any]any, hint) where hint <= BUCKETSIZE + // special allows for faster map initialization and + // improves binary size by using calls with fewer arguments. + // For hint <= BUCKETSIZE overLoadFactor(hint, 0) is false + // and no buckets will be allocated by makemap. Therefore, + // no buckets need to be allocated in this code path. + if n.Esc() == ir.EscNone { + // Only need to initialize h.hash0 since + // hmap h has been allocated on the stack already. + // h.hash0 = rand32() + rand := mkcall("rand32", types.Types[types.TUINT32], init) + hashsym := hmapType.Field(4).Sym // hmap.hash0 see reflect.go:hmap + appendWalkStmt(init, ir.NewAssignStmt(base.Pos, ir.NewSelectorExpr(base.Pos, ir.ODOT, h, hashsym), rand)) + return typecheck.ConvNop(h, t) + } + // Call runtime.makehmap to allocate an + // hmap on the heap and initialize hmap's hash0 field. + fn := typecheck.LookupRuntime("makemap_small", t.Key(), t.Elem()) + return mkcall1(fn, n.Type(), init) + } + + if n.Esc() != ir.EscNone { + h = typecheck.NodNil() + } + // Map initialization with a variable or large hint is + // more complicated. We therefore generate a call to + // runtime.makemap to initialize hmap and allocate the + // map buckets. + + // When hint fits into int, use makemap instead of + // makemap64, which is faster and shorter on 32 bit platforms. + fnname := "makemap64" + argtype := types.Types[types.TINT64] + + // Type checking guarantees that TIDEAL hint is positive and fits in an int. + // See checkmake call in TMAP case of OMAKE case in OpSwitch in typecheck1 function. + // The case of hint overflow when converting TUINT or TUINTPTR to TINT + // will be handled by the negative range checks in makemap during runtime. + if hint.Type().IsKind(types.TIDEAL) || hint.Type().Size() <= types.Types[types.TUINT].Size() { + fnname = "makemap" + argtype = types.Types[types.TINT] + } + + fn := typecheck.LookupRuntime(fnname, hmapType, t.Key(), t.Elem()) + return mkcall1(fn, n.Type(), init, reflectdata.MakeMapRType(base.Pos, n), typecheck.Conv(hint, argtype), h) +} + +func walkMakeOldMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { t := n.Type() - hmapType := reflectdata.MapType() + hmapType := reflectdata.OldMapType() hint := n.Len // var h *hmap @@ -330,7 +433,7 @@ func walkMakeMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { // Maximum key and elem size is 128 bytes, larger objects // are stored with an indirection. So max bucket size is 2048+eps. if !ir.IsConst(hint, constant.Int) || - constant.Compare(hint.Val(), token.LEQ, constant.MakeInt64(abi.MapBucketCount)) { + constant.Compare(hint.Val(), token.LEQ, constant.MakeInt64(abi.OldMapBucketCount)) { // In case hint is larger than BUCKETSIZE runtime.makemap // will allocate the buckets on the heap, see #20184 @@ -341,12 +444,12 @@ func walkMakeMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { // h.buckets = b // } - nif := ir.NewIfStmt(base.Pos, ir.NewBinaryExpr(base.Pos, ir.OLE, hint, ir.NewInt(base.Pos, abi.MapBucketCount)), nil, nil) + nif := ir.NewIfStmt(base.Pos, ir.NewBinaryExpr(base.Pos, ir.OLE, hint, ir.NewInt(base.Pos, abi.OldMapBucketCount)), nil, nil) nif.Likely = true // var bv bmap // b = &bv - b := stackTempAddr(&nif.Body, reflectdata.MapBucketType(t)) + b := stackTempAddr(&nif.Body, reflectdata.OldMapBucketType(t)) // h.buckets = b bsym := hmapType.Field(5).Sym // hmap.buckets see reflect.go:hmap @@ -356,7 +459,7 @@ func walkMakeMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { } } - if ir.IsConst(hint, constant.Int) && constant.Compare(hint.Val(), token.LEQ, constant.MakeInt64(abi.MapBucketCount)) { + if ir.IsConst(hint, constant.Int) && constant.Compare(hint.Val(), token.LEQ, constant.MakeInt64(abi.OldMapBucketCount)) { // Handling make(map[any]any) and // make(map[any]any, hint) where hint <= BUCKETSIZE // special allows for faster map initialization and diff --git a/src/cmd/compile/internal/walk/order.go b/src/cmd/compile/internal/walk/order.go index de180a4a8d7797..896088901e9acb 100644 --- a/src/cmd/compile/internal/walk/order.go +++ b/src/cmd/compile/internal/walk/order.go @@ -7,6 +7,7 @@ package walk import ( "fmt" "go/constant" + "internal/buildcfg" "cmd/compile/internal/base" "cmd/compile/internal/ir" @@ -926,7 +927,11 @@ func (o *orderState) stmt(n ir.Node) { // n.Prealloc is the temp for the iterator. // MapIterType contains pointers and needs to be zeroed. - n.Prealloc = o.newTemp(reflectdata.MapIterType(), true) + if buildcfg.Experiment.SwissMap { + n.Prealloc = o.newTemp(reflectdata.SwissMapIterType(), true) + } else { + n.Prealloc = o.newTemp(reflectdata.OldMapIterType(), true) + } } n.Key = o.exprInPlace(n.Key) n.Value = o.exprInPlace(n.Value) diff --git a/src/cmd/compile/internal/walk/walk.go b/src/cmd/compile/internal/walk/walk.go index 439f3ac71bcd1b..3c7af883c12cc9 100644 --- a/src/cmd/compile/internal/walk/walk.go +++ b/src/cmd/compile/internal/walk/walk.go @@ -7,6 +7,7 @@ package walk import ( "fmt" "internal/abi" + "internal/buildcfg" "cmd/compile/internal/base" "cmd/compile/internal/ir" @@ -184,7 +185,42 @@ var mapassign = mkmapnames("mapassign", "ptr") var mapdelete = mkmapnames("mapdelete", "") func mapfast(t *types.Type) int { - if t.Elem().Size() > abi.MapMaxElemBytes { + if buildcfg.Experiment.SwissMap { + return mapfastSwiss(t) + } + return mapfastOld(t) +} + +func mapfastSwiss(t *types.Type) int { + if t.Elem().Size() > abi.SwissMapMaxElemBytes { + return mapslow + } + switch reflectdata.AlgType(t.Key()) { + case types.AMEM32: + if !t.Key().HasPointers() { + return mapfast32 + } + if types.PtrSize == 4 { + return mapfast32ptr + } + base.Fatalf("small pointer %v", t.Key()) + case types.AMEM64: + if !t.Key().HasPointers() { + return mapfast64 + } + if types.PtrSize == 8 { + return mapfast64ptr + } + // Two-word object, at least one of which is a pointer. + // Use the slow path. + case types.ASTRING: + return mapfaststr + } + return mapslow +} + +func mapfastOld(t *types.Type) int { + if t.Elem().Size() > abi.OldMapMaxElemBytes { return mapslow } switch reflectdata.AlgType(t.Key()) { diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index 20609ed7bfc6a3..3d547259a1833a 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -552,8 +552,12 @@ func (d *deadcodePass) decodetypeMethods(ldr *loader.Loader, arch *sys.Arch, sym off += 3 * arch.PtrSize case abi.Chan: // reflect.chanType off += 2 * arch.PtrSize - case abi.Map: // reflect.mapType - off += 4*arch.PtrSize + 8 + case abi.Map: + if buildcfg.Experiment.SwissMap { + off += 4*arch.PtrSize + 8 // internal/abi.SwissMapType + } else { + off += 4*arch.PtrSize + 8 // internal/abi.OldMapType + } case abi.Interface: // reflect.interfaceType off += 3 * arch.PtrSize default: diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go index 1dc31c256523fc..c44a689a105870 100644 --- a/src/cmd/link/internal/ld/dwarf.go +++ b/src/cmd/link/internal/ld/dwarf.go @@ -864,6 +864,110 @@ func (d *dwctxt) mkinternaltype(ctxt *Link, abbrev int, typename, keyname, valna } func (d *dwctxt) synthesizemaptypes(ctxt *Link, die *dwarf.DWDie) { + if buildcfg.Experiment.SwissMap { + d.synthesizemaptypesSwiss(ctxt, die) + } else { + d.synthesizemaptypesOld(ctxt, die) + } +} + +func (d *dwctxt) synthesizemaptypesSwiss(ctxt *Link, die *dwarf.DWDie) { + hash := walktypedef(d.findprotodie(ctxt, "type:runtime.hmap")) + bucket := walktypedef(d.findprotodie(ctxt, "type:runtime.bmap")) + + if hash == nil { + return + } + + for ; die != nil; die = die.Link { + if die.Abbrev != dwarf.DW_ABRV_MAPTYPE { + continue + } + gotype := loader.Sym(getattr(die, dwarf.DW_AT_type).Data.(dwSym)) + keytype := decodetypeMapKey(d.ldr, d.arch, gotype) + valtype := decodetypeMapValue(d.ldr, d.arch, gotype) + keydata := d.ldr.Data(keytype) + valdata := d.ldr.Data(valtype) + keysize, valsize := decodetypeSize(d.arch, keydata), decodetypeSize(d.arch, valdata) + keytype, valtype = d.walksymtypedef(d.defgotype(keytype)), d.walksymtypedef(d.defgotype(valtype)) + + // compute size info like hashmap.c does. + indirectKey, indirectVal := false, false + if keysize > abi.SwissMapMaxKeyBytes { + keysize = int64(d.arch.PtrSize) + indirectKey = true + } + if valsize > abi.SwissMapMaxElemBytes { + valsize = int64(d.arch.PtrSize) + indirectVal = true + } + + // Construct type to represent an array of BucketSize keys + keyname := d.nameFromDIESym(keytype) + dwhks := d.mkinternaltype(ctxt, dwarf.DW_ABRV_ARRAYTYPE, "[]key", keyname, "", func(dwhk *dwarf.DWDie) { + newattr(dwhk, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.SwissMapBucketCount*keysize, 0) + t := keytype + if indirectKey { + t = d.defptrto(keytype) + } + d.newrefattr(dwhk, dwarf.DW_AT_type, t) + fld := d.newdie(dwhk, dwarf.DW_ABRV_ARRAYRANGE, "size") + newattr(fld, dwarf.DW_AT_count, dwarf.DW_CLS_CONSTANT, abi.SwissMapBucketCount, 0) + d.newrefattr(fld, dwarf.DW_AT_type, d.uintptrInfoSym) + }) + + // Construct type to represent an array of BucketSize values + valname := d.nameFromDIESym(valtype) + dwhvs := d.mkinternaltype(ctxt, dwarf.DW_ABRV_ARRAYTYPE, "[]val", valname, "", func(dwhv *dwarf.DWDie) { + newattr(dwhv, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.SwissMapBucketCount*valsize, 0) + t := valtype + if indirectVal { + t = d.defptrto(valtype) + } + d.newrefattr(dwhv, dwarf.DW_AT_type, t) + fld := d.newdie(dwhv, dwarf.DW_ABRV_ARRAYRANGE, "size") + newattr(fld, dwarf.DW_AT_count, dwarf.DW_CLS_CONSTANT, abi.SwissMapBucketCount, 0) + d.newrefattr(fld, dwarf.DW_AT_type, d.uintptrInfoSym) + }) + + // Construct bucket + dwhbs := d.mkinternaltype(ctxt, dwarf.DW_ABRV_STRUCTTYPE, "bucket", keyname, valname, func(dwhb *dwarf.DWDie) { + // Copy over all fields except the field "data" from the generic + // bucket. "data" will be replaced with keys/values below. + d.copychildrenexcept(ctxt, dwhb, bucket, findchild(bucket, "data")) + + fld := d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "keys") + d.newrefattr(fld, dwarf.DW_AT_type, dwhks) + newmemberoffsetattr(fld, abi.SwissMapBucketCount) + fld = d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "values") + d.newrefattr(fld, dwarf.DW_AT_type, dwhvs) + newmemberoffsetattr(fld, abi.SwissMapBucketCount+abi.SwissMapBucketCount*int32(keysize)) + fld = d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "overflow") + d.newrefattr(fld, dwarf.DW_AT_type, d.defptrto(d.dtolsym(dwhb.Sym))) + newmemberoffsetattr(fld, abi.SwissMapBucketCount+abi.SwissMapBucketCount*(int32(keysize)+int32(valsize))) + if d.arch.RegSize > d.arch.PtrSize { + fld = d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "pad") + d.newrefattr(fld, dwarf.DW_AT_type, d.uintptrInfoSym) + newmemberoffsetattr(fld, abi.SwissMapBucketCount+abi.SwissMapBucketCount*(int32(keysize)+int32(valsize))+int32(d.arch.PtrSize)) + } + + newattr(dwhb, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.SwissMapBucketCount+abi.SwissMapBucketCount*keysize+abi.SwissMapBucketCount*valsize+int64(d.arch.RegSize), 0) + }) + + // Construct hash + dwhs := d.mkinternaltype(ctxt, dwarf.DW_ABRV_STRUCTTYPE, "hash", keyname, valname, func(dwh *dwarf.DWDie) { + d.copychildren(ctxt, dwh, hash) + d.substitutetype(dwh, "buckets", d.defptrto(dwhbs)) + d.substitutetype(dwh, "oldbuckets", d.defptrto(dwhbs)) + newattr(dwh, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, getattr(hash, dwarf.DW_AT_byte_size).Value, nil) + }) + + // make map type a pointer to hash + d.newrefattr(die, dwarf.DW_AT_type, d.defptrto(dwhs)) + } +} + +func (d *dwctxt) synthesizemaptypesOld(ctxt *Link, die *dwarf.DWDie) { hash := walktypedef(d.findprotodie(ctxt, "type:runtime.hmap")) bucket := walktypedef(d.findprotodie(ctxt, "type:runtime.bmap")) @@ -885,11 +989,11 @@ func (d *dwctxt) synthesizemaptypes(ctxt *Link, die *dwarf.DWDie) { // compute size info like hashmap.c does. indirectKey, indirectVal := false, false - if keysize > abi.MapMaxKeyBytes { + if keysize > abi.OldMapMaxKeyBytes { keysize = int64(d.arch.PtrSize) indirectKey = true } - if valsize > abi.MapMaxElemBytes { + if valsize > abi.OldMapMaxElemBytes { valsize = int64(d.arch.PtrSize) indirectVal = true } @@ -897,28 +1001,28 @@ func (d *dwctxt) synthesizemaptypes(ctxt *Link, die *dwarf.DWDie) { // Construct type to represent an array of BucketSize keys keyname := d.nameFromDIESym(keytype) dwhks := d.mkinternaltype(ctxt, dwarf.DW_ABRV_ARRAYTYPE, "[]key", keyname, "", func(dwhk *dwarf.DWDie) { - newattr(dwhk, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.MapBucketCount*keysize, 0) + newattr(dwhk, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.OldMapBucketCount*keysize, 0) t := keytype if indirectKey { t = d.defptrto(keytype) } d.newrefattr(dwhk, dwarf.DW_AT_type, t) fld := d.newdie(dwhk, dwarf.DW_ABRV_ARRAYRANGE, "size") - newattr(fld, dwarf.DW_AT_count, dwarf.DW_CLS_CONSTANT, abi.MapBucketCount, 0) + newattr(fld, dwarf.DW_AT_count, dwarf.DW_CLS_CONSTANT, abi.OldMapBucketCount, 0) d.newrefattr(fld, dwarf.DW_AT_type, d.uintptrInfoSym) }) // Construct type to represent an array of BucketSize values valname := d.nameFromDIESym(valtype) dwhvs := d.mkinternaltype(ctxt, dwarf.DW_ABRV_ARRAYTYPE, "[]val", valname, "", func(dwhv *dwarf.DWDie) { - newattr(dwhv, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.MapBucketCount*valsize, 0) + newattr(dwhv, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.OldMapBucketCount*valsize, 0) t := valtype if indirectVal { t = d.defptrto(valtype) } d.newrefattr(dwhv, dwarf.DW_AT_type, t) fld := d.newdie(dwhv, dwarf.DW_ABRV_ARRAYRANGE, "size") - newattr(fld, dwarf.DW_AT_count, dwarf.DW_CLS_CONSTANT, abi.MapBucketCount, 0) + newattr(fld, dwarf.DW_AT_count, dwarf.DW_CLS_CONSTANT, abi.OldMapBucketCount, 0) d.newrefattr(fld, dwarf.DW_AT_type, d.uintptrInfoSym) }) @@ -930,20 +1034,20 @@ func (d *dwctxt) synthesizemaptypes(ctxt *Link, die *dwarf.DWDie) { fld := d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "keys") d.newrefattr(fld, dwarf.DW_AT_type, dwhks) - newmemberoffsetattr(fld, abi.MapBucketCount) + newmemberoffsetattr(fld, abi.OldMapBucketCount) fld = d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "values") d.newrefattr(fld, dwarf.DW_AT_type, dwhvs) - newmemberoffsetattr(fld, abi.MapBucketCount+abi.MapBucketCount*int32(keysize)) + newmemberoffsetattr(fld, abi.OldMapBucketCount+abi.OldMapBucketCount*int32(keysize)) fld = d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "overflow") d.newrefattr(fld, dwarf.DW_AT_type, d.defptrto(d.dtolsym(dwhb.Sym))) - newmemberoffsetattr(fld, abi.MapBucketCount+abi.MapBucketCount*(int32(keysize)+int32(valsize))) + newmemberoffsetattr(fld, abi.OldMapBucketCount+abi.OldMapBucketCount*(int32(keysize)+int32(valsize))) if d.arch.RegSize > d.arch.PtrSize { fld = d.newdie(dwhb, dwarf.DW_ABRV_STRUCTFIELD, "pad") d.newrefattr(fld, dwarf.DW_AT_type, d.uintptrInfoSym) - newmemberoffsetattr(fld, abi.MapBucketCount+abi.MapBucketCount*(int32(keysize)+int32(valsize))+int32(d.arch.PtrSize)) + newmemberoffsetattr(fld, abi.OldMapBucketCount+abi.OldMapBucketCount*(int32(keysize)+int32(valsize))+int32(d.arch.PtrSize)) } - newattr(dwhb, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.MapBucketCount+abi.MapBucketCount*keysize+abi.MapBucketCount*valsize+int64(d.arch.RegSize), 0) + newattr(dwhb, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, abi.OldMapBucketCount+abi.OldMapBucketCount*keysize+abi.OldMapBucketCount*valsize+int64(d.arch.RegSize), 0) }) // Construct hash @@ -1782,7 +1886,6 @@ func dwarfGenerateDebugInfo(ctxt *Link) { "type:internal/abi.ArrayType", "type:internal/abi.ChanType", "type:internal/abi.FuncType", - "type:internal/abi.MapType", "type:internal/abi.PtrType", "type:internal/abi.SliceType", "type:internal/abi.StructType", @@ -1791,6 +1894,11 @@ func dwarfGenerateDebugInfo(ctxt *Link) { "type:internal/abi.Imethod"} { d.defgotype(d.lookupOrDiag(typ)) } + if buildcfg.Experiment.SwissMap { + d.defgotype(d.lookupOrDiag("type:internal/abi.SwissMapType")) + } else { + d.defgotype(d.lookupOrDiag("type:internal/abi.OldMapType")) + } // fake root DIE for compile unit DIEs var dwroot dwarf.DWDie diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go index 8cea5739999d33..40202bd31256bc 100644 --- a/src/cmd/link/internal/ld/dwarf_test.go +++ b/src/cmd/link/internal/ld/dwarf_test.go @@ -60,7 +60,6 @@ func TestRuntimeTypesPresent(t *testing.T) { "internal/abi.ArrayType": true, "internal/abi.ChanType": true, "internal/abi.FuncType": true, - "internal/abi.MapType": true, "internal/abi.PtrType": true, "internal/abi.SliceType": true, "internal/abi.StructType": true, @@ -72,6 +71,16 @@ func TestRuntimeTypesPresent(t *testing.T) { if len(found) != len(want) { t.Errorf("found %v, want %v", found, want) } + + // Must have one of OldMapType or SwissMapType. + want = map[string]bool{ + "internal/abi.OldMapType": true, + "internal/abi.SwissMapType": true, + } + found = findTypes(t, dwarf, want) + if len(found) != 1 { + t.Errorf("map type want one of %v found %v", want, found) + } } func findTypes(t *testing.T, dw *dwarf.Data, want map[string]bool) (found map[string]bool) { diff --git a/src/internal/abi/map.go b/src/internal/abi/map.go deleted file mode 100644 index 12ad1b891a78a0..00000000000000 --- a/src/internal/abi/map.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023 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 abi - -// Map constants common to several packages -// runtime/runtime-gdb.py:MapTypePrinter contains its own copy -const ( - // Maximum number of key/elem pairs a bucket can hold. - MapBucketCountBits = 3 // log2 of number of elements in a bucket. - MapBucketCount = 1 << MapBucketCountBits - - // Maximum key or elem size to keep inline (instead of mallocing per element). - // Must fit in a uint8. - // Note: fast map functions cannot handle big elems (bigger than MapMaxElemBytes). - MapMaxKeyBytes = 128 - MapMaxElemBytes = 128 // Must fit in a uint8. -) diff --git a/src/internal/abi/map_noswiss.go b/src/internal/abi/map_noswiss.go new file mode 100644 index 00000000000000..97afd9da4a2bbe --- /dev/null +++ b/src/internal/abi/map_noswiss.go @@ -0,0 +1,55 @@ +// Copyright 2023 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 abi + +import ( + "unsafe" +) + +// Map constants common to several packages +// runtime/runtime-gdb.py:MapTypePrinter contains its own copy +const ( + // Maximum number of key/elem pairs a bucket can hold. + OldMapBucketCountBits = 3 // log2 of number of elements in a bucket. + OldMapBucketCount = 1 << OldMapBucketCountBits + + // Maximum key or elem size to keep inline (instead of mallocing per element). + // Must fit in a uint8. + // Note: fast map functions cannot handle big elems (bigger than MapMaxElemBytes). + OldMapMaxKeyBytes = 128 + OldMapMaxElemBytes = 128 // Must fit in a uint8. +) + +type OldMapType struct { + Type + Key *Type + Elem *Type + Bucket *Type // internal type representing a hash bucket + // function for hashing keys (ptr to key, seed) -> hash + Hasher func(unsafe.Pointer, uintptr) uintptr + KeySize uint8 // size of key slot + ValueSize uint8 // size of elem slot + BucketSize uint16 // size of bucket + Flags uint32 +} + +// Note: flag values must match those used in the TMAP case +// in ../cmd/compile/internal/reflectdata/reflect.go:writeType. +func (mt *OldMapType) IndirectKey() bool { // store ptr to key instead of key itself + return mt.Flags&1 != 0 +} +func (mt *OldMapType) IndirectElem() bool { // store ptr to elem instead of elem itself + return mt.Flags&2 != 0 +} +func (mt *OldMapType) ReflexiveKey() bool { // true if k==k for all keys + return mt.Flags&4 != 0 +} +func (mt *OldMapType) NeedKeyUpdate() bool { // true if we need to update key on an overwrite + return mt.Flags&8 != 0 +} +func (mt *OldMapType) HashMightPanic() bool { // true if hash function might panic + return mt.Flags&16 != 0 +} + diff --git a/src/internal/abi/map_select_noswiss.go b/src/internal/abi/map_select_noswiss.go new file mode 100644 index 00000000000000..ab2b69de7e84df --- /dev/null +++ b/src/internal/abi/map_select_noswiss.go @@ -0,0 +1,10 @@ +// Copyright 2023 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. + +//go:build !goexperiment.swissmap + +package abi + +// See comment in map_select_swiss.go. +type mapType = OldMapType diff --git a/src/internal/abi/map_select_swiss.go b/src/internal/abi/map_select_swiss.go new file mode 100644 index 00000000000000..88a0bb2ebb9410 --- /dev/null +++ b/src/internal/abi/map_select_swiss.go @@ -0,0 +1,22 @@ +// Copyright 2024 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. + +//go:build goexperiment.swissmap + +package abi + +// Select the map type that this binary is built using. This is for common +// lookup methods like Type.Key to know which type to use. +// +// Note that mapType *must not be used by any functions called in the +// compiler to build a target program* because the compiler must use the map +// type determined by run-time GOEXPERIMENT, not the build tags used to build +// the compiler. +// +// TODO(prattmic): This package is rather confusing because it has many +// functions that can't be used by the compiler (e.g., Type.Uncommon depends on +// the layout of type + uncommon objects in the binary. It would be incorrect +// for an ad-hoc local Type object). It may be best to move code that isn't +// usable by the compiler out of the package. +type mapType = SwissMapType diff --git a/src/internal/abi/map_swiss.go b/src/internal/abi/map_swiss.go new file mode 100644 index 00000000000000..3f58040a189741 --- /dev/null +++ b/src/internal/abi/map_swiss.go @@ -0,0 +1,55 @@ +// Copyright 2023 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 abi + +import ( + "unsafe" +) + +// Map constants common to several packages +// runtime/runtime-gdb.py:MapTypePrinter contains its own copy +const ( + // Maximum number of key/elem pairs a bucket can hold. + SwissMapBucketCountBits = 3 // log2 of number of elements in a bucket. + SwissMapBucketCount = 1 << SwissMapBucketCountBits + + // Maximum key or elem size to keep inline (instead of mallocing per element). + // Must fit in a uint8. + // Note: fast map functions cannot handle big elems (bigger than MapMaxElemBytes). + SwissMapMaxKeyBytes = 128 + SwissMapMaxElemBytes = 128 // Must fit in a uint8. +) + +type SwissMapType struct { + Type + Key *Type + Elem *Type + Bucket *Type // internal type representing a hash bucket + // function for hashing keys (ptr to key, seed) -> hash + Hasher func(unsafe.Pointer, uintptr) uintptr + KeySize uint8 // size of key slot + ValueSize uint8 // size of elem slot + BucketSize uint16 // size of bucket + Flags uint32 +} + +// Note: flag values must match those used in the TMAP case +// in ../cmd/compile/internal/reflectdata/reflect.go:writeType. +func (mt *SwissMapType) IndirectKey() bool { // store ptr to key instead of key itself + return mt.Flags&1 != 0 +} +func (mt *SwissMapType) IndirectElem() bool { // store ptr to elem instead of elem itself + return mt.Flags&2 != 0 +} +func (mt *SwissMapType) ReflexiveKey() bool { // true if k==k for all keys + return mt.Flags&4 != 0 +} +func (mt *SwissMapType) NeedKeyUpdate() bool { // true if we need to update key on an overwrite + return mt.Flags&8 != 0 +} +func (mt *SwissMapType) HashMightPanic() bool { // true if hash function might panic + return mt.Flags&16 != 0 +} + diff --git a/src/internal/abi/type.go b/src/internal/abi/type.go index 786bafff723c96..598c919d0c87cb 100644 --- a/src/internal/abi/type.go +++ b/src/internal/abi/type.go @@ -341,7 +341,7 @@ func (t *Type) Uncommon() *UncommonType { return &(*u)(unsafe.Pointer(t)).u case Map: type u struct { - MapType + mapType u UncommonType } return &(*u)(unsafe.Pointer(t)).u @@ -370,7 +370,7 @@ func (t *Type) Elem() *Type { tt := (*ChanType)(unsafe.Pointer(t)) return tt.Elem case Map: - tt := (*MapType)(unsafe.Pointer(t)) + tt := (*mapType)(unsafe.Pointer(t)) return tt.Elem case Pointer: tt := (*PtrType)(unsafe.Pointer(t)) @@ -390,12 +390,12 @@ func (t *Type) StructType() *StructType { return (*StructType)(unsafe.Pointer(t)) } -// MapType returns t cast to a *MapType, or nil if its tag does not match. -func (t *Type) MapType() *MapType { +// MapType returns t cast to a *OldMapType or *SwissMapType, or nil if its tag does not match. +func (t *Type) MapType() *mapType { if t.Kind() != Map { return nil } - return (*MapType)(unsafe.Pointer(t)) + return (*mapType)(unsafe.Pointer(t)) } // ArrayType returns t cast to a *ArrayType, or nil if its tag does not match. @@ -455,40 +455,9 @@ func (t *Type) NumMethod() int { // NumMethod returns the number of interface methods in the type's method set. func (t *InterfaceType) NumMethod() int { return len(t.Methods) } -type MapType struct { - Type - Key *Type - Elem *Type - Bucket *Type // internal type representing a hash bucket - // function for hashing keys (ptr to key, seed) -> hash - Hasher func(unsafe.Pointer, uintptr) uintptr - KeySize uint8 // size of key slot - ValueSize uint8 // size of elem slot - BucketSize uint16 // size of bucket - Flags uint32 -} - -// Note: flag values must match those used in the TMAP case -// in ../cmd/compile/internal/reflectdata/reflect.go:writeType. -func (mt *MapType) IndirectKey() bool { // store ptr to key instead of key itself - return mt.Flags&1 != 0 -} -func (mt *MapType) IndirectElem() bool { // store ptr to elem instead of elem itself - return mt.Flags&2 != 0 -} -func (mt *MapType) ReflexiveKey() bool { // true if k==k for all keys - return mt.Flags&4 != 0 -} -func (mt *MapType) NeedKeyUpdate() bool { // true if we need to update key on an overwrite - return mt.Flags&8 != 0 -} -func (mt *MapType) HashMightPanic() bool { // true if hash function might panic - return mt.Flags&16 != 0 -} - func (t *Type) Key() *Type { if t.Kind() == Map { - return (*MapType)(unsafe.Pointer(t)).Key + return (*mapType)(unsafe.Pointer(t)).Key } return nil } diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index 277c703eddeaf7..2870a0adef3dfb 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -12,6 +12,7 @@ import ( "go/token" "internal/abi" "internal/goarch" + "internal/goexperiment" "internal/testenv" "io" "math" @@ -32,8 +33,6 @@ import ( "unsafe" ) -const bucketCount = abi.MapBucketCount - var sink any func TestBool(t *testing.T) { @@ -7277,47 +7276,95 @@ func TestGCBits(t *testing.T) { verifyGCBits(t, TypeOf(([][10000]Xscalar)(nil)), lit(1)) verifyGCBits(t, SliceOf(ArrayOf(10000, Tscalar)), lit(1)) - hdr := make([]byte, bucketCount/goarch.PtrSize) + if goexperiment.SwissMap { + const bucketCount = abi.SwissMapBucketCount - verifyMapBucket := func(t *testing.T, k, e Type, m any, want []byte) { - verifyGCBits(t, MapBucketOf(k, e), want) - verifyGCBits(t, CachedBucketOf(TypeOf(m)), want) - } - verifyMapBucket(t, + hdr := make([]byte, bucketCount/goarch.PtrSize) + + verifyMapBucket := func(t *testing.T, k, e Type, m any, want []byte) { + verifyGCBits(t, MapBucketOf(k, e), want) + verifyGCBits(t, CachedBucketOf(TypeOf(m)), want) + } + verifyMapBucket(t, Tscalar, Tptr, map[Xscalar]Xptr(nil), join(hdr, rep(bucketCount, lit(0)), rep(bucketCount, lit(1)), lit(1))) - verifyMapBucket(t, + verifyMapBucket(t, Tscalarptr, Tptr, map[Xscalarptr]Xptr(nil), join(hdr, rep(bucketCount, lit(0, 1)), rep(bucketCount, lit(1)), lit(1))) - verifyMapBucket(t, Tint64, Tptr, + verifyMapBucket(t, Tint64, Tptr, map[int64]Xptr(nil), join(hdr, rep(bucketCount, rep(8/goarch.PtrSize, lit(0))), rep(bucketCount, lit(1)), lit(1))) - verifyMapBucket(t, + verifyMapBucket(t, Tscalar, Tscalar, map[Xscalar]Xscalar(nil), empty) - verifyMapBucket(t, + verifyMapBucket(t, ArrayOf(2, Tscalarptr), ArrayOf(3, Tptrscalar), map[[2]Xscalarptr][3]Xptrscalar(nil), join(hdr, rep(bucketCount*2, lit(0, 1)), rep(bucketCount*3, lit(1, 0)), lit(1))) - verifyMapBucket(t, + verifyMapBucket(t, ArrayOf(64/goarch.PtrSize, Tscalarptr), ArrayOf(64/goarch.PtrSize, Tptrscalar), map[[64 / goarch.PtrSize]Xscalarptr][64 / goarch.PtrSize]Xptrscalar(nil), join(hdr, rep(bucketCount*64/goarch.PtrSize, lit(0, 1)), rep(bucketCount*64/goarch.PtrSize, lit(1, 0)), lit(1))) - verifyMapBucket(t, + verifyMapBucket(t, ArrayOf(64/goarch.PtrSize+1, Tscalarptr), ArrayOf(64/goarch.PtrSize, Tptrscalar), map[[64/goarch.PtrSize + 1]Xscalarptr][64 / goarch.PtrSize]Xptrscalar(nil), join(hdr, rep(bucketCount, lit(1)), rep(bucketCount*64/goarch.PtrSize, lit(1, 0)), lit(1))) - verifyMapBucket(t, + verifyMapBucket(t, ArrayOf(64/goarch.PtrSize, Tscalarptr), ArrayOf(64/goarch.PtrSize+1, Tptrscalar), map[[64 / goarch.PtrSize]Xscalarptr][64/goarch.PtrSize + 1]Xptrscalar(nil), join(hdr, rep(bucketCount*64/goarch.PtrSize, lit(0, 1)), rep(bucketCount, lit(1)), lit(1))) - verifyMapBucket(t, + verifyMapBucket(t, ArrayOf(64/goarch.PtrSize+1, Tscalarptr), ArrayOf(64/goarch.PtrSize+1, Tptrscalar), map[[64/goarch.PtrSize + 1]Xscalarptr][64/goarch.PtrSize + 1]Xptrscalar(nil), join(hdr, rep(bucketCount, lit(1)), rep(bucketCount, lit(1)), lit(1))) + } else { + const bucketCount = abi.OldMapBucketCount + + hdr := make([]byte, bucketCount/goarch.PtrSize) + + verifyMapBucket := func(t *testing.T, k, e Type, m any, want []byte) { + verifyGCBits(t, MapBucketOf(k, e), want) + verifyGCBits(t, CachedBucketOf(TypeOf(m)), want) + } + verifyMapBucket(t, + Tscalar, Tptr, + map[Xscalar]Xptr(nil), + join(hdr, rep(bucketCount, lit(0)), rep(bucketCount, lit(1)), lit(1))) + verifyMapBucket(t, + Tscalarptr, Tptr, + map[Xscalarptr]Xptr(nil), + join(hdr, rep(bucketCount, lit(0, 1)), rep(bucketCount, lit(1)), lit(1))) + verifyMapBucket(t, Tint64, Tptr, + map[int64]Xptr(nil), + join(hdr, rep(bucketCount, rep(8/goarch.PtrSize, lit(0))), rep(bucketCount, lit(1)), lit(1))) + verifyMapBucket(t, + Tscalar, Tscalar, + map[Xscalar]Xscalar(nil), + empty) + verifyMapBucket(t, + ArrayOf(2, Tscalarptr), ArrayOf(3, Tptrscalar), + map[[2]Xscalarptr][3]Xptrscalar(nil), + join(hdr, rep(bucketCount*2, lit(0, 1)), rep(bucketCount*3, lit(1, 0)), lit(1))) + verifyMapBucket(t, + ArrayOf(64/goarch.PtrSize, Tscalarptr), ArrayOf(64/goarch.PtrSize, Tptrscalar), + map[[64 / goarch.PtrSize]Xscalarptr][64 / goarch.PtrSize]Xptrscalar(nil), + join(hdr, rep(bucketCount*64/goarch.PtrSize, lit(0, 1)), rep(bucketCount*64/goarch.PtrSize, lit(1, 0)), lit(1))) + verifyMapBucket(t, + ArrayOf(64/goarch.PtrSize+1, Tscalarptr), ArrayOf(64/goarch.PtrSize, Tptrscalar), + map[[64/goarch.PtrSize + 1]Xscalarptr][64 / goarch.PtrSize]Xptrscalar(nil), + join(hdr, rep(bucketCount, lit(1)), rep(bucketCount*64/goarch.PtrSize, lit(1, 0)), lit(1))) + verifyMapBucket(t, + ArrayOf(64/goarch.PtrSize, Tscalarptr), ArrayOf(64/goarch.PtrSize+1, Tptrscalar), + map[[64 / goarch.PtrSize]Xscalarptr][64/goarch.PtrSize + 1]Xptrscalar(nil), + join(hdr, rep(bucketCount*64/goarch.PtrSize, lit(0, 1)), rep(bucketCount, lit(1)), lit(1))) + verifyMapBucket(t, + ArrayOf(64/goarch.PtrSize+1, Tscalarptr), ArrayOf(64/goarch.PtrSize+1, Tptrscalar), + map[[64/goarch.PtrSize + 1]Xscalarptr][64/goarch.PtrSize + 1]Xptrscalar(nil), + join(hdr, rep(bucketCount, lit(1)), rep(bucketCount, lit(1)), lit(1))) + } } func rep(n int, b []byte) []byte { return bytes.Repeat(b, n) } diff --git a/src/reflect/map_noswiss.go b/src/reflect/map_noswiss.go index de92e76df01c0e..5af50ac77918cc 100644 --- a/src/reflect/map_noswiss.go +++ b/src/reflect/map_noswiss.go @@ -14,7 +14,7 @@ import ( // mapType represents a map type. type mapType struct { - abi.MapType + abi.OldMapType } func (t *rtype) Key() Type { @@ -70,13 +70,13 @@ func MapOf(key, elem Type) Type { return typehash(ktyp, p, seed) } mt.Flags = 0 - if ktyp.Size_ > abi.MapMaxKeyBytes { + if ktyp.Size_ > abi.OldMapMaxKeyBytes { mt.KeySize = uint8(goarch.PtrSize) mt.Flags |= 1 // indirect key } else { mt.KeySize = uint8(ktyp.Size_) } - if etyp.Size_ > abi.MapMaxElemBytes { + if etyp.Size_ > abi.OldMapMaxElemBytes { mt.ValueSize = uint8(goarch.PtrSize) mt.Flags |= 2 // indirect value } else { @@ -99,10 +99,10 @@ func MapOf(key, elem Type) Type { } func bucketOf(ktyp, etyp *abi.Type) *abi.Type { - if ktyp.Size_ > abi.MapMaxKeyBytes { + if ktyp.Size_ > abi.OldMapMaxKeyBytes { ktyp = ptrTo(ktyp) } - if etyp.Size_ > abi.MapMaxElemBytes { + if etyp.Size_ > abi.OldMapMaxElemBytes { etyp = ptrTo(etyp) } @@ -114,29 +114,29 @@ func bucketOf(ktyp, etyp *abi.Type) *abi.Type { var gcdata *byte var ptrdata uintptr - size := abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize + size := abi.OldMapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize if size&uintptr(ktyp.Align_-1) != 0 || size&uintptr(etyp.Align_-1) != 0 { panic("reflect: bad size computation in MapOf") } if ktyp.Pointers() || etyp.Pointers() { - nptr := (abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize + nptr := (abi.OldMapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize n := (nptr + 7) / 8 // Runtime needs pointer masks to be a multiple of uintptr in size. n = (n + goarch.PtrSize - 1) &^ (goarch.PtrSize - 1) mask := make([]byte, n) - base := uintptr(abi.MapBucketCount / goarch.PtrSize) + base := uintptr(abi.OldMapBucketCount / goarch.PtrSize) if ktyp.Pointers() { - emitGCMask(mask, base, ktyp, abi.MapBucketCount) + emitGCMask(mask, base, ktyp, abi.OldMapBucketCount) } - base += abi.MapBucketCount * ktyp.Size_ / goarch.PtrSize + base += abi.OldMapBucketCount * ktyp.Size_ / goarch.PtrSize if etyp.Pointers() { - emitGCMask(mask, base, etyp, abi.MapBucketCount) + emitGCMask(mask, base, etyp, abi.OldMapBucketCount) } - base += abi.MapBucketCount * etyp.Size_ / goarch.PtrSize + base += abi.OldMapBucketCount * etyp.Size_ / goarch.PtrSize word := base mask[word/8] |= 1 << (word % 8) @@ -180,7 +180,7 @@ func (v Value) MapIndex(key Value) Value { // of unexported fields. var e unsafe.Pointer - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.OldMapMaxElemBytes { k := *(*string)(key.ptr) e = mapaccess_faststr(v.typ(), v.pointer(), k) } else { @@ -423,7 +423,7 @@ func (v Value) SetMapIndex(key, elem Value) { key.mustBeExported() tt := (*mapType)(unsafe.Pointer(v.typ())) - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.OldMapMaxElemBytes { k := *(*string)(key.ptr) if elem.typ() == nil { mapdelete_faststr(v.typ(), v.pointer(), k) diff --git a/src/reflect/map_swiss.go b/src/reflect/map_swiss.go index a42a9d6f895058..39f799c9b23dff 100644 --- a/src/reflect/map_swiss.go +++ b/src/reflect/map_swiss.go @@ -14,7 +14,7 @@ import ( // mapType represents a map type. type mapType struct { - abi.MapType + abi.SwissMapType } func (t *rtype) Key() Type { @@ -70,13 +70,13 @@ func MapOf(key, elem Type) Type { return typehash(ktyp, p, seed) } mt.Flags = 0 - if ktyp.Size_ > abi.MapMaxKeyBytes { + if ktyp.Size_ > abi.SwissMapMaxKeyBytes { mt.KeySize = uint8(goarch.PtrSize) mt.Flags |= 1 // indirect key } else { mt.KeySize = uint8(ktyp.Size_) } - if etyp.Size_ > abi.MapMaxElemBytes { + if etyp.Size_ > abi.SwissMapMaxElemBytes { mt.ValueSize = uint8(goarch.PtrSize) mt.Flags |= 2 // indirect value } else { @@ -99,10 +99,10 @@ func MapOf(key, elem Type) Type { } func bucketOf(ktyp, etyp *abi.Type) *abi.Type { - if ktyp.Size_ > abi.MapMaxKeyBytes { + if ktyp.Size_ > abi.SwissMapMaxKeyBytes { ktyp = ptrTo(ktyp) } - if etyp.Size_ > abi.MapMaxElemBytes { + if etyp.Size_ > abi.SwissMapMaxElemBytes { etyp = ptrTo(etyp) } @@ -114,29 +114,29 @@ func bucketOf(ktyp, etyp *abi.Type) *abi.Type { var gcdata *byte var ptrdata uintptr - size := abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize + size := abi.SwissMapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize if size&uintptr(ktyp.Align_-1) != 0 || size&uintptr(etyp.Align_-1) != 0 { panic("reflect: bad size computation in MapOf") } if ktyp.Pointers() || etyp.Pointers() { - nptr := (abi.MapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize + nptr := (abi.SwissMapBucketCount*(1+ktyp.Size_+etyp.Size_) + goarch.PtrSize) / goarch.PtrSize n := (nptr + 7) / 8 // Runtime needs pointer masks to be a multiple of uintptr in size. n = (n + goarch.PtrSize - 1) &^ (goarch.PtrSize - 1) mask := make([]byte, n) - base := uintptr(abi.MapBucketCount / goarch.PtrSize) + base := uintptr(abi.SwissMapBucketCount / goarch.PtrSize) if ktyp.Pointers() { - emitGCMask(mask, base, ktyp, abi.MapBucketCount) + emitGCMask(mask, base, ktyp, abi.SwissMapBucketCount) } - base += abi.MapBucketCount * ktyp.Size_ / goarch.PtrSize + base += abi.SwissMapBucketCount * ktyp.Size_ / goarch.PtrSize if etyp.Pointers() { - emitGCMask(mask, base, etyp, abi.MapBucketCount) + emitGCMask(mask, base, etyp, abi.SwissMapBucketCount) } - base += abi.MapBucketCount * etyp.Size_ / goarch.PtrSize + base += abi.SwissMapBucketCount * etyp.Size_ / goarch.PtrSize word := base mask[word/8] |= 1 << (word % 8) @@ -180,7 +180,7 @@ func (v Value) MapIndex(key Value) Value { // of unexported fields. var e unsafe.Pointer - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.SwissMapMaxElemBytes { k := *(*string)(key.ptr) e = mapaccess_faststr(v.typ(), v.pointer(), k) } else { @@ -423,7 +423,7 @@ func (v Value) SetMapIndex(key, elem Value) { key.mustBeExported() tt := (*mapType)(unsafe.Pointer(v.typ())) - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.MapMaxElemBytes { + if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.SwissMapMaxElemBytes { k := *(*string)(key.ptr) if elem.typ() == nil { mapdelete_faststr(v.typ(), v.pointer(), k) diff --git a/src/runtime/export_map_noswiss_test.go b/src/runtime/export_map_noswiss_test.go new file mode 100644 index 00000000000000..9e6d81a77c01e1 --- /dev/null +++ b/src/runtime/export_map_noswiss_test.go @@ -0,0 +1,58 @@ +// Copyright 2024 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. + +//go:build !goexperiment.swissmap + +package runtime + +import ( + "internal/abi" + "unsafe" +) + +func MapBucketsCount(m map[int]int) int { + h := *(**hmap)(unsafe.Pointer(&m)) + return 1 << h.B +} + +func MapBucketsPointerIsNil(m map[int]int) bool { + h := *(**hmap)(unsafe.Pointer(&m)) + return h.buckets == nil +} + +func MapTombstoneCheck(m map[int]int) { + // Make sure emptyOne and emptyRest are distributed correctly. + // We should have a series of filled and emptyOne cells, followed by + // a series of emptyRest cells. + h := *(**hmap)(unsafe.Pointer(&m)) + i := any(m) + t := *(**maptype)(unsafe.Pointer(&i)) + + for x := 0; x < 1<= n && b.tophash[i] != emptyRest { + panic("late non-emptyRest") + } + if k == n-1 && b.tophash[i] == emptyOne { + panic("last non-emptyRest entry is emptyOne") + } + k++ + } + } + } +} diff --git a/src/runtime/export_map_swiss_test.go b/src/runtime/export_map_swiss_test.go new file mode 100644 index 00000000000000..ac0308fce060ea --- /dev/null +++ b/src/runtime/export_map_swiss_test.go @@ -0,0 +1,58 @@ +// Copyright 2024 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. + +//go:build goexperiment.swissmap + +package runtime + +import ( + "internal/abi" + "unsafe" +) + +func MapBucketsCount(m map[int]int) int { + h := *(**hmap)(unsafe.Pointer(&m)) + return 1 << h.B +} + +func MapBucketsPointerIsNil(m map[int]int) bool { + h := *(**hmap)(unsafe.Pointer(&m)) + return h.buckets == nil +} + +func MapTombstoneCheck(m map[int]int) { + // Make sure emptyOne and emptyRest are distributed correctly. + // We should have a series of filled and emptyOne cells, followed by + // a series of emptyRest cells. + h := *(**hmap)(unsafe.Pointer(&m)) + i := any(m) + t := *(**maptype)(unsafe.Pointer(&i)) + + for x := 0; x < 1<= n && b.tophash[i] != emptyRest { + panic("late non-emptyRest") + } + if k == n-1 && b.tophash[i] == emptyOne { + panic("last non-emptyRest entry is emptyOne") + } + k++ + } + } + } +} diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index b18480d0af26ac..c45a4586d48089 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -483,16 +483,6 @@ func (rw *RWMutex) Unlock() { const RuntimeHmapSize = unsafe.Sizeof(hmap{}) -func MapBucketsCount(m map[int]int) int { - h := *(**hmap)(unsafe.Pointer(&m)) - return 1 << h.B -} - -func MapBucketsPointerIsNil(m map[int]int) bool { - h := *(**hmap)(unsafe.Pointer(&m)) - return h.buckets == nil -} - func OverLoadFactor(count int, B uint8) bool { return overLoadFactor(count, B) } @@ -614,42 +604,6 @@ func stackOverflow(x *byte) { stackOverflow(&buf[0]) } -func MapTombstoneCheck(m map[int]int) { - // Make sure emptyOne and emptyRest are distributed correctly. - // We should have a series of filled and emptyOne cells, followed by - // a series of emptyRest cells. - h := *(**hmap)(unsafe.Pointer(&m)) - i := any(m) - t := *(**maptype)(unsafe.Pointer(&i)) - - for x := 0; x < 1<= n && b.tophash[i] != emptyRest { - panic("late non-emptyRest") - } - if k == n-1 && b.tophash[i] == emptyOne { - panic("last non-emptyRest entry is emptyOne") - } - k++ - } - } - } -} - func RunGetgThreadSwitchTest() { // Test that getg works correctly with thread switch. // With gccgo, if we generate getg inlined, the backend diff --git a/src/runtime/map_fast32_noswiss.go b/src/runtime/map_fast32_noswiss.go index 58d5a050f50b4e..05e2ee54db2105 100644 --- a/src/runtime/map_fast32_noswiss.go +++ b/src/runtime/map_fast32_noswiss.go @@ -43,9 +43,9 @@ func mapaccess1_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + for i, k := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, k = i+1, add(k, 4) { if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*4+i*uintptr(t.ValueSize)) } } } @@ -92,9 +92,9 @@ func mapaccess2_fast32(t *maptype, h *hmap, key uint32) (unsafe.Pointer, bool) { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + for i, k := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, k = i+1, add(k, 4) { if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*4+i*uintptr(t.ValueSize)), true } } } @@ -145,7 +145,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { inserti = i @@ -185,7 +185,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.OldMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) // store new key at insert position @@ -194,7 +194,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*4+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.OldMapBucketCount*4+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -244,7 +244,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { inserti = i @@ -284,7 +284,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.OldMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) // store new key at insert position @@ -293,7 +293,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*4+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.OldMapBucketCount*4+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -326,7 +326,7 @@ func mapdelete_fast32(t *maptype, h *hmap, key uint32) { bOrig := b search: for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + for i, k := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, k = i+1, add(k, 4) { if key != *(*uint32)(k) || isEmpty(b.tophash[i]) { continue } @@ -338,7 +338,7 @@ search: // 32 bits wide and the key is 32 bits wide also. *(*unsafe.Pointer)(k) = nil } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*4+i*uintptr(t.ValueSize)) if t.Elem.Pointers() { memclrHasPointers(e, t.Elem.Size_) } else { @@ -347,7 +347,7 @@ search: b.tophash[i] = emptyOne // If the bucket now ends in a bunch of emptyOne states, // change those to emptyRest states. - if i == abi.MapBucketCount-1 { + if i == abi.OldMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -366,7 +366,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.OldMapBucketCount - 1 } else { i-- } @@ -414,7 +414,7 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { x := &xy[0] x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.MapBucketCount*4) + x.e = add(x.k, abi.OldMapBucketCount*4) if !h.sameSizeGrow() { // Only calculate y pointers if we're growing bigger. @@ -422,13 +422,13 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { y := &xy[1] y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.MapBucketCount*4) + y.e = add(y.k, abi.OldMapBucketCount*4) } for ; b != nil; b = b.overflow(t) { k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.MapBucketCount*4) - for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 4), add(e, uintptr(t.ValueSize)) { + e := add(k, abi.OldMapBucketCount*4) + for i := 0; i < abi.OldMapBucketCount; i, k, e = i+1, add(k, 4), add(e, uintptr(t.ValueSize)) { top := b.tophash[i] if isEmpty(top) { b.tophash[i] = evacuatedEmpty @@ -450,13 +450,13 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap dst := &xy[useY] // evacuation destination - if dst.i == abi.MapBucketCount { + if dst.i == abi.OldMapBucketCount { dst.b = h.newoverflow(t, dst.b) dst.i = 0 dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.MapBucketCount*4) + dst.e = add(dst.k, abi.OldMapBucketCount*4) } - dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + dst.b.tophash[dst.i&(abi.OldMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check // Copy key. if goarch.PtrSize == 4 && t.Key.Pointers() && writeBarrier.enabled { diff --git a/src/runtime/map_fast32_swiss.go b/src/runtime/map_fast32_swiss.go index a6fb26716b3977..af75f182ec4e96 100644 --- a/src/runtime/map_fast32_swiss.go +++ b/src/runtime/map_fast32_swiss.go @@ -43,9 +43,9 @@ func mapaccess1_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 4) { if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*4+i*uintptr(t.ValueSize)) } } } @@ -83,9 +83,9 @@ func mapaccess2_fast32(t *maptype, h *hmap, key uint32) (unsafe.Pointer, bool) { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 4) { if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*4+i*uintptr(t.ValueSize)), true } } } @@ -125,7 +125,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { inserti = i @@ -165,7 +165,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) // store new key at insert position @@ -174,7 +174,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*4+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*4+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -215,7 +215,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { inserti = i @@ -255,7 +255,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) // store new key at insert position @@ -264,7 +264,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*4+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*4+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -297,7 +297,7 @@ func mapdelete_fast32(t *maptype, h *hmap, key uint32) { bOrig := b search: for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 4) { + for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 4) { if key != *(*uint32)(k) || isEmpty(b.tophash[i]) { continue } @@ -309,7 +309,7 @@ search: // 32 bits wide and the key is 32 bits wide also. *(*unsafe.Pointer)(k) = nil } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*4+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*4+i*uintptr(t.ValueSize)) if t.Elem.Pointers() { memclrHasPointers(e, t.Elem.Size_) } else { @@ -318,7 +318,7 @@ search: b.tophash[i] = emptyOne // If the bucket now ends in a bunch of emptyOne states, // change those to emptyRest states. - if i == abi.MapBucketCount-1 { + if i == abi.SwissMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -337,7 +337,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.SwissMapBucketCount - 1 } else { i-- } @@ -385,7 +385,7 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { x := &xy[0] x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.MapBucketCount*4) + x.e = add(x.k, abi.SwissMapBucketCount*4) if !h.sameSizeGrow() { // Only calculate y pointers if we're growing bigger. @@ -393,13 +393,13 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { y := &xy[1] y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.MapBucketCount*4) + y.e = add(y.k, abi.SwissMapBucketCount*4) } for ; b != nil; b = b.overflow(t) { k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.MapBucketCount*4) - for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 4), add(e, uintptr(t.ValueSize)) { + e := add(k, abi.SwissMapBucketCount*4) + for i := 0; i < abi.SwissMapBucketCount; i, k, e = i+1, add(k, 4), add(e, uintptr(t.ValueSize)) { top := b.tophash[i] if isEmpty(top) { b.tophash[i] = evacuatedEmpty @@ -421,13 +421,13 @@ func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap dst := &xy[useY] // evacuation destination - if dst.i == abi.MapBucketCount { + if dst.i == abi.SwissMapBucketCount { dst.b = h.newoverflow(t, dst.b) dst.i = 0 dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.MapBucketCount*4) + dst.e = add(dst.k, abi.SwissMapBucketCount*4) } - dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + dst.b.tophash[dst.i&(abi.SwissMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check // Copy key. if goarch.PtrSize == 4 && t.Key.Pointers() && writeBarrier.enabled { diff --git a/src/runtime/map_fast64_noswiss.go b/src/runtime/map_fast64_noswiss.go index bd3c1c34da0338..1d56e5c029316b 100644 --- a/src/runtime/map_fast64_noswiss.go +++ b/src/runtime/map_fast64_noswiss.go @@ -43,9 +43,9 @@ func mapaccess1_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + for i, k := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, k = i+1, add(k, 8) { if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*8+i*uintptr(t.ValueSize)) } } } @@ -92,9 +92,9 @@ func mapaccess2_fast64(t *maptype, h *hmap, key uint64) (unsafe.Pointer, bool) { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + for i, k := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, k = i+1, add(k, 8) { if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*8+i*uintptr(t.ValueSize)), true } } } @@ -145,7 +145,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { insertb = b @@ -185,7 +185,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.OldMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) // store new key at insert position @@ -194,7 +194,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*8+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.OldMapBucketCount*8+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -246,7 +246,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { insertb = b @@ -286,7 +286,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.OldMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) // store new key at insert position @@ -295,7 +295,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*8+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.OldMapBucketCount*8+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -328,7 +328,7 @@ func mapdelete_fast64(t *maptype, h *hmap, key uint64) { bOrig := b search: for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + for i, k := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, k = i+1, add(k, 8) { if key != *(*uint64)(k) || isEmpty(b.tophash[i]) { continue } @@ -342,7 +342,7 @@ search: memclrHasPointers(k, 8) } } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*8+i*uintptr(t.ValueSize)) if t.Elem.Pointers() { memclrHasPointers(e, t.Elem.Size_) } else { @@ -351,7 +351,7 @@ search: b.tophash[i] = emptyOne // If the bucket now ends in a bunch of emptyOne states, // change those to emptyRest states. - if i == abi.MapBucketCount-1 { + if i == abi.OldMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -370,7 +370,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.OldMapBucketCount - 1 } else { i-- } @@ -418,7 +418,7 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { x := &xy[0] x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.MapBucketCount*8) + x.e = add(x.k, abi.OldMapBucketCount*8) if !h.sameSizeGrow() { // Only calculate y pointers if we're growing bigger. @@ -426,13 +426,13 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { y := &xy[1] y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.MapBucketCount*8) + y.e = add(y.k, abi.OldMapBucketCount*8) } for ; b != nil; b = b.overflow(t) { k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.MapBucketCount*8) - for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 8), add(e, uintptr(t.ValueSize)) { + e := add(k, abi.OldMapBucketCount*8) + for i := 0; i < abi.OldMapBucketCount; i, k, e = i+1, add(k, 8), add(e, uintptr(t.ValueSize)) { top := b.tophash[i] if isEmpty(top) { b.tophash[i] = evacuatedEmpty @@ -454,13 +454,13 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap dst := &xy[useY] // evacuation destination - if dst.i == abi.MapBucketCount { + if dst.i == abi.OldMapBucketCount { dst.b = h.newoverflow(t, dst.b) dst.i = 0 dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.MapBucketCount*8) + dst.e = add(dst.k, abi.OldMapBucketCount*8) } - dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + dst.b.tophash[dst.i&(abi.OldMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check // Copy key. if t.Key.Pointers() && writeBarrier.enabled { diff --git a/src/runtime/map_fast64_swiss.go b/src/runtime/map_fast64_swiss.go index 105b2ea5171183..6548969ab0473f 100644 --- a/src/runtime/map_fast64_swiss.go +++ b/src/runtime/map_fast64_swiss.go @@ -43,9 +43,9 @@ func mapaccess1_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 8) { if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*8+i*uintptr(t.ValueSize)) } } } @@ -83,9 +83,9 @@ func mapaccess2_fast64(t *maptype, h *hmap, key uint64) (unsafe.Pointer, bool) { } } for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 8) { if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*8+i*uintptr(t.ValueSize)), true } } } @@ -125,7 +125,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { insertb = b @@ -165,7 +165,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) // store new key at insert position @@ -174,7 +174,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*8+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*8+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -215,7 +215,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if isEmpty(b.tophash[i]) { if insertb == nil { insertb = b @@ -255,7 +255,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) // store new key at insert position @@ -264,7 +264,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*8+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*8+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -297,7 +297,7 @@ func mapdelete_fast64(t *maptype, h *hmap, key uint64) { bOrig := b search: for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.MapBucketCount; i, k = i+1, add(k, 8) { + for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 8) { if key != *(*uint64)(k) || isEmpty(b.tophash[i]) { continue } @@ -311,7 +311,7 @@ search: memclrHasPointers(k, 8) } } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*8+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*8+i*uintptr(t.ValueSize)) if t.Elem.Pointers() { memclrHasPointers(e, t.Elem.Size_) } else { @@ -320,7 +320,7 @@ search: b.tophash[i] = emptyOne // If the bucket now ends in a bunch of emptyOne states, // change those to emptyRest states. - if i == abi.MapBucketCount-1 { + if i == abi.SwissMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -339,7 +339,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.SwissMapBucketCount - 1 } else { i-- } @@ -387,7 +387,7 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { x := &xy[0] x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.MapBucketCount*8) + x.e = add(x.k, abi.SwissMapBucketCount*8) if !h.sameSizeGrow() { // Only calculate y pointers if we're growing bigger. @@ -395,13 +395,13 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { y := &xy[1] y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.MapBucketCount*8) + y.e = add(y.k, abi.SwissMapBucketCount*8) } for ; b != nil; b = b.overflow(t) { k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.MapBucketCount*8) - for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 8), add(e, uintptr(t.ValueSize)) { + e := add(k, abi.SwissMapBucketCount*8) + for i := 0; i < abi.SwissMapBucketCount; i, k, e = i+1, add(k, 8), add(e, uintptr(t.ValueSize)) { top := b.tophash[i] if isEmpty(top) { b.tophash[i] = evacuatedEmpty @@ -423,13 +423,13 @@ func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap dst := &xy[useY] // evacuation destination - if dst.i == abi.MapBucketCount { + if dst.i == abi.SwissMapBucketCount { dst.b = h.newoverflow(t, dst.b) dst.i = 0 dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.MapBucketCount*8) + dst.e = add(dst.k, abi.SwissMapBucketCount*8) } - dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + dst.b.tophash[dst.i&(abi.SwissMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check // Copy key. if t.Key.Pointers() && writeBarrier.enabled { diff --git a/src/runtime/map_faststr_noswiss.go b/src/runtime/map_faststr_noswiss.go index 6dfe61ec465da0..bacc6071e7ae55 100644 --- a/src/runtime/map_faststr_noswiss.go +++ b/src/runtime/map_faststr_noswiss.go @@ -29,7 +29,7 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { b := (*bmap)(h.buckets) if key.len < 32 { // short key, doing lots of comparisons is ok - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -38,14 +38,14 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) } } return unsafe.Pointer(&zeroVal[0]) } // long key, try not to do more comparisons than necessary - keymaybe := uintptr(abi.MapBucketCount) - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + keymaybe := uintptr(abi.OldMapBucketCount) + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -54,7 +54,7 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { continue } if k.str == key.str { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) } // check first 4 bytes if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { @@ -64,16 +64,16 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { continue } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.OldMapBucketCount { // Two keys are potential matches. Use hash to distinguish them. goto dohash } keymaybe = i } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.OldMapBucketCount { k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) if memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)) } } return unsafe.Pointer(&zeroVal[0]) @@ -94,13 +94,13 @@ dohash: } top := tophash(hash) for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || b.tophash[i] != top { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) } } } @@ -133,7 +133,7 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { b := (*bmap)(h.buckets) if key.len < 32 { // short key, doing lots of comparisons is ok - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -142,14 +142,14 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true } } return unsafe.Pointer(&zeroVal[0]), false } // long key, try not to do more comparisons than necessary - keymaybe := uintptr(abi.MapBucketCount) - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + keymaybe := uintptr(abi.OldMapBucketCount) + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -158,7 +158,7 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { continue } if k.str == key.str { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true } // check first 4 bytes if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { @@ -168,16 +168,16 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { continue } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.OldMapBucketCount { // Two keys are potential matches. Use hash to distinguish them. goto dohash } keymaybe = i } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.OldMapBucketCount { k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) if memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)), true } } return unsafe.Pointer(&zeroVal[0]), false @@ -198,13 +198,13 @@ dohash: } top := tophash(hash) for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || b.tophash[i] != top { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true } } } @@ -257,7 +257,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if b.tophash[i] != top { if isEmpty(b.tophash[i]) && insertb == nil { insertb = b @@ -304,7 +304,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = top // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.OldMapBucketCount-1)] = top // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*2*goarch.PtrSize) // store new key at insert position @@ -312,7 +312,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -347,7 +347,7 @@ func mapdelete_faststr(t *maptype, h *hmap, ky string) { top := tophash(hash) search: for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.OldMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || b.tophash[i] != top { continue @@ -357,7 +357,7 @@ search: } // Clear key's pointer. k.str = nil - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) if t.Elem.Pointers() { memclrHasPointers(e, t.Elem.Size_) } else { @@ -366,7 +366,7 @@ search: b.tophash[i] = emptyOne // If the bucket now ends in a bunch of emptyOne states, // change those to emptyRest states. - if i == abi.MapBucketCount-1 { + if i == abi.OldMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -385,7 +385,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.OldMapBucketCount - 1 } else { i-- } @@ -433,7 +433,7 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { x := &xy[0] x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.MapBucketCount*2*goarch.PtrSize) + x.e = add(x.k, abi.OldMapBucketCount*2*goarch.PtrSize) if !h.sameSizeGrow() { // Only calculate y pointers if we're growing bigger. @@ -441,13 +441,13 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { y := &xy[1] y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.MapBucketCount*2*goarch.PtrSize) + y.e = add(y.k, abi.OldMapBucketCount*2*goarch.PtrSize) } for ; b != nil; b = b.overflow(t) { k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.MapBucketCount*2*goarch.PtrSize) - for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 2*goarch.PtrSize), add(e, uintptr(t.ValueSize)) { + e := add(k, abi.OldMapBucketCount*2*goarch.PtrSize) + for i := 0; i < abi.OldMapBucketCount; i, k, e = i+1, add(k, 2*goarch.PtrSize), add(e, uintptr(t.ValueSize)) { top := b.tophash[i] if isEmpty(top) { b.tophash[i] = evacuatedEmpty @@ -469,13 +469,13 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap dst := &xy[useY] // evacuation destination - if dst.i == abi.MapBucketCount { + if dst.i == abi.OldMapBucketCount { dst.b = h.newoverflow(t, dst.b) dst.i = 0 dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.MapBucketCount*2*goarch.PtrSize) + dst.e = add(dst.k, abi.OldMapBucketCount*2*goarch.PtrSize) } - dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + dst.b.tophash[dst.i&(abi.OldMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check // Copy key. *(*string)(dst.k) = *(*string)(k) diff --git a/src/runtime/map_faststr_swiss.go b/src/runtime/map_faststr_swiss.go index 9f3e14d869529c..340e1a32356255 100644 --- a/src/runtime/map_faststr_swiss.go +++ b/src/runtime/map_faststr_swiss.go @@ -29,7 +29,7 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { b := (*bmap)(h.buckets) if key.len < 32 { // short key, doing lots of comparisons is ok - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -38,14 +38,14 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) } } return unsafe.Pointer(&zeroVal[0]) } // long key, try not to do more comparisons than necessary - keymaybe := uintptr(abi.MapBucketCount) - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + keymaybe := uintptr(abi.SwissMapBucketCount) + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -54,7 +54,7 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { continue } if k.str == key.str { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) } // check first 4 bytes if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { @@ -64,16 +64,16 @@ func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { continue } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.SwissMapBucketCount { // Two keys are potential matches. Use hash to distinguish them. goto dohash } keymaybe = i } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.SwissMapBucketCount { k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) if memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)) } } return unsafe.Pointer(&zeroVal[0]) @@ -94,13 +94,13 @@ dohash: } top := tophash(hash) for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || b.tophash[i] != top { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) } } } @@ -124,7 +124,7 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { b := (*bmap)(h.buckets) if key.len < 32 { // short key, doing lots of comparisons is ok - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -133,14 +133,14 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true } } return unsafe.Pointer(&zeroVal[0]), false } // long key, try not to do more comparisons than necessary - keymaybe := uintptr(abi.MapBucketCount) - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + keymaybe := uintptr(abi.SwissMapBucketCount) + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || isEmpty(b.tophash[i]) { if b.tophash[i] == emptyRest { @@ -149,7 +149,7 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { continue } if k.str == key.str { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true } // check first 4 bytes if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { @@ -159,16 +159,16 @@ func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { continue } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.SwissMapBucketCount { // Two keys are potential matches. Use hash to distinguish them. goto dohash } keymaybe = i } - if keymaybe != abi.MapBucketCount { + if keymaybe != abi.SwissMapBucketCount { k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) if memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)), true } } return unsafe.Pointer(&zeroVal[0]), false @@ -189,13 +189,13 @@ dohash: } top := tophash(hash) for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || b.tophash[i] != top { continue } if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true + return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true } } } @@ -237,7 +237,7 @@ again: bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if b.tophash[i] != top { if isEmpty(b.tophash[i]) && insertb == nil { insertb = b @@ -284,7 +284,7 @@ bucketloop: insertb = h.newoverflow(t, b) inserti = 0 // not necessary, but avoids needlessly spilling inserti } - insertb.tophash[inserti&(abi.MapBucketCount-1)] = top // mask inserti to avoid bounds checks + insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = top // mask inserti to avoid bounds checks insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*2*goarch.PtrSize) // store new key at insert position @@ -292,7 +292,7 @@ bucketloop: h.count++ done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+inserti*uintptr(t.ValueSize)) + elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+inserti*uintptr(t.ValueSize)) if h.flags&hashWriting == 0 { fatal("concurrent map writes") } @@ -327,7 +327,7 @@ func mapdelete_faststr(t *maptype, h *hmap, ky string) { top := tophash(hash) search: for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.MapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { + for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { k := (*stringStruct)(kptr) if k.len != key.len || b.tophash[i] != top { continue @@ -337,7 +337,7 @@ search: } // Clear key's pointer. k.str = nil - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) if t.Elem.Pointers() { memclrHasPointers(e, t.Elem.Size_) } else { @@ -346,7 +346,7 @@ search: b.tophash[i] = emptyOne // If the bucket now ends in a bunch of emptyOne states, // change those to emptyRest states. - if i == abi.MapBucketCount-1 { + if i == abi.SwissMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -365,7 +365,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.SwissMapBucketCount - 1 } else { i-- } @@ -413,7 +413,7 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { x := &xy[0] x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.MapBucketCount*2*goarch.PtrSize) + x.e = add(x.k, abi.SwissMapBucketCount*2*goarch.PtrSize) if !h.sameSizeGrow() { // Only calculate y pointers if we're growing bigger. @@ -421,13 +421,13 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { y := &xy[1] y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.MapBucketCount*2*goarch.PtrSize) + y.e = add(y.k, abi.SwissMapBucketCount*2*goarch.PtrSize) } for ; b != nil; b = b.overflow(t) { k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.MapBucketCount*2*goarch.PtrSize) - for i := 0; i < abi.MapBucketCount; i, k, e = i+1, add(k, 2*goarch.PtrSize), add(e, uintptr(t.ValueSize)) { + e := add(k, abi.SwissMapBucketCount*2*goarch.PtrSize) + for i := 0; i < abi.SwissMapBucketCount; i, k, e = i+1, add(k, 2*goarch.PtrSize), add(e, uintptr(t.ValueSize)) { top := b.tophash[i] if isEmpty(top) { b.tophash[i] = evacuatedEmpty @@ -449,13 +449,13 @@ func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap dst := &xy[useY] // evacuation destination - if dst.i == abi.MapBucketCount { + if dst.i == abi.SwissMapBucketCount { dst.b = h.newoverflow(t, dst.b) dst.i = 0 dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.MapBucketCount*2*goarch.PtrSize) + dst.e = add(dst.k, abi.SwissMapBucketCount*2*goarch.PtrSize) } - dst.b.tophash[dst.i&(abi.MapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check + dst.b.tophash[dst.i&(abi.SwissMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check // Copy key. *(*string)(dst.k) = *(*string)(k) diff --git a/src/runtime/map_noswiss.go b/src/runtime/map_noswiss.go index aff124691f81d0..3a1c774b9d7296 100644 --- a/src/runtime/map_noswiss.go +++ b/src/runtime/map_noswiss.go @@ -63,15 +63,17 @@ import ( "unsafe" ) +type maptype = abi.OldMapType + const ( // Maximum number of key/elem pairs a bucket can hold. - bucketCntBits = abi.MapBucketCountBits + bucketCntBits = abi.OldMapBucketCountBits // Maximum average load of a bucket that triggers growth is bucketCnt*13/16 (about 80% full) // Because of minimum alignment rules, bucketCnt is known to be at least 8. // Represent as loadFactorNum/loadFactorDen, to allow integer math. loadFactorDen = 2 - loadFactorNum = loadFactorDen * abi.MapBucketCount * 13 / 16 + loadFactorNum = loadFactorDen * abi.OldMapBucketCount * 13 / 16 // data offset should be the size of the bmap struct, but needs to be // aligned correctly. For amd64p32 this means 64-bit alignment @@ -146,7 +148,7 @@ type bmap struct { // tophash generally contains the top byte of the hash value // for each key in this bucket. If tophash[0] < minTopHash, // tophash[0] is a bucket evacuation state instead. - tophash [abi.MapBucketCount]uint8 + tophash [abi.OldMapBucketCount]uint8 // Followed by bucketCnt keys and then bucketCnt elems. // NOTE: packing all the keys together and then all the elems together makes the // code a bit more complicated than alternating key/elem/key/elem/... but it allows @@ -446,7 +448,7 @@ func mapaccess1(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { top := tophash(hash) bucketloop: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break bucketloop @@ -458,7 +460,7 @@ bucketloop: k = *((*unsafe.Pointer)(k)) } if t.Key.Equal(key, k) { - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { e = *((*unsafe.Pointer)(e)) } @@ -516,7 +518,7 @@ func mapaccess2(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, bool) top := tophash(hash) bucketloop: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break bucketloop @@ -528,7 +530,7 @@ bucketloop: k = *((*unsafe.Pointer)(k)) } if t.Key.Equal(key, k) { - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { e = *((*unsafe.Pointer)(e)) } @@ -560,7 +562,7 @@ func mapaccessK(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, unsafe top := tophash(hash) bucketloop: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break bucketloop @@ -572,7 +574,7 @@ bucketloop: k = *((*unsafe.Pointer)(k)) } if t.Key.Equal(key, k) { - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { e = *((*unsafe.Pointer)(e)) } @@ -656,12 +658,12 @@ again: var elem unsafe.Pointer bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if b.tophash[i] != top { if isEmpty(b.tophash[i]) && inserti == nil { inserti = &b.tophash[i] insertk = add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) - elem = add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + elem = add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) } if b.tophash[i] == emptyRest { break bucketloop @@ -679,7 +681,7 @@ bucketloop: if t.NeedKeyUpdate() { typedmemmove(t.Key, k, key) } - elem = add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + elem = add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) goto done } ovf := b.overflow(t) @@ -703,7 +705,7 @@ bucketloop: newb := h.newoverflow(t, b) inserti = &newb.tophash[0] insertk = add(unsafe.Pointer(newb), dataOffset) - elem = add(insertk, abi.MapBucketCount*uintptr(t.KeySize)) + elem = add(insertk, abi.OldMapBucketCount*uintptr(t.KeySize)) } // store new key/elem at insert position @@ -778,7 +780,7 @@ func mapdelete(t *maptype, h *hmap, key unsafe.Pointer) { top := tophash(hash) search: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break search @@ -799,7 +801,7 @@ search: } else if t.Key.Pointers() { memclrHasPointers(k, t.Key.Size_) } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { *(*unsafe.Pointer)(e) = nil } else if t.Elem.Pointers() { @@ -812,7 +814,7 @@ search: // change those to emptyRest states. // It would be nice to make this a separate function, but // for loops are not currently inlineable. - if i == abi.MapBucketCount-1 { + if i == abi.OldMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -831,7 +833,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.OldMapBucketCount - 1 } else { i-- } @@ -908,7 +910,7 @@ func mapiterinit(t *maptype, h *hmap, it *hiter) { // decide where to start r := uintptr(rand()) it.startBucket = r & bucketMask(h.B) - it.offset = uint8(r >> h.B & (abi.MapBucketCount - 1)) + it.offset = uint8(r >> h.B & (abi.OldMapBucketCount - 1)) // iterator state it.bucket = it.startBucket @@ -983,8 +985,8 @@ next: } i = 0 } - for ; i < abi.MapBucketCount; i++ { - offi := (i + it.offset) & (abi.MapBucketCount - 1) + for ; i < abi.OldMapBucketCount; i++ { + offi := (i + it.offset) & (abi.OldMapBucketCount - 1) if isEmpty(b.tophash[offi]) || b.tophash[offi] == evacuatedEmpty { // TODO: emptyRest is hard to use here, as we start iterating // in the middle of a bucket. It's feasible, just tricky. @@ -994,7 +996,7 @@ next: if t.IndirectKey() { k = *((*unsafe.Pointer)(k)) } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(offi)*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+uintptr(offi)*uintptr(t.ValueSize)) if checkBucket != noCheck && !h.sameSizeGrow() { // Special case: iterator was started during a grow to a larger size // and the grow is not done yet. We're working on a bucket whose @@ -1096,7 +1098,7 @@ func mapclear(t *maptype, h *hmap) { for i := uintptr(0); i <= mask; i++ { b := (*bmap)(add(bucket, i*uintptr(t.BucketSize))) for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { b.tophash[i] = emptyRest } } @@ -1183,7 +1185,7 @@ func hashGrow(t *maptype, h *hmap) { // overLoadFactor reports whether count items placed in 1< abi.MapBucketCount && uintptr(count) > loadFactorNum*(bucketShift(B)/loadFactorDen) + return count > abi.OldMapBucketCount && uintptr(count) > loadFactorNum*(bucketShift(B)/loadFactorDen) } // tooManyOverflowBuckets reports whether noverflow buckets is too many for a map with 1< abi.MapMaxKeyBytes && (!t.IndirectKey() || t.KeySize != uint8(goarch.PtrSize)) || - t.Key.Size_ <= abi.MapMaxKeyBytes && (t.IndirectKey() || t.KeySize != uint8(t.Key.Size_)) { + if t.Key.Size_ > abi.OldMapMaxKeyBytes && (!t.IndirectKey() || t.KeySize != uint8(goarch.PtrSize)) || + t.Key.Size_ <= abi.OldMapMaxKeyBytes && (t.IndirectKey() || t.KeySize != uint8(t.Key.Size_)) { throw("key size wrong") } - if t.Elem.Size_ > abi.MapMaxElemBytes && (!t.IndirectElem() || t.ValueSize != uint8(goarch.PtrSize)) || - t.Elem.Size_ <= abi.MapMaxElemBytes && (t.IndirectElem() || t.ValueSize != uint8(t.Elem.Size_)) { + if t.Elem.Size_ > abi.OldMapMaxElemBytes && (!t.IndirectElem() || t.ValueSize != uint8(goarch.PtrSize)) || + t.Elem.Size_ <= abi.OldMapMaxElemBytes && (t.IndirectElem() || t.ValueSize != uint8(t.Elem.Size_)) { throw("elem size wrong") } - if t.Key.Align_ > abi.MapBucketCount { + if t.Key.Align_ > abi.OldMapBucketCount { throw("key align too big") } - if t.Elem.Align_ > abi.MapBucketCount { + if t.Elem.Align_ > abi.OldMapBucketCount { throw("elem align too big") } if t.Key.Size_%uintptr(t.Key.Align_) != 0 { @@ -1428,7 +1430,7 @@ func reflect_makemap(t *maptype, cap int) *hmap { if t.Elem.Size_%uintptr(t.Elem.Align_) != 0 { throw("elem size not a multiple of elem align") } - if abi.MapBucketCount < 8 { + if abi.OldMapBucketCount < 8 { throw("bucketsize too small for proper alignment") } if dataOffset%uintptr(t.Key.Align_) != 0 { @@ -1619,26 +1621,26 @@ func mapclone(m any) any { // moveToBmap moves a bucket from src to dst. It returns the destination bucket or new destination bucket if it overflows // and the pos that the next key/value will be written, if pos == bucketCnt means needs to written in overflow bucket. func moveToBmap(t *maptype, h *hmap, dst *bmap, pos int, src *bmap) (*bmap, int) { - for i := 0; i < abi.MapBucketCount; i++ { + for i := 0; i < abi.OldMapBucketCount; i++ { if isEmpty(src.tophash[i]) { continue } - for ; pos < abi.MapBucketCount; pos++ { + for ; pos < abi.OldMapBucketCount; pos++ { if isEmpty(dst.tophash[pos]) { break } } - if pos == abi.MapBucketCount { + if pos == abi.OldMapBucketCount { dst = h.newoverflow(t, dst) pos = 0 } srcK := add(unsafe.Pointer(src), dataOffset+uintptr(i)*uintptr(t.KeySize)) - srcEle := add(unsafe.Pointer(src), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(i)*uintptr(t.ValueSize)) + srcEle := add(unsafe.Pointer(src), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+uintptr(i)*uintptr(t.ValueSize)) dstK := add(unsafe.Pointer(dst), dataOffset+uintptr(pos)*uintptr(t.KeySize)) - dstEle := add(unsafe.Pointer(dst), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(pos)*uintptr(t.ValueSize)) + dstEle := add(unsafe.Pointer(dst), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+uintptr(pos)*uintptr(t.ValueSize)) dst.tophash[pos] = src.tophash[i] if t.IndirectKey() { @@ -1742,7 +1744,7 @@ func mapclone2(t *maptype, src *hmap) *hmap { // Process entries one at a time. for srcBmap != nil { // move from oldBlucket to new bucket - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { if isEmpty(srcBmap.tophash[i]) { continue } @@ -1756,7 +1758,7 @@ func mapclone2(t *maptype, src *hmap) *hmap { srcK = *((*unsafe.Pointer)(srcK)) } - srcEle := add(unsafe.Pointer(srcBmap), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + srcEle := add(unsafe.Pointer(srcBmap), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { srcEle = *((*unsafe.Pointer)(srcEle)) } @@ -1782,7 +1784,7 @@ func keys(m any, p unsafe.Pointer) { } s := (*slice)(p) r := int(rand()) - offset := uint8(r >> h.B & (abi.MapBucketCount - 1)) + offset := uint8(r >> h.B & (abi.OldMapBucketCount - 1)) if h.B == 0 { copyKeys(t, h, (*bmap)(h.buckets), s, offset) return @@ -1811,8 +1813,8 @@ func keys(m any, p unsafe.Pointer) { func copyKeys(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { for b != nil { - for i := uintptr(0); i < abi.MapBucketCount; i++ { - offi := (i + uintptr(offset)) & (abi.MapBucketCount - 1) + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { + offi := (i + uintptr(offset)) & (abi.OldMapBucketCount - 1) if isEmpty(b.tophash[offi]) { continue } @@ -1845,7 +1847,7 @@ func values(m any, p unsafe.Pointer) { } s := (*slice)(p) r := int(rand()) - offset := uint8(r >> h.B & (abi.MapBucketCount - 1)) + offset := uint8(r >> h.B & (abi.OldMapBucketCount - 1)) if h.B == 0 { copyValues(t, h, (*bmap)(h.buckets), s, offset) return @@ -1874,8 +1876,8 @@ func values(m any, p unsafe.Pointer) { func copyValues(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { for b != nil { - for i := uintptr(0); i < abi.MapBucketCount; i++ { - offi := (i + uintptr(offset)) & (abi.MapBucketCount - 1) + for i := uintptr(0); i < abi.OldMapBucketCount; i++ { + offi := (i + uintptr(offset)) & (abi.OldMapBucketCount - 1) if isEmpty(b.tophash[offi]) { continue } @@ -1884,7 +1886,7 @@ func copyValues(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { fatal("concurrent map read and map write") } - ele := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+offi*uintptr(t.ValueSize)) + ele := add(unsafe.Pointer(b), dataOffset+abi.OldMapBucketCount*uintptr(t.KeySize)+offi*uintptr(t.ValueSize)) if t.IndirectElem() { ele = *((*unsafe.Pointer)(ele)) } diff --git a/src/runtime/map_noswiss_test.go b/src/runtime/map_noswiss_test.go new file mode 100644 index 00000000000000..72d7e6d362a9c2 --- /dev/null +++ b/src/runtime/map_noswiss_test.go @@ -0,0 +1,188 @@ +// Copyright 2024 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. + +//go:build !goexperiment.swissmap + +package runtime_test + +import ( + "internal/abi" + "runtime" + "slices" + "testing" +) + +func TestMapIterOrder(t *testing.T) { + sizes := []int{3, 7, 9, 15} + if abi.OldMapBucketCountBits >= 5 { + // it gets flaky (often only one iteration order) at size 3 when abi.MapBucketCountBits >=5. + t.Fatalf("This test becomes flaky if abi.MapBucketCountBits(=%d) is 5 or larger", abi.OldMapBucketCountBits) + } + for _, n := range sizes { + for i := 0; i < 1000; i++ { + // Make m be {0: true, 1: true, ..., n-1: true}. + m := make(map[int]bool) + for i := 0; i < n; i++ { + m[i] = true + } + // Check that iterating over the map produces at least two different orderings. + ord := func() []int { + var s []int + for key := range m { + s = append(s, key) + } + return s + } + first := ord() + ok := false + for try := 0; try < 100; try++ { + if !slices.Equal(first, ord()) { + ok = true + break + } + } + if !ok { + t.Errorf("Map with n=%d elements had consistent iteration order: %v", n, first) + break + } + } + } +} + +const bs = abi.OldMapBucketCount + +// belowOverflow should be a pretty-full pair of buckets; +// atOverflow is 1/8 bs larger = 13/8 buckets or two buckets +// that are 13/16 full each, which is the overflow boundary. +// Adding one to that should ensure overflow to the next higher size. +const ( + belowOverflow = bs * 3 / 2 // 1.5 bs = 2 buckets @ 75% + atOverflow = belowOverflow + bs/8 // 2 buckets at 13/16 fill. +) + +var mapBucketTests = [...]struct { + n int // n is the number of map elements + noescape int // number of expected buckets for non-escaping map + escape int // number of expected buckets for escaping map +}{ + {-(1 << 30), 1, 1}, + {-1, 1, 1}, + {0, 1, 1}, + {1, 1, 1}, + {bs, 1, 1}, + {bs + 1, 2, 2}, + {belowOverflow, 2, 2}, // 1.5 bs = 2 buckets @ 75% + {atOverflow + 1, 4, 4}, // 13/8 bs + 1 == overflow to 4 + + {2 * belowOverflow, 4, 4}, // 3 bs = 4 buckets @75% + {2*atOverflow + 1, 8, 8}, // 13/4 bs + 1 = overflow to 8 + + {4 * belowOverflow, 8, 8}, // 6 bs = 8 buckets @ 75% + {4*atOverflow + 1, 16, 16}, // 13/2 bs + 1 = overflow to 16 +} + +func TestMapBuckets(t *testing.T) { + // Test that maps of different sizes have the right number of buckets. + // Non-escaping maps with small buckets (like map[int]int) never + // have a nil bucket pointer due to starting with preallocated buckets + // on the stack. Escaping maps start with a non-nil bucket pointer if + // hint size is above bucketCnt and thereby have more than one bucket. + // These tests depend on bucketCnt and loadFactor* in map.go. + t.Run("mapliteral", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := map[int]int{} + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(map[int]int{}) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) + t.Run("nohint", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := make(map[int]int) + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(make(map[int]int)) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) + t.Run("makemap", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := make(map[int]int, tt.n) + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(make(map[int]int, tt.n)) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) + t.Run("makemap64", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := make(map[int]int, int64(tt.n)) + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(make(map[int]int, tt.n)) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) +} diff --git a/src/runtime/map_swiss.go b/src/runtime/map_swiss.go index d6c97e465440b3..b76878da9a8e36 100644 --- a/src/runtime/map_swiss.go +++ b/src/runtime/map_swiss.go @@ -63,15 +63,17 @@ import ( "unsafe" ) +type maptype = abi.SwissMapType + const ( // Maximum number of key/elem pairs a bucket can hold. - bucketCntBits = abi.MapBucketCountBits + bucketCntBits = abi.SwissMapBucketCountBits // Maximum average load of a bucket that triggers growth is bucketCnt*13/16 (about 80% full) // Because of minimum alignment rules, bucketCnt is known to be at least 8. // Represent as loadFactorNum/loadFactorDen, to allow integer math. loadFactorDen = 2 - loadFactorNum = loadFactorDen * abi.MapBucketCount * 13 / 16 + loadFactorNum = loadFactorDen * abi.SwissMapBucketCount * 13 / 16 // data offset should be the size of the bmap struct, but needs to be // aligned correctly. For amd64p32 this means 64-bit alignment @@ -146,7 +148,7 @@ type bmap struct { // tophash generally contains the top byte of the hash value // for each key in this bucket. If tophash[0] < minTopHash, // tophash[0] is a bucket evacuation state instead. - tophash [abi.MapBucketCount]uint8 + tophash [abi.SwissMapBucketCount]uint8 // Followed by bucketCnt keys and then bucketCnt elems. // NOTE: packing all the keys together and then all the elems together makes the // code a bit more complicated than alternating key/elem/key/elem/... but it allows @@ -425,7 +427,7 @@ func mapaccess1(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { top := tophash(hash) bucketloop: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break bucketloop @@ -437,7 +439,7 @@ bucketloop: k = *((*unsafe.Pointer)(k)) } if t.Key.Equal(key, k) { - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { e = *((*unsafe.Pointer)(e)) } @@ -486,7 +488,7 @@ func mapaccess2(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, bool) top := tophash(hash) bucketloop: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break bucketloop @@ -498,7 +500,7 @@ bucketloop: k = *((*unsafe.Pointer)(k)) } if t.Key.Equal(key, k) { - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { e = *((*unsafe.Pointer)(e)) } @@ -530,7 +532,7 @@ func mapaccessK(t *maptype, h *hmap, key unsafe.Pointer) (unsafe.Pointer, unsafe top := tophash(hash) bucketloop: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break bucketloop @@ -542,7 +544,7 @@ bucketloop: k = *((*unsafe.Pointer)(k)) } if t.Key.Equal(key, k) { - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { e = *((*unsafe.Pointer)(e)) } @@ -612,12 +614,12 @@ again: var elem unsafe.Pointer bucketloop: for { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if b.tophash[i] != top { if isEmpty(b.tophash[i]) && inserti == nil { inserti = &b.tophash[i] insertk = add(unsafe.Pointer(b), dataOffset+i*uintptr(t.KeySize)) - elem = add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + elem = add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) } if b.tophash[i] == emptyRest { break bucketloop @@ -635,7 +637,7 @@ bucketloop: if t.NeedKeyUpdate() { typedmemmove(t.Key, k, key) } - elem = add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + elem = add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) goto done } ovf := b.overflow(t) @@ -659,7 +661,7 @@ bucketloop: newb := h.newoverflow(t, b) inserti = &newb.tophash[0] insertk = add(unsafe.Pointer(newb), dataOffset) - elem = add(insertk, abi.MapBucketCount*uintptr(t.KeySize)) + elem = add(insertk, abi.SwissMapBucketCount*uintptr(t.KeySize)) } // store new key/elem at insert position @@ -725,7 +727,7 @@ func mapdelete(t *maptype, h *hmap, key unsafe.Pointer) { top := tophash(hash) search: for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if b.tophash[i] != top { if b.tophash[i] == emptyRest { break search @@ -746,7 +748,7 @@ search: } else if t.Key.Pointers() { memclrHasPointers(k, t.Key.Size_) } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { *(*unsafe.Pointer)(e) = nil } else if t.Elem.Pointers() { @@ -759,7 +761,7 @@ search: // change those to emptyRest states. // It would be nice to make this a separate function, but // for loops are not currently inlineable. - if i == abi.MapBucketCount-1 { + if i == abi.SwissMapBucketCount-1 { if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { goto notLast } @@ -778,7 +780,7 @@ search: c := b for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { } - i = abi.MapBucketCount - 1 + i = abi.SwissMapBucketCount - 1 } else { i-- } @@ -839,7 +841,7 @@ func mapiterinit(t *maptype, h *hmap, it *hiter) { // decide where to start r := uintptr(rand()) it.startBucket = r & bucketMask(h.B) - it.offset = uint8(r >> h.B & (abi.MapBucketCount - 1)) + it.offset = uint8(r >> h.B & (abi.SwissMapBucketCount - 1)) // iterator state it.bucket = it.startBucket @@ -900,8 +902,8 @@ next: } i = 0 } - for ; i < abi.MapBucketCount; i++ { - offi := (i + it.offset) & (abi.MapBucketCount - 1) + for ; i < abi.SwissMapBucketCount; i++ { + offi := (i + it.offset) & (abi.SwissMapBucketCount - 1) if isEmpty(b.tophash[offi]) || b.tophash[offi] == evacuatedEmpty { // TODO: emptyRest is hard to use here, as we start iterating // in the middle of a bucket. It's feasible, just tricky. @@ -911,7 +913,7 @@ next: if t.IndirectKey() { k = *((*unsafe.Pointer)(k)) } - e := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(offi)*uintptr(t.ValueSize)) + e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+uintptr(offi)*uintptr(t.ValueSize)) if checkBucket != noCheck && !h.sameSizeGrow() { // Special case: iterator was started during a grow to a larger size // and the grow is not done yet. We're working on a bucket whose @@ -1002,7 +1004,7 @@ func mapclear(t *maptype, h *hmap) { for i := uintptr(0); i <= mask; i++ { b := (*bmap)(add(bucket, i*uintptr(t.BucketSize))) for ; b != nil; b = b.overflow(t) { - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { b.tophash[i] = emptyRest } } @@ -1089,7 +1091,7 @@ func hashGrow(t *maptype, h *hmap) { // overLoadFactor reports whether count items placed in 1< abi.MapBucketCount && uintptr(count) > loadFactorNum*(bucketShift(B)/loadFactorDen) + return count > abi.SwissMapBucketCount && uintptr(count) > loadFactorNum*(bucketShift(B)/loadFactorDen) } // tooManyOverflowBuckets reports whether noverflow buckets is too many for a map with 1< abi.MapMaxKeyBytes && (!t.IndirectKey() || t.KeySize != uint8(goarch.PtrSize)) || - t.Key.Size_ <= abi.MapMaxKeyBytes && (t.IndirectKey() || t.KeySize != uint8(t.Key.Size_)) { + if t.Key.Size_ > abi.SwissMapMaxKeyBytes && (!t.IndirectKey() || t.KeySize != uint8(goarch.PtrSize)) || + t.Key.Size_ <= abi.SwissMapMaxKeyBytes && (t.IndirectKey() || t.KeySize != uint8(t.Key.Size_)) { throw("key size wrong") } - if t.Elem.Size_ > abi.MapMaxElemBytes && (!t.IndirectElem() || t.ValueSize != uint8(goarch.PtrSize)) || - t.Elem.Size_ <= abi.MapMaxElemBytes && (t.IndirectElem() || t.ValueSize != uint8(t.Elem.Size_)) { + if t.Elem.Size_ > abi.SwissMapMaxElemBytes && (!t.IndirectElem() || t.ValueSize != uint8(goarch.PtrSize)) || + t.Elem.Size_ <= abi.SwissMapMaxElemBytes && (t.IndirectElem() || t.ValueSize != uint8(t.Elem.Size_)) { throw("elem size wrong") } - if t.Key.Align_ > abi.MapBucketCount { + if t.Key.Align_ > abi.SwissMapBucketCount { throw("key align too big") } - if t.Elem.Align_ > abi.MapBucketCount { + if t.Elem.Align_ > abi.SwissMapBucketCount { throw("elem align too big") } if t.Key.Size_%uintptr(t.Key.Align_) != 0 { @@ -1321,7 +1323,7 @@ func reflect_makemap(t *maptype, cap int) *hmap { if t.Elem.Size_%uintptr(t.Elem.Align_) != 0 { throw("elem size not a multiple of elem align") } - if abi.MapBucketCount < 8 { + if abi.SwissMapBucketCount < 8 { throw("bucketsize too small for proper alignment") } if dataOffset%uintptr(t.Key.Align_) != 0 { @@ -1444,26 +1446,26 @@ func mapclone(m any) any { // moveToBmap moves a bucket from src to dst. It returns the destination bucket or new destination bucket if it overflows // and the pos that the next key/value will be written, if pos == bucketCnt means needs to written in overflow bucket. func moveToBmap(t *maptype, h *hmap, dst *bmap, pos int, src *bmap) (*bmap, int) { - for i := 0; i < abi.MapBucketCount; i++ { + for i := 0; i < abi.SwissMapBucketCount; i++ { if isEmpty(src.tophash[i]) { continue } - for ; pos < abi.MapBucketCount; pos++ { + for ; pos < abi.SwissMapBucketCount; pos++ { if isEmpty(dst.tophash[pos]) { break } } - if pos == abi.MapBucketCount { + if pos == abi.SwissMapBucketCount { dst = h.newoverflow(t, dst) pos = 0 } srcK := add(unsafe.Pointer(src), dataOffset+uintptr(i)*uintptr(t.KeySize)) - srcEle := add(unsafe.Pointer(src), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(i)*uintptr(t.ValueSize)) + srcEle := add(unsafe.Pointer(src), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+uintptr(i)*uintptr(t.ValueSize)) dstK := add(unsafe.Pointer(dst), dataOffset+uintptr(pos)*uintptr(t.KeySize)) - dstEle := add(unsafe.Pointer(dst), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+uintptr(pos)*uintptr(t.ValueSize)) + dstEle := add(unsafe.Pointer(dst), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+uintptr(pos)*uintptr(t.ValueSize)) dst.tophash[pos] = src.tophash[i] if t.IndirectKey() { @@ -1567,7 +1569,7 @@ func mapclone2(t *maptype, src *hmap) *hmap { // Process entries one at a time. for srcBmap != nil { // move from oldBlucket to new bucket - for i := uintptr(0); i < abi.MapBucketCount; i++ { + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { if isEmpty(srcBmap.tophash[i]) { continue } @@ -1581,7 +1583,7 @@ func mapclone2(t *maptype, src *hmap) *hmap { srcK = *((*unsafe.Pointer)(srcK)) } - srcEle := add(unsafe.Pointer(srcBmap), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) + srcEle := add(unsafe.Pointer(srcBmap), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+i*uintptr(t.ValueSize)) if t.IndirectElem() { srcEle = *((*unsafe.Pointer)(srcEle)) } @@ -1607,7 +1609,7 @@ func keys(m any, p unsafe.Pointer) { } s := (*slice)(p) r := int(rand()) - offset := uint8(r >> h.B & (abi.MapBucketCount - 1)) + offset := uint8(r >> h.B & (abi.SwissMapBucketCount - 1)) if h.B == 0 { copyKeys(t, h, (*bmap)(h.buckets), s, offset) return @@ -1636,8 +1638,8 @@ func keys(m any, p unsafe.Pointer) { func copyKeys(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { for b != nil { - for i := uintptr(0); i < abi.MapBucketCount; i++ { - offi := (i + uintptr(offset)) & (abi.MapBucketCount - 1) + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { + offi := (i + uintptr(offset)) & (abi.SwissMapBucketCount - 1) if isEmpty(b.tophash[offi]) { continue } @@ -1670,7 +1672,7 @@ func values(m any, p unsafe.Pointer) { } s := (*slice)(p) r := int(rand()) - offset := uint8(r >> h.B & (abi.MapBucketCount - 1)) + offset := uint8(r >> h.B & (abi.SwissMapBucketCount - 1)) if h.B == 0 { copyValues(t, h, (*bmap)(h.buckets), s, offset) return @@ -1699,8 +1701,8 @@ func values(m any, p unsafe.Pointer) { func copyValues(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { for b != nil { - for i := uintptr(0); i < abi.MapBucketCount; i++ { - offi := (i + uintptr(offset)) & (abi.MapBucketCount - 1) + for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { + offi := (i + uintptr(offset)) & (abi.SwissMapBucketCount - 1) if isEmpty(b.tophash[offi]) { continue } @@ -1709,7 +1711,7 @@ func copyValues(t *maptype, h *hmap, b *bmap, s *slice, offset uint8) { fatal("concurrent map read and map write") } - ele := add(unsafe.Pointer(b), dataOffset+abi.MapBucketCount*uintptr(t.KeySize)+offi*uintptr(t.ValueSize)) + ele := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*uintptr(t.KeySize)+offi*uintptr(t.ValueSize)) if t.IndirectElem() { ele = *((*unsafe.Pointer)(ele)) } diff --git a/src/runtime/map_swiss_test.go b/src/runtime/map_swiss_test.go new file mode 100644 index 00000000000000..78db4aa9268be6 --- /dev/null +++ b/src/runtime/map_swiss_test.go @@ -0,0 +1,188 @@ +// Copyright 2024 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. + +//go:build goexperiment.swissmap + +package runtime_test + +import ( + "internal/abi" + "runtime" + "slices" + "testing" +) + +func TestMapIterOrder(t *testing.T) { + sizes := []int{3, 7, 9, 15} + if abi.SwissMapBucketCountBits >= 5 { + // it gets flaky (often only one iteration order) at size 3 when abi.MapBucketCountBits >=5. + t.Fatalf("This test becomes flaky if abi.MapBucketCountBits(=%d) is 5 or larger", abi.SwissMapBucketCountBits) + } + for _, n := range sizes { + for i := 0; i < 1000; i++ { + // Make m be {0: true, 1: true, ..., n-1: true}. + m := make(map[int]bool) + for i := 0; i < n; i++ { + m[i] = true + } + // Check that iterating over the map produces at least two different orderings. + ord := func() []int { + var s []int + for key := range m { + s = append(s, key) + } + return s + } + first := ord() + ok := false + for try := 0; try < 100; try++ { + if !slices.Equal(first, ord()) { + ok = true + break + } + } + if !ok { + t.Errorf("Map with n=%d elements had consistent iteration order: %v", n, first) + break + } + } + } +} + +const bs = abi.SwissMapBucketCount + +// belowOverflow should be a pretty-full pair of buckets; +// atOverflow is 1/8 bs larger = 13/8 buckets or two buckets +// that are 13/16 full each, which is the overflow boundary. +// Adding one to that should ensure overflow to the next higher size. +const ( + belowOverflow = bs * 3 / 2 // 1.5 bs = 2 buckets @ 75% + atOverflow = belowOverflow + bs/8 // 2 buckets at 13/16 fill. +) + +var mapBucketTests = [...]struct { + n int // n is the number of map elements + noescape int // number of expected buckets for non-escaping map + escape int // number of expected buckets for escaping map +}{ + {-(1 << 30), 1, 1}, + {-1, 1, 1}, + {0, 1, 1}, + {1, 1, 1}, + {bs, 1, 1}, + {bs + 1, 2, 2}, + {belowOverflow, 2, 2}, // 1.5 bs = 2 buckets @ 75% + {atOverflow + 1, 4, 4}, // 13/8 bs + 1 == overflow to 4 + + {2 * belowOverflow, 4, 4}, // 3 bs = 4 buckets @75% + {2*atOverflow + 1, 8, 8}, // 13/4 bs + 1 = overflow to 8 + + {4 * belowOverflow, 8, 8}, // 6 bs = 8 buckets @ 75% + {4*atOverflow + 1, 16, 16}, // 13/2 bs + 1 = overflow to 16 +} + +func TestMapBuckets(t *testing.T) { + // Test that maps of different sizes have the right number of buckets. + // Non-escaping maps with small buckets (like map[int]int) never + // have a nil bucket pointer due to starting with preallocated buckets + // on the stack. Escaping maps start with a non-nil bucket pointer if + // hint size is above bucketCnt and thereby have more than one bucket. + // These tests depend on bucketCnt and loadFactor* in map.go. + t.Run("mapliteral", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := map[int]int{} + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(map[int]int{}) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) + t.Run("nohint", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := make(map[int]int) + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(make(map[int]int)) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) + t.Run("makemap", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := make(map[int]int, tt.n) + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(make(map[int]int, tt.n)) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) + t.Run("makemap64", func(t *testing.T) { + for _, tt := range mapBucketTests { + localMap := make(map[int]int, int64(tt.n)) + if runtime.MapBucketsPointerIsNil(localMap) { + t.Errorf("no escape: buckets pointer is nil for non-escaping map") + } + for i := 0; i < tt.n; i++ { + localMap[i] = i + } + if got := runtime.MapBucketsCount(localMap); got != tt.noescape { + t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) + } + escapingMap := runtime.Escape(make(map[int]int, tt.n)) + if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { + t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) + } + for i := 0; i < tt.n; i++ { + escapingMap[i] = i + } + if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { + t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) + } + } + }) +} diff --git a/src/runtime/map_test.go b/src/runtime/map_test.go index ba2ea746490994..7d884c4922c6f5 100644 --- a/src/runtime/map_test.go +++ b/src/runtime/map_test.go @@ -6,7 +6,6 @@ package runtime_test import ( "fmt" - "internal/abi" "internal/goarch" "internal/testenv" "math" @@ -509,43 +508,6 @@ func TestMapNanGrowIterator(t *testing.T) { } } -func TestMapIterOrder(t *testing.T) { - sizes := []int{3, 7, 9, 15} - if abi.MapBucketCountBits >= 5 { - // it gets flaky (often only one iteration order) at size 3 when abi.MapBucketCountBits >=5. - t.Fatalf("This test becomes flaky if abi.MapBucketCountBits(=%d) is 5 or larger", abi.MapBucketCountBits) - } - for _, n := range sizes { - for i := 0; i < 1000; i++ { - // Make m be {0: true, 1: true, ..., n-1: true}. - m := make(map[int]bool) - for i := 0; i < n; i++ { - m[i] = true - } - // Check that iterating over the map produces at least two different orderings. - ord := func() []int { - var s []int - for key := range m { - s = append(s, key) - } - return s - } - first := ord() - ok := false - for try := 0; try < 100; try++ { - if !slices.Equal(first, ord()) { - ok = true - break - } - } - if !ok { - t.Errorf("Map with n=%d elements had consistent iteration order: %v", n, first) - break - } - } - } -} - // Issue 8410 func TestMapSparseIterOrder(t *testing.T) { // Run several rounds to increase the probability @@ -682,144 +644,6 @@ func TestIgnoreBogusMapHint(t *testing.T) { } } -const bs = abi.MapBucketCount - -// belowOverflow should be a pretty-full pair of buckets; -// atOverflow is 1/8 bs larger = 13/8 buckets or two buckets -// that are 13/16 full each, which is the overflow boundary. -// Adding one to that should ensure overflow to the next higher size. -const ( - belowOverflow = bs * 3 / 2 // 1.5 bs = 2 buckets @ 75% - atOverflow = belowOverflow + bs/8 // 2 buckets at 13/16 fill. -) - -var mapBucketTests = [...]struct { - n int // n is the number of map elements - noescape int // number of expected buckets for non-escaping map - escape int // number of expected buckets for escaping map -}{ - {-(1 << 30), 1, 1}, - {-1, 1, 1}, - {0, 1, 1}, - {1, 1, 1}, - {bs, 1, 1}, - {bs + 1, 2, 2}, - {belowOverflow, 2, 2}, // 1.5 bs = 2 buckets @ 75% - {atOverflow + 1, 4, 4}, // 13/8 bs + 1 == overflow to 4 - - {2 * belowOverflow, 4, 4}, // 3 bs = 4 buckets @75% - {2*atOverflow + 1, 8, 8}, // 13/4 bs + 1 = overflow to 8 - - {4 * belowOverflow, 8, 8}, // 6 bs = 8 buckets @ 75% - {4*atOverflow + 1, 16, 16}, // 13/2 bs + 1 = overflow to 16 -} - -func TestMapBuckets(t *testing.T) { - // Test that maps of different sizes have the right number of buckets. - // Non-escaping maps with small buckets (like map[int]int) never - // have a nil bucket pointer due to starting with preallocated buckets - // on the stack. Escaping maps start with a non-nil bucket pointer if - // hint size is above bucketCnt and thereby have more than one bucket. - // These tests depend on bucketCnt and loadFactor* in map.go. - t.Run("mapliteral", func(t *testing.T) { - for _, tt := range mapBucketTests { - localMap := map[int]int{} - if runtime.MapBucketsPointerIsNil(localMap) { - t.Errorf("no escape: buckets pointer is nil for non-escaping map") - } - for i := 0; i < tt.n; i++ { - localMap[i] = i - } - if got := runtime.MapBucketsCount(localMap); got != tt.noescape { - t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) - } - escapingMap := runtime.Escape(map[int]int{}) - if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { - t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) - } - for i := 0; i < tt.n; i++ { - escapingMap[i] = i - } - if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { - t.Errorf("escape n=%d want %d buckets, got %d", tt.n, tt.escape, got) - } - } - }) - t.Run("nohint", func(t *testing.T) { - for _, tt := range mapBucketTests { - localMap := make(map[int]int) - if runtime.MapBucketsPointerIsNil(localMap) { - t.Errorf("no escape: buckets pointer is nil for non-escaping map") - } - for i := 0; i < tt.n; i++ { - localMap[i] = i - } - if got := runtime.MapBucketsCount(localMap); got != tt.noescape { - t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) - } - escapingMap := runtime.Escape(make(map[int]int)) - if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { - t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) - } - for i := 0; i < tt.n; i++ { - escapingMap[i] = i - } - if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { - t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) - } - } - }) - t.Run("makemap", func(t *testing.T) { - for _, tt := range mapBucketTests { - localMap := make(map[int]int, tt.n) - if runtime.MapBucketsPointerIsNil(localMap) { - t.Errorf("no escape: buckets pointer is nil for non-escaping map") - } - for i := 0; i < tt.n; i++ { - localMap[i] = i - } - if got := runtime.MapBucketsCount(localMap); got != tt.noescape { - t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) - } - escapingMap := runtime.Escape(make(map[int]int, tt.n)) - if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { - t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) - } - for i := 0; i < tt.n; i++ { - escapingMap[i] = i - } - if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { - t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) - } - } - }) - t.Run("makemap64", func(t *testing.T) { - for _, tt := range mapBucketTests { - localMap := make(map[int]int, int64(tt.n)) - if runtime.MapBucketsPointerIsNil(localMap) { - t.Errorf("no escape: buckets pointer is nil for non-escaping map") - } - for i := 0; i < tt.n; i++ { - localMap[i] = i - } - if got := runtime.MapBucketsCount(localMap); got != tt.noescape { - t.Errorf("no escape: n=%d want %d buckets, got %d", tt.n, tt.noescape, got) - } - escapingMap := runtime.Escape(make(map[int]int, tt.n)) - if count := runtime.MapBucketsCount(escapingMap); count > 1 && runtime.MapBucketsPointerIsNil(escapingMap) { - t.Errorf("escape: buckets pointer is nil for n=%d buckets", count) - } - for i := 0; i < tt.n; i++ { - escapingMap[i] = i - } - if got := runtime.MapBucketsCount(escapingMap); got != tt.escape { - t.Errorf("escape: n=%d want %d buckets, got %d", tt.n, tt.escape, got) - } - } - }) - -} - func benchmarkMapPop(b *testing.B, n int) { m := map[int]int{} for i := 0; i < b.N; i++ { diff --git a/src/runtime/runtime-gdb.py b/src/runtime/runtime-gdb.py index 46f014fc76e50c..8618ebbc3bda50 100644 --- a/src/runtime/runtime-gdb.py +++ b/src/runtime/runtime-gdb.py @@ -141,6 +141,7 @@ def children(self): yield ('[{0}]'.format(idx), item) +# TODO(go.dev/issue/54766): Support swisstable maps. class MapTypePrinter: """Pretty print map[K]V types. diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go index 5defe2f615eaa4..30703005b3b867 100644 --- a/src/runtime/runtime-gdb_test.go +++ b/src/runtime/runtime-gdb_test.go @@ -119,8 +119,8 @@ import "fmt" import "runtime" var gslice []string func main() { - mapvar := make(map[string]string, ` + strconv.FormatInt(abi.MapBucketCount+9, 10) + `) - slicemap := make(map[string][]string,` + strconv.FormatInt(abi.MapBucketCount+3, 10) + `) + mapvar := make(map[string]string, ` + strconv.FormatInt(abi.OldMapBucketCount+9, 10) + `) + slicemap := make(map[string][]string,` + strconv.FormatInt(abi.OldMapBucketCount+3, 10) + `) chanint := make(chan int, 10) chanstr := make(chan string, 10) chanint <- 99 diff --git a/src/runtime/type.go b/src/runtime/type.go index 201340752b810c..5e5c99276c53b7 100644 --- a/src/runtime/type.go +++ b/src/runtime/type.go @@ -8,6 +8,7 @@ package runtime import ( "internal/abi" + "internal/goexperiment" "unsafe" ) @@ -235,8 +236,6 @@ type uncommontype = abi.UncommonType type interfacetype = abi.InterfaceType -type maptype = abi.MapType - type arraytype = abi.ArrayType type chantype = abi.ChanType @@ -439,8 +438,13 @@ func typesEqual(t, v *_type, seen map[_typePair]struct{}) bool { } return true case abi.Map: - mt := (*maptype)(unsafe.Pointer(t)) - mv := (*maptype)(unsafe.Pointer(v)) + if goexperiment.SwissMap { + mt := (*abi.SwissMapType)(unsafe.Pointer(t)) + mv := (*abi.SwissMapType)(unsafe.Pointer(v)) + return typesEqual(mt.Key, mv.Key, seen) && typesEqual(mt.Elem, mv.Elem, seen) + } + mt := (*abi.OldMapType)(unsafe.Pointer(t)) + mv := (*abi.OldMapType)(unsafe.Pointer(v)) return typesEqual(mt.Key, mv.Key, seen) && typesEqual(mt.Elem, mv.Elem, seen) case abi.Pointer: pt := (*ptrtype)(unsafe.Pointer(t)) From 1985c0ccf9ef0736aeb79ef548689aa935fa5c4c Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 22 Apr 2024 14:17:35 -0400 Subject: [PATCH 167/866] cmd/compile,runtime: disable swissmap fast variants Temporary measure to reduce the required MVP code. For #54766. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest-swissmap Change-Id: I44dc8acd0dc8280c6beb40451998e84bc85c238a Reviewed-on: https://go-review.googlesource.com/c/go/+/580915 Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/compile/internal/walk/walk.go | 26 +- src/reflect/map_swiss.go | 6 +- src/runtime/map_fast32_swiss.go | 447 +----------------------- src/runtime/map_fast64_swiss.go | 455 +------------------------ src/runtime/map_faststr_swiss.go | 471 +------------------------- test/codegen/maps.go | 5 + test/live.go | 20 -- test/live_noswiss.go | 42 +++ test/live_regabi.go | 21 -- test/live_regabi_noswiss.go | 38 +++ test/live_regabi_swiss.go | 40 +++ test/live_swiss.go | 44 +++ 12 files changed, 200 insertions(+), 1415 deletions(-) create mode 100644 test/live_noswiss.go create mode 100644 test/live_regabi_noswiss.go create mode 100644 test/live_regabi_swiss.go create mode 100644 test/live_swiss.go diff --git a/src/cmd/compile/internal/walk/walk.go b/src/cmd/compile/internal/walk/walk.go index 3c7af883c12cc9..d7bab160adb4c2 100644 --- a/src/cmd/compile/internal/walk/walk.go +++ b/src/cmd/compile/internal/walk/walk.go @@ -192,30 +192,8 @@ func mapfast(t *types.Type) int { } func mapfastSwiss(t *types.Type) int { - if t.Elem().Size() > abi.SwissMapMaxElemBytes { - return mapslow - } - switch reflectdata.AlgType(t.Key()) { - case types.AMEM32: - if !t.Key().HasPointers() { - return mapfast32 - } - if types.PtrSize == 4 { - return mapfast32ptr - } - base.Fatalf("small pointer %v", t.Key()) - case types.AMEM64: - if !t.Key().HasPointers() { - return mapfast64 - } - if types.PtrSize == 8 { - return mapfast64ptr - } - // Two-word object, at least one of which is a pointer. - // Use the slow path. - case types.ASTRING: - return mapfaststr - } + // TODO(#54766): Temporarily avoid specialized variants to minimize + // required code. return mapslow } diff --git a/src/reflect/map_swiss.go b/src/reflect/map_swiss.go index 39f799c9b23dff..4607b6f0f3cc51 100644 --- a/src/reflect/map_swiss.go +++ b/src/reflect/map_swiss.go @@ -180,7 +180,8 @@ func (v Value) MapIndex(key Value) Value { // of unexported fields. var e unsafe.Pointer - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.SwissMapMaxElemBytes { + // TODO(#54766): temporarily disable specialized variants. + if false && (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.SwissMapMaxElemBytes { k := *(*string)(key.ptr) e = mapaccess_faststr(v.typ(), v.pointer(), k) } else { @@ -423,7 +424,8 @@ func (v Value) SetMapIndex(key, elem Value) { key.mustBeExported() tt := (*mapType)(unsafe.Pointer(v.typ())) - if (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.SwissMapMaxElemBytes { + // TODO(#54766): temporarily disable specialized variants. + if false && (tt.Key == stringType || key.kind() == String) && tt.Key == key.typ() && tt.Elem.Size() <= abi.SwissMapMaxElemBytes { k := *(*string)(key.ptr) if elem.typ() == nil { mapdelete_faststr(v.typ(), v.pointer(), k) diff --git a/src/runtime/map_fast32_swiss.go b/src/runtime/map_fast32_swiss.go index af75f182ec4e96..f2482393dd554b 100644 --- a/src/runtime/map_fast32_swiss.go +++ b/src/runtime/map_fast32_swiss.go @@ -7,458 +7,29 @@ package runtime import ( - "internal/abi" - "internal/goarch" "unsafe" ) func mapaccess1_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer { - if raceenabled && h != nil { - callerpc := getcallerpc() - racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess1_fast32)) - } - if h == nil || h.count == 0 { - return unsafe.Pointer(&zeroVal[0]) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map read and map write") - } - var b *bmap - if h.B == 0 { - // One-bucket table. No need to hash. - b = (*bmap)(h.buckets) - } else { - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - m := bucketMask(h.B) - b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) - if c := h.oldbuckets; c != nil { - if !h.sameSizeGrow() { - // There used to be half as many buckets; mask down one more power of two. - m >>= 1 - } - oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) - if !evacuated(oldb) { - b = oldb - } - } - } - for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 4) { - if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*4+i*uintptr(t.ValueSize)) - } - } - } - return unsafe.Pointer(&zeroVal[0]) + throw("mapaccess1_fast32 unimplemented") + panic("unreachable") } func mapaccess2_fast32(t *maptype, h *hmap, key uint32) (unsafe.Pointer, bool) { - if raceenabled && h != nil { - callerpc := getcallerpc() - racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess2_fast32)) - } - if h == nil || h.count == 0 { - return unsafe.Pointer(&zeroVal[0]), false - } - if h.flags&hashWriting != 0 { - fatal("concurrent map read and map write") - } - var b *bmap - if h.B == 0 { - // One-bucket table. No need to hash. - b = (*bmap)(h.buckets) - } else { - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - m := bucketMask(h.B) - b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) - if c := h.oldbuckets; c != nil { - if !h.sameSizeGrow() { - // There used to be half as many buckets; mask down one more power of two. - m >>= 1 - } - oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) - if !evacuated(oldb) { - b = oldb - } - } - } - for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 4) { - if *(*uint32)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*4+i*uintptr(t.ValueSize)), true - } - } - } - return unsafe.Pointer(&zeroVal[0]), false + throw("mapaccess2_fast32 unimplemented") + panic("unreachable") } func mapassign_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer { - if h == nil { - panic(plainError("assignment to entry in nil map")) - } - if raceenabled { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast32)) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapassign. - h.flags ^= hashWriting - - if h.buckets == nil { - h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) - } - -again: - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_fast32(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - - var insertb *bmap - var inserti uintptr - var insertk unsafe.Pointer - -bucketloop: - for { - for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { - if isEmpty(b.tophash[i]) { - if insertb == nil { - inserti = i - insertb = b - } - if b.tophash[i] == emptyRest { - break bucketloop - } - continue - } - k := *((*uint32)(add(unsafe.Pointer(b), dataOffset+i*4))) - if k != key { - continue - } - inserti = i - insertb = b - goto done - } - ovf := b.overflow(t) - if ovf == nil { - break - } - b = ovf - } - - // Did not find mapping for key. Allocate new cell & add entry. - - // If we hit the max load factor or we have too many overflow buckets, - // and we're not already in the middle of growing, start growing. - if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { - hashGrow(t, h) - goto again // Growing the table invalidates everything, so try again - } - - if insertb == nil { - // The current bucket and all the overflow buckets connected to it are full, allocate a new one. - insertb = h.newoverflow(t, b) - inserti = 0 // not necessary, but avoids needlessly spilling inserti - } - insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks - - insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) - // store new key at insert position - *(*uint32)(insertk) = key - - h.count++ - -done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*4+inserti*uintptr(t.ValueSize)) - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting - return elem + throw("mapassign_fast32 unimplemented") + panic("unreachable") } func mapassign_fast32ptr(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { - if h == nil { - panic(plainError("assignment to entry in nil map")) - } - if raceenabled { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast32)) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapassign. - h.flags ^= hashWriting - - if h.buckets == nil { - h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) - } - -again: - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_fast32(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - - var insertb *bmap - var inserti uintptr - var insertk unsafe.Pointer - -bucketloop: - for { - for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { - if isEmpty(b.tophash[i]) { - if insertb == nil { - inserti = i - insertb = b - } - if b.tophash[i] == emptyRest { - break bucketloop - } - continue - } - k := *((*unsafe.Pointer)(add(unsafe.Pointer(b), dataOffset+i*4))) - if k != key { - continue - } - inserti = i - insertb = b - goto done - } - ovf := b.overflow(t) - if ovf == nil { - break - } - b = ovf - } - - // Did not find mapping for key. Allocate new cell & add entry. - - // If we hit the max load factor or we have too many overflow buckets, - // and we're not already in the middle of growing, start growing. - if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { - hashGrow(t, h) - goto again // Growing the table invalidates everything, so try again - } - - if insertb == nil { - // The current bucket and all the overflow buckets connected to it are full, allocate a new one. - insertb = h.newoverflow(t, b) - inserti = 0 // not necessary, but avoids needlessly spilling inserti - } - insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks - - insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*4) - // store new key at insert position - *(*unsafe.Pointer)(insertk) = key - - h.count++ - -done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*4+inserti*uintptr(t.ValueSize)) - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting - return elem + throw("mapassign_fast32ptr unimplemented") + panic("unreachable") } func mapdelete_fast32(t *maptype, h *hmap, key uint32) { - if raceenabled && h != nil { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapdelete_fast32)) - } - if h == nil || h.count == 0 { - return - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapdelete - h.flags ^= hashWriting - - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_fast32(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - bOrig := b -search: - for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 4) { - if key != *(*uint32)(k) || isEmpty(b.tophash[i]) { - continue - } - // Only clear key if there are pointers in it. - // This can only happen if pointers are 32 bit - // wide as 64 bit pointers do not fit into a 32 bit key. - if goarch.PtrSize == 4 && t.Key.Pointers() { - // The key must be a pointer as we checked pointers are - // 32 bits wide and the key is 32 bits wide also. - *(*unsafe.Pointer)(k) = nil - } - e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*4+i*uintptr(t.ValueSize)) - if t.Elem.Pointers() { - memclrHasPointers(e, t.Elem.Size_) - } else { - memclrNoHeapPointers(e, t.Elem.Size_) - } - b.tophash[i] = emptyOne - // If the bucket now ends in a bunch of emptyOne states, - // change those to emptyRest states. - if i == abi.SwissMapBucketCount-1 { - if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { - goto notLast - } - } else { - if b.tophash[i+1] != emptyRest { - goto notLast - } - } - for { - b.tophash[i] = emptyRest - if i == 0 { - if b == bOrig { - break // beginning of initial bucket, we're done. - } - // Find previous bucket, continue at its last entry. - c := b - for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { - } - i = abi.SwissMapBucketCount - 1 - } else { - i-- - } - if b.tophash[i] != emptyOne { - break - } - } - notLast: - h.count-- - // Reset the hash seed to make it more difficult for attackers to - // repeatedly trigger hash collisions. See issue 25237. - if h.count == 0 { - h.hash0 = uint32(rand()) - } - break search - } - } - - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting -} - -func growWork_fast32(t *maptype, h *hmap, bucket uintptr) { - // make sure we evacuate the oldbucket corresponding - // to the bucket we're about to use - evacuate_fast32(t, h, bucket&h.oldbucketmask()) - - // evacuate one more oldbucket to make progress on growing - if h.growing() { - evacuate_fast32(t, h, h.nevacuate) - } -} - -func evacuate_fast32(t *maptype, h *hmap, oldbucket uintptr) { - b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) - newbit := h.noldbuckets() - if !evacuated(b) { - // TODO: reuse overflow buckets instead of using new ones, if there - // is no iterator using the old buckets. (If !oldIterator.) - - // xy contains the x and y (low and high) evacuation destinations. - var xy [2]evacDst - x := &xy[0] - x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) - x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.SwissMapBucketCount*4) - - if !h.sameSizeGrow() { - // Only calculate y pointers if we're growing bigger. - // Otherwise GC can see bad pointers. - y := &xy[1] - y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) - y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.SwissMapBucketCount*4) - } - - for ; b != nil; b = b.overflow(t) { - k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.SwissMapBucketCount*4) - for i := 0; i < abi.SwissMapBucketCount; i, k, e = i+1, add(k, 4), add(e, uintptr(t.ValueSize)) { - top := b.tophash[i] - if isEmpty(top) { - b.tophash[i] = evacuatedEmpty - continue - } - if top < minTopHash { - throw("bad map state") - } - var useY uint8 - if !h.sameSizeGrow() { - // Compute hash to make our evacuation decision (whether we need - // to send this key/elem to bucket x or bucket y). - hash := t.Hasher(k, uintptr(h.hash0)) - if hash&newbit != 0 { - useY = 1 - } - } - - b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap - dst := &xy[useY] // evacuation destination - - if dst.i == abi.SwissMapBucketCount { - dst.b = h.newoverflow(t, dst.b) - dst.i = 0 - dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.SwissMapBucketCount*4) - } - dst.b.tophash[dst.i&(abi.SwissMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check - - // Copy key. - if goarch.PtrSize == 4 && t.Key.Pointers() && writeBarrier.enabled { - // Write with a write barrier. - *(*unsafe.Pointer)(dst.k) = *(*unsafe.Pointer)(k) - } else { - *(*uint32)(dst.k) = *(*uint32)(k) - } - - typedmemmove(t.Elem, dst.e, e) - dst.i++ - // These updates might push these pointers past the end of the - // key or elem arrays. That's ok, as we have the overflow pointer - // at the end of the bucket to protect against pointing past the - // end of the bucket. - dst.k = add(dst.k, 4) - dst.e = add(dst.e, uintptr(t.ValueSize)) - } - } - // Unlink the overflow buckets & clear key/elem to help GC. - if h.flags&oldIterator == 0 && t.Bucket.Pointers() { - b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) - // Preserve b.tophash because the evacuation - // state is maintained there. - ptr := add(b, dataOffset) - n := uintptr(t.BucketSize) - dataOffset - memclrHasPointers(ptr, n) - } - } - - if oldbucket == h.nevacuate { - advanceEvacuationMark(h, t, newbit) - } + throw("mapdelete_fast32 unimplemented") } diff --git a/src/runtime/map_fast64_swiss.go b/src/runtime/map_fast64_swiss.go index 6548969ab0473f..07ed9934c39c34 100644 --- a/src/runtime/map_fast64_swiss.go +++ b/src/runtime/map_fast64_swiss.go @@ -7,466 +7,29 @@ package runtime import ( - "internal/abi" - "internal/goarch" "unsafe" ) func mapaccess1_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer { - if raceenabled && h != nil { - callerpc := getcallerpc() - racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess1_fast64)) - } - if h == nil || h.count == 0 { - return unsafe.Pointer(&zeroVal[0]) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map read and map write") - } - var b *bmap - if h.B == 0 { - // One-bucket table. No need to hash. - b = (*bmap)(h.buckets) - } else { - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - m := bucketMask(h.B) - b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) - if c := h.oldbuckets; c != nil { - if !h.sameSizeGrow() { - // There used to be half as many buckets; mask down one more power of two. - m >>= 1 - } - oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) - if !evacuated(oldb) { - b = oldb - } - } - } - for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 8) { - if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*8+i*uintptr(t.ValueSize)) - } - } - } - return unsafe.Pointer(&zeroVal[0]) + throw("mapaccess1_fast64 unimplemented") + panic("unreachable") } func mapaccess2_fast64(t *maptype, h *hmap, key uint64) (unsafe.Pointer, bool) { - if raceenabled && h != nil { - callerpc := getcallerpc() - racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess2_fast64)) - } - if h == nil || h.count == 0 { - return unsafe.Pointer(&zeroVal[0]), false - } - if h.flags&hashWriting != 0 { - fatal("concurrent map read and map write") - } - var b *bmap - if h.B == 0 { - // One-bucket table. No need to hash. - b = (*bmap)(h.buckets) - } else { - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - m := bucketMask(h.B) - b = (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) - if c := h.oldbuckets; c != nil { - if !h.sameSizeGrow() { - // There used to be half as many buckets; mask down one more power of two. - m >>= 1 - } - oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) - if !evacuated(oldb) { - b = oldb - } - } - } - for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 8) { - if *(*uint64)(k) == key && !isEmpty(b.tophash[i]) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*8+i*uintptr(t.ValueSize)), true - } - } - } - return unsafe.Pointer(&zeroVal[0]), false + throw("mapaccess2_fast64 unimplemented") + panic("unreachable") } func mapassign_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer { - if h == nil { - panic(plainError("assignment to entry in nil map")) - } - if raceenabled { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast64)) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapassign. - h.flags ^= hashWriting - - if h.buckets == nil { - h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) - } - -again: - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_fast64(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - - var insertb *bmap - var inserti uintptr - var insertk unsafe.Pointer - -bucketloop: - for { - for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { - if isEmpty(b.tophash[i]) { - if insertb == nil { - insertb = b - inserti = i - } - if b.tophash[i] == emptyRest { - break bucketloop - } - continue - } - k := *((*uint64)(add(unsafe.Pointer(b), dataOffset+i*8))) - if k != key { - continue - } - insertb = b - inserti = i - goto done - } - ovf := b.overflow(t) - if ovf == nil { - break - } - b = ovf - } - - // Did not find mapping for key. Allocate new cell & add entry. - - // If we hit the max load factor or we have too many overflow buckets, - // and we're not already in the middle of growing, start growing. - if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { - hashGrow(t, h) - goto again // Growing the table invalidates everything, so try again - } - - if insertb == nil { - // The current bucket and all the overflow buckets connected to it are full, allocate a new one. - insertb = h.newoverflow(t, b) - inserti = 0 // not necessary, but avoids needlessly spilling inserti - } - insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks - - insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) - // store new key at insert position - *(*uint64)(insertk) = key - - h.count++ - -done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*8+inserti*uintptr(t.ValueSize)) - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting - return elem + throw("mapassign_fast64 unimplemented") + panic("unreachable") } func mapassign_fast64ptr(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer { - if h == nil { - panic(plainError("assignment to entry in nil map")) - } - if raceenabled { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_fast64)) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapassign. - h.flags ^= hashWriting - - if h.buckets == nil { - h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) - } - -again: - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_fast64(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - - var insertb *bmap - var inserti uintptr - var insertk unsafe.Pointer - -bucketloop: - for { - for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { - if isEmpty(b.tophash[i]) { - if insertb == nil { - insertb = b - inserti = i - } - if b.tophash[i] == emptyRest { - break bucketloop - } - continue - } - k := *((*unsafe.Pointer)(add(unsafe.Pointer(b), dataOffset+i*8))) - if k != key { - continue - } - insertb = b - inserti = i - goto done - } - ovf := b.overflow(t) - if ovf == nil { - break - } - b = ovf - } - - // Did not find mapping for key. Allocate new cell & add entry. - - // If we hit the max load factor or we have too many overflow buckets, - // and we're not already in the middle of growing, start growing. - if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { - hashGrow(t, h) - goto again // Growing the table invalidates everything, so try again - } - - if insertb == nil { - // The current bucket and all the overflow buckets connected to it are full, allocate a new one. - insertb = h.newoverflow(t, b) - inserti = 0 // not necessary, but avoids needlessly spilling inserti - } - insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = tophash(hash) // mask inserti to avoid bounds checks - - insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*8) - // store new key at insert position - *(*unsafe.Pointer)(insertk) = key - - h.count++ - -done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*8+inserti*uintptr(t.ValueSize)) - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting - return elem + throw("mapassign_fast64ptr unimplemented") + panic("unreachable") } func mapdelete_fast64(t *maptype, h *hmap, key uint64) { - if raceenabled && h != nil { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapdelete_fast64)) - } - if h == nil || h.count == 0 { - return - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - - hash := t.Hasher(noescape(unsafe.Pointer(&key)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapdelete - h.flags ^= hashWriting - - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_fast64(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - bOrig := b -search: - for ; b != nil; b = b.overflow(t) { - for i, k := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, k = i+1, add(k, 8) { - if key != *(*uint64)(k) || isEmpty(b.tophash[i]) { - continue - } - // Only clear key if there are pointers in it. - if t.Key.Pointers() { - if goarch.PtrSize == 8 { - *(*unsafe.Pointer)(k) = nil - } else { - // There are three ways to squeeze at one or more 32 bit pointers into 64 bits. - // Just call memclrHasPointers instead of trying to handle all cases here. - memclrHasPointers(k, 8) - } - } - e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*8+i*uintptr(t.ValueSize)) - if t.Elem.Pointers() { - memclrHasPointers(e, t.Elem.Size_) - } else { - memclrNoHeapPointers(e, t.Elem.Size_) - } - b.tophash[i] = emptyOne - // If the bucket now ends in a bunch of emptyOne states, - // change those to emptyRest states. - if i == abi.SwissMapBucketCount-1 { - if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { - goto notLast - } - } else { - if b.tophash[i+1] != emptyRest { - goto notLast - } - } - for { - b.tophash[i] = emptyRest - if i == 0 { - if b == bOrig { - break // beginning of initial bucket, we're done. - } - // Find previous bucket, continue at its last entry. - c := b - for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { - } - i = abi.SwissMapBucketCount - 1 - } else { - i-- - } - if b.tophash[i] != emptyOne { - break - } - } - notLast: - h.count-- - // Reset the hash seed to make it more difficult for attackers to - // repeatedly trigger hash collisions. See issue 25237. - if h.count == 0 { - h.hash0 = uint32(rand()) - } - break search - } - } - - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting -} - -func growWork_fast64(t *maptype, h *hmap, bucket uintptr) { - // make sure we evacuate the oldbucket corresponding - // to the bucket we're about to use - evacuate_fast64(t, h, bucket&h.oldbucketmask()) - - // evacuate one more oldbucket to make progress on growing - if h.growing() { - evacuate_fast64(t, h, h.nevacuate) - } -} - -func evacuate_fast64(t *maptype, h *hmap, oldbucket uintptr) { - b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) - newbit := h.noldbuckets() - if !evacuated(b) { - // TODO: reuse overflow buckets instead of using new ones, if there - // is no iterator using the old buckets. (If !oldIterator.) - - // xy contains the x and y (low and high) evacuation destinations. - var xy [2]evacDst - x := &xy[0] - x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) - x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.SwissMapBucketCount*8) - - if !h.sameSizeGrow() { - // Only calculate y pointers if we're growing bigger. - // Otherwise GC can see bad pointers. - y := &xy[1] - y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) - y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.SwissMapBucketCount*8) - } - - for ; b != nil; b = b.overflow(t) { - k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.SwissMapBucketCount*8) - for i := 0; i < abi.SwissMapBucketCount; i, k, e = i+1, add(k, 8), add(e, uintptr(t.ValueSize)) { - top := b.tophash[i] - if isEmpty(top) { - b.tophash[i] = evacuatedEmpty - continue - } - if top < minTopHash { - throw("bad map state") - } - var useY uint8 - if !h.sameSizeGrow() { - // Compute hash to make our evacuation decision (whether we need - // to send this key/elem to bucket x or bucket y). - hash := t.Hasher(k, uintptr(h.hash0)) - if hash&newbit != 0 { - useY = 1 - } - } - - b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap - dst := &xy[useY] // evacuation destination - - if dst.i == abi.SwissMapBucketCount { - dst.b = h.newoverflow(t, dst.b) - dst.i = 0 - dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.SwissMapBucketCount*8) - } - dst.b.tophash[dst.i&(abi.SwissMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check - - // Copy key. - if t.Key.Pointers() && writeBarrier.enabled { - if goarch.PtrSize == 8 { - // Write with a write barrier. - *(*unsafe.Pointer)(dst.k) = *(*unsafe.Pointer)(k) - } else { - // There are three ways to squeeze at least one 32 bit pointer into 64 bits. - // Give up and call typedmemmove. - typedmemmove(t.Key, dst.k, k) - } - } else { - *(*uint64)(dst.k) = *(*uint64)(k) - } - - typedmemmove(t.Elem, dst.e, e) - dst.i++ - // These updates might push these pointers past the end of the - // key or elem arrays. That's ok, as we have the overflow pointer - // at the end of the bucket to protect against pointing past the - // end of the bucket. - dst.k = add(dst.k, 8) - dst.e = add(dst.e, uintptr(t.ValueSize)) - } - } - // Unlink the overflow buckets & clear key/elem to help GC. - if h.flags&oldIterator == 0 && t.Bucket.Pointers() { - b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) - // Preserve b.tophash because the evacuation - // state is maintained there. - ptr := add(b, dataOffset) - n := uintptr(t.BucketSize) - dataOffset - memclrHasPointers(ptr, n) - } - } - - if oldbucket == h.nevacuate { - advanceEvacuationMark(h, t, newbit) - } + throw("mapdelete_fast64 unimplemented") } diff --git a/src/runtime/map_faststr_swiss.go b/src/runtime/map_faststr_swiss.go index 340e1a32356255..41090d7381981b 100644 --- a/src/runtime/map_faststr_swiss.go +++ b/src/runtime/map_faststr_swiss.go @@ -7,481 +7,24 @@ package runtime import ( - "internal/abi" - "internal/goarch" "unsafe" ) func mapaccess1_faststr(t *maptype, h *hmap, ky string) unsafe.Pointer { - if raceenabled && h != nil { - callerpc := getcallerpc() - racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess1_faststr)) - } - if h == nil || h.count == 0 { - return unsafe.Pointer(&zeroVal[0]) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map read and map write") - } - key := stringStructOf(&ky) - if h.B == 0 { - // One-bucket table. - b := (*bmap)(h.buckets) - if key.len < 32 { - // short key, doing lots of comparisons is ok - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || isEmpty(b.tophash[i]) { - if b.tophash[i] == emptyRest { - break - } - continue - } - if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) - } - } - return unsafe.Pointer(&zeroVal[0]) - } - // long key, try not to do more comparisons than necessary - keymaybe := uintptr(abi.SwissMapBucketCount) - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || isEmpty(b.tophash[i]) { - if b.tophash[i] == emptyRest { - break - } - continue - } - if k.str == key.str { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) - } - // check first 4 bytes - if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { - continue - } - // check last 4 bytes - if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { - continue - } - if keymaybe != abi.SwissMapBucketCount { - // Two keys are potential matches. Use hash to distinguish them. - goto dohash - } - keymaybe = i - } - if keymaybe != abi.SwissMapBucketCount { - k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) - if memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)) - } - } - return unsafe.Pointer(&zeroVal[0]) - } -dohash: - hash := t.Hasher(noescape(unsafe.Pointer(&ky)), uintptr(h.hash0)) - m := bucketMask(h.B) - b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) - if c := h.oldbuckets; c != nil { - if !h.sameSizeGrow() { - // There used to be half as many buckets; mask down one more power of two. - m >>= 1 - } - oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) - if !evacuated(oldb) { - b = oldb - } - } - top := tophash(hash) - for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || b.tophash[i] != top { - continue - } - if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) - } - } - } - return unsafe.Pointer(&zeroVal[0]) + throw("mapaccess1_faststr unimplemented") + panic("unreachable") } func mapaccess2_faststr(t *maptype, h *hmap, ky string) (unsafe.Pointer, bool) { - if raceenabled && h != nil { - callerpc := getcallerpc() - racereadpc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapaccess2_faststr)) - } - if h == nil || h.count == 0 { - return unsafe.Pointer(&zeroVal[0]), false - } - if h.flags&hashWriting != 0 { - fatal("concurrent map read and map write") - } - key := stringStructOf(&ky) - if h.B == 0 { - // One-bucket table. - b := (*bmap)(h.buckets) - if key.len < 32 { - // short key, doing lots of comparisons is ok - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || isEmpty(b.tophash[i]) { - if b.tophash[i] == emptyRest { - break - } - continue - } - if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true - } - } - return unsafe.Pointer(&zeroVal[0]), false - } - // long key, try not to do more comparisons than necessary - keymaybe := uintptr(abi.SwissMapBucketCount) - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || isEmpty(b.tophash[i]) { - if b.tophash[i] == emptyRest { - break - } - continue - } - if k.str == key.str { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true - } - // check first 4 bytes - if *((*[4]byte)(key.str)) != *((*[4]byte)(k.str)) { - continue - } - // check last 4 bytes - if *((*[4]byte)(add(key.str, uintptr(key.len)-4))) != *((*[4]byte)(add(k.str, uintptr(key.len)-4))) { - continue - } - if keymaybe != abi.SwissMapBucketCount { - // Two keys are potential matches. Use hash to distinguish them. - goto dohash - } - keymaybe = i - } - if keymaybe != abi.SwissMapBucketCount { - k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+keymaybe*2*goarch.PtrSize)) - if memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+keymaybe*uintptr(t.ValueSize)), true - } - } - return unsafe.Pointer(&zeroVal[0]), false - } -dohash: - hash := t.Hasher(noescape(unsafe.Pointer(&ky)), uintptr(h.hash0)) - m := bucketMask(h.B) - b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.BucketSize))) - if c := h.oldbuckets; c != nil { - if !h.sameSizeGrow() { - // There used to be half as many buckets; mask down one more power of two. - m >>= 1 - } - oldb := (*bmap)(add(c, (hash&m)*uintptr(t.BucketSize))) - if !evacuated(oldb) { - b = oldb - } - } - top := tophash(hash) - for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || b.tophash[i] != top { - continue - } - if k.str == key.str || memequal(k.str, key.str, uintptr(key.len)) { - return add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)), true - } - } - } - return unsafe.Pointer(&zeroVal[0]), false + throw("mapaccess2_faststr unimplemented") + panic("unreachable") } func mapassign_faststr(t *maptype, h *hmap, s string) unsafe.Pointer { - if h == nil { - panic(plainError("assignment to entry in nil map")) - } - if raceenabled { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapassign_faststr)) - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - key := stringStructOf(&s) - hash := t.Hasher(noescape(unsafe.Pointer(&s)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapassign. - h.flags ^= hashWriting - - if h.buckets == nil { - h.buckets = newobject(t.Bucket) // newarray(t.bucket, 1) - } - -again: - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_faststr(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - top := tophash(hash) - - var insertb *bmap - var inserti uintptr - var insertk unsafe.Pointer - -bucketloop: - for { - for i := uintptr(0); i < abi.SwissMapBucketCount; i++ { - if b.tophash[i] != top { - if isEmpty(b.tophash[i]) && insertb == nil { - insertb = b - inserti = i - } - if b.tophash[i] == emptyRest { - break bucketloop - } - continue - } - k := (*stringStruct)(add(unsafe.Pointer(b), dataOffset+i*2*goarch.PtrSize)) - if k.len != key.len { - continue - } - if k.str != key.str && !memequal(k.str, key.str, uintptr(key.len)) { - continue - } - // already have a mapping for key. Update it. - inserti = i - insertb = b - // Overwrite existing key, so it can be garbage collected. - // The size is already guaranteed to be set correctly. - k.str = key.str - goto done - } - ovf := b.overflow(t) - if ovf == nil { - break - } - b = ovf - } - - // Did not find mapping for key. Allocate new cell & add entry. - - // If we hit the max load factor or we have too many overflow buckets, - // and we're not already in the middle of growing, start growing. - if !h.growing() && (overLoadFactor(h.count+1, h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { - hashGrow(t, h) - goto again // Growing the table invalidates everything, so try again - } - - if insertb == nil { - // The current bucket and all the overflow buckets connected to it are full, allocate a new one. - insertb = h.newoverflow(t, b) - inserti = 0 // not necessary, but avoids needlessly spilling inserti - } - insertb.tophash[inserti&(abi.SwissMapBucketCount-1)] = top // mask inserti to avoid bounds checks - - insertk = add(unsafe.Pointer(insertb), dataOffset+inserti*2*goarch.PtrSize) - // store new key at insert position - *((*stringStruct)(insertk)) = *key - h.count++ - -done: - elem := add(unsafe.Pointer(insertb), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+inserti*uintptr(t.ValueSize)) - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting - return elem + throw("mapassign_faststr unimplemented") + panic("unreachable") } func mapdelete_faststr(t *maptype, h *hmap, ky string) { - if raceenabled && h != nil { - callerpc := getcallerpc() - racewritepc(unsafe.Pointer(h), callerpc, abi.FuncPCABIInternal(mapdelete_faststr)) - } - if h == nil || h.count == 0 { - return - } - if h.flags&hashWriting != 0 { - fatal("concurrent map writes") - } - - key := stringStructOf(&ky) - hash := t.Hasher(noescape(unsafe.Pointer(&ky)), uintptr(h.hash0)) - - // Set hashWriting after calling t.hasher for consistency with mapdelete - h.flags ^= hashWriting - - bucket := hash & bucketMask(h.B) - if h.growing() { - growWork_faststr(t, h, bucket) - } - b := (*bmap)(add(h.buckets, bucket*uintptr(t.BucketSize))) - bOrig := b - top := tophash(hash) -search: - for ; b != nil; b = b.overflow(t) { - for i, kptr := uintptr(0), b.keys(); i < abi.SwissMapBucketCount; i, kptr = i+1, add(kptr, 2*goarch.PtrSize) { - k := (*stringStruct)(kptr) - if k.len != key.len || b.tophash[i] != top { - continue - } - if k.str != key.str && !memequal(k.str, key.str, uintptr(key.len)) { - continue - } - // Clear key's pointer. - k.str = nil - e := add(unsafe.Pointer(b), dataOffset+abi.SwissMapBucketCount*2*goarch.PtrSize+i*uintptr(t.ValueSize)) - if t.Elem.Pointers() { - memclrHasPointers(e, t.Elem.Size_) - } else { - memclrNoHeapPointers(e, t.Elem.Size_) - } - b.tophash[i] = emptyOne - // If the bucket now ends in a bunch of emptyOne states, - // change those to emptyRest states. - if i == abi.SwissMapBucketCount-1 { - if b.overflow(t) != nil && b.overflow(t).tophash[0] != emptyRest { - goto notLast - } - } else { - if b.tophash[i+1] != emptyRest { - goto notLast - } - } - for { - b.tophash[i] = emptyRest - if i == 0 { - if b == bOrig { - break // beginning of initial bucket, we're done. - } - // Find previous bucket, continue at its last entry. - c := b - for b = bOrig; b.overflow(t) != c; b = b.overflow(t) { - } - i = abi.SwissMapBucketCount - 1 - } else { - i-- - } - if b.tophash[i] != emptyOne { - break - } - } - notLast: - h.count-- - // Reset the hash seed to make it more difficult for attackers to - // repeatedly trigger hash collisions. See issue 25237. - if h.count == 0 { - h.hash0 = uint32(rand()) - } - break search - } - } - - if h.flags&hashWriting == 0 { - fatal("concurrent map writes") - } - h.flags &^= hashWriting -} - -func growWork_faststr(t *maptype, h *hmap, bucket uintptr) { - // make sure we evacuate the oldbucket corresponding - // to the bucket we're about to use - evacuate_faststr(t, h, bucket&h.oldbucketmask()) - - // evacuate one more oldbucket to make progress on growing - if h.growing() { - evacuate_faststr(t, h, h.nevacuate) - } -} - -func evacuate_faststr(t *maptype, h *hmap, oldbucket uintptr) { - b := (*bmap)(add(h.oldbuckets, oldbucket*uintptr(t.BucketSize))) - newbit := h.noldbuckets() - if !evacuated(b) { - // TODO: reuse overflow buckets instead of using new ones, if there - // is no iterator using the old buckets. (If !oldIterator.) - - // xy contains the x and y (low and high) evacuation destinations. - var xy [2]evacDst - x := &xy[0] - x.b = (*bmap)(add(h.buckets, oldbucket*uintptr(t.BucketSize))) - x.k = add(unsafe.Pointer(x.b), dataOffset) - x.e = add(x.k, abi.SwissMapBucketCount*2*goarch.PtrSize) - - if !h.sameSizeGrow() { - // Only calculate y pointers if we're growing bigger. - // Otherwise GC can see bad pointers. - y := &xy[1] - y.b = (*bmap)(add(h.buckets, (oldbucket+newbit)*uintptr(t.BucketSize))) - y.k = add(unsafe.Pointer(y.b), dataOffset) - y.e = add(y.k, abi.SwissMapBucketCount*2*goarch.PtrSize) - } - - for ; b != nil; b = b.overflow(t) { - k := add(unsafe.Pointer(b), dataOffset) - e := add(k, abi.SwissMapBucketCount*2*goarch.PtrSize) - for i := 0; i < abi.SwissMapBucketCount; i, k, e = i+1, add(k, 2*goarch.PtrSize), add(e, uintptr(t.ValueSize)) { - top := b.tophash[i] - if isEmpty(top) { - b.tophash[i] = evacuatedEmpty - continue - } - if top < minTopHash { - throw("bad map state") - } - var useY uint8 - if !h.sameSizeGrow() { - // Compute hash to make our evacuation decision (whether we need - // to send this key/elem to bucket x or bucket y). - hash := t.Hasher(k, uintptr(h.hash0)) - if hash&newbit != 0 { - useY = 1 - } - } - - b.tophash[i] = evacuatedX + useY // evacuatedX + 1 == evacuatedY, enforced in makemap - dst := &xy[useY] // evacuation destination - - if dst.i == abi.SwissMapBucketCount { - dst.b = h.newoverflow(t, dst.b) - dst.i = 0 - dst.k = add(unsafe.Pointer(dst.b), dataOffset) - dst.e = add(dst.k, abi.SwissMapBucketCount*2*goarch.PtrSize) - } - dst.b.tophash[dst.i&(abi.SwissMapBucketCount-1)] = top // mask dst.i as an optimization, to avoid a bounds check - - // Copy key. - *(*string)(dst.k) = *(*string)(k) - - typedmemmove(t.Elem, dst.e, e) - dst.i++ - // These updates might push these pointers past the end of the - // key or elem arrays. That's ok, as we have the overflow pointer - // at the end of the bucket to protect against pointing past the - // end of the bucket. - dst.k = add(dst.k, 2*goarch.PtrSize) - dst.e = add(dst.e, uintptr(t.ValueSize)) - } - } - // Unlink the overflow buckets & clear key/elem to help GC. - if h.flags&oldIterator == 0 && t.Bucket.Pointers() { - b := add(h.oldbuckets, oldbucket*uintptr(t.BucketSize)) - // Preserve b.tophash because the evacuation - // state is maintained there. - ptr := add(b, dataOffset) - n := uintptr(t.BucketSize) - dataOffset - memclrHasPointers(ptr, n) - } - } - - if oldbucket == h.nevacuate { - advanceEvacuationMark(h, t, newbit) - } + throw("mapdelete_faststr unimplemented") } diff --git a/test/codegen/maps.go b/test/codegen/maps.go index 25505799e9351d..d7cf6534ad907a 100644 --- a/test/codegen/maps.go +++ b/test/codegen/maps.go @@ -4,6 +4,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// TODO(#54766): Temporarily disable for swissmap, which have fast variants +// disabled. This test expects fast variants. +// +//go:build !goexperiment.swissmap + package codegen // This file contains code generation tests related to the handling of diff --git a/test/live.go b/test/live.go index 5658c8ba06763e..8e4fdc7f467034 100644 --- a/test/live.go +++ b/test/live.go @@ -277,26 +277,6 @@ func f17a(p *byte) { // ERROR "live at entry to f17a: p$" m2[x2] = p // ERROR "live at call to mapassign: p$" } -func f17b(p *byte) { // ERROR "live at entry to f17b: p$" - // key temporary - if b { - m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" - } - m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" - m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" -} - -func f17c() { - // key and value temporaries - if b { - m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" - } - m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" - m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" -} - -func f17d() *byte - func g18() [2]string func f18() { diff --git a/test/live_noswiss.go b/test/live_noswiss.go new file mode 100644 index 00000000000000..f9c78290c49b0c --- /dev/null +++ b/test/live_noswiss.go @@ -0,0 +1,42 @@ +// errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off + +//go:build !goexperiment.swissmap && !goexperiment.regabiargs + +// For register ABI, liveness info changes slightly. See live_regabi.go. + +// Copyright 2024 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. + +// non-swissmap-specific tests for live.go +// TODO(#54766): temporary while fast variants are disabled. + +package main + +// str is used to ensure that a temp is required for runtime calls below. +func str() string + +var b bool +var m2 map[[2]string]*byte +var m2s map[string]*byte +var x2 [2]string + +func f17b(p *byte) { // ERROR "live at entry to f17b: p$" + // key temporary + if b { + m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" + } + m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" + m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" +} + +func f17c() { + // key and value temporaries + if b { + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" + } + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" +} + +func f17d() *byte diff --git a/test/live_regabi.go b/test/live_regabi.go index a335126b3f558f..3bd7158ffeeaa0 100644 --- a/test/live_regabi.go +++ b/test/live_regabi.go @@ -261,7 +261,6 @@ func f16() { delete(mi, iface()) } -var m2s map[string]*byte var m2 map[[2]string]*byte var x2 [2]string var bp *byte @@ -274,26 +273,6 @@ func f17a(p *byte) { // ERROR "live at entry to f17a: p$" m2[x2] = p // ERROR "live at call to mapassign: p$" } -func f17b(p *byte) { // ERROR "live at entry to f17b: p$" - // key temporary - if b { - m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" - } - m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" - m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" -} - -func f17c() { - // key and value temporaries - if b { - m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" - } - m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" - m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" -} - -func f17d() *byte - func g18() [2]string func f18() { diff --git a/test/live_regabi_noswiss.go b/test/live_regabi_noswiss.go new file mode 100644 index 00000000000000..636d4e5a0c2c89 --- /dev/null +++ b/test/live_regabi_noswiss.go @@ -0,0 +1,38 @@ +// errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off + +//go:build !goexperiment.swissmap && ((amd64 && goexperiment.regabiargs) || (arm64 && goexperiment.regabiargs)) + +// Copyright 2024 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. + +// non-swissmap-specific tests for live_regabi.go +// TODO(#54766): temporary while fast variants are disabled. + +package main + +func str() string + +var b bool +var m2s map[string]*byte + +func f17b(p *byte) { // ERROR "live at entry to f17b: p$" + // key temporary + if b { + m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" + + } + m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" + m2s[str()] = p // ERROR "live at call to mapassign_faststr: p$" "live at call to str: p$" +} + +func f17c() { + // key and value temporaries + if b { + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" + } + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign_faststr: .autotmp_[0-9]+$" +} + +func f17d() *byte diff --git a/test/live_regabi_swiss.go b/test/live_regabi_swiss.go new file mode 100644 index 00000000000000..d35b8aadfee088 --- /dev/null +++ b/test/live_regabi_swiss.go @@ -0,0 +1,40 @@ +// errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off + +//go:build goexperiment.swissmap && ((amd64 && goexperiment.regabiargs) || (arm64 && goexperiment.regabiargs)) + +// Copyright 2024 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. + +// swissmap-specific tests for live_regabi.go +// TODO(#54766): temporary while fast variants are disabled. + +package main + +func str() string + +var b bool +var m2s map[string]*byte + +func f17b(p *byte) { // ERROR "live at entry to f17b: p$" + // key temporary + if b { + // TODO(go.dev/issue/54766): There is an extra autotmp here vs old maps. + m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" "stack object .autotmp_1 string$" "stack object .autotmp_2 string$" + + } + m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" + m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" +} + +func f17c() { + // key and value temporaries + if b { + // TODO(go.dev/issue/54766): There is an extra autotmp here vs old maps. + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" "stack object .autotmp_0 string$" "stack object .autotmp_1 string$" + } + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" +} + +func f17d() *byte diff --git a/test/live_swiss.go b/test/live_swiss.go new file mode 100644 index 00000000000000..2c91435c47cd00 --- /dev/null +++ b/test/live_swiss.go @@ -0,0 +1,44 @@ +// errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off + +//go:build goexperiment.swissmap && !goexperiment.regabiargs + +// For register ABI, liveness info changes slightly. See live_regabi.go. + +// Copyright 2024 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. + +// swissmap-specific tests for live.go +// TODO(#54766): temporary while fast variants are disabled. + +package main + +// str is used to ensure that a temp is required for runtime calls below. +func str() string + +var b bool +var m2 map[[2]string]*byte +var m2s map[string]*byte +var x2 [2]string + +func f17b(p *byte) { // ERROR "live at entry to f17b: p$" + // key temporary + if b { + // TODO(go.dev/issue/54766): There is an extra autotmp here vs old maps. + m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" "stack object .autotmp_[0-9]+ string$" + } + m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" + m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" +} + +func f17c() { + // key and value temporaries + if b { + // TODO(go.dev/issue/54766): There is an extra autotmp here vs old maps. + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" "stack object .autotmp_[0-9]+ string$" + } + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" + m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" +} + +func f17d() *byte From 2ca1ae8e09a9f821d4bc04c06b18114eafdea12f Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 31 Jul 2024 20:35:47 -0700 Subject: [PATCH 168/866] os: clarify Rename docs for renaming to a directory Fixes #68690 Change-Id: Iebc27d5f385d787e568550a863f59f16c7a79fd7 Reviewed-on: https://go-review.googlesource.com/c/go/+/602178 Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: Dmitri Shuralyov Reviewed-by: Rob Pike --- src/os/file.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/os/file.go b/src/os/file.go index 541b4320819c3f..b8cf89ce765ae5 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -404,6 +404,7 @@ var lstat = Lstat // Rename renames (moves) oldpath to newpath. // If newpath already exists and is not a directory, Rename replaces it. +// If newpath already exists and is a directory, Rename returns an error. // OS-specific restrictions may apply when oldpath and newpath are in different directories. // Even within the same directory, on non-Unix platforms Rename is not an atomic operation. // If there is an error, it will be of type *LinkError. From aac7106cb9b6e59cb16f1c0a1123a67669a4ed2d Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Thu, 1 Aug 2024 23:41:13 +0200 Subject: [PATCH 169/866] crypto/tls: fix testHandshake close flakes The flakes were introduced by me in CL 586655. It's unclear why only FreeBSD seems affected, maybe other TCP stacks handle sending on a half-closed connection differently, or aren't as quick to propagate the RST over localhost. Fixes #68155 Change-Id: I32a1b474a7d6531dbab93910c23568b867629e8c Reviewed-on: https://go-review.googlesource.com/c/go/+/602615 Reviewed-by: Cherry Mui Run-TryBot: Filippo Valsorda TryBot-Result: Gopher Robot Reviewed-by: Roland Shoemaker Auto-Submit: Filippo Valsorda LUCI-TryBot-Result: Go LUCI --- src/crypto/tls/handshake_test.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/crypto/tls/handshake_test.go b/src/crypto/tls/handshake_test.go index bc3d23d5adc24e..41c2643f2a8d28 100644 --- a/src/crypto/tls/handshake_test.go +++ b/src/crypto/tls/handshake_test.go @@ -491,9 +491,10 @@ func testHandshake(t *testing.T, clientConfig, serverConfig *Config) (serverStat if got := string(buf); got != sentinel { t.Errorf("read %q from TLS connection, but expected %q", got, sentinel) } - if err := cli.Close(); err != nil { - t.Errorf("failed to call cli.Close: %v", err) - } + // We discard the error because after ReadAll returns the server must + // have already closed the connection. Sending data (the closeNotify + // alert) can cause a reset, that will make Close return an error. + cli.Close() }() server := Server(s, serverConfig) err = server.Handshake() From e8776e19b93dc59860dad2f23da68d373b3fea39 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Wed, 31 Jul 2024 13:45:53 -0700 Subject: [PATCH 170/866] runtime: benchmark mutex handoffs The speed of handing off a mutex to a waiting thread is sensitive to the configuration of the spinning section of lock2. Measure that latency directly, to complement our existing benchmarks of mutex throughput. For #68578 Change-Id: I7637684bcff62eb05cc008491f095f653d13af4b Reviewed-on: https://go-review.googlesource.com/c/go/+/602176 Reviewed-by: Dmitri Shuralyov Reviewed-by: Michael Knyszek Auto-Submit: Rhys Hiltner LUCI-TryBot-Result: Go LUCI --- src/runtime/runtime_test.go | 110 ++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/runtime/runtime_test.go b/src/runtime/runtime_test.go index 0b51dd8c8d15b1..6004649ee92b31 100644 --- a/src/runtime/runtime_test.go +++ b/src/runtime/runtime_test.go @@ -7,6 +7,8 @@ package runtime_test import ( "flag" "fmt" + "internal/cpu" + "internal/runtime/atomic" "io" . "runtime" "runtime/debug" @@ -561,3 +563,111 @@ func BenchmarkOSYield(b *testing.B) { OSYield() } } + +func BenchmarkMutexHandoff(b *testing.B) { + testcase := func(delay func(l *Mutex)) func(b *testing.B) { + return func(b *testing.B) { + if workers := 2; GOMAXPROCS(0) < workers { + b.Skipf("requires GOMAXPROCS >= %d", workers) + } + + // Measure latency of mutex handoff between threads. + // + // Hand off a runtime.mutex between two threads, one running a + // "coordinator" goroutine and the other running a "worker" + // goroutine. We don't override the runtime's typical + // goroutine/thread mapping behavior. + // + // Measure the latency, starting when the coordinator enters a call + // to runtime.unlock and ending when the worker's call to + // runtime.lock returns. The benchmark can specify a "delay" + // function to simulate the length of the mutex-holder's critical + // section, including to arrange for the worker's thread to be in + // either the "spinning" or "sleeping" portions of the runtime.lock2 + // implementation. Measurement starts after any such "delay". + // + // The two threads' goroutines communicate their current position to + // each other in a non-blocking way via the "turn" state. + + var state struct { + _ [cpu.CacheLinePadSize]byte + lock Mutex + _ [cpu.CacheLinePadSize]byte + turn atomic.Int64 + _ [cpu.CacheLinePadSize]byte + } + + var delta atomic.Int64 + var wg sync.WaitGroup + + // coordinator: + // - acquire the mutex + // - set the turn to 2 mod 4, instructing the worker to begin its Lock call + // - wait until the mutex is contended + // - wait a bit more so the worker can commit to its sleep + // - release the mutex and wait for it to be our turn (0 mod 4) again + wg.Add(1) + go func() { + defer wg.Done() + var t int64 + for range b.N { + Lock(&state.lock) + state.turn.Add(2) + delay(&state.lock) + t -= Nanotime() // start the timer + Unlock(&state.lock) + for state.turn.Load()&0x2 != 0 { + } + } + state.turn.Add(1) + delta.Add(t) + }() + + // worker: + // - wait until its our turn (2 mod 4) + // - acquire and release the mutex + // - switch the turn counter back to the coordinator (0 mod 4) + wg.Add(1) + go func() { + defer wg.Done() + var t int64 + for { + switch state.turn.Load() & 0x3 { + case 0: + case 1, 3: + delta.Add(t) + return + case 2: + Lock(&state.lock) + t += Nanotime() // stop the timer + Unlock(&state.lock) + state.turn.Add(2) + } + } + }() + + wg.Wait() + b.ReportMetric(float64(delta.Load())/float64(b.N), "ns/op") + } + } + + b.Run("Solo", func(b *testing.B) { + var lock Mutex + for range b.N { + Lock(&lock) + Unlock(&lock) + } + }) + + b.Run("FastPingPong", testcase(func(l *Mutex) {})) + b.Run("SlowPingPong", testcase(func(l *Mutex) { + // Wait for the worker to stop spinning and prepare to sleep + for !MutexContended(l) { + } + // Wait a bit longer so the OS can finish committing the worker to its + // sleep. Balance consistency against getting enough iterations. + const extraNs = 10e3 + for t0 := Nanotime(); Nanotime()-t0 < extraNs; { + } + })) +} From c61ff290dbfa6dab4928c0b273db18fddb10df37 Mon Sep 17 00:00:00 2001 From: pgxiaolianzi Date: Fri, 2 Aug 2024 14:50:23 +0000 Subject: [PATCH 171/866] mime: add available godoc link Change-Id: Ic5454758c87e9f84a829aed8a72b5ad977878585 GitHub-Last-Rev: 2eb8ced71286a3bc3b53b35c809164b07ef28a16 GitHub-Pull-Request: golang/go#68605 Reviewed-on: https://go-review.googlesource.com/c/go/+/601295 Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Knyszek Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/mime/encodedword.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mime/encodedword.go b/src/mime/encodedword.go index 856433f8f3b393..c4afad043a2908 100644 --- a/src/mime/encodedword.go +++ b/src/mime/encodedword.go @@ -226,7 +226,7 @@ func (d *WordDecoder) Decode(word string) (string, error) { } // DecodeHeader decodes all encoded-words of the given string. It returns an -// error if and only if WordDecoder.CharsetReader of d returns an error. +// error if and only if [WordDecoder.CharsetReader] of d returns an error. func (d *WordDecoder) DecodeHeader(header string) (string, error) { // If there is no encoded-word, returns before creating a buffer. i := strings.Index(header, "=?") From 9cfe3a86d34f7f4a401dae9a22389b12f7e8bb2e Mon Sep 17 00:00:00 2001 From: apocelipes Date: Fri, 2 Aug 2024 11:33:30 +0000 Subject: [PATCH 172/866] archive/zip,cmd/compile: simplify the split function Use strings to simplify the code. This is a follow-up for the CL 586715. Change-Id: I9e5470ec271e8af1ad4ddbb5f01f43a8a4879557 GitHub-Last-Rev: b95d6179781053ea8ec9fc8ad2e18607fd35c5bb GitHub-Pull-Request: golang/go#68713 Reviewed-on: https://go-review.googlesource.com/c/go/+/602697 LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Knyszek Reviewed-by: Ian Lance Taylor --- src/archive/zip/reader.go | 10 ++-------- src/cmd/compile/internal/staticdata/embed.go | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/archive/zip/reader.go b/src/archive/zip/reader.go index fc9b1cf67c06d9..2246d56558bbee 100644 --- a/src/archive/zip/reader.go +++ b/src/archive/zip/reader.go @@ -902,14 +902,8 @@ func (r *Reader) Open(name string) (fs.File, error) { } func split(name string) (dir, elem string, isDir bool) { - if len(name) > 0 && name[len(name)-1] == '/' { - isDir = true - name = name[:len(name)-1] - } - i := len(name) - 1 - for i >= 0 && name[i] != '/' { - i-- - } + name, isDir = strings.CutSuffix(name, "/") + i := strings.LastIndexByte(name, '/') if i < 0 { return ".", name, isDir } diff --git a/src/cmd/compile/internal/staticdata/embed.go b/src/cmd/compile/internal/staticdata/embed.go index a4d493ce5e359e..be939db877fd34 100644 --- a/src/cmd/compile/internal/staticdata/embed.go +++ b/src/cmd/compile/internal/staticdata/embed.go @@ -80,14 +80,8 @@ func embedKind(typ *types.Type) int { } func embedFileNameSplit(name string) (dir, elem string, isDir bool) { - if name[len(name)-1] == '/' { - isDir = true - name = name[:len(name)-1] - } - i := len(name) - 1 - for i >= 0 && name[i] != '/' { - i-- - } + name, isDir = strings.CutSuffix(name, "/") + i := strings.LastIndexByte(name, '/') if i < 0 { return ".", name, isDir } From 2ffcfcef5597ae9d8f27f6d251785e1624c8c020 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 2 Aug 2024 11:33:34 -0700 Subject: [PATCH 173/866] time: restore support for large negative days in Date CL 586257 converted days to uint32 which is usually fine but fails for negative days close to cycle boundaries. Fixes #68718 Change-Id: I8dc5b8fe0c7c1921beb204da1913b9a1ab39280d Reviewed-on: https://go-review.googlesource.com/c/go/+/602815 Reviewed-by: Rob Pike Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Knyszek Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/time/time.go | 3 ++- src/time/time_test.go | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/time/time.go b/src/time/time.go index 54c4bfdba35f18..572ea64ccfcd88 100644 --- a/src/time/time.go +++ b/src/time/time.go @@ -591,6 +591,7 @@ type absJanFeb int // dateToAbsDays takes a standard year/month/day and returns the // number of days from the absolute epoch to that day. +// The days argument can be out of range and in particular can be negative. func dateToAbsDays(year int64, month Month, day int) absDays { // See “Computations on Times” comment above. amonth := uint32(month) @@ -626,7 +627,7 @@ func dateToAbsDays(year int64, month Month, day int) absDays { cday := 1461 * cyear / 4 centurydays := 146097 * century / 4 - return absDays(centurydays + uint64(cday+ayday+uint32(day)-1)) + return absDays(centurydays + uint64(int64(cday+ayday)+int64(day)-1)) } // days converts absolute seconds to absolute days. diff --git a/src/time/time_test.go b/src/time/time_test.go index bd2c01649fb461..e375d3f97340cb 100644 --- a/src/time/time_test.go +++ b/src/time/time_test.go @@ -666,6 +666,9 @@ var dateTests = []struct { {2012, 1, -43, 7, 56, 35, 0, Local, 1321631795}, // Jan -52 7:56:35 2012 {2012, int(January - 2), 18, 7, 56, 35, 0, Local, 1321631795}, // (Jan-2) 18 7:56:35 2012 {2010, int(December + 11), 18, 7, 56, 35, 0, Local, 1321631795}, // (Dec+11) 18 7:56:35 2010 + {1970, 1, 15297, 7, 56, 35, 0, Local, 1321631795}, // large number of days + + {1970, 1, -25508, 0, 0, 0, 0, Local, -2203948800}, // negative Unix time } func TestDate(t *testing.T) { @@ -704,6 +707,13 @@ func TestAddDate(t *testing.T) { time, t1) } } + + t2 := Date(1899, 12, 31, 0, 0, 0, 0, UTC) + days := t2.Unix() / (24 * 60 * 60) + t3 := Unix(0, 0).AddDate(0, 0, int(days)) + if !t2.Equal(t3) { + t.Errorf("Adddate(0, 0, %d) = %v, want %v", days, t3, t2) + } } var daysInTests = []struct { From b874005a84253e9c4313eb30889df418d607ed4d Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Wed, 5 Jun 2024 10:52:08 +0800 Subject: [PATCH 174/866] cmd/internal/obj/loong64: add support for instructions FCOPYSIGN.{S/D} and FCLASS.{S/D} Go asm syntax: FCOPYSG{F/D} FK, FJ, FD FCLASSF{F/D} FJ, FD Equivalent platform assembler syntax: fcopysign.{s/d} fd, fj, fk fclass.{s/d} fd, fj Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: Ied34b71c9d0b34456ac5782a59d29d2d0229e326 Reviewed-on: https://go-review.googlesource.com/c/go/+/590675 Reviewed-by: Cherry Mui Auto-Submit: abner chenc Reviewed-by: Michael Knyszek Reviewed-by: abner chenc LUCI-TryBot-Result: Go LUCI --- src/cmd/asm/internal/asm/testdata/loong64enc1.s | 5 +++++ src/cmd/internal/obj/loong64/a.out.go | 8 ++++++++ src/cmd/internal/obj/loong64/anames.go | 4 ++++ src/cmd/internal/obj/loong64/asm.go | 12 ++++++++++++ 4 files changed, 29 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index e16bd78feefeeb..7aeb2920bd4e02 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -278,3 +278,8 @@ lable2: FMAXF F4, F5 // a5900801 FMAXD F4, F5, F6 // a6100901 FMAXD F4, F5 // a5100901 + + FCOPYSGF F4, F5, F6 // a6901201 + FCOPYSGD F4, F5, F6 // a6101301 + FCLASSF F4, F5 // 85341401 + FCLASSD F4, F5 // 85381401 diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index e48160eaa292ef..878f148f15290d 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -446,6 +446,14 @@ const ( AFMAXF AFMAXD + // 3.2.1.7 + AFCOPYSGF + AFCOPYSGD + + // 3.2.1.8 + AFCLASSF + AFCLASSD + ALAST // aliases diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index 42d9ea4d18e5aa..aac8ac92b88d36 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -183,5 +183,9 @@ var Anames = []string{ "FMIND", "FMAXF", "FMAXD", + "FCOPYSGF", + "FCOPYSGD", + "FCLASSF", + "FCLASSD", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index c0f9dee380491d..6ac02df988777b 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1028,6 +1028,8 @@ func buildop(ctxt *obj.Link) { opset(ATRUNCFW, r0) opset(ASQRTF, r0) opset(ASQRTD, r0) + opset(AFCLASSF, r0) + opset(AFCLASSD, r0) case AMOVVF: opset(AMOVVD, r0) @@ -1056,6 +1058,8 @@ func buildop(ctxt *obj.Link) { opset(AFMIND, r0) opset(AFMAXF, r0) opset(AFMAXD, r0) + opset(AFCOPYSGF, r0) + opset(AFCOPYSGD, r0) case AAND: opset(AOR, r0) @@ -1884,6 +1888,10 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return 0x211 << 15 // fmax.s case AFMAXD: return 0x212 << 15 // fmax.d + case AFCOPYSGF: + return 0x225 << 15 // fcopysign.s + case AFCOPYSGD: + return 0x226 << 15 // fcopysign.d } if a < 0 { @@ -1952,6 +1960,10 @@ func (c *ctxt0) oprr(a obj.As) uint32 { return 0x4511 << 10 case ASQRTD: return 0x4512 << 10 + case AFCLASSF: + return 0x450d << 10 // fclass.s + case AFCLASSD: + return 0x450e << 10 // fclass.d } c.ctxt.Diag("bad rr opcode %v", a) From 40876244739f787fd9a4eb06503cc122b6c5ce52 Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Thu, 6 Jun 2024 16:06:39 +0800 Subject: [PATCH 175/866] cmd/internal/obj/loong64: add support for instructions FFINT.{S/D}.{W/L} and FTINT.{W/L}.{S/D} Go asm syntax: FFINT{F/D}{W/V} FJ, FD FTINT{W/V}{F/D} FJ, FD Equivalent platform assembler syntax: ffint.{s/d}.{w/l} fd, fj ftint.{w/l}.{s/d} fd, fj Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: Ie7646c5d49645c63b274b34b66539f10370f4930 Reviewed-on: https://go-review.googlesource.com/c/go/+/590996 Reviewed-by: Meidan Li Reviewed-by: abner chenc Auto-Submit: abner chenc Reviewed-by: Qiqi Huang Reviewed-by: Dmitri Shuralyov Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- .../asm/internal/asm/testdata/loong64enc1.s | 9 +++++++ src/cmd/internal/obj/loong64/a.out.go | 10 ++++++++ src/cmd/internal/obj/loong64/anames.go | 8 +++++++ src/cmd/internal/obj/loong64/asm.go | 24 +++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index 7aeb2920bd4e02..57f16839eba345 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -283,3 +283,12 @@ lable2: FCOPYSGD F4, F5, F6 // a6101301 FCLASSF F4, F5 // 85341401 FCLASSD F4, F5 // 85381401 + + FFINTFW F0, F1 // 01101d01 + FFINTFV F0, F1 // 01181d01 + FFINTDW F0, F1 // 01201d01 + FFINTDV F0, F1 // 01281d01 + FTINTWF F0, F1 // 01041b01 + FTINTWD F0, F1 // 01081b01 + FTINTVF F0, F1 // 01241b01 + FTINTVD F0, F1 // 01281b01 diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 878f148f15290d..4dc7a8499435b4 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -454,6 +454,16 @@ const ( AFCLASSF AFCLASSD + // 3.2.3.2 + AFFINTFW + AFFINTFV + AFFINTDW + AFFINTDV + AFTINTWF + AFTINTWD + AFTINTVF + AFTINTVD + ALAST // aliases diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index aac8ac92b88d36..2d80a8aa10fbe9 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -187,5 +187,13 @@ var Anames = []string{ "FCOPYSGD", "FCLASSF", "FCLASSD", + "FFINTFW", + "FFINTFV", + "FFINTDW", + "FFINTDV", + "FTINTWF", + "FTINTWD", + "FTINTVF", + "FTINTVD", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 6ac02df988777b..02ecbe71f68254 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1037,6 +1037,14 @@ func buildop(ctxt *obj.Link) { opset(AMOVDV, r0) opset(ATRUNCDV, r0) opset(ATRUNCFV, r0) + opset(AFFINTFW, r0) + opset(AFFINTFV, r0) + opset(AFFINTDW, r0) + opset(AFFINTDV, r0) + opset(AFTINTWF, r0) + opset(AFTINTWD, r0) + opset(AFTINTVF, r0) + opset(AFTINTVD, r0) case AADD: opset(ASGT, r0) @@ -1964,6 +1972,22 @@ func (c *ctxt0) oprr(a obj.As) uint32 { return 0x450d << 10 // fclass.s case AFCLASSD: return 0x450e << 10 // fclass.d + case AFFINTFW: + return 0x4744 << 10 // ffint.s.w + case AFFINTFV: + return 0x4746 << 10 // ffint.s.l + case AFFINTDW: + return 0x4748 << 10 // ffint.d.w + case AFFINTDV: + return 0x474a << 10 // ffint.d.l + case AFTINTWF: + return 0x46c1 << 10 // ftint.w.s + case AFTINTWD: + return 0x46c2 << 10 // ftint.w.d + case AFTINTVF: + return 0x46c9 << 10 // ftint.l.s + case AFTINTVD: + return 0x46ca << 10 // ftint.l.d } c.ctxt.Diag("bad rr opcode %v", a) From 3ae819ad1c962e5b4e6d4a7d855477b02755951b Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Thu, 6 Jun 2024 14:25:38 +0800 Subject: [PATCH 176/866] cmd/internal/obj/loong64: add support for instructions FTINT{RM/RP/RZ/RNE}.{W/L}.{S/D} These instructions convert floating-point numbers to fixed-point numbers with the specified rounding pattern. Go asm syntax: FTINT{RM/RP/RZ/RNE}{W/V}{F/D} FJ, FD Equivalent platform assembler syntax: ftint{rm/rp/rz/rne}.{w/l}.{s/d} fd, fj Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: I6d650d1b48b10296d01a98fadf9d806206f9b96e Reviewed-on: https://go-review.googlesource.com/c/go/+/590995 Auto-Submit: abner chenc LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: Meidan Li Reviewed-by: abner chenc Reviewed-by: Dmitri Shuralyov Reviewed-by: Qiqi Huang --- .../asm/internal/asm/testdata/loong64enc1.s | 17 +++++++ src/cmd/internal/obj/loong64/a.out.go | 18 +++++++ src/cmd/internal/obj/loong64/anames.go | 16 +++++++ src/cmd/internal/obj/loong64/asm.go | 48 +++++++++++++++++++ 4 files changed, 99 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index 57f16839eba345..ba3327d4e851c9 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -292,3 +292,20 @@ lable2: FTINTWD F0, F1 // 01081b01 FTINTVF F0, F1 // 01241b01 FTINTVD F0, F1 // 01281b01 + + FTINTRMWF F0, F2 // 02041a01 + FTINTRMWD F0, F2 // 02081a01 + FTINTRMVF F0, F2 // 02241a01 + FTINTRMVD F0, F2 // 02281a01 + FTINTRPWF F0, F2 // 02441a01 + FTINTRPWD F0, F2 // 02481a01 + FTINTRPVF F0, F2 // 02641a01 + FTINTRPVD F0, F2 // 02681a01 + FTINTRZWF F0, F2 // 02841a01 + FTINTRZWD F0, F2 // 02881a01 + FTINTRZVF F0, F2 // 02a41a01 + FTINTRZVD F0, F2 // 02a81a01 + FTINTRNEWF F0, F2 // 02c41a01 + FTINTRNEWD F0, F2 // 02c81a01 + FTINTRNEVF F0, F2 // 02e41a01 + FTINTRNEVD F0, F2 // 02e81a01 diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 4dc7a8499435b4..22de5e8203df63 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -464,6 +464,24 @@ const ( AFTINTVF AFTINTVD + // 3.2.3.3 + AFTINTRPWF + AFTINTRPWD + AFTINTRPVF + AFTINTRPVD + AFTINTRMWF + AFTINTRMWD + AFTINTRMVF + AFTINTRMVD + AFTINTRZWF + AFTINTRZWD + AFTINTRZVF + AFTINTRZVD + AFTINTRNEWF + AFTINTRNEWD + AFTINTRNEVF + AFTINTRNEVD + ALAST // aliases diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index 2d80a8aa10fbe9..0749db8312171b 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -195,5 +195,21 @@ var Anames = []string{ "FTINTWD", "FTINTVF", "FTINTVD", + "FTINTRPWF", + "FTINTRPWD", + "FTINTRPVF", + "FTINTRPVD", + "FTINTRMWF", + "FTINTRMWD", + "FTINTRMVF", + "FTINTRMVD", + "FTINTRZWF", + "FTINTRZWD", + "FTINTRZVF", + "FTINTRZVD", + "FTINTRNEWF", + "FTINTRNEWD", + "FTINTRNEVF", + "FTINTRNEVD", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 02ecbe71f68254..18578fdedca550 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -1045,6 +1045,22 @@ func buildop(ctxt *obj.Link) { opset(AFTINTWD, r0) opset(AFTINTVF, r0) opset(AFTINTVD, r0) + opset(AFTINTRPWF, r0) + opset(AFTINTRPWD, r0) + opset(AFTINTRPVF, r0) + opset(AFTINTRPVD, r0) + opset(AFTINTRMWF, r0) + opset(AFTINTRMWD, r0) + opset(AFTINTRMVF, r0) + opset(AFTINTRMVD, r0) + opset(AFTINTRZWF, r0) + opset(AFTINTRZWD, r0) + opset(AFTINTRZVF, r0) + opset(AFTINTRZVD, r0) + opset(AFTINTRNEWF, r0) + opset(AFTINTRNEWD, r0) + opset(AFTINTRNEVF, r0) + opset(AFTINTRNEVD, r0) case AADD: opset(ASGT, r0) @@ -1988,6 +2004,38 @@ func (c *ctxt0) oprr(a obj.As) uint32 { return 0x46c9 << 10 // ftint.l.s case AFTINTVD: return 0x46ca << 10 // ftint.l.d + case AFTINTRMWF: + return 0x4681 << 10 // ftintrm.w.s + case AFTINTRMWD: + return 0x4682 << 10 // ftintrm.w.d + case AFTINTRMVF: + return 0x4689 << 10 // ftintrm.l.s + case AFTINTRMVD: + return 0x468a << 10 // ftintrm.l.d + case AFTINTRPWF: + return 0x4691 << 10 // ftintrp.w.s + case AFTINTRPWD: + return 0x4692 << 10 // ftintrp.w.d + case AFTINTRPVF: + return 0x4699 << 10 // ftintrp.l.s + case AFTINTRPVD: + return 0x469a << 10 // ftintrp.l.d + case AFTINTRZWF: + return 0x46a1 << 10 // ftintrz.w.s + case AFTINTRZWD: + return 0x46a2 << 10 // ftintrz.w.d + case AFTINTRZVF: + return 0x46a9 << 10 // ftintrz.l.s + case AFTINTRZVD: + return 0x46aa << 10 // ftintrz.l.d + case AFTINTRNEWF: + return 0x46b1 << 10 // ftintrne.w.s + case AFTINTRNEWD: + return 0x46b2 << 10 // ftintrne.w.d + case AFTINTRNEVF: + return 0x46b9 << 10 // ftintrne.l.s + case AFTINTRNEVD: + return 0x46ba << 10 // ftintrne.l.d } c.ctxt.Diag("bad rr opcode %v", a) From f428c7b729d3d9b37ed4dacddcd7ff88f4213f70 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Thu, 23 May 2024 13:43:20 +0800 Subject: [PATCH 177/866] cmd/internal/obj/loong64: add FLDX,FSTX,LDX.STX instructions support The LDX.{B,BU,H,HU,W,WU,D},STX.{B,H,W,D}, FLDX.{S,D}, FSTX.{S,D} instruction on Loong64 implements memory access operations using register offset Go asm syntax: MOV{B,BU,H,HU,W,WU,V} (RJ)(RK), RD MOV{B,H,W,V} RD, (RJ)(RK) MOV{F,D} (RJ)(RK), FD MOV{F,D} FD, (RJ)(RK) Equivalent platform assembler syntax: ldx.{b,bu,h,hu,w,wu,d} rd, rj, rk stx.{b,h,w,d} rd, rj, rk fldx.{s,d} fd, rj, rk fstx.{s,d} fd, rj, rk Ref: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html Change-Id: Ic7d13bf45dab8342f034b6469465e6337a087144 Reviewed-on: https://go-review.googlesource.com/c/go/+/588215 Reviewed-by: sophie zhao Reviewed-by: Michael Knyszek Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Qiqi Huang Reviewed-by: Meidan Li Auto-Submit: abner chenc --- .../asm/internal/asm/testdata/loong64enc1.s | 23 +++++ src/cmd/internal/obj/loong64/a.out.go | 1 + src/cmd/internal/obj/loong64/asm.go | 60 +++++++++++++ src/cmd/internal/obj/loong64/cnames.go | 1 + src/cmd/internal/obj/loong64/doc.go | 86 +++++++++++++++++++ 5 files changed, 171 insertions(+) create mode 100644 src/cmd/internal/obj/loong64/doc.go diff --git a/src/cmd/asm/internal/asm/testdata/loong64enc1.s b/src/cmd/asm/internal/asm/testdata/loong64enc1.s index ba3327d4e851c9..b24aa2fe7cbda4 100644 --- a/src/cmd/asm/internal/asm/testdata/loong64enc1.s +++ b/src/cmd/asm/internal/asm/testdata/loong64enc1.s @@ -309,3 +309,26 @@ lable2: FTINTRNEWD F0, F2 // 02c81a01 FTINTRNEVF F0, F2 // 02e41a01 FTINTRNEVD F0, F2 // 02e81a01 + + // LDX.{B,BU,H,HU,W,WU,D} instructions + MOVB (R14)(R13), R12 // cc350038 + MOVBU (R14)(R13), R12 // cc352038 + MOVH (R14)(R13), R12 // cc350438 + MOVHU (R14)(R13), R12 // cc352438 + MOVW (R14)(R13), R12 // cc350838 + MOVWU (R14)(R13), R12 // cc352838 + MOVV (R14)(R13), R12 // cc350c38 + + // STX.{B,H,W,D} instructions + MOVB R12, (R14)(R13) // cc351038 + MOVH R12, (R14)(R13) // cc351438 + MOVW R12, (R14)(R13) // cc351838 + MOVV R12, (R14)(R13) // cc351c38 + + // FLDX.{S,D} instructions + MOVF (R14)(R13), F2 // c2353038 + MOVD (R14)(R13), F2 // c2353438 + + // FSTX.{S,D} instructions + MOVF F2, (R14)(R13) // c2353838 + MOVD F2, (R14)(R13) // c2353c38 diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 22de5e8203df63..d1cd35b878f052 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -218,6 +218,7 @@ const ( C_ZOREG C_SOREG C_LOREG + C_ROFF // register offset C_ADDR C_TLS_LE C_TLS_IE diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 18578fdedca550..52fe7b2c894ce1 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -293,6 +293,22 @@ var optab = []Optab{ {AAMSWAPW, C_REG, C_NONE, C_NONE, C_ZOREG, C_REG, 66, 4, 0, 0}, {ANOOP, C_NONE, C_NONE, C_NONE, C_NONE, C_NONE, 49, 4, 0, 0}, + /* store with extended register offset */ + {AMOVB, C_REG, C_NONE, C_NONE, C_ROFF, C_NONE, 20, 4, 0, 0}, + {AMOVW, C_REG, C_NONE, C_NONE, C_ROFF, C_NONE, 20, 4, 0, 0}, + {AMOVV, C_REG, C_NONE, C_NONE, C_ROFF, C_NONE, 20, 4, 0, 0}, + {AMOVF, C_FREG, C_NONE, C_NONE, C_ROFF, C_NONE, 20, 4, 0, 0}, + {AMOVD, C_FREG, C_NONE, C_NONE, C_ROFF, C_NONE, 20, 4, 0, 0}, + + /* load with extended register offset */ + {AMOVB, C_ROFF, C_NONE, C_NONE, C_REG, C_NONE, 21, 4, 0, 0}, + {AMOVBU, C_ROFF, C_NONE, C_NONE, C_REG, C_NONE, 21, 4, 0, 0}, + {AMOVW, C_ROFF, C_NONE, C_NONE, C_REG, C_NONE, 21, 4, 0, 0}, + {AMOVWU, C_ROFF, C_NONE, C_NONE, C_REG, C_NONE, 21, 4, 0, 0}, + {AMOVV, C_ROFF, C_NONE, C_NONE, C_REG, C_NONE, 21, 4, 0, 0}, + {AMOVF, C_ROFF, C_NONE, C_NONE, C_FREG, C_NONE, 21, 4, 0, 0}, + {AMOVD, C_ROFF, C_NONE, C_NONE, C_FREG, C_NONE, 21, 4, 0, 0}, + {obj.APCALIGN, C_SCON, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0, 0, 0}, {obj.APCDATA, C_LCON, C_NONE, C_NONE, C_LCON, C_NONE, 0, 0, 0, 0}, {obj.APCDATA, C_DCON, C_NONE, C_NONE, C_DCON, C_NONE, 0, 0, 0, 0}, @@ -654,6 +670,14 @@ func (c *ctxt0) aclass(a *obj.Addr) int { return C_LAUTO case obj.NAME_NONE: + if a.Index != 0 { + if a.Offset != 0 { + return C_GOK + } + // register offset + return C_ROFF + } + c.instoffset = a.Offset if c.instoffset == 0 { return C_ZOREG @@ -1474,6 +1498,12 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = OP_IR(c.opir(ALU12IW), uint32(v>>12), uint32(p.To.Reg)) o2 = OP_12IRR(c.opirr(AOR), uint32(v), uint32(p.To.Reg), uint32(p.To.Reg)) + case 20: // mov Rsrc, (Rbase)(Roff) + o1 = OP_RRR(c.oprrr(p.As), uint32(p.To.Index), uint32(p.To.Reg), uint32(p.From.Reg)) + + case 21: // mov (Rbase)(Roff), Rdst + o1 = OP_RRR(c.oprrr(-p.As), uint32(p.From.Index), uint32(p.From.Reg), uint32(p.To.Reg)) + case 23: // add $lcon,r1,r2 v := c.regoff(&p.From) o1 = OP_IR(c.opir(ALU12IW), uint32(v>>12), uint32(REGTMP)) @@ -1916,6 +1946,36 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return 0x225 << 15 // fcopysign.s case AFCOPYSGD: return 0x226 << 15 // fcopysign.d + case -AMOVB: + return 0x07000 << 15 // ldx.b + case -AMOVH: + return 0x07008 << 15 // ldx.h + case -AMOVW: + return 0x07010 << 15 // ldx.w + case -AMOVV: + return 0x07018 << 15 // ldx.d + case -AMOVBU: + return 0x07040 << 15 // ldx.bu + case -AMOVHU: + return 0x07048 << 15 // ldx.hu + case -AMOVWU: + return 0x07050 << 15 // ldx.wu + case AMOVB: + return 0x07020 << 15 // stx.b + case AMOVH: + return 0x07028 << 15 // stx.h + case AMOVW: + return 0x07030 << 15 // stx.w + case AMOVV: + return 0x07038 << 15 // stx.d + case -AMOVF: + return 0x07060 << 15 // fldx.s + case -AMOVD: + return 0x07068 << 15 // fldx.d + case AMOVF: + return 0x07070 << 15 // fstx.s + case AMOVD: + return 0x07078 << 15 // fstx.d } if a < 0 { diff --git a/src/cmd/internal/obj/loong64/cnames.go b/src/cmd/internal/obj/loong64/cnames.go index 985a331defa0fd..41721aae2d5588 100644 --- a/src/cmd/internal/obj/loong64/cnames.go +++ b/src/cmd/internal/obj/loong64/cnames.go @@ -30,6 +30,7 @@ var cnames0 = []string{ "ZOREG", "SOREG", "LOREG", + "ROFF", "ADDR", "TLS_LE", "TLS_IE", diff --git a/src/cmd/internal/obj/loong64/doc.go b/src/cmd/internal/obj/loong64/doc.go new file mode 100644 index 00000000000000..19a0effcd56485 --- /dev/null +++ b/src/cmd/internal/obj/loong64/doc.go @@ -0,0 +1,86 @@ +// Copyright 2024 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 loong64 implements an LoongArch64 assembler. Go assembly syntax is different from +GNU LoongArch64 syntax, but we can still follow the general rules to map between them. + +# Instructions mnemonics mapping rules + +1. Bit widths represented by various instruction suffixes +V (vlong) = 64 bit +WU (word) = 32 bit unsigned +W (word) = 32 bit +H (half word) = 16 bit +HU = 16 bit unsigned +B (byte) = 8 bit +BU = 8 bit unsigned +F (float) = 32 bit float +D (double) = 64 bit float + +2. Align directive +Go asm supports the PCALIGN directive, which indicates that the next instruction should +be aligned to a specified boundary by padding with NOOP instruction. The alignment value +supported on loong64 must be a power of 2 and in the range of [8, 2048]. + +Examples: + + PCALIGN $16 + MOVV $2, R4 // This instruction is aligned with 16 bytes. + PCALIGN $1024 + MOVV $3, R5 // This instruction is aligned with 1024 bytes. + +# On loong64, auto-align loop heads to 16-byte boundaries + +Examples: + + TEXT ·Add(SB),NOSPLIT|NOFRAME,$0 + +start: + + MOVV $1, R4 // This instruction is aligned with 16 bytes. + MOVV $-1, R5 + BNE R5, start + RET + +# Register mapping rules + +1. All generial-prupose register names are written as Rn. + +2. All floating-poing register names are written as Fn. + +# Argument mapping rules + +1. The operands appear in left-to-right assignment order. + +Go reverses the arguments of most instructions. + +Examples: + + ADDV R11, R12, R13 <=> add.d R13, R12, R11 + LLV (R4), R7 <=> ll.d R7, R4 + OR R5, R6 <=> or R6, R6, R5 + +Special Cases. +Argument order is the same as in the GNU Loong64 syntax: jump instructions, + +Examples: + + BEQ R0, R4, lable1 <=> beq R0, R4, lable1 + JMP lable1 <=> b lable1 + +2. Expressions for special arguments. + +Memory references: a base register and an offset register is written as (Rbase)(Roff). + +Examples: + + MOVB (R4)(R5), R6 <=> ldx.b R6, R4, R5 + MOVV (R4)(R5), R6 <=> ldx.d R6, R4, R5 + MOVD (R4)(R5), F6 <=> fldx.d F6, R4, R5 + MOVB R6, (R4)(R5) <=> stx.b R6, R5, R5 + MOVV R6, (R4)(R5) <=> stx.d R6, R5, R5 + MOVV F6, (R4)(R5) <=> fstx.d F6, R5, R5 +*/ +package loong64 From d465aee0b80b8eb0b63929deb8de0b21187c59a7 Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Mon, 22 Jul 2024 13:27:09 -0700 Subject: [PATCH 178/866] cmd/internal/testdir: fix failure when GOAMD64=v3 is specified in goenv file Fixes #68548 Add GOENV=off, GOFLAGS= to the build of the stdlib, so that it matches what runcmd does. This ensures that the runtime and the test are built with the same flags. As opposed to before this CL, where flags were used in the stdlib build but not the runcmd build. (Part of the problem here is that cmd/internal/testdir/testdir_test.go plays fast and loose with the build cache to make the tests run faster. Maybe some of that fast-and-loose mechanism can be removed now that we have a better build cache? I'm not sure.) Change-Id: I449d4ff517c69311d0aa4411e7fb96c0cca49269 Reviewed-on: https://go-review.googlesource.com/c/go/+/600276 Reviewed-by: Dmitri Shuralyov Reviewed-by: Michael Matloob Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/cmd/internal/testdir/testdir_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cmd/internal/testdir/testdir_test.go b/src/cmd/internal/testdir/testdir_test.go index e64451b743a87b..c494f2c4c0125e 100644 --- a/src/cmd/internal/testdir/testdir_test.go +++ b/src/cmd/internal/testdir/testdir_test.go @@ -219,7 +219,9 @@ var stdlibImportcfgString string func stdlibImportcfg() string { stdlibImportcfgStringOnce.Do(func() { - output, err := exec.Command(goTool, "list", "-export", "-f", "{{if .Export}}packagefile {{.ImportPath}}={{.Export}}{{end}}", "std").Output() + cmd := exec.Command(goTool, "list", "-export", "-f", "{{if .Export}}packagefile {{.ImportPath}}={{.Export}}{{end}}", "std") + cmd.Env = append(os.Environ(), "GOENV=off", "GOFLAGS=") + output, err := cmd.Output() if err != nil { log.Fatal(err) } From 677e080dfed1f17de76d4914cf4935b4914e9ddb Mon Sep 17 00:00:00 2001 From: aimuz Date: Mon, 5 Aug 2024 03:00:42 +0000 Subject: [PATCH 179/866] bytes, strings: replace reflect.DeepEqual and custom eq with slices.Equal in tests Change-Id: I016672af79d49a00ddc2d0449cdaac61e98b4ba0 GitHub-Last-Rev: 38d15d9a03e5bd29e4b25f1d767e40cf7165a7a6 GitHub-Pull-Request: golang/go#68730 Reviewed-on: https://go-review.googlesource.com/c/go/+/602698 LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer Commit-Queue: Ian Lance Taylor Reviewed-by: Ian Lance Taylor --- src/bytes/bytes_test.go | 9 ++++----- src/strings/strings_test.go | 22 +++++----------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/bytes/bytes_test.go b/src/bytes/bytes_test.go index 94301358e037b8..6fb6140c1889b8 100644 --- a/src/bytes/bytes_test.go +++ b/src/bytes/bytes_test.go @@ -10,7 +10,6 @@ import ( "internal/testenv" "math" "math/rand" - "reflect" "slices" "strings" "testing" @@ -814,8 +813,8 @@ func TestSplit(t *testing.T) { t.Errorf(`Join(Split(%q, %q, %d), %q) = %q`, tt.s, tt.sep, tt.n, tt.sep, s) } if tt.n < 0 { - b := Split([]byte(tt.s), []byte(tt.sep)) - if !reflect.DeepEqual(a, b) { + b := sliceOfString(Split([]byte(tt.s), []byte(tt.sep))) + if !slices.Equal(result, b) { t.Errorf("Split disagrees withSplitN(%q, %q, %d) = %v; want %v", tt.s, tt.sep, tt.n, b, a) } } @@ -869,8 +868,8 @@ func TestSplitAfter(t *testing.T) { t.Errorf(`Join(Split(%q, %q, %d), %q) = %q`, tt.s, tt.sep, tt.n, tt.sep, s) } if tt.n < 0 { - b := SplitAfter([]byte(tt.s), []byte(tt.sep)) - if !reflect.DeepEqual(a, b) { + b := sliceOfString(SplitAfter([]byte(tt.s), []byte(tt.sep))) + if !slices.Equal(result, b) { t.Errorf("SplitAfter disagrees withSplitAfterN(%q, %q, %d) = %v; want %v", tt.s, tt.sep, tt.n, b, a) } } diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go index 4c8c25ee132a28..c9183722804fb4 100644 --- a/src/strings/strings_test.go +++ b/src/strings/strings_test.go @@ -19,18 +19,6 @@ import ( "unsafe" ) -func eq(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i := 0; i < len(a); i++ { - if a[i] != b[i] { - return false - } - } - return true -} - var abcd = "abcd" var faces = "☺☻☹" var commas = "1,2,3,4" @@ -418,7 +406,7 @@ var splittests = []SplitTest{ func TestSplit(t *testing.T) { for _, tt := range splittests { a := SplitN(tt.s, tt.sep, tt.n) - if !eq(a, tt.a) { + if !slices.Equal(a, tt.a) { t.Errorf("Split(%q, %q, %d) = %v; want %v", tt.s, tt.sep, tt.n, a, tt.a) continue } @@ -457,7 +445,7 @@ var splitaftertests = []SplitTest{ func TestSplitAfter(t *testing.T) { for _, tt := range splitaftertests { a := SplitAfterN(tt.s, tt.sep, tt.n) - if !eq(a, tt.a) { + if !slices.Equal(a, tt.a) { t.Errorf(`Split(%q, %q, %d) = %v; want %v`, tt.s, tt.sep, tt.n, a, tt.a) continue } @@ -500,7 +488,7 @@ var fieldstests = []FieldsTest{ func TestFields(t *testing.T) { for _, tt := range fieldstests { a := Fields(tt.s) - if !eq(a, tt.a) { + if !slices.Equal(a, tt.a) { t.Errorf("Fields(%q) = %v; want %v", tt.s, a, tt.a) continue } @@ -517,7 +505,7 @@ var FieldsFuncTests = []FieldsTest{ func TestFieldsFunc(t *testing.T) { for _, tt := range fieldstests { a := FieldsFunc(tt.s, unicode.IsSpace) - if !eq(a, tt.a) { + if !slices.Equal(a, tt.a) { t.Errorf("FieldsFunc(%q, unicode.IsSpace) = %v; want %v", tt.s, a, tt.a) continue } @@ -525,7 +513,7 @@ func TestFieldsFunc(t *testing.T) { pred := func(c rune) bool { return c == 'X' } for _, tt := range FieldsFuncTests { a := FieldsFunc(tt.s, pred) - if !eq(a, tt.a) { + if !slices.Equal(a, tt.a) { t.Errorf("FieldsFunc(%q) = %v, want %v", tt.s, a, tt.a) } } From 1f0c044d60211e435dc58844127544dd3ecb6a41 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 5 Aug 2024 11:54:51 -0700 Subject: [PATCH 180/866] test: add test that caused gofrontend to crash Apparently people don't tend to pass untyped constant expressions to panic. For #68734 Change-Id: I6fff8137a0f001391de9e61860b67026a9db08c2 Reviewed-on: https://go-review.googlesource.com/c/go/+/603096 Reviewed-by: David Chase Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Commit-Queue: Ian Lance Taylor --- test/fixedbugs/issue68734.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 test/fixedbugs/issue68734.go diff --git a/test/fixedbugs/issue68734.go b/test/fixedbugs/issue68734.go new file mode 100644 index 00000000000000..e60dbc5482230c --- /dev/null +++ b/test/fixedbugs/issue68734.go @@ -0,0 +1,17 @@ +// compile + +// Copyright 2024 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. + +// The gofrontend had a bug handling panic of an untyped constant expression. + +package issue68734 + +func F1() { + panic(1 + 2) +} + +func F2() { + panic("a" + "b") +} From b915399e7e91cba31d4031df507b9c97c33f35d8 Mon Sep 17 00:00:00 2001 From: Vasily Leonenko Date: Tue, 23 Jul 2024 23:23:33 +0300 Subject: [PATCH 181/866] internal/bytealg: optimize Equal for arm64 target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove redundant intermediate jump in runtime.memequal Remove redundant a.ptr==b.ptr check in runtime.memequal_varlen Add 16-bytes alignment before some labels in runtime.memequal goos: linux goarch: arm64 pkg: bytes │ ./master.log │ ./opt.log │ │ sec/op │ sec/op vs base │ Equal/0-4 0.8342n ± 0% 0.5254n ± 3% -37.01% (p=0.000 n=8) Equal/same/1-4 2.720n ± 0% 2.720n ± 2% ~ (p=0.779 n=8) Equal/same/6-4 2.720n ± 5% 2.720n ± 2% ~ (p=0.908 n=8) Equal/same/9-4 2.722n ± 2% 2.721n ± 2% ~ (p=0.779 n=8) Equal/same/15-4 2.719n ± 0% 2.719n ± 0% ~ (p=0.641 n=8) Equal/same/16-4 2.721n ± 2% 2.719n ± 0% -0.07% (p=0.014 n=8) Equal/same/20-4 2.720n ± 0% 2.721n ± 2% ~ (p=0.236 n=8) Equal/same/32-4 2.720n ± 1% 2.720n ± 0% ~ (p=0.396 n=8) Equal/same/4K-4 2.719n ± 0% 2.720n ± 0% ~ (p=0.663 n=8) Equal/same/4M-4 2.721n ± 0% 2.720n ± 0% ~ (p=0.075 n=8) Equal/same/64M-4 2.720n ± 0% 2.720n ± 2% ~ (p=0.806 n=8) Equal/1-4 6.671n ± 0% 5.449n ± 0% -18.33% (p=0.000 n=8) Equal/6-4 8.761n ± 2% 7.508n ± 0% -14.30% (p=0.000 n=8) Equal/9-4 8.343n ± 0% 7.091n ± 0% -15.01% (p=0.000 n=8) Equal/15-4 8.339n ± 2% 7.090n ± 0% -14.98% (p=0.000 n=8) Equal/16-4 9.173n ± 0% 7.925n ± 2% -13.61% (p=0.000 n=8) Equal/20-4 11.26n ± 0% 10.01n ± 0% -11.10% (p=0.000 n=8) Equal/32-4 10.425n ± 0% 9.176n ± 0% -11.98% (p=0.000 n=8) Equal/4K-4 192.9n ± 0% 192.7n ± 0% -0.10% (p=0.044 n=8) Equal/4M-4 191.3µ ± 0% 191.3µ ± 0% ~ (p=0.798 n=8) Equal/64M-4 3.066m ± 2% 3.065m ± 0% ~ (p=0.083 n=8) EqualBothUnaligned/64_0-4 7.506n ± 2% 7.090n ± 2% -5.55% (p=0.000 n=8) EqualBothUnaligned/64_1-4 7.850n ± 1% 7.423n ± 0% -5.43% (p=0.000 n=8) EqualBothUnaligned/64_4-4 7.505n ± 0% 7.088n ± 0% -5.56% (p=0.000 n=8) EqualBothUnaligned/64_7-4 7.840n ± 0% 7.413n ± 0% -5.44% (p=0.000 n=8) EqualBothUnaligned/4096_0-4 193.0n ± 4% 190.9n ± 0% -1.09% (p=0.004 n=8) EqualBothUnaligned/4096_1-4 223.9n ± 0% 223.1n ± 0% -0.36% (p=0.000 n=8) EqualBothUnaligned/4096_4-4 191.9n ± 2% 191.5n ± 0% -0.21% (p=0.004 n=8) EqualBothUnaligned/4096_7-4 223.8n ± 0% 223.1n ± 1% ~ (p=0.098 n=8) EqualBothUnaligned/4194304_0-4 191.8µ ± 0% 191.8µ ± 0% ~ (p=0.504 n=8) EqualBothUnaligned/4194304_1-4 225.4µ ± 2% 225.5µ ± 0% ~ (p=0.065 n=8) EqualBothUnaligned/4194304_4-4 192.6µ ± 0% 192.7µ ± 2% +0.06% (p=0.041 n=8) EqualBothUnaligned/4194304_7-4 225.4µ ± 0% 225.5µ ± 0% +0.05% (p=0.050 n=8) EqualBothUnaligned/67108864_0-4 3.069m ± 0% 3.069m ± 0% ~ (p=0.314 n=8) EqualBothUnaligned/67108864_1-4 3.589m ± 0% 3.588m ± 0% ~ (p=0.959 n=8) EqualBothUnaligned/67108864_4-4 3.083m ± 0% 3.083m ± 2% ~ (p=0.505 n=8) EqualBothUnaligned/67108864_7-4 3.588m ± 0% 3.588m ± 0% ~ (p=1.000 n=8) geomean 199.9n 190.5n -4.70% Change-Id: Ib8d0d4006dd39162a600ac98a5f44a0f05136ed3 Reviewed-on: https://go-review.googlesource.com/c/go/+/601135 Reviewed-by: Keith Randall Reviewed-by: Cherry Mui Auto-Submit: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Auto-Submit: Keith Randall --- src/internal/bytealg/equal_arm64.s | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/internal/bytealg/equal_arm64.s b/src/internal/bytealg/equal_arm64.s index 4db951547443d5..408ab374e62994 100644 --- a/src/internal/bytealg/equal_arm64.s +++ b/src/internal/bytealg/equal_arm64.s @@ -5,25 +5,11 @@ #include "go_asm.h" #include "textflag.h" -// memequal(a, b unsafe.Pointer, size uintptr) bool -TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25 - // short path to handle 0-byte case - CBZ R2, equal - // short path to handle equal pointers - CMP R0, R1 - BEQ equal - B memeqbody<>(SB) -equal: - MOVD $1, R0 - RET - // memequal_varlen(a, b unsafe.Pointer) bool TEXT runtime·memequal_varlen(SB),NOSPLIT,$0-17 - CMP R0, R1 - BEQ eq MOVD 8(R26), R2 // compiler stores size at offset 8 in the closure CBZ R2, eq - B memeqbody<>(SB) + B runtime·memequal(SB) eq: MOVD $1, R0 RET @@ -33,7 +19,13 @@ eq: // R1: pointer b // R2: data len // at return: result in R0 -TEXT memeqbody<>(SB),NOSPLIT,$0 +// memequal(a, b unsafe.Pointer, size uintptr) bool +TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25 + // short path to handle 0-byte case + CBZ R2, equal + // short path to handle equal pointers + CMP R0, R1 + BEQ equal CMP $1, R2 // handle 1-byte special case for better performance BEQ one @@ -91,6 +83,7 @@ tail: EOR R4, R5 CBNZ R5, not_equal B equal + PCALIGN $16 lt_8: TBZ $2, R2, lt_4 MOVWU (R0), R4 @@ -103,6 +96,7 @@ lt_8: EOR R4, R5 CBNZ R5, not_equal B equal + PCALIGN $16 lt_4: TBZ $1, R2, lt_2 MOVHU.P 2(R0), R4 From 0ea534b89949e2c7de1b9c2703b454e67102598c Mon Sep 17 00:00:00 2001 From: Mateusz Poliwczak Date: Sat, 3 Aug 2024 07:51:45 +0000 Subject: [PATCH 182/866] crypto/internal/boring: use internal/byteorder Change-Id: I882dd4160fb24b1d605af28bca01227716dac717 GitHub-Last-Rev: c631b19068aa95dcebed29a9a68cda5644a973b8 GitHub-Pull-Request: golang/go#68697 Reviewed-on: https://go-review.googlesource.com/c/go/+/602179 Reviewed-by: Filippo Valsorda Reviewed-by: Zxilly Chou Auto-Submit: Roland Shoemaker Reviewed-by: David Chase Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI --- src/crypto/internal/boring/sha.go | 126 +++++++++++------------------- 1 file changed, 45 insertions(+), 81 deletions(-) diff --git a/src/crypto/internal/boring/sha.go b/src/crypto/internal/boring/sha.go index 524069db4f159d..9e461bcbe07c90 100644 --- a/src/crypto/internal/boring/sha.go +++ b/src/crypto/internal/boring/sha.go @@ -59,6 +59,7 @@ import "C" import ( "errors" "hash" + "internal/byteorder" "unsafe" ) @@ -165,14 +166,14 @@ func (h *sha1Hash) MarshalBinary() ([]byte, error) { func (h *sha1Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha1Ctx)(unsafe.Pointer(&h.ctx)) b = append(b, sha1Magic...) - b = appendUint32(b, d.h[0]) - b = appendUint32(b, d.h[1]) - b = appendUint32(b, d.h[2]) - b = appendUint32(b, d.h[3]) - b = appendUint32(b, d.h[4]) + b = byteorder.BeAppendUint32(b, d.h[0]) + b = byteorder.BeAppendUint32(b, d.h[1]) + b = byteorder.BeAppendUint32(b, d.h[2]) + b = byteorder.BeAppendUint32(b, d.h[3]) + b = byteorder.BeAppendUint32(b, d.h[4]) b = append(b, d.x[:d.nx]...) b = append(b, make([]byte, len(d.x)-int(d.nx))...) - b = appendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) + b = byteorder.BeAppendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) return b, nil } @@ -294,17 +295,17 @@ func (h *sha224Hash) MarshalBinary() ([]byte, error) { func (h *sha224Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha256Ctx)(unsafe.Pointer(&h.ctx)) b = append(b, magic224...) - b = appendUint32(b, d.h[0]) - b = appendUint32(b, d.h[1]) - b = appendUint32(b, d.h[2]) - b = appendUint32(b, d.h[3]) - b = appendUint32(b, d.h[4]) - b = appendUint32(b, d.h[5]) - b = appendUint32(b, d.h[6]) - b = appendUint32(b, d.h[7]) + b = byteorder.BeAppendUint32(b, d.h[0]) + b = byteorder.BeAppendUint32(b, d.h[1]) + b = byteorder.BeAppendUint32(b, d.h[2]) + b = byteorder.BeAppendUint32(b, d.h[3]) + b = byteorder.BeAppendUint32(b, d.h[4]) + b = byteorder.BeAppendUint32(b, d.h[5]) + b = byteorder.BeAppendUint32(b, d.h[6]) + b = byteorder.BeAppendUint32(b, d.h[7]) b = append(b, d.x[:d.nx]...) b = append(b, make([]byte, len(d.x)-int(d.nx))...) - b = appendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) + b = byteorder.BeAppendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) return b, nil } @@ -315,17 +316,17 @@ func (h *sha256Hash) MarshalBinary() ([]byte, error) { func (h *sha256Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha256Ctx)(unsafe.Pointer(&h.ctx)) b = append(b, magic256...) - b = appendUint32(b, d.h[0]) - b = appendUint32(b, d.h[1]) - b = appendUint32(b, d.h[2]) - b = appendUint32(b, d.h[3]) - b = appendUint32(b, d.h[4]) - b = appendUint32(b, d.h[5]) - b = appendUint32(b, d.h[6]) - b = appendUint32(b, d.h[7]) + b = byteorder.BeAppendUint32(b, d.h[0]) + b = byteorder.BeAppendUint32(b, d.h[1]) + b = byteorder.BeAppendUint32(b, d.h[2]) + b = byteorder.BeAppendUint32(b, d.h[3]) + b = byteorder.BeAppendUint32(b, d.h[4]) + b = byteorder.BeAppendUint32(b, d.h[5]) + b = byteorder.BeAppendUint32(b, d.h[6]) + b = byteorder.BeAppendUint32(b, d.h[7]) b = append(b, d.x[:d.nx]...) b = append(b, make([]byte, len(d.x)-int(d.nx))...) - b = appendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) + b = byteorder.BeAppendUint64(b, uint64(d.nl)>>3|uint64(d.nh)<<29) return b, nil } @@ -477,17 +478,17 @@ func (h *sha384Hash) MarshalBinary() ([]byte, error) { func (h *sha384Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha512Ctx)(unsafe.Pointer(&h.ctx)) b = append(b, magic384...) - b = appendUint64(b, d.h[0]) - b = appendUint64(b, d.h[1]) - b = appendUint64(b, d.h[2]) - b = appendUint64(b, d.h[3]) - b = appendUint64(b, d.h[4]) - b = appendUint64(b, d.h[5]) - b = appendUint64(b, d.h[6]) - b = appendUint64(b, d.h[7]) + b = byteorder.BeAppendUint64(b, d.h[0]) + b = byteorder.BeAppendUint64(b, d.h[1]) + b = byteorder.BeAppendUint64(b, d.h[2]) + b = byteorder.BeAppendUint64(b, d.h[3]) + b = byteorder.BeAppendUint64(b, d.h[4]) + b = byteorder.BeAppendUint64(b, d.h[5]) + b = byteorder.BeAppendUint64(b, d.h[6]) + b = byteorder.BeAppendUint64(b, d.h[7]) b = append(b, d.x[:d.nx]...) b = append(b, make([]byte, len(d.x)-int(d.nx))...) - b = appendUint64(b, d.nl>>3|d.nh<<61) + b = byteorder.BeAppendUint64(b, d.nl>>3|d.nh<<61) return b, nil } @@ -498,17 +499,17 @@ func (h *sha512Hash) MarshalBinary() ([]byte, error) { func (h *sha512Hash) AppendBinary(b []byte) ([]byte, error) { d := (*sha512Ctx)(unsafe.Pointer(&h.ctx)) b = append(b, magic512...) - b = appendUint64(b, d.h[0]) - b = appendUint64(b, d.h[1]) - b = appendUint64(b, d.h[2]) - b = appendUint64(b, d.h[3]) - b = appendUint64(b, d.h[4]) - b = appendUint64(b, d.h[5]) - b = appendUint64(b, d.h[6]) - b = appendUint64(b, d.h[7]) + b = byteorder.BeAppendUint64(b, d.h[0]) + b = byteorder.BeAppendUint64(b, d.h[1]) + b = byteorder.BeAppendUint64(b, d.h[2]) + b = byteorder.BeAppendUint64(b, d.h[3]) + b = byteorder.BeAppendUint64(b, d.h[4]) + b = byteorder.BeAppendUint64(b, d.h[5]) + b = byteorder.BeAppendUint64(b, d.h[6]) + b = byteorder.BeAppendUint64(b, d.h[7]) b = append(b, d.x[:d.nx]...) b = append(b, make([]byte, len(d.x)-int(d.nx))...) - b = appendUint64(b, d.nl>>3|d.nh<<61) + b = byteorder.BeAppendUint64(b, d.nl>>3|d.nh<<61) return b, nil } @@ -568,47 +569,10 @@ func (h *sha512Hash) UnmarshalBinary(b []byte) error { return nil } -func appendUint64(b []byte, x uint64) []byte { - var a [8]byte - putUint64(a[:], x) - return append(b, a[:]...) -} - -func appendUint32(b []byte, x uint32) []byte { - var a [4]byte - putUint32(a[:], x) - return append(b, a[:]...) -} - func consumeUint64(b []byte) ([]byte, uint64) { - _ = b[7] - x := uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | - uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 - return b[8:], x + return b[8:], byteorder.BeUint64(b) } func consumeUint32(b []byte) ([]byte, uint32) { - _ = b[3] - x := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 - return b[4:], x -} - -func putUint64(x []byte, s uint64) { - _ = x[7] - x[0] = byte(s >> 56) - x[1] = byte(s >> 48) - x[2] = byte(s >> 40) - x[3] = byte(s >> 32) - x[4] = byte(s >> 24) - x[5] = byte(s >> 16) - x[6] = byte(s >> 8) - x[7] = byte(s) -} - -func putUint32(x []byte, s uint32) { - _ = x[3] - x[0] = byte(s >> 24) - x[1] = byte(s >> 16) - x[2] = byte(s >> 8) - x[3] = byte(s) + return b[4:], byteorder.BeUint32(b) } From a7c7ec5995b3901145f847c01f3e100b2b7e3421 Mon Sep 17 00:00:00 2001 From: aimuz Date: Mon, 5 Aug 2024 03:14:45 +0000 Subject: [PATCH 183/866] maps: add examples for All, Keys, Values, Insert, and Collect functions Change-Id: I4ee61bea9997b822aa1ec2cc3d01b4db5f101e4c GitHub-Last-Rev: d88282a92ec86721356696108898e06924ec89c9 GitHub-Pull-Request: golang/go#68696 Reviewed-on: https://go-review.googlesource.com/c/go/+/602315 Auto-Submit: Ian Lance Taylor Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- src/maps/example_test.go | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/maps/example_test.go b/src/maps/example_test.go index 3d6b7d1ba09b6d..c1000d4d9d7e6c 100644 --- a/src/maps/example_test.go +++ b/src/maps/example_test.go @@ -7,6 +7,7 @@ package maps_test import ( "fmt" "maps" + "slices" "strings" ) @@ -133,3 +134,60 @@ func ExampleEqualFunc() { // Output: // true } + +func ExampleAll() { + m1 := map[string]int{ + "one": 1, + "two": 2, + } + m2 := map[string]int{ + "one": 10, + } + maps.Insert(m2, maps.All(m1)) + fmt.Println("m2 is:", m2) + // Output: + // m2 is: map[one:1 two:2] +} + +func ExampleKeys() { + m1 := map[int]string{ + 1: "one", + 10: "Ten", + 1000: "THOUSAND", + } + keys := slices.Sorted(maps.Keys(m1)) + fmt.Println(keys) + // Output: + // [1 10 1000] +} + +func ExampleValues() { + m1 := map[int]string{ + 1: "one", + 10: "Ten", + 1000: "THOUSAND", + } + keys := slices.Sorted(maps.Values(m1)) + fmt.Println(keys) + // Output: + // [THOUSAND Ten one] +} + +func ExampleInsert() { + m1 := map[int]string{ + 1000: "THOUSAND", + } + s1 := []string{"zero", "one", "two", "three"} + maps.Insert(m1, slices.All(s1)) + fmt.Println("m1 is:", m1) + // Output: + // m1 is: map[0:zero 1:one 2:two 3:three 1000:THOUSAND] +} + +func ExampleCollect() { + s1 := []string{"zero", "one", "two", "three"} + m1 := maps.Collect(slices.All(s1)) + fmt.Println("m1 is:", m1) + // Output: + // m1 is: map[0:zero 1:one 2:two 3:three] +} From 03e5d83ca7323e354dfff6ba50720302ed835b7c Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Mon, 5 Aug 2024 13:40:18 -0400 Subject: [PATCH 184/866] cmd/internal/obj: minor refactor of wasmimport code This CL does some minor refactoring of the code handling wasmimport. - Put the WasmImport aux reading and writing code together for symmetry. - Define WasmFuncType, embedded in WasmImport. WasmFuncType could also be used (later) for wasmexport. - Move code generation code to a separate function. The containing function is already pretty large. - Simplify linker code a little bit. The loader convention is to return the 0 Sym for nonexistent symbol, instead of a separate boolean. No change in generated code. Passes toolstash -cmp (GOARCH=wasm GOOS=wasip1 go build -toolexec "toolstash -cmp" -a std cmd). Change-Id: Idc2514f84a08621333841ae4034b81130e0ce411 Reviewed-on: https://go-review.googlesource.com/c/go/+/603135 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/cmd/internal/obj/link.go | 114 ++++++++++--- src/cmd/internal/obj/objfile.go | 13 +- src/cmd/internal/obj/sym.go | 5 +- src/cmd/internal/obj/wasm/wasmobj.go | 216 +++++++++++++------------ src/cmd/link/internal/loader/loader.go | 14 +- src/cmd/link/internal/wasm/asm.go | 54 +------ 6 files changed, 222 insertions(+), 194 deletions(-) diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index 647a459d595573..27626d9deba149 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -32,6 +32,7 @@ package obj import ( "bufio" + "bytes" "cmd/internal/dwarf" "cmd/internal/goobj" "cmd/internal/objabi" @@ -496,9 +497,9 @@ type FuncInfo struct { WrapInfo *LSym // for wrapper, info of wrapped function JumpTables []JumpTable - FuncInfoSym *LSym - WasmImportSym *LSym - WasmImport *WasmImport + FuncInfoSym *LSym + + WasmImport *WasmImport sehUnwindInfoSym *LSym } @@ -609,45 +610,118 @@ type WasmImport struct { // Name holds the WASM imported function name specified by the // //go:wasmimport directive. Name string + + WasmFuncType // type of the imported function + + // aux symbol to pass metadata to the linker, serialization of + // the fields above. + AuxSym *LSym +} + +func (wi *WasmImport) CreateAuxSym() { + var b bytes.Buffer + wi.Write(&b) + p := b.Bytes() + wi.AuxSym = &LSym{ + Type: objabi.SDATA, // doesn't really matter + P: append([]byte(nil), p...), + Size: int64(len(p)), + } +} + +func (wi *WasmImport) Write(w *bytes.Buffer) { + var b [8]byte + writeUint32 := func(x uint32) { + binary.LittleEndian.PutUint32(b[:], x) + w.Write(b[:4]) + } + writeString := func(s string) { + writeUint32(uint32(len(s))) + w.WriteString(s) + } + writeString(wi.Module) + writeString(wi.Name) + wi.WasmFuncType.Write(w) +} + +func (wi *WasmImport) Read(b []byte) { + readUint32 := func() uint32 { + x := binary.LittleEndian.Uint32(b) + b = b[4:] + return x + } + readString := func() string { + n := readUint32() + s := string(b[:n]) + b = b[n:] + return s + } + wi.Module = readString() + wi.Name = readString() + wi.WasmFuncType.Read(b) +} + +// WasmFuncType represents a WebAssembly (WASM) function type with +// parameters and results translated into WASM types based on the Go function +// declaration. +type WasmFuncType struct { // Params holds the imported function parameter fields. Params []WasmField // Results holds the imported function result fields. Results []WasmField } -func (wi *WasmImport) CreateSym(ctxt *Link) *LSym { - var sym LSym - +func (ft *WasmFuncType) Write(w *bytes.Buffer) { var b [8]byte writeByte := func(x byte) { - sym.WriteBytes(ctxt, sym.Size, []byte{x}) + w.WriteByte(x) } writeUint32 := func(x uint32) { binary.LittleEndian.PutUint32(b[:], x) - sym.WriteBytes(ctxt, sym.Size, b[:4]) + w.Write(b[:4]) } writeInt64 := func(x int64) { binary.LittleEndian.PutUint64(b[:], uint64(x)) - sym.WriteBytes(ctxt, sym.Size, b[:]) - } - writeString := func(s string) { - writeUint32(uint32(len(s))) - sym.WriteString(ctxt, sym.Size, len(s), s) + w.Write(b[:]) } - writeString(wi.Module) - writeString(wi.Name) - writeUint32(uint32(len(wi.Params))) - for _, f := range wi.Params { + writeUint32(uint32(len(ft.Params))) + for _, f := range ft.Params { writeByte(byte(f.Type)) writeInt64(f.Offset) } - writeUint32(uint32(len(wi.Results))) - for _, f := range wi.Results { + writeUint32(uint32(len(ft.Results))) + for _, f := range ft.Results { writeByte(byte(f.Type)) writeInt64(f.Offset) } +} - return &sym +func (ft *WasmFuncType) Read(b []byte) { + readByte := func() byte { + x := b[0] + b = b[1:] + return x + } + readUint32 := func() uint32 { + x := binary.LittleEndian.Uint32(b) + b = b[4:] + return x + } + readInt64 := func() int64 { + x := binary.LittleEndian.Uint64(b) + b = b[8:] + return int64(x) + } + ft.Params = make([]WasmField, readUint32()) + for i := range ft.Params { + ft.Params[i].Type = WasmFieldType(readByte()) + ft.Params[i].Offset = int64(readInt64()) + } + ft.Results = make([]WasmField, readUint32()) + for i := range ft.Results { + ft.Results[i].Type = WasmFieldType(readByte()) + ft.Results[i].Offset = int64(readInt64()) + } } type WasmField struct { diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index 2ed98cb5778a72..cbdc5a3486e1dd 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -621,11 +621,11 @@ func (w *writer) Aux(s *LSym) { for _, pcSym := range fn.Pcln.Pcdata { w.aux1(goobj.AuxPcdata, pcSym) } - if fn.WasmImportSym != nil { - if fn.WasmImportSym.Size == 0 { + if fn.WasmImport != nil { + if fn.WasmImport.AuxSym.Size == 0 { panic("wasmimport aux sym must have non-zero size") } - w.aux1(goobj.AuxWasmImport, fn.WasmImportSym) + w.aux1(goobj.AuxWasmImport, fn.WasmImport.AuxSym) } } else if v := s.VarInfo(); v != nil { if v.dwarfInfoSym != nil && v.dwarfInfoSym.Size != 0 { @@ -732,7 +732,7 @@ func nAuxSym(s *LSym) int { } n += len(fn.Pcln.Pcdata) if fn.WasmImport != nil { - if fn.WasmImportSym == nil || fn.WasmImportSym.Size == 0 { + if fn.WasmImport.AuxSym == nil || fn.WasmImport.AuxSym.Size == 0 { panic("wasmimport aux sym must exist and have non-zero size") } n++ @@ -797,7 +797,10 @@ func genFuncInfoSyms(ctxt *Link) { fn.FuncInfoSym = isym b.Reset() - auxsyms := []*LSym{fn.dwarfRangesSym, fn.dwarfLocSym, fn.dwarfDebugLinesSym, fn.dwarfInfoSym, fn.WasmImportSym} + auxsyms := []*LSym{fn.dwarfRangesSym, fn.dwarfLocSym, fn.dwarfDebugLinesSym, fn.dwarfInfoSym} + if wi := fn.WasmImport; wi != nil { + auxsyms = append(auxsyms, wi.AuxSym) + } for _, s := range auxsyms { if s == nil || s.Size == 0 { continue diff --git a/src/cmd/internal/obj/sym.go b/src/cmd/internal/obj/sym.go index 22153050f26d99..d2e61832ba0b14 100644 --- a/src/cmd/internal/obj/sym.go +++ b/src/cmd/internal/obj/sym.go @@ -458,7 +458,10 @@ func (ctxt *Link) traverseFuncAux(flag traverseFlag, fsym *LSym, fn func(parent } } - auxsyms := []*LSym{fninfo.dwarfRangesSym, fninfo.dwarfLocSym, fninfo.dwarfDebugLinesSym, fninfo.dwarfInfoSym, fninfo.WasmImportSym, fninfo.sehUnwindInfoSym} + auxsyms := []*LSym{fninfo.dwarfRangesSym, fninfo.dwarfLocSym, fninfo.dwarfDebugLinesSym, fninfo.dwarfInfoSym, fninfo.sehUnwindInfoSym} + if wi := fninfo.WasmImport; wi != nil { + auxsyms = append(auxsyms, wi.AuxSym) + } for _, s := range auxsyms { if s == nil || s.Size == 0 { continue diff --git a/src/cmd/internal/obj/wasm/wasmobj.go b/src/cmd/internal/obj/wasm/wasmobj.go index 23f51f8b4238e3..dcbf35e8865afa 100644 --- a/src/cmd/internal/obj/wasm/wasmobj.go +++ b/src/cmd/internal/obj/wasm/wasmobj.go @@ -188,111 +188,8 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { // If the function exits just to call out to a wasmimport, then // generate the code to translate from our internal Go-stack // based call convention to the native webassembly call convention. - if wi := s.Func().WasmImport; wi != nil { - s.Func().WasmImportSym = wi.CreateSym(ctxt) - p := s.Func().Text - if p.Link != nil { - panic("wrapper functions for WASM imports should not have a body") - } - to := obj.Addr{ - Type: obj.TYPE_MEM, - Name: obj.NAME_EXTERN, - Sym: s, - } - - // If the module that the import is for is our magic "gojs" module, then this - // indicates that the called function understands the Go stack-based call convention - // so we just pass the stack pointer to it, knowing it will read the params directly - // off the stack and push the results into memory based on the stack pointer. - if wi.Module == GojsModule { - // The called function has a signature of 'func(sp int)'. It has access to the memory - // value somewhere to be able to address the memory based on the "sp" value. - - p = appendp(p, AGet, regAddr(REG_SP)) - p = appendp(p, ACall, to) - - p.Mark = WasmImport - } else { - if len(wi.Results) > 1 { - // TODO(evanphx) implement support for the multi-value proposal: - // https://github.com/WebAssembly/multi-value/blob/master/proposals/multi-value/Overview.md - panic("invalid results type") // impossible until multi-value proposal has landed - } - if len(wi.Results) == 1 { - // If we have a result (rather than returning nothing at all), then - // we'll write the result to the Go stack relative to the current stack pointer. - // We cache the current stack pointer value on the wasm stack here and then use - // it after the Call instruction to store the result. - p = appendp(p, AGet, regAddr(REG_SP)) - } - for _, f := range wi.Params { - // Each load instructions will consume the value of sp on the stack, so - // we need to read sp for each param. WASM appears to not have a stack dup instruction - // (a strange omission for a stack-based VM), if it did, we'd be using the dup here. - p = appendp(p, AGet, regAddr(REG_SP)) - - // Offset is the location of the param on the Go stack (ie relative to sp). - // Because of our call convention, the parameters are located an additional 8 bytes - // from sp because we store the return address as an int64 at the bottom of the stack. - // Ie the stack looks like [return_addr, param3, param2, param1, etc] - - // Ergo, we add 8 to the true byte offset of the param to skip the return address. - loadOffset := f.Offset + 8 - - // We're reading the value from the Go stack onto the WASM stack and leaving it there - // for CALL to pick them up. - switch f.Type { - case obj.WasmI32: - p = appendp(p, AI32Load, constAddr(loadOffset)) - case obj.WasmI64: - p = appendp(p, AI64Load, constAddr(loadOffset)) - case obj.WasmF32: - p = appendp(p, AF32Load, constAddr(loadOffset)) - case obj.WasmF64: - p = appendp(p, AF64Load, constAddr(loadOffset)) - case obj.WasmPtr: - p = appendp(p, AI64Load, constAddr(loadOffset)) - p = appendp(p, AI32WrapI64) - default: - panic("bad param type") - } - } - - // The call instruction is marked as being for a wasm import so that a later phase - // will generate relocation information that allows us to patch this with then - // offset of the imported function in the wasm imports. - p = appendp(p, ACall, to) - p.Mark = WasmImport - - if len(wi.Results) == 1 { - f := wi.Results[0] - - // Much like with the params, we need to adjust the offset we store the result value - // to by 8 bytes to account for the return address on the Go stack. - storeOffset := f.Offset + 8 - - // This code is paired the code above that reads the stack pointer onto the wasm - // stack. We've done this so we have a consistent view of the sp value as it might - // be manipulated by the call and we want to ignore that manipulation here. - switch f.Type { - case obj.WasmI32: - p = appendp(p, AI32Store, constAddr(storeOffset)) - case obj.WasmI64: - p = appendp(p, AI64Store, constAddr(storeOffset)) - case obj.WasmF32: - p = appendp(p, AF32Store, constAddr(storeOffset)) - case obj.WasmF64: - p = appendp(p, AF64Store, constAddr(storeOffset)) - case obj.WasmPtr: - p = appendp(p, AI64ExtendI32U) - p = appendp(p, AI64Store, constAddr(storeOffset)) - default: - panic("bad result type") - } - } - } - - p = appendp(p, obj.ARET) + if s.Func().WasmImport != nil { + genWasmImportWrapper(s, appendp) // It should be 0 already, but we'll set it to 0 anyway just to be sure // that the code below which adds frame expansion code to the function body @@ -894,6 +791,115 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { } } +// Generate function body for wasmimport wrapper function. +func genWasmImportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args ...obj.Addr) *obj.Prog) { + wi := s.Func().WasmImport + wi.CreateAuxSym() + p := s.Func().Text + if p.Link != nil { + panic("wrapper functions for WASM imports should not have a body") + } + to := obj.Addr{ + Type: obj.TYPE_MEM, + Name: obj.NAME_EXTERN, + Sym: s, + } + + // If the module that the import is for is our magic "gojs" module, then this + // indicates that the called function understands the Go stack-based call convention + // so we just pass the stack pointer to it, knowing it will read the params directly + // off the stack and push the results into memory based on the stack pointer. + if wi.Module == GojsModule { + // The called function has a signature of 'func(sp int)'. It has access to the memory + // value somewhere to be able to address the memory based on the "sp" value. + + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, ACall, to) + + p.Mark = WasmImport + } else { + if len(wi.Results) > 1 { + // TODO(evanphx) implement support for the multi-value proposal: + // https://github.com/WebAssembly/multi-value/blob/master/proposals/multi-value/Overview.md + panic("invalid results type") // impossible until multi-value proposal has landed + } + if len(wi.Results) == 1 { + // If we have a result (rather than returning nothing at all), then + // we'll write the result to the Go stack relative to the current stack pointer. + // We cache the current stack pointer value on the wasm stack here and then use + // it after the Call instruction to store the result. + p = appendp(p, AGet, regAddr(REG_SP)) + } + for _, f := range wi.Params { + // Each load instructions will consume the value of sp on the stack, so + // we need to read sp for each param. WASM appears to not have a stack dup instruction + // (a strange omission for a stack-based VM), if it did, we'd be using the dup here. + p = appendp(p, AGet, regAddr(REG_SP)) + + // Offset is the location of the param on the Go stack (ie relative to sp). + // Because of our call convention, the parameters are located an additional 8 bytes + // from sp because we store the return address as an int64 at the bottom of the stack. + // Ie the stack looks like [return_addr, param3, param2, param1, etc] + + // Ergo, we add 8 to the true byte offset of the param to skip the return address. + loadOffset := f.Offset + 8 + + // We're reading the value from the Go stack onto the WASM stack and leaving it there + // for CALL to pick them up. + switch f.Type { + case obj.WasmI32: + p = appendp(p, AI32Load, constAddr(loadOffset)) + case obj.WasmI64: + p = appendp(p, AI64Load, constAddr(loadOffset)) + case obj.WasmF32: + p = appendp(p, AF32Load, constAddr(loadOffset)) + case obj.WasmF64: + p = appendp(p, AF64Load, constAddr(loadOffset)) + case obj.WasmPtr: + p = appendp(p, AI64Load, constAddr(loadOffset)) + p = appendp(p, AI32WrapI64) + default: + panic("bad param type") + } + } + + // The call instruction is marked as being for a wasm import so that a later phase + // will generate relocation information that allows us to patch this with then + // offset of the imported function in the wasm imports. + p = appendp(p, ACall, to) + p.Mark = WasmImport + + if len(wi.Results) == 1 { + f := wi.Results[0] + + // Much like with the params, we need to adjust the offset we store the result value + // to by 8 bytes to account for the return address on the Go stack. + storeOffset := f.Offset + 8 + + // This code is paired the code above that reads the stack pointer onto the wasm + // stack. We've done this so we have a consistent view of the sp value as it might + // be manipulated by the call and we want to ignore that manipulation here. + switch f.Type { + case obj.WasmI32: + p = appendp(p, AI32Store, constAddr(storeOffset)) + case obj.WasmI64: + p = appendp(p, AI64Store, constAddr(storeOffset)) + case obj.WasmF32: + p = appendp(p, AF32Store, constAddr(storeOffset)) + case obj.WasmF64: + p = appendp(p, AF64Store, constAddr(storeOffset)) + case obj.WasmPtr: + p = appendp(p, AI64ExtendI32U) + p = appendp(p, AI64Store, constAddr(storeOffset)) + default: + panic("bad result type") + } + } + } + + p = appendp(p, obj.ARET) +} + func constAddr(value int64) obj.Addr { return obj.Addr{Type: obj.TYPE_CONST, Offset: value} } diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index f448a3ee7cb241..98bff775fb8448 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -1620,21 +1620,11 @@ func (l *Loader) Aux(i Sym, j int) Aux { // contains the information necessary for the linker to add a WebAssembly // import statement. // (https://webassembly.github.io/spec/core/syntax/modules.html#imports) -func (l *Loader) WasmImportSym(fnSymIdx Sym) (Sym, bool) { +func (l *Loader) WasmImportSym(fnSymIdx Sym) Sym { if l.SymType(fnSymIdx) != sym.STEXT { log.Fatalf("error: non-function sym %d/%s t=%s passed to WasmImportSym", fnSymIdx, l.SymName(fnSymIdx), l.SymType(fnSymIdx).String()) } - r, li := l.toLocal(fnSymIdx) - auxs := r.Auxs(li) - for i := range auxs { - a := &auxs[i] - switch a.Type() { - case goobj.AuxWasmImport: - return l.resolve(r, a.Sym()), true - } - } - - return 0, false + return l.aux1(fnSymIdx, goobj.AuxWasmImport) } // SEHUnwindSym returns the auxiliary SEH unwind symbol associated with diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index 2f511b97c72f3f..09c54c13922610 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -12,7 +12,6 @@ import ( "cmd/link/internal/ld" "cmd/link/internal/loader" "cmd/link/internal/sym" - "encoding/binary" "fmt" "internal/abi" "internal/buildcfg" @@ -61,55 +60,8 @@ type wasmFuncType struct { } func readWasmImport(ldr *loader.Loader, s loader.Sym) obj.WasmImport { - reportError := func(err error) { panic(fmt.Sprintf("failed to read WASM import in sym %v: %v", s, err)) } - - data := ldr.Data(s) - - readUint32 := func() (v uint32) { - v = binary.LittleEndian.Uint32(data) - data = data[4:] - return - } - - readUint64 := func() (v uint64) { - v = binary.LittleEndian.Uint64(data) - data = data[8:] - return - } - - readByte := func() byte { - if len(data) == 0 { - reportError(io.EOF) - } - - b := data[0] - data = data[1:] - return b - } - - readString := func() string { - n := readUint32() - - s := string(data[:n]) - - data = data[n:] - - return s - } - var wi obj.WasmImport - wi.Module = readString() - wi.Name = readString() - wi.Params = make([]obj.WasmField, readUint32()) - for i := range wi.Params { - wi.Params[i].Type = obj.WasmFieldType(readByte()) - wi.Params[i].Offset = int64(readUint64()) - } - wi.Results = make([]obj.WasmField, readUint32()) - for i := range wi.Results { - wi.Results[i].Type = obj.WasmFieldType(readByte()) - wi.Results[i].Offset = int64(readUint64()) - } + wi.Read(ldr.Data(s)) return wi } @@ -207,8 +159,8 @@ func asmb2(ctxt *ld.Link, ldr *loader.Loader) { for ri := 0; ri < relocs.Count(); ri++ { r := relocs.At(ri) if r.Type() == objabi.R_WASMIMPORT { - if lsym, ok := ldr.WasmImportSym(fn); ok { - wi := readWasmImport(ldr, lsym) + if wsym := ldr.WasmImportSym(fn); wsym != 0 { + wi := readWasmImport(ldr, wsym) hostImportMap[fn] = int64(len(hostImports)) hostImports = append(hostImports, &wasmFunc{ Module: wi.Module, From abc3d2c1191c3b96565ebd10012712ac403c2a9f Mon Sep 17 00:00:00 2001 From: limeidan Date: Wed, 10 Jan 2024 10:49:52 +0800 Subject: [PATCH 185/866] cmd/internal/objabi, cmd/link/internal: add new relocations used in internal linking Change-Id: I1b7c258f0ea3b847a92ccd6644b653e11e7a5ef0 Reviewed-on: https://go-review.googlesource.com/c/go/+/555115 LUCI-TryBot-Result: Go LUCI Reviewed-by: abner chenc Reviewed-by: Qiqi Huang Reviewed-by: sophie zhao Reviewed-by: Michael Knyszek Reviewed-by: David Chase --- src/cmd/internal/objabi/reloctype.go | 11 ++++++++++ src/cmd/internal/objabi/reloctype_string.go | 24 ++++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/cmd/internal/objabi/reloctype.go b/src/cmd/internal/objabi/reloctype.go index 8b9927d6eb3d02..b7f0124c2a6bf7 100644 --- a/src/cmd/internal/objabi/reloctype.go +++ b/src/cmd/internal/objabi/reloctype.go @@ -348,6 +348,17 @@ const ( R_LOONG64_GOT_HI R_LOONG64_GOT_LO + // 64-bit in-place addition. + R_LOONG64_ADD64 + // 64-bit in-place subtraction. + R_LOONG64_SUB64 + + // R_JMP16LOONG64 resolves to 18-bit PC-relative target address of a JMP instructions. + R_JMP16LOONG64 + + // R_JMP21LOONG64 resolves to 23-bit PC-relative target address of a JMP instructions. + R_JMP21LOONG64 + // R_JMPLOONG64 resolves to non-PC-relative target address of a JMP instruction, // by encoding the address into the instruction. R_JMPLOONG64 diff --git a/src/cmd/internal/objabi/reloctype_string.go b/src/cmd/internal/objabi/reloctype_string.go index 6d8cbb5dd2a89a..fd0e401db1e277 100644 --- a/src/cmd/internal/objabi/reloctype_string.go +++ b/src/cmd/internal/objabi/reloctype_string.go @@ -91,19 +91,23 @@ func _() { _ = x[R_LOONG64_TLS_IE_LO-81] _ = x[R_LOONG64_GOT_HI-82] _ = x[R_LOONG64_GOT_LO-83] - _ = x[R_JMPLOONG64-84] - _ = x[R_ADDRMIPSU-85] - _ = x[R_ADDRMIPSTLS-86] - _ = x[R_ADDRCUOFF-87] - _ = x[R_WASMIMPORT-88] - _ = x[R_XCOFFREF-89] - _ = x[R_PEIMAGEOFF-90] - _ = x[R_INITORDER-91] + _ = x[R_LOONG64_ADD64-84] + _ = x[R_LOONG64_SUB64-85] + _ = x[R_JMP16LOONG64-86] + _ = x[R_JMP21LOONG64-87] + _ = x[R_JMPLOONG64-88] + _ = x[R_ADDRMIPSU-89] + _ = x[R_ADDRMIPSTLS-90] + _ = x[R_ADDRCUOFF-91] + _ = x[R_WASMIMPORT-92] + _ = x[R_XCOFFREF-93] + _ = x[R_PEIMAGEOFF-94] + _ = x[R_INITORDER-95] } -const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_LOONG64_ADDR_HIR_LOONG64_ADDR_LOR_LOONG64_TLS_LE_HIR_LOONG64_TLS_LE_LOR_CALLLOONG64R_LOONG64_TLS_IE_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER" +const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_LOONG64_ADDR_HIR_LOONG64_ADDR_LOR_LOONG64_TLS_LE_HIR_LOONG64_TLS_LE_LOR_CALLLOONG64R_LOONG64_TLS_IE_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_LOONG64_ADD64R_LOONG64_SUB64R_JMP16LOONG64R_JMP21LOONG64R_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER" -var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 997, 1014, 1033, 1052, 1065, 1084, 1103, 1119, 1135, 1147, 1158, 1171, 1182, 1194, 1204, 1216, 1227} +var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 997, 1014, 1033, 1052, 1065, 1084, 1103, 1119, 1135, 1150, 1165, 1179, 1193, 1205, 1216, 1229, 1240, 1252, 1262, 1274, 1285} func (i RelocType) String() string { i -= 1 From b62342216d632d972f1438b4f542f89c4b4a331d Mon Sep 17 00:00:00 2001 From: Tim King Date: Tue, 6 Aug 2024 10:06:39 -0700 Subject: [PATCH 186/866] os: remove non-constant format string in t.Errorf call Fixes #68744 Change-Id: I12db785fc21c18db69d57cf91e2190b4a3df2484 Reviewed-on: https://go-review.googlesource.com/c/go/+/603515 Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI --- src/os/os_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/os/os_test.go b/src/os/os_test.go index 46c4f138c3819c..e42179538077c4 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -1533,10 +1533,10 @@ func testChtimes(t *testing.T, name string) { t.Log(errormsg) t.Log("Known NetBSD issue (atime not changed on fs mounted with noatime); ignoring.") } else { - t.Errorf(errormsg) + t.Error(errormsg) } default: - t.Errorf(errormsg) + t.Error(errormsg) } } From 44ed517c42a52e0c5831383b59eae5b38428656d Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Tue, 6 Aug 2024 12:42:34 -0400 Subject: [PATCH 187/866] cmd/go/internal/load: make check for path in import error more robust When producing an ImportPathError from ImportErrorf, we check to see whether the error string contains the path for the error. The issue is that we were checking for the exact path string when sometimes the string is quoted when the error is constructed, and the escaping in the quote may not match the path string. Check for both the path string, and the quoted path string. Fixes #68737 Change-Id: I01bf4e495056e929570bc11bc1f2000ce6d2802b Reviewed-on: https://go-review.googlesource.com/c/go/+/603475 LUCI-TryBot-Result: Go LUCI Reviewed-by: Sam Thanawalla --- src/cmd/go/internal/load/pkg.go | 2 +- src/cmd/go/testdata/script/list_panic_issue68737.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/script/list_panic_issue68737.txt diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index 238fb6efd222e2..33bc3e0c48778c 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -539,7 +539,7 @@ type importError struct { func ImportErrorf(path, format string, args ...any) ImportPathError { err := &importError{importPath: path, err: fmt.Errorf(format, args...)} - if errStr := err.Error(); !strings.Contains(errStr, path) { + if errStr := err.Error(); !strings.Contains(errStr, path) && !strings.Contains(errStr, strconv.Quote(path)) { panic(fmt.Sprintf("path %q not in error %q", path, errStr)) } return err diff --git a/src/cmd/go/testdata/script/list_panic_issue68737.txt b/src/cmd/go/testdata/script/list_panic_issue68737.txt new file mode 100644 index 00000000000000..db059c8fedc464 --- /dev/null +++ b/src/cmd/go/testdata/script/list_panic_issue68737.txt @@ -0,0 +1,7 @@ +# Issue #68737: Don't panic if the import path string doesn't appear +# in the import error. The string may not appear because it may be +# escaped when quoted as part of the error message. + +! go run '' # Quote contains 0x01 byte +! stderr panic +stderr 'malformed import path "\\x01": invalid char ''\\x01''' From 5bd442aba31c1720bb333dafbb65cf977091d292 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 1 Aug 2024 11:16:27 -0700 Subject: [PATCH 188/866] go/types, types2: avoid spurious "undefined" errors" for invalid identifiers The syntax parser complains about invalid identifiers. Don't report a typechecker error when such an identifier cannot be found in the current scope. For now add a local test for types2 only because the go/parser behaves differently than the syntax parser which leads to slightly different error positions. Fixes #68183. Change-Id: Idbfe62fafcd704886069182744ec5e6b37ffc4e1 Reviewed-on: https://go-review.googlesource.com/c/go/+/602476 Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Tim King Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/types2/call.go | 6 ++-- src/cmd/compile/internal/types2/predicates.go | 12 ++++++++ .../types2/testdata/local/issue68183.go | 29 +++++++++++++++++++ src/cmd/compile/internal/types2/typexpr.go | 2 +- src/go/types/call.go | 6 ++-- src/go/types/predicates.go | 12 ++++++++ src/go/types/typexpr.go | 2 +- 7 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/cmd/compile/internal/types2/testdata/local/issue68183.go diff --git a/src/cmd/compile/internal/types2/call.go b/src/cmd/compile/internal/types2/call.go index 7df4e8250e4dcd..33bea5e9ffdf89 100644 --- a/src/cmd/compile/internal/types2/call.go +++ b/src/cmd/compile/internal/types2/call.go @@ -706,14 +706,16 @@ func (check *Checker) selector(x *operand, e *syntax.SelectorExpr, def *TypeName } } if exp == nil { - check.errorf(e.Sel, UndeclaredImportedName, "undefined: %s", syntax.Expr(e)) // cast to syntax.Expr to silence vet + if isValidName(sel) { + check.errorf(e.Sel, UndeclaredImportedName, "undefined: %s", syntax.Expr(e)) // cast to syntax.Expr to silence vet + } goto Error } check.objDecl(exp, nil) } else { exp = pkg.scope.Lookup(sel) if exp == nil { - if !pkg.fake { + if !pkg.fake && isValidName(sel) { check.errorf(e.Sel, UndeclaredImportedName, "undefined: %s", syntax.Expr(e)) } goto Error diff --git a/src/cmd/compile/internal/types2/predicates.go b/src/cmd/compile/internal/types2/predicates.go index 155a70fb191284..d40939e2b5d0c0 100644 --- a/src/cmd/compile/internal/types2/predicates.go +++ b/src/cmd/compile/internal/types2/predicates.go @@ -6,6 +6,8 @@ package types2 +import "unicode" + // isValid reports whether t is a valid type. func isValid(t Type) bool { return Unalias(t) != Typ[Invalid] } @@ -567,3 +569,13 @@ func clone[P *T, T any](p P) P { c := *p return &c } + +// isValidName reports whether s is a valid Go identifier. +func isValidName(s string) bool { + for i, ch := range s { + if !(unicode.IsLetter(ch) || ch == '_' || i > 0 && unicode.IsDigit(ch)) { + return false + } + } + return true +} diff --git a/src/cmd/compile/internal/types2/testdata/local/issue68183.go b/src/cmd/compile/internal/types2/testdata/local/issue68183.go new file mode 100644 index 00000000000000..fcf16696a03d0c --- /dev/null +++ b/src/cmd/compile/internal/types2/testdata/local/issue68183.go @@ -0,0 +1,29 @@ +// Copyright 2024 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. + +// Test that invalid identifiers reported by the parser +// don't lead to additional errors during typechecking. + +package p + +import "fmt" + +var ( + ☹x /* ERROR "invalid character" */ int + _ = ☹x // ERROR "invalid character" + _ = fmt.☹x // ERROR "invalid character" + _ = ☹fmt /* ERROR "invalid character" */ .Println + _ = _世界 // ERROR "undefined: _世界" + _ = ☹_世界 // ERROR "invalid character" +) + +func ☹m /* ERROR "invalid character" */ () {} + +type T struct{} +func (T) ☹m /* ERROR "invalid character" */ () {} + +func _() { + var x T + x.☹m /* ERROR "invalid character" */ () +} diff --git a/src/cmd/compile/internal/types2/typexpr.go b/src/cmd/compile/internal/types2/typexpr.go index 3966a21693bc14..b917a86c10e994 100644 --- a/src/cmd/compile/internal/types2/typexpr.go +++ b/src/cmd/compile/internal/types2/typexpr.go @@ -29,7 +29,7 @@ func (check *Checker) ident(x *operand, e *syntax.Name, def *TypeName, wantType case nil: if e.Value == "_" { check.error(e, InvalidBlank, "cannot use _ as value or type") - } else { + } else if isValidName(e.Value) { check.errorf(e, UndeclaredName, "undefined: %s", e.Value) } return diff --git a/src/go/types/call.go b/src/go/types/call.go index 8f02ffc39729a3..d1324d425ae82a 100644 --- a/src/go/types/call.go +++ b/src/go/types/call.go @@ -709,14 +709,16 @@ func (check *Checker) selector(x *operand, e *ast.SelectorExpr, def *TypeName, w } } if exp == nil { - check.errorf(e.Sel, UndeclaredImportedName, "undefined: %s", ast.Expr(e)) // cast to ast.Expr to silence vet + if isValidName(sel) { + check.errorf(e.Sel, UndeclaredImportedName, "undefined: %s", ast.Expr(e)) // cast to ast.Expr to silence vet + } goto Error } check.objDecl(exp, nil) } else { exp = pkg.scope.Lookup(sel) if exp == nil { - if !pkg.fake { + if !pkg.fake && isValidName(sel) { check.errorf(e.Sel, UndeclaredImportedName, "undefined: %s", ast.Expr(e)) } goto Error diff --git a/src/go/types/predicates.go b/src/go/types/predicates.go index 4bfbdccc6f3b46..5261aaf1585cec 100644 --- a/src/go/types/predicates.go +++ b/src/go/types/predicates.go @@ -9,6 +9,8 @@ package types +import "unicode" + // isValid reports whether t is a valid type. func isValid(t Type) bool { return Unalias(t) != Typ[Invalid] } @@ -570,3 +572,13 @@ func clone[P *T, T any](p P) P { c := *p return &c } + +// isValidName reports whether s is a valid Go identifier. +func isValidName(s string) bool { + for i, ch := range s { + if !(unicode.IsLetter(ch) || ch == '_' || i > 0 && unicode.IsDigit(ch)) { + return false + } + } + return true +} diff --git a/src/go/types/typexpr.go b/src/go/types/typexpr.go index 62d75885a63e4a..926013b16cd482 100644 --- a/src/go/types/typexpr.go +++ b/src/go/types/typexpr.go @@ -30,7 +30,7 @@ func (check *Checker) ident(x *operand, e *ast.Ident, def *TypeName, wantType bo case nil: if e.Name == "_" { check.error(e, InvalidBlank, "cannot use _ as value or type") - } else { + } else if isValidName(e.Name) { check.errorf(e, UndeclaredName, "undefined: %s", e.Name) } return From 36e5c84ffa8b64727b01f056b550c235636c123a Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Fri, 7 Jun 2024 09:36:53 +0800 Subject: [PATCH 189/866] runtime: add padding to Linux kernel structures sigcontext on loong64 On linux/loong64, the sc_extcontext member in the sigcontext structure is required to be 16-byte aligned [1], although sc_extcontext is not currently used anywhere, it still needs to be padded to the specified alignment. [1] https://github.com/torvalds/linux/blob/master/arch/loongarch/include/uapi/asm/sigcontext.h Change-Id: I98d30e921730314835c9469a6f28e186c9808e34 Reviewed-on: https://go-review.googlesource.com/c/go/+/591855 Reviewed-by: Qiqi Huang Reviewed-by: sophie zhao LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Reviewed-by: David Chase --- src/runtime/defs_linux_loong64.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/defs_linux_loong64.go b/src/runtime/defs_linux_loong64.go index 692d8c78e9a4d2..b983725160faf7 100644 --- a/src/runtime/defs_linux_loong64.go +++ b/src/runtime/defs_linux_loong64.go @@ -184,6 +184,7 @@ type sigcontext struct { sc_pc uint64 sc_regs [32]uint64 sc_flags uint32 + sc_pad0 [1]uint32 sc_extcontext [0]uint64 } From ff14e08cd3c4423ae6c243ef20a3b9b4c04335ed Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Wed, 10 Apr 2024 11:48:11 +0800 Subject: [PATCH 190/866] cmd/compile, math: improve implementation of math.{Max,Min} on loong64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make math.{Min,Max} intrinsics and implement math.{archMax,archMin} in hardware. goos: linux goarch: loong64 pkg: math cpu: Loongson-3A6000 @ 2500.00MHz │ old.bench │ new.bench │ │ sec/op │ sec/op vs base │ Max 7.606n ± 0% 3.087n ± 0% -59.41% (p=0.000 n=20) Min 7.205n ± 0% 2.904n ± 0% -59.69% (p=0.000 n=20) MinFloat 37.220n ± 0% 4.802n ± 0% -87.10% (p=0.000 n=20) MaxFloat 33.620n ± 0% 4.802n ± 0% -85.72% (p=0.000 n=20) geomean 16.18n 3.792n -76.57% goos: linux goarch: loong64 pkg: runtime cpu: Loongson-3A5000 @ 2500.00MHz │ old.bench │ new.bench │ │ sec/op │ sec/op vs base │ Max 10.010n ± 0% 7.196n ± 0% -28.11% (p=0.000 n=20) Min 8.806n ± 0% 7.155n ± 0% -18.75% (p=0.000 n=20) MinFloat 60.010n ± 0% 7.976n ± 0% -86.71% (p=0.000 n=20) MaxFloat 56.410n ± 0% 7.980n ± 0% -85.85% (p=0.000 n=20) geomean 23.37n 7.566n -67.63% Updates #59120. Change-Id: I6815d20bc304af3cbf5d6ca8fe0ca1c2ddebea2d Reviewed-on: https://go-review.googlesource.com/c/go/+/580283 Reviewed-by: Keith Randall Reviewed-by: Qiqi Huang LUCI-TryBot-Result: Go LUCI Reviewed-by: abner chenc Reviewed-by: Keith Randall Reviewed-by: David Chase --- src/cmd/compile/internal/loong64/ssa.go | 58 ++++++++++++++ .../compile/internal/ssa/_gen/LOONG64.rules | 3 + .../compile/internal/ssa/_gen/LOONG64Ops.go | 5 ++ src/cmd/compile/internal/ssa/opGen.go | 68 ++++++++++++++++ .../compile/internal/ssa/rewriteLOONG64.go | 12 +++ src/cmd/compile/internal/ssagen/ssa.go | 8 +- src/math/dim_asm.go | 2 +- src/math/dim_loong64.s | 77 +++++++++++++++++++ src/math/dim_noasm.go | 2 +- test/codegen/floats.go | 4 + 10 files changed, 233 insertions(+), 6 deletions(-) create mode 100644 src/math/dim_loong64.s diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index 7cdf5637f20142..10190654d7ba8b 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -184,6 +184,64 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.Reg = v.Args[0].Reg() p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg() + + case ssa.OpLOONG64FMINF, + ssa.OpLOONG64FMIND, + ssa.OpLOONG64FMAXF, + ssa.OpLOONG64FMAXD: + // ADDD Rarg0, Rarg1, Rout + // CMPEQD Rarg0, Rarg0, FCC0 + // bceqz FCC0, end + // CMPEQD Rarg1, Rarg1, FCC0 + // bceqz FCC0, end + // F(MIN|MAX)(F|D) + + r0 := v.Args[0].Reg() + r1 := v.Args[1].Reg() + out := v.Reg() + add, fcmp := loong64.AADDD, loong64.ACMPEQD + if v.Op == ssa.OpLOONG64FMINF || v.Op == ssa.OpLOONG64FMAXF { + add = loong64.AADDF + fcmp = loong64.ACMPEQF + } + p1 := s.Prog(add) + p1.From.Type = obj.TYPE_REG + p1.From.Reg = r0 + p1.Reg = r1 + p1.To.Type = obj.TYPE_REG + p1.To.Reg = out + + p2 := s.Prog(fcmp) + p2.From.Type = obj.TYPE_REG + p2.From.Reg = r0 + p2.Reg = r0 + p2.To.Type = obj.TYPE_REG + p2.To.Reg = loong64.REG_FCC0 + + p3 := s.Prog(loong64.ABFPF) + p3.To.Type = obj.TYPE_BRANCH + + p4 := s.Prog(fcmp) + p4.From.Type = obj.TYPE_REG + p4.From.Reg = r1 + p4.Reg = r1 + p4.To.Type = obj.TYPE_REG + p4.To.Reg = loong64.REG_FCC0 + + p5 := s.Prog(loong64.ABFPF) + p5.To.Type = obj.TYPE_BRANCH + + p6 := s.Prog(v.Op.Asm()) + p6.From.Type = obj.TYPE_REG + p6.From.Reg = r1 + p6.Reg = r0 + p6.To.Type = obj.TYPE_REG + p6.To.Reg = out + + nop := s.Prog(obj.ANOP) + p3.To.SetTarget(nop) + p5.To.SetTarget(nop) + case ssa.OpLOONG64SGT, ssa.OpLOONG64SGTU: p := s.Prog(v.Op.Asm()) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules index 2af95191137e64..6beeb4e0ccbdd8 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules @@ -132,6 +132,9 @@ (Sqrt ...) => (SQRTD ...) (Sqrt32 ...) => (SQRTF ...) +(Min(64|32)F ...) => (FMIN(D|F) ...) +(Max(64|32)F ...) => (FMAX(D|F) ...) + // boolean ops -- booleans are represented with 0=false, 1=true (AndB ...) => (AND ...) (OrB ...) => (OR ...) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index 3fbf5be499ec11..aa030f4fa098b2 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -193,6 +193,11 @@ func init() { {name: "SQRTD", argLength: 1, reg: fp11, asm: "SQRTD"}, // sqrt(arg0), float64 {name: "SQRTF", argLength: 1, reg: fp11, asm: "SQRTF"}, // sqrt(arg0), float32 + {name: "MINF", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MINF", commutative: true, typ: "Float32"}, // min(arg0, arg1), float32 + {name: "MIND", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MIND", commutative: true, typ: "Float64"}, // min(arg0, arg1), float64 + {name: "MAXF", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MAXF", commutative: true, typ: "Float32"}, // max(arg0, arg1), float32 + {name: "MAXD", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MAXD", commutative: true, typ: "Float64"}, // max(arg0, arg1), float64 + {name: "MASKEQZ", argLength: 2, reg: gp21, asm: "MASKEQZ"}, // returns 0 if arg1 == 0, otherwise returns arg0 {name: "MASKNEZ", argLength: 2, reg: gp21, asm: "MASKNEZ"}, // returns 0 if arg1 != 0, otherwise returns arg0 diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 91728da80d6855..7216f2df01a179 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -1773,6 +1773,10 @@ const ( OpLOONG64NEGD OpLOONG64SQRTD OpLOONG64SQRTF + OpLOONG64FMINF + OpLOONG64FMIND + OpLOONG64FMAXF + OpLOONG64FMAXD OpLOONG64MASKEQZ OpLOONG64MASKNEZ OpLOONG64SLLV @@ -23874,6 +23878,70 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "FMINF", + argLen: 2, + commutative: true, + resultNotInArgs: true, + asm: loong64.AFMINF, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + outputs: []outputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, + { + name: "FMIND", + argLen: 2, + commutative: true, + resultNotInArgs: true, + asm: loong64.AFMIND, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + outputs: []outputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, + { + name: "FMAXF", + argLen: 2, + commutative: true, + resultNotInArgs: true, + asm: loong64.AFMAXF, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + outputs: []outputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, + { + name: "FMAXD", + argLen: 2, + commutative: true, + resultNotInArgs: true, + asm: loong64.AFMAXD, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + outputs: []outputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, { name: "MASKEQZ", argLen: 2, diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go index edd3ffe6b9adca..8fa31d73f6f94f 100644 --- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go +++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go @@ -416,6 +416,18 @@ func rewriteValueLOONG64(v *Value) bool { return rewriteValueLOONG64_OpLsh8x64(v) case OpLsh8x8: return rewriteValueLOONG64_OpLsh8x8(v) + case OpMax32F: + v.Op = OpLOONG64FMAXF + return true + case OpMax64F: + v.Op = OpLOONG64FMAXD + return true + case OpMin32F: + v.Op = OpLOONG64FMINF + return true + case OpMin64F: + v.Op = OpLOONG64FMIND + return true case OpMod16: return rewriteValueLOONG64_OpMod16(v) case OpMod16u: diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 6919901f050a8a..c1c991012703bf 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -89,11 +89,11 @@ func InitConfig() { _ = types.NewPtr(types.Types[types.TINT64]) // *int64 _ = types.NewPtr(types.ErrorType) // *error if buildcfg.Experiment.SwissMap { - _ = types.NewPtr(reflectdata.SwissMapType()) // *runtime.hmap + _ = types.NewPtr(reflectdata.SwissMapType()) // *runtime.hmap } else { - _ = types.NewPtr(reflectdata.OldMapType()) // *runtime.hmap + _ = types.NewPtr(reflectdata.OldMapType()) // *runtime.hmap } - _ = types.NewPtr(deferstruct()) // *runtime._defer + _ = types.NewPtr(deferstruct()) // *runtime._defer types.NewPtrCacheEnabled = false ssaConfig = ssa.NewConfig(base.Ctxt.Arch.Name, *types_, base.Ctxt, base.Flag.N == 0, Arch.SoftFloat) ssaConfig.Race = base.Flag.Race @@ -3731,7 +3731,7 @@ func (s *state) minMax(n *ir.CallExpr) *ssa.Value { if typ.IsFloat() { hasIntrinsic := false switch Arch.LinkArch.Family { - case sys.AMD64, sys.ARM64, sys.RISCV64: + case sys.AMD64, sys.ARM64, sys.Loong64, sys.RISCV64: hasIntrinsic = true case sys.PPC64: hasIntrinsic = buildcfg.GOPPC64 >= 9 diff --git a/src/math/dim_asm.go b/src/math/dim_asm.go index f4adbd0ae5e11c..a1d23dd0962b07 100644 --- a/src/math/dim_asm.go +++ b/src/math/dim_asm.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 amd64 || arm64 || riscv64 || s390x +//go:build amd64 || arm64 || loong64 || riscv64 || s390x package math diff --git a/src/math/dim_loong64.s b/src/math/dim_loong64.s new file mode 100644 index 00000000000000..1484bf76381123 --- /dev/null +++ b/src/math/dim_loong64.s @@ -0,0 +1,77 @@ +// Copyright 2024 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. + +#include "textflag.h" + +#define PosInf 0x7FF0000000000000 +#define NaN 0x7FF8000000000001 +#define NegInf 0xFFF0000000000000 + +TEXT ·archMax(SB),NOSPLIT,$0 + MOVD x+0(FP), F0 + MOVD y+8(FP), F1 + FCLASSD F0, F2 + FCLASSD F1, F3 + + // combine x and y categories together to judge + MOVV F2, R4 + MOVV F3, R5 + OR R5, R4 + + // +Inf special cases + AND $64, R4, R5 + BNE R5, isPosInf + + // NaN special cases + AND $2, R4, R5 + BNE R5, isMaxNaN + + // normal case + FMAXD F0, F1, F0 + MOVD F0, ret+16(FP) + RET + +isMaxNaN: + MOVV $NaN, R6 + MOVV R6, ret+16(FP) + RET + +isPosInf: + MOVV $PosInf, R6 + MOVV R6, ret+16(FP) + RET + +TEXT ·archMin(SB),NOSPLIT,$0 + MOVD x+0(FP), F0 + MOVD y+8(FP), F1 + FCLASSD F0, F2 + FCLASSD F1, F3 + + // combine x and y categories together to judge + MOVV F2, R4 + MOVV F3, R5 + OR R5, R4 + + // -Inf special cases + AND $4, R4, R5 + BNE R5, isNegInf + + // NaN special cases + AND $2, R4, R5 + BNE R5, isMinNaN + + // normal case + FMIND F0, F1, F0 + MOVD F0, ret+16(FP) + RET + +isMinNaN: + MOVV $NaN, R6 + MOVV R6, ret+16(FP) + RET + +isNegInf: + MOVV $NegInf, R6 + MOVV R6, ret+16(FP) + RET diff --git a/src/math/dim_noasm.go b/src/math/dim_noasm.go index 5b9e06fed33d03..6f4917b8e8247b 100644 --- a/src/math/dim_noasm.go +++ b/src/math/dim_noasm.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 !amd64 && !arm64 && !riscv64 && !s390x +//go:build !amd64 && !arm64 && !loong64 && !riscv64 && !s390x package math diff --git a/test/codegen/floats.go b/test/codegen/floats.go index d38df1cacbb8a7..d2cf6f2b00f07e 100644 --- a/test/codegen/floats.go +++ b/test/codegen/floats.go @@ -164,6 +164,7 @@ func ArrayCopy(a [16]byte) (b [16]byte) { func Float64Min(a, b float64) float64 { // amd64:"MINSD" // arm64:"FMIND" + // loong64:"FMIND" // riscv64:"FMIN" // ppc64/power9:"XSMINJDP" // ppc64/power10:"XSMINJDP" @@ -173,6 +174,7 @@ func Float64Min(a, b float64) float64 { func Float64Max(a, b float64) float64 { // amd64:"MINSD" // arm64:"FMAXD" + // loong64:"FMAXD" // riscv64:"FMAX" // ppc64/power9:"XSMAXJDP" // ppc64/power10:"XSMAXJDP" @@ -182,6 +184,7 @@ func Float64Max(a, b float64) float64 { func Float32Min(a, b float32) float32 { // amd64:"MINSS" // arm64:"FMINS" + // loong64:"FMINF" // riscv64:"FMINS" // ppc64/power9:"XSMINJDP" // ppc64/power10:"XSMINJDP" @@ -191,6 +194,7 @@ func Float32Min(a, b float32) float32 { func Float32Max(a, b float32) float32 { // amd64:"MINSS" // arm64:"FMAXS" + // loong64:"FMAXF" // riscv64:"FMAXS" // ppc64/power9:"XSMAXJDP" // ppc64/power10:"XSMAXJDP" From e705a2d16e4ece77e08e80c168382cdb02890f5b Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Mon, 1 Apr 2024 17:13:42 +0800 Subject: [PATCH 191/866] cmd/compile, math: make math.{Abs,Copysign} intrinsics on loong64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit goos: linux goarch: loong64 pkg: math cpu: Loongson-3A6000 @ 2500.00MHz │ old.bench │ new.bench │ │ sec/op │ sec/op vs base │ Copysign 1.9710n ± 0% 0.8006n ± 0% -59.38% (p=0.000 n=10) Abs 1.8745n ± 0% 0.8006n ± 0% -57.29% (p=0.000 n=10) geomean 1.922n 0.8006n -58.35% goos: linux goarch: loong64 pkg: math cpu: Loongson-3A5000 @ 2500.00MHz │ old.bench │ new.bench │ │ sec/op │ sec/op vs base │ Copysign 2.4020n ± 0% 0.9006n ± 0% -62.51% (p=0.000 n=10) Abs 2.4020n ± 0% 0.8005n ± 0% -66.67% (p=0.000 n=10) geomean 2.402n 0.8491n -64.65% Updates #59120. Change-Id: Ic409e1f4d15ad15cb3568a5aaa100046e9302842 Reviewed-on: https://go-review.googlesource.com/c/go/+/580280 Reviewed-by: Qiqi Huang Reviewed-by: Meidan Li Reviewed-by: abner chenc Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/cmd/compile/internal/loong64/ssa.go | 6 ++-- .../compile/internal/ssa/_gen/LOONG64.rules | 3 ++ .../compile/internal/ssa/_gen/LOONG64Ops.go | 3 ++ src/cmd/compile/internal/ssa/opGen.go | 29 +++++++++++++++++++ .../compile/internal/ssa/rewriteLOONG64.go | 6 ++++ src/cmd/compile/internal/ssagen/ssa.go | 4 +-- 6 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index 10190654d7ba8b..fd5ed5f928bba9 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -177,7 +177,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { ssa.OpLOONG64DIVF, ssa.OpLOONG64DIVD, ssa.OpLOONG64MULV, ssa.OpLOONG64MULHV, ssa.OpLOONG64MULHVU, - ssa.OpLOONG64DIVV, ssa.OpLOONG64REMV, ssa.OpLOONG64DIVVU, ssa.OpLOONG64REMVU: + ssa.OpLOONG64DIVV, ssa.OpLOONG64REMV, ssa.OpLOONG64DIVVU, ssa.OpLOONG64REMVU, + ssa.OpLOONG64FCOPYSGD: p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_REG p.From.Reg = v.Args[1].Reg() @@ -420,7 +421,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { ssa.OpLOONG64NEGF, ssa.OpLOONG64NEGD, ssa.OpLOONG64SQRTD, - ssa.OpLOONG64SQRTF: + ssa.OpLOONG64SQRTF, + ssa.OpLOONG64ABSD: p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_REG p.From.Reg = v.Args[0].Reg() diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules index 6beeb4e0ccbdd8..014abcbd264602 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules @@ -129,8 +129,11 @@ (Com(64|32|16|8) x) => (NOR (MOVVconst [0]) x) +// math package intrinsics (Sqrt ...) => (SQRTD ...) (Sqrt32 ...) => (SQRTF ...) +(Abs ...) => (ABSD ...) +(Copysign ...) => (FCOPYSGD ...) (Min(64|32)F ...) => (FMIN(D|F) ...) (Max(64|32)F ...) => (FMAX(D|F) ...) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index aa030f4fa098b2..874c0c9e09945e 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -201,6 +201,9 @@ func init() { {name: "MASKEQZ", argLength: 2, reg: gp21, asm: "MASKEQZ"}, // returns 0 if arg1 == 0, otherwise returns arg0 {name: "MASKNEZ", argLength: 2, reg: gp21, asm: "MASKNEZ"}, // returns 0 if arg1 != 0, otherwise returns arg0 + {name: "ABSD", argLength: 1, reg: fp11, asm: "ABSD"}, // abs(arg0), float64 + {name: "FCOPYSGD", argLength: 2, reg: fp21, asm: "FCOPYSGD"}, // float64 + // shifts {name: "SLLV", argLength: 2, reg: gp21, asm: "SLLV"}, // arg0 << arg1, shift amount is mod 64 {name: "SLLVconst", argLength: 1, reg: gp11, asm: "SLLV", aux: "Int64"}, // arg0 << auxInt diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 7216f2df01a179..ef39c6894fd5cb 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -1779,6 +1779,8 @@ const ( OpLOONG64FMAXD OpLOONG64MASKEQZ OpLOONG64MASKNEZ + OpLOONG64ABSD + OpLOONG64FCOPYSGD OpLOONG64SLLV OpLOONG64SLLVconst OpLOONG64SRLV @@ -23970,6 +23972,33 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "ABSD", + argLen: 1, + asm: loong64.AABSD, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + outputs: []outputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, + { + name: "FCOPYSGD", + argLen: 2, + asm: loong64.AFCOPYSGD, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + outputs: []outputInfo{ + {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, { name: "SLLV", argLen: 2, diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go index 8fa31d73f6f94f..58f33bd4c4f3df 100644 --- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go +++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go @@ -6,6 +6,9 @@ import "cmd/compile/internal/types" func rewriteValueLOONG64(v *Value) bool { switch v.Op { + case OpAbs: + v.Op = OpLOONG64ABSD + return true case OpAdd16: v.Op = OpLOONG64ADDV return true @@ -116,6 +119,9 @@ func rewriteValueLOONG64(v *Value) bool { return rewriteValueLOONG64_OpConstBool(v) case OpConstNil: return rewriteValueLOONG64_OpConstNil(v) + case OpCopysign: + v.Op = OpLOONG64FCOPYSGD + return true case OpCvt32Fto32: v.Op = OpLOONG64TRUNCFW return true diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index c1c991012703bf..14e75f74f37632 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -4721,12 +4721,12 @@ func InitTables() { func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpAbs, types.Types[types.TFLOAT64], args[0]) }, - sys.ARM64, sys.ARM, sys.PPC64, sys.RISCV64, sys.Wasm, sys.MIPS, sys.MIPS64) + sys.ARM64, sys.ARM, sys.Loong64, sys.PPC64, sys.RISCV64, sys.Wasm, sys.MIPS, sys.MIPS64) addF("math", "Copysign", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue2(ssa.OpCopysign, types.Types[types.TFLOAT64], args[0], args[1]) }, - sys.PPC64, sys.RISCV64, sys.Wasm) + sys.Loong64, sys.PPC64, sys.RISCV64, sys.Wasm) addF("math", "FMA", func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value { return s.newValue3(ssa.OpFMA, types.Types[types.TFLOAT64], args[0], args[1], args[2]) From 553443d41fbe643a29d452a5d4d4ce3b7442b0e9 Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Sat, 18 May 2024 08:01:27 -0700 Subject: [PATCH 192/866] cmd/compile: move limit fact table in prove pass to dense encoding Here begins a pretty major rewrite of the prove pass. The fundamental observation is that although keeping facts about relations between two SSA values could use O(n^2) space, keeping facts about relations between an SSA value and constants needs only O(n) space. We can just keep track of min/max for every SSA value at little cost. Redo the limit table to just keep track of limits for all SSA values. Use just a slice instead of a map. It may use more space (but still just O(n) space), but accesses are a lot faster. And with the cache in the compiler, that space will be reused quickly. This is part of my planning to add lots more constant limits in the prove pass. Change-Id: Ie36819fad5631a8b79c3630fe0e819521796551a Reviewed-on: https://go-review.googlesource.com/c/go/+/599255 LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Michael Knyszek --- .../compile/internal/ssa/_gen/allocators.go | 27 +++-- src/cmd/compile/internal/ssa/allocators.go | 102 +++++++++++------- src/cmd/compile/internal/ssa/cache.go | 2 +- src/cmd/compile/internal/ssa/prove.go | 64 ++++++----- 4 files changed, 111 insertions(+), 84 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/allocators.go b/src/cmd/compile/internal/ssa/_gen/allocators.go index 5869a61e8238a1..56e6d69a312e1d 100644 --- a/src/cmd/compile/internal/ssa/_gen/allocators.go +++ b/src/cmd/compile/internal/ssa/_gen/allocators.go @@ -46,14 +46,14 @@ func genAllocators() { maxLog: 32, }, { - name: "Int64Slice", - typ: "[]int64", + name: "LimitSlice", + typ: "[]limit", // the limit type is basically [4]uint64. capacity: "cap(%s)", - mak: "make([]int64, %s)", + mak: "make([]limit, %s)", resize: "%s[:%s]", - clear: "for i := range %[1]s {\n%[1]s[i] = 0\n}", - minLog: 5, - maxLog: 32, + clear: "for i := range %[1]s {\n%[1]s[i] = limit{}\n}", + minLog: 3, + maxLog: 30, }, { name: "SparseSet", @@ -92,30 +92,35 @@ func genAllocators() { typ: "[]*Block", base: "ValueSlice", }, + { + name: "Int64", + typ: "[]int64", + base: "LimitSlice", + }, { name: "IntSlice", typ: "[]int", - base: "Int64Slice", + base: "LimitSlice", }, { name: "Int32Slice", typ: "[]int32", - base: "Int64Slice", + base: "LimitSlice", }, { name: "Int8Slice", typ: "[]int8", - base: "Int64Slice", + base: "LimitSlice", }, { name: "BoolSlice", typ: "[]bool", - base: "Int64Slice", + base: "LimitSlice", }, { name: "IDSlice", typ: "[]ID", - base: "Int64Slice", + base: "LimitSlice", }, } diff --git a/src/cmd/compile/internal/ssa/allocators.go b/src/cmd/compile/internal/ssa/allocators.go index ff70795f82c994..222ae73f2b80e0 100644 --- a/src/cmd/compile/internal/ssa/allocators.go +++ b/src/cmd/compile/internal/ssa/allocators.go @@ -47,42 +47,42 @@ func (c *Cache) freeValueSlice(s []*Value) { poolFreeValueSlice[b-5].Put(sp) } -var poolFreeInt64Slice [27]sync.Pool +var poolFreeLimitSlice [27]sync.Pool -func (c *Cache) allocInt64Slice(n int) []int64 { - var s []int64 +func (c *Cache) allocLimitSlice(n int) []limit { + var s []limit n2 := n - if n2 < 32 { - n2 = 32 + if n2 < 8 { + n2 = 8 } b := bits.Len(uint(n2 - 1)) - v := poolFreeInt64Slice[b-5].Get() + v := poolFreeLimitSlice[b-3].Get() if v == nil { - s = make([]int64, 1<= w && x > min ⇒ x > w // // Useful for i > 0; s[i-1]. - lim, ok := ft.limits[x.ID] - if ok && ((d == signed && lim.min > opMin[v.Op]) || (d == unsigned && lim.umin > 0)) { + lim := ft.limits[x.ID] + if lim != noLimit && ((d == signed && lim.min > opMin[v.Op]) || (d == unsigned && lim.umin > 0)) { ft.update(parent, x, w, d, gt) } } else if x, delta := isConstDelta(w); x != nil && delta == 1 { // v >= x+1 && x < max ⇒ v > x - lim, ok := ft.limits[x.ID] - if ok && ((d == signed && lim.max < opMax[w.Op]) || (d == unsigned && lim.umax < opUMax[w.Op])) { + lim := ft.limits[x.ID] + if lim != noLimit && ((d == signed && lim.max < opMax[w.Op]) || (d == unsigned && lim.umax < opUMax[w.Op])) { ft.update(parent, v, x, d, gt) } } @@ -465,7 +467,7 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { parent.Func.Warnl(parent.Pos, "x+d %s w; x:%v %v delta:%v w:%v d:%v", r, x, parent.String(), delta, w.AuxInt, d) } underflow := true - if l, has := ft.limits[x.ID]; has && delta < 0 { + if l := ft.limits[x.ID]; l != noLimit && delta < 0 { if (x.Type.Size() == 8 && l.min >= math.MinInt64-delta) || (x.Type.Size() == 4 && l.min >= math.MinInt32-delta) { underflow = false @@ -543,7 +545,7 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { // We know that either x>min OR x<=max. factsTable cannot record OR conditions, // so let's see if we can already prove that one of them is false, in which case // the other must be true - if l, has := ft.limits[x.ID]; has { + if l := ft.limits[x.ID]; l != noLimit { if l.max <= min { if r&eq == 0 || l.max < min { // x>min (x>=min) is impossible, so it must be x<=max @@ -617,13 +619,13 @@ func (ft *factsTable) isNonNegative(v *Value) bool { // Check if the recorded limits can prove that the value is positive - if l, has := ft.limits[v.ID]; has && (l.min >= 0 || l.umax <= uint64(max)) { + if l := ft.limits[v.ID]; l != noLimit && (l.min >= 0 || l.umax <= uint64(max)) { return true } // Check if v = x+delta, and we can use x's limits to prove that it's positive if x, delta := isConstDelta(v); x != nil { - if l, has := ft.limits[x.ID]; has { + if l := ft.limits[x.ID]; l != noLimit { if delta > 0 && l.min >= -delta && l.max <= max-delta { return true } @@ -681,11 +683,7 @@ func (ft *factsTable) restore() { if old.vid == 0 { // checkpointBound break } - if old.limit == noLimit { - delete(ft.limits, old.vid) - } else { - ft.limits[old.vid] = old.limit - } + ft.limits[old.vid] = old.limit } ft.orderS.Undo() ft.orderU.Undo() @@ -765,6 +763,7 @@ func (ft *factsTable) cleanup(f *Func) { } f.retPoset(po) } + f.Cache.freeLimitSlice(ft.limits) } // prove removes redundant BlockIf branches that can be inferred @@ -1261,10 +1260,7 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { c = v val -= off } - old, ok := ft.limits[c.ID] - if !ok { - old = noLimit - } + old := ft.limits[c.ID] ft.limitStack = append(ft.limitStack, limitFact{c.ID, old}) if val < old.min || val > old.max || uint64(val) < old.umin || uint64(val) > old.umax { ft.unsat = true @@ -1473,8 +1469,8 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { } // slicemask(x + y) // if x is larger than -y (y is negative), then slicemask is -1. - lim, ok := ft.limits[x.ID] - if !ok { + lim := ft.limits[x.ID] + if lim == noLimit { break } if lim.umin > uint64(-delta) { @@ -1493,8 +1489,8 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // code for CtzNN if we know that the argument is non-zero. // Capture that information here for use in arch-specific optimizations. x := v.Args[0] - lim, ok := ft.limits[x.ID] - if !ok { + lim := ft.limits[x.ID] + if lim == noLimit { break } if lim.umin > 0 || lim.min > 0 || lim.max < 0 { @@ -1542,8 +1538,8 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // Check whether, for a << b, we know that b // is strictly less than the number of bits in a. by := v.Args[1] - lim, ok := ft.limits[by.ID] - if !ok { + lim := ft.limits[by.ID] + if lim == noLimit { break } bits := 8 * v.Args[0].Type.Size() @@ -1563,11 +1559,11 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { break } divr := v.Args[1] - divrLim, divrLimok := ft.limits[divr.ID] + divrLim := ft.limits[divr.ID] divd := v.Args[0] - divdLim, divdLimok := ft.limits[divd.ID] - if (divrLimok && (divrLim.max < -1 || divrLim.min > -1)) || - (divdLimok && divdLim.min > mostNegativeDividend[v.Op]) { + divdLim := ft.limits[divd.ID] + if (divrLim != noLimit && (divrLim.max < -1 || divrLim.min > -1)) || + (divdLim != noLimit && divdLim.min > mostNegativeDividend[v.Op]) { // See DivisionNeedsFixUp in rewrite.go. // v.AuxInt = 1 means we have proved both that the divisor is not -1 // and that the dividend is not the most negative integer, @@ -1585,8 +1581,8 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { case OpConst64, OpConst32, OpConst16, OpConst8: continue } - lim, ok := ft.limits[arg.ID] - if !ok { + lim := ft.limits[arg.ID] + if lim == noLimit { continue } From 3b96eebcbdf472326b9d6e46c373992bac9f72bb Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Fri, 14 Jun 2024 22:29:09 -0700 Subject: [PATCH 193/866] cmd/compile: rewrite the constant parts of the prove pass Handles a lot more cases where constant ranges can eliminate various (mostly bounds failure) paths. Fixes #66826 Fixes #66692 Fixes #48213 Update #57959 TODO: remove constant logic from poset code, no longer needed. Change-Id: Id196436fcd8a0c84c7d59c04f93bd92e26a0fd7e Reviewed-on: https://go-review.googlesource.com/c/go/+/599096 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/ssa/func.go | 2 +- src/cmd/compile/internal/ssa/prove.go | 1133 +++++++++++++++-------- src/cmd/compile/internal/ssa/rewrite.go | 14 + test/checkbce.go | 8 +- test/codegen/comparisons.go | 4 +- test/loopbce.go | 22 +- test/prove.go | 65 +- test/prove_constant_folding.go | 4 +- 8 files changed, 814 insertions(+), 438 deletions(-) diff --git a/src/cmd/compile/internal/ssa/func.go b/src/cmd/compile/internal/ssa/func.go index 62472cc94eb8a5..cd8900d19a83fa 100644 --- a/src/cmd/compile/internal/ssa/func.go +++ b/src/cmd/compile/internal/ssa/func.go @@ -796,7 +796,7 @@ func (f *Func) invalidateCFG() { // base.DebugHashMatch(this function's package.name) // // for use in bug isolation. The return value is true unless -// environment variable GOSSAHASH is set, in which case "it depends". +// environment variable GOCOMPILEDEBUG=gossahash=X is set, in which case "it depends on X". // See [base.DebugHashMatch] for more information. func (f *Func) DebugHashMatch() bool { if !base.HasDebugHash() { diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index af69086981261b..df3566985fa252 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -22,6 +22,19 @@ const ( jumpTable0 ) +func (b branch) String() string { + switch b { + case unknown: + return "unk" + case positive: + return "pos" + case negative: + return "neg" + default: + return fmt.Sprintf("jmp%d", b-jumpTable0) + } +} + // relation represents the set of possible relations between // pairs of variables (v, w). Without a priori knowledge the // mask is lt | eq | gt meaning v can be less than, equal to or @@ -139,6 +152,165 @@ func (l limit) intersect(l2 limit) limit { return l } +func (l limit) signedMin(m int64) limit { + if l.min < m { + l.min = m + } + return l +} +func (l limit) signedMax(m int64) limit { + if l.max > m { + l.max = m + } + return l +} +func (l limit) signedMinMax(min, max int64) limit { + if l.min < min { + l.min = min + } + if l.max > max { + l.max = max + } + return l +} + +func (l limit) unsignedMin(m uint64) limit { + if l.umin < m { + l.umin = m + } + return l +} +func (l limit) unsignedMax(m uint64) limit { + if l.umax > m { + l.umax = m + } + return l +} +func (l limit) unsignedMinMax(min, max uint64) limit { + if l.umin < min { + l.umin = min + } + if l.umax > max { + l.umax = max + } + return l +} + +func (l limit) nonzero() bool { + return l.min > 0 || l.umin > 0 || l.max < 0 +} +func (l limit) nonnegative() bool { + return l.min >= 0 +} +func (l limit) unsat() bool { + return l.min > l.max || l.umin > l.umax +} + +// If x and y can add without overflow or underflow +// (using b bits), safeAdd returns x+y, true. +// Otherwise, returns 0, false. +func safeAdd(x, y int64, b uint) (int64, bool) { + s := x + y + if x >= 0 && y >= 0 && s < 0 { + return 0, false // 64-bit overflow + } + if x < 0 && y < 0 && s >= 0 { + return 0, false // 64-bit underflow + } + if !fitsInBits(s, b) { + return 0, false + } + return s, true +} + +// same as safeAdd for unsigned arithmetic. +func safeAddU(x, y uint64, b uint) (uint64, bool) { + s := x + y + if s < x || s < y { + return 0, false // 64-bit overflow + } + if !fitsInBitsU(s, b) { + return 0, false + } + return s, true +} + +// same as safeAdd but for subtraction. +func safeSub(x, y int64, b uint) (int64, bool) { + if y == math.MinInt64 { + if x == math.MaxInt64 { + return 0, false // 64-bit overflow + } + x++ + y++ + } + return safeAdd(x, -y, b) +} + +// same as safeAddU but for subtraction. +func safeSubU(x, y uint64, b uint) (uint64, bool) { + if x < y { + return 0, false // 64-bit underflow + } + s := x - y + if !fitsInBitsU(s, b) { + return 0, false + } + return s, true +} + +// fitsInBits reports whether x fits in b bits (signed). +func fitsInBits(x int64, b uint) bool { + if b == 64 { + return true + } + m := int64(-1) << (b - 1) + M := -m - 1 + return x >= m && x <= M +} + +// fitsInBitsU reports whether x fits in b bits (unsigned). +func fitsInBitsU(x uint64, b uint) bool { + return x>>b == 0 +} + +// add returns the limit obtained by adding a value with limit l +// to a value with limit l2. The result must fit in b bits. +func (l limit) add(l2 limit, b uint) limit { + r := noLimit + min, minOk := safeAdd(l.min, l2.min, b) + max, maxOk := safeAdd(l.max, l2.max, b) + if minOk && maxOk { + r.min = min + r.max = max + } + umin, uminOk := safeAddU(l.umin, l2.umin, b) + umax, umaxOk := safeAddU(l.umax, l2.umax, b) + if uminOk && umaxOk { + r.umin = umin + r.umax = umax + } + return r +} + +// same as add but for subtraction. +func (l limit) sub(l2 limit, b uint) limit { + r := noLimit + min, minOk := safeSub(l.min, l2.max, b) + max, maxOk := safeSub(l.max, l2.min, b) + if minOk && maxOk { + r.min = min + r.max = max + } + umin, uminOk := safeSubU(l.umin, l2.umax, b) + umax, umaxOk := safeSubU(l.umax, l2.umin, b) + if uminOk && umaxOk { + r.umin = umin + r.umax = umax + } + return r +} + var noLimit = limit{math.MinInt64, math.MaxInt64, 0, math.MaxUint64} // a limitFact is a limit known for a particular value. @@ -147,6 +319,15 @@ type limitFact struct { limit limit } +// An ordering encodes facts like v < w. +type ordering struct { + next *ordering // linked list of all known orderings for v. + // Note: v is implicit here, determined by which linked list it is in. + w *Value + d domain // one of signed or unsigned + r relation // one of ==,!=,<,<=,>,>= +} + // factsTable keeps track of relations between pairs of values. // // The fact table logic is sound, but incomplete. Outside of a few @@ -172,18 +353,27 @@ type factsTable struct { orderS *poset orderU *poset - // known lower and upper bounds on individual values. - limits []limit // indexed by value ID - limitStack []limitFact // previous entries + // orderings contains a list of known orderings between values. + // These lists are indexed by v.ID. + // We do not record transitive orderings. Only explicitly learned + // orderings are recorded. Transitive orderings can be obtained + // by walking along the individual orderings. + orderings map[ID]*ordering + // stack of IDs which have had an entry added in orderings. + // In addition, ID==0 are checkpoint markers. + orderingsStack []ID + orderingCache *ordering // unused ordering records + + // known lower and upper constant bounds on individual values. + limits []limit // indexed by value ID + limitStack []limitFact // previous entries + recurseCheck []bool // recursion detector for limit propagation // For each slice s, a map from s to a len(s)/cap(s) value (if any) // TODO: check if there are cases that matter where we have // more than one len(s) for a slice. We could keep a list if necessary. lens map[ID]*Value caps map[ID]*Value - - // zero is a zero-valued constant - zero *Value } // checkpointFact is an invalid value used for checkpointing @@ -197,17 +387,179 @@ func newFactsTable(f *Func) *factsTable { ft.orderU = f.newPoset() ft.orderS.SetUnsigned(false) ft.orderU.SetUnsigned(true) + ft.orderings = make(map[ID]*ordering) ft.facts = make(map[pair]relation) ft.stack = make([]fact, 4) ft.limits = f.Cache.allocLimitSlice(f.NumValues()) - ft.limitStack = make([]limitFact, 4) - ft.zero = f.ConstInt64(f.Config.Types.Int64, 0) - for i := range ft.limits { - ft.limits[i] = noLimit + for _, b := range f.Blocks { + for _, v := range b.Values { + ft.limits[v.ID] = initLimit(v) + } } + ft.limitStack = make([]limitFact, 4) + ft.recurseCheck = f.Cache.allocBoolSlice(f.NumValues()) return ft } +// signedMin records the fact that we know v is at least +// min in the signed domain. +func (ft *factsTable) signedMin(v *Value, min int64) bool { + return ft.newLimit(v, limit{min: min, max: math.MaxInt64, umin: 0, umax: math.MaxUint64}) +} + +// signedMax records the fact that we know v is at most +// max in the signed domain. +func (ft *factsTable) signedMax(v *Value, max int64) bool { + return ft.newLimit(v, limit{min: math.MinInt64, max: max, umin: 0, umax: math.MaxUint64}) +} +func (ft *factsTable) signedMinMax(v *Value, min, max int64) bool { + return ft.newLimit(v, limit{min: min, max: max, umin: 0, umax: math.MaxUint64}) +} + +// setNonNegative records the fact that v is known to be non-negative. +func (ft *factsTable) setNonNegative(v *Value) bool { + return ft.signedMin(v, 0) +} + +// unsignedMin records the fact that we know v is at least +// min in the unsigned domain. +func (ft *factsTable) unsignedMin(v *Value, min uint64) bool { + return ft.newLimit(v, limit{min: math.MinInt64, max: math.MaxInt64, umin: min, umax: math.MaxUint64}) +} + +// unsignedMax records the fact that we know v is at most +// max in the unsigned domain. +func (ft *factsTable) unsignedMax(v *Value, max uint64) bool { + return ft.newLimit(v, limit{min: math.MinInt64, max: math.MaxInt64, umin: 0, umax: max}) +} +func (ft *factsTable) unsignedMinMax(v *Value, min, max uint64) bool { + return ft.newLimit(v, limit{min: math.MinInt64, max: math.MaxInt64, umin: min, umax: max}) +} + +// newLimit adds new limiting information for v. +// Returns true if the new limit added any new information. +func (ft *factsTable) newLimit(v *Value, newLim limit) bool { + oldLim := ft.limits[v.ID] + + // Merge old and new information. + lim := oldLim.intersect(newLim) + + // signed <-> unsigned propagation + if lim.min >= 0 { + lim = lim.unsignedMinMax(uint64(lim.min), uint64(lim.max)) + } + if fitsInBitsU(lim.umax, uint(8*v.Type.Size()-1)) { + lim = lim.signedMinMax(int64(lim.umin), int64(lim.umax)) + } + + if lim == oldLim { + return false // nothing new to record + } + + if lim.unsat() { + ft.unsat = true + return true + } + + // Check for recursion. This normally happens because in unsatisfiable + // cases we have a < b < a, and every update to a's limits returns + // here again with the limit increased by 2. + // Normally this is caught early by the orderS/orderU posets, but in + // cases where the comparisons jump between signed and unsigned domains, + // the posets will not notice. + if ft.recurseCheck[v.ID] { + // This should only happen for unsatisfiable cases. TODO: check + return false + } + ft.recurseCheck[v.ID] = true + defer func() { + ft.recurseCheck[v.ID] = false + }() + + // Record undo information. + ft.limitStack = append(ft.limitStack, limitFact{v.ID, oldLim}) + // Record new information. + ft.limits[v.ID] = lim + if v.Block.Func.pass.debug > 2 { + // TODO: pos is probably wrong. This is the position where v is defined, + // not the position where we learned the fact about it (which was + // probably some subsequent compare+branch). + v.Block.Func.Warnl(v.Pos, "new limit %s %s unsat=%v", v, lim.String(), ft.unsat) + } + + // Propagate this new constant range to other values + // that we know are ordered with respect to this one. + // Note overflow/underflow in the arithmetic below is ok, + // it will just lead to imprecision (undetected unsatisfiability). + for o := ft.orderings[v.ID]; o != nil; o = o.next { + switch o.d { + case signed: + switch o.r { + case eq: // v == w + ft.signedMinMax(o.w, lim.min, lim.max) + case lt | eq: // v <= w + ft.signedMin(o.w, lim.min) + case lt: // v < w + ft.signedMin(o.w, lim.min+1) + case gt | eq: // v >= w + ft.signedMax(o.w, lim.max) + case gt: // v > w + ft.signedMax(o.w, lim.max-1) + case lt | gt: // v != w + if lim.min == lim.max { // v is a constant + c := lim.min + if ft.limits[o.w.ID].min == c { + ft.signedMin(o.w, c+1) + } + if ft.limits[o.w.ID].max == c { + ft.signedMax(o.w, c-1) + } + } + } + case unsigned: + switch o.r { + case eq: // v == w + ft.unsignedMinMax(o.w, lim.umin, lim.umax) + case lt | eq: // v <= w + ft.unsignedMin(o.w, lim.umin) + case lt: // v < w + ft.unsignedMin(o.w, lim.umin+1) + case gt | eq: // v >= w + ft.unsignedMax(o.w, lim.umax) + case gt: // v > w + ft.unsignedMax(o.w, lim.umax-1) + case lt | gt: // v != w + if lim.umin == lim.umax { // v is a constant + c := lim.umin + if ft.limits[o.w.ID].umin == c { + ft.unsignedMin(o.w, c+1) + } + if ft.limits[o.w.ID].umax == c { + ft.unsignedMax(o.w, c-1) + } + } + } + } + } + + return true +} + +func (ft *factsTable) addOrdering(v, w *Value, d domain, r relation) { + o := ft.orderingCache + if o == nil { + o = &ordering{} + } else { + ft.orderingCache = o.next + } + o.w = w + o.d = d + o.r = r + o.next = ft.orderings[v.ID] + ft.orderings[v.ID] = o + ft.orderingsStack = append(ft.orderingsStack, v.ID) +} + // update updates the set of relations between v and w in domain d // restricting it to r. func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { @@ -250,6 +602,9 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { default: panic("unknown relation") } + ft.addOrdering(v, w, d, r) + ft.addOrdering(w, v, d, reverseBits[r]) + if !ok { if parent.Func.pass.debug > 2 { parent.Func.Warnl(parent.Pos, "unsat %s %s %s", v, w, r) @@ -288,106 +643,90 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { } } - // Extract bounds when comparing against constants - if v.isGenericIntConst() { - v, w = w, v - r = reverseBits[r] - } - if v != nil && w.isGenericIntConst() { + // Extract new constant limits based on the comparison. + if d == signed || d == unsigned { + vLimit := ft.limits[v.ID] + wLimit := ft.limits[w.ID] // Note: all the +1/-1 below could overflow/underflow. Either will // still generate correct results, it will just lead to imprecision. // In fact if there is overflow/underflow, the corresponding // code is unreachable because the known range is outside the range // of the value's type. - old := ft.limits[v.ID] - if old == noLimit { - if v.isGenericIntConst() { - switch d { - case signed: - old.min, old.max = v.AuxInt, v.AuxInt - if v.AuxInt >= 0 { - old.umin, old.umax = uint64(v.AuxInt), uint64(v.AuxInt) - } - case unsigned: - old.umin = v.AuxUnsigned() - old.umax = old.umin - if int64(old.umin) >= 0 { - old.min, old.max = int64(old.umin), int64(old.umin) - } - } - } - } - lim := noLimit switch d { case signed: - c := w.AuxInt switch r { - case lt: - lim.max = c - 1 - case lt | eq: - lim.max = c - case gt | eq: - lim.min = c - case gt: - lim.min = c + 1 - case lt | gt: - lim = old - if c == lim.min { - lim.min++ + case eq: // v == w + ft.signedMinMax(v, wLimit.min, wLimit.max) + ft.signedMinMax(w, vLimit.min, vLimit.max) + case lt: // v < w + ft.signedMax(v, wLimit.max-1) + ft.signedMin(w, vLimit.min+1) + case lt | eq: // v <= w + ft.signedMax(v, wLimit.max) + ft.signedMin(w, vLimit.min) + case gt: // v > w + ft.signedMin(v, wLimit.min+1) + ft.signedMax(w, vLimit.max-1) + case gt | eq: // v >= w + ft.signedMin(v, wLimit.min) + ft.signedMax(w, vLimit.max) + case lt | gt: // v != w + if vLimit.min == vLimit.max { // v is a constant + c := vLimit.min + if wLimit.min == c { + ft.signedMin(w, c+1) + } + if wLimit.max == c { + ft.signedMax(w, c-1) + } } - if c == lim.max { - lim.max-- + if wLimit.min == wLimit.max { // w is a constant + c := wLimit.min + if vLimit.min == c { + ft.signedMin(v, c+1) + } + if vLimit.max == c { + ft.signedMax(v, c-1) + } } - case eq: - lim.min = c - lim.max = c - } - if lim.min >= 0 { - // int(x) >= 0 && int(x) >= N ⇒ uint(x) >= N - lim.umin = uint64(lim.min) - } - if lim.max != noLimit.max && old.min >= 0 && lim.max >= 0 { - // 0 <= int(x) <= N ⇒ 0 <= uint(x) <= N - // This is for a max update, so the lower bound - // comes from what we already know (old). - lim.umax = uint64(lim.max) } case unsigned: - uc := w.AuxUnsigned() switch r { - case lt: - lim.umax = uc - 1 - case lt | eq: - lim.umax = uc - case gt | eq: - lim.umin = uc - case gt: - lim.umin = uc + 1 - case lt | gt: - lim = old - if uc == lim.umin { - lim.umin++ + case eq: // v == w + ft.unsignedMinMax(v, wLimit.umin, wLimit.umax) + ft.unsignedMinMax(w, vLimit.umin, vLimit.umax) + case lt: // v < w + ft.unsignedMax(v, wLimit.umax-1) + ft.unsignedMin(w, vLimit.umin+1) + case lt | eq: // v <= w + ft.unsignedMax(v, wLimit.umax) + ft.unsignedMin(w, vLimit.umin) + case gt: // v > w + ft.unsignedMin(v, wLimit.umin+1) + ft.unsignedMax(w, vLimit.umax-1) + case gt | eq: // v >= w + ft.unsignedMin(v, wLimit.umin) + ft.unsignedMax(w, vLimit.umax) + case lt | gt: // v != w + if vLimit.umin == vLimit.umax { // v is a constant + c := vLimit.umin + if wLimit.umin == c { + ft.unsignedMin(w, c+1) + } + if wLimit.umax == c { + ft.unsignedMax(w, c-1) + } } - if uc == lim.umax { - lim.umax-- + if wLimit.umin == wLimit.umax { // w is a constant + c := wLimit.umin + if vLimit.umin == c { + ft.unsignedMin(v, c+1) + } + if vLimit.umax == c { + ft.unsignedMax(v, c-1) + } } - case eq: - lim.umin = uc - lim.umax = uc } - // We could use the contrapositives of the - // signed implications to derive signed facts, - // but it turns out not to matter. - } - ft.limitStack = append(ft.limitStack, limitFact{v.ID, old}) - lim = old.intersect(lim) - ft.limits[v.ID] = lim - if v.Block.Func.pass.debug > 2 { - v.Block.Func.Warnl(parent.Pos, "parent=%s, new limits %s %s %s %s", parent, v, w, r, lim.String()) - } - if lim.min > lim.max || lim.umin > lim.umax { - ft.unsat = true - return } } @@ -503,57 +842,45 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { // // Notice the conditions for max are still <=, as they handle overflows. var min, max int64 - var vmin, vmax *Value switch x.Type.Size() { case 8: min = w.AuxInt - delta max = int64(^uint64(0)>>1) - delta - - vmin = parent.NewValue0I(parent.Pos, OpConst64, parent.Func.Config.Types.Int64, min) - vmax = parent.NewValue0I(parent.Pos, OpConst64, parent.Func.Config.Types.Int64, max) - case 4: min = int64(int32(w.AuxInt) - int32(delta)) max = int64(int32(^uint32(0)>>1) - int32(delta)) - - vmin = parent.NewValue0I(parent.Pos, OpConst32, parent.Func.Config.Types.Int32, min) - vmax = parent.NewValue0I(parent.Pos, OpConst32, parent.Func.Config.Types.Int32, max) - case 2: min = int64(int16(w.AuxInt) - int16(delta)) max = int64(int16(^uint16(0)>>1) - int16(delta)) - - vmin = parent.NewValue0I(parent.Pos, OpConst16, parent.Func.Config.Types.Int16, min) - vmax = parent.NewValue0I(parent.Pos, OpConst16, parent.Func.Config.Types.Int16, max) - case 1: min = int64(int8(w.AuxInt) - int8(delta)) max = int64(int8(^uint8(0)>>1) - int8(delta)) - - vmin = parent.NewValue0I(parent.Pos, OpConst8, parent.Func.Config.Types.Int8, min) - vmax = parent.NewValue0I(parent.Pos, OpConst8, parent.Func.Config.Types.Int8, max) - default: panic("unimplemented") } if min < max { // Record that x > min and max >= x - ft.update(parent, x, vmin, d, r) - ft.update(parent, vmax, x, d, r|eq) + if r == gt { + min++ + } + ft.signedMinMax(x, min, max) } else { // We know that either x>min OR x<=max. factsTable cannot record OR conditions, // so let's see if we can already prove that one of them is false, in which case // the other must be true + if r == gt { + min++ + } if l := ft.limits[x.ID]; l != noLimit { if l.max <= min { if r&eq == 0 || l.max < min { // x>min (x>=min) is impossible, so it must be x<=max - ft.update(parent, vmax, x, d, r|eq) + ft.signedMax(x, max) } } else if l.min > max { // x<=max is impossible, so it must be x>min - ft.update(parent, x, vmin, d, r) + ft.signedMin(x, min) } } } @@ -599,49 +926,7 @@ var opUMax = map[Op]uint64{ // isNonNegative reports whether v is known to be non-negative. func (ft *factsTable) isNonNegative(v *Value) bool { - if isNonNegative(v) { - return true - } - - var max int64 - switch v.Type.Size() { - case 1: - max = math.MaxInt8 - case 2: - max = math.MaxInt16 - case 4: - max = math.MaxInt32 - case 8: - max = math.MaxInt64 - default: - panic("unexpected integer size") - } - - // Check if the recorded limits can prove that the value is positive - - if l := ft.limits[v.ID]; l != noLimit && (l.min >= 0 || l.umax <= uint64(max)) { - return true - } - - // Check if v = x+delta, and we can use x's limits to prove that it's positive - if x, delta := isConstDelta(v); x != nil { - if l := ft.limits[x.ID]; l != noLimit { - if delta > 0 && l.min >= -delta && l.max <= max-delta { - return true - } - if delta < 0 && l.min >= -delta { - return true - } - } - } - - // Check if v is a value-preserving extension of a non-negative value. - if isCleanExt(v) && ft.isNonNegative(v.Args[0]) { - return true - } - - // Check if the signed poset can prove that the value is >= 0 - return ft.orderS.OrderedOrEqual(ft.zero, v) + return ft.limits[v.ID].min >= 0 } // checkpoint saves the current state of known relations. @@ -654,6 +939,7 @@ func (ft *factsTable) checkpoint() { ft.limitStack = append(ft.limitStack, checkpointBound) ft.orderS.Checkpoint() ft.orderU.Checkpoint() + ft.orderingsStack = append(ft.orderingsStack, 0) } // restore restores known relation to the state just @@ -687,6 +973,17 @@ func (ft *factsTable) restore() { } ft.orderS.Undo() ft.orderU.Undo() + for { + id := ft.orderingsStack[len(ft.orderingsStack)-1] + ft.orderingsStack = ft.orderingsStack[:len(ft.orderingsStack)-1] + if id == 0 { // checkpoint marker + break + } + o := ft.orderings[id] + ft.orderings[id] = o.next + o.next = ft.orderingCache + ft.orderingCache = o + } } func lessByID(v, w *Value) bool { @@ -764,6 +1061,7 @@ func (ft *factsTable) cleanup(f *Func) { f.retPoset(po) } f.Cache.freeLimitSlice(ft.limits) + f.Cache.freeBoolSlice(ft.recurseCheck) } // prove removes redundant BlockIf branches that can be inferred @@ -944,9 +1242,6 @@ func prove(f *Func) { ft := newFactsTable(f) ft.checkpoint() - var lensVars map[*Block][]*Value - var logicVars map[*Block][]*Value - // Find length and capacity ops. for _, b := range f.Blocks { for _, v := range b.Values { @@ -956,8 +1251,6 @@ func prove(f *Func) { continue } switch v.Op { - case OpStringLen: - ft.update(b, v, ft.zero, signed, gt|eq) case OpSliceLen: if ft.lens == nil { ft.lens = map[ID]*Value{} @@ -970,13 +1263,6 @@ func prove(f *Func) { } else { ft.lens[v.Args[0].ID] = v } - ft.update(b, v, ft.zero, signed, gt|eq) - if v.Args[0].Op == OpSliceMake { - if lensVars == nil { - lensVars = make(map[*Block][]*Value) - } - lensVars[b] = append(lensVars[b], v) - } case OpSliceCap: if ft.caps == nil { ft.caps = map[ID]*Value{} @@ -987,92 +1273,6 @@ func prove(f *Func) { } else { ft.caps[v.Args[0].ID] = v } - ft.update(b, v, ft.zero, signed, gt|eq) - if v.Args[0].Op == OpSliceMake { - if lensVars == nil { - lensVars = make(map[*Block][]*Value) - } - lensVars[b] = append(lensVars[b], v) - } - case OpCtz64, OpCtz32, OpCtz16, OpCtz8, OpBitLen64, OpBitLen32, OpBitLen16, OpBitLen8: - ft.update(b, v, ft.zero, signed, gt|eq) - // TODO: we could also do <= 64/32/16/8, if that helped. - case OpAnd64, OpAnd32, OpAnd16, OpAnd8: - ft.update(b, v, v.Args[1], unsigned, lt|eq) - ft.update(b, v, v.Args[0], unsigned, lt|eq) - for i := 0; i < 2; i++ { - if isNonNegative(v.Args[i]) { - ft.update(b, v, v.Args[i], signed, lt|eq) - ft.update(b, v, ft.zero, signed, gt|eq) - } - } - if logicVars == nil { - logicVars = make(map[*Block][]*Value) - } - logicVars[b] = append(logicVars[b], v) - case OpOr64, OpOr32, OpOr16, OpOr8: - // TODO: investigate how to always add facts without much slowdown, see issue #57959. - if v.Args[0].isGenericIntConst() { - ft.update(b, v, v.Args[0], unsigned, gt|eq) - } - if v.Args[1].isGenericIntConst() { - ft.update(b, v, v.Args[1], unsigned, gt|eq) - } - case OpDiv64u, OpDiv32u, OpDiv16u, OpDiv8u, - OpRsh8Ux64, OpRsh8Ux32, OpRsh8Ux16, OpRsh8Ux8, - OpRsh16Ux64, OpRsh16Ux32, OpRsh16Ux16, OpRsh16Ux8, - OpRsh32Ux64, OpRsh32Ux32, OpRsh32Ux16, OpRsh32Ux8, - OpRsh64Ux64, OpRsh64Ux32, OpRsh64Ux16, OpRsh64Ux8: - ft.update(b, v, v.Args[0], unsigned, lt|eq) - case OpMod64u, OpMod32u, OpMod16u, OpMod8u: - ft.update(b, v, v.Args[0], unsigned, lt|eq) - ft.update(b, v, v.Args[1], unsigned, lt) - case OpPhi: - // Determine the min and max value of OpPhi composed entirely of integer constants. - // - // For example, for an OpPhi: - // - // v1 = OpConst64 [13] - // v2 = OpConst64 [7] - // v3 = OpConst64 [42] - // - // v4 = OpPhi(v1, v2, v3) - // - // We can prove: - // - // v4 >= 7 && v4 <= 42 - // - // TODO(jake-ciolek): Handle nested constant OpPhi's - sameConstOp := true - min := 0 - max := 0 - - if !v.Args[min].isGenericIntConst() { - break - } - - for k := range v.Args { - if v.Args[k].Op != v.Args[min].Op { - sameConstOp = false - break - } - if v.Args[k].AuxInt < v.Args[min].AuxInt { - min = k - } - if v.Args[k].AuxInt > v.Args[max].AuxInt { - max = k - } - } - - if sameConstOp { - ft.update(b, v, v.Args[min], signed, gt|eq) - ft.update(b, v, v.Args[max], signed, lt|eq) - } - // One might be tempted to create a v >= ft.zero relation for - // all OpPhi's composed of only provably-positive values - // but that bloats up the facts table for a very negligible gain. - // In Go itself, very few functions get improved (< 5) at a cost of 5-7% total increase - // of compile time. } } } @@ -1117,54 +1317,32 @@ func prove(f *Func) { case descend: ft.checkpoint() - // Entering the block, add the block-depending facts that we collected - // at the beginning: induction variables and lens/caps of slices. + // Entering the block, add facts about the induction variable + // that is bound to this block. if iv, ok := indVars[node.block]; ok { addIndVarRestrictions(ft, parent, iv) } - if lens, ok := lensVars[node.block]; ok { - for _, v := range lens { - switch v.Op { - case OpSliceLen: - ft.update(node.block, v, v.Args[0].Args[1], signed, eq) - case OpSliceCap: - ft.update(node.block, v, v.Args[0].Args[2], signed, eq) - } - } - } + // Add results of reaching this block via a branch from + // its immediate dominator (if any). if branch != unknown { addBranchRestrictions(ft, parent, branch) - // After we add the branch restriction, re-check the logic operations in the parent block, - // it may give us more info to omit some branches - if logic, ok := logicVars[parent]; ok { - for _, v := range logic { - // we only have OpAnd for now - ft.update(parent, v, v.Args[1], unsigned, lt|eq) - ft.update(parent, v, v.Args[0], unsigned, lt|eq) - for i := 0; i < 2; i++ { - if isNonNegative(v.Args[i]) { - ft.update(parent, v, v.Args[i], signed, lt|eq) - ft.update(parent, v, ft.zero, signed, gt|eq) - } - } - } - } - if ft.unsat { - // node.block is unreachable. - // Remove it and don't visit - // its children. - removeBranch(parent, branch) - ft.restore() - break - } - // Otherwise, we can now commit to - // taking this branch. We'll restore - // ft when we unwind. } - // Add inductive facts for phis in this block. - addLocalInductiveFacts(ft, node.block) + // Add facts about the values in the current block. + addLocalFacts(ft, node.block) + + if ft.unsat { + // node.block is unreachable. + // Remove it and don't visit + // its children. + removeBranch(parent, branch) + ft.restore() + break + } + // Otherwise, we can now commit to + // taking this branch. We'll restore + // ft when we unwind. work = append(work, bp{ block: node.block, @@ -1188,6 +1366,212 @@ func prove(f *Func) { ft.cleanup(f) } +// initLimit sets initial constant limit for v. This limit is based +// only on the operation itself, not any of its input arguments. This +// method is only called once on prove pass startup (unlike +// flowLimit, below, which computes additional constraints based on +// ranges of opcode arguments). +func initLimit(v *Value) limit { + if !v.Type.IsInteger() { + // TODO: boolean? + return noLimit + } + + // Default limits based on type. + var lim limit + switch v.Type.Size() { + case 8: + lim = limit{min: math.MinInt64, max: math.MaxInt64, umin: 0, umax: math.MaxUint64} + case 4: + lim = limit{min: math.MinInt32, max: math.MaxInt32, umin: 0, umax: math.MaxUint32} + case 2: + lim = limit{min: math.MinInt16, max: math.MaxInt16, umin: 0, umax: math.MaxUint16} + case 1: + lim = limit{min: math.MinInt8, max: math.MaxInt8, umin: 0, umax: math.MaxUint8} + default: + panic("bad") + } + + // Tighter limits on some opcodes. + switch v.Op { + // constants + case OpConst64: + lim = limit{min: v.AuxInt, max: v.AuxInt, umin: uint64(v.AuxInt), umax: uint64(v.AuxInt)} + case OpConst32: + lim = limit{min: v.AuxInt, max: v.AuxInt, umin: uint64(uint32(v.AuxInt)), umax: uint64(uint32(v.AuxInt))} + case OpConst16: + lim = limit{min: v.AuxInt, max: v.AuxInt, umin: uint64(uint16(v.AuxInt)), umax: uint64(uint16(v.AuxInt))} + case OpConst8: + lim = limit{min: v.AuxInt, max: v.AuxInt, umin: uint64(uint8(v.AuxInt)), umax: uint64(uint8(v.AuxInt))} + + // extensions + case OpZeroExt8to64, OpZeroExt8to32, OpZeroExt8to16: + lim = lim.signedMinMax(0, 1<<8-1) + lim = lim.unsignedMax(1<<8 - 1) + case OpZeroExt16to64, OpZeroExt16to32: + lim = lim.signedMinMax(0, 1<<16-1) + lim = lim.unsignedMax(1<<16 - 1) + case OpZeroExt32to64: + lim = lim.signedMinMax(0, 1<<32-1) + lim = lim.unsignedMax(1<<32 - 1) + case OpSignExt8to64, OpSignExt8to32, OpSignExt8to16: + lim = lim.signedMinMax(math.MinInt8, math.MaxInt8) + case OpSignExt16to64, OpSignExt16to32: + lim = lim.signedMinMax(math.MinInt16, math.MaxInt16) + case OpSignExt32to64: + lim = lim.signedMinMax(math.MinInt32, math.MaxInt32) + + // math/bits intrinsics + case OpCtz64, OpBitLen64: + lim = lim.unsignedMax(64) + case OpCtz32, OpBitLen32: + lim = lim.unsignedMax(32) + case OpCtz16, OpBitLen16: + lim = lim.unsignedMax(16) + case OpCtz8, OpBitLen8: + lim = lim.unsignedMax(8) + + // length operations + case OpStringLen, OpSliceLen, OpSliceCap: + lim = lim.signedMin(0) + } + + // signed <-> unsigned propagation + if lim.min >= 0 { + lim = lim.unsignedMinMax(uint64(lim.min), uint64(lim.max)) + } + if fitsInBitsU(lim.umax, uint(8*v.Type.Size()-1)) { + lim = lim.signedMinMax(int64(lim.umin), int64(lim.umax)) + } + + return lim +} + +// flowLimit updates the known limits of v in ft. Returns true if anything changed. +// flowLimit can use the ranges of input arguments. +// +// Note: this calculation only happens at the point the value is defined. We do not reevaluate +// it later. So for example: +// +// v := x + y +// if 0 <= x && x < 5 && 0 <= y && y < 5 { ... use v ... } +// +// we don't discover that the range of v is bounded in the conditioned +// block. We could recompute the range of v once we enter the block so +// we know that it is 0 <= v <= 8, but we don't have a mechanism to do +// that right now. +func (ft *factsTable) flowLimit(v *Value) bool { + if !v.Type.IsInteger() { + // TODO: boolean? + return false + } + + // Additional limits based on opcode and argument. + // No need to repeat things here already done in initLimit. + switch v.Op { + + // extensions + case OpZeroExt8to64, OpZeroExt8to32, OpZeroExt8to16, OpZeroExt16to64, OpZeroExt16to32, OpZeroExt32to64: + a := ft.limits[v.Args[0].ID] + return ft.unsignedMinMax(v, a.umin, a.umax) + case OpSignExt8to64, OpSignExt8to32, OpSignExt8to16, OpSignExt16to64, OpSignExt16to32, OpSignExt32to64: + a := ft.limits[v.Args[0].ID] + return ft.signedMinMax(v, a.min, a.max) + + // math/bits + case OpCtz64: + a := ft.limits[v.Args[0].ID] + if a.nonzero() { + return ft.unsignedMax(v, 63) + } + case OpCtz32: + a := ft.limits[v.Args[0].ID] + if a.nonzero() { + return ft.unsignedMax(v, 31) + } + case OpCtz16: + a := ft.limits[v.Args[0].ID] + if a.nonzero() { + return ft.unsignedMax(v, 15) + } + case OpCtz8: + a := ft.limits[v.Args[0].ID] + if a.nonzero() { + return ft.unsignedMax(v, 7) + } + + // Masks. + case OpAnd64, OpAnd32, OpAnd16, OpAnd8: + // AND can only make the value smaller. + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.unsignedMax(v, minU(a.umax, b.umax)) + case OpOr64, OpOr32, OpOr16, OpOr8: + // OR can only make the value bigger. + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.unsignedMin(v, maxU(a.umin, b.umin)) + case OpXor64, OpXor32, OpXor16, OpXor8: + // TODO: use leading/trailing zeroes? + // Not sure if it is worth it. + + // Arithmetic. + case OpAdd64: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.add(b, 64)) + case OpAdd32: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.add(b, 32)) + case OpAdd16: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.add(b, 16)) + case OpAdd8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.add(b, 8)) + case OpSub64: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.sub(b, 64)) + case OpSub32: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.sub(b, 32)) + case OpSub16: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.sub(b, 16)) + case OpSub8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.sub(b, 8)) + case OpPhi: + // Compute the union of all the input phis. + // Often this will convey no information, because the block + // is not dominated by its predecessors and hence the + // phi arguments might not have been processed yet. But if + // the values are declared earlier, it may help. e.g., for + // v = phi(c3, c5) + // where c3 = OpConst [3] and c5 = OpConst [5] are + // defined in the entry block, we can derive [3,5] + // as the limit for v. + l := ft.limits[v.Args[0].ID] + for _, a := range v.Args[1:] { + l2 := ft.limits[a.ID] + l.min = min(l.min, l2.min) + l.max = max(l.max, l2.max) + l.umin = minU(l.umin, l2.umin) + l.umax = maxU(l.umax, l2.umax) + } + return ft.newLimit(v, l) + } + // TODO: mul/lsh, rsh, div/mod, and/or/xor + return false +} + // getBranch returns the range restrictions added by p // when reaching b. p is the immediate dominator of b. func getBranch(sdom SparseTree, p *Block, b *Block) branch { @@ -1306,7 +1690,7 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { } addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r^(lt|gt|eq)) case positive: - addRestrictions(b, ft, signed, ft.zero, c.Args[0], lt|eq) + ft.setNonNegative(c.Args[0]) addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) } default: @@ -1337,111 +1721,56 @@ func addRestrictions(parent *Block, ft *factsTable, t domain, v, w *Value, r rel } } -// addLocalInductiveFacts adds inductive facts when visiting b, where -// b is a join point in a loop. In contrast with findIndVar, this -// depends on facts established for b, which is why it happens when -// visiting b. -// -// TODO: It would be nice to combine this with findIndVar. -func addLocalInductiveFacts(ft *factsTable, b *Block) { - // This looks for a specific pattern of induction: - // - // 1. i1 = OpPhi(min, i2) in b - // 2. i2 = i1 + 1 - // 3. i2 < max at exit from b.Preds[1] - // 4. min < max - // - // If all of these conditions are true, then i1 < max and i1 >= min. - - // To ensure this is a loop header node. - if len(b.Preds) != 2 { - return - } - - for _, i1 := range b.Values { - if i1.Op != OpPhi { - continue - } - - // Check for conditions 1 and 2. This is easy to do - // and will throw out most phis. - min, i2 := i1.Args[0], i1.Args[1] - if i1q, delta := isConstDelta(i2); i1q != i1 || delta != 1 { - continue +func addLocalFacts(ft *factsTable, b *Block) { + // Propagate constant ranges among values in this block. + // We do this before the second loop so that we have the + // most up-to-date constant bounds for isNonNegative calls. + for { + changed := false + for _, v := range b.Values { + changed = ft.flowLimit(v) || changed } - - // Try to prove condition 3. We can't just query the - // fact table for this because we don't know what the - // facts of b.Preds[1] are (in general, b.Preds[1] is - // a loop-back edge, so we haven't even been there - // yet). As a conservative approximation, we look for - // this condition in the predecessor chain until we - // hit a join point. - uniquePred := func(b *Block) *Block { - if len(b.Preds) == 1 { - return b.Preds[0].b - } - return nil + if !changed { + break } - pred, child := b.Preds[1].b, b - for ; pred != nil; pred, child = uniquePred(pred), pred { - if pred.Kind != BlockIf { - continue - } - control := pred.Controls[0] - - br := unknown - if pred.Succs[0].b == child { - br = positive - } - if pred.Succs[1].b == child { - if br != unknown { - continue - } - br = negative - } - if br == unknown { - continue - } + } - tr, has := domainRelationTable[control.Op] - if !has { - continue + // Add facts about individual operations. + for _, v := range b.Values { + switch v.Op { + case OpAnd64, OpAnd32, OpAnd16, OpAnd8: + ft.update(b, v, v.Args[0], unsigned, lt|eq) + ft.update(b, v, v.Args[1], unsigned, lt|eq) + if ft.isNonNegative(v.Args[0]) { + ft.update(b, v, v.Args[0], signed, lt|eq) } - r := tr.r - if br == negative { - // Negative branch taken to reach b. - // Complement the relations. - r = (lt | eq | gt) ^ r + if ft.isNonNegative(v.Args[1]) { + ft.update(b, v, v.Args[1], signed, lt|eq) } - - // Check for i2 < max or max > i2. - var max *Value - if r == lt && control.Args[0] == i2 { - max = control.Args[1] - } else if r == gt && control.Args[1] == i2 { - max = control.Args[0] - } else { - continue + case OpOr64, OpOr32, OpOr16, OpOr8: + // TODO: investigate how to always add facts without much slowdown, see issue #57959 + //ft.update(b, v, v.Args[0], unsigned, gt|eq) + //ft.update(b, v, v.Args[1], unsigned, gt|eq) + case OpDiv64u, OpDiv32u, OpDiv16u, OpDiv8u, + OpRsh8Ux64, OpRsh8Ux32, OpRsh8Ux16, OpRsh8Ux8, + OpRsh16Ux64, OpRsh16Ux32, OpRsh16Ux16, OpRsh16Ux8, + OpRsh32Ux64, OpRsh32Ux32, OpRsh32Ux16, OpRsh32Ux8, + OpRsh64Ux64, OpRsh64Ux32, OpRsh64Ux16, OpRsh64Ux8: + ft.update(b, v, v.Args[0], unsigned, lt|eq) + case OpMod64u, OpMod32u, OpMod16u, OpMod8u: + ft.update(b, v, v.Args[0], unsigned, lt|eq) + // Note: we have to be careful that this doesn't imply + // that the modulus is >0, which isn't true until *after* + // the mod instruction executes (and thus panics if the + // modulus is 0). See issue 67625. + ft.update(b, v, v.Args[1], unsigned, lt) + case OpSliceLen: + if v.Args[0].Op == OpSliceMake { + ft.update(b, v, v.Args[0].Args[1], signed, eq) } - - // Check condition 4 now that we have a - // candidate max. For this we can query the - // fact table. We "prove" min < max by showing - // that min >= max is unsat. (This may simply - // compare two constants; that's fine.) - ft.checkpoint() - ft.update(b, min, max, tr.d, gt|eq) - proved := ft.unsat - ft.restore() - - if proved { - // We know that min <= i1 < max. - if b.Func.pass.debug > 0 { - printIndVar(b, i1, min, max, 1, 0) - } - ft.update(b, min, i1, tr.d, lt|eq) - ft.update(b, i1, max, tr.d, lt) + case OpSliceCap: + if v.Args[0].Op == OpSliceMake { + ft.update(b, v, v.Args[0].Args[2], signed, eq) } } } @@ -1544,8 +1873,17 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { } bits := 8 * v.Args[0].Type.Size() if lim.umax < uint64(bits) || (lim.max < bits && ft.isNonNegative(by)) { + if by.isGenericIntConst() { + // TODO: get rid of this block. + // Currently this causes lowering to happen + // in different orders, which causes some + // problems for codegen tests for arm64 + // where rule application order results + // in different final instructions. + break + } v.AuxInt = 1 // see shiftIsBounded - if b.Func.pass.debug > 0 { + if b.Func.pass.debug > 0 && !by.isGenericIntConst() { b.Func.Warnl(v.Pos, "Proved %v bounded", v.Op) } } @@ -1692,6 +2030,7 @@ func removeBranch(b *Block, branch branch) { } // isNonNegative reports whether v is known to be greater or equal to zero. +// TODO: no longer used by the prove pass; move elsewhere. func isNonNegative(v *Value) bool { if !v.Type.IsInteger() { v.Fatalf("isNonNegative bad type: %v", v.Type) diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index 5bc03083628117..07004dea96052c 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -1188,6 +1188,8 @@ func logRule(s string) { var ruleFile io.Writer +// TODO: replace these with the built-in min/max once they are available +// during bootstrap (when bootstrapping with 1.21 or later). func min(x, y int64) int64 { if x < y { return x @@ -1200,6 +1202,18 @@ func max(x, y int64) int64 { } return y } +func minU(x, y uint64) uint64 { + if x < y { + return x + } + return y +} +func maxU(x, y uint64) uint64 { + if x > y { + return x + } + return y +} func isConstZero(v *Value) bool { switch v.Op { diff --git a/test/checkbce.go b/test/checkbce.go index 71acfb71ac17d4..49d047443e09a4 100644 --- a/test/checkbce.go +++ b/test/checkbce.go @@ -159,16 +159,14 @@ func decode1(data []byte) (x uint64) { } func decode2(data []byte) (x uint64) { - // TODO(rasky): this should behave like decode1 and compile to no - // boundchecks. We're currently not able to remove all of them. for len(data) >= 32 { x += binary.BigEndian.Uint64(data) data = data[8:] - x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$" + x += binary.BigEndian.Uint64(data) data = data[8:] - x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$" + x += binary.BigEndian.Uint64(data) data = data[8:] - x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$" + x += binary.BigEndian.Uint64(data) data = data[8:] } return x diff --git a/test/codegen/comparisons.go b/test/codegen/comparisons.go index e585045aa4730e..909cf954b14d38 100644 --- a/test/codegen/comparisons.go +++ b/test/codegen/comparisons.go @@ -268,7 +268,7 @@ func CmpToZero(a, b, d int32, e, f int64, deOptC0, deOptC1 bool) int32 { } } -func CmpLogicalToZero(a, b, c uint32, d, e uint64) uint64 { +func CmpLogicalToZero(a, b, c uint32, d, e, f, g uint64) uint64 { // ppc64x:"ANDCC",-"CMPW" // wasm:"I64Eqz",-"I32Eqz",-"I64ExtendI32U",-"I32WrapI64" @@ -289,7 +289,7 @@ func CmpLogicalToZero(a, b, c uint32, d, e uint64) uint64 { } // ppc64x:"ORCC",-"CMP" // wasm:"I64Eqz",-"I32Eqz",-"I64ExtendI32U",-"I32WrapI64" - if d|e == 0 { + if f|g == 0 { return 1 } diff --git a/test/loopbce.go b/test/loopbce.go index 04c186be0eb194..2d5c965ae700bb 100644 --- a/test/loopbce.go +++ b/test/loopbce.go @@ -27,7 +27,7 @@ func f0c(a []int) int { x := 0 for i := range a { // ERROR "Induction variable: limits \[0,\?\), increment 1$" b := a[:i+1] // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" - x += b[0] + x += b[0] // ERROR "(\([0-9]+\) )?Proved IsInBounds$" } return x } @@ -168,7 +168,7 @@ func g2() int { func g3a() { a := "this string has length 25" for i := 0; i < len(a); i += 5 { // ERROR "Induction variable: limits \[0,20\], increment 5$" - useString(a[i:]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" + useString(a[i:]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" useString(a[:i+3]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" useString(a[:i+5]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" useString(a[:i+6]) @@ -294,8 +294,10 @@ func k3neg2(a [100]int) [100]int { } func k4(a [100]int) [100]int { - min := (-1) << 63 - for i := min; i < min+50; i++ { // ERROR "Induction variable: limits \[-9223372036854775808,-9223372036854775758\), increment 1$" + // Note: can't use (-1)<<63 here, because i-min doesn't get rewritten to i+(-min), + // and it isn't worth adding that special case to prove. + min := (-1)<<63 + 1 + for i := min; i < min+50; i++ { // ERROR "Induction variable: limits \[-9223372036854775807,-9223372036854775757\), increment 1$" a[i-min] = i // ERROR "(\([0-9]+\) )?Proved IsInBounds$" } return a @@ -314,7 +316,7 @@ func d1(a [100]int) [100]int { for i := 0; i < 100; i++ { // ERROR "Induction variable: limits \[0,100\), increment 1$" for j := 0; j < i; j++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" a[j] = 0 // ERROR "Proved IsInBounds$" - a[j+1] = 0 // FIXME: this boundcheck should be eliminated + a[j+1] = 0 // ERROR "Proved IsInBounds$" a[j+2] = 0 } } @@ -325,7 +327,7 @@ func d2(a [100]int) [100]int { for i := 0; i < 100; i++ { // ERROR "Induction variable: limits \[0,100\), increment 1$" for j := 0; i > j; j++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" a[j] = 0 // ERROR "Proved IsInBounds$" - a[j+1] = 0 // FIXME: this boundcheck should be eliminated + a[j+1] = 0 // ERROR "Proved IsInBounds$" a[j+2] = 0 } } @@ -419,12 +421,12 @@ func nobce2(a string) { for i := int64(0); i < int64(len(a))-31337; i++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" useString(a[i:]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" } - for i := int64(0); i < int64(len(a))+int64(-1<<63); i++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" - useString(a[i:]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" + for i := int64(0); i < int64(len(a))+int64(-1<<63); i++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" "Disproved Less64" + useString(a[i:]) } j := int64(len(a)) - 123 - for i := int64(0); i < j+123+int64(-1<<63); i++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" - useString(a[i:]) // ERROR "(\([0-9]+\) )?Proved IsSliceInBounds$" + for i := int64(0); i < j+123+int64(-1<<63); i++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" "Disproved Less64" + useString(a[i:]) } for i := int64(0); i < j+122+int64(-1<<63); i++ { // ERROR "Induction variable: limits \[0,\?\), increment 1$" // len(a)-123+122+MinInt overflows when len(a) == 0, so a bound check is needed here diff --git a/test/prove.go b/test/prove.go index 0d93db905ae871..70466ce2c5132c 100644 --- a/test/prove.go +++ b/test/prove.go @@ -400,8 +400,8 @@ func f13f(a, b int64) int64 { if b != math.MaxInt64 { return 42 } - if a > b { - if a == 0 { // ERROR "Disproved Eq64$" + if a > b { // ERROR "Disproved Less64$" + if a == 0 { return 1 } } @@ -684,20 +684,6 @@ func constsuffix(s string) bool { return suffix(s, "abc") // ERROR "Proved IsSliceInBounds$" } -// oforuntil tests the pattern created by OFORUNTIL blocks. These are -// handled by addLocalInductiveFacts rather than findIndVar. -func oforuntil(b []int) { - i := 0 - if len(b) > i { - top: - println(b[i]) // ERROR "Induction variable: limits \[0,\?\), increment 1$" "Proved IsInBounds$" - i++ - if i < len(b) { - goto top - } - } -} - func atexit(foobar []func()) { for i := len(foobar) - 1; i >= 0; i-- { // ERROR "Induction variable: limits \[0,\?\], increment 1" f := foobar[i] @@ -877,11 +863,11 @@ func unrollDecMin(a []int, b int) int { return 42 } var i, x int - for i = len(a); i >= b; i -= 2 { + for i = len(a); i >= b; i -= 2 { // ERROR "Proved Leq64" x += a[i-1] x += a[i-2] } - if i == 1 { // ERROR "Disproved Eq64$" + if i == 1 { x += a[i-1] } return x @@ -893,11 +879,11 @@ func unrollIncMin(a []int, b int) int { return 42 } var i, x int - for i = len(a); i >= b; i += 2 { + for i = len(a); i >= b; i += 2 { // ERROR "Proved Leq64" x += a[i-1] x += a[i-2] } - if i == 1 { // ERROR "Disproved Eq64$" + if i == 1 { x += a[i-1] } return x @@ -1107,7 +1093,7 @@ func modu2(x, y uint) int { func issue57077(s []int) (left, right []int) { middle := len(s) / 2 - left = s[:middle] // ERROR "Proved IsSliceInBounds$" + left = s[:middle] // ERROR "Proved IsSliceInBounds$" right = s[middle:] // ERROR "Proved IsSliceInBounds$" return } @@ -1124,6 +1110,43 @@ func issue45928(x int) { useInt(combinedFrac) } +func constantBounds1(i, j uint) int { + var a [10]int + if j < 11 && i < j { + return a[i] // ERROR "Proved IsInBounds$" + } + return 0 +} + +func constantBounds2(i, j uint) int { + var a [10]int + if i < j && j < 11 { + return a[i] // ERROR "Proved IsInBounds" + } + return 0 +} + +func constantBounds3(i, j, k, l uint) int { + var a [8]int + if i < j && j < k && k < l && l < 11 { + return a[i] // ERROR "Proved IsInBounds" + } + return 0 +} + +func equalityPropagation(a [1]int, i, j uint) int { + if i == j && i == 5 { + return a[j-5] // ERROR "Proved IsInBounds" + } + return 0 +} +func inequalityPropagation(a [1]int, i, j uint) int { + if i != j && j >= 5 && j <= 6 && i == 5 { + return a[j-6] // ERROR "Proved IsInBounds" + } + return 0 +} + //go:noinline func useInt(a int) { } diff --git a/test/prove_constant_folding.go b/test/prove_constant_folding.go index ed63e6851c264b..bca96847ba6441 100644 --- a/test/prove_constant_folding.go +++ b/test/prove_constant_folding.go @@ -14,7 +14,7 @@ func f0i(x int) int { } if (x + 20) == 20 { - return x + 5 // ERROR "Proved.+is constant 0$" + return x + 5 // ERROR "Proved.+is constant 0$" "Proved.+is constant 5$" } return x / 2 @@ -26,7 +26,7 @@ func f0u(x uint) uint { } if (x + 20) == 20 { - return x + 5 // ERROR "Proved.+is constant 0$" + return x + 5 // ERROR "Proved.+is constant 0$" "Proved.+is constant 5$" } return x / 2 From a4a130f6d065187e1b7f4963792af5d5e84efa3c Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Thu, 27 Jun 2024 15:53:24 -0700 Subject: [PATCH 194/866] cmd/compile: propagate constant ranges through multiplies and shifts Fixes #40704 Fixes #66826 Change-Id: Ia9c356e29b2ed6f2e3bc6e5eb9304cd4dccb4263 Reviewed-on: https://go-review.googlesource.com/c/go/+/599256 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/prove.go | 70 ++++++++++++++++++++++++++- test/prove.go | 12 +++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index df3566985fa252..6091950be8bf33 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -8,6 +8,7 @@ import ( "cmd/internal/src" "fmt" "math" + "math/bits" ) type branch int @@ -311,6 +312,40 @@ func (l limit) sub(l2 limit, b uint) limit { return r } +// same as add but for multiplication. +func (l limit) mul(l2 limit, b uint) limit { + r := noLimit + umaxhi, umaxlo := bits.Mul64(l.umax, l2.umax) + if umaxhi == 0 && fitsInBitsU(umaxlo, b) { + r.umax = umaxlo + r.umin = l.umin * l2.umin + // Note: if the code containing this multiply is + // unreachable, then we may have umin>umax, and this + // multiply may overflow. But that's ok for + // unreachable code. If this code is reachable, we + // know umin<=umax, so this multiply will not overflow + // because the max multiply didn't. + } + // Signed is harder, so don't bother. The only useful + // case is when we know both multiplicands are nonnegative, + // but that case is handled above because we would have then + // previously propagated signed info to the unsigned domain, + // and will propagate it back after the multiply. + return r +} + +// Similar to add, but compute 1 << l if it fits without overflow in b bits. +func (l limit) exp2(b uint) limit { + r := noLimit + if l.umax < uint64(b) { + r.umin = 1 << l.umin + r.umax = 1 << l.umax + // Same as above in mul, signed<->unsigned propagation + // will handle the signed case for us. + } + return r +} + var noLimit = limit{math.MinInt64, math.MaxInt64, 0, math.MaxUint64} // a limitFact is a limit known for a particular value. @@ -1548,6 +1583,39 @@ func (ft *factsTable) flowLimit(v *Value) bool { a := ft.limits[v.Args[0].ID] b := ft.limits[v.Args[1].ID] return ft.newLimit(v, a.sub(b, 8)) + case OpMul64: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b, 64)) + case OpMul32: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b, 32)) + case OpMul16: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b, 16)) + case OpMul8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b, 8)) + case OpLsh64x64, OpLsh64x32, OpLsh64x16, OpLsh64x8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b.exp2(64), 64)) + case OpLsh32x64, OpLsh32x32, OpLsh32x16, OpLsh32x8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b.exp2(32), 32)) + case OpLsh16x64, OpLsh16x32, OpLsh16x16, OpLsh16x8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b.exp2(16), 16)) + case OpLsh8x64, OpLsh8x32, OpLsh8x16, OpLsh8x8: + a := ft.limits[v.Args[0].ID] + b := ft.limits[v.Args[1].ID] + return ft.newLimit(v, a.mul(b.exp2(8), 8)) + case OpPhi: // Compute the union of all the input phis. // Often this will convey no information, because the block @@ -1834,7 +1902,7 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { OpRsh64x8, OpRsh64x16, OpRsh64x32, OpRsh64x64: // Check whether, for a >> b, we know that a is non-negative // and b is all of a's bits except the MSB. If so, a is shifted to zero. - bits := 8 * v.Type.Size() + bits := 8 * v.Args[0].Type.Size() if v.Args[1].isGenericIntConst() && v.Args[1].AuxInt >= bits-1 && ft.isNonNegative(v.Args[0]) { if b.Func.pass.debug > 0 { b.Func.Warnl(v.Pos, "Proved %v shifts to zero", v.Op) diff --git a/test/prove.go b/test/prove.go index 70466ce2c5132c..6cb30c6ce16cee 100644 --- a/test/prove.go +++ b/test/prove.go @@ -1147,6 +1147,18 @@ func inequalityPropagation(a [1]int, i, j uint) int { return 0 } +func issue66826a(a [21]byte) { + for i := 0; i <= 10; i++ { // ERROR "Induction variable: limits \[0,10\], increment 1$" + _ = a[2*i] // ERROR "Proved IsInBounds" + } +} +func issue66826b(a [31]byte, i int) { + if i < 0 || i > 10 { + return + } + _ = a[3*i] // ERROR "Proved IsInBounds" +} + //go:noinline func useInt(a int) { } From 5925cd3d15c7e1eb71125964e681c4b4c2db750d Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Sun, 7 Jul 2024 14:58:47 -0700 Subject: [PATCH 195/866] cmd/compile: handle boolean and pointer relations The constant lattice for these types is pretty simple. We no longer need the old-style facts table, as the ordering table now has all that information. Change-Id: If0e118c27a4de8e9bfd727b78942185c2eb50c4b Reviewed-on: https://go-review.googlesource.com/c/go/+/599097 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/ssa/prove.go | 365 +++++++++++++++++--------- test/fuse.go | 8 +- test/prove.go | 22 ++ 3 files changed, 263 insertions(+), 132 deletions(-) diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 6091950be8bf33..c8d2ab7a6f6893 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -128,9 +128,18 @@ type fact struct { } // a limit records known upper and lower bounds for a value. +// +// If we have min>max or umin>umax, then this limit is +// called "unsatisfiable". When we encounter such a limit, we +// know that any code for which that limit applies is unreachable. +// We don't particularly care how unsatisfiable limits propagate, +// including becoming satisfiable, because any optimization +// decisions based on those limits only apply to unreachable code. type limit struct { min, max int64 // min <= value <= max, signed umin, umax uint64 // umin <= value <= umax, unsigned + // For booleans, we use 0==false, 1==true for both ranges + // For pointers, we use 0,0,0,0 for nil and minInt64,maxInt64,1,maxUint64 for nonnil } func (l limit) String() string { @@ -359,8 +368,9 @@ type ordering struct { next *ordering // linked list of all known orderings for v. // Note: v is implicit here, determined by which linked list it is in. w *Value - d domain // one of signed or unsigned + d domain r relation // one of ==,!=,<,<=,>,>= + // if d is boolean or pointer, r can only be ==, != } // factsTable keeps track of relations between pairs of values. @@ -379,9 +389,6 @@ type factsTable struct { unsat bool // true if facts contains a contradiction unsatDepth int // number of unsat checkpoints - facts map[pair]relation // current known set of relation - stack []fact // previous sets of relations - // order* is a couple of partial order sets that record information // about relations between SSA values in the signed and unsigned // domain. @@ -423,8 +430,6 @@ func newFactsTable(f *Func) *factsTable { ft.orderS.SetUnsigned(false) ft.orderU.SetUnsigned(true) ft.orderings = make(map[ID]*ordering) - ft.facts = make(map[pair]relation) - ft.stack = make([]fact, 4) ft.limits = f.Cache.allocLimitSlice(f.NumValues()) for _, b := range f.Blocks { for _, v := range b.Values { @@ -471,6 +476,21 @@ func (ft *factsTable) unsignedMinMax(v *Value, min, max uint64) bool { return ft.newLimit(v, limit{min: math.MinInt64, max: math.MaxInt64, umin: min, umax: max}) } +func (ft *factsTable) booleanFalse(v *Value) bool { + return ft.newLimit(v, limit{min: 0, max: 0, umin: 0, umax: 0}) +} +func (ft *factsTable) booleanTrue(v *Value) bool { + return ft.newLimit(v, limit{min: 1, max: 1, umin: 1, umax: 1}) +} +func (ft *factsTable) pointerNil(v *Value) bool { + return ft.newLimit(v, limit{min: 0, max: 0, umin: 0, umax: 0}) +} +func (ft *factsTable) pointerNonNil(v *Value) bool { + l := noLimit + l.umin = 1 + return ft.newLimit(v, l) +} + // newLimit adds new limiting information for v. // Returns true if the new limit added any new information. func (ft *factsTable) newLimit(v *Value, newLim limit) bool { @@ -574,6 +594,38 @@ func (ft *factsTable) newLimit(v *Value, newLim limit) bool { } } } + case boolean: + switch o.r { + case eq: + if lim.min == 0 && lim.max == 0 { // constant false + ft.booleanFalse(o.w) + } + if lim.min == 1 && lim.max == 1 { // constant true + ft.booleanTrue(o.w) + } + case lt | gt: + if lim.min == 0 && lim.max == 0 { // constant false + ft.booleanTrue(o.w) + } + if lim.min == 1 && lim.max == 1 { // constant true + ft.booleanFalse(o.w) + } + } + case pointer: + switch o.r { + case eq: + if lim.umax == 0 { // nil + ft.pointerNil(o.w) + } + if lim.umin > 0 { // non-nil + ft.pointerNonNil(o.w) + } + case lt | gt: + if lim.umax == 0 { // nil + ft.pointerNonNil(o.w) + } + // note: not equal to non-nil doesn't tell us anything. + } } } @@ -647,122 +699,163 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { ft.unsat = true return } - } else { - if lessByID(w, v) { - v, w = w, v - r = reverseBits[r] - } - - p := pair{v, w, d} - oldR, ok := ft.facts[p] - if !ok { - if v == w { - oldR = eq - } else { - oldR = lt | eq | gt - } - } - // No changes compared to information already in facts table. - if oldR == r { - return - } - ft.stack = append(ft.stack, fact{p, oldR}) - ft.facts[p] = oldR & r - // If this relation is not satisfiable, mark it and exit right away - if oldR&r == 0 { - if parent.Func.pass.debug > 2 { - parent.Func.Warnl(parent.Pos, "unsat %s %s %s", v, w, r) + } + if d == boolean || d == pointer { + for o := ft.orderings[v.ID]; o != nil; o = o.next { + if o.d == d && o.w == w { + // We already know a relationship between v and w. + // Either it is a duplicate, or it is a contradiction, + // as we only allow eq and lt|gt for these domains, + if o.r != r { + ft.unsat = true + } + return } - ft.unsat = true - return } + // TODO: this does not do transitive equality. + // We could use a poset like above, but somewhat degenerate (==,!= only). + ft.addOrdering(v, w, d, r) + ft.addOrdering(w, v, d, r) // note: reverseBits unnecessary for eq and lt|gt. } // Extract new constant limits based on the comparison. - if d == signed || d == unsigned { - vLimit := ft.limits[v.ID] - wLimit := ft.limits[w.ID] - // Note: all the +1/-1 below could overflow/underflow. Either will - // still generate correct results, it will just lead to imprecision. - // In fact if there is overflow/underflow, the corresponding - // code is unreachable because the known range is outside the range - // of the value's type. - switch d { - case signed: - switch r { - case eq: // v == w - ft.signedMinMax(v, wLimit.min, wLimit.max) - ft.signedMinMax(w, vLimit.min, vLimit.max) - case lt: // v < w - ft.signedMax(v, wLimit.max-1) - ft.signedMin(w, vLimit.min+1) - case lt | eq: // v <= w - ft.signedMax(v, wLimit.max) - ft.signedMin(w, vLimit.min) - case gt: // v > w - ft.signedMin(v, wLimit.min+1) - ft.signedMax(w, vLimit.max-1) - case gt | eq: // v >= w - ft.signedMin(v, wLimit.min) - ft.signedMax(w, vLimit.max) - case lt | gt: // v != w - if vLimit.min == vLimit.max { // v is a constant - c := vLimit.min - if wLimit.min == c { - ft.signedMin(w, c+1) - } - if wLimit.max == c { - ft.signedMax(w, c-1) - } + vLimit := ft.limits[v.ID] + wLimit := ft.limits[w.ID] + // Note: all the +1/-1 below could overflow/underflow. Either will + // still generate correct results, it will just lead to imprecision. + // In fact if there is overflow/underflow, the corresponding + // code is unreachable because the known range is outside the range + // of the value's type. + switch d { + case signed: + switch r { + case eq: // v == w + ft.signedMinMax(v, wLimit.min, wLimit.max) + ft.signedMinMax(w, vLimit.min, vLimit.max) + case lt: // v < w + ft.signedMax(v, wLimit.max-1) + ft.signedMin(w, vLimit.min+1) + case lt | eq: // v <= w + ft.signedMax(v, wLimit.max) + ft.signedMin(w, vLimit.min) + case gt: // v > w + ft.signedMin(v, wLimit.min+1) + ft.signedMax(w, vLimit.max-1) + case gt | eq: // v >= w + ft.signedMin(v, wLimit.min) + ft.signedMax(w, vLimit.max) + case lt | gt: // v != w + if vLimit.min == vLimit.max { // v is a constant + c := vLimit.min + if wLimit.min == c { + ft.signedMin(w, c+1) } - if wLimit.min == wLimit.max { // w is a constant - c := wLimit.min - if vLimit.min == c { - ft.signedMin(v, c+1) - } - if vLimit.max == c { - ft.signedMax(v, c-1) - } + if wLimit.max == c { + ft.signedMax(w, c-1) } } - case unsigned: - switch r { - case eq: // v == w - ft.unsignedMinMax(v, wLimit.umin, wLimit.umax) - ft.unsignedMinMax(w, vLimit.umin, vLimit.umax) - case lt: // v < w - ft.unsignedMax(v, wLimit.umax-1) - ft.unsignedMin(w, vLimit.umin+1) - case lt | eq: // v <= w - ft.unsignedMax(v, wLimit.umax) - ft.unsignedMin(w, vLimit.umin) - case gt: // v > w - ft.unsignedMin(v, wLimit.umin+1) - ft.unsignedMax(w, vLimit.umax-1) - case gt | eq: // v >= w - ft.unsignedMin(v, wLimit.umin) - ft.unsignedMax(w, vLimit.umax) - case lt | gt: // v != w - if vLimit.umin == vLimit.umax { // v is a constant - c := vLimit.umin - if wLimit.umin == c { - ft.unsignedMin(w, c+1) - } - if wLimit.umax == c { - ft.unsignedMax(w, c-1) - } + if wLimit.min == wLimit.max { // w is a constant + c := wLimit.min + if vLimit.min == c { + ft.signedMin(v, c+1) } - if wLimit.umin == wLimit.umax { // w is a constant - c := wLimit.umin - if vLimit.umin == c { - ft.unsignedMin(v, c+1) - } - if vLimit.umax == c { - ft.unsignedMax(v, c-1) - } + if vLimit.max == c { + ft.signedMax(v, c-1) + } + } + } + case unsigned: + switch r { + case eq: // v == w + ft.unsignedMinMax(v, wLimit.umin, wLimit.umax) + ft.unsignedMinMax(w, vLimit.umin, vLimit.umax) + case lt: // v < w + ft.unsignedMax(v, wLimit.umax-1) + ft.unsignedMin(w, vLimit.umin+1) + case lt | eq: // v <= w + ft.unsignedMax(v, wLimit.umax) + ft.unsignedMin(w, vLimit.umin) + case gt: // v > w + ft.unsignedMin(v, wLimit.umin+1) + ft.unsignedMax(w, vLimit.umax-1) + case gt | eq: // v >= w + ft.unsignedMin(v, wLimit.umin) + ft.unsignedMax(w, vLimit.umax) + case lt | gt: // v != w + if vLimit.umin == vLimit.umax { // v is a constant + c := vLimit.umin + if wLimit.umin == c { + ft.unsignedMin(w, c+1) + } + if wLimit.umax == c { + ft.unsignedMax(w, c-1) + } + } + if wLimit.umin == wLimit.umax { // w is a constant + c := wLimit.umin + if vLimit.umin == c { + ft.unsignedMin(v, c+1) + } + if vLimit.umax == c { + ft.unsignedMax(v, c-1) } } } + case boolean: + switch r { + case eq: // v == w + if vLimit.min == 1 { // v is true + ft.booleanTrue(w) + } + if vLimit.max == 0 { // v is false + ft.booleanFalse(w) + } + if wLimit.min == 1 { // w is true + ft.booleanTrue(v) + } + if wLimit.max == 0 { // w is false + ft.booleanFalse(v) + } + case lt | gt: // v != w + if vLimit.min == 1 { // v is true + ft.booleanFalse(w) + } + if vLimit.max == 0 { // v is false + ft.booleanTrue(w) + } + if wLimit.min == 1 { // w is true + ft.booleanFalse(v) + } + if wLimit.max == 0 { // w is false + ft.booleanTrue(v) + } + } + case pointer: + switch r { + case eq: // v == w + if vLimit.umax == 0 { // v is nil + ft.pointerNil(w) + } + if vLimit.umin > 0 { // v is non-nil + ft.pointerNonNil(w) + } + if wLimit.umax == 0 { // w is nil + ft.pointerNil(v) + } + if wLimit.umin > 0 { // w is non-nil + ft.pointerNonNil(v) + } + case lt | gt: // v != w + if vLimit.umax == 0 { // v is nil + ft.pointerNonNil(w) + } + if wLimit.umax == 0 { // w is nil + ft.pointerNonNil(v) + } + // Note: the other direction doesn't work. + // Being not equal to a non-nil pointer doesn't + // make you (necessarily) a nil pointer. + } } // Derived facts below here are only about numbers. @@ -970,7 +1063,6 @@ func (ft *factsTable) checkpoint() { if ft.unsat { ft.unsatDepth++ } - ft.stack = append(ft.stack, checkpointFact) ft.limitStack = append(ft.limitStack, checkpointBound) ft.orderS.Checkpoint() ft.orderU.Checkpoint() @@ -986,18 +1078,6 @@ func (ft *factsTable) restore() { } else { ft.unsat = false } - for { - old := ft.stack[len(ft.stack)-1] - ft.stack = ft.stack[:len(ft.stack)-1] - if old == checkpointFact { - break - } - if old.r == lt|eq|gt { - delete(ft.facts, old.p) - } else { - ft.facts[old.p] = old.r - } - } for { old := ft.limitStack[len(ft.limitStack)-1] ft.limitStack = ft.limitStack[:len(ft.limitStack)-1] @@ -1050,12 +1130,14 @@ var ( OpEq32: {signed | unsigned, eq}, OpEq64: {signed | unsigned, eq}, OpEqPtr: {pointer, eq}, + OpEqB: {boolean, eq}, OpNeq8: {signed | unsigned, lt | gt}, OpNeq16: {signed | unsigned, lt | gt}, OpNeq32: {signed | unsigned, lt | gt}, OpNeq64: {signed | unsigned, lt | gt}, OpNeqPtr: {pointer, lt | gt}, + OpNeqB: {boolean, lt | gt}, OpLess8: {signed, lt}, OpLess8U: {unsigned, lt}, @@ -1407,8 +1489,28 @@ func prove(f *Func) { // flowLimit, below, which computes additional constraints based on // ranges of opcode arguments). func initLimit(v *Value) limit { + if v.Type.IsBoolean() { + switch v.Op { + case OpConstBool: + b := v.AuxInt + return limit{min: b, max: b, umin: uint64(b), umax: uint64(b)} + default: + return limit{min: 0, max: 1, umin: 0, umax: 1} + } + } + if v.Type.IsPtrShaped() { // These are the types that EqPtr/NeqPtr operate on, except uintptr. + switch v.Op { + case OpConstNil: + return limit{min: 0, max: 0, umin: 0, umax: 0} + case OpAddr, OpLocalAddr: // TODO: others? + l := noLimit + l.umin = 1 + return l + default: + return noLimit + } + } if !v.Type.IsInteger() { - // TODO: boolean? return noLimit } @@ -1700,9 +1802,9 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { c := b.Controls[0] switch { case br == negative: - addRestrictions(b, ft, boolean, nil, c, eq) + ft.booleanFalse(c) case br == positive: - addRestrictions(b, ft, boolean, nil, c, lt|gt) + ft.booleanTrue(c) case br >= jumpTable0: idx := br - jumpTable0 val := int64(idx) @@ -1769,7 +1871,14 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) } } - + } + if c.Op == OpIsNonNil { + switch br { + case positive: + ft.pointerNonNil(c.Args[0]) + case negative: + ft.pointerNil(c.Args[0]) + } } } @@ -1984,7 +2093,7 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // Helps in cases where we reuse a value after branching on its equality. for i, arg := range v.Args { switch arg.Op { - case OpConst64, OpConst32, OpConst16, OpConst8: + case OpConst64, OpConst32, OpConst16, OpConst8, OpConstBool, OpConstNil: continue } lim := ft.limits[arg.ID] diff --git a/test/fuse.go b/test/fuse.go index e9205dcc2355fb..9366b218587f76 100644 --- a/test/fuse.go +++ b/test/fuse.go @@ -148,11 +148,11 @@ func fEqInterEqInter(a interface{}, f float64) bool { } func fEqInterNeqInter(a interface{}, f float64) bool { - return a == nil && f > Cf2 || a != nil && f < -Cf2 + return a == nil && f > Cf2 || a != nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil" } func fNeqInterEqInter(a interface{}, f float64) bool { - return a != nil && f > Cf2 || a == nil && f < -Cf2 + return a != nil && f > Cf2 || a == nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil" } func fNeqInterNeqInter(a interface{}, f float64) bool { @@ -164,11 +164,11 @@ func fEqSliceEqSlice(a []int, f float64) bool { } func fEqSliceNeqSlice(a []int, f float64) bool { - return a == nil && f > Cf2 || a != nil && f < -Cf2 + return a == nil && f > Cf2 || a != nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil" } func fNeqSliceEqSlice(a []int, f float64) bool { - return a != nil && f > Cf2 || a == nil && f < -Cf2 + return a != nil && f > Cf2 || a == nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil" } func fNeqSliceNeqSlice(a []int, f float64) bool { diff --git a/test/prove.go b/test/prove.go index 6cb30c6ce16cee..b85ee5fe0d4d79 100644 --- a/test/prove.go +++ b/test/prove.go @@ -1159,6 +1159,28 @@ func issue66826b(a [31]byte, i int) { _ = a[3*i] // ERROR "Proved IsInBounds" } +func f20(a, b bool) int { + if a == b { + if a { + if b { // ERROR "Proved Arg" + return 1 + } + } + } + return 0 +} + +func f21(a, b *int) int { + if a == b { + if a != nil { + if b != nil { // ERROR "Proved IsNonNil" + return 1 + } + } + } + return 0 +} + //go:noinline func useInt(a int) { } From f32ec41df52379f957a5544cdc53992c57bb629e Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Thu, 11 Jul 2024 12:10:10 -0700 Subject: [PATCH 196/866] cmd/compile: reorganize prove pass domain relation table Move some code from when we learn that we take a branch, to when we learn that a boolean is true or false. It is more consistent this way (and may lead to a few more cases where we can derive useful relations). Change-Id: Iea7b2d6740e10c9c71c4b1546881f501da81cd21 Reviewed-on: https://go-review.googlesource.com/c/go/+/599098 LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/ssa/prove.go | 121 ++++++++++++++------------ test/prove.go | 12 +++ 2 files changed, 75 insertions(+), 58 deletions(-) diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index c8d2ab7a6f6893..0bf4e32729dca7 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -629,6 +629,67 @@ func (ft *factsTable) newLimit(v *Value, newLim limit) bool { } } + // If this is new known constant for a boolean value, + // extract relation between its args. For example, if + // We learn v is false, and v is defined as a=b. + if v.Type.IsBoolean() { + // If we reach here, is is because we have a more restrictive + // value for v than the default. The only two such values + // are constant true or constant false. + if lim.min != lim.max { + v.Block.Func.Fatalf("boolean not constant %v", v) + } + isTrue := lim.min == 1 + if dr, ok := domainRelationTable[v.Op]; ok && v.Op != OpIsInBounds && v.Op != OpIsSliceInBounds { + d := dr.d + r := dr.r + if d == signed && ft.isNonNegative(v.Args[0]) && ft.isNonNegative(v.Args[1]) { + d |= unsigned + } + if !isTrue { + r ^= (lt | gt | eq) + } + // TODO: v.Block is wrong? + addRestrictions(v.Block, ft, d, v.Args[0], v.Args[1], r) + } + switch v.Op { + case OpIsNonNil: + if isTrue { + ft.pointerNonNil(v.Args[0]) + } else { + ft.pointerNil(v.Args[0]) + } + case OpIsInBounds, OpIsSliceInBounds: + // 0 <= a0 < a1 (or 0 <= a0 <= a1) + r := lt + if v.Op == OpIsSliceInBounds { + r |= eq + } + if isTrue { + // On the positive branch, we learn: + // signed: 0 <= a0 < a1 (or 0 <= a0 <= a1) + // unsigned: a0 < a1 (or a0 <= a1) + ft.setNonNegative(v.Args[0]) + ft.update(v.Block, v.Args[0], v.Args[1], signed, r) + ft.update(v.Block, v.Args[0], v.Args[1], unsigned, r) + } else { + // On the negative branch, we learn (0 > a0 || + // a0 >= a1). In the unsigned domain, this is + // simply a0 >= a1 (which is the reverse of the + // positive branch, so nothing surprising). + // But in the signed domain, we can't express the || + // condition, so check if a0 is non-negative instead, + // to be able to learn something. + r ^= (lt | gt | eq) // >= (index) or > (slice) + if ft.isNonNegative(v.Args[0]) { + ft.update(v.Block, v.Args[0], v.Args[1], signed, r) + } + ft.update(v.Block, v.Args[0], v.Args[1], unsigned, r) + // TODO: v.Block is wrong here + } + } + } + return true } @@ -1119,8 +1180,8 @@ var ( // For example: // OpLess8: {signed, lt}, // v1 = (OpLess8 v2 v3). - // If v1 branch is taken then we learn that the rangeMask - // can be at most lt. + // If we learn that v1 is true, then we can deduce that v2 a0 || - // a0 >= a1). In the unsigned domain, this is - // simply a0 >= a1 (which is the reverse of the - // positive branch, so nothing surprising). - // But in the signed domain, we can't express the || - // condition, so check if a0 is non-negative instead, - // to be able to learn something. - switch br { - case negative: - d = unsigned - if ft.isNonNegative(c.Args[0]) { - d |= signed - } - addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r^(lt|gt|eq)) - case positive: - ft.setNonNegative(c.Args[0]) - addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) - } - default: - switch br { - case negative: - addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r^(lt|gt|eq)) - case positive: - addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) - } - } - } - if c.Op == OpIsNonNil { - switch br { - case positive: - ft.pointerNonNil(c.Args[0]) - case negative: - ft.pointerNil(c.Args[0]) - } - } } // addRestrictions updates restrictions from the immediate diff --git a/test/prove.go b/test/prove.go index b85ee5fe0d4d79..32096eafff7ca5 100644 --- a/test/prove.go +++ b/test/prove.go @@ -1181,6 +1181,18 @@ func f21(a, b *int) int { return 0 } +func f22(b bool, x, y int) int { + b2 := x < y + if b == b2 { + if b { + if x >= y { // ERROR "Disproved Leq64$" + return 1 + } + } + } + return 0 +} + //go:noinline func useInt(a int) { } From aba16d17c5c674416a322c16f8baba063fafa988 Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Thu, 11 Jul 2024 12:36:32 -0700 Subject: [PATCH 197/866] cmd/compile: simplify jump table case in prove pass Change-Id: I01e0c4953667594b84daaa38082fad1175343861 Reviewed-on: https://go-review.googlesource.com/c/go/+/599196 LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/ssa/prove.go | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 0bf4e32729dca7..51bb6adff051f0 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -1869,19 +1869,7 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { c = v val -= off } - old := ft.limits[c.ID] - ft.limitStack = append(ft.limitStack, limitFact{c.ID, old}) - if val < old.min || val > old.max || uint64(val) < old.umin || uint64(val) > old.umax { - ft.unsat = true - if b.Func.pass.debug > 2 { - b.Func.Warnl(b.Pos, "block=%s outedge=%d %s=%d unsat", b, idx, c, val) - } - } else { - ft.limits[c.ID] = limit{val, val, uint64(val), uint64(val)} - if b.Func.pass.debug > 2 { - b.Func.Warnl(b.Pos, "block=%s outedge=%d %s=%d", b, idx, c, val) - } - } + ft.newLimit(c, limit{min: val, max: val, umin: uint64(val), umax: uint64(val)}) default: panic("unknown branch") } From 9b4268c3df9dcc46a7185a6095ea6e2e685ace66 Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Thu, 11 Jul 2024 19:38:33 -0700 Subject: [PATCH 198/866] cmd/compile: simplify prove pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We don't need noLimit checks in a bunch of places. Also simplify folding of provable constant results. At this point in the CL stack, compilebench reports no performance changes. The only thing of note is that binaries got a bit smaller. name old text-bytes new text-bytes delta HelloSize 960kB ± 0% 952kB ± 0% -0.83% (p=0.000 n=10+10) CmdGoSize 12.3MB ± 0% 12.1MB ± 0% -1.53% (p=0.000 n=10+10) Change-Id: Id4be75eec0f8c93f2f3b93a8521ce2278ee2ee2c Reviewed-on: https://go-review.googlesource.com/c/go/+/599197 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/ssa/prove.go | 97 +++++++++++---------------- test/codegen/bool.go | 43 +++++++----- test/codegen/writebarrier.go | 10 +++ 3 files changed, 76 insertions(+), 74 deletions(-) diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 51bb6adff051f0..c2ac6ca40f44d8 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -975,13 +975,13 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { // // Useful for i > 0; s[i-1]. lim := ft.limits[x.ID] - if lim != noLimit && ((d == signed && lim.min > opMin[v.Op]) || (d == unsigned && lim.umin > 0)) { + if (d == signed && lim.min > opMin[v.Op]) || (d == unsigned && lim.umin > 0) { ft.update(parent, x, w, d, gt) } } else if x, delta := isConstDelta(w); x != nil && delta == 1 { // v >= x+1 && x < max ⇒ v > x lim := ft.limits[x.ID] - if lim != noLimit && ((d == signed && lim.max < opMax[w.Op]) || (d == unsigned && lim.umax < opUMax[w.Op])) { + if (d == signed && lim.max < opMax[w.Op]) || (d == unsigned && lim.umax < opUMax[w.Op]) { ft.update(parent, v, x, d, gt) } } @@ -995,7 +995,8 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { parent.Func.Warnl(parent.Pos, "x+d %s w; x:%v %v delta:%v w:%v d:%v", r, x, parent.String(), delta, w.AuxInt, d) } underflow := true - if l := ft.limits[x.ID]; l != noLimit && delta < 0 { + if delta < 0 { + l := ft.limits[x.ID] if (x.Type.Size() == 8 && l.min >= math.MinInt64-delta) || (x.Type.Size() == 4 && l.min >= math.MinInt32-delta) { underflow = false @@ -1061,16 +1062,15 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { if r == gt { min++ } - if l := ft.limits[x.ID]; l != noLimit { - if l.max <= min { - if r&eq == 0 || l.max < min { - // x>min (x>=min) is impossible, so it must be x<=max - ft.signedMax(x, max) - } - } else if l.min > max { - // x<=max is impossible, so it must be x>min - ft.signedMin(x, min) + l := ft.limits[x.ID] + if l.max <= min { + if r&eq == 0 || l.max < min { + // x>min (x>=min) is impossible, so it must be x<=max + ft.signedMax(x, max) } + } else if l.min > max { + // x<=max is impossible, so it must be x>min + ft.signedMin(x, min) } } } @@ -1969,9 +1969,6 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // slicemask(x + y) // if x is larger than -y (y is negative), then slicemask is -1. lim := ft.limits[x.ID] - if lim == noLimit { - break - } if lim.umin > uint64(-delta) { if v.Args[0].Op == OpAdd64 { v.reset(OpConst64) @@ -1989,9 +1986,6 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // Capture that information here for use in arch-specific optimizations. x := v.Args[0] lim := ft.limits[x.ID] - if lim == noLimit { - break - } if lim.umin > 0 || lim.min > 0 || lim.max < 0 { if b.Func.pass.debug > 0 { b.Func.Warnl(v.Pos, "Proved %v non-zero", v.Op) @@ -2038,9 +2032,6 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // is strictly less than the number of bits in a. by := v.Args[1] lim := ft.limits[by.ID] - if lim == noLimit { - break - } bits := 8 * v.Args[0].Type.Size() if lim.umax < uint64(bits) || (lim.max < bits && ft.isNonNegative(by)) { if by.isGenericIntConst() { @@ -2070,8 +2061,7 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { divrLim := ft.limits[divr.ID] divd := v.Args[0] divdLim := ft.limits[divd.ID] - if (divrLim != noLimit && (divrLim.max < -1 || divrLim.min > -1)) || - (divdLim != noLimit && divdLim.min > mostNegativeDividend[v.Op]) { + if divrLim.max < -1 || divrLim.min > -1 || divdLim.min > mostNegativeDividend[v.Op] { // See DivisionNeedsFixUp in rewrite.go. // v.AuxInt = 1 means we have proved both that the divisor is not -1 // and that the dividend is not the most negative integer, @@ -2085,51 +2075,46 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) { // Fold provable constant results. // Helps in cases where we reuse a value after branching on its equality. for i, arg := range v.Args { - switch arg.Op { - case OpConst64, OpConst32, OpConst16, OpConst8, OpConstBool, OpConstNil: - continue - } lim := ft.limits[arg.ID] - if lim == noLimit { - continue - } - var constValue int64 - typ := arg.Type - bits := 8 * typ.Size() switch { case lim.min == lim.max: constValue = lim.min case lim.umin == lim.umax: - // truncate then sign extand - switch bits { - case 64: - constValue = int64(lim.umin) - case 32: - constValue = int64(int32(lim.umin)) - case 16: - constValue = int64(int16(lim.umin)) - case 8: - constValue = int64(int8(lim.umin)) - default: - panic("unexpected integer size") - } + constValue = int64(lim.umin) default: continue } - var c *Value + switch arg.Op { + case OpConst64, OpConst32, OpConst16, OpConst8, OpConstBool, OpConstNil: + continue + } + typ := arg.Type f := b.Func - switch bits { - case 64: - c = f.ConstInt64(typ, constValue) - case 32: - c = f.ConstInt32(typ, int32(constValue)) - case 16: - c = f.ConstInt16(typ, int16(constValue)) - case 8: + var c *Value + switch { + case typ.IsBoolean(): + c = f.ConstBool(typ, constValue != 0) + case typ.IsInteger() && typ.Size() == 1: c = f.ConstInt8(typ, int8(constValue)) + case typ.IsInteger() && typ.Size() == 2: + c = f.ConstInt16(typ, int16(constValue)) + case typ.IsInteger() && typ.Size() == 4: + c = f.ConstInt32(typ, int32(constValue)) + case typ.IsInteger() && typ.Size() == 8: + c = f.ConstInt64(typ, constValue) + case typ.IsPtrShaped(): + if constValue == 0 { + c = f.ConstNil(typ) + } else { + // Not sure how this might happen, but if it + // does, just skip it. + continue + } default: - panic("unexpected integer size") + // Not sure how this might happen, but if it + // does, just skip it. + continue } v.SetArg(i, c) if b.Func.pass.debug > 1 { diff --git a/test/codegen/bool.go b/test/codegen/bool.go index 990a9ed1b1d8c7..0daeb88b9bf457 100644 --- a/test/codegen/bool.go +++ b/test/codegen/bool.go @@ -217,53 +217,53 @@ func TestSetInvGeFp64(x float64, y float64) bool { } func TestLogicalCompareZero(x *[64]uint64) { // ppc64x:"ANDCC",^"AND" - b := x[0]&3 - if b!=0 { + b := x[0] & 3 + if b != 0 { x[0] = b } // ppc64x:"ANDCC",^"AND" - b = x[1]&x[2] - if b!=0 { + b = x[1] & x[2] + if b != 0 { x[1] = b } // ppc64x:"ANDNCC",^"ANDN" - b = x[1]&^x[2] - if b!=0 { + b = x[1] &^ x[2] + if b != 0 { x[1] = b } // ppc64x:"ORCC",^"OR" - b = x[3]|x[4] - if b!=0 { + b = x[3] | x[4] + if b != 0 { x[3] = b } // ppc64x:"SUBCC",^"SUB" - b = x[5]-x[6] - if b!=0 { + b = x[5] - x[6] + if b != 0 { x[5] = b } // ppc64x:"NORCC",^"NOR" - b = ^(x[5]|x[6]) - if b!=0 { + b = ^(x[5] | x[6]) + if b != 0 { x[5] = b } // ppc64x:"XORCC",^"XOR" - b = x[7]^x[8] - if b!=0 { + b = x[7] ^ x[8] + if b != 0 { x[7] = b } // ppc64x:"ADDCC",^"ADD" - b = x[9]+x[10] - if b!=0 { + b = x[9] + x[10] + if b != 0 { x[9] = b } // ppc64x:"NEGCC",^"NEG" b = -x[11] - if b!=0 { + if b != 0 { x[11] = b } // ppc64x:"CNTLZDCC",^"CNTLZD" b = uint64(bits.LeadingZeros64(x[12])) - if b!=0 { + if b != 0 { x[12] = b } @@ -274,3 +274,10 @@ func TestLogicalCompareZero(x *[64]uint64) { } } + +func constantWrite(b bool, p *bool) { + if b { + // amd64:`MOVB\t[$]1, \(` + *p = b + } +} diff --git a/test/codegen/writebarrier.go b/test/codegen/writebarrier.go index cfcfe15a403856..e125973e7cf09f 100644 --- a/test/codegen/writebarrier.go +++ b/test/codegen/writebarrier.go @@ -53,3 +53,13 @@ func combine4slice(p *[4][]byte, a, b, c, d []byte) { // arm64:-`.*runtime[.]gcWriteBarrier` p[3] = d } + +func trickyWriteNil(p *int, q **int) { + if p == nil { + // We change "= p" to "= 0" in the prove pass, which + // means we have one less pointer that needs to go + // into the write barrier buffer. + // amd64:`.*runtime[.]gcWriteBarrier1` + *q = p + } +} From b97971ea2edbc29798e8a29a5e270698987a7f1d Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Fri, 19 Jul 2024 14:54:54 -0700 Subject: [PATCH 199/866] cmd/compile: rip out constant handling in poset data structure The prove pass now tracks possible constant values explicitly, so the poset data structure no longer has to. This simplifies a bunch of the special cases in poset. Change-Id: I0efff65269bc5d53c6d18e4760b0375cfb2ae8b7 Reviewed-on: https://go-review.googlesource.com/c/go/+/599795 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/ssa/poset.go | 272 ++------------------- src/cmd/compile/internal/ssa/poset_test.go | 132 ---------- 2 files changed, 27 insertions(+), 377 deletions(-) diff --git a/src/cmd/compile/internal/ssa/poset.go b/src/cmd/compile/internal/ssa/poset.go index 7b64843fe964d2..50b4d178892917 100644 --- a/src/cmd/compile/internal/ssa/poset.go +++ b/src/cmd/compile/internal/ssa/poset.go @@ -42,17 +42,16 @@ func (bs bitset) Test(idx uint32) bool { type undoType uint8 const ( - undoInvalid undoType = iota - undoCheckpoint // a checkpoint to group undo passes - undoSetChl // change back left child of undo.idx to undo.edge - undoSetChr // change back right child of undo.idx to undo.edge - undoNonEqual // forget that SSA value undo.ID is non-equal to undo.idx (another ID) - undoNewNode // remove new node created for SSA value undo.ID - undoNewConstant // remove the constant node idx from the constants map - undoAliasNode // unalias SSA value undo.ID so that it points back to node index undo.idx - undoNewRoot // remove node undo.idx from root list - undoChangeRoot // remove node undo.idx from root list, and put back undo.edge.Target instead - undoMergeRoot // remove node undo.idx from root list, and put back its children instead + undoInvalid undoType = iota + undoCheckpoint // a checkpoint to group undo passes + undoSetChl // change back left child of undo.idx to undo.edge + undoSetChr // change back right child of undo.idx to undo.edge + undoNonEqual // forget that SSA value undo.ID is non-equal to undo.idx (another ID) + undoNewNode // remove new node created for SSA value undo.ID + undoAliasNode // unalias SSA value undo.ID so that it points back to node index undo.idx + undoNewRoot // remove node undo.idx from root list + undoChangeRoot // remove node undo.idx from root list, and put back undo.edge.Target instead + undoMergeRoot // remove node undo.idx from root list, and put back its children instead ) // posetUndo represents an undo pass to be performed. @@ -67,7 +66,8 @@ type posetUndo struct { } const ( - // Make poset handle constants as unsigned numbers. + // Make poset handle values as unsigned numbers. + // (TODO: remove?) posetFlagUnsigned = 1 << iota ) @@ -124,14 +124,6 @@ type posetNode struct { // two SSA values to the same DAG node; when a new equality relation is recorded // between two existing nodes, the nodes are merged, adjusting incoming and outgoing edges. // -// Constants are specially treated. When a constant is added to the poset, it is -// immediately linked to other constants already present; so for instance if the -// poset knows that x<=3, and then x is tested against 5, 5 is first added and linked -// 3 (using 3<5), so that the poset knows that x<=3<5; at that point, it is able -// to answer x<5 correctly. This means that all constants are always within the same -// DAG; as an implementation detail, we enfoce that the DAG containtining the constants -// is always the first in the forest. -// // poset is designed to be memory efficient and do little allocations during normal usage. // Most internal data structures are pre-allocated and flat, so for instance adding a // new relation does not cause any allocation. For performance reasons, @@ -146,24 +138,22 @@ type posetNode struct { // / \ // J K type poset struct { - lastidx uint32 // last generated dense index - flags uint8 // internal flags - values map[ID]uint32 // map SSA values to dense indexes - constants map[int64]uint32 // record SSA constants together with their value - nodes []posetNode // nodes (in all DAGs) - roots []uint32 // list of root nodes (forest) - noneq map[uint32]bitset // non-equal relations - undo []posetUndo // undo chain + lastidx uint32 // last generated dense index + flags uint8 // internal flags + values map[ID]uint32 // map SSA values to dense indexes + nodes []posetNode // nodes (in all DAGs) + roots []uint32 // list of root nodes (forest) + noneq map[uint32]bitset // non-equal relations + undo []posetUndo // undo chain } func newPoset() *poset { return &poset{ - values: make(map[ID]uint32), - constants: make(map[int64]uint32, 8), - nodes: make([]posetNode, 1, 16), - roots: make([]uint32, 0, 4), - noneq: make(map[uint32]bitset), - undo: make([]posetUndo, 0, 4), + values: make(map[ID]uint32), + nodes: make([]posetNode, 1, 16), + roots: make([]uint32, 0, 4), + noneq: make(map[uint32]bitset), + undo: make([]posetUndo, 0, 4), } } @@ -205,11 +195,6 @@ func (po *poset) upushalias(id ID, i2 uint32) { po.undo = append(po.undo, posetUndo{typ: undoAliasNode, ID: id, idx: i2}) } -// upushconst pushes a new undo pass for a new constant -func (po *poset) upushconst(idx uint32, old uint32) { - po.undo = append(po.undo, posetUndo{typ: undoNewConstant, idx: idx, ID: ID(old)}) -} - // addchild adds i2 as direct child of i1. func (po *poset) addchild(i1, i2 uint32, strict bool) { i1l, i1r := po.children(i1) @@ -268,144 +253,11 @@ func (po *poset) newnode(n *Value) uint32 { } // lookup searches for a SSA value into the forest of DAGS, and return its node. -// Constants are materialized on the fly during lookup. func (po *poset) lookup(n *Value) (uint32, bool) { i, f := po.values[n.ID] - if !f && n.isGenericIntConst() { - po.newconst(n) - i, f = po.values[n.ID] - } return i, f } -// newconst creates a node for a constant. It links it to other constants, so -// that n<=5 is detected true when n<=3 is known to be true. -// TODO: this is O(N), fix it. -func (po *poset) newconst(n *Value) { - if !n.isGenericIntConst() { - panic("newconst on non-constant") - } - - // If the same constant is already present in the poset through a different - // Value, just alias to it without allocating a new node. - val := n.AuxInt - if po.flags&posetFlagUnsigned != 0 { - val = int64(n.AuxUnsigned()) - } - if c, found := po.constants[val]; found { - po.values[n.ID] = c - po.upushalias(n.ID, 0) - return - } - - // Create the new node for this constant - i := po.newnode(n) - - // If this is the first constant, put it as a new root, as - // we can't record an existing connection so we don't have - // a specific DAG to add it to. Notice that we want all - // constants to be in root #0, so make sure the new root - // goes there. - if len(po.constants) == 0 { - idx := len(po.roots) - po.roots = append(po.roots, i) - po.roots[0], po.roots[idx] = po.roots[idx], po.roots[0] - po.upush(undoNewRoot, i, 0) - po.constants[val] = i - po.upushconst(i, 0) - return - } - - // Find the lower and upper bound among existing constants. That is, - // find the higher constant that is lower than the one that we're adding, - // and the lower constant that is higher. - // The loop is duplicated to handle signed and unsigned comparison, - // depending on how the poset was configured. - var lowerptr, higherptr uint32 - - if po.flags&posetFlagUnsigned != 0 { - var lower, higher uint64 - val1 := n.AuxUnsigned() - for val2, ptr := range po.constants { - val2 := uint64(val2) - if val1 == val2 { - panic("unreachable") - } - if val2 < val1 && (lowerptr == 0 || val2 > lower) { - lower = val2 - lowerptr = ptr - } else if val2 > val1 && (higherptr == 0 || val2 < higher) { - higher = val2 - higherptr = ptr - } - } - } else { - var lower, higher int64 - val1 := n.AuxInt - for val2, ptr := range po.constants { - if val1 == val2 { - panic("unreachable") - } - if val2 < val1 && (lowerptr == 0 || val2 > lower) { - lower = val2 - lowerptr = ptr - } else if val2 > val1 && (higherptr == 0 || val2 < higher) { - higher = val2 - higherptr = ptr - } - } - } - - if lowerptr == 0 && higherptr == 0 { - // This should not happen, as at least one - // other constant must exist if we get here. - panic("no constant found") - } - - // Create the new node and connect it to the bounds, so that - // lower < n < higher. We could have found both bounds or only one - // of them, depending on what other constants are present in the poset. - // Notice that we always link constants together, so they - // are always part of the same DAG. - switch { - case lowerptr != 0 && higherptr != 0: - // Both bounds are present, record lower < n < higher. - po.addchild(lowerptr, i, true) - po.addchild(i, higherptr, true) - - case lowerptr != 0: - // Lower bound only, record lower < n. - po.addchild(lowerptr, i, true) - - case higherptr != 0: - // Higher bound only. To record n < higher, we need - // an extra root: - // - // extra - // / \ - // root \ - // / n - // .... / - // \ / - // higher - // - i2 := higherptr - r2 := po.findroot(i2) - if r2 != po.roots[0] { // all constants should be in root #0 - panic("constant not in root #0") - } - extra := po.newnode(nil) - po.changeroot(r2, extra) - po.upush(undoChangeRoot, extra, newedge(r2, false)) - po.addchild(extra, r2, false) - po.addchild(extra, i, false) - po.addchild(i, i2, true) - } - - po.constants[val] = i - po.upushconst(i, 0) -} - // aliasnewnode records that a single node n2 (not in the poset yet) is an alias // of the master node n1. func (po *poset) aliasnewnode(n1, n2 *Value) { @@ -474,15 +326,6 @@ func (po *poset) aliasnodes(n1 *Value, i2s bitset) { po.upushalias(k, v) } } - - // If one of the aliased nodes is a constant, then make sure - // po.constants is updated to point to the master node. - for val, idx := range po.constants { - if i2s.Test(idx) { - po.constants[val] = i1 - po.upushconst(i1, idx) - } - } } func (po *poset) isroot(r uint32) bool { @@ -613,12 +456,6 @@ func (po *poset) findroot(i uint32) uint32 { // mergeroot merges two DAGs into one DAG by creating a new extra root func (po *poset) mergeroot(r1, r2 uint32) uint32 { - // Root #0 is special as it contains all constants. Since mergeroot - // discards r2 as root and keeps r1, make sure that r2 is not root #0, - // otherwise constants would move to a different root. - if r2 == po.roots[0] { - r1, r2 = r2, r1 - } r := po.newnode(nil) po.setchl(r, newedge(r1, false)) po.setchr(r, newedge(r2, false)) @@ -738,16 +575,9 @@ func (po *poset) setnoneq(n1, n2 *Value) { // CheckIntegrity verifies internal integrity of a poset. It is intended // for debugging purposes. func (po *poset) CheckIntegrity() { - // Record which index is a constant - constants := newBitset(int(po.lastidx + 1)) - for _, c := range po.constants { - constants.Set(c) - } - - // Verify that each node appears in a single DAG, and that - // all constants are within the first DAG + // Verify that each node appears in a single DAG seen := newBitset(int(po.lastidx + 1)) - for ridx, r := range po.roots { + for _, r := range po.roots { if r == 0 { panic("empty root") } @@ -757,11 +587,6 @@ func (po *poset) CheckIntegrity() { panic("duplicate node") } seen.Set(i) - if constants.Test(i) { - if ridx != 0 { - panic("constants not in the first DAG") - } - } return false }) } @@ -799,9 +624,6 @@ func (po *poset) CheckEmpty() error { if len(po.roots) != 0 { return fmt.Errorf("non-empty root list: %v", po.roots) } - if len(po.constants) != 0 { - return fmt.Errorf("non-empty constants: %v", po.constants) - } if len(po.undo) != 0 { return fmt.Errorf("non-empty undo list: %v", po.undo) } @@ -838,31 +660,12 @@ func (po *poset) DotDump(fn string, title string) error { names[i] = s } - // Create reverse constant mapping - consts := make(map[uint32]int64) - for val, idx := range po.constants { - consts[idx] = val - } - fmt.Fprintf(f, "digraph poset {\n") fmt.Fprintf(f, "\tedge [ fontsize=10 ]\n") for ridx, r := range po.roots { fmt.Fprintf(f, "\tsubgraph root%d {\n", ridx) po.dfs(r, false, func(i uint32) bool { - if val, ok := consts[i]; ok { - // Constant - var vals string - if po.flags&posetFlagUnsigned != 0 { - vals = fmt.Sprint(uint64(val)) - } else { - vals = fmt.Sprint(int64(val)) - } - fmt.Fprintf(f, "\t\tnode%d [shape=box style=filled fillcolor=cadetblue1 label=<%s %s [%d]>]\n", - i, vals, names[i], i) - } else { - // Normal SSA value - fmt.Fprintf(f, "\t\tnode%d [label=<%s [%d]>]\n", i, names[i], i) - } + fmt.Fprintf(f, "\t\tnode%d [label=<%s [%d]>]\n", i, names[i], i) chl, chr := po.children(i) for _, ch := range []posetEdge{chl, chr} { if ch != 0 { @@ -1290,27 +1093,6 @@ func (po *poset) Undo() { po.nodes = po.nodes[:pass.idx] po.lastidx-- - case undoNewConstant: - // FIXME: remove this O(n) loop - var val int64 - var i uint32 - for val, i = range po.constants { - if i == pass.idx { - break - } - } - if i != pass.idx { - panic("constant not found in undo pass") - } - if pass.ID == 0 { - delete(po.constants, val) - } else { - // Restore previous index as constant node - // (also restoring the invariant on correct bounds) - oldidx := uint32(pass.ID) - po.constants[val] = oldidx - } - case undoAliasNode: ID, prev := pass.ID, pass.idx cur := po.values[ID] diff --git a/src/cmd/compile/internal/ssa/poset_test.go b/src/cmd/compile/internal/ssa/poset_test.go index a6db1d1c24a8cf..17918f2550063b 100644 --- a/src/cmd/compile/internal/ssa/poset_test.go +++ b/src/cmd/compile/internal/ssa/poset_test.go @@ -42,13 +42,6 @@ func vconst(i int) int { return 1000 + 128 + i } -func vconst2(i int) int { - if i < -128 || i >= 128 { - panic("invalid const") - } - return 1000 + 256 + i -} - func testPosetOps(t *testing.T, unsigned bool, ops []posetTestOp) { var v [1512]*Value for i := range v { @@ -58,10 +51,6 @@ func testPosetOps(t *testing.T, unsigned bool, ops []posetTestOp) { v[i].Op = OpConst64 v[i].AuxInt = int64(i - 1000 - 128) } - if i >= 1256 && i < 1512 { - v[i].Op = OpConst64 - v[i].AuxInt = int64(i - 1000 - 256) - } } po := newPoset() @@ -478,7 +467,6 @@ func TestPosetCollapse(t *testing.T) { {Equal, 10, 18}, {Equal, 10, 19}, {Equal, 10, vconst(20)}, - {Equal, 10, vconst2(20)}, {Equal, 10, 25}, {Equal, 12, 15}, @@ -487,7 +475,6 @@ func TestPosetCollapse(t *testing.T) { {Equal, 12, 18}, {Equal, 12, 19}, {Equal, 12, vconst(20)}, - {Equal, 12, vconst2(20)}, {Equal, 12, 25}, {Equal, 15, 16}, @@ -495,36 +482,28 @@ func TestPosetCollapse(t *testing.T) { {Equal, 15, 18}, {Equal, 15, 19}, {Equal, 15, vconst(20)}, - {Equal, 15, vconst2(20)}, {Equal, 15, 25}, {Equal, 16, 17}, {Equal, 16, 18}, {Equal, 16, 19}, {Equal, 16, vconst(20)}, - {Equal, 16, vconst2(20)}, {Equal, 16, 25}, {Equal, 17, 18}, {Equal, 17, 19}, {Equal, 17, vconst(20)}, - {Equal, 17, vconst2(20)}, {Equal, 17, 25}, {Equal, 18, 19}, {Equal, 18, vconst(20)}, - {Equal, 18, vconst2(20)}, {Equal, 18, 25}, {Equal, 19, vconst(20)}, - {Equal, 19, vconst2(20)}, {Equal, 19, 25}, - {Equal, vconst(20), vconst2(20)}, {Equal, vconst(20), 25}, - {Equal, vconst2(20), 25}, - // ... but not 11/26/100/101/102, which were on a different path {Equal_Fail, 10, 11}, {Equal_Fail, 10, 26}, @@ -632,117 +611,6 @@ func TestPosetSetEqual(t *testing.T) { }) } -func TestPosetConst(t *testing.T) { - testPosetOps(t, false, []posetTestOp{ - {Checkpoint, 0, 0}, - {SetOrder, 1, vconst(15)}, - {SetOrderOrEqual, 100, vconst(120)}, - {Ordered, 1, vconst(15)}, - {Ordered, 1, vconst(120)}, - {OrderedOrEqual, 1, vconst(120)}, - {OrderedOrEqual, 100, vconst(120)}, - {Ordered_Fail, 100, vconst(15)}, - {Ordered_Fail, vconst(15), 100}, - - {Checkpoint, 0, 0}, - {SetOrderOrEqual, 1, 5}, - {SetOrderOrEqual, 5, 25}, - {SetEqual, 20, vconst(20)}, - {SetEqual, 25, vconst(25)}, - {Ordered, 1, 20}, - {Ordered, 1, vconst(30)}, - {Undo, 0, 0}, - - {Checkpoint, 0, 0}, - {SetOrderOrEqual, 1, 5}, - {SetOrderOrEqual, 5, 25}, - {SetEqual, vconst(-20), 5}, - {SetEqual, vconst(-25), 1}, - {Ordered, 1, 5}, - {Ordered, vconst(-30), 1}, - {Undo, 0, 0}, - - {Checkpoint, 0, 0}, - {SetNonEqual, 1, vconst(4)}, - {SetNonEqual, 1, vconst(6)}, - {NonEqual, 1, vconst(4)}, - {NonEqual_Fail, 1, vconst(5)}, - {NonEqual, 1, vconst(6)}, - {Equal_Fail, 1, vconst(4)}, - {Equal_Fail, 1, vconst(5)}, - {Equal_Fail, 1, vconst(6)}, - {Equal_Fail, 1, vconst(7)}, - {Undo, 0, 0}, - - {Undo, 0, 0}, - }) - - testPosetOps(t, true, []posetTestOp{ - {Checkpoint, 0, 0}, - {SetOrder, 1, vconst(15)}, - {SetOrderOrEqual, 100, vconst(-5)}, // -5 is a very big number in unsigned - {Ordered, 1, vconst(15)}, - {Ordered, 1, vconst(-5)}, - {OrderedOrEqual, 1, vconst(-5)}, - {OrderedOrEqual, 100, vconst(-5)}, - {Ordered_Fail, 100, vconst(15)}, - {Ordered_Fail, vconst(15), 100}, - - {Undo, 0, 0}, - }) - - testPosetOps(t, false, []posetTestOp{ - {Checkpoint, 0, 0}, - {SetOrderOrEqual, 1, vconst(3)}, - {SetNonEqual, 1, vconst(0)}, - {Ordered_Fail, 1, vconst(0)}, - {Undo, 0, 0}, - }) - - testPosetOps(t, false, []posetTestOp{ - // Check relations of a constant with itself - {Checkpoint, 0, 0}, - {SetOrderOrEqual, vconst(3), vconst2(3)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {SetEqual, vconst(3), vconst2(3)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {SetNonEqual_Fail, vconst(3), vconst2(3)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {SetOrder_Fail, vconst(3), vconst2(3)}, - {Undo, 0, 0}, - - // Check relations of two constants among them, using - // different instances of the same constant - {Checkpoint, 0, 0}, - {SetOrderOrEqual, vconst(3), vconst(4)}, - {OrderedOrEqual, vconst(3), vconst2(4)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {SetOrder, vconst(3), vconst(4)}, - {Ordered, vconst(3), vconst2(4)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {SetEqual_Fail, vconst(3), vconst(4)}, - {SetEqual_Fail, vconst(3), vconst2(4)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {NonEqual, vconst(3), vconst(4)}, - {NonEqual, vconst(3), vconst2(4)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {Equal_Fail, vconst(3), vconst(4)}, - {Equal_Fail, vconst(3), vconst2(4)}, - {Undo, 0, 0}, - {Checkpoint, 0, 0}, - {SetNonEqual, vconst(3), vconst(4)}, - {SetNonEqual, vconst(3), vconst2(4)}, - {Undo, 0, 0}, - }) -} - func TestPosetNonEqual(t *testing.T) { testPosetOps(t, false, []posetTestOp{ {Equal_Fail, 10, 20}, From 5a81570bf2dfd7698d8ae6b3f9f3addd4161d453 Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Tue, 6 Aug 2024 20:16:42 +0300 Subject: [PATCH 200/866] bytes,strings: use a more universal Cyrillic word MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The word "брат" (brother) is the same across Slavic languages that use the Cyrillic script, such as Bulgarian, Macedonian, Russian, Ukrainian, and others. Change-Id: I5155e6bb16a02dec5d93a01b79f9570f43f09444 Reviewed-on: https://go-review.googlesource.com/c/go/+/603535 Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI Auto-Submit: Robert Griesemer Reviewed-by: David Chase --- src/bytes/example_test.go | 4 ++-- src/strings/example_test.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bytes/example_test.go b/src/bytes/example_test.go index 1cc0089e41f313..c9086d391809d4 100644 --- a/src/bytes/example_test.go +++ b/src/bytes/example_test.go @@ -502,10 +502,10 @@ func ExampleTitle() { func ExampleToTitle() { fmt.Printf("%s\n", bytes.ToTitle([]byte("loud noises"))) - fmt.Printf("%s\n", bytes.ToTitle([]byte("хлеб"))) + fmt.Printf("%s\n", bytes.ToTitle([]byte("брат"))) // Output: // LOUD NOISES - // ХЛЕБ + // БРАТ } func ExampleToTitleSpecial() { diff --git a/src/strings/example_test.go b/src/strings/example_test.go index bdab7ae8dea9d6..413d1bf9974030 100644 --- a/src/strings/example_test.go +++ b/src/strings/example_test.go @@ -328,22 +328,22 @@ func ExampleTitle() { // Compare this example to the ToTitle example. fmt.Println(strings.Title("her royal highness")) fmt.Println(strings.Title("loud noises")) - fmt.Println(strings.Title("хлеб")) + fmt.Println(strings.Title("брат")) // Output: // Her Royal Highness // Loud Noises - // Хлеб + // Брат } func ExampleToTitle() { // Compare this example to the Title example. fmt.Println(strings.ToTitle("her royal highness")) fmt.Println(strings.ToTitle("loud noises")) - fmt.Println(strings.ToTitle("хлеб")) + fmt.Println(strings.ToTitle("брат")) // Output: // HER ROYAL HIGHNESS // LOUD NOISES - // ХЛЕБ + // БРАТ } func ExampleToTitleSpecial() { From b696250e5f0dcc4cfa863309538c65d30d2ad480 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Tue, 6 Aug 2024 21:58:38 +0000 Subject: [PATCH 201/866] hash: implement the encoding.BinaryAppender interface For #62384 Change-Id: Ia6de028741e43449bcf54ba73ec9b0cad4d4e88a GitHub-Last-Rev: 192f389d463d372a338dca82827a871888a53bb0 GitHub-Pull-Request: golang/go#68738 Reviewed-on: https://go-review.googlesource.com/c/go/+/603255 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: David Chase --- .../6-stdlib/99-minor/hash/adler32/62384.md | 1 + .../6-stdlib/99-minor/hash/crc32/62384.md | 1 + .../6-stdlib/99-minor/hash/crc64/62384.md | 1 + doc/next/6-stdlib/99-minor/hash/fnv/62384.md | 1 + src/hash/adler32/adler32.go | 7 +++- src/hash/adler32/adler32_test.go | 12 ++++++ src/hash/crc32/crc32.go | 8 +++- src/hash/crc32/crc32_test.go | 24 +++++++++++ src/hash/crc64/crc64.go | 7 +++- src/hash/crc64/crc64_test.go | 24 +++++++++++ src/hash/fnv/fnv.go | 42 +++++++++++++------ src/hash/fnv/fnv_test.go | 12 ++++++ 12 files changed, 122 insertions(+), 18 deletions(-) create mode 100644 doc/next/6-stdlib/99-minor/hash/adler32/62384.md create mode 100644 doc/next/6-stdlib/99-minor/hash/crc32/62384.md create mode 100644 doc/next/6-stdlib/99-minor/hash/crc64/62384.md create mode 100644 doc/next/6-stdlib/99-minor/hash/fnv/62384.md diff --git a/doc/next/6-stdlib/99-minor/hash/adler32/62384.md b/doc/next/6-stdlib/99-minor/hash/adler32/62384.md new file mode 100644 index 00000000000000..a584db8cadb1bf --- /dev/null +++ b/doc/next/6-stdlib/99-minor/hash/adler32/62384.md @@ -0,0 +1 @@ +The value returned by [New] now also implements the [encoding.BinaryAppender] interface. diff --git a/doc/next/6-stdlib/99-minor/hash/crc32/62384.md b/doc/next/6-stdlib/99-minor/hash/crc32/62384.md new file mode 100644 index 00000000000000..0e835c2ccd4904 --- /dev/null +++ b/doc/next/6-stdlib/99-minor/hash/crc32/62384.md @@ -0,0 +1 @@ +The values returned by [New] and [NewIEEE] now also implement the [encoding.BinaryAppender] interface. diff --git a/doc/next/6-stdlib/99-minor/hash/crc64/62384.md b/doc/next/6-stdlib/99-minor/hash/crc64/62384.md new file mode 100644 index 00000000000000..a584db8cadb1bf --- /dev/null +++ b/doc/next/6-stdlib/99-minor/hash/crc64/62384.md @@ -0,0 +1 @@ +The value returned by [New] now also implements the [encoding.BinaryAppender] interface. diff --git a/doc/next/6-stdlib/99-minor/hash/fnv/62384.md b/doc/next/6-stdlib/99-minor/hash/fnv/62384.md new file mode 100644 index 00000000000000..68ec6f360e7d7e --- /dev/null +++ b/doc/next/6-stdlib/99-minor/hash/fnv/62384.md @@ -0,0 +1 @@ +The values returned by [New32], [New32a], [New64], [New64a], [New128] and [New128a] now also implement the [encoding.BinaryAppender] interface. diff --git a/src/hash/adler32/adler32.go b/src/hash/adler32/adler32.go index ed9ccad910c098..88b4ccf2fedbb6 100644 --- a/src/hash/adler32/adler32.go +++ b/src/hash/adler32/adler32.go @@ -57,13 +57,16 @@ const ( marshaledSize = len(magic) + 4 ) -func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) +func (d *digest) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic...) b = byteorder.BeAppendUint32(b, uint32(*d)) return b, nil } +func (d *digest) MarshalBinary() ([]byte, error) { + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + func (d *digest) UnmarshalBinary(b []byte) error { if len(b) < len(magic) || string(b[:len(magic)]) != magic { return errors.New("hash/adler32: invalid hash state identifier") diff --git a/src/hash/adler32/adler32_test.go b/src/hash/adler32/adler32_test.go index 6bac8025076265..ebb9a438a63f87 100644 --- a/src/hash/adler32/adler32_test.go +++ b/src/hash/adler32/adler32_test.go @@ -103,11 +103,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfState { t.Errorf("checksum(%q) state = %q, want %q", g.in, state, g.halfState) continue } + if string(stateAppend) != g.halfState { + t.Errorf("checksum(%q) state = %q, want %q", g.in, stateAppend, g.halfState) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue diff --git a/src/hash/crc32/crc32.go b/src/hash/crc32/crc32.go index 3964646b277352..b659959959c6fa 100644 --- a/src/hash/crc32/crc32.go +++ b/src/hash/crc32/crc32.go @@ -170,14 +170,18 @@ const ( marshaledSize = len(magic) + 4 + 4 ) -func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) +func (d *digest) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic...) b = byteorder.BeAppendUint32(b, tableSum(d.tab)) b = byteorder.BeAppendUint32(b, d.crc) return b, nil } +func (d *digest) MarshalBinary() ([]byte, error) { + return d.AppendBinary(make([]byte, 0, marshaledSize)) + +} + func (d *digest) UnmarshalBinary(b []byte) error { if len(b) < len(magic) || string(b[:len(magic)]) != magic { return errors.New("hash/crc32: invalid hash state identifier") diff --git a/src/hash/crc32/crc32_test.go b/src/hash/crc32/crc32_test.go index 5a3e134cf7a595..10c28f9533bb28 100644 --- a/src/hash/crc32/crc32_test.go +++ b/src/hash/crc32/crc32_test.go @@ -133,11 +133,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfStateIEEE { t.Errorf("IEEE(%q) state = %q, want %q", g.in, state, g.halfStateIEEE) continue } + if string(stateAppend) != g.halfStateIEEE { + t.Errorf("IEEE(%q) state = %q, want %q", g.in, stateAppend, g.halfStateIEEE) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue @@ -165,11 +177,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfStateCastagnoli { t.Errorf("Castagnoli(%q) state = %q, want %q", g.in, state, g.halfStateCastagnoli) continue } + if string(stateAppend) != g.halfStateCastagnoli { + t.Errorf("Castagnoli(%q) state = %q, want %q", g.in, stateAppend, g.halfStateCastagnoli) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue diff --git a/src/hash/crc64/crc64.go b/src/hash/crc64/crc64.go index 4cdb4c7e77f777..bdfd82ed314dda 100644 --- a/src/hash/crc64/crc64.go +++ b/src/hash/crc64/crc64.go @@ -111,14 +111,17 @@ const ( marshaledSize = len(magic) + 8 + 8 ) -func (d *digest) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize) +func (d *digest) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic...) b = byteorder.BeAppendUint64(b, tableSum(d.tab)) b = byteorder.BeAppendUint64(b, d.crc) return b, nil } +func (d *digest) MarshalBinary() ([]byte, error) { + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + func (d *digest) UnmarshalBinary(b []byte) error { if len(b) < len(magic) || string(b[:len(magic)]) != magic { return errors.New("hash/crc64: invalid hash state identifier") diff --git a/src/hash/crc64/crc64_test.go b/src/hash/crc64/crc64_test.go index 9cf602c82f3eeb..06c428c81f0079 100644 --- a/src/hash/crc64/crc64_test.go +++ b/src/hash/crc64/crc64_test.go @@ -88,11 +88,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfStateISO { t.Errorf("ISO crc64(%q) state = %q, want %q", g.in, state, g.halfStateISO) continue } + if string(stateAppend) != g.halfStateISO { + t.Errorf("ISO crc64(%q) state = %q, want %q", g.in, stateAppend, g.halfStateISO) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue @@ -120,11 +132,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfStateECMA { t.Errorf("ECMA crc64(%q) state = %q, want %q", g.in, state, g.halfStateECMA) continue } + if string(stateAppend) != g.halfStateECMA { + t.Errorf("ECMA crc64(%q) state = %q, want %q", g.in, stateAppend, g.halfStateECMA) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue diff --git a/src/hash/fnv/fnv.go b/src/hash/fnv/fnv.go index bf95bb32a3c6e0..e7463795cdd6ee 100644 --- a/src/hash/fnv/fnv.go +++ b/src/hash/fnv/fnv.go @@ -219,50 +219,68 @@ const ( marshaledSize128 = len(magic128) + 8*2 ) -func (s *sum32) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize32) +func (s *sum32) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic32...) b = byteorder.BeAppendUint32(b, uint32(*s)) return b, nil } -func (s *sum32a) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize32) +func (s *sum32) MarshalBinary() ([]byte, error) { + return s.AppendBinary(make([]byte, 0, marshaledSize32)) +} + +func (s *sum32a) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic32a...) b = byteorder.BeAppendUint32(b, uint32(*s)) return b, nil } -func (s *sum64) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize64) +func (s *sum32a) MarshalBinary() ([]byte, error) { + return s.AppendBinary(make([]byte, 0, marshaledSize32)) +} + +func (s *sum64) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic64...) b = byteorder.BeAppendUint64(b, uint64(*s)) return b, nil } -func (s *sum64a) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize64) +func (s *sum64) MarshalBinary() ([]byte, error) { + return s.AppendBinary(make([]byte, 0, marshaledSize64)) +} + +func (s *sum64a) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic64a...) b = byteorder.BeAppendUint64(b, uint64(*s)) return b, nil } -func (s *sum128) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize128) +func (s *sum64a) MarshalBinary() ([]byte, error) { + return s.AppendBinary(make([]byte, 0, marshaledSize64)) +} + +func (s *sum128) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic128...) b = byteorder.BeAppendUint64(b, s[0]) b = byteorder.BeAppendUint64(b, s[1]) return b, nil } -func (s *sum128a) MarshalBinary() ([]byte, error) { - b := make([]byte, 0, marshaledSize128) +func (s *sum128) MarshalBinary() ([]byte, error) { + return s.AppendBinary(make([]byte, 0, marshaledSize128)) +} + +func (s *sum128a) AppendBinary(b []byte) ([]byte, error) { b = append(b, magic128a...) b = byteorder.BeAppendUint64(b, s[0]) b = byteorder.BeAppendUint64(b, s[1]) return b, nil } +func (s *sum128a) MarshalBinary() ([]byte, error) { + return s.AppendBinary(make([]byte, 0, marshaledSize128)) +} + func (s *sum32) UnmarshalBinary(b []byte) error { if len(b) < len(magic32) || string(b[:len(magic32)]) != magic32 { return errors.New("hash/fnv: invalid hash state identifier") diff --git a/src/hash/fnv/fnv_test.go b/src/hash/fnv/fnv_test.go index 7b1f7a32eaac09..4219460e46fc85 100644 --- a/src/hash/fnv/fnv_test.go +++ b/src/hash/fnv/fnv_test.go @@ -128,11 +128,23 @@ func TestGoldenMarshal(t *testing.T) { continue } + stateAppend, err := h.(encoding.BinaryAppender).AppendBinary(make([]byte, 4, 32)) + if err != nil { + t.Errorf("could not marshal: %v", err) + continue + } + stateAppend = stateAppend[4:] + if string(state) != g.halfState { t.Errorf("checksum(%q) state = %q, want %q", g.in, state, g.halfState) continue } + if string(stateAppend) != g.halfState { + t.Errorf("checksum(%q) state = %q, want %q", g.in, stateAppend, g.halfState) + continue + } + if err := h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(state); err != nil { t.Errorf("could not unmarshal: %v", err) continue From 80746f7f2d4b3d1d2ea62878e7c89f5c6c3c2a2a Mon Sep 17 00:00:00 2001 From: Andy Pan Date: Tue, 6 Aug 2024 16:36:45 +0800 Subject: [PATCH 202/866] os: employ sendfile(2) for file-to-file copying on Linux when needed Go utilizes copy_file_range(2) for file-to-file copying only on kernel 5.3+, but even on 5.3+ this system call can still go wrong for some reason (check out the comment inside poll.CopyFileRange). Before Linux 2.6.33, out_fd must refer to a socket, but since Linux 2.6.33 it can be any file. Thus, we can employ sendfile(2) for copy between files when copy_file_range(2) fails to handle the copy, that way we can still benefit from the zero-copy technique on kernel <5.3 and wherever copy_file_range(2) is available but broken. Change-Id: I3922218c95ad34ee649ccdf3ccfbd1ce692bebcc Reviewed-on: https://go-review.googlesource.com/c/go/+/603295 Reviewed-by: David Chase Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- src/os/readfrom_linux_test.go | 465 +++++++++++++++++++--------------- src/os/writeto_linux_test.go | 6 +- src/os/zero_copy_linux.go | 46 +++- 3 files changed, 312 insertions(+), 205 deletions(-) diff --git a/src/os/readfrom_linux_test.go b/src/os/readfrom_linux_test.go index 8dcb9cb2172882..3822b2e329d1fd 100644 --- a/src/os/readfrom_linux_test.go +++ b/src/os/readfrom_linux_test.go @@ -25,7 +25,7 @@ import ( "golang.org/x/net/nettest" ) -func TestCopyFileRange(t *testing.T) { +func TestCopyFileRangeAndSendFile(t *testing.T) { sizes := []int{ 1, 42, @@ -37,6 +37,7 @@ func TestCopyFileRange(t *testing.T) { for _, size := range sizes { t.Run(strconv.Itoa(size), func(t *testing.T) { testCopyFileRange(t, int64(size), -1) + testSendfileOverCopyFileRange(t, int64(size), -1) }) } }) @@ -45,6 +46,7 @@ func TestCopyFileRange(t *testing.T) { for _, size := range sizes { t.Run(strconv.Itoa(size), func(t *testing.T) { testCopyFileRange(t, int64(size), int64(size)-1) + testSendfileOverCopyFileRange(t, int64(size), int64(size)-1) }) } }) @@ -52,6 +54,7 @@ func TestCopyFileRange(t *testing.T) { for _, size := range sizes { t.Run(strconv.Itoa(size), func(t *testing.T) { testCopyFileRange(t, int64(size), int64(size)/2) + testSendfileOverCopyFileRange(t, int64(size), int64(size)/2) }) } }) @@ -59,173 +62,207 @@ func TestCopyFileRange(t *testing.T) { for _, size := range sizes { t.Run(strconv.Itoa(size), func(t *testing.T) { testCopyFileRange(t, int64(size), int64(size)+7) + testSendfileOverCopyFileRange(t, int64(size), int64(size)+7) }) } }) }) t.Run("DoesntTryInAppendMode", func(t *testing.T) { - dst, src, data, hook := newCopyFileRangeTest(t, 42) + for _, newTest := range []func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string){ + newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} { + dst, src, data, hook, testName := newTest(t, 42) - dst2, err := OpenFile(dst.Name(), O_RDWR|O_APPEND, 0755) - if err != nil { - t.Fatal(err) - } - defer dst2.Close() + dst2, err := OpenFile(dst.Name(), O_RDWR|O_APPEND, 0755) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer dst2.Close() - if _, err := io.Copy(dst2, src); err != nil { - t.Fatal(err) - } - if hook.called { - t.Fatal("called poll.CopyFileRange for destination in O_APPEND mode") + if _, err := io.Copy(dst2, src); err != nil { + t.Fatalf("%s: %v", testName, err) + } + if hook.called { + t.Fatalf("%s: hook shouldn't be called with destination in O_APPEND mode", testName) + } + mustSeekStart(t, dst2) + mustContainData(t, dst2, data) // through traditional means } - mustSeekStart(t, dst2) - mustContainData(t, dst2, data) // through traditional means }) t.Run("CopyFileItself", func(t *testing.T) { - hook := hookCopyFileRange(t) + for _, hookFunc := range []func(*testing.T) (*copyFileHook, string){hookCopyFileRange, hookSendFileOverCopyFileRange} { + hook, testName := hookFunc(t) - f, err := CreateTemp("", "file-readfrom-itself-test") - if err != nil { - t.Fatalf("failed to create tmp file: %v", err) - } - t.Cleanup(func() { - f.Close() - Remove(f.Name()) - }) + f, err := CreateTemp("", "file-readfrom-itself-test") + if err != nil { + t.Fatalf("%s: failed to create tmp file: %v", testName, err) + } + t.Cleanup(func() { + f.Close() + Remove(f.Name()) + }) - data := []byte("hello world!") - if _, err := f.Write(data); err != nil { - t.Fatalf("failed to create and feed the file: %v", err) - } + data := []byte("hello world!") + if _, err := f.Write(data); err != nil { + t.Fatalf("%s: failed to create and feed the file: %v", testName, err) + } - if err := f.Sync(); err != nil { - t.Fatalf("failed to save the file: %v", err) - } + if err := f.Sync(); err != nil { + t.Fatalf("%s: failed to save the file: %v", testName, err) + } - // Rewind it. - if _, err := f.Seek(0, io.SeekStart); err != nil { - t.Fatalf("failed to rewind the file: %v", err) - } + // Rewind it. + if _, err := f.Seek(0, io.SeekStart); err != nil { + t.Fatalf("%s: failed to rewind the file: %v", testName, err) + } - // Read data from the file itself. - if _, err := io.Copy(f, f); err != nil { - t.Fatalf("failed to read from the file: %v", err) - } + // Read data from the file itself. + if _, err := io.Copy(f, f); err != nil { + t.Fatalf("%s: failed to read from the file: %v", testName, err) + } - if !hook.called || hook.written != 0 || hook.handled || hook.err != nil { - t.Fatalf("poll.CopyFileRange should be called and return the EINVAL error, but got hook.called=%t, hook.err=%v", hook.called, hook.err) - } + if hook.written != 0 || hook.handled || hook.err != nil { + t.Fatalf("%s: File.readFrom is expected not to use any zero-copy techniques when copying itself."+ + "got hook.written=%d, hook.handled=%t, hook.err=%v; expected hook.written=0, hook.handled=false, hook.err=nil", + testName, hook.written, hook.handled, hook.err) + } - // Rewind it. - if _, err := f.Seek(0, io.SeekStart); err != nil { - t.Fatalf("failed to rewind the file: %v", err) - } + switch testName { + case "hookCopyFileRange": + // For copy_file_range(2), it fails and returns EINVAL when the source and target + // refer to the same file and their ranges overlap. The hook should be called to + // get the returned error and fall back to generic copy. + if !hook.called { + t.Fatalf("%s: should have called the hook", testName) + } + case "hookSendFileOverCopyFileRange": + // For sendfile(2), it allows the source and target to refer to the same file and overlap. + // The hook should not be called and just fall back to generic copy directly. + if hook.called { + t.Fatalf("%s: shouldn't have called the hook", testName) + } + default: + t.Fatalf("%s: unexpected test", testName) + } - data2, err := io.ReadAll(f) - if err != nil { - t.Fatalf("failed to read from the file: %v", err) - } + // Rewind it. + if _, err := f.Seek(0, io.SeekStart); err != nil { + t.Fatalf("%s: failed to rewind the file: %v", testName, err) + } + + data2, err := io.ReadAll(f) + if err != nil { + t.Fatalf("%s: failed to read from the file: %v", testName, err) + } - // It should wind up a double of the original data. - if strings.Repeat(string(data), 2) != string(data2) { - t.Fatalf("data mismatch: %s != %s", string(data), string(data2)) + // It should wind up a double of the original data. + if s := strings.Repeat(string(data), 2); s != string(data2) { + t.Fatalf("%s: file contained %s, expected %s", testName, data2, s) + } } }) t.Run("NotRegular", func(t *testing.T) { t.Run("BothPipes", func(t *testing.T) { - hook := hookCopyFileRange(t) + for _, hookFunc := range []func(*testing.T) (*copyFileHook, string){hookCopyFileRange, hookSendFileOverCopyFileRange} { + hook, testName := hookFunc(t) - pr1, pw1, err := Pipe() - if err != nil { - t.Fatal(err) - } - defer pr1.Close() - defer pw1.Close() + pr1, pw1, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr1.Close() + defer pw1.Close() - pr2, pw2, err := Pipe() - if err != nil { - t.Fatal(err) - } - defer pr2.Close() - defer pw2.Close() - - // The pipe is empty, and PIPE_BUF is large enough - // for this, by (POSIX) definition, so there is no - // need for an additional goroutine. - data := []byte("hello") - if _, err := pw1.Write(data); err != nil { - t.Fatal(err) - } - pw1.Close() + pr2, pw2, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr2.Close() + defer pw2.Close() + + // The pipe is empty, and PIPE_BUF is large enough + // for this, by (POSIX) definition, so there is no + // need for an additional goroutine. + data := []byte("hello") + if _, err := pw1.Write(data); err != nil { + t.Fatalf("%s: %v", testName, err) + } + pw1.Close() - n, err := io.Copy(pw2, pr1) - if err != nil { - t.Fatal(err) - } - if n != int64(len(data)) { - t.Fatalf("transferred %d, want %d", n, len(data)) - } - if !hook.called { - t.Fatalf("should have called poll.CopyFileRange") + n, err := io.Copy(pw2, pr1) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if n != int64(len(data)) { + t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) + } + if !hook.called { + t.Fatalf("%s: should have called the hook", testName) + } + pw2.Close() + mustContainData(t, pr2, data) } - pw2.Close() - mustContainData(t, pr2, data) }) t.Run("DstPipe", func(t *testing.T) { - dst, src, data, hook := newCopyFileRangeTest(t, 255) - dst.Close() - - pr, pw, err := Pipe() - if err != nil { - t.Fatal(err) - } - defer pr.Close() - defer pw.Close() + for _, newTest := range []func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string){ + newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} { + dst, src, data, hook, testName := newTest(t, 255) + dst.Close() + + pr, pw, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr.Close() + defer pw.Close() - n, err := io.Copy(pw, src) - if err != nil { - t.Fatal(err) - } - if n != int64(len(data)) { - t.Fatalf("transferred %d, want %d", n, len(data)) - } - if !hook.called { - t.Fatalf("should have called poll.CopyFileRange") + n, err := io.Copy(pw, src) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if n != int64(len(data)) { + t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) + } + if !hook.called { + t.Fatalf("%s: should have called the hook", testName) + } + pw.Close() + mustContainData(t, pr, data) } - pw.Close() - mustContainData(t, pr, data) }) t.Run("SrcPipe", func(t *testing.T) { - dst, src, data, hook := newCopyFileRangeTest(t, 255) - src.Close() - - pr, pw, err := Pipe() - if err != nil { - t.Fatal(err) - } - defer pr.Close() - defer pw.Close() - - // The pipe is empty, and PIPE_BUF is large enough - // for this, by (POSIX) definition, so there is no - // need for an additional goroutine. - if _, err := pw.Write(data); err != nil { - t.Fatal(err) - } - pw.Close() + for _, newTest := range []func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string){ + newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} { + dst, src, data, hook, testName := newTest(t, 255) + src.Close() + + pr, pw, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr.Close() + defer pw.Close() + + // The pipe is empty, and PIPE_BUF is large enough + // for this, by (POSIX) definition, so there is no + // need for an additional goroutine. + if _, err := pw.Write(data); err != nil { + t.Fatalf("%s: %v", testName, err) + } + pw.Close() - n, err := io.Copy(dst, pr) - if err != nil { - t.Fatal(err) - } - if n != int64(len(data)) { - t.Fatalf("transferred %d, want %d", n, len(data)) - } - if !hook.called { - t.Fatalf("should have called poll.CopyFileRange") + n, err := io.Copy(dst, pr) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if n != int64(len(data)) { + t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) + } + if !hook.called { + t.Fatalf("%s: should have called the hook", testName) + } + mustSeekStart(t, dst) + mustContainData(t, dst, data) } - mustSeekStart(t, dst) - mustContainData(t, dst, data) }) }) t.Run("Nil", func(t *testing.T) { @@ -480,8 +517,16 @@ func testSpliceToTTY(t *testing.T, proto string, size int64) { } func testCopyFileRange(t *testing.T, size int64, limit int64) { - dst, src, data, hook := newCopyFileRangeTest(t, size) + dst, src, data, hook, name := newCopyFileRangeTest(t, size) + testCopyFile(t, dst, src, data, hook, limit, name) +} + +func testSendfileOverCopyFileRange(t *testing.T, size int64, limit int64) { + dst, src, data, hook, name := newSendfileOverCopyFileRangeTest(t, size) + testCopyFile(t, dst, src, data, hook, limit, name) +} +func testCopyFile(t *testing.T, dst, src *File, data []byte, hook *copyFileHook, limit int64, testName string) { // If we have a limit, wrap the reader. var ( realsrc io.Reader @@ -498,22 +543,22 @@ func testCopyFileRange(t *testing.T, size int64, limit int64) { } // Now call ReadFrom (through io.Copy), which will hopefully call - // poll.CopyFileRange. + // poll.CopyFileRange or poll.SendFile. n, err := io.Copy(dst, realsrc) if err != nil { - t.Fatal(err) + t.Fatalf("%s: %v", testName, err) } - // If we didn't have a limit, we should have called poll.CopyFileRange - // with the right file descriptor arguments. - if limit > 0 && !hook.called { - t.Fatal("never called poll.CopyFileRange") + // If we didn't have a limit or had a positive limit, we should have called + // poll.CopyFileRange or poll.SendFile with the right file descriptor arguments. + if limit != 0 && !hook.called { + t.Fatalf("%s: never called the hook", testName) } if hook.called && hook.dstfd != int(dst.Fd()) { - t.Fatalf("wrong destination file descriptor: got %d, want %d", hook.dstfd, dst.Fd()) + t.Fatalf("%s: wrong destination file descriptor: got %d, want %d", testName, hook.dstfd, dst.Fd()) } if hook.called && hook.srcfd != int(src.Fd()) { - t.Fatalf("wrong source file descriptor: got %d, want %d", hook.srcfd, src.Fd()) + t.Fatalf("%s: wrong source file descriptor: got %d, want %d", testName, hook.srcfd, src.Fd()) } // Check that the offsets after the transfer make sense, that the size @@ -521,20 +566,20 @@ func testCopyFileRange(t *testing.T, size int64, limit int64) { // file contains exactly the bytes we expect it to contain. dstoff, err := dst.Seek(0, io.SeekCurrent) if err != nil { - t.Fatal(err) + t.Fatalf("%s: %v", testName, err) } srcoff, err := src.Seek(0, io.SeekCurrent) if err != nil { - t.Fatal(err) + t.Fatalf("%s: %v", testName, err) } if dstoff != srcoff { - t.Errorf("offsets differ: dstoff = %d, srcoff = %d", dstoff, srcoff) + t.Errorf("%s: offsets differ: dstoff = %d, srcoff = %d", testName, dstoff, srcoff) } if dstoff != int64(len(data)) { - t.Errorf("dstoff = %d, want %d", dstoff, len(data)) + t.Errorf("%s: dstoff = %d, want %d", testName, dstoff, len(data)) } if n != int64(len(data)) { - t.Errorf("short ReadFrom: wrote %d bytes, want %d", n, len(data)) + t.Errorf("%s: short ReadFrom: wrote %d bytes, want %d", testName, n, len(data)) } mustSeekStart(t, dst) mustContainData(t, dst, data) @@ -542,47 +587,53 @@ func testCopyFileRange(t *testing.T, size int64, limit int64) { // If we had a limit, check that it was updated. if lr != nil { if want := limit - n; lr.N != want { - t.Fatalf("didn't update limit correctly: got %d, want %d", lr.N, want) + t.Fatalf("%s: didn't update limit correctly: got %d, want %d", testName, lr.N, want) } } } // newCopyFileRangeTest initializes a new test for copy_file_range. // -// It creates source and destination files, and populates the source file -// with random data of the specified size. It also hooks package os' call -// to poll.CopyFileRange and returns the hook so it can be inspected. -func newCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, data []byte, hook *copyFileRangeHook) { +// It hooks package os' call to poll.CopyFileRange and returns the hook, +// so it can be inspected. +func newCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, data []byte, hook *copyFileHook, name string) { t.Helper() + name = "newCopyFileRangeTest" - hook = hookCopyFileRange(t) - tmp := t.TempDir() + dst, src, data = newCopyFileTest(t, size) + hook, _ = hookCopyFileRange(t) - src, err := Create(filepath.Join(tmp, "src")) - if err != nil { - t.Fatal(err) - } - t.Cleanup(func() { src.Close() }) + return +} + +// newSendFileTest initializes a new test for sendfile over copy_file_range. +// It hooks package os' call to poll.SendFile and returns the hook, +// so it can be inspected. +func newSendfileOverCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, data []byte, hook *copyFileHook, name string) { + t.Helper() + + name = "newSendfileOverCopyFileRangeTest" - dst, err = Create(filepath.Join(tmp, "dst")) + dst, src, data = newCopyFileTest(t, size) + hook, _ = hookSendFileOverCopyFileRange(t) + + return +} + +// newCopyFileTest initializes a new test for copying data between files. +// It creates source and destination files, and populates the source file +// with random data of the specified size, then rewind it, so it can be +// consumed by copy_file_range(2) or sendfile(2). +func newCopyFileTest(t *testing.T, size int64) (dst, src *File, data []byte) { + src, data = createTempFile(t, "test-copy_file_range-sendfile-src", size) + + dst, err := CreateTemp(t.TempDir(), "test-copy_file_range-sendfile-dst") if err != nil { t.Fatal(err) } t.Cleanup(func() { dst.Close() }) - // Populate the source file with data, then rewind it, so it can be - // consumed by copy_file_range(2). - prng := rand.New(rand.NewSource(time.Now().Unix())) - data = make([]byte, size) - prng.Read(data) - if _, err := src.Write(data); err != nil { - t.Fatal(err) - } - if _, err := src.Seek(0, io.SeekStart); err != nil { - t.Fatal(err) - } - - return dst, src, data, hook + return } // newSpliceFileTest initializes a new test for splice. @@ -642,40 +693,58 @@ func mustSeekStart(t *testing.T, f *File) { } } -func hookCopyFileRange(t *testing.T) *copyFileRangeHook { - h := new(copyFileRangeHook) - h.install() - t.Cleanup(h.uninstall) - return h +func hookCopyFileRange(t *testing.T) (hook *copyFileHook, name string) { + name = "hookCopyFileRange" + + hook = new(copyFileHook) + orig := *PollCopyFileRangeP + t.Cleanup(func() { + *PollCopyFileRangeP = orig + }) + *PollCopyFileRangeP = func(dst, src *poll.FD, remain int64) (int64, bool, error) { + hook.called = true + hook.dstfd = dst.Sysfd + hook.srcfd = src.Sysfd + hook.written, hook.handled, hook.err = orig(dst, src, remain) + return hook.written, hook.handled, hook.err + } + return } -type copyFileRangeHook struct { +func hookSendFileOverCopyFileRange(t *testing.T) (hook *copyFileHook, name string) { + name = "hookSendFileOverCopyFileRange" + + // Disable poll.CopyFileRange to force the fallback to poll.SendFile. + originalCopyFileRange := *PollCopyFileRangeP + *PollCopyFileRangeP = func(dst, src *poll.FD, remain int64) (written int64, handled bool, err error) { + return 0, false, nil + } + + hook = new(copyFileHook) + orig := poll.TestHookDidSendFile + t.Cleanup(func() { + *PollCopyFileRangeP = originalCopyFileRange + poll.TestHookDidSendFile = orig + }) + poll.TestHookDidSendFile = func(dstFD *poll.FD, src int, written int64, err error, handled bool) { + hook.called = true + hook.dstfd = dstFD.Sysfd + hook.srcfd = src + hook.written = written + hook.err = err + hook.handled = handled + } + return +} + +type copyFileHook struct { called bool dstfd int srcfd int - remain int64 written int64 handled bool err error - - original func(dst, src *poll.FD, remain int64) (int64, bool, error) -} - -func (h *copyFileRangeHook) install() { - h.original = *PollCopyFileRangeP - *PollCopyFileRangeP = func(dst, src *poll.FD, remain int64) (int64, bool, error) { - h.called = true - h.dstfd = dst.Sysfd - h.srcfd = src.Sysfd - h.remain = remain - h.written, h.handled, h.err = h.original(dst, src, remain) - return h.written, h.handled, h.err - } -} - -func (h *copyFileRangeHook) uninstall() { - *PollCopyFileRangeP = h.original } func hookSpliceFile(t *testing.T) *spliceFileHook { diff --git a/src/os/writeto_linux_test.go b/src/os/writeto_linux_test.go index e3900631baa1ee..a6f8980d10614c 100644 --- a/src/os/writeto_linux_test.go +++ b/src/os/writeto_linux_test.go @@ -102,7 +102,7 @@ func newSendFileTest(t *testing.T, proto string, size int64) (net.Conn, *File, n hook := hookSendFile(t) client, server := createSocketPair(t, proto) - tempFile, data := createTempFile(t, size) + tempFile, data := createTempFile(t, "writeto-sendfile-to-socket", size) return client, tempFile, server, data, hook } @@ -134,8 +134,8 @@ type sendFileHook struct { err error } -func createTempFile(t *testing.T, size int64) (*File, []byte) { - f, err := CreateTemp(t.TempDir(), "writeto-sendfile-to-socket") +func createTempFile(t *testing.T, name string, size int64) (*File, []byte) { + f, err := CreateTemp(t.TempDir(), name) if err != nil { t.Fatalf("failed to create temporary file: %v", err) } diff --git a/src/os/zero_copy_linux.go b/src/os/zero_copy_linux.go index 0afc19e125a24e..4492c56bf59f4d 100644 --- a/src/os/zero_copy_linux.go +++ b/src/os/zero_copy_linux.go @@ -49,16 +49,17 @@ func (f *File) writeTo(w io.Writer) (written int64, handled bool, err error) { } func (f *File) readFrom(r io.Reader) (written int64, handled bool, err error) { - // Neither copy_file_range(2) nor splice(2) supports destinations opened with + // Neither copy_file_range(2)/sendfile(2) nor splice(2) supports destinations opened with // O_APPEND, so don't bother to try zero-copy with these system calls. // // Visit https://man7.org/linux/man-pages/man2/copy_file_range.2.html#ERRORS and + // https://man7.org/linux/man-pages/man2/sendfile.2.html#ERRORS and // https://man7.org/linux/man-pages/man2/splice.2.html#ERRORS for details. if f.appendMode { return 0, false, nil } - written, handled, err = f.copyFileRange(r) + written, handled, err = f.copyFile(r) if handled { return } @@ -95,7 +96,7 @@ func (f *File) spliceToFile(r io.Reader) (written int64, handled bool, err error return written, handled, wrapSyscallError("splice", err) } -func (f *File) copyFileRange(r io.Reader) (written int64, handled bool, err error) { +func (f *File) copyFile(r io.Reader) (written int64, handled bool, err error) { var ( remain int64 lr *io.LimitedReader @@ -124,7 +125,44 @@ func (f *File) copyFileRange(r io.Reader) (written int64, handled bool, err erro if lr != nil { lr.N -= written } - return written, handled, wrapSyscallError("copy_file_range", err) + + if handled { + return written, handled, wrapSyscallError("copy_file_range", err) + } + + // If fd_in and fd_out refer to the same file and the source and target ranges overlap, + // copy_file_range(2) just returns EINVAL error. poll.CopyFileRange will ignore that + // error and act like it didn't call copy_file_range(2). Then the caller will fall back + // to generic copy, which results in doubling the content in the file. + // By contrast, sendfile(2) allows this kind of overlapping and works like a memmove, + // in this case the file content will remain the same after copying, which is not what we want. + // Thus, we just bail out here and leave it to generic copy when it's a file copying itself. + if f.pfd.Sysfd == src.pfd.Sysfd { + return 0, false, nil + } + + sc, err := src.SyscallConn() + if err != nil { + return + } + + // We can employ sendfile(2) when copy_file_range(2) fails to handle the copy. + // sendfile(2) enabled file-to-file copying since Linux 2.6.33 and Go requires + // Linux 3.17 or later, so we're good to go. + // Check out https://man7.org/linux/man-pages/man2/sendfile.2.html#DESCRIPTION for more details. + rerr := sc.Read(func(fd uintptr) bool { + written, err, handled = poll.SendFile(&f.pfd, int(fd), remain) + return true + }) + if lr != nil { + lr.N -= written + } + + if err == nil { + err = rerr + } + + return written, handled, wrapSyscallError("sendfile", err) } // getPollFDAndNetwork tries to get the poll.FD and network type from the given interface From 5192d41f239a110558aefe14e2cb9201d223db12 Mon Sep 17 00:00:00 2001 From: Andy Pan Date: Fri, 24 May 2024 09:21:30 +0800 Subject: [PATCH 203/866] internal/poll,syscall: drop the fallback for accept4 on linux/arm For #67001 Change-Id: Ic0b91cd393046c53e41908e8dbbe2ab5fb6b8a74 Reviewed-on: https://go-review.googlesource.com/c/go/+/588216 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Tobias Klauser Auto-Submit: Tobias Klauser --- src/internal/poll/sock_cloexec.go | 2 +- src/internal/poll/sock_cloexec_accept.go | 51 ------------------------ src/syscall/mkall.sh | 2 +- src/syscall/syscall_linux.go | 4 ++ src/syscall/syscall_linux_accept.go | 34 ---------------- src/syscall/syscall_linux_accept4.go | 25 ------------ src/syscall/zsyscall_linux_arm.go | 13 +----- 7 files changed, 7 insertions(+), 124 deletions(-) delete mode 100644 src/internal/poll/sock_cloexec_accept.go delete mode 100644 src/syscall/syscall_linux_accept.go delete mode 100644 src/syscall/syscall_linux_accept4.go diff --git a/src/internal/poll/sock_cloexec.go b/src/internal/poll/sock_cloexec.go index cbf7021804fa82..466ee3139ccdac 100644 --- a/src/internal/poll/sock_cloexec.go +++ b/src/internal/poll/sock_cloexec.go @@ -5,7 +5,7 @@ // This file implements accept for platforms that provide a fast path for // setting SetNonblock and CloseOnExec. -//go:build dragonfly || freebsd || (linux && !arm) || netbsd || openbsd +//go:build dragonfly || freebsd || linux || netbsd || openbsd package poll diff --git a/src/internal/poll/sock_cloexec_accept.go b/src/internal/poll/sock_cloexec_accept.go deleted file mode 100644 index 4b86de59e09299..00000000000000 --- a/src/internal/poll/sock_cloexec_accept.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2013 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. - -// This file implements accept for platforms that provide a fast path for -// setting SetNonblock and CloseOnExec, but don't necessarily have accept4. -// This is the code we used for accept in Go 1.17 and earlier. -// On Linux the accept4 system call was introduced in 2.6.28 kernel, -// and our minimum requirement is 2.6.32, so we simplified the function. -// Unfortunately, on ARM accept4 wasn't added until 2.6.36, so for ARM -// only we continue using the older code. - -//go:build linux && arm - -package poll - -import "syscall" - -// Wrapper around the accept system call that marks the returned file -// descriptor as nonblocking and close-on-exec. -func accept(s int) (int, syscall.Sockaddr, string, error) { - ns, sa, err := Accept4Func(s, syscall.SOCK_NONBLOCK|syscall.SOCK_CLOEXEC) - switch err { - case nil: - return ns, sa, "", nil - default: // errors other than the ones listed - return -1, sa, "accept4", err - case syscall.ENOSYS: // syscall missing - case syscall.EINVAL: // some Linux use this instead of ENOSYS - case syscall.EACCES: // some Linux use this instead of ENOSYS - case syscall.EFAULT: // some Linux use this instead of ENOSYS - } - - // See ../syscall/exec_unix.go for description of ForkLock. - // It is probably okay to hold the lock across syscall.Accept - // because we have put fd.sysfd into non-blocking mode. - // However, a call to the File method will put it back into - // blocking mode. We can't take that risk, so no use of ForkLock here. - ns, sa, err = AcceptFunc(s) - if err == nil { - syscall.CloseOnExec(ns) - } - if err != nil { - return -1, nil, "accept", err - } - if err = syscall.SetNonblock(ns, true); err != nil { - CloseFunc(ns) - return -1, nil, "setnonblock", err - } - return ns, sa, "", nil -} diff --git a/src/syscall/mkall.sh b/src/syscall/mkall.sh index a3bc767628f209..b9a0ed3d4f57c3 100755 --- a/src/syscall/mkall.sh +++ b/src/syscall/mkall.sh @@ -190,7 +190,7 @@ linux_amd64) mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; linux_arm) - GOOSARCH_in="syscall_linux_arm.go syscall_linux_accept.go" + GOOSARCH_in="syscall_linux_arm.go" mkerrors="$mkerrors" mksyscall="./mksyscall.pl -l32 -arm" mksysnum="curl -s 'http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/arch/arm/include/uapi/asm/unistd.h' | ./mksysnum_linux.pl -" diff --git a/src/syscall/syscall_linux.go b/src/syscall/syscall_linux.go index 2706973596657b..032936398bd9f2 100644 --- a/src/syscall/syscall_linux.go +++ b/src/syscall/syscall_linux.go @@ -682,6 +682,10 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { return nil, EAFNOSUPPORT } +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + return Accept4(fd, 0) +} + func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny diff --git a/src/syscall/syscall_linux_accept.go b/src/syscall/syscall_linux_accept.go deleted file mode 100644 index 66c0f84cb8e5d1..00000000000000 --- a/src/syscall/syscall_linux_accept.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 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. - -// We require Linux kernel version 2.6.32. The accept4 system call was -// added in version 2.6.28, so in general we can use accept4. -// Unfortunately, for ARM only, accept4 was added in version 2.6.36. -// Handle that case here, by using a copy of the Accept function that -// we used in Go 1.17. - -//go:build linux && arm - -package syscall - -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - // Try accept4 first for Android and newer kernels. - nfd, err = accept4(fd, &rsa, &len, 0) - if err == ENOSYS { - nfd, err = accept(fd, &rsa, &len) - } - if err != nil { - return - } - sa, err = anyToSockaddr(&rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} diff --git a/src/syscall/syscall_linux_accept4.go b/src/syscall/syscall_linux_accept4.go deleted file mode 100644 index 74898672c0466a..00000000000000 --- a/src/syscall/syscall_linux_accept4.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 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. - -// This file provides the Accept function used on all systems -// other than arm. See syscall_linux_accept.go for why. - -//go:build linux && !arm - -package syscall - -func Accept(fd int) (nfd int, sa Sockaddr, err error) { - var rsa RawSockaddrAny - var len _Socklen = SizeofSockaddrAny - nfd, err = accept4(fd, &rsa, &len, 0) - if err != nil { - return - } - sa, err = anyToSockaddr(&rsa) - if err != nil { - Close(nfd) - nfd = 0 - } - return -} diff --git a/src/syscall/zsyscall_linux_arm.go b/src/syscall/zsyscall_linux_arm.go index a386120f7833e7..2929a3bda55ddb 100644 --- a/src/syscall/zsyscall_linux_arm.go +++ b/src/syscall/zsyscall_linux_arm.go @@ -1,4 +1,4 @@ -// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go syscall_linux_accept.go +// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go // Code generated by the command above; DO NOT EDIT. //go:build linux && arm @@ -1615,14 +1615,3 @@ func setrlimit1(resource int, rlim *rlimit32) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} From 808edd500662a5269be89d3786aed83cab7c790b Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Wed, 7 Aug 2024 15:00:53 -0400 Subject: [PATCH 204/866] all: update golang.org/x/sys to v0.23.0 Commands run (in both src and src/cmd): go get golang.org/x/sys@v0.23.0 go mod tidy go mod vendor This is in preparation for vendoring an updated x/telemetry it has a requirement on x/sys v0.23.0. Change-Id: If52d077bafa04a3f656a28800c2591a47e434db4 Reviewed-on: https://go-review.googlesource.com/c/go/+/603896 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Auto-Submit: Michael Matloob --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 +- .../golang.org/x/sys/unix/syscall_linux.go | 1 + .../golang.org/x/sys/unix/syscall_openbsd.go | 1 + .../golang.org/x/sys/unix/zerrors_linux.go | 38 +++++++++++++++++-- .../x/sys/unix/zerrors_linux_386.go | 2 + .../x/sys/unix/zerrors_linux_amd64.go | 2 + .../x/sys/unix/zerrors_linux_arm.go | 2 + .../x/sys/unix/zerrors_linux_arm64.go | 2 + .../x/sys/unix/zerrors_linux_loong64.go | 2 + .../x/sys/unix/zerrors_linux_mips.go | 2 + .../x/sys/unix/zerrors_linux_mips64.go | 2 + .../x/sys/unix/zerrors_linux_mips64le.go | 2 + .../x/sys/unix/zerrors_linux_mipsle.go | 2 + .../x/sys/unix/zerrors_linux_ppc.go | 2 + .../x/sys/unix/zerrors_linux_ppc64.go | 2 + .../x/sys/unix/zerrors_linux_ppc64le.go | 2 + .../x/sys/unix/zerrors_linux_riscv64.go | 2 + .../x/sys/unix/zerrors_linux_s390x.go | 2 + .../x/sys/unix/zerrors_linux_sparc64.go | 2 + .../golang.org/x/sys/unix/zsyscall_linux.go | 16 ++++++++ .../x/sys/unix/zsyscall_openbsd_386.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_386.s | 5 +++ .../x/sys/unix/zsyscall_openbsd_amd64.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_amd64.s | 5 +++ .../x/sys/unix/zsyscall_openbsd_arm.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_arm.s | 5 +++ .../x/sys/unix/zsyscall_openbsd_arm64.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_arm64.s | 5 +++ .../x/sys/unix/zsyscall_openbsd_mips64.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_mips64.s | 5 +++ .../x/sys/unix/zsyscall_openbsd_ppc64.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_ppc64.s | 6 +++ .../x/sys/unix/zsyscall_openbsd_riscv64.go | 24 ++++++++++++ .../x/sys/unix/zsyscall_openbsd_riscv64.s | 5 +++ .../x/sys/unix/zsysnum_linux_386.go | 1 + .../x/sys/unix/zsysnum_linux_amd64.go | 1 + .../x/sys/unix/zsysnum_linux_arm.go | 1 + .../x/sys/unix/zsysnum_linux_arm64.go | 1 + .../x/sys/unix/zsysnum_linux_loong64.go | 1 + .../x/sys/unix/zsysnum_linux_mips.go | 1 + .../x/sys/unix/zsysnum_linux_mips64.go | 1 + .../x/sys/unix/zsysnum_linux_mips64le.go | 1 + .../x/sys/unix/zsysnum_linux_mipsle.go | 1 + .../x/sys/unix/zsysnum_linux_ppc.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 1 + .../x/sys/unix/zsysnum_linux_riscv64.go | 1 + .../x/sys/unix/zsysnum_linux_s390x.go | 1 + .../x/sys/unix/zsysnum_linux_sparc64.go | 1 + .../golang.org/x/sys/unix/ztypes_linux.go | 7 ++-- src/cmd/vendor/modules.txt | 2 +- src/go.mod | 2 +- src/go.sum | 4 +- src/vendor/modules.txt | 2 +- 55 files changed, 314 insertions(+), 14 deletions(-) diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 44ff9046571020..c13914940fb9ad 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -8,7 +8,7 @@ require ( golang.org/x/build v0.0.0-20240722200705-b9910f320300 golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 - golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb + golang.org/x/sys v0.23.0 golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 golang.org/x/tools v0.23.1-0.20240722161640-ec1a81bfec7c diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 15be5526ff929d..2c46e6aa089f9d 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -14,8 +14,8 @@ golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 h1:54Tg3p/GyzLNJA1jtQxZSn golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 h1:8CBy3wSM3/YRXx26NPKZjPBNsnvI9dRRrSlB4Ps0HWY= golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb h1:IoPT3Y4jg6/QClnwgUYykkW0yKhqjC7VSJkQLzBukfY= -golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 h1:ka7TMW0Mo8QYTXm2hXSQ9fFUXS7Zln3S4pe9aq4JC7w= golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4/go.mod h1:amNmu/SBSm2GAF3X+9U2C0epLocdh+r5Z+7oMYO5cLM= golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 h1:BOrQi08eIX3cDgGcMgFONf27MxXigcYa9x+iW5JuCXw= diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go index 5682e2628ad017..3f1d3d4cb2560b 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -2592,3 +2592,4 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { } //sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) +//sys Mseal(b []byte, flags uint) (err error) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go index b25343c71a422f..b86ded549c662a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -293,6 +293,7 @@ func Uname(uname *Utsname) error { //sys Mkfifoat(dirfd int, path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go index 877a62b479a44f..01a70b24638e60 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -457,6 +457,7 @@ const ( B600 = 0x8 B75 = 0x2 B9600 = 0xd + BCACHEFS_SUPER_MAGIC = 0xca451a4e BDEVFS_MAGIC = 0x62646576 BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d @@ -928,6 +929,7 @@ const ( EPOLL_CTL_ADD = 0x1 EPOLL_CTL_DEL = 0x2 EPOLL_CTL_MOD = 0x3 + EPOLL_IOC_TYPE = 0x8a EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 ESP_V4_FLOW = 0xa ESP_V6_FLOW = 0xc @@ -941,9 +943,6 @@ const ( ETHTOOL_FEC_OFF = 0x4 ETHTOOL_FEC_RS = 0x8 ETHTOOL_FLAG_ALL = 0x7 - ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 - ETHTOOL_FLAG_OMIT_REPLY = 0x2 - ETHTOOL_FLAG_STATS = 0x4 ETHTOOL_FLASHDEV = 0x33 ETHTOOL_FLASH_MAX_FILENAME = 0x80 ETHTOOL_FWVERS_LEN = 0x20 @@ -1705,6 +1704,7 @@ const ( KEXEC_ARCH_S390 = 0x160000 KEXEC_ARCH_SH = 0x2a0000 KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_CRASH_HOTPLUG_SUPPORT = 0x8 KEXEC_FILE_DEBUG = 0x8 KEXEC_FILE_NO_INITRAMFS = 0x4 KEXEC_FILE_ON_CRASH = 0x2 @@ -1780,6 +1780,7 @@ const ( KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 LANDLOCK_ACCESS_FS_EXECUTE = 0x1 + LANDLOCK_ACCESS_FS_IOCTL_DEV = 0x8000 LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800 LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40 LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80 @@ -1861,6 +1862,19 @@ const ( MAP_FILE = 0x0 MAP_FIXED = 0x10 MAP_FIXED_NOREPLACE = 0x100000 + MAP_HUGE_16GB = 0x88000000 + MAP_HUGE_16KB = 0x38000000 + MAP_HUGE_16MB = 0x60000000 + MAP_HUGE_1GB = 0x78000000 + MAP_HUGE_1MB = 0x50000000 + MAP_HUGE_256MB = 0x70000000 + MAP_HUGE_2GB = 0x7c000000 + MAP_HUGE_2MB = 0x54000000 + MAP_HUGE_32MB = 0x64000000 + MAP_HUGE_512KB = 0x4c000000 + MAP_HUGE_512MB = 0x74000000 + MAP_HUGE_64KB = 0x40000000 + MAP_HUGE_8MB = 0x5c000000 MAP_HUGE_MASK = 0x3f MAP_HUGE_SHIFT = 0x1a MAP_PRIVATE = 0x2 @@ -2498,6 +2512,23 @@ const ( PR_PAC_GET_ENABLED_KEYS = 0x3d PR_PAC_RESET_KEYS = 0x36 PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_PPC_DEXCR_CTRL_CLEAR = 0x4 + PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10 + PR_PPC_DEXCR_CTRL_EDITABLE = 0x1 + PR_PPC_DEXCR_CTRL_MASK = 0x1f + PR_PPC_DEXCR_CTRL_SET = 0x2 + PR_PPC_DEXCR_CTRL_SET_ONEXEC = 0x8 + PR_PPC_DEXCR_IBRTPD = 0x1 + PR_PPC_DEXCR_NPHIE = 0x3 + PR_PPC_DEXCR_SBHE = 0x0 + PR_PPC_DEXCR_SRAPD = 0x2 + PR_PPC_GET_DEXCR = 0x48 + PR_PPC_SET_DEXCR = 0x49 + PR_RISCV_CTX_SW_FENCEI_OFF = 0x1 + PR_RISCV_CTX_SW_FENCEI_ON = 0x0 + PR_RISCV_SCOPE_PER_PROCESS = 0x0 + PR_RISCV_SCOPE_PER_THREAD = 0x1 + PR_RISCV_SET_ICACHE_FLUSH_CTX = 0x47 PR_RISCV_V_GET_CONTROL = 0x46 PR_RISCV_V_SET_CONTROL = 0x45 PR_RISCV_V_VSTATE_CTRL_CUR_MASK = 0x3 @@ -3192,6 +3223,7 @@ const ( STATX_MTIME = 0x40 STATX_NLINK = 0x4 STATX_SIZE = 0x200 + STATX_SUBVOL = 0x8000 STATX_TYPE = 0x1 STATX_UID = 0x8 STATX__RESERVED = 0x80000000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index e4bc0bd57c7c28..684a5168dac4e3 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 689317afdbf3af..61d74b592d6864 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 5cca668ac302f8..a28c9e3e893adb 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 14270508b04083..ab5d1fe8ead78b 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 ESR_MAGIC = 0x45535201 EXTPROC = 0x10000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 28e39afdcb4afa..c523090e7c17e0 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index cd66e92cb4264d..01e6ea7804b12a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index c1595eba78e340..7aa610b1e717ba 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index ee9456b0da7439..92af771b44a350 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 8cfca81e1b566e..b27ef5e6f11952 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 60b0deb3af7704..237a2cefb3e5a2 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index f90aa7281bfb26..4a5c555a36e2bf 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index ba9e01503383a0..a02fb49a5f8adb 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 07cdfd6e9fd3b7..e26a7c61b2b6fd 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 2f1dd214a74ef6..c48f7c2103b813 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -78,6 +78,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index f40519d901801a..ad4b9aace7bb6f 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -82,6 +82,8 @@ const ( EFD_CLOEXEC = 0x400000 EFD_NONBLOCK = 0x4000 EMT_TAGOVF = 0x1 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x400000 EXTPROC = 0x10000 FF1 = 0x8000 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 87d8612a1dc7c9..1bc1a5adb25fde 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -2229,3 +2229,19 @@ func Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mseal(b []byte, flags uint) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSEAL, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 9dc42410b78b13..1851df14e878ee 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 41b5617316c0a4..0b43c6936563a7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 0d3a0751cd435a..e1ec0dbe4ecf62 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 4019a656f6d57b..880c6d6e3167b1 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index c39f7776db33ff..7c8452a63e9294 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index ac4af24f908371..b8ef95b0fa1cb8 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 57571d072fe6ec..2ffdf861f757f2 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index f77d532121b9ca..2af3b5c762fd1b 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index e62963e67e204a..1da08d52675f92 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index fae140b62c9d3a..b7a251353b0fc0 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 00831354c82f49..6e85b0aac95c4a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index 9d1e0ff06d0f52..f15dadf0552f43 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -555,6 +555,12 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_mount(SB) + RET +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_nanosleep(SB) RET diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 79029ed584825f..28b487df2514d7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index da115f9a4b698c..1e7f321e436c11 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 53aef5dc58df2f..524b0820cbc2ee 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -457,4 +457,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 71d524763d343c..d3e38f681ab034 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -379,4 +379,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index c747706131cbba..70b35bf3b09f68 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -421,4 +421,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index f96e214f6d4086..6c778c23278f92 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -324,4 +324,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 28425346cf180f..37281cf51a80bb 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -318,4 +318,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index d0953018dae086..7e567f1efff21d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -441,4 +441,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 4459 SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 + SYS_MSEAL = 4462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 295c7f4b818490..38ae55e5ef8564 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -371,4 +371,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 5459 SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 + SYS_MSEAL = 5462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index d1a9eaca7a4183..55e92e60a82abe 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -371,4 +371,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 5459 SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 + SYS_MSEAL = 5462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index bec157c39fd0fe..60658d6a021f66 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -441,4 +441,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 4459 SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 + SYS_MSEAL = 4462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 7ee7bdc435cf8d..e203e8a7ed4b2c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -448,4 +448,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index fad1f25b449d65..5944b97d54604e 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -420,4 +420,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 7d3e16357d61f6..c66d416dad1ccb 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -420,4 +420,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 0ed53ad9f7e9b8..9889f6a5591b62 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -325,4 +325,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 2fba04ad500628..01d86825bb9264 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -386,4 +386,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 621d00d741bf6e..7b703e77cda845 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -399,4 +399,5 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go index 4740b834854bdd..b102b95a0a19db 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -110,7 +110,8 @@ type Statx_t struct { Mnt_id uint64 Dio_mem_align uint32 Dio_offset_align uint32 - _ [12]uint64 + Subvol uint64 + _ [11]uint64 } type Fsid struct { @@ -3473,7 +3474,7 @@ const ( DEVLINK_PORT_FN_ATTR_STATE = 0x2 DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3 DEVLINK_PORT_FN_ATTR_CAPS = 0x4 - DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x5 + DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x6 ) type FsverityDigest struct { @@ -3975,7 +3976,7 @@ const ( ETHTOOL_A_TSINFO_TX_TYPES = 0x3 ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x5 + ETHTOOL_A_TSINFO_MAX = 0x6 ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_HEADER = 0x1 ETHTOOL_A_CABLE_TEST_MAX = 0x1 diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 3d3a226686f040..f5cf6bd2188279 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -40,7 +40,7 @@ golang.org/x/mod/zip ## explicit; go 1.18 golang.org/x/sync/errgroup golang.org/x/sync/semaphore -# golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb +# golang.org/x/sys v0.23.0 ## explicit; go 1.18 golang.org/x/sys/plan9 golang.org/x/sys/unix diff --git a/src/go.mod b/src/go.mod index d7a4ef150410e3..df27f25e789f05 100644 --- a/src/go.mod +++ b/src/go.mod @@ -8,6 +8,6 @@ require ( ) require ( - golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb // indirect + golang.org/x/sys v0.23.0 // indirect golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 // indirect ) diff --git a/src/go.sum b/src/go.sum index 8ff5ecd640f084..b4efd6d3c50c11 100644 --- a/src/go.sum +++ b/src/go.sum @@ -2,7 +2,7 @@ golang.org/x/crypto v0.25.1-0.20240722173533-bb80217080b0 h1:wxHbFWyu21uEPJJnYaS golang.org/x/crypto v0.25.1-0.20240722173533-bb80217080b0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/net v0.27.1-0.20240722181819-765c7e89b3bd h1:pHzwejE8Zkb94bG4nA+fUeskKPFp1HPldrhv62dabro= golang.org/x/net v0.27.1-0.20240722181819-765c7e89b3bd/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb h1:IoPT3Y4jg6/QClnwgUYykkW0yKhqjC7VSJkQLzBukfY= -golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 h1:MlCLrwVF1WvXT14xTzwuKN3u4LpUve8sG/gJUCuBpe8= golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= diff --git a/src/vendor/modules.txt b/src/vendor/modules.txt index 7562f74b39ada6..cf5c0b83c9eeef 100644 --- a/src/vendor/modules.txt +++ b/src/vendor/modules.txt @@ -18,7 +18,7 @@ golang.org/x/net/idna golang.org/x/net/lif golang.org/x/net/nettest golang.org/x/net/route -# golang.org/x/sys v0.22.1-0.20240722205227-beb594982ddb +# golang.org/x/sys v0.23.0 ## explicit; go 1.18 golang.org/x/sys/cpu # golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 From d0e7642a3648b85051e9ea6ca3ef527451a3b86a Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Wed, 7 Aug 2024 15:04:05 -0400 Subject: [PATCH 205/866] cmd: update golang.org/x/mod to v0.20.0 Commands run: go get golang.org/x/mod@v0.20.0 go mod tidy go mod vendor This is being done in preparation for vendoring in the latest commit of golang.org/x/telemetry. Change-Id: I67de7c23c4949cde63826c9d791f7b67698491d4 Reviewed-on: https://go-review.googlesource.com/c/go/+/603897 LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Matloob Reviewed-by: Robert Findley --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 ++-- src/cmd/vendor/golang.org/x/mod/modfile/read.go | 7 ++++--- src/cmd/vendor/modules.txt | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/cmd/go.mod b/src/cmd/go.mod index c13914940fb9ad..22722e40788dc9 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -6,7 +6,7 @@ require ( github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea golang.org/x/build v0.0.0-20240722200705-b9910f320300 - golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 + golang.org/x/mod v0.20.0 golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 golang.org/x/sys v0.23.0 golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 2c46e6aa089f9d..4bcb0bac3825f4 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -10,8 +10,8 @@ golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea h1:+dKVGZM+cuxx3fooVKLDxZ golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/build v0.0.0-20240722200705-b9910f320300 h1:2Cqg4LnvfD2ZpG8+6KbyYUkweWhNS3SgfcN/eeVseJ0= golang.org/x/build v0.0.0-20240722200705-b9910f320300/go.mod h1:YsGhg4JUVUWLzdqU2wCrtpRrOveOql6w56FLDHq/CJ4= -golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 h1:54Tg3p/GyzLNJA1jtQxZSn7GRaB5Exi/C9aOk+XpfhM= -golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 h1:8CBy3wSM3/YRXx26NPKZjPBNsnvI9dRRrSlB4Ps0HWY= golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= diff --git a/src/cmd/vendor/golang.org/x/mod/modfile/read.go b/src/cmd/vendor/golang.org/x/mod/modfile/read.go index 2205682591587f..de1b98211a1907 100644 --- a/src/cmd/vendor/golang.org/x/mod/modfile/read.go +++ b/src/cmd/vendor/golang.org/x/mod/modfile/read.go @@ -226,8 +226,9 @@ func (x *FileSyntax) Cleanup() { continue } if ww == 1 && len(stmt.RParen.Comments.Before) == 0 { - // Collapse block into single line. - line := &Line{ + // Collapse block into single line but keep the Line reference used by the + // parsed File structure. + *stmt.Line[0] = Line{ Comments: Comments{ Before: commentsAdd(stmt.Before, stmt.Line[0].Before), Suffix: commentsAdd(stmt.Line[0].Suffix, stmt.Suffix), @@ -235,7 +236,7 @@ func (x *FileSyntax) Cleanup() { }, Token: stringsAdd(stmt.Token, stmt.Line[0].Token), } - x.Stmt[w] = line + x.Stmt[w] = stmt.Line[0] w++ continue } diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index f5cf6bd2188279..7b8d210d156e90 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -25,7 +25,7 @@ golang.org/x/arch/x86/x86asm # golang.org/x/build v0.0.0-20240722200705-b9910f320300 ## explicit; go 1.21 golang.org/x/build/relnote -# golang.org/x/mod v0.19.1-0.20240718175220-b56a28f8bd83 +# golang.org/x/mod v0.20.0 ## explicit; go 1.18 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile From 5eeba95bada12992b666f2ae33fafb5991b3ca46 Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Wed, 7 Aug 2024 15:06:20 -0400 Subject: [PATCH 206/866] cmd: update golang.org/x/telemetry to 38c23d2 Commands run: go get golang.org/x/telemetry@38c23d2 go mod tidy go mod vendor This also pulls in golang.org/x/sync@v0.8.0 as a module requirement, but no changes need to be vendored from that module. Change-Id: I2238388b6dc2a4a29a53e7b8ddea29eb677a97b7 Reviewed-on: https://go-review.googlesource.com/c/go/+/603898 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley --- src/cmd/go.mod | 4 ++-- src/cmd/go.sum | 8 ++++---- .../golang.org/x/telemetry/internal/telemetry/dir.go | 5 ++++- .../golang.org/x/telemetry/internal/telemetry/proginfo.go | 4 +++- src/cmd/vendor/modules.txt | 4 ++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 22722e40788dc9..4d458ac783b65d 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -7,9 +7,9 @@ require ( golang.org/x/arch v0.8.1-0.20240716161256-b863392466ea golang.org/x/build v0.0.0-20240722200705-b9910f320300 golang.org/x/mod v0.20.0 - golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 + golang.org/x/sync v0.8.0 golang.org/x/sys v0.23.0 - golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 + golang.org/x/telemetry v0.0.0-20240807181058-38c23d25f755 golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 golang.org/x/tools v0.23.1-0.20240722161640-ec1a81bfec7c ) diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 4bcb0bac3825f4..d63f9fec18c36b 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -12,12 +12,12 @@ golang.org/x/build v0.0.0-20240722200705-b9910f320300 h1:2Cqg4LnvfD2ZpG8+6KbyYUk golang.org/x/build v0.0.0-20240722200705-b9910f320300/go.mod h1:YsGhg4JUVUWLzdqU2wCrtpRrOveOql6w56FLDHq/CJ4= golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 h1:8CBy3wSM3/YRXx26NPKZjPBNsnvI9dRRrSlB4Ps0HWY= -golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 h1:ka7TMW0Mo8QYTXm2hXSQ9fFUXS7Zln3S4pe9aq4JC7w= -golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4/go.mod h1:amNmu/SBSm2GAF3X+9U2C0epLocdh+r5Z+7oMYO5cLM= +golang.org/x/telemetry v0.0.0-20240807181058-38c23d25f755 h1:Gv9T6gPIHuUCC/THKUdLbAj1GeBKx7auk9c9w/5CHPk= +golang.org/x/telemetry v0.0.0-20240807181058-38c23d25f755/go.mod h1:m7R/r+o5h7UvF2JD9n2iLSGY4v8v+zNSyTJ6xynLrqs= golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292 h1:BOrQi08eIX3cDgGcMgFONf27MxXigcYa9x+iW5JuCXw= golang.org/x/term v0.22.1-0.20240716160707-d4346f0be292/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.16.1-0.20240716160804-ae0cf96bbcd9 h1:MlCLrwVF1WvXT14xTzwuKN3u4LpUve8sG/gJUCuBpe8= diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/dir.go b/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/dir.go index dd7a63c8169121..bb18bc69364965 100644 --- a/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/dir.go +++ b/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/dir.go @@ -148,6 +148,8 @@ func (d Dir) Mode() (string, time.Time) { // DisabledOnPlatform indicates whether telemetry is disabled // due to bugs in the current platform. +// +// TODO(rfindley): move to a more appropriate file. const DisabledOnPlatform = false || // The following platforms could potentially be supported in the future: runtime.GOOS == "openbsd" || // #60614 @@ -157,4 +159,5 @@ const DisabledOnPlatform = false || // These platforms fundamentally can't be supported: runtime.GOOS == "js" || // #60971 runtime.GOOS == "wasip1" || // #60971 - runtime.GOOS == "plan9" // https://github.com/golang/go/issues/57540#issuecomment-1470766639 + runtime.GOOS == "plan9" || // https://github.com/golang/go/issues/57540#issuecomment-1470766639 + runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" // mips lacks cross-process 64-bit atomics diff --git a/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go b/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go index 60cb0edc792a59..f6b074f1c9dbbe 100644 --- a/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go +++ b/src/cmd/vendor/golang.org/x/telemetry/internal/telemetry/proginfo.go @@ -26,7 +26,9 @@ func IsToolchainProgram(progPath string) bool { // special characters. func ProgramInfo(info *debug.BuildInfo) (goVers, progPath, progVers string) { goVers = info.GoVersion - if strings.Contains(goVers, "devel") || strings.Contains(goVers, "-") { + // TODO(matloob): Use go/version.IsValid instead of checking for X: once the telemetry + // module can be upgraded to require Go 1.22. + if strings.Contains(goVers, "devel") || strings.Contains(goVers, "-") || strings.Contains(goVers, "X:") { goVers = "devel" } diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 7b8d210d156e90..e30941d68b9936 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -36,7 +36,7 @@ golang.org/x/mod/sumdb/dirhash golang.org/x/mod/sumdb/note golang.org/x/mod/sumdb/tlog golang.org/x/mod/zip -# golang.org/x/sync v0.7.1-0.20240716160658-411f99ef1213 +# golang.org/x/sync v0.8.0 ## explicit; go 1.18 golang.org/x/sync/errgroup golang.org/x/sync/semaphore @@ -45,7 +45,7 @@ golang.org/x/sync/semaphore golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/telemetry v0.0.0-20240723021908-ccdfb411a0c4 +# golang.org/x/telemetry v0.0.0-20240807181058-38c23d25f755 ## explicit; go 1.20 golang.org/x/telemetry golang.org/x/telemetry/counter From 9177e12ccc2115e44de824ae7247ace88617c29a Mon Sep 17 00:00:00 2001 From: Jorropo Date: Wed, 7 Aug 2024 21:25:41 +0200 Subject: [PATCH 207/866] =?UTF-8?q?cmd/compile:=20fix=20loong64=20MINF=20?= =?UTF-8?q?=E2=86=92=20FMINF=20name=20and=20friends?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CL 580283 left cmd/compile/internal/ssa/_gen/ in a state where `go run *.go` would always fails ! :'( Change-Id: I0b3aea9b3f6275cb17c552898c5034e15f0107d5 Reviewed-on: https://go-review.googlesource.com/c/go/+/603995 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index 874c0c9e09945e..8046ffead34670 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -193,10 +193,10 @@ func init() { {name: "SQRTD", argLength: 1, reg: fp11, asm: "SQRTD"}, // sqrt(arg0), float64 {name: "SQRTF", argLength: 1, reg: fp11, asm: "SQRTF"}, // sqrt(arg0), float32 - {name: "MINF", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MINF", commutative: true, typ: "Float32"}, // min(arg0, arg1), float32 - {name: "MIND", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MIND", commutative: true, typ: "Float64"}, // min(arg0, arg1), float64 - {name: "MAXF", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MAXF", commutative: true, typ: "Float32"}, // max(arg0, arg1), float32 - {name: "MAXD", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "MAXD", commutative: true, typ: "Float64"}, // max(arg0, arg1), float64 + {name: "FMINF", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "FMINF", commutative: true, typ: "Float32"}, // min(arg0, arg1), float32 + {name: "FMIND", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "FMIND", commutative: true, typ: "Float64"}, // min(arg0, arg1), float64 + {name: "FMAXF", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "FMAXF", commutative: true, typ: "Float32"}, // max(arg0, arg1), float32 + {name: "FMAXD", argLength: 2, reg: fp21, resultNotInArgs: true, asm: "FMAXD", commutative: true, typ: "Float64"}, // max(arg0, arg1), float64 {name: "MASKEQZ", argLength: 2, reg: gp21, asm: "MASKEQZ"}, // returns 0 if arg1 == 0, otherwise returns arg0 {name: "MASKNEZ", argLength: 2, reg: gp21, asm: "MASKNEZ"}, // returns 0 if arg1 != 0, otherwise returns arg0 From de40308ad25310b6d3db14d8afdd4456708c2e43 Mon Sep 17 00:00:00 2001 From: Branden J Brown Date: Wed, 7 Aug 2024 13:35:59 -0500 Subject: [PATCH 208/866] .github: update language change proposal template The language change proposal review process has been adjusted slightly. Update the corresponding issue template to reflect the changes. For #65660. Change-Id: Ic6d3526ab4a7fa09433914fd0b1525eea3a832a0 Reviewed-on: https://go-review.googlesource.com/c/go/+/603955 Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- .github/ISSUE_TEMPLATE/11-language-change.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/11-language-change.yml b/.github/ISSUE_TEMPLATE/11-language-change.yml index 37ba2d7e408fbc..ac26ef6cb445bc 100644 --- a/.github/ISSUE_TEMPLATE/11-language-change.yml +++ b/.github/ISSUE_TEMPLATE/11-language-change.yml @@ -1,7 +1,7 @@ name: Language Change Proposals description: Changes to the language -labels: ["Proposal", "v2", "LanguageChange"] -title: "proposal: Go 2: proposal title" +labels: ["Proposal", "LanguageChange", "LanguageChangeReview"] +title: "proposal: spec: proposal title" body: From 48a1f6989ccd74ad2cb7eab14cdfab1e06bc36b4 Mon Sep 17 00:00:00 2001 From: Mateusz Poliwczak Date: Wed, 7 Aug 2024 09:20:30 +0000 Subject: [PATCH 209/866] hash: mention encoding.BinaryAppender in Hash docs For #62384 Change-Id: I4eeb83a4708544777815eacd6a5b6d293580c5e5 GitHub-Last-Rev: 6fdb6db4811a7b19742fec556fd5a1d5002b4e5e GitHub-Pull-Request: golang/go#68758 Reviewed-on: https://go-review.googlesource.com/c/go/+/603405 Auto-Submit: Ian Lance Taylor Reviewed-by: David Chase Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/hash/hash.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hash/hash.go b/src/hash/hash.go index 82c81034ffcb51..08a0c6764c3dda 100644 --- a/src/hash/hash.go +++ b/src/hash/hash.go @@ -10,8 +10,8 @@ import "io" // Hash is the common interface implemented by all hash functions. // // Hash implementations in the standard library (e.g. [hash/crc32] and -// [crypto/sha256]) implement the [encoding.BinaryMarshaler] and -// [encoding.BinaryUnmarshaler] interfaces. Marshaling a hash implementation +// [crypto/sha256]) implement the [encoding.BinaryMarshaler], [encoding.BinaryAppender] +// and [encoding.BinaryUnmarshaler] interfaces. Marshaling a hash implementation // allows its internal state to be saved and used for additional processing // later, without having to re-write the data previously written to the hash. // The hash state may contain portions of the input in its original form, From db0b6a85c27b6ae8bd132be11ba07c29c01f4165 Mon Sep 17 00:00:00 2001 From: apocelipes Date: Wed, 7 Aug 2024 23:35:23 +0000 Subject: [PATCH 210/866] net/url: implement encoding.BinaryAppender for URL For #62384 Change-Id: I61529efe3a59b13606479b74af6cbff61c9efb6e GitHub-Last-Rev: f188b91978711c55aa2daf2c72277990d25bc328 GitHub-Pull-Request: golang/go#68763 Reviewed-on: https://go-review.googlesource.com/c/go/+/603815 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Reviewed-by: David Chase Auto-Submit: Ian Lance Taylor --- api/next/62384.txt | 1 + doc/next/6-stdlib/99-minor/net/url/62384.md | 1 + src/net/url/url.go | 6 +++++- src/net/url/url_test.go | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 doc/next/6-stdlib/99-minor/net/url/62384.md diff --git a/api/next/62384.txt b/api/next/62384.txt index c8dc0c8350cb42..37e0080a139ace 100644 --- a/api/next/62384.txt +++ b/api/next/62384.txt @@ -2,3 +2,4 @@ pkg encoding, type BinaryAppender interface { AppendBinary } #62384 pkg encoding, type BinaryAppender interface, AppendBinary([]uint8) ([]uint8, error) #62384 pkg encoding, type TextAppender interface { AppendText } #62384 pkg encoding, type TextAppender interface, AppendText([]uint8) ([]uint8, error) #62384 +pkg net/url, method (*URL) AppendBinary([]uint8) ([]uint8, error) #62384 diff --git a/doc/next/6-stdlib/99-minor/net/url/62384.md b/doc/next/6-stdlib/99-minor/net/url/62384.md new file mode 100644 index 00000000000000..1d759434e1a1c6 --- /dev/null +++ b/doc/next/6-stdlib/99-minor/net/url/62384.md @@ -0,0 +1 @@ +[URL] now also implements the [encoding.BinaryAppender] interface. diff --git a/src/net/url/url.go b/src/net/url/url.go index 7beaef1ba66311..9af192fa1f29de 100644 --- a/src/net/url/url.go +++ b/src/net/url/url.go @@ -1219,7 +1219,11 @@ func splitHostPort(hostPort string) (host, port string) { // Would like to implement MarshalText/UnmarshalText but that will change the JSON representation of URLs. func (u *URL) MarshalBinary() (text []byte, err error) { - return []byte(u.String()), nil + return u.AppendBinary(nil) +} + +func (u *URL) AppendBinary(b []byte) ([]byte, error) { + return append(b, u.String()...), nil } func (u *URL) UnmarshalBinary(text []byte) error { diff --git a/src/net/url/url_test.go b/src/net/url/url_test.go index 68219c3df1081d..16e08b63c6d098 100644 --- a/src/net/url/url_test.go +++ b/src/net/url/url_test.go @@ -1866,6 +1866,7 @@ func TestURLHostnameAndPort(t *testing.T) { var _ encodingPkg.BinaryMarshaler = (*URL)(nil) var _ encodingPkg.BinaryUnmarshaler = (*URL)(nil) +var _ encodingPkg.BinaryAppender = (*URL)(nil) func TestJSON(t *testing.T) { u, err := Parse("https://www.google.com/x?y=z") From fe392d0dff0089c70f6addf83c122100af7d24be Mon Sep 17 00:00:00 2001 From: qmuntal Date: Thu, 1 Aug 2024 16:26:00 +0200 Subject: [PATCH 211/866] os/user: support calling Current on impersonated threads The syscall.OpenCurrentProcessToken call in user.Current fails when called from an impersonated thread, as the process token is normally in that case. This change ensures that the current thread is not impersonated when calling OpenCurrentProcessToken, and then restores the impersonation state, if any. Fixes #68647 Change-Id: I3197535dd8355d21029a42f7aa3936d8fb021202 Reviewed-on: https://go-review.googlesource.com/c/go/+/602415 Reviewed-by: David Chase Reviewed-by: Michael Knyszek Reviewed-by: Alex Brainman LUCI-TryBot-Result: Go LUCI --- .../syscall/windows/security_windows.go | 24 +++ .../syscall/windows/syscall_windows.go | 1 + .../syscall/windows/zsyscall_windows.go | 36 +++++ src/os/user/lookup_windows.go | 113 ++++++++++---- src/os/user/user_windows_test.go | 145 ++++++++++++++++++ 5 files changed, 291 insertions(+), 28 deletions(-) create mode 100644 src/os/user/user_windows_test.go diff --git a/src/internal/syscall/windows/security_windows.go b/src/internal/syscall/windows/security_windows.go index c8c5cbed747360..95694c368a54c2 100644 --- a/src/internal/syscall/windows/security_windows.go +++ b/src/internal/syscall/windows/security_windows.go @@ -18,6 +18,8 @@ const ( //sys ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf //sys RevertToSelf() (err error) = advapi32.RevertToSelf +//sys ImpersonateLoggedOnUser(token syscall.Token) (err error) = advapi32.ImpersonateLoggedOnUser +//sys LogonUser(username *uint16, domain *uint16, password *uint16, logonType uint32, logonProvider uint32, token *syscall.Token) (err error) = advapi32.LogonUserW const ( TOKEN_ADJUST_PRIVILEGES = 0x0020 @@ -93,6 +95,26 @@ type LocalGroupUserInfo0 struct { Name *uint16 } +const ( + NERR_UserNotFound syscall.Errno = 2221 + NERR_UserExists syscall.Errno = 2224 +) + +const ( + USER_PRIV_USER = 1 +) + +type UserInfo1 struct { + Name *uint16 + Password *uint16 + PasswordAge uint32 + Priv uint32 + HomeDir *uint16 + Comment *uint16 + Flags uint32 + ScriptPath *uint16 +} + type UserInfo4 struct { Name *uint16 Password *uint16 @@ -125,6 +147,8 @@ type UserInfo4 struct { PasswordExpired uint32 } +//sys NetUserAdd(serverName *uint16, level uint32, buf *byte, parmErr *uint32) (neterr error) = netapi32.NetUserAdd +//sys NetUserDel(serverName *uint16, userName *uint16) (neterr error) = netapi32.NetUserDel //sys NetUserGetLocalGroups(serverName *uint16, userName *uint16, level uint32, flags uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32) (neterr error) = netapi32.NetUserGetLocalGroups // GetSystemDirectory retrieves the path to current location of the system diff --git a/src/internal/syscall/windows/syscall_windows.go b/src/internal/syscall/windows/syscall_windows.go index cc26a50bb0acf2..944e4e24505bc2 100644 --- a/src/internal/syscall/windows/syscall_windows.go +++ b/src/internal/syscall/windows/syscall_windows.go @@ -39,6 +39,7 @@ const ( ERROR_CALL_NOT_IMPLEMENTED syscall.Errno = 120 ERROR_INVALID_NAME syscall.Errno = 123 ERROR_LOCK_FAILED syscall.Errno = 167 + ERROR_NO_TOKEN syscall.Errno = 1008 ERROR_NO_UNICODE_TRANSLATION syscall.Errno = 1113 ) diff --git a/src/internal/syscall/windows/zsyscall_windows.go b/src/internal/syscall/windows/zsyscall_windows.go index 414ad2647d1abd..7e4d91112b1188 100644 --- a/src/internal/syscall/windows/zsyscall_windows.go +++ b/src/internal/syscall/windows/zsyscall_windows.go @@ -49,7 +49,9 @@ var ( procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") + procImpersonateLoggedOnUser = modadvapi32.NewProc("ImpersonateLoggedOnUser") procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") + procLogonUserW = modadvapi32.NewProc("LogonUserW") procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") procOpenSCManagerW = modadvapi32.NewProc("OpenSCManagerW") procOpenServiceW = modadvapi32.NewProc("OpenServiceW") @@ -82,6 +84,8 @@ var ( procVirtualQuery = modkernel32.NewProc("VirtualQuery") procNetShareAdd = modnetapi32.NewProc("NetShareAdd") procNetShareDel = modnetapi32.NewProc("NetShareDel") + procNetUserAdd = modnetapi32.NewProc("NetUserAdd") + procNetUserDel = modnetapi32.NewProc("NetUserDel") procNetUserGetLocalGroups = modnetapi32.NewProc("NetUserGetLocalGroups") procRtlGetVersion = modntdll.NewProc("RtlGetVersion") procGetProcessMemoryInfo = modpsapi.NewProc("GetProcessMemoryInfo") @@ -113,6 +117,14 @@ func DuplicateTokenEx(hExistingToken syscall.Token, dwDesiredAccess uint32, lpTo return } +func ImpersonateLoggedOnUser(token syscall.Token) (err error) { + r1, _, e1 := syscall.Syscall(procImpersonateLoggedOnUser.Addr(), 1, uintptr(token), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func ImpersonateSelf(impersonationlevel uint32) (err error) { r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(impersonationlevel), 0, 0) if r1 == 0 { @@ -121,6 +133,14 @@ func ImpersonateSelf(impersonationlevel uint32) (err error) { return } +func LogonUser(username *uint16, domain *uint16, password *uint16, logonType uint32, logonProvider uint32, token *syscall.Token) (err error) { + r1, _, e1 := syscall.Syscall6(procLogonUserW.Addr(), 6, uintptr(unsafe.Pointer(username)), uintptr(unsafe.Pointer(domain)), uintptr(unsafe.Pointer(password)), uintptr(logonType), uintptr(logonProvider), uintptr(unsafe.Pointer(token))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) { r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) if r1 == 0 { @@ -385,6 +405,22 @@ func NetShareDel(serverName *uint16, netName *uint16, reserved uint32) (neterr e return } +func NetUserAdd(serverName *uint16, level uint32, buf *byte, parmErr *uint32) (neterr error) { + r0, _, _ := syscall.Syscall6(procNetUserAdd.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(parmErr)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetUserDel(serverName *uint16, userName *uint16) (neterr error) { + r0, _, _ := syscall.Syscall(procNetUserDel.Addr(), 2, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + func NetUserGetLocalGroups(serverName *uint16, userName *uint16, level uint32, flags uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32) (neterr error) { r0, _, _ := syscall.Syscall9(procNetUserGetLocalGroups.Addr(), 8, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(flags), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), 0) if r0 != 0 { diff --git a/src/os/user/lookup_windows.go b/src/os/user/lookup_windows.go index a48fc89720b1cb..f259269a5393ec 100644 --- a/src/os/user/lookup_windows.go +++ b/src/os/user/lookup_windows.go @@ -5,9 +5,11 @@ package user import ( + "errors" "fmt" "internal/syscall/windows" "internal/syscall/windows/registry" + "runtime" "syscall" "unsafe" ) @@ -200,36 +202,91 @@ var ( ) func current() (*User, error) { - t, e := syscall.OpenCurrentProcessToken() - if e != nil { - return nil, e - } - defer t.Close() - u, e := t.GetTokenUser() - if e != nil { - return nil, e - } - pg, e := t.GetTokenPrimaryGroup() - if e != nil { - return nil, e - } - uid, e := u.User.Sid.String() - if e != nil { - return nil, e - } - gid, e := pg.PrimaryGroup.String() - if e != nil { - return nil, e - } - dir, e := t.GetUserProfileDirectory() - if e != nil { - return nil, e + // Use runAsProcessOwner to ensure that we can access the process token + // when calling syscall.OpenCurrentProcessToken if the current thread + // is impersonating a different user. See https://go.dev/issue/68647. + var usr *User + err := runAsProcessOwner(func() error { + t, e := syscall.OpenCurrentProcessToken() + if e != nil { + return e + } + defer t.Close() + u, e := t.GetTokenUser() + if e != nil { + return e + } + pg, e := t.GetTokenPrimaryGroup() + if e != nil { + return e + } + uid, e := u.User.Sid.String() + if e != nil { + return e + } + gid, e := pg.PrimaryGroup.String() + if e != nil { + return e + } + dir, e := t.GetUserProfileDirectory() + if e != nil { + return e + } + username, domain, e := lookupUsernameAndDomain(u.User.Sid) + if e != nil { + return e + } + usr, e = newUser(uid, gid, dir, username, domain) + return e + }) + return usr, err +} + +// runAsProcessOwner runs f in the context of the current process owner, +// that is, removing any impersonation that may be in effect before calling f, +// and restoring the impersonation afterwards. +func runAsProcessOwner(f func() error) error { + var impersonationRollbackErr error + runtime.LockOSThread() + defer func() { + // If impersonation failed, the thread is running with the wrong token, + // so it's better to terminate it. + // This is achieved by not calling runtime.UnlockOSThread. + if impersonationRollbackErr != nil { + println("os/user: failed to revert to previous token:", impersonationRollbackErr.Error()) + runtime.Goexit() + } else { + runtime.UnlockOSThread() + } + }() + prevToken, isProcessToken, err := getCurrentToken() + if err != nil { + return fmt.Errorf("os/user: failed to get current token: %w", err) } - username, domain, e := lookupUsernameAndDomain(u.User.Sid) - if e != nil { - return nil, e + defer prevToken.Close() + if !isProcessToken { + if err = windows.RevertToSelf(); err != nil { + return fmt.Errorf("os/user: failed to revert to self: %w", err) + } + defer func() { + impersonationRollbackErr = windows.ImpersonateLoggedOnUser(prevToken) + }() } - return newUser(uid, gid, dir, username, domain) + return f() +} + +// getCurrentToken returns the current thread token, or +// the process token if the thread doesn't have a token. +func getCurrentToken() (t syscall.Token, isProcessToken bool, err error) { + thread, _ := windows.GetCurrentThread() + // Need TOKEN_DUPLICATE and TOKEN_IMPERSONATE to use the token in ImpersonateLoggedOnUser. + err = windows.OpenThreadToken(thread, syscall.TOKEN_QUERY|syscall.TOKEN_DUPLICATE|syscall.TOKEN_IMPERSONATE, true, &t) + if errors.Is(err, windows.ERROR_NO_TOKEN) { + // Not impersonating, use the process token. + isProcessToken = true + t, err = syscall.OpenCurrentProcessToken() + } + return t, isProcessToken, err } // lookupUserPrimaryGroup obtains the primary group SID for a user using this method: diff --git a/src/os/user/user_windows_test.go b/src/os/user/user_windows_test.go new file mode 100644 index 00000000000000..3364d7c9eac565 --- /dev/null +++ b/src/os/user/user_windows_test.go @@ -0,0 +1,145 @@ +// Copyright 2024 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 user + +import ( + "crypto/rand" + "encoding/base64" + "errors" + "internal/syscall/windows" + "runtime" + "strconv" + "syscall" + "testing" + "unsafe" +) + +// windowsTestAcount creates a test user and returns a token for that user. +// If the user already exists, it will be deleted and recreated. +// The caller is responsible for closing the token. +func windowsTestAcount(t *testing.T) syscall.Token { + var password [33]byte + rand.Read(password[:]) + // Add special chars to ensure it satisfies password requirements. + pwd := base64.StdEncoding.EncodeToString(password[:]) + "_-As@!%*(1)4#2" + name, err := syscall.UTF16PtrFromString("GoStdTestUser01") + if err != nil { + t.Fatal(err) + } + pwd16, err := syscall.UTF16PtrFromString(pwd) + if err != nil { + t.Fatal(err) + } + userInfo := windows.UserInfo1{ + Name: name, + Password: pwd16, + Priv: windows.USER_PRIV_USER, + } + // Create user. + err = windows.NetUserAdd(nil, 1, (*byte)(unsafe.Pointer(&userInfo)), nil) + if errors.Is(err, syscall.ERROR_ACCESS_DENIED) { + t.Skip("skipping test; don't have permission to create user") + } + if errors.Is(err, windows.NERR_UserExists) { + // User already exists, delete and recreate. + if err = windows.NetUserDel(nil, name); err != nil { + t.Fatal(err) + } + if err = windows.NetUserAdd(nil, 1, (*byte)(unsafe.Pointer(&userInfo)), nil); err != nil { + t.Fatal(err) + } + } else if err != nil { + t.Fatal(err) + } + domain, err := syscall.UTF16PtrFromString(".") + if err != nil { + t.Fatal(err) + } + const LOGON32_PROVIDER_DEFAULT = 0 + const LOGON32_LOGON_INTERACTIVE = 2 + var token syscall.Token + if err = windows.LogonUser(name, domain, pwd16, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &token); err != nil { + t.Fatal(err) + } + t.Cleanup(func() { + token.Close() + if err = windows.NetUserDel(nil, name); err != nil { + if !errors.Is(err, windows.NERR_UserNotFound) { + t.Fatal(err) + } + } + }) + return token +} + +func TestImpersonatedSelf(t *testing.T) { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + want, err := current() + if err != nil { + t.Fatal(err) + } + + levels := []uint32{ + windows.SecurityAnonymous, + windows.SecurityIdentification, + windows.SecurityImpersonation, + windows.SecurityDelegation, + } + for _, level := range levels { + t.Run(strconv.Itoa(int(level)), func(t *testing.T) { + if err = windows.ImpersonateSelf(level); err != nil { + t.Fatal(err) + } + defer windows.RevertToSelf() + + got, err := current() + if level == windows.SecurityAnonymous { + // We can't get the process token when using an anonymous token, + // so we expect an error here. + if err == nil { + t.Fatal("expected error") + } + return + } + if err != nil { + t.Fatal(err) + } + compare(t, want, got) + }) + } +} + +func TestImpersonated(t *testing.T) { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + want, err := current() + if err != nil { + t.Fatal(err) + } + + // Create a test user and log in as that user. + token := windowsTestAcount(t) + + // Impersonate the test user. + if err = windows.ImpersonateLoggedOnUser(token); err != nil { + t.Fatal(err) + } + defer func() { + err = windows.RevertToSelf() + if err != nil { + // If we can't revert to self, we can't continue testing. + panic(err) + } + }() + + got, err := current() + if err != nil { + t.Fatal(err) + } + compare(t, want, got) +} From ed31d642cb3465ad9cf5d891285ea82948e26026 Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Wed, 7 Aug 2024 20:14:30 +0300 Subject: [PATCH 212/866] fmt: remove ineffective else branch in test Change-Id: I8e47266e8b3fb2f2ae07455b317de58dfcdd8016 Reviewed-on: https://go-review.googlesource.com/c/go/+/603536 Auto-Submit: Ian Lance Taylor Reviewed-by: David Chase Reviewed-by: Ian Lance Taylor Commit-Queue: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/fmt/fmt_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/src/fmt/fmt_test.go b/src/fmt/fmt_test.go index 0f4a35dd6fe540..b7f9ccd494d099 100644 --- a/src/fmt/fmt_test.go +++ b/src/fmt/fmt_test.go @@ -1230,7 +1230,6 @@ func TestReorder(t *testing.T) { s := Sprintf(tt.fmt, tt.val...) if s != tt.out { t.Errorf("Sprintf(%q, %v) = <%s> want <%s>", tt.fmt, tt.val, s, tt.out) - } else { } } } From 84266e1469cfa6fa8e1b41518528a96950db7562 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Thu, 8 Aug 2024 13:11:14 -0700 Subject: [PATCH 213/866] os: fix Chtimes test flakes It appears that some builders (notably, linux-arm) have some additional security software installed, which apparently reads the files created by tests. As a result, test file atime is changed, making the test fail like these: === RUN TestChtimesOmit ... os_test.go:1475: atime mismatch, got: "2024-07-30 18:42:03.450932494 +0000 UTC", want: "2024-07-30 18:42:02.450932494 +0000 UTC" === RUN TestChtimes ... os_test.go:1539: AccessTime didn't go backwards; was=2024-07-31 20:45:53.390326147 +0000 UTC, after=2024-07-31 20:45:53.394326118 +0000 UTC According to inode(7), atime is changed when more than 0 bytes are read from the file. So, one possible solution to these flakes is to make the test files empty, so no one can read more than 0 bytes from them. Fixes #68687 Fixes #68663 Change-Id: Ib9234567883ef7b16ff8811e3360cd26c2d6bdab Reviewed-on: https://go-review.googlesource.com/c/go/+/604315 LUCI-TryBot-Result: Go LUCI Reviewed-by: Kirill Kolyshkin Reviewed-by: Robert Griesemer Reviewed-by: Ian Lance Taylor Commit-Queue: Ian Lance Taylor Auto-Submit: Ian Lance Taylor --- src/os/os_test.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/os/os_test.go b/src/os/os_test.go index e42179538077c4..9832e595ae748e 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -1375,8 +1375,7 @@ func TestChtimes(t *testing.T) { t.Parallel() f := newFile(t) - - f.Write([]byte("hello, world\n")) + // This should be an empty file (see #68687, #68663). f.Close() testChtimes(t, f.Name()) @@ -1394,12 +1393,9 @@ func TestChtimesOmit(t *testing.T) { func testChtimesOmit(t *testing.T, omitAt, omitMt bool) { t.Logf("omit atime: %v, mtime: %v", omitAt, omitMt) file := newFile(t) - _, err := file.Write([]byte("hello, world\n")) - if err != nil { - t.Fatal(err) - } + // This should be an empty file (see #68687, #68663). name := file.Name() - err = file.Close() + err := file.Close() if err != nil { t.Error(err) } From 1d925fcc7e0b4c2fb9e671f5c868e52c6a48db1f Mon Sep 17 00:00:00 2001 From: limeidan Date: Wed, 1 Nov 2023 17:25:20 +0800 Subject: [PATCH 214/866] cmd/link: add support for trampoline insertation on loong64 Change-Id: I58c861d8403a77c1f3b55207d46076ba76eb1d45 Reviewed-on: https://go-review.googlesource.com/c/go/+/540755 LUCI-TryBot-Result: Go LUCI Reviewed-by: sophie zhao Reviewed-by: Michael Knyszek Reviewed-by: abner chenc Reviewed-by: David Chase Reviewed-by: Qiqi Huang --- src/cmd/link/internal/ld/data.go | 8 +- src/cmd/link/internal/loong64/asm.go | 125 +++++++++++++++++++++++++++ src/cmd/link/internal/loong64/obj.go | 2 + src/cmd/link/link_test.go | 4 +- 4 files changed, 136 insertions(+), 3 deletions(-) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 92a8656c355d14..cf4b88f895fa66 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -92,6 +92,8 @@ func maxSizeTrampolines(ctxt *Link, ldr *loader.Loader, s loader.Sym, isTramp bo return n * 20 // Trampolines in ARM range from 3 to 5 instructions. case ctxt.IsARM64(): return n * 12 // Trampolines in ARM64 are 3 instructions. + case ctxt.IsLOONG64(): + return n * 12 // Trampolines in LOONG64 are 3 instructions. case ctxt.IsPPC64(): return n * 16 // Trampolines in PPC64 are 4 instructions. case ctxt.IsRISCV64(): @@ -101,7 +103,7 @@ func maxSizeTrampolines(ctxt *Link, ldr *loader.Loader, s loader.Sym, isTramp bo } // Detect too-far jumps in function s, and add trampolines if necessary. -// ARM, PPC64, PPC64LE and RISCV64 support trampoline insertion for internal +// ARM, LOONG64, PPC64, PPC64LE and RISCV64 support trampoline insertion for internal // and external linking. On PPC64 and PPC64LE the text sections might be split // but will still insert trampolines where necessary. func trampoline(ctxt *Link, s loader.Sym) { @@ -160,6 +162,10 @@ func isPLTCall(arch *sys.Arch, rt objabi.RelocType) bool { uint32(sys.ARM) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_ARM_PC24))<<8, uint32(sys.ARM) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_ARM_JUMP24))<<8: return true + + // Loong64 + case uint32(sys.Loong64) | uint32(objabi.ElfRelocOffset+objabi.RelocType(elf.R_LARCH_B26))<<8: + return true } // TODO: other architectures. return false diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go index cb1805ccd76c55..7d1c8df6ed1cc0 100644 --- a/src/cmd/link/internal/loong64/asm.go +++ b/src/cmd/link/internal/loong64/asm.go @@ -11,6 +11,7 @@ import ( "cmd/link/internal/loader" "cmd/link/internal/sym" "debug/elf" + "fmt" "log" ) @@ -255,3 +256,127 @@ func calculatePCAlignedReloc(t objabi.RelocType, tgt int64, pc int64) int64 { // corresponding immediate field is 20 bits wide return pageDelta & 0xfffff } + +// Convert the direct jump relocation r to refer to a trampoline if the target is too far. +func trampoline(ctxt *ld.Link, ldr *loader.Loader, ri int, rs, s loader.Sym) { + relocs := ldr.Relocs(s) + r := relocs.At(ri) + switch r.Type() { + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_LARCH_B26): + // Host object relocations that will be turned into a PLT call. + // The PLT may be too far. Insert a trampoline for them. + fallthrough + case objabi.R_CALLLOONG64: + var t int64 + // ldr.SymValue(rs) == 0 indicates a cross-package jump to a function that is not yet + // laid out. Conservatively use a trampoline. This should be rare, as we lay out packages + // in dependency order. + if ldr.SymValue(rs) != 0 { + t = ldr.SymValue(rs) + r.Add() - (ldr.SymValue(s) + int64(r.Off())) + } + if t >= 1<<27 || t < -1<<27 || ldr.SymValue(rs) == 0 || (*ld.FlagDebugTramp > 1 && (ldr.SymPkg(s) == "" || ldr.SymPkg(s) != ldr.SymPkg(rs))) { + // direct call too far need to insert trampoline. + // look up existing trampolines first. if we found one within the range + // of direct call, we can reuse it. otherwise create a new one. + var tramp loader.Sym + for i := 0; ; i++ { + oName := ldr.SymName(rs) + name := oName + fmt.Sprintf("%+x-tramp%d", r.Add(), i) + tramp = ldr.LookupOrCreateSym(name, int(ldr.SymVersion(rs))) + ldr.SetAttrReachable(tramp, true) + if ldr.SymType(tramp) == sym.SDYNIMPORT { + // don't reuse trampoline defined in other module + continue + } + if oName == "runtime.deferreturn" { + ldr.SetIsDeferReturnTramp(tramp, true) + } + if ldr.SymValue(tramp) == 0 { + // either the trampoline does not exist -- we need to create one, + // or found one the address which is not assigned -- this will be + // laid down immediately after the current function. use this one. + break + } + + t = ldr.SymValue(tramp) - (ldr.SymValue(s) + int64(r.Off())) + if t >= -1<<27 && t < 1<<27 { + // found an existing trampoline that is not too far + // we can just use it. + break + } + } + if ldr.SymType(tramp) == 0 { + // trampoline does not exist, create one + trampb := ldr.MakeSymbolUpdater(tramp) + ctxt.AddTramp(trampb) + if ldr.SymType(rs) == sym.SDYNIMPORT { + if r.Add() != 0 { + ctxt.Errorf(s, "nonzero addend for DYNIMPORT call: %v+%d", ldr.SymName(rs), r.Add()) + } + gentrampgot(ctxt, ldr, trampb, rs) + } else { + gentramp(ctxt, ldr, trampb, rs, r.Add()) + } + } + // modify reloc to point to tramp, which will be resolved later + sb := ldr.MakeSymbolUpdater(s) + relocs := sb.Relocs() + r := relocs.At(ri) + r.SetSym(tramp) + r.SetAdd(0) // clear the offset embedded in the instruction + } + default: + ctxt.Errorf(s, "trampoline called with non-jump reloc: %d (%s)", r.Type(), sym.RelocName(ctxt.Arch, r.Type())) + } +} + +// generate a trampoline to target+offset. +func gentramp(ctxt *ld.Link, ldr *loader.Loader, tramp *loader.SymbolBuilder, target loader.Sym, offset int64) { + tramp.SetSize(12) // 3 instructions + P := make([]byte, tramp.Size()) + + o1 := uint32(0x1a00001e) // pcalau12i $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P, o1) + r1, _ := tramp.AddRel(objabi.R_LOONG64_ADDR_HI) + r1.SetOff(0) + r1.SetSiz(4) + r1.SetSym(target) + r1.SetAdd(offset) + + o2 := uint32(0x02c003de) // addi.d $r30, $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P[4:], o2) + r2, _ := tramp.AddRel(objabi.R_LOONG64_ADDR_LO) + r2.SetOff(4) + r2.SetSiz(4) + r2.SetSym(target) + r2.SetAdd(offset) + + o3 := uint32(0x4c0003c0) // jirl $r0, $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P[8:], o3) + + tramp.SetData(P) +} + +func gentrampgot(ctxt *ld.Link, ldr *loader.Loader, tramp *loader.SymbolBuilder, target loader.Sym) { + tramp.SetSize(12) // 3 instructions + P := make([]byte, tramp.Size()) + + o1 := uint32(0x1a00001e) // pcalau12i $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P, o1) + r1, _ := tramp.AddRel(objabi.R_LOONG64_GOT_HI) + r1.SetOff(0) + r1.SetSiz(4) + r1.SetSym(target) + + o2 := uint32(0x28c003de) // ld.d $r30, $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P[4:], o2) + r2, _ := tramp.AddRel(objabi.R_LOONG64_GOT_LO) + r2.SetOff(4) + r2.SetSiz(4) + r2.SetSym(target) + + o3 := uint32(0x4c0003c0) // jirl $r0, $r30, 0 + ctxt.Arch.ByteOrder.PutUint32(P[8:], o3) + + tramp.SetData(P) +} diff --git a/src/cmd/link/internal/loong64/obj.go b/src/cmd/link/internal/loong64/obj.go index 79c4c74fd3bef8..5489b4c6daefde 100644 --- a/src/cmd/link/internal/loong64/obj.go +++ b/src/cmd/link/internal/loong64/obj.go @@ -19,6 +19,7 @@ func Init() (*sys.Arch, ld.Arch) { Minalign: minAlign, Dwarfregsp: dwarfRegSP, Dwarfreglr: dwarfRegLR, + TrampLimit: 0x7c00000, // 26-bit signed offset * 4, leave room for PLT etc. CodePad: []byte{0x00, 0x00, 0x2a, 0x00}, // BREAK 0 Adddynrel: adddynrel, Archinit: archinit, @@ -27,6 +28,7 @@ func Init() (*sys.Arch, ld.Arch) { Extreloc: extreloc, Machoreloc1: machoreloc1, Gentext: gentext, + Trampoline: trampoline, ELF: ld.ELFArch{ Linuxdynld: "/lib64/ld-linux-loongarch-lp64d.so.1", diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go index 5fed6619c79dcf..21986b96e1c7b5 100644 --- a/src/cmd/link/link_test.go +++ b/src/cmd/link/link_test.go @@ -671,7 +671,7 @@ func TestTrampoline(t *testing.T) { // calls will use trampolines. buildmodes := []string{"default"} switch runtime.GOARCH { - case "arm", "arm64", "ppc64": + case "arm", "arm64", "ppc64", "loong64": case "ppc64le": // Trampolines are generated differently when internal linking PIE, test them too. buildmodes = append(buildmodes, "pie") @@ -728,7 +728,7 @@ func TestTrampolineCgo(t *testing.T) { // calls will use trampolines. buildmodes := []string{"default"} switch runtime.GOARCH { - case "arm", "arm64", "ppc64": + case "arm", "arm64", "ppc64", "loong64": case "ppc64le": // Trampolines are generated differently when internal linking PIE, test them too. buildmodes = append(buildmodes, "pie") From a01820c7337c0c918da2dae2b2158697683bde50 Mon Sep 17 00:00:00 2001 From: qmuntal Date: Thu, 1 Aug 2024 16:26:32 +0200 Subject: [PATCH 215/866] os/user: speed up Current on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit user.Current is slow on Windows sessions connected to an Active Directory domain. This is because it uses Windows APIs that do RPC calls to the domain controller, such as TranslateAccountW and NetUserGetInfo. This change speeds up user.Current by using the GetUserNameEx API instead, which is already optimized for retrieving the current user name in different formats. These are the improvements I see with the new implementation: goos: windows goarch: amd64 pkg: os/user cpu: Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ Current-12 501.8µ ± 7% 118.6µ ± 11% -76.36% (p=0.000 n=10) │ old.txt │ new.txt │ │ B/op │ B/op vs base │ Current-12 888.0 ± 0% 832.0 ± 0% -6.31% (p=0.000 n=10) │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ Current-12 15.00 ± 0% 11.00 ± 0% -26.67% (p=0.000 n=10) Updates #5298 Fixes #21867 Fixes #68312 Cq-Include-Trybots: luci.golang.try:gotip-windows-amd64-longtest Change-Id: I893c5fcca6969050d73a20ed34770846becd5f5e Reviewed-on: https://go-review.googlesource.com/c/go/+/597255 Reviewed-by: Ian Lance Taylor Reviewed-by: Michael Knyszek Reviewed-by: Alex Brainman LUCI-TryBot-Result: Go LUCI --- .../syscall/windows/security_windows.go | 19 +++++++++++++++++++ src/os/user/lookup_windows.go | 16 +++++++++++++--- src/os/user/user_test.go | 3 ++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/internal/syscall/windows/security_windows.go b/src/internal/syscall/windows/security_windows.go index 95694c368a54c2..e528744caad1bd 100644 --- a/src/internal/syscall/windows/security_windows.go +++ b/src/internal/syscall/windows/security_windows.go @@ -156,3 +156,22 @@ type UserInfo4 struct { // //go:linkname GetSystemDirectory func GetSystemDirectory() string // Implemented in runtime package. + +// GetUserName retrieves the user name of the current thread +// in the specified format. +func GetUserName(format uint32) (string, error) { + n := uint32(50) + for { + b := make([]uint16, n) + e := syscall.GetUserNameEx(format, &b[0], &n) + if e == nil { + return syscall.UTF16ToString(b[:n]), nil + } + if e != syscall.ERROR_MORE_DATA { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} diff --git a/src/os/user/lookup_windows.go b/src/os/user/lookup_windows.go index f259269a5393ec..c319324d113a13 100644 --- a/src/os/user/lookup_windows.go +++ b/src/os/user/lookup_windows.go @@ -232,12 +232,22 @@ func current() (*User, error) { if e != nil { return e } - username, domain, e := lookupUsernameAndDomain(u.User.Sid) + username, e := windows.GetUserName(syscall.NameSamCompatible) if e != nil { return e } - usr, e = newUser(uid, gid, dir, username, domain) - return e + displayName, e := windows.GetUserName(syscall.NameDisplay) + if e != nil { + return e + } + usr = &User{ + Uid: uid, + Gid: gid, + Username: username, + Name: displayName, + HomeDir: dir, + } + return nil }) return usr, err } diff --git a/src/os/user/user_test.go b/src/os/user/user_test.go index fa597b78ece7c8..31486aed033819 100644 --- a/src/os/user/user_test.go +++ b/src/os/user/user_test.go @@ -45,8 +45,9 @@ func TestCurrent(t *testing.T) { } func BenchmarkCurrent(b *testing.B) { + // Benchmark current instead of Current because Current caches the result. for i := 0; i < b.N; i++ { - Current() + current() } } From 38c766ee0fe22bfcc81e569fccfe9aef2682f63c Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 8 Aug 2024 13:54:56 -0700 Subject: [PATCH 216/866] types2: move RangeKeyVal func into compilersupport.go This function only exists in types2. Change-Id: If0a8b6aaf496142cefdf088bd5656536f4ed101c Reviewed-on: https://go-review.googlesource.com/c/go/+/604276 Reviewed-by: Robert Griesemer Reviewed-by: Robert Findley LUCI-TryBot-Result: Go LUCI Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/compilersupport.go | 8 ++++++++ src/cmd/compile/internal/types2/stmt.go | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/cmd/compile/internal/types2/compilersupport.go b/src/cmd/compile/internal/types2/compilersupport.go index 33dd8e8baace43..e98675f9c587a6 100644 --- a/src/cmd/compile/internal/types2/compilersupport.go +++ b/src/cmd/compile/internal/types2/compilersupport.go @@ -28,3 +28,11 @@ func AsSignature(t Type) *Signature { func CoreType(t Type) Type { return coreType(t) } + +// RangeKeyVal returns the key and value types for a range over typ. +// It panics if range over typ is invalid. +func RangeKeyVal(typ Type) (Type, Type) { + key, val, _, ok := rangeKeyVal(typ, nil) + assert(ok) + return key, val +} diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index 3027aef2e7a512..c381187fd3a448 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -1001,13 +1001,6 @@ func (check *Checker) rangeStmt(inner stmtContext, s *syntax.ForStmt, rclause *s check.stmt(inner, s.Body) } -// RangeKeyVal returns the key and value types for a range over typ. -// Exported for use by the compiler (does not exist in go/types). -func RangeKeyVal(typ Type) (Type, Type) { - key, val, _, _ := rangeKeyVal(typ, nil) - return key, val -} - // rangeKeyVal returns the key and value type produced by a range clause // over an expression of type typ. // If allowVersion != nil, it is used to check the required language version. From 760b722c344d312ab62a5c2f94865a869ce0bab9 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 9 Aug 2024 10:28:39 -0400 Subject: [PATCH 217/866] LICENSE: update per Google Legal Very minor tweaks: - Remove (c) pseudosymbol. - Remove "All Rights Reserved." - Change "Google Inc." (no longer exists) to "Google LLC". [git-generate] echo ' ,s/\(c\) // ,s/ All rights reserved.// ,s/Google Inc./Google LLC/ w q ' | sam -d LICENSE Change-Id: I243c86499bdaf8f8e73d8833e1ed8ccab4083c63 Reviewed-on: https://go-review.googlesource.com/c/go/+/604475 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov --- LICENSE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 6a66aea5eafe0c..2a7cf70da6e498 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. From f053f4f921d3d481d3adb3e909e81f1b31a13f2e Mon Sep 17 00:00:00 2001 From: Bobby Powers Date: Sat, 25 Feb 2023 16:24:54 -0800 Subject: [PATCH 218/866] crypto/tls: expose extensions presented by client to GetCertificate This enables JA3 and JA4 TLS fingerprinting to be implemented from the GetCertificate callback, similar to what BoringSSL provides with its SSL_CTX_set_dos_protection_cb hook. fixes #32936 Change-Id: Idb54ebcb43075582fcef0ac6438727f494543424 Reviewed-on: https://go-review.googlesource.com/c/go/+/471396 Reviewed-by: Dmitri Shuralyov Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI --- api/next/32936.txt | 1 + .../6-stdlib/99-minor/crypto/tls/32936.md | 1 + src/crypto/tls/common.go | 4 ++ src/crypto/tls/handshake_messages.go | 3 + src/crypto/tls/handshake_messages_test.go | 12 ++++ src/crypto/tls/handshake_server.go | 1 + src/crypto/tls/handshake_server_test.go | 60 +++++++++++++++++++ 7 files changed, 82 insertions(+) create mode 100644 api/next/32936.txt create mode 100644 doc/next/6-stdlib/99-minor/crypto/tls/32936.md diff --git a/api/next/32936.txt b/api/next/32936.txt new file mode 100644 index 00000000000000..920bfe32364e24 --- /dev/null +++ b/api/next/32936.txt @@ -0,0 +1 @@ +pkg crypto/tls, type ClientHelloInfo struct, Extensions []uint16 #32936 diff --git a/doc/next/6-stdlib/99-minor/crypto/tls/32936.md b/doc/next/6-stdlib/99-minor/crypto/tls/32936.md new file mode 100644 index 00000000000000..60c06024caecdc --- /dev/null +++ b/doc/next/6-stdlib/99-minor/crypto/tls/32936.md @@ -0,0 +1 @@ +The [ClientHelloInfo] struct passed to [Config.GetCertificate] now includes an `Extensions` field, which can be useful for fingerprinting TLS clients. \ No newline at end of file diff --git a/src/crypto/tls/common.go b/src/crypto/tls/common.go index 5fd92d3c639b53..dba96509362658 100644 --- a/src/crypto/tls/common.go +++ b/src/crypto/tls/common.go @@ -447,6 +447,10 @@ type ClientHelloInfo struct { // might be rejected if used. SupportedVersions []uint16 + // Extensions lists the IDs of the extensions presented by the client + // in the client hello. + Extensions []uint16 + // Conn is the underlying net.Conn for the connection. Do not read // from, or write to, this connection; that will cause the TLS // connection to fail. diff --git a/src/crypto/tls/handshake_messages.go b/src/crypto/tls/handshake_messages.go index 8620b66a474903..823caff603ef1e 100644 --- a/src/crypto/tls/handshake_messages.go +++ b/src/crypto/tls/handshake_messages.go @@ -97,6 +97,8 @@ type clientHelloMsg struct { pskBinders [][]byte quicTransportParameters []byte encryptedClientHello []byte + // extensions are only populated on the server-side of a handshake + extensions []uint16 } func (m *clientHelloMsg) marshalMsg(echInner bool) ([]byte, error) { @@ -467,6 +469,7 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { return false } seenExts[extension] = true + m.extensions = append(m.extensions, extension) switch extension { case extensionServerName: diff --git a/src/crypto/tls/handshake_messages_test.go b/src/crypto/tls/handshake_messages_test.go index 197a1c55eeb5a8..2c360e6a50dfc5 100644 --- a/src/crypto/tls/handshake_messages_test.go +++ b/src/crypto/tls/handshake_messages_test.go @@ -76,6 +76,18 @@ func TestMarshalUnmarshal(t *testing.T) { m.activeCertHandles = nil } + if ch, ok := m.(*clientHelloMsg); ok { + // extensions is special cased, as it is only populated by the + // server-side of a handshake and is not expected to roundtrip + // through marshal + unmarshal. m ends up with the list of + // extensions necessary to serialize the other fields of + // clientHelloMsg, so check that it is non-empty, then clear it. + if len(ch.extensions) == 0 { + t.Errorf("expected ch.extensions to be populated on unmarshal") + } + ch.extensions = nil + } + // clientHelloMsg and serverHelloMsg, when unmarshalled, store // their original representation, for later use in the handshake // transcript. In order to prevent DeepEqual from failing since diff --git a/src/crypto/tls/handshake_server.go b/src/crypto/tls/handshake_server.go index ac3d915d1746d7..bc4e51ba364cf1 100644 --- a/src/crypto/tls/handshake_server.go +++ b/src/crypto/tls/handshake_server.go @@ -963,6 +963,7 @@ func clientHelloInfo(ctx context.Context, c *Conn, clientHello *clientHelloMsg) SignatureSchemes: clientHello.supportedSignatureAlgorithms, SupportedProtos: clientHello.alpnProtocols, SupportedVersions: supportedVersions, + Extensions: clientHello.extensions, Conn: c.conn, config: c.config, ctx: ctx, diff --git a/src/crypto/tls/handshake_server_test.go b/src/crypto/tls/handshake_server_test.go index 94d3d0f6dc87bc..788a26af7559b6 100644 --- a/src/crypto/tls/handshake_server_test.go +++ b/src/crypto/tls/handshake_server_test.go @@ -23,6 +23,7 @@ import ( "runtime" "slices" "strings" + "sync/atomic" "testing" "time" ) @@ -1066,6 +1067,65 @@ func TestHandshakeServerSNIGetCertificateNotFound(t *testing.T) { runServerTestTLS12(t, test) } +// TestHandshakeServerGetCertificateExtensions tests to make sure that the +// Extensions passed to GetCertificate match what we expect based on the +// clientHelloMsg +func TestHandshakeServerGetCertificateExtensions(t *testing.T) { + const errMsg = "TestHandshakeServerGetCertificateExtensions error" + // ensure the test condition inside our GetCertificate callback + // is actually invoked + var called atomic.Int32 + + testVersions := []uint16{VersionTLS12, VersionTLS13} + for _, vers := range testVersions { + t.Run(fmt.Sprintf("TLS version %04x", vers), func(t *testing.T) { + pk, _ := ecdh.X25519().GenerateKey(rand.Reader) + clientHello := &clientHelloMsg{ + vers: vers, + random: make([]byte, 32), + cipherSuites: []uint16{TLS_CHACHA20_POLY1305_SHA256}, + compressionMethods: []uint8{compressionNone}, + serverName: "test", + keyShares: []keyShare{{group: X25519, data: pk.PublicKey().Bytes()}}, + supportedCurves: []CurveID{X25519}, + supportedSignatureAlgorithms: []SignatureScheme{Ed25519}, + } + + // the clientHelloMsg initialized just above is serialized with + // two extensions: server_name(0) and application_layer_protocol_negotiation(16) + expectedExtensions := []uint16{ + extensionServerName, + extensionSupportedCurves, + extensionSignatureAlgorithms, + extensionKeyShare, + } + + if vers == VersionTLS13 { + clientHello.supportedVersions = []uint16{VersionTLS13} + expectedExtensions = append(expectedExtensions, extensionSupportedVersions) + } + + // Go's TLS client presents extensions in the ClientHello sorted by extension ID + slices.Sort(expectedExtensions) + + serverConfig := testConfig.Clone() + serverConfig.GetCertificate = func(clientHello *ClientHelloInfo) (*Certificate, error) { + if !slices.Equal(expectedExtensions, clientHello.Extensions) { + t.Errorf("expected extensions on ClientHelloInfo (%v) to match clientHelloMsg (%v)", expectedExtensions, clientHello.Extensions) + } + called.Add(1) + + return nil, errors.New(errMsg) + } + testClientHelloFailure(t, serverConfig, clientHello, errMsg) + }) + } + + if int(called.Load()) != len(testVersions) { + t.Error("expected our GetCertificate test to be called twice") + } +} + // TestHandshakeServerSNIGetCertificateError tests to make sure that errors in // GetCertificate result in a tls alert. func TestHandshakeServerSNIGetCertificateError(t *testing.T) { From 1443a3ea1e5800f6d09c5051406e37349838c151 Mon Sep 17 00:00:00 2001 From: Ezra Newman <33768950+ExtraE113@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:17:49 +0000 Subject: [PATCH 219/866] plugin: include a warning about race detector compatability in docs As described in #24245, the race detector isn't able to find some race conditions in plugins. This commit adds a warning about this to the plugins documentation. Updates #24245 Change-Id: I1a5ab9b5e22b6a254efc639c3c03f75b79214d49 GitHub-Last-Rev: a5b4ff4ca0fe3b7e31d176ffc57d99c17bd84aea GitHub-Pull-Request: golang/go#68792 Reviewed-on: https://go-review.googlesource.com/c/go/+/604275 Reviewed-by: Ian Lance Taylor Reviewed-by: Cherry Mui Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- src/plugin/plugin.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugin/plugin.go b/src/plugin/plugin.go index b4b1697b52c82d..a4ff694eb57077 100644 --- a/src/plugin/plugin.go +++ b/src/plugin/plugin.go @@ -29,6 +29,10 @@ // macOS, making them unsuitable for applications intended to be // portable. // +// - Plugins are poorly supported by the Go race detector. Even simple +// race conditions may not be automatically detected. See +// https://go.dev/issue/24245 for more information. +// // - Applications that use plugins may require careful configuration // to ensure that the various parts of the program be made available // in the correct location in the file system (or container image). From ff2a57ba92b9ecc9315c992b332279d0428c36d7 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Tue, 6 Aug 2024 20:56:56 +0000 Subject: [PATCH 220/866] cmd/go/internal/test: add 'tests' vet check to 'go test' suite (Second attempt at CL 529816 (f1d6050), reverted in CL 571695 (1304d98) due to broken longtest builder.) The tests analyser reports structural problems in test declarations. Presumably most of these would be caught by go test itself, which compiles and runs (some subset of) the tests, but Benchmark and Fuzz functions are executed less frequently and may benefit more from static checks. A number of tests of "go vet" needed to be updated, either to avoid mistakes caught by the analyzer, or to suppress the analyzer when the mistakes were intended. Also, reflect the change in go test help message. + release note Fixes golang/go#44251 Change-Id: I1c311086815fe55a66cce001eaab9b41e27d1144 Reviewed-on: https://go-review.googlesource.com/c/go/+/603476 Auto-Submit: Alan Donovan Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- doc/next/3-tools.md | 10 ++ src/cmd/go/alldocs.go | 2 +- src/cmd/go/internal/test/test.go | 4 +- .../go/testdata/script/list_test_simple.txt | 10 +- .../go/testdata/script/test_bad_example.txt | 5 +- .../testdata/script/test_example_goexit.txt | 4 +- src/cmd/go/testdata/script/test_fuzz.txt | 117 +++++++++--------- .../go/testdata/script/test_fuzz_return.txt | 6 +- .../script/test_match_only_example.txt | 6 +- .../go/testdata/script/test_source_order.txt | 12 +- 10 files changed, 96 insertions(+), 80 deletions(-) diff --git a/doc/next/3-tools.md b/doc/next/3-tools.md index b1412874689e1a..c23b204e914427 100644 --- a/doc/next/3-tools.md +++ b/doc/next/3-tools.md @@ -10,3 +10,13 @@ and `void f(double)`, cgo will report an error instead of possibly generating an incorrect call sequence for `f(0)`. New in this release is a better detector for this error condition when the incompatible declarations appear in different files. See [#67699](/issue/67699). + +### Vet + +The new `tests` analyzer reports common mistakes in declarations of +tests, fuzzers, benchmarks, and examples in test packages, such as +malformed names, incorrect signatures, or examples that document +non-existent identifiers. Some of these mistakes may cause tests not +to run. + +This analyzer is among the subset of analyzers that are run by `go test`. diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index 648aa67d054d30..f86d315f5f57df 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -1826,7 +1826,7 @@ // finds any problems, go test reports those and does not run the test // binary. Only a high-confidence subset of the default go vet checks are // used. That subset is: atomic, bool, buildtags, directive, errorsas, -// ifaceassert, nilfunc, printf, and stringintconv. You can see +// ifaceassert, nilfunc, printf, stringintconv, and tests. You can see // the documentation for these and other vet tests via "go doc cmd/vet". // To disable the running of go vet, use the -vet=off flag. To run all // checks, use the -vet=all flag. diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go index 76635adc7e282d..7d20e28adef9b1 100644 --- a/src/cmd/go/internal/test/test.go +++ b/src/cmd/go/internal/test/test.go @@ -79,7 +79,7 @@ and its test source files to identify significant problems. If go vet finds any problems, go test reports those and does not run the test binary. Only a high-confidence subset of the default go vet checks are used. That subset is: atomic, bool, buildtags, directive, errorsas, -ifaceassert, nilfunc, printf, and stringintconv. You can see +ifaceassert, nilfunc, printf, stringintconv, and tests. You can see the documentation for these and other vet tests via "go doc cmd/vet". To disable the running of go vet, use the -vet=off flag. To run all checks, use the -vet=all flag. @@ -668,7 +668,7 @@ var defaultVetFlags = []string{ "-slog", "-stringintconv", // "-structtags", - // "-tests", + "-tests", // "-unreachable", // "-unsafeptr", // "-unusedresult", diff --git a/src/cmd/go/testdata/script/list_test_simple.txt b/src/cmd/go/testdata/script/list_test_simple.txt index 954897c663c874..cb2d5ea30c0b9c 100644 --- a/src/cmd/go/testdata/script/list_test_simple.txt +++ b/src/cmd/go/testdata/script/list_test_simple.txt @@ -10,8 +10,8 @@ stdout BenchmarkSimple # Examples go test -list=Example -stdout ExampleSimple -stdout ExampleWithEmptyOutput +stdout Example_simple +stdout Example_withEmptyOutput -- go.mod -- module m @@ -39,19 +39,19 @@ import ( "fmt" ) -func ExampleSimple() { +func Example_simple() { fmt.Println("Test with Output.") // Output: Test with Output. } -func ExampleWithEmptyOutput() { +func Example_withEmptyOutput() { fmt.Println("") // Output: } -func ExampleNoOutput() { +func Example_noOutput() { _ = fmt.Sprint("Test with no output") } -- test_test.go -- diff --git a/src/cmd/go/testdata/script/test_bad_example.txt b/src/cmd/go/testdata/script/test_bad_example.txt index 1d147b663fe62a..46bc264779e3f8 100644 --- a/src/cmd/go/testdata/script/test_bad_example.txt +++ b/src/cmd/go/testdata/script/test_bad_example.txt @@ -1,6 +1,7 @@ # Tests that invalid examples are ignored. # Verifies golang.org/issue/35284 -go test x_test.go +# Disable vet, as 'tests' analyzer objects to surplus parameter. +go test -vet=off x_test.go -- x_test.go -- package x @@ -10,4 +11,4 @@ import "fmt" func ExampleThisShouldNotHaveAParameter(thisShouldntExist int) { fmt.Println("X") // Output: -} \ No newline at end of file +} diff --git a/src/cmd/go/testdata/script/test_example_goexit.txt b/src/cmd/go/testdata/script/test_example_goexit.txt index 984f4349f57fca..c924534f5a1da5 100644 --- a/src/cmd/go/testdata/script/test_example_goexit.txt +++ b/src/cmd/go/testdata/script/test_example_goexit.txt @@ -17,13 +17,13 @@ import ( "runtime" ) -func ExamplePass() { +func Example_pass() { fmt.Println("pass") // Output: // pass } -func ExampleGoexit() { +func Example_goexit() { runtime.Goexit() // Output: } diff --git a/src/cmd/go/testdata/script/test_fuzz.txt b/src/cmd/go/testdata/script/test_fuzz.txt index 37170bfb2f8ff1..bb88ead106d6e0 100644 --- a/src/cmd/go/testdata/script/test_fuzz.txt +++ b/src/cmd/go/testdata/script/test_fuzz.txt @@ -2,45 +2,48 @@ [short] skip env GOCACHE=$WORK/cache +# This test uses -vet=off to suppress vet, as vet's "tests" analyzer would +# otherwise statically report the problems we are trying to observe dynamically. + # Test that running a fuzz target that returns without failing or calling # f.Fuzz fails and causes a non-zero exit status. -! go test noop_fuzz_test.go +! go test -vet=off noop_fuzz_test.go ! stdout ^ok stdout FAIL # Test that fuzzing a fuzz target that returns without failing or calling # f.Fuzz fails and causes a non-zero exit status. -! go test -fuzz=Fuzz -fuzztime=1x noop_fuzz_test.go +! go test -vet=off -fuzz=Fuzz -fuzztime=1x noop_fuzz_test.go ! stdout ^ok stdout FAIL # Test that calling f.Error in a fuzz target causes a non-zero exit status. -! go test -fuzz=Fuzz -fuzztime=1x error_fuzz_test.go +! go test -vet=off -fuzz=Fuzz -fuzztime=1x error_fuzz_test.go ! stdout ^ok stdout FAIL # Test that calling f.Fatal in a fuzz target causes a non-zero exit status. -! go test fatal_fuzz_test.go +! go test -vet=off fatal_fuzz_test.go ! stdout ^ok stdout FAIL # Test that successful test exits cleanly. -go test success_fuzz_test.go +go test -vet=off success_fuzz_test.go stdout ^ok ! stdout FAIL # Test that successful fuzzing exits cleanly. -go test -fuzz=Fuzz -fuzztime=1x success_fuzz_test.go +go test -vet=off -fuzz=Fuzz -fuzztime=1x success_fuzz_test.go stdout ok ! stdout FAIL # Test that calling f.Fatal while fuzzing causes a non-zero exit status. -! go test -fuzz=Fuzz -fuzztime=1x fatal_fuzz_test.go +! go test -vet=off -fuzz=Fuzz -fuzztime=1x fatal_fuzz_test.go ! stdout ^ok stdout FAIL # Test error with seed corpus in f.Fuzz -! go test -run FuzzError fuzz_add_test.go +! go test -vet=off -run Fuzz_error -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL stdout 'error here' @@ -48,44 +51,44 @@ stdout 'error here' [short] stop # Test that calling panic(nil) in a fuzz target causes a non-zero exit status. -! go test panic_fuzz_test.go +! go test -vet=off panic_fuzz_test.go ! stdout ^ok stdout FAIL # Test that skipped test exits cleanly. -go test skipped_fuzz_test.go +go test -vet=off skipped_fuzz_test.go stdout ok ! stdout FAIL # Test that f.Fatal within f.Fuzz panics -! go test fatal_fuzz_fn_fuzz_test.go +! go test -vet=off fatal_fuzz_fn_fuzz_test.go ! stdout ^ok ! stdout 'fatal here' stdout FAIL stdout 'fuzz target' # Test that f.Error within f.Fuzz panics -! go test error_fuzz_fn_fuzz_test.go +! go test -vet=off error_fuzz_fn_fuzz_test.go ! stdout ^ok ! stdout 'error here' stdout FAIL stdout 'fuzz target' # Test that f.Fail within f.Fuzz panics -! go test fail_fuzz_fn_fuzz_test.go +! go test -vet=off fail_fuzz_fn_fuzz_test.go ! stdout ^ok stdout FAIL stdout 'fuzz target' # Test that f.Skip within f.Fuzz panics -! go test skip_fuzz_fn_fuzz_test.go +! go test -vet=off skip_fuzz_fn_fuzz_test.go ! stdout ^ok ! stdout 'skip here' stdout FAIL stdout 'fuzz target' # Test that f.Skipped within f.Fuzz panics -! go test skipped_fuzz_fn_fuzz_test.go +! go test -vet=off skipped_fuzz_fn_fuzz_test.go ! stdout ^ok ! stdout 'f.Skipped is' stdout FAIL @@ -93,110 +96,110 @@ stdout 'fuzz target' stdout 't.Skipped is false' # Test that runtime.Goexit within the fuzz function is an error. -! go test goexit_fuzz_fn_fuzz_test.go +! go test -vet=off goexit_fuzz_fn_fuzz_test.go ! stdout ^ok stdout FAIL # Test that a call to f.Fatal after the Fuzz func is executed. -! go test fatal_after_fuzz_func_fuzz_test.go +! go test -vet=off fatal_after_fuzz_func_fuzz_test.go ! stdout ok stdout FAIL # Test that missing *T in f.Fuzz causes a non-zero exit status. -! go test incomplete_fuzz_call_fuzz_test.go +! go test -vet=off incomplete_fuzz_call_fuzz_test.go ! stdout ^ok stdout FAIL # Test that a panic in the Cleanup func is executed. -! go test cleanup_fuzz_test.go +! go test -vet=off cleanup_fuzz_test.go ! stdout ^ok stdout FAIL stdout 'failed some precondition' # Test success with seed corpus in f.Fuzz -go test -run FuzzPass fuzz_add_test.go +go test -vet=off -run Fuzz_pass -vet=off fuzz_add_test.go stdout ok ! stdout FAIL ! stdout 'off by one error' # Test fatal with seed corpus in f.Fuzz -! go test -run FuzzFatal fuzz_add_test.go +! go test -vet=off -run Fuzz_fatal -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL stdout 'fatal here' # Test panic with seed corpus in f.Fuzz -! go test -run FuzzPanic fuzz_add_test.go +! go test -vet=off -run Fuzz_panic -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL stdout 'off by one error' # Test panic(nil) with seed corpus in f.Fuzz -! go test -run FuzzNilPanic fuzz_add_test.go +! go test -vet=off -run Fuzz_nilPanic -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL # Test panic with unsupported seed corpus -! go test -run FuzzUnsupported fuzz_add_test.go +! go test -vet=off -run Fuzz_unsupported -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL # Test panic with different number of args to f.Add -! go test -run FuzzAddDifferentNumber fuzz_add_test.go +! go test -vet=off -run Fuzz_addDifferentNumber -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL # Test panic with different type of args to f.Add -! go test -run FuzzAddDifferentType fuzz_add_test.go +! go test -vet=off -run Fuzz_addDifferentType -vet=off fuzz_add_test.go ! stdout ^ok stdout FAIL # Test that the wrong type given with f.Add will fail. -! go test -run FuzzWrongType fuzz_add_test.go +! go test -vet=off -run Fuzz_wrongType -vet=off fuzz_add_test.go ! stdout ^ok stdout '\[string int\], want \[\[\]uint8 int8\]' stdout FAIL # Test fatal with testdata seed corpus -! go test -run FuzzFail corpustesting/fuzz_testdata_corpus_test.go +! go test -vet=off -run Fuzz_fail corpustesting/fuzz_testdata_corpus_test.go ! stdout ^ok stdout FAIL stdout 'fatal here' # Test pass with testdata seed corpus -go test -run FuzzPass corpustesting/fuzz_testdata_corpus_test.go +go test -vet=off -run Fuzz_pass corpustesting/fuzz_testdata_corpus_test.go stdout ok ! stdout FAIL ! stdout 'fatal here' # Test pass with testdata and f.Add seed corpus -go test -run FuzzPassString corpustesting/fuzz_testdata_corpus_test.go +go test -vet=off -run Fuzz_passString corpustesting/fuzz_testdata_corpus_test.go stdout ok ! stdout FAIL # Fuzzing pass with testdata and f.Add seed corpus (skip running tests first) -go test -run=None -fuzz=FuzzPassString corpustesting/fuzz_testdata_corpus_test.go -fuzztime=10x +go test -vet=off -run=None -fuzz=Fuzz_passString corpustesting/fuzz_testdata_corpus_test.go -fuzztime=10x stdout ok ! stdout FAIL # Fuzzing pass with testdata and f.Add seed corpus -go test -run=FuzzPassString -fuzz=FuzzPassString corpustesting/fuzz_testdata_corpus_test.go -fuzztime=10x +go test -vet=off -run=Fuzz_passString -fuzz=Fuzz_passString corpustesting/fuzz_testdata_corpus_test.go -fuzztime=10x stdout ok ! stdout FAIL # Test panic with malformed seed corpus -! go test -run FuzzFail corpustesting/fuzz_testdata_corpus_test.go +! go test -vet=off -run Fuzz_fail corpustesting/fuzz_testdata_corpus_test.go ! stdout ^ok stdout FAIL # Test pass with file in other nested testdata directory -go test -run FuzzInNestedDir corpustesting/fuzz_testdata_corpus_test.go +go test -vet=off -run Fuzz_inNestedDir corpustesting/fuzz_testdata_corpus_test.go stdout ok ! stdout FAIL ! stdout 'fatal here' # Test fails with file containing wrong type -! go test -run FuzzWrongType corpustesting/fuzz_testdata_corpus_test.go +! go test -vet=off -run Fuzz_wrongType corpustesting/fuzz_testdata_corpus_test.go ! stdout ^ok stdout FAIL @@ -230,7 +233,7 @@ package panic_fuzz import "testing" -func FuzzPanic(f *testing.F) { +func Fuzz_panic(f *testing.F) { panic(nil) } @@ -374,7 +377,7 @@ func add(f *testing.F) { f.Add([]byte("")) } -func FuzzPass(f *testing.F) { +func Fuzz_pass(f *testing.F) { add(f) f.Fuzz(func(t *testing.T, b []byte) { if len(b) == -1 { @@ -383,7 +386,7 @@ func FuzzPass(f *testing.F) { }) } -func FuzzError(f *testing.F) { +func Fuzz_error(f *testing.F) { add(f) f.Fuzz(func(t *testing.T, b []byte) { if len(b) == 3 { @@ -392,7 +395,7 @@ func FuzzError(f *testing.F) { }) } -func FuzzFatal(f *testing.F) { +func Fuzz_fatal(f *testing.F) { add(f) f.Fuzz(func(t *testing.T, b []byte) { if len(b) == 0 { @@ -401,7 +404,7 @@ func FuzzFatal(f *testing.F) { }) } -func FuzzPanic(f *testing.F) { +func Fuzz_panic(f *testing.F) { add(f) f.Fuzz(func(t *testing.T, b []byte) { if len(b) == 5 { @@ -410,7 +413,7 @@ func FuzzPanic(f *testing.F) { }) } -func FuzzNilPanic(f *testing.F) { +func Fuzz_nilPanic(f *testing.F) { add(f) f.Fuzz(func(t *testing.T, b []byte) { if len(b) == 3 { @@ -419,25 +422,25 @@ func FuzzNilPanic(f *testing.F) { }) } -func FuzzUnsupported(f *testing.F) { +func Fuzz_unsupported(f *testing.F) { m := make(map[string]bool) f.Add(m) f.Fuzz(func(*testing.T, []byte) {}) } -func FuzzAddDifferentNumber(f *testing.F) { +func Fuzz_addDifferentNumber(f *testing.F) { f.Add([]byte("a")) f.Add([]byte("a"), []byte("b")) f.Fuzz(func(*testing.T, []byte) {}) } -func FuzzAddDifferentType(f *testing.F) { +func Fuzz_addDifferentType(f *testing.F) { f.Add(false) f.Add(1234) f.Fuzz(func(*testing.T, []byte) {}) } -func FuzzWrongType(f *testing.F) { +func Fuzz_wrongType(f *testing.F) { f.Add("hello", 50) f.Fuzz(func(*testing.T, []byte, int8) {}) } @@ -456,45 +459,45 @@ func fuzzFn(f *testing.F) { }) } -func FuzzFail(f *testing.F) { +func Fuzz_fail(f *testing.F) { fuzzFn(f) } -func FuzzPass(f *testing.F) { +func Fuzz_pass(f *testing.F) { fuzzFn(f) } -func FuzzPassString(f *testing.F) { +func Fuzz_passString(f *testing.F) { f.Add("some seed corpus") f.Fuzz(func(*testing.T, string) {}) } -func FuzzPanic(f *testing.F) { +func Fuzz_panic(f *testing.F) { f.Fuzz(func(t *testing.T, b []byte) {}) } -func FuzzInNestedDir(f *testing.F) { +func Fuzz_inNestedDir(f *testing.F) { f.Fuzz(func(t *testing.T, b []byte) {}) } -func FuzzWrongType(f *testing.F) { +func Fuzz_wrongType(f *testing.F) { f.Fuzz(func(t *testing.T, b []byte) {}) } --- corpustesting/testdata/fuzz/FuzzFail/1 -- +-- corpustesting/testdata/fuzz/Fuzz_fail/1 -- go test fuzz v1 []byte("12345") --- corpustesting/testdata/fuzz/FuzzPass/1 -- +-- corpustesting/testdata/fuzz/Fuzz_pass/1 -- go test fuzz v1 []byte("00000") --- corpustesting/testdata/fuzz/FuzzPassString/1 -- +-- corpustesting/testdata/fuzz/Fuzz_passString/1 -- go test fuzz v1 string("hello") --- corpustesting/testdata/fuzz/FuzzPanic/1 -- +-- corpustesting/testdata/fuzz/Fuzz_panic/1 -- malformed --- corpustesting/testdata/fuzz/FuzzInNestedDir/anotherdir/1 -- +-- corpustesting/testdata/fuzz/Fuzz_inNestedDir/anotherdir/1 -- go test fuzz v1 []byte("12345") --- corpustesting/testdata/fuzz/FuzzWrongType/1 -- +-- corpustesting/testdata/fuzz/Fuzz_wrongType/1 -- go test fuzz v1 int("00000") diff --git a/src/cmd/go/testdata/script/test_fuzz_return.txt b/src/cmd/go/testdata/script/test_fuzz_return.txt index 63275aad01d648..2f7b85bcc011b0 100644 --- a/src/cmd/go/testdata/script/test_fuzz_return.txt +++ b/src/cmd/go/testdata/script/test_fuzz_return.txt @@ -1,6 +1,8 @@ [short] skip -! go test . +# Disable vet, as its "tests" analyzer would report the same problem statically. + +! go test -vet=off . stdout '^panic: testing: fuzz target must not return a value \[recovered\]$' -- go.mod -- @@ -11,7 +13,7 @@ package test import "testing" -func FuzzReturnErr(f *testing.F) { +func Fuzz_returnErr(f *testing.F) { f.Add("hello, validation!") f.Fuzz(func(t *testing.T, in string) string { return in diff --git a/src/cmd/go/testdata/script/test_match_only_example.txt b/src/cmd/go/testdata/script/test_match_only_example.txt index 515ccb39ad3f3b..e35e69c42b43d1 100644 --- a/src/cmd/go/testdata/script/test_match_only_example.txt +++ b/src/cmd/go/testdata/script/test_match_only_example.txt @@ -10,7 +10,7 @@ stdout '^ok' // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Make sure that go test runs Example_Z before Example_A, preserving source order. +// Make sure that go test runs Example_z before Example_a, preserving source order. package p @@ -18,13 +18,13 @@ import "fmt" var n int -func Example_Z() { +func Example_z() { n++ fmt.Println(n) // Output: 1 } -func Example_A() { +func Example_a() { n++ fmt.Println(n) // Output: 2 diff --git a/src/cmd/go/testdata/script/test_source_order.txt b/src/cmd/go/testdata/script/test_source_order.txt index 2865276ff1c2f2..b636001b804ef9 100644 --- a/src/cmd/go/testdata/script/test_source_order.txt +++ b/src/cmd/go/testdata/script/test_source_order.txt @@ -11,7 +11,7 @@ go test example1_test.go example2_test.go // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Make sure that go test runs Example_Z before Example_A, preserving source order. +// Make sure that go test runs Example_z before Example_a, preserving source order. package p @@ -19,13 +19,13 @@ import "fmt" var n int -func Example_Z() { +func Example_z() { n++ fmt.Println(n) // Output: 1 } -func Example_A() { +func Example_a() { n++ fmt.Println(n) // Output: 2 @@ -35,19 +35,19 @@ func Example_A() { // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Make sure that go test runs Example_Y before Example_B, preserving source order. +// Make sure that go test runs Example_y before Example_b, preserving source order. package p import "fmt" -func Example_Y() { +func Example_y() { n++ fmt.Println(n) // Output: 3 } -func Example_B() { +func Example_b() { n++ fmt.Println(n) // Output: 4 From 1cf6e31f0d03bb3571cfe034f2d909591a0ae453 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Sat, 3 Aug 2024 14:20:58 -0400 Subject: [PATCH 221/866] cmd/compile: add basic wasmexport support This CL adds a compiler directive go:wasmexport, which applies to a Go function and makes it an exported function of the Wasm module being built, so it can be called directly from the host. As proposed in #65199, parameter and result types are limited to 32-bit and 64-bit integers and floats, and there can be at most one result. As the Go and Wasm calling conventions are different, for a wasmexport function we generate a wrapper function does the ABI conversion at compile time. Currently this CL only adds basic support. In particular, - it only supports executable mode, i.e. the Go wasm module calls into the host via wasmimport, which then calls back to Go via wasmexport. Library (c-shared) mode is not implemented yet. - only supports wasip1, not js. - if the exported function unwinds stacks (goroutine switch, stack growth, etc.), it probably doesn't work. TODO: support stack unwinding, c-shared mode, js. For #65199. Change-Id: Id1777c2d44f7d51942c1caed3173c0a82f120cc4 Reviewed-on: https://go-review.googlesource.com/c/go/+/603055 Reviewed-by: Than McIntosh Reviewed-by: Randy Reddig Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/gc/compile.go | 5 ++ src/cmd/compile/internal/ir/func.go | 8 ++ src/cmd/compile/internal/ir/sizeof_test.go | 2 +- src/cmd/compile/internal/noder/linker.go | 5 ++ src/cmd/compile/internal/noder/noder.go | 27 ++++++ src/cmd/compile/internal/noder/reader.go | 17 ++-- src/cmd/compile/internal/noder/writer.go | 13 +++ src/cmd/compile/internal/ssagen/abi.go | 76 +++++++++++++++-- src/cmd/internal/goobj/objfile.go | 3 + src/cmd/internal/obj/link.go | 26 +++++- src/cmd/internal/obj/objfile.go | 12 +++ src/cmd/internal/obj/sym.go | 3 + src/cmd/internal/obj/wasm/wasmobj.go | 97 ++++++++++++++++++++++ src/cmd/link/internal/ld/deadcode.go | 7 ++ src/cmd/link/internal/loader/loader.go | 9 ++ src/cmd/link/internal/wasm/asm.go | 23 ++++- test/wasmexport.go | 19 +++++ 17 files changed, 331 insertions(+), 21 deletions(-) create mode 100644 test/wasmexport.go diff --git a/src/cmd/compile/internal/gc/compile.go b/src/cmd/compile/internal/gc/compile.go index 81a6023e475d72..5ade700d46756d 100644 --- a/src/cmd/compile/internal/gc/compile.go +++ b/src/cmd/compile/internal/gc/compile.go @@ -105,6 +105,11 @@ func prepareFunc(fn *ir.Func) { // Calculate parameter offsets. types.CalcSize(fn.Type()) + // Generate wrappers between Go ABI and Wasm ABI, for a wasmexport + // function. + // Must be done after InitLSym and CalcSize. + ssagen.GenWasmExportWrapper(fn) + ir.CurFunc = fn walk.Walk(fn) ir.CurFunc = nil // enforce no further uses of CurFunc diff --git a/src/cmd/compile/internal/ir/func.go b/src/cmd/compile/internal/ir/func.go index e005ef7a7f27d9..0675150b2d8f39 100644 --- a/src/cmd/compile/internal/ir/func.go +++ b/src/cmd/compile/internal/ir/func.go @@ -142,6 +142,9 @@ type Func struct { // WasmImport is used by the //go:wasmimport directive to store info about // a WebAssembly function import. WasmImport *WasmImport + // WasmExport is used by the //go:wasmexport directive to store info about + // a WebAssembly function import. + WasmExport *WasmExport } // WasmImport stores metadata associated with the //go:wasmimport pragma. @@ -150,6 +153,11 @@ type WasmImport struct { Name string } +// WasmExport stores metadata associated with the //go:wasmexport pragma. +type WasmExport struct { + Name string +} + // NewFunc returns a new Func with the given name and type. // // fpos is the position of the "func" token, and npos is the position diff --git a/src/cmd/compile/internal/ir/sizeof_test.go b/src/cmd/compile/internal/ir/sizeof_test.go index 68d2865595b716..6331cceb4a59b4 100644 --- a/src/cmd/compile/internal/ir/sizeof_test.go +++ b/src/cmd/compile/internal/ir/sizeof_test.go @@ -20,7 +20,7 @@ func TestSizeof(t *testing.T) { _32bit uintptr // size on 32bit platforms _64bit uintptr // size on 64bit platforms }{ - {Func{}, 176, 296}, + {Func{}, 180, 304}, {Name{}, 96, 168}, } diff --git a/src/cmd/compile/internal/noder/linker.go b/src/cmd/compile/internal/noder/linker.go index f5667f57ab98f3..486013c7df868b 100644 --- a/src/cmd/compile/internal/noder/linker.go +++ b/src/cmd/compile/internal/noder/linker.go @@ -278,6 +278,11 @@ func (l *linker) relocFuncExt(w *pkgbits.Encoder, name *ir.Name) { w.String("") w.String("") } + if name.Func.WasmExport != nil { + w.String(name.Func.WasmExport.Name) + } else { + w.String("") + } } // Relocated extension data. diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go index 1652dc66187eb5..7905c374c5e971 100644 --- a/src/cmd/compile/internal/noder/noder.go +++ b/src/cmd/compile/internal/noder/noder.go @@ -171,6 +171,7 @@ type pragmas struct { Pos []pragmaPos // position of each individual flag Embeds []pragmaEmbed WasmImport *WasmImport + WasmExport *WasmExport } // WasmImport stores metadata associated with the //go:wasmimport pragma @@ -180,6 +181,12 @@ type WasmImport struct { Name string } +// WasmExport stores metadata associated with the //go:wasmexport pragma +type WasmExport struct { + Pos syntax.Pos + Name string +} + type pragmaPos struct { Flag ir.PragmaFlag Pos syntax.Pos @@ -204,6 +211,9 @@ func (p *noder) checkUnusedDuringParse(pragma *pragmas) { if pragma.WasmImport != nil { p.error(syntax.Error{Pos: pragma.WasmImport.Pos, Msg: "misplaced go:wasmimport directive"}) } + if pragma.WasmExport != nil { + p.error(syntax.Error{Pos: pragma.WasmExport.Pos, Msg: "misplaced go:wasmexport directive"}) + } } // pragma is called concurrently if files are parsed concurrently. @@ -246,6 +256,23 @@ func (p *noder) pragma(pos syntax.Pos, blankLine bool, text string, old syntax.P Name: f[2], } } + + case strings.HasPrefix(text, "go:wasmexport "): + f := strings.Fields(text) + if len(f) != 2 { + // TODO: maybe make the name optional? It was once mentioned on proposal 65199. + p.error(syntax.Error{Pos: pos, Msg: "usage: //go:wasmexport exportname"}) + break + } + + if buildcfg.GOARCH == "wasm" { + // Only actually use them if we're compiling to WASM though. + pragma.WasmExport = &WasmExport{ + Pos: pos, + Name: f[1], + } + } + case strings.HasPrefix(text, "go:linkname "): f := strings.Fields(text) if !(2 <= len(f) && len(f) <= 3) { diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index ff44adedb4902f..1dd2e09b0da04e 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1132,15 +1132,22 @@ func (r *reader) funcExt(name *ir.Name, method *types.Sym) { r.linkname(name) if buildcfg.GOARCH == "wasm" { - xmod := r.String() - xname := r.String() + importmod := r.String() + importname := r.String() + exportname := r.String() - if xmod != "" && xname != "" { + if importmod != "" && importname != "" { fn.WasmImport = &ir.WasmImport{ - Module: xmod, - Name: xname, + Module: importmod, + Name: importname, } } + if exportname != "" { + if method != nil { + base.ErrorfAt(fn.Pos(), 0, "cannot use //go:wasmexport on a method") + } + fn.WasmExport = &ir.WasmExport{Name: exportname} + } } if r.Bool() { diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index c1560941b8ecec..9f862f9a4cf5fe 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -1050,6 +1050,7 @@ func (w *writer) funcExt(obj *types2.Func) { w.p.errorf(decl, "go:nosplit and go:systemstack cannot be combined") } wi := asWasmImport(decl.Pragma) + we := asWasmExport(decl.Pragma) if decl.Body != nil { if pragma&ir.Noescape != 0 { @@ -1104,6 +1105,11 @@ func (w *writer) funcExt(obj *types2.Func) { w.String("") w.String("") } + if we != nil { + w.String(we.Name) + } else { + w.String("") + } } w.Bool(false) // stub extension @@ -3011,6 +3017,13 @@ func asWasmImport(p syntax.Pragma) *WasmImport { return p.(*pragmas).WasmImport } +func asWasmExport(p syntax.Pragma) *WasmExport { + if p == nil { + return nil + } + return p.(*pragmas).WasmExport +} + // isPtrTo reports whether from is the type *to. func isPtrTo(from, to types2.Type) bool { ptr, ok := types2.Unalias(from).(*types2.Pointer) diff --git a/src/cmd/compile/internal/ssagen/abi.go b/src/cmd/compile/internal/ssagen/abi.go index d5ae3b179316bb..0c42c843123d8c 100644 --- a/src/cmd/compile/internal/ssagen/abi.go +++ b/src/cmd/compile/internal/ssagen/abi.go @@ -19,6 +19,8 @@ import ( "cmd/compile/internal/types" "cmd/internal/obj" "cmd/internal/obj/wasm" + + rtabi "internal/abi" ) // SymABIs records information provided by the assembler about symbol @@ -347,7 +349,7 @@ func CreateWasmImportWrapper(fn *ir.Func) bool { ir.InitLSym(fn, true) - setupWasmABI(fn) + setupWasmImport(fn) pp := objw.NewProgs(fn, 0) defer pp.Free() @@ -360,7 +362,49 @@ func CreateWasmImportWrapper(fn *ir.Func) bool { return true } -func paramsToWasmFields(f *ir.Func, result *abi.ABIParamResultInfo, abiParams []abi.ABIParamAssignment) []obj.WasmField { +func GenWasmExportWrapper(wrapped *ir.Func) { + if wrapped.WasmExport == nil { + return + } + if buildcfg.GOARCH != "wasm" { + base.FatalfAt(wrapped.Pos(), "GenWasmExportWrapper call not supported on %s: func was %v", buildcfg.GOARCH, wrapped) + } + + pos := base.AutogeneratedPos + sym := &types.Sym{ + Name: wrapped.WasmExport.Name, + Linkname: wrapped.WasmExport.Name, + } + ft := wrapped.Nname.Type() + fn := ir.NewFunc(pos, pos, sym, types.NewSignature(nil, + typecheck.NewFuncParams(ft.Params()), + typecheck.NewFuncParams(ft.Results()))) + fn.ABI = obj.ABI0 // actually wasm ABI + // The wrapper function has a special calling convention that + // morestack currently doesn't handle. For now we require that + // the argument size fits in StackSmall, which we know we have + // on stack, so we don't need to split stack. + // cmd/internal/obj/wasm supports only 16 argument "registers" + // anyway. + if ft.ArgWidth() > rtabi.StackSmall { + base.ErrorfAt(wrapped.Pos(), 0, "wasmexport function argument too large") + } + fn.Pragma |= ir.Nosplit + + ir.InitLSym(fn, true) + + setupWasmExport(fn, wrapped) + + pp := objw.NewProgs(fn, 0) + defer pp.Free() + pp.Text.To.Type = obj.TYPE_TEXTSIZE + pp.Text.To.Val = int32(0) + pp.Text.To.Offset = types.RoundUp(ft.ArgWidth(), int64(types.RegSize)) + pp.Flush() + // Actual code geneneration is in cmd/internal/obj/wasm. +} + +func paramsToWasmFields(f *ir.Func, pragma string, result *abi.ABIParamResultInfo, abiParams []abi.ABIParamAssignment) []obj.WasmField { wfs := make([]obj.WasmField, len(abiParams)) for i, p := range abiParams { t := p.Type @@ -376,16 +420,16 @@ func paramsToWasmFields(f *ir.Func, result *abi.ABIParamResultInfo, abiParams [] case types.TUNSAFEPTR: wfs[i].Type = obj.WasmPtr default: - base.ErrorfAt(f.Pos(), 0, "go:wasmimport %s %s: unsupported parameter type %s", f.WasmImport.Module, f.WasmImport.Name, t.String()) + base.ErrorfAt(f.Pos(), 0, "%s: unsupported parameter type %s", pragma, t.String()) } wfs[i].Offset = p.FrameOffset(result) } return wfs } -func resultsToWasmFields(f *ir.Func, result *abi.ABIParamResultInfo, abiParams []abi.ABIParamAssignment) []obj.WasmField { +func resultsToWasmFields(f *ir.Func, pragma string, result *abi.ABIParamResultInfo, abiParams []abi.ABIParamAssignment) []obj.WasmField { if len(abiParams) > 1 { - base.ErrorfAt(f.Pos(), 0, "go:wasmimport %s %s: too many return values", f.WasmImport.Module, f.WasmImport.Name) + base.ErrorfAt(f.Pos(), 0, "%s: too many return values", pragma) return nil } wfs := make([]obj.WasmField, len(abiParams)) @@ -408,8 +452,9 @@ func resultsToWasmFields(f *ir.Func, result *abi.ABIParamResultInfo, abiParams [ return wfs } -// setupWasmABI calculates the params and results in terms of WebAssembly values for the given function. -func setupWasmABI(f *ir.Func) { +// setupWasmImport calculates the params and results in terms of WebAssembly values for the given function, +// and sets up the wasmimport metadata. +func setupWasmImport(f *ir.Func) { wi := obj.WasmImport{ Module: f.WasmImport.Module, Name: f.WasmImport.Name, @@ -438,8 +483,21 @@ func setupWasmABI(f *ir.Func) { // (import "a_module" "add" (func (param i32 i32) (result i32))) abiConfig := AbiForBodylessFuncStackMap(f) abiInfo := abiConfig.ABIAnalyzeFuncType(f.Type()) - wi.Params = paramsToWasmFields(f, abiInfo, abiInfo.InParams()) - wi.Results = resultsToWasmFields(f, abiInfo, abiInfo.OutParams()) + wi.Params = paramsToWasmFields(f, "go:wasmimport", abiInfo, abiInfo.InParams()) + wi.Results = resultsToWasmFields(f, "go:wasmimport", abiInfo, abiInfo.OutParams()) } f.LSym.Func().WasmImport = &wi } + +// setupWasmExport calculates the params and results in terms of WebAssembly values for the given function, +// and sets up the wasmexport metadata. +func setupWasmExport(f, wrapped *ir.Func) { + we := obj.WasmExport{ + WrappedSym: wrapped.LSym, + } + abiConfig := AbiForBodylessFuncStackMap(wrapped) + abiInfo := abiConfig.ABIAnalyzeFuncType(wrapped.Type()) + we.Params = paramsToWasmFields(wrapped, "go:wasmexport", abiInfo, abiInfo.InParams()) + we.Results = resultsToWasmFields(wrapped, "go:wasmexport", abiInfo, abiInfo.OutParams()) + f.LSym.Func().WasmExport = &we +} diff --git a/src/cmd/internal/goobj/objfile.go b/src/cmd/internal/goobj/objfile.go index 56ce76ad09fc8a..d54fa993d28af6 100644 --- a/src/cmd/internal/goobj/objfile.go +++ b/src/cmd/internal/goobj/objfile.go @@ -306,6 +306,7 @@ const ( SymFlagPkgInit SymFlagLinkname SymFlagABIWrapper + SymFlagWasmExport ) // Returns the length of the name of the symbol. @@ -339,6 +340,7 @@ func (s *Sym) IsDict() bool { return s.Flag2()&SymFlagDict != 0 } func (s *Sym) IsPkgInit() bool { return s.Flag2()&SymFlagPkgInit != 0 } func (s *Sym) IsLinkname() bool { return s.Flag2()&SymFlagLinkname != 0 } func (s *Sym) ABIWrapper() bool { return s.Flag2()&SymFlagABIWrapper != 0 } +func (s *Sym) WasmExport() bool { return s.Flag2()&SymFlagWasmExport != 0 } func (s *Sym) SetName(x string, w *Writer) { binary.LittleEndian.PutUint32(s[:], uint32(len(x))) @@ -447,6 +449,7 @@ const ( AuxPcinline AuxPcdata AuxWasmImport + AuxWasmType AuxSehUnwindInfo ) diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index 27626d9deba149..a3e4a0d309eedf 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -500,6 +500,7 @@ type FuncInfo struct { FuncInfoSym *LSym WasmImport *WasmImport + WasmExport *WasmExport sehUnwindInfoSym *LSym } @@ -665,9 +666,9 @@ func (wi *WasmImport) Read(b []byte) { // parameters and results translated into WASM types based on the Go function // declaration. type WasmFuncType struct { - // Params holds the imported function parameter fields. + // Params holds the function parameter fields. Params []WasmField - // Results holds the imported function result fields. + // Results holds the function result fields. Results []WasmField } @@ -724,6 +725,27 @@ func (ft *WasmFuncType) Read(b []byte) { } } +// WasmExport represents a WebAssembly (WASM) exported function with +// parameters and results translated into WASM types based on the Go function +// declaration. +type WasmExport struct { + WasmFuncType + + WrappedSym *LSym // the wrapped Go function + AuxSym *LSym // aux symbol to pass metadata to the linker +} + +func (we *WasmExport) CreateAuxSym() { + var b bytes.Buffer + we.WasmFuncType.Write(&b) + p := b.Bytes() + we.AuxSym = &LSym{ + Type: objabi.SDATA, // doesn't really matter + P: append([]byte(nil), p...), + Size: int64(len(p)), + } +} + type WasmField struct { Type WasmFieldType // Offset holds the frame-pointer-relative locations for Go's stack-based diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index cbdc5a3486e1dd..de383499305f5e 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -361,6 +361,9 @@ func (w *writer) Sym(s *LSym) { if s.ABIWrapper() { flag2 |= goobj.SymFlagABIWrapper } + if s.Func() != nil && s.Func().WasmExport != nil { + flag2 |= goobj.SymFlagWasmExport + } if strings.HasPrefix(name, "gofile..") { name = filepath.ToSlash(name) } @@ -627,6 +630,9 @@ func (w *writer) Aux(s *LSym) { } w.aux1(goobj.AuxWasmImport, fn.WasmImport.AuxSym) } + if fn.WasmExport != nil { + w.aux1(goobj.AuxWasmType, fn.WasmExport.AuxSym) + } } else if v := s.VarInfo(); v != nil { if v.dwarfInfoSym != nil && v.dwarfInfoSym.Size != 0 { w.aux1(goobj.AuxDwarfInfo, v.dwarfInfoSym) @@ -737,6 +743,9 @@ func nAuxSym(s *LSym) int { } n++ } + if fn.WasmExport != nil { + n++ + } } else if v := s.VarInfo(); v != nil { if v.dwarfInfoSym != nil && v.dwarfInfoSym.Size != 0 { n++ @@ -801,6 +810,9 @@ func genFuncInfoSyms(ctxt *Link) { if wi := fn.WasmImport; wi != nil { auxsyms = append(auxsyms, wi.AuxSym) } + if we := fn.WasmExport; we != nil { + auxsyms = append(auxsyms, we.AuxSym) + } for _, s := range auxsyms { if s == nil || s.Size == 0 { continue diff --git a/src/cmd/internal/obj/sym.go b/src/cmd/internal/obj/sym.go index d2e61832ba0b14..943be3c38c82a1 100644 --- a/src/cmd/internal/obj/sym.go +++ b/src/cmd/internal/obj/sym.go @@ -462,6 +462,9 @@ func (ctxt *Link) traverseFuncAux(flag traverseFlag, fsym *LSym, fn func(parent if wi := fninfo.WasmImport; wi != nil { auxsyms = append(auxsyms, wi.AuxSym) } + if we := fninfo.WasmExport; we != nil { + auxsyms = append(auxsyms, we.AuxSym) + } for _, s := range auxsyms { if s == nil || s.Size == 0 { continue diff --git a/src/cmd/internal/obj/wasm/wasmobj.go b/src/cmd/internal/obj/wasm/wasmobj.go index dcbf35e8865afa..4b5324cc560432 100644 --- a/src/cmd/internal/obj/wasm/wasmobj.go +++ b/src/cmd/internal/obj/wasm/wasmobj.go @@ -196,6 +196,8 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { // isn't run. We don't want the frame expansion code because our function // body is just the code to translate and call the imported function. framesize = 0 + } else if s.Func().WasmExport != nil { + genWasmExportWrapper(s, appendp) } else if s.Func().Text.From.Sym.Wrapper() { // if g._panic != nil && g._panic.argp == FP { // g._panic.argp = bottom-of-frame @@ -900,6 +902,95 @@ func genWasmImportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args p = appendp(p, obj.ARET) } +// Generate function body for wasmexport wrapper function. +func genWasmExportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args ...obj.Addr) *obj.Prog) { + we := s.Func().WasmExport + we.CreateAuxSym() + p := s.Func().Text + if p.Link != nil { + panic("wrapper functions for WASM export should not have a body") + } + framesize := p.To.Offset + + // Store args + for i, f := range we.Params { + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AGet, regAddr(REG_R0+int16(i))) + switch f.Type { + case obj.WasmI32: + p = appendp(p, AI32Store, constAddr(f.Offset)) + case obj.WasmI64: + p = appendp(p, AI64Store, constAddr(f.Offset)) + case obj.WasmF32: + p = appendp(p, AF32Store, constAddr(f.Offset)) + case obj.WasmF64: + p = appendp(p, AF64Store, constAddr(f.Offset)) + case obj.WasmPtr: + p = appendp(p, AI64ExtendI32U) + p = appendp(p, AI64Store, constAddr(f.Offset)) + default: + panic("bad param type") + } + } + + // Call the Go function. + // XXX maybe use ACALL and let later phase expand? But we don't use PC_B. Maybe we should? + // Go calling convention expects we push a return PC before call. + // SP -= 8 + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AI32Const, constAddr(8)) + p = appendp(p, AI32Sub) + p = appendp(p, ASet, regAddr(REG_SP)) + // write return address to Go stack + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AI64Const, obj.Addr{ + Type: obj.TYPE_ADDR, + Name: obj.NAME_EXTERN, + Sym: s, // PC_F + Offset: 1, // PC_B=1, past the prologue, so we have the right SP delta + }) + p = appendp(p, AI64Store, constAddr(0)) + // Set PC_B parameter to function entry + p = appendp(p, AI32Const, constAddr(0)) + p = appendp(p, ACall, obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: we.WrappedSym}) + // return value is on the top of the stack, indicating whether to unwind the Wasm stack + // TODO: handle stack unwinding + p = appendp(p, AIf) + p = appendp(p, obj.AUNDEF) + p = appendp(p, AEnd) + + // Load result + if len(we.Results) > 1 { + panic("invalid results type") + } else if len(we.Results) == 1 { + p = appendp(p, AGet, regAddr(REG_SP)) + f := we.Results[0] + switch f.Type { + case obj.WasmI32: + p = appendp(p, AI32Load, constAddr(f.Offset)) + case obj.WasmI64: + p = appendp(p, AI64Load, constAddr(f.Offset)) + case obj.WasmF32: + p = appendp(p, AF32Load, constAddr(f.Offset)) + case obj.WasmF64: + p = appendp(p, AF64Load, constAddr(f.Offset)) + case obj.WasmPtr: + p = appendp(p, AI64Load, constAddr(f.Offset)) + p = appendp(p, AI32WrapI64) + default: + panic("bad result type") + } + } + + // Epilogue. Cannot use ARET as we don't follow Go calling convention. + // SP += framesize + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AI32Const, constAddr(framesize)) + p = appendp(p, AI32Add) + p = appendp(p, ASet, regAddr(REG_SP)) + p = appendp(p, AReturn) +} + func constAddr(value int64) obj.Addr { return obj.Addr{Type: obj.TYPE_CONST, Offset: value} } @@ -991,6 +1082,12 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { // no locals useAssemblyRegMap() default: + if s.Func().WasmExport != nil { + // no local SP, not following Go calling convention + useAssemblyRegMap() + break + } + // Normal calling convention: PC_B as WebAssembly parameter. First local variable is local SP cache. regVars[REG_PC_B-MINREG] = ®Var{false, 0} hasLocalSP = true diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index 3d547259a1833a..a1378fc02c3bfa 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -116,6 +116,13 @@ func (d *deadcodePass) init() { } d.mark(s, 0) } + // So are wasmexports. + for _, s := range d.ldr.WasmExports { + if d.ctxt.Debugvlog > 1 { + d.ctxt.Logf("deadcode start wasmexport: %s<%d>\n", d.ldr.SymName(s), d.ldr.SymVersion(s)) + } + d.mark(s, 0) + } d.mapinitnoop = d.ldr.Lookup("runtime.mapinitnoop", abiInternalVer) if d.mapinitnoop == 0 { diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index 98bff775fb8448..a391c8ced93bba 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -251,6 +251,8 @@ type Loader struct { // CgoExports records cgo-exported symbols by SymName. CgoExports map[string]Sym + WasmExports []Sym + flags uint32 strictDupMsgs int // number of strict-dup warning/errors, when FlagStrictDups is enabled @@ -1627,6 +1629,10 @@ func (l *Loader) WasmImportSym(fnSymIdx Sym) Sym { return l.aux1(fnSymIdx, goobj.AuxWasmImport) } +func (l *Loader) WasmTypeSym(s Sym) Sym { + return l.aux1(s, goobj.AuxWasmType) +} + // SEHUnwindSym returns the auxiliary SEH unwind symbol associated with // a given function symbol. func (l *Loader) SEHUnwindSym(fnSymIdx Sym) Sym { @@ -2213,6 +2219,9 @@ func (st *loadState) preloadSyms(r *oReader, kind int) { if a := int32(osym.Align()); a != 0 && a > l.SymAlign(gi) { l.SetSymAlign(gi, a) } + if osym.WasmExport() { + l.WasmExports = append(l.WasmExports, gi) + } } } diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index 09c54c13922610..cdd8de467d237e 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -219,6 +219,15 @@ func asmb2(ctxt *ld.Link, ldr *loader.Loader) { if sig, ok := wasmFuncTypes[ldr.SymName(fn)]; ok { typ = lookupType(sig, &types) } + if s := ldr.WasmTypeSym(fn); s != 0 { + var o obj.WasmFuncType + o.Read(ldr.Data(s)) + t := &wasmFuncType{ + Params: fieldsToTypes(o.Params), + Results: fieldsToTypes(o.Results), + } + typ = lookupType(t, &types) + } name := nameRegexp.ReplaceAllString(ldr.SymName(fn), "_") fns[i] = &wasmFunc{Name: name, Type: typ, Code: wfn.Bytes()} @@ -407,15 +416,21 @@ func writeExportSec(ctxt *ld.Link, ldr *loader.Loader, lenHostImports int) { switch buildcfg.GOOS { case "wasip1": - writeUleb128(ctxt.Out, 2) // number of exports + writeUleb128(ctxt.Out, uint64(2+len(ldr.WasmExports))) // number of exports s := ldr.Lookup("_rt0_wasm_wasip1", 0) idx := uint32(lenHostImports) + uint32(ldr.SymValue(s)>>16) - funcValueOffset writeName(ctxt.Out, "_start") // the wasi entrypoint ctxt.Out.WriteByte(0x00) // func export writeUleb128(ctxt.Out, uint64(idx)) // funcidx - writeName(ctxt.Out, "memory") // memory in wasi - ctxt.Out.WriteByte(0x02) // mem export - writeUleb128(ctxt.Out, 0) // memidx + for _, s := range ldr.WasmExports { + idx := uint32(lenHostImports) + uint32(ldr.SymValue(s)>>16) - funcValueOffset + writeName(ctxt.Out, ldr.SymName(s)) + ctxt.Out.WriteByte(0x00) // func export + writeUleb128(ctxt.Out, uint64(idx)) // funcidx + } + writeName(ctxt.Out, "memory") // memory in wasi + ctxt.Out.WriteByte(0x02) // mem export + writeUleb128(ctxt.Out, 0) // memidx case "js": writeUleb128(ctxt.Out, 4) // number of exports for _, name := range []string{"run", "resume", "getsp"} { diff --git a/test/wasmexport.go b/test/wasmexport.go new file mode 100644 index 00000000000000..3b92ae93c954c8 --- /dev/null +++ b/test/wasmexport.go @@ -0,0 +1,19 @@ +// errorcheck + +// Copyright 2024 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. + +// Verify that misplaced directives are diagnosed. + +//go:build wasm + +package p + +//go:wasmexport F +func F() {} // OK + +type S int32 + +//go:wasmexport M +func (S) M() {} // ERROR "cannot use //go:wasmexport on a method" From f259e4c916bcde5221dca99ce7d77095a21b9801 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 9 Aug 2024 10:59:43 -0700 Subject: [PATCH 222/866] cmd/compile: fix off-by-one error in prove pass I think I introduced #68809 when rewriting the prove pass, by introducing an off-by-one error here: https://go-review.googlesource.com/c/go/+/599096/5/src/cmd/compile/internal/ssa/prove.go lines 872-874. The min++ is already handled in one of the two following cases with the (r&eq==0) condition. Move the min++ to just the other case. Fixes #68809 Change-Id: Iffae99e29219c94aaf584cd7ae247289fa604a00 Reviewed-on: https://go-review.googlesource.com/c/go/+/604100 Reviewed-by: Keith Randall Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/ssa/prove.go | 6 +++--- test/fixedbugs/issue68809.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 test/fixedbugs/issue68809.go diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index c2ac6ca40f44d8..d563204565aaaf 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -1059,9 +1059,6 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { // We know that either x>min OR x<=max. factsTable cannot record OR conditions, // so let's see if we can already prove that one of them is false, in which case // the other must be true - if r == gt { - min++ - } l := ft.limits[x.ID] if l.max <= min { if r&eq == 0 || l.max < min { @@ -1070,6 +1067,9 @@ func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) { } } else if l.min > max { // x<=max is impossible, so it must be x>min + if r == gt { + min++ + } ft.signedMin(x, min) } } diff --git a/test/fixedbugs/issue68809.go b/test/fixedbugs/issue68809.go new file mode 100644 index 00000000000000..67afda67085496 --- /dev/null +++ b/test/fixedbugs/issue68809.go @@ -0,0 +1,19 @@ +// run + +// Copyright 2024 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 main + +func main() { + cnt := 0 + for i := 1; i <= 11; i++ { + if i-6 > 4 { + cnt++ + } + } + if cnt != 1 { + panic("bad") + } +} From 3de175f38348f82f6cc7bfb49c3609e72a5f8f41 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 9 Aug 2024 13:11:03 -0700 Subject: [PATCH 223/866] cmd/compile: in prove pass, check for unsat before adding local facts Local facts can get us to unsatisfiable because there is an unconditional panic in the block. That shouldn't declare the whole block as unreachable, because we do still need to enter it to get that panic. Fixes #68816 Change-Id: I9220edb46089690702d2eb61d112815c7ac91f16 Reviewed-on: https://go-review.googlesource.com/c/go/+/604118 Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Auto-Submit: Keith Randall --- src/cmd/compile/internal/ssa/prove.go | 6 ++-- test/fixedbugs/issue68816.go | 41 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 test/fixedbugs/issue68816.go diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index d563204565aaaf..7c95922f4d8c6d 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -1501,9 +1501,6 @@ func prove(f *Func) { addBranchRestrictions(ft, parent, branch) } - // Add facts about the values in the current block. - addLocalFacts(ft, node.block) - if ft.unsat { // node.block is unreachable. // Remove it and don't visit @@ -1516,6 +1513,9 @@ func prove(f *Func) { // taking this branch. We'll restore // ft when we unwind. + // Add facts about the values in the current block. + addLocalFacts(ft, node.block) + work = append(work, bp{ block: node.block, state: simplify, diff --git a/test/fixedbugs/issue68816.go b/test/fixedbugs/issue68816.go new file mode 100644 index 00000000000000..8622c9aa98006a --- /dev/null +++ b/test/fixedbugs/issue68816.go @@ -0,0 +1,41 @@ +// run + +// Copyright 2024 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 main + +func main() { + mustPanic(func() { + f1(1) + }) + f2(1, 0) // must not panic + mustPanic(func() { + f2(1, 2) + }) +} + +var v []func() + +//go:noinline +func f1(i int) { + v = make([]func(), -2|i) +} + +//go:noinline +func f2(i, j int) { + if j > 0 { + v = make([]func(), -2|i) + } +} + +func mustPanic(f func()) { + defer func() { + r := recover() + if r == nil { + panic("didn't panic") + } + }() + f() +} From 820d4458768ccc886b09fa258d7faae4260a0772 Mon Sep 17 00:00:00 2001 From: cuishuang Date: Thu, 8 Aug 2024 11:05:23 +0800 Subject: [PATCH 224/866] runtime: make function comments match function names Change-Id: I5dc9864fbb6f1745be0f7076ac72debd039c8f3e Reviewed-on: https://go-review.googlesource.com/c/go/+/604178 Reviewed-by: shuang cui Run-TryBot: shuang cui Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI TryBot-Result: Gopher Robot Reviewed-by: David Chase --- src/runtime/traceruntime.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/runtime/traceruntime.go b/src/runtime/traceruntime.go index dfbf183de5ba7c..329851897881c4 100644 --- a/src/runtime/traceruntime.go +++ b/src/runtime/traceruntime.go @@ -470,7 +470,7 @@ func (tl traceLocker) GoUnpark(gp *g, skip int) { tl.eventWriter(traceGoRunning, traceProcRunning).event(traceEvGoUnblock, traceArg(gp.goid), gp.trace.nextSeq(tl.gen), tl.stack(skip)) } -// GoCoroswitch emits a GoSwitch event. If destroy is true, the calling goroutine +// GoSwitch emits a GoSwitch event. If destroy is true, the calling goroutine // is simultaneously being destroyed. func (tl traceLocker) GoSwitch(nextg *g, destroy bool) { // Emit a GoWaiting status if necessary for the unblocked goroutine. @@ -630,7 +630,7 @@ func trace_userTaskEnd(id uint64) { traceRelease(tl) } -// trace_userTaskEnd emits a UserRegionBegin or UserRegionEnd event, +// trace_userRegion emits a UserRegionBegin or UserRegionEnd event, // depending on mode (0 == Begin, 1 == End). // // TODO(mknyszek): Just make this two functions. @@ -655,7 +655,7 @@ func trace_userRegion(id, mode uint64, name string) { traceRelease(tl) } -// trace_userTaskEnd emits a UserRegionBegin or UserRegionEnd event. +// trace_userLog emits a UserRegionBegin or UserRegionEnd event. // //go:linkname trace_userLog runtime/trace.userLog func trace_userLog(id uint64, category, message string) { From c8ccbcdde595bd04056398bec72532a8582f7442 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Fri, 2 Aug 2024 15:31:22 -0700 Subject: [PATCH 225/866] runtime: add direct benchmark of mutex contention Measure throughput of a single mutex with all threads contending. Do not attempt to measure fairness/starvation. The ChanContended benchmark works somewhat well for this (interacting with the mutex is a large contributor to its results), but it's better to be clear about what we're attempting to measure. For #68578 Change-Id: Ie397b4c363bfcd5afddf796a81cd6c34ebf8551b Reviewed-on: https://go-review.googlesource.com/c/go/+/604375 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Auto-Submit: Rhys Hiltner --- src/runtime/runtime_test.go | 48 ++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/runtime/runtime_test.go b/src/runtime/runtime_test.go index 6004649ee92b31..c24f725c0e6f66 100644 --- a/src/runtime/runtime_test.go +++ b/src/runtime/runtime_test.go @@ -564,6 +564,48 @@ func BenchmarkOSYield(b *testing.B) { } } +func BenchmarkMutexContention(b *testing.B) { + // Measure throughput of a single mutex with all threads contending + // + // Share a single counter across all threads. Progress from any thread is + // progress for the benchmark as a whole. We don't measure or give points + // for fairness here, arbitrary delay to any given thread's progress is + // invisible and allowed. + // + // The cache line that holds the count value will need to move between + // processors, but not as often as the cache line that holds the mutex. The + // mutex protects access to the count value, which limits contention on that + // cache line. This is a simple design, but it helps to make the behavior of + // the benchmark clear. Most real uses of mutex will protect some number of + // cache lines anyway. + + var state struct { + _ cpu.CacheLinePad + lock Mutex + _ cpu.CacheLinePad + count atomic.Int64 + _ cpu.CacheLinePad + } + + procs := GOMAXPROCS(0) + var wg sync.WaitGroup + for range procs { + wg.Add(1) + go func() { + defer wg.Done() + for { + Lock(&state.lock) + ours := state.count.Add(1) + Unlock(&state.lock) + if ours >= int64(b.N) { + return + } + } + }() + } + wg.Wait() +} + func BenchmarkMutexHandoff(b *testing.B) { testcase := func(delay func(l *Mutex)) func(b *testing.B) { return func(b *testing.B) { @@ -590,11 +632,11 @@ func BenchmarkMutexHandoff(b *testing.B) { // each other in a non-blocking way via the "turn" state. var state struct { - _ [cpu.CacheLinePadSize]byte + _ cpu.CacheLinePad lock Mutex - _ [cpu.CacheLinePadSize]byte + _ cpu.CacheLinePad turn atomic.Int64 - _ [cpu.CacheLinePadSize]byte + _ cpu.CacheLinePad } var delta atomic.Int64 From bcec5f1540e0765fd302a443c6435943bb4aecb5 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Fri, 9 Aug 2024 17:43:11 +0000 Subject: [PATCH 226/866] syscall,misc/wasm: fix path expansion on non-unix platforms When running a go binary compiled to wasm using node.js on a Windows platform, the absolute path passed in is also incorrectly forced to expand. For example: E:\Project\CS_Project\gsv\testdata\result.gob.gz will results to open C:\Users\zxilly\AppData\Local\wasm-exec\go1.23rc1\E:\Project\CS_Project\gsv\testdata\result.gob.gz: No such file or directory C:\Users\zxilly\AppData\Local\wasm-exec\go1.23rc1 is the place of wasm_exec_node.js Fixes: #68820 Change-Id: Ic30c6242302f8915ac1b8ea9f24546935cbb791e GitHub-Last-Rev: f35ff1a2eef86c3b6431bb2be75448c3ac553f1b GitHub-Pull-Request: golang/go#68255 Reviewed-on: https://go-review.googlesource.com/c/go/+/595797 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Cherry Mui Reviewed-by: Johan Brandhorst-Satzkorn TryBot-Result: Gopher Robot Run-TryBot: Johan Brandhorst-Satzkorn --- misc/wasm/wasm_exec.js | 8 ++++++++ misc/wasm/wasm_exec_node.js | 1 + src/syscall/fs_js.go | 7 +++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/misc/wasm/wasm_exec.js b/misc/wasm/wasm_exec.js index bc6f210242824c..0f635d6d540717 100644 --- a/misc/wasm/wasm_exec.js +++ b/misc/wasm/wasm_exec.js @@ -73,6 +73,14 @@ } } + if (!globalThis.path) { + globalThis.path = { + resolve(...pathSegments) { + return pathSegments.join("/"); + } + } + } + if (!globalThis.crypto) { throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)"); } diff --git a/misc/wasm/wasm_exec_node.js b/misc/wasm/wasm_exec_node.js index 986069087bc0bc..dd65b19867dcf4 100644 --- a/misc/wasm/wasm_exec_node.js +++ b/misc/wasm/wasm_exec_node.js @@ -11,6 +11,7 @@ if (process.argv.length < 3) { globalThis.require = require; globalThis.fs = require("fs"); +globalThis.path = require("path"); globalThis.TextEncoder = require("util").TextEncoder; globalThis.TextDecoder = require("util").TextDecoder; diff --git a/src/syscall/fs_js.go b/src/syscall/fs_js.go index 793b9a2d41c38e..b6138ebeb1ed53 100644 --- a/src/syscall/fs_js.go +++ b/src/syscall/fs_js.go @@ -16,6 +16,7 @@ import ( func now() (sec int64, nsec int32) var jsProcess = js.Global().Get("process") +var jsPath = js.Global().Get("path") var jsFS = js.Global().Get("fs") var constants = jsFS.Get("constants") @@ -101,10 +102,8 @@ func Open(path string, openmode int, perm uint32) (int, error) { } } - if path[0] != '/' { - cwd := jsProcess.Call("cwd").String() - path = cwd + "/" + path - } + path = jsPath.Call("resolve", path).String() + f := &jsFile{ path: path, entries: entries, From 198b2e1b5a7f46a5c3a804c89bf5676878ea7561 Mon Sep 17 00:00:00 2001 From: Quim Muntal Date: Fri, 9 Aug 2024 18:17:57 +0000 Subject: [PATCH 227/866] Revert "os/user: speed up Current on Windows" This reverts CL 597255. Reason for revert: Broke windows/arm64 Fixes #68822. Updates #68312. Change-Id: I43efabad43c74045888bb62bd27522aeaba0a64c Reviewed-on: https://go-review.googlesource.com/c/go/+/604555 Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- .../syscall/windows/security_windows.go | 19 ------------------- src/os/user/lookup_windows.go | 16 +++------------- src/os/user/user_test.go | 3 +-- 3 files changed, 4 insertions(+), 34 deletions(-) diff --git a/src/internal/syscall/windows/security_windows.go b/src/internal/syscall/windows/security_windows.go index e528744caad1bd..95694c368a54c2 100644 --- a/src/internal/syscall/windows/security_windows.go +++ b/src/internal/syscall/windows/security_windows.go @@ -156,22 +156,3 @@ type UserInfo4 struct { // //go:linkname GetSystemDirectory func GetSystemDirectory() string // Implemented in runtime package. - -// GetUserName retrieves the user name of the current thread -// in the specified format. -func GetUserName(format uint32) (string, error) { - n := uint32(50) - for { - b := make([]uint16, n) - e := syscall.GetUserNameEx(format, &b[0], &n) - if e == nil { - return syscall.UTF16ToString(b[:n]), nil - } - if e != syscall.ERROR_MORE_DATA { - return "", e - } - if n <= uint32(len(b)) { - return "", e - } - } -} diff --git a/src/os/user/lookup_windows.go b/src/os/user/lookup_windows.go index c319324d113a13..f259269a5393ec 100644 --- a/src/os/user/lookup_windows.go +++ b/src/os/user/lookup_windows.go @@ -232,22 +232,12 @@ func current() (*User, error) { if e != nil { return e } - username, e := windows.GetUserName(syscall.NameSamCompatible) + username, domain, e := lookupUsernameAndDomain(u.User.Sid) if e != nil { return e } - displayName, e := windows.GetUserName(syscall.NameDisplay) - if e != nil { - return e - } - usr = &User{ - Uid: uid, - Gid: gid, - Username: username, - Name: displayName, - HomeDir: dir, - } - return nil + usr, e = newUser(uid, gid, dir, username, domain) + return e }) return usr, err } diff --git a/src/os/user/user_test.go b/src/os/user/user_test.go index 31486aed033819..fa597b78ece7c8 100644 --- a/src/os/user/user_test.go +++ b/src/os/user/user_test.go @@ -45,9 +45,8 @@ func TestCurrent(t *testing.T) { } func BenchmarkCurrent(b *testing.B) { - // Benchmark current instead of Current because Current caches the result. for i := 0; i < b.N; i++ { - current() + Current() } } From 83d9afefead685d9da8e993e064cbe695111110c Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Tue, 6 Aug 2024 13:49:42 +0200 Subject: [PATCH 228/866] crypto/internal/boring: upgrade module to fips-20220613 / certificate 4735 Reapplies CL 549695 now that the certificate was issued. Updates #64717 Updates #62372 Change-Id: Ie37abed5c5aceac435d92397ed626dfeefabe5ab Reviewed-on: https://go-review.googlesource.com/c/go/+/603375 LUCI-TryBot-Result: Go LUCI Reviewed-by: Roland Shoemaker Reviewed-by: David Chase --- src/crypto/internal/boring/Dockerfile | 37 +++++++++++++----- src/crypto/internal/boring/LICENSE | 2 +- src/crypto/internal/boring/README.md | 7 ++-- src/crypto/internal/boring/build-boring.sh | 4 +- src/crypto/internal/boring/build-goboring.sh | 2 +- src/crypto/internal/boring/build.sh | 6 +++ src/crypto/internal/boring/goboringcrypto.h | 2 + .../syso/goboringcrypto_linux_amd64.syso | Bin 2555664 -> 2429120 bytes .../syso/goboringcrypto_linux_arm64.syso | Bin 1980296 -> 2107832 bytes 9 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/crypto/internal/boring/Dockerfile b/src/crypto/internal/boring/Dockerfile index 58eb028e8aa286..263692b288ab3b 100644 --- a/src/crypto/internal/boring/Dockerfile +++ b/src/crypto/internal/boring/Dockerfile @@ -13,11 +13,18 @@ WORKDIR /boring ENV LANG=C ENV LANGUAGE= -# Following NIST submission draft dated July 3, 2021. -# This corresponds to boringssl.googlesource.com/boringssl tag fips-20210429. -ENV ClangV=12 +# Following the Security Policy for FIPS 140 certificate #4735. +# https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/security-policies/140sp4735.pdf +# This corresponds to boringssl.googlesource.com/boringssl tag fips-20220613. RUN apt-get update && \ - apt-get install --no-install-recommends -y cmake xz-utils wget unzip ca-certificates clang-$ClangV python + apt-get install --no-install-recommends -y xz-utils wget unzip ca-certificates python lsb-release software-properties-common gnupg make libssl-dev faketime + +# Install Clang. +ENV ClangV=14 +RUN \ + wget https://apt.llvm.org/llvm.sh && \ + chmod +x llvm.sh && \ + ./llvm.sh $ClangV # Download, validate, unpack, build, and install Ninja. ENV NinjaV=1.10.2 @@ -31,11 +38,23 @@ RUN \ CC=clang-$ClangV CXX=clang++-$ClangV ./configure.py --bootstrap && \ mv ninja /usr/local/bin/ +# Download, validate, unpack, build, and install Cmake. +ENV CmakeV=3.22.1 +ENV CmakeH=0e998229549d7b3f368703d20e248e7ee1f853910d42704aa87918c213ea82c0 +RUN \ + wget https://github.com/Kitware/CMake/releases/download/v$CmakeV/cmake-$CmakeV.tar.gz && \ + echo "$CmakeH cmake-$CmakeV.tar.gz" >sha && sha256sum -c sha && \ + tar -xzf cmake-$CmakeV.tar.gz && \ + rm cmake-$CmakeV.tar.gz && \ + cd cmake-$CmakeV && \ + CC=clang-$ClangV CXX=clang++-$ClangV ./bootstrap && \ + make && make install + # Download, validate, unpack, and install Go. ARG GOARCH -ENV GoV=1.16.5 -ENV GoHamd64=b12c23023b68de22f74c0524f10b753e7b08b1504cb7e417eccebdd3fae49061 -ENV GoHarm64=d5446b46ef6f36fdffa852f73dfbbe78c1ddf010b99fa4964944b9ae8b4d6799 +ENV GoV=1.18.1 +ENV GoHamd64=b3b815f47ababac13810fc6021eb73d65478e0b2db4b09d348eefad9581a2334 +ENV GoHarm64=56a91851c97fb4697077abbca38860f735c32b38993ff79b088dac46e4735633 RUN \ eval GoH=\${GoH$GOARCH} && \ wget https://golang.org/dl/go$GoV.linux-$GOARCH.tar.gz && \ @@ -45,8 +64,8 @@ RUN \ ln -s /usr/local/go/bin/go /usr/local/bin/ # Download, validate, and unpack BoringCrypto. -ENV BoringV=853ca1ea1168dff08011e5d42d94609cc0ca2e27 -ENV BoringH=a4d069ccef6f3c7bc0c68de82b91414f05cb817494cd1ab483dcf3368883c7c2 +ENV BoringV=0c6f40132b828e92ba365c6b7680e32820c63fa7 +ENV BoringH=62f733289f2d677c2723f556aa58034c438f3a7bbca6c12b156538a88e38da8a RUN \ wget https://commondatastorage.googleapis.com/chromium-boringssl-fips/boringssl-$BoringV.tar.xz && \ echo "$BoringH boringssl-$BoringV.tar.xz" >sha && sha256sum -c sha && \ diff --git a/src/crypto/internal/boring/LICENSE b/src/crypto/internal/boring/LICENSE index 38990bdb771494..05b0963f5e3637 100644 --- a/src/crypto/internal/boring/LICENSE +++ b/src/crypto/internal/boring/LICENSE @@ -6,7 +6,7 @@ When building with GOEXPERIMENT=boringcrypto, the following applies. The goboringcrypto_linux_amd64.syso object file is built from BoringSSL source code by build/build.sh and is covered by the BoringSSL license reproduced below and also at -https://boringssl.googlesource.com/boringssl/+/fips-20190808/LICENSE. +https://boringssl.googlesource.com/boringssl/+/fips-20220613/LICENSE. BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL licensing. Files that are completely new have a Google copyright and an ISC diff --git a/src/crypto/internal/boring/README.md b/src/crypto/internal/boring/README.md index ec02786d96a845..62106cdc706609 100644 --- a/src/crypto/internal/boring/README.md +++ b/src/crypto/internal/boring/README.md @@ -27,13 +27,14 @@ syso/goboringcrypto_linux_arm64.syso is built with: GOARCH=arm64 ./build.sh -Both run on an x86 Debian Linux system using Docker. +Both run using Docker. + For the arm64 build to run on an x86 system, you need apt-get install qemu-user-static qemu-binfmt-support to allow the x86 kernel to run arm64 binaries via QEMU. -See build.sh for more details about the build. - +For the amd64 build to run on an Apple Silicon macOS, you need Rosetta 2. +See build.sh for more details about the build. diff --git a/src/crypto/internal/boring/build-boring.sh b/src/crypto/internal/boring/build-boring.sh index db49852a6312b7..5e109653a4fd4f 100755 --- a/src/crypto/internal/boring/build-boring.sh +++ b/src/crypto/internal/boring/build-boring.sh @@ -34,8 +34,8 @@ perl -p -i -e 's/defined.*ELF.*defined.*GNUC.*/$0 \&\& !defined(GOBORING)/' bori printf "set(CMAKE_C_COMPILER \"clang\")\nset(CMAKE_CXX_COMPILER \"clang++\")\n" >${HOME}/toolchain cd boringssl mkdir build && cd build && cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=${HOME}/toolchain -DFIPS=1 -DCMAKE_BUILD_TYPE=Release .. -ninja -./crypto/crypto_test +# SSLTest.HostMatching fails due to an expired certificate. +ninja && faketime 2022-06-13 ninja run_tests cd ../.. if [ "$(./boringssl/build/tool/bssl isfips)" != 1 ]; then diff --git a/src/crypto/internal/boring/build-goboring.sh b/src/crypto/internal/boring/build-goboring.sh index 4938b5eac33a57..c43fad24e8b14a 100755 --- a/src/crypto/internal/boring/build-goboring.sh +++ b/src/crypto/internal/boring/build-goboring.sh @@ -122,7 +122,7 @@ awk -f boringx.awk goboringcrypto.h # writes goboringcrypto.x awk -f boringh.awk goboringcrypto.h # writes goboringcrypto[01].h ls -l ../boringssl/include -clang++ -std=c++11 -fPIC -I../boringssl/include -O2 -o a.out goboringcrypto.cc +clang++ -fPIC -I../boringssl/include -O2 -o a.out goboringcrypto.cc ./a.out || exit 2 # clang implements u128 % u128 -> u128 by calling __umodti3, diff --git a/src/crypto/internal/boring/build.sh b/src/crypto/internal/boring/build.sh index ec960d729d738e..e2026018a39e6b 100755 --- a/src/crypto/internal/boring/build.sh +++ b/src/crypto/internal/boring/build.sh @@ -22,6 +22,12 @@ platform="" buildargs="" case "$GOARCH" in amd64) + if ! docker run --rm -t amd64/ubuntu:focal uname -m >/dev/null 2>&1; then + echo "# Docker cannot run amd64 binaries." + exit 1 + fi + platform="--platform linux/amd64" + buildargs="--build-arg ubuntu=amd64/ubuntu" ;; arm64) if ! docker run --rm -t arm64v8/ubuntu:focal uname -m >/dev/null 2>&1; then diff --git a/src/crypto/internal/boring/goboringcrypto.h b/src/crypto/internal/boring/goboringcrypto.h index 2b11049728c5bb..3663a1b1c358e2 100644 --- a/src/crypto/internal/boring/goboringcrypto.h +++ b/src/crypto/internal/boring/goboringcrypto.h @@ -125,7 +125,9 @@ void _goboringcrypto_EVP_AEAD_CTX_cleanup(GO_EVP_AEAD_CTX*); int _goboringcrypto_EVP_AEAD_CTX_seal(const GO_EVP_AEAD_CTX*, uint8_t*, size_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t); int _goboringcrypto_EVP_AEAD_CTX_open(const GO_EVP_AEAD_CTX*, uint8_t*, size_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t); const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_128_gcm_tls12(void); +const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_128_gcm_tls13(void); const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_256_gcm_tls12(void); +const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_256_gcm_tls13(void); enum go_evp_aead_direction_t { go_evp_aead_open = 0, go_evp_aead_seal = 1 diff --git a/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso b/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso index 6cea7893553abfee72af501a05a11ea09b396232..5ba8919dc14a6b0f78b64c4dc2b850997aeae77a 100644 GIT binary patch literal 2429120 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�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

A0$*elA|dRSRy+x1Ie1?YkUE7S>)e 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�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�}^Z;6#mXu4odc0|2Mf{rTh2N2J? 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
dT|af(P(>YlSYzZ&m3x7ks<lxc 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

$C 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≤(ZHLJ1)w_c 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ⅅ<2d>6=`jYl&?aqbx-96>!TZ?as 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 z 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

NGE;l=42a>8*m^zBYqvb^m$A7{a$W= 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�mHIL*fLJSp!w|`3*A`r;PSLY)MW{9~jDhqw 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 PMt6E*?5?9f+4uiHh;m-r literal 2555664 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%0DMm$Ws%Kj2whI&cLvl|DSihQ>XZ4M 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 -H@in~V<#PWaeZdxG`|vY@KdW5 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�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

?be2~n(m|8 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

vT9CQIX`g}cV3O# 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

yfI+Z#J!NuMWaI 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º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 z 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�DlB{4E3v1fWHVlx>QFr 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 z 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%0D-v3%l_p=Yxd1JC_@%)0gEUt2$M_PcMK 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 diff --git a/src/crypto/internal/boring/syso/goboringcrypto_linux_arm64.syso b/src/crypto/internal/boring/syso/goboringcrypto_linux_arm64.syso index 9659aa1a5e4a48329a41738a452c92021a34469c..c0f80c17e43a61cf22c7f38574faaaa6ad2e4bad 100644 GIT binary patch literal 2107832 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�p?Qo$GEA~f_?B$T0QcIz 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�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�N1e~0zN@NSHEie^N13Zect=Jo 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¥nG_K&L4nj=ZvLasA#|| z%3fVmT*K|rVD_VLCo$@0as0TxP8guBu#FuW@*ocqUc**j32oV1qQdyK0`%>+1d;{0 za<>~ydR1CgrGlwoe-0?pY@LS%=c7d2?vPck3&0~y7Mtv#webW+S%$x8^fGm zsx!B#3okr1@>=lAN6y}*f~=wy_v84A@dF}3rhCa?5WxuqRj

QLjb?Eb3N9f%5aO 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

7_ya5%Dsiia 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

ZBB$?zB?$Ic)anE1oSoth&`;+axFmR zh@)N{sy#={)gdGq8>~#ootT*mT)1^^oGnPGu;LsUI?!R6V=#GxZDq(i+K+E;1ycr@ z%BM5YWI-H;gh0M(bapa8iv#2M>l)Rxw_PO)A`vpQ1#X@}0xT7m$?7i*W41^CcHY__ zD0hZYPzx)N&$_sSGCMHaH?>Ynjl2<1buILX%$v~(-Me%>v{0klipgtqWhWUNwT!P$ zHtce(5SC@f6Ce!K_#sgQFq@Zq>bIFKZOuFT=5)6IBPo&!gLvQcxU=pdQnGi-w{Lqjbt1nGUH7*SW%C=PVRX z2_-q7mp*tMxTlFsuL=|W9{Tqi{X`*LQl45S8w6=7OSWa(xiprJ?TVdQ12QhiHS=RN zKu@Ko+N(G$0 zNTH!?P_*#yZa$~3cQK2S*-j*?Uh-_fMQr!qbn-|sfLsC?bRh{wwuBpL))mOwaASgI+!{XyBj#J63&$FHIUlOhHMvq zI?Cz>Mt)^F#@__ZLx7{@nnoKX?G=sen`Bpt zLI{Veio0LP{tH{WrS1(pnwe72Le3VU=0Yv7>Hc+>uC`oMp#V~_a_Y3BF@0}PyfT}; zi+C`J<(De4%9q?O#S(w{^LY?BJXX6}ecW;qX zPbT)=GavR(aRbqXppGL3LgSu*<+s#O93AWUg$+fYnVX)+D4C;s@RS~ic!^qxtoN*{8t4{Iv>56|22E3Cx8gstx zf*RZ!qGj~ELj4W{@1$=F!Mm5RhsUIPB-(cj_AO1fwBOD6F5n^Fq$R7;VSmtx?SwyZYti*32u%@gV+ z?Fz^8Pv^VKf$Iq!`o%3OqvZ920iTY3g=7lykSlh^Wqm+ z`b_R22xLJuACeiy3$*Hk6`zN49rntQbh77a_w(6`nfF%_q)-_c9)3F7=;q7x4jWU{c>dalg3Zp$kNktjAZac-}TFBd*PJ7^r8%@ zJ>rxo@%SZE8VlAJd2D|}3SG;|mWBl9n+06l;lF^`v{&oC?%J(5*Q4eS-_scZZ(6VF zW>s!zTjcoc;6D^f#PA1 zr@Hl4@eWxGh;b{{fT8+13U74DzIq?+$ibZU$i)(O2OGyy3d-x?ibdHPl=XL<|hg;;e=~_Jn zUDimH(F6)1)47by9%)kh+GEtmYoAENX9}@dJ{ulnWsG=f7dW_Vy)C#?iXvZaBj(m- zaBfowX<;0y0|}U}W)0eL$*eD$#A~Rt0ea_>Fu)*$J65%CeE@R>0*4CpzoD{0X)6C% z1_)yd6gI0QG-E@6hneD0S5duF0y;jNM0U+v$6beye~>`ylD})hR!()Doaeg`fnn;5 z73z^+bON}hVoN#a#;QS_rx5Q~t%GV?L=5z%ZtHha3}rK8h->MeG0S6LI3LCj3n$UN zB7_VjLBc}m3Gq|WXI-r!zz7YJV5Nagaz^X~^^0*dydhJ))3s zF2OM@_q|nW*YowmN|E_$Yy1c$G`;Iw8vt=q4c84s-OxZsxcy=QctQA%bo=_o-wyuU zs3#9F_XXeI>d8*J{$EuFeV6(ro`Y}25;TmP(*r{IciZhHG3FbK?Zutr_CX}STZ(60 zYUXYau$k)6SI=%mx7g!Ij+^S1k59B>$0lv9m(LqBpENIjw;Z=VZfC-Ltb{}6d z?ZUmO&q@FmVQ93UI_3w4EnwCOU?)CT4xz;mjV@hMI-m)VJ6yDE(nxfj-oVYUwkCWt z;dYsvl;vnW*S+4VZ`o+K@f3y?o@wyJoL8maBG$%}z8Bio%(?XhrD1G_B%w`djXX6W zA;!2s0f41!93BE>>5Q#K!n1-a1G@h^xR{vlN5&wc`ihh+n8rGdeo7K8ypbTPAM{_b z1>M6`y|-_C$gA^fIA(9_{bL0y`?Rk`TUW(*PA!qR?@89)=~w0ULiM}JegGe5V*lT8 zCB1~;h}?gdgvbp zb3uV;nA2~9%vw=^Jh52k0E19SK}RzFYITaPwz&w)58+YIN{u+rxYoI0X<$`KGz|Th zYPfi38so>r?7{s&*vx3#7JcNO-l`Vjquz;M>At9xm87Qegew+%T5^5deWMr1tr^=&fEkaMf)iUdlaTzOCMD8DE?sbNP0|o;4fI6}*AQz<*?GVgvLX;54?*6K zWyNO6&K+PUeto>ssOJkK|Ka1zzqS7}0Bir0Gq1@qfeFQs*l2hjHtVp&s;U(&=+oYm zQGIK!BQCvAMbw#7>W(qmKY)v4k@~-h*)5?;q0l6uUPQTPHkr7wA8Jj+L}_{Kl{aDN zS4tG$kwmPmb0F4VkpVcUSuJw`k29vAIwhS~?3~rs$$Vbk1`vSnu~_*s!2%jw=9X_q zDP=WG)4+FXGoBuw8?prv?*f3}`HRrzW1fH$#vw2NnqB9BI)zVlwSlI+Yd(c>-g^C) zf!{&!hWZzH5(q9ci`oprx#*kO1(*!Y)zzx^iGxA8TmClre)88`uu})hk~QF=bP?NS zos#P66UdBW0`mLhNkZb;^0)YeR49_{dWHK?{|V!%G1={`Ig>XCf~qDne~xKnT% zEgnV6ENU~mt6jSoBI9Nx%`JAz$S?H4Iv*jBcCIQheo%DKMRUEm>pvmFMuJOxAnX%a zH^C*;nIM9YXO>>%l=jrTn<{W=ggfXDIA%c^lQ2V_A&}8Iq=6PB9#^AkS`W0bHP#UBD?{T=ZR#Y0o z@NMEfEx%JogE9ZxA%>kMX-Ut1=8)ze6;f#zdSBZre*{=j1C1)S(G^R1?&ehFs_f1L z@T_k*@Oth(NrdsB6FWXEB8dj z>C-TuW=R25$Rom{QUd!;V-)VGUGr&p^zcsyU(7m_qm75|bkSbpPf-R@=6Wsx@q(1= zv#w^PsK7h{Q9BL5M?;cc-Q}=rl${9Pf3vhP$Np3Y17e{4nWQ$M61+7UTDW8oeD8#8 zL}OPUzcfp2p>3rp?N1z{+zFk!e}?3ZZ2+v-X5poxbB7rQVDOKkorVuUi=0`+LkRaX zF%8Qo?zqVjnH}~Dj&vw~&HRz=a`NznT63e+oH0)!g*+uC8NTHoh<3c_k>Hrz*rLN+ zSpKgdaeDb%bL~<|a)Cv&KHTSlRej|yGx(^Nvf6q_JK%%v{8y}bMmeZG6c1Y$E_ zA1sBXR`p}^Ay5@is2n{|p}P>P*x}$&A{@nGX_lN4-e?bzfuu%qAM%kUU+zS=E?044 zUO&@EJZQc1BFSQHO;-4g%S)ypVc!Q`d%(t;I)j(H?KcxI*xrA>^6(|q@Gm9VPUE&Y4%4F7q2EC`O3=ZR)CB|b^a#{f= zAx^0L>+{aHoWRggkjUX)fugAufU#bC* zFV4up)GBFoB{IHC#Au+T)Oa)ixZ6C+F6G9Le3{b(>}#d(b1k1ohtu+o!9^nX!3 zcF>r;2)MyfL_qR&Wz-x?WN^}Tb2IA)X}yLb`n|r$Rz@ph#H`X2$3gCTOS8cEkCbn}b4(LXMLqDYG{t_b zxAalb_|>NkHj+^~|gp<^iBvuS%3bz(h1#ZJe>;>W~ay!W3nzS^DoVCpJb zgNMsSbglIl@p^9-u=E#$uI6;?&iCWf`~6FY;H(z4{iE}N#u;FQJ+L4ad|d7l3jxJr zE8Vncx*o-7W-`qKtXs#@d4kQrj%}o>yu_3|ky4<*m1#}KzTHVZvyCJVL6Y-&|I^gOh-_JyGJ8q$^EWDVj zaed-`Wp2rDdQ6K5nbg}!HK4%N1+2qZ@sHojLWS1thp@A@KhR|GhV~o>BIOY%{~vPJ z(u}Tu{sXsx+q?Ji)9-ZqJYDO}7Iw|s42*zkRw`sUPu64rG*m>l0&n^#1)M44BRM+l(G4W z4NtHtko2R5&n*B#e=4@DicqYS5CEX=I;vQ#R*bCOX;;`Lm+y|5|bd~ zAI?Tb5Xq6KisA)X^}Xi<$JGt07*P;mt6j5UJjC#Yg!t&68^MBnkoItIt1T z@=p%%bFz#lKkFd5P<_T#?QsQmjxCzY@d>w;2no?pd}%`s83)e?Lg9ZB#DRVSJ7&e{ zI<2|*sinKWtWgNDTJ=_yR!G)Ir}ulQD_koV%p^1VynXlJ6`d!Bc9*wBqtgR`PZ*)oHl8IGNIFbf;876w5F*x0VFc%Q2md5#_XD88I} zwlmsp6Js?oE^MfAqiJvp0k`HvXQB_;L_^}U)@KMAXh@6%S)I-1pEwnBl_;>v_~G zC2X#+oR5UH5{mfX1!H!}rLxlYcw8c4!J8CrZ;2XU-drOB<{!Ru^O(MS(I*&3s9T!! z$`+xj7=;QNe#3wTCzdgTY!r&g@i{mn9;M(kuC({EXNhvo*hPn|M`zRx5Sn*%D+vwd zPB%kJC&`OogA>m^V2FdB$it?c&8!wtHJ=$^Chd;VwpqJ4%yGa=FCX)DFn+~dCVxeA zm%E7D#>lCr1_X}DPJhrTWQ(fo1$*TMjeF{Hc(Fk7Ad^N($_WpQ-wEkb@*tqoND@o2 zSFb5tOdPF8zkQ=`emKdXNd~p&W*_wBYe)?&w-S^!vbaKGYJil5j&#R0%_pY1hw5)r z5`d;E_rd?Wzc3OWY8IlH3vyIYyi!_O`hvcOJy2#X?9#s!L9u zDC$S4>Di&11iaqJgMZ}tM2?FeVg8|a`X}@l^=d&b{lmIW5peqd#d~RqUFpPE{uB19 zv8+?j{Y6?>>JK5`F*Hz^Bo4uhF)(2rU(xS48X=w@3petHzp9A79ZgYKviZ8fkcg!? z9+I}Xy&j-8DGajJZJ6G6)z6OkaB;tewbw5##1aqB%zM2x`yA#MhX(xSH6m9Yi`5f8 z3y*SlG;(u_s!b^j6^c^&J3}2Qz?PxK&S$*H#(at{T;wt9-ccNG`$XcCx>n&RE*rP_ zxw$HemWQHc&L7LWMrqE)<1jz2=eae=_$#<_|0eFc79!0;{TCo!W}wos_;8sM9x_QF zc`4dl66L1 z5Hj=38!iU0npu($d0%Qz9<5`e@lcvkVuXv}2JZ1?a)(ioU|yK6lQhbJYGg>ds%V$8 zf!3!|jq8)-tUoxHfs-wZ!KBXj{& z?BC4J=7A9im0pAmz13BdX&`xu%&2v6H813#Rs97Ad0GDJ=vXRo1*}f9U_i3hSK%6Z<2D>?r0NpeVzk z31 z)-NETG}RySgxK?)PJuBV9W;%rIU0tf97?JgTkPJQfM%02O@1%;S%*+ zIE6oXd!y?}4&Zq@n!-!z$%Vv&8KzkIgq3Ke@IBNtqHvOYKzPGXWMpk zoJcqyvEKd5Gu_o3x$fdf!dgrZRKY>9cKTWX;WBZk|_^dWE}Fk>Vn-oC7xwLA}V0H zf{}2aE$j!bESt?piwts1zRA`IZv(vLY(T#dua~LlHWL33J|QhagOnt}yzA2@d)Asp z$wZ8~N4VMtp4S}Q|6|7kk9a=FBT4eyy4`std7?)}PYEuiAZx|u^}9Bej#^3GY9st*INH2l=oy|EnNJ8h!G(R`pfB>YdIn*udZ zvZ>Qt`KyyEeFnUF<7kb_)ae-fJ}N=Gfb3W`2xzHAmO!}!*-r(go3`+oq`sOoxI9;j zARPR(Fy*tVJCI3I%er{!hky>>%uX33HA2iweI*xhV!8EPib6Ib0EJDC-( zUe%k9w|LS6o<_Hn2bW?F*9C?bfK_V^vv72x^D9dAtoOx+Vt*f=oi>NnRtD5BPd%?T!d8FvBZ z`bERLZr=V9P8$OcxN8`q2g1-*-df$Zxp(cOl{`xKUU zK;9)OC@LgM=llN;{^e0&kbmYmKS>7RRbPLi&bRk`!Qs@Q+$}cZFA{As4D(&neKV~0 z1>f72!#Q?43>@3H1FZED38~bcTyRV3ojLa7s#9)WN34q{{Cp0&`d>GYlp*5z77FdB zrAC*(uGZBW^gplpMI@5xvOHqM1FBZfvs}Byg42FhG#MB%WUPtgixKiy>`M@#xm}4N zCK@57-A8%HdAx4YcM`qEWdAT zDn8AI!3KHxOZpZ?rvYi5Crgh@TSGTjE3{Wm47P^jwkfjxbtkOenf;Szv?(TW&+13) z?%lG(%f$0#=~-o5LWBF!joNSU3g!;Lf8SQwGbNIY>7vNJPc`!%52B8nw?$FADv0vG zy+tYgK(}2O*ThPJYMNk#z;B&0#9ibY?NWQX$#g8uHWAjMkO#e2`{nnh zraZ1WLlBDVFDlI+oHBIk$EnOKm-cpmFiesQ8>LKJDoTN}fGIogVO#ZhFHb>=!Af*E z_=XBSkgnDi*xjlzFo66x!qR<~-aWlNVrmTcox2jW0MZX^{FrE#MViKN!5;FC zfzc4xE+7nQiw2&4;zVm29Q)iT9^6-~)?~{%h;aYL!i{n@hczPH#V-=pdHHwZ83WMu zBgc&G-6c-wehP@qW3aENkzlWMHO8ktKSF=r0)*WB3{s&QvoCqjV$KIxibGBtj((aD z6L z`{qR8)y6mJx1ZZI&Unh`bkGYSKEXDNPpDp_G^Azm9rhALP50m!G{ZKCQLp&%T4fmy z6HV{VLRT3&R13;rRU@%%h~;57!!Yfb{vS(XW__8E5WnMn-KVi zaq6@fNAX81gHrEe_znLJNJb(#hJP|0&zXA%RKbhc?`@iE(vgWY|OLEW|o#nu@wN0W_+IZf*)48A6=euTKI`_n$P z7f-GMD;okQ{DOu^&xbBXh=(m+A?%jmzMJAg(wgco>nQvoxL;eCUD7HZ+?V0fiDJ4i zkho^GRmQPFPqjh)<6&*7xh||YxAa4lHp*v(e?X)I_$^|XhTQbxk2YdhE6!WFR>uI$ zyMU%`VFo$CUQ$9Ka^@};dD4=ohGQ!eL%(A(FY-U#OG2U0oIG>0)yrH#M1ra=S?Y9D zjUXz^ktMlu@4$bl zPIcct>RZ8|4AYJ@q|KLNTGT>(&NZtz4G^pTg71^mpG6xHf^BOBM#IJLbK%+%+WV(P zRd@n)+~x<>KpbGQy;%BYaO?gZ5-Nhdg;x`q0VQc<>RYya;b}zoy`>%J+^-T^ROVU_0A0_ zqDKK_&%veJRv6KPUOg^a>Jh~x+HGsi1QgO#=y6659D!3-X{ooSky{_n-aulO+zHV2 z{2bCE8`aw(kU{nZDuX03)MnKVjBg=6WL>FwQIkXj7wlgc%pn??R5>#SvnHp30Nd;V z*t?skPsXrG0lBu3Ls|yuucPxb)`lm^?Guh_u1dlPQ_;^2jEgX8dgIyI*3)MvOfXnC zVz$1F^Tvxxho1em%o;yU*+}vsx?6LplCba5Y~|1@CxkMv1)R1wbS1(_X#z*^=j`mF z%Symjia|c7<8Trf3?(<|1D#H@Y^fn-NfU>B_mH1|`h$^Hl&uGsj7+NM@}tSYCc4Se z&IffFK$iXqksSW5>8WVwn!7npF+D(pIgdB~@*r1-wJ4@Uy5Ir%GmJx0HvT0M>I?GG zo#w=zuDyT1zMc(q9-QafLfk#QZFXnV?d&QDVmXk7>3GBv_GNG{0|By=q!F_DPx9E* z>oUv4s;ZzPKLtST6}PQA>SKPQucUtQtZddF!5Ul=R^0fMH>5;kCN^9=NIH_r+@KJh zKfh~hE%UwEfy%`ovy}?9NB<}eVsSI@&H+0_;> zPL(%=Q!qxy#!M~jW!F6!c(RE+&CDj>xQ#zZTAAb9m^v}jeOIa2a&^-StCVsGWfq+! zd`Obm{DGStZq5pw>4^Av}AP2b=KKNXeTJ*UQaE0_U7rFuUaWKkjFJs-j&5I6W%mGHge?yA{m(^x`>e!#@1f{rHa+*|y zM-ttrnBh_dgnXJs4xW&(OVITE&8LlZQ?hNSG~t)Y>VvyO=6+iYQ`ZYXmQsrxw1=;k zpZVkN`yhz?H2oS0Nsu(zdg@Eqy&B zoch9ROqD;4Wb@Ol;i!Yd+(@HjPihP-^xNAo0B;w)DqbOMeWL;8O}u29OCNj?N?Fa8 zB-09ir~BWCc4Dk}`;L8+XUd`_aOd=>(b2N#{d|&Cb4S{<^)*)@*`o%Ah zl~?nL(+>u0DrO7x`{>Qj=HU!9##a0Sj=Hq1bCq|Mn2&p3$tA2-*c5Ox^vX?A ztlilgMD>{jUxhsjWP+jn)v1KfIiQuQvQ@C>1Yj874GKTwDMM>NLbY@*2oEc&3c22X zAyw+jgEc?6Sa4k!yiM+f#FA-W9y{Y#09zR&)b*)`x^E zRfYCenk^u6quF)wMF;uk(-7Ez&|fhxJm?^md)?_U5w$n)3gY>Az)TRF9>*@tIFkNy z#Arik5AWwkV(qo@(;@zCIjJ)(v%;d9O7xudMnQfL|7cOoY1%Y0OAp#vKfaz#r#)Yzew*pj10;4i3*kqS|fI>BdbCyRck%H z-}Yf36IdkjJ{Dzu$=aJv*Piq+!eEnkh)L>n9^)PCrlLi*KjqFHSQI}0Cgl_ilaQSn2I{Nu-rz8swSDXW0;Zn99V-*g3;Cn;w%{i| z@sQrtxNqUDAMjr8x;W3q{wZxxs}(FXoZtHw~(?}z@+4LN=Pb;nsxovpUsQL$4c zut|4^v80(Jf#C*V${+WT&UbDru%=@p!%fCE+`dmJ0%5M{Po2lWY!oqhT<|d)n@V*AxcTZE4e1y{U?tB1u_S)+p?iMMsay z+~!ZK2EheGffhgXBxskz$TllKQZ`?t;=7X#l9OaynJZ)Qkhj{e_*7Xb9L>J#c}Oo= zdD}g^$C&AeUwdjHXFeGLyo(7R+5Cgsv85>4_W<^h=@*3KRWzxADLxUAD&9M>21wS) z%S8WG2duUcuoK2!1Q@kUZwiz3!Z9r^Qr=}QIIrQ#T5p!TCucBZSMZZ@99?h{UXF$6 zJ4Y|`@WnN-L>->}2C&kDiNR~`7>hu*nsO_EPjRY|BdLYkadJukM$?L!IMPT2#R3-+C zhcgRYsXW|IUXEP@!pb*F<%|pRfT_)gkmRiygCiXFHu(LF-g+o+b_F+YG)NhONTT%Q z7E`#VN&T(uT&MW6xfQ6gjTIXk_XeS<*68tp((3ZCN$&7I#65>sQ zAWbNh44=;vazKI=+#7VQ;?Fz;RNtoK4zm(O*qcZH7VwJ6-{4Ni_WRQOQlA!zr|B@s znMQ}M*rgZYNm%GJ9iMe1X0-f)bsfO%TTf(A-d+{+$^c#LzF+5aysTy|XWIb_C&t*h zhIw1{P=oJD(&LYpbJW%`VW9v^bwWi>%<0eHR|Ve%PVj5*QQe%fl=AJzoBs?`_<7W=!ENO;ip;V5hqVz^jQe+Sbsb5Luj;*Ijx8oJ83cq0{rx z1kHm9igP6LpS#L~$T(Z#D3yt&N2S|n>EG*4cLlY8EbBX!N^v`O?)K+G7C#~`P$K8m zVL`U!Zx&PU+pxtqoyQ9^_;BqN0f{H4b>>i*6T-~S|LpqLC-(Q*PhhAPFiiH?Ol0hm z#8G>lCy>{oSXNTUAH^T-3>Pp%kL`+OKI>W91um3f3nDk%4WnQ^x`%%*bkQ6!d~O@C z_U`|4WJ1L%X-{ASgVT|FBH{me@V)t}6=Od38T&-@@nz+n`I(U+)*ogaiX7yO)W$oA zj0D+qJdY7&5F3lH5AKOLalW&mfsa2cm!M=P&PCxoPxtl2D9rKD;#-*W#|;eb-oquH z)4;9teSn~6#2}bqKv-JOVUxTLL;%(*LZ&HqQl@LSu{Q~9%G@R(O@*s28Vau285Le} zu_mCzx|xx!@eX_H2e{v}HHqulK5t3&?W+iFE&t^*i7_X=B~FJF^GWn`KXq!d?|J-0 zjrf!t9ZlT8JH`9(NzkB}HVf)Uw;m~tBL2e|Qr0QKL$w6BH5SFJ(YRU2`e^3Xm3?Ut zY)<`l2#-UK!-MnEg9pR#Mawh^vFyS;Anrz;EIA~PYJ1+yWgA0l@o#G9Cm7A*LDz&d zPLI#Xxk@AzgZ*woWTW1c{6vll9I&9)+P}@nH19kS1VA{Pk@^ow6{Pzz{kP9udG?Ue zSg(s%g997z{=mT>%3~dEp2-@d@RmOpQ#o$A5G`nE{QOZS@UyA<{Ha5^YVm!(x7b=xmR%NivxZcqmEP-SWE zG1*8plL+Oruv_o2^iP_UxV`g;JSKySAc>hB+c10-s{`NEMEw}iJ_g9F)$ox}!j1_eh7H`f|rqxn?>ZLl8oF9i6T+0bZ!gS2D zbI86^eZK#u3QWMbMay7 zNg_FXPk2;ic<+wJAk8<^mARUC-{s-)XsBt=wXl)26p8-hDB!zndh5Wd#pM3s=Ri?@ zX{GH)e;<-mv^N1oPlbWam4shn+k@q@&7ljvbmVPb-F*Gzt~nPF=zT*`LS_SEte|pj zXhf6Mww(LpOSyIHq31-4ZVbVtk)xgCgb4(Xvyc?bH-g?OEJGQU0@$LE5rcpJ(y1lWF z<@}S6zaxwl7ga_|3Ujj+e{#w~*wU@kIR#_cK9NHnrxd;bXTF@UTlW0E*i@a?XwN$s zH)m5{r1#%&GrPA^aa&Rnzp8tP&&}h}*4=xo=a8-afp|}mC9C!<4OWk1&*e=8%s;>j zxlm)U7^e{^lm8LDn=rEgFLX%+v~P+Kc4pF1sNlI9fWeT7zrLB!4TdS>tE#HSSSOs- zP%7Q&4+V2Djr1Rtgm{}$hAH?XYXQJKX{l13 zut1G}GRxT|HEM|8XOvnaxWcYq1KqIXcVTdSQ3|qN5rg(EY%?_ecW3;@&BxtvXoKE| z3y1|_vA*5J*~)}9G~!EjJseLKvy{l@!8+|R2TYJ_Pwag%CNj;nm)^!noz3p-wXR)* zK>pX>+3iqc#sr9GdR)8iitOo*TemONQ5c~-j@^5q*A77RE*eqSK=fu>hpdo^#7E+M0)Hw|HVW-A=kRzbT@L%JLasy%JJ$sB(jKGH2B2$UmEwTV! z%D345!xsTF&-MYFf%?Xp)Kt9>JiVscZO@`ffM_suk%8~>uO66x)_|@UC^b!G!;+{f z8$?jhfhdy+J-=tLEtkwaaE6}8=M~~J;WwLa=3IK30*p6~%PXoGMx=h2 z%tSI_bWn zh5`iRSJT9)EV~J6Q5Lc|R9bd&c02}Z3ctBW1!T^nH#4TOn8=yHLSbp{1r30!wbrbq z5m`T$@naAmMpt3(x(XqdrAemQHjERe8)HMzu68S^q#S*L&*^J`^A47VRkdr}35k5R zdh6#;5uoR+QgEBR%NTZ;&Ecg?U|RhKPcz}YZORm{kYqB7lp;g^8f+{}#HK6_r~ZBT z4w+|it9N5*F5F}fF`y=aOlU5&Np`WI&cj5c4uX*;%lF-=Q_G#YyX$o3^D~`h*r<3Y z4WqUh(A71$1V$cjK#urayAi=xTNW*mp?Ll486o@wn5krUz@8i+u1V+u)Sc=`o6w)+ijIbh24c!A zGkZwBXU%@3!yN5L4~MZHbQFtO=U8s$nG*ldW6DGYZ(pDgwuHy;l^Fa-?TKw#Oh7%v~tSz zA|Xgp=4hiu5V9C61wV?O?V9vqxv?yNn{bu@d%-U5e{FhDB2!$NHi;$H5zG;2iWpZSMrD5d!_C_-$e%3Vw_6~4-BL~+I~3%i zM|hN#wn!1F?~~W$1$CA#{YKP&w7=QO1i6@S8b~mC8-XYuW?|$Wux4qYv2S!#DF_o% zyineEB>bQW$?s9UeH^q4*ab-`Q|#wksF#nGgBV*zZT&!K`!MtN7RcrSG!(L~`uMc9 z%n#FpuS@K0COKD#BHw4kdwe#uQF_us*yCbllBN{u4-{t0-`Pxa@~%xe>zKa45z^)A zK4pPUff4QIu^i4T<-CRv8QKI|r^ZaT6om-}jD``=07XE$zw9p~^XuZ!4v*a~D#e};`2X8qwRJPJnynEGF61D1%5z2=CFY>utZglm z4NP2Xyos8jT?u#1I5hjcNR2tEBrmsNWp+k>w3#Y0&<^GRW^-j2j$^TWqy_+B6U!|e ze3EJ3#SAwiR4J)R)(HZ9vzaH`?`k{*@Wm%w=^KZc-E7hz1UWGYg=wVkg9)raoGGoY zIj?x<1v-;aq(cZqCxoC8r;)i2&1)B{QlH3@6-L%>JleDZleA}W4Kv5xAH^}%P};V> zx|G_vr=|^r8&ZkfOF$kK1yf0M(9i+m%^RAfb~}rwC-fT{c?ZrxNcbG>k-xqa)9XVi z7r#u?VUCixK~+)2T^&@Oo%})WhOrG{ztvtepPiq|toB`|dp?GgHmG`d+MQFnwT`#i z`3b`tNY*nT`&tAcrmry0^meso@bu3B`l!OM9Y#Y@tBIJIIHT8|GeiSPA-wTo_%GvD zRj`Hmh%6omXEcrlmd)xn#_e`NYJJ?Sr8WsYbm1m__?&uP79~1gz?z8oOCBq_@J-+>w9OkdVo?2DU6UZJ ztb#K$Fp3Vam{G(yltTJ5odn4{2p#`tZxsQ(5m* ztV&7rqs$N5exQe3+!4qCWc|;)IKgt-KFPp!3r$zCJ^fn;hGRnO z7MB(*dx2bFIR*jpcTp#R~7OGF_DRC70IJ zQ=5sp5Cz6|Dg#6n>+7SD1BAmm*FKE6w?wnJY$bZGOVSd{l;au|>wKu@!CTN~YrVe* z4++c8aO{b7lYQ+(1}FZ^9bY{fp6=3^TXcj9)UZJ9RwW^tLfW~E6ou{VcJ?-j(cTQy zB3jO*=y2t^#5;KduAW;&(Z7Dw3mOb8Kk_kEgyAu}z^Q9LObTF4+?_=46)btJ`n}9b zNPjk>Rn8S3TLq^)WeB5lh*Kno`Yz|k;jCSrDG9nV_^uLrkr-IDhG;hP+>SXWtH zo1{QbWyq5#g$qZNH&XQWKDG>LUJxmLmDI3VWn^PRNPUiqcu71bsPw5+&NR4eK<=B` zZ}<-;93Fv6YR@R*P~mciNE@TJqaRzrsl^cSZyrag){2ok6UKO{|D9ab#ftJ}IbR(d z9l9^IGI!wgY54~#7p1k$?)>$*@(^DN60l=0OkCe=I>-~k`S_8fM@`kc@zdqZ;n{NI zr>lItkqz6T(cj2)-2CMjMmGSc?*(3xrxj^wArW010`?=A$kZc5@$ZCQ4TzQ#&23t| zBV~)1JQ4i;tkFPdw!7$L!LV6`wQ?RX^!M!OIHso5n!=few?<)!tMyPvl@4@yy`9F= z`DBRRAptHUh1o)TSuS@MMN`GYwpIJNoKZ*RQ@agdD1@H@H1QgFf#7yAM_LFB`!!=C zJ}6d5nEvMuq zmx;|oYltHMN!W-MWh*m9^8$IBM_@?7cMKFvHC}jpQ>cM;yR=_P;qTW&fEXrF9gIRR zp_{9!)RQKP3@%W_SE`G9y1nnOy_?pW3=|j-tR+IKXCU+Y(F9v5vG*iMu%r=@f)tTn zy)%;W<1BI;E{|0mdYnU|Dlmp3lm1kdzSOj*d`WJ4RN%NF=(yl>N!IpCqF_B9|SlK`N>uSMOZsqCRoUG7Bsw~saNO9}vAGYtu5H3y6m;c%|*q?`! z9ta7cZKEhylZ@AZm-`j4K;<$6l-2rX^xzw{*U54A+15eLt@;43w;YV!BjWqx9yg@#AIGPv-aoVXfU3&KF z3NDA4cUp(hDJ@Mghsrb8hsHkK4*HwmF=`<;^PM#gHNj2fiQZDrpiFT{At^YehzoL- zH{To9ktGUID#?39TUghJs(E*RDCGpUefEHQ{$9Vxmlns08OupXi5z7{CJ#NSgs6B1 zAe--GsV(L-m;i?xH9SkS#NwatvabwzCNoED4_Hbj0t+DpNVwvZp+e&Mri(a7wU1wy zhy2s(!zYLb7ByN3O1IJ$L4%g*FQ#*v$x|D}fm`5PSckV#2)?MVTau?4O{o3)q;}K> zQdojnq&W^euwJ%mn@Qe3ymC}|oAJ_sI&Pd>Yp9=rLTw0jH{_$}KD$shX2D+vGO_#= z>vi@t*m?%Z%&7e@>E?7KYU)^LjSrRma-H1=j6eb5gv%i^;-&pd5xFdMPU+%bi#2r) z^p)&)1svA%b3IX174T-88@*@ERh`FUjjwoa=wtDfz|*TV**S4-x8%NIvIK-_KId?0 zE*%leUtT-1pNEiC*WYq%P!YlLykUjVmpTVi$0^`6K_0{9fQKGjBR#=}Q{JV$MRzPkvxbd#)LrI%anZ ztT;B21WWE9P0JHTYBdtSV~Z$(;BfY?ArcmA%SusJdVFJ0y!BP5g z)4yAc01h+Ccmf>VX4tV)s^zA3Z)VS;6JU9_&*e54QlqUJIvs_i`g1WQ-OhMur@&8a z?#O*+5h}^gyxm%9FC3|kK^k#6_fe9)5!;{GF4}@TOFkI`KIioFM4GQLG%yd|TZbFYfK3*xWCN&uii4|z9KItRLod@!Dfy-nXytbeOPe3iNVHrq z=mcS4uJb;|*px-q>MI9}{e(?Jg$m`~srNsadsBtIRqq&I%ZVgUdBRFO!f#;YqZb@goVjRd@7e5SUc!N#duNR5o1Wk+v zsD%L*s4|6`vXbHCSlc^_4abICrsz9BpqNf?4qtF1?P-LT5(p;laR|LI+%yGSoP0>> zTsnsgsY8H!NPT&64&67pi9it;1hkO>_(i3AbeLEWJ{*$e8g4q_#F(C+Ea>JoM$|(P zI>UUp9dQNhimGE0LvO02L?;ar|3jO1cdjpqz0-o9+>FT#{_wo9#qs8UU&?Ztl0<^0 zW6YZ2+X)Q1>c_%!Tx+d`H7_s>Iwvk){*L9g-5nkv!-^;i9ffJBrMJtU$^D+o%PVlQ;*U>w|tZm@WlItwLTa3$1;Wt z+80bel&@QPjO)@-eD<|J;!a7Kh-h_n81IV~i375|w59`nSL#^O?8JgFbX6;OV>-$iHC4^P0@OZEJJn3VH=rp#-Z!ceSHKpL)Eh*bVfsa2@R1Vk$Y6CX39^?POlOF%g00s(my-1p8pM-;mH1_ zX|+F;%*b^uG}P3P0IdL^?8-|E34-eo)Ej?jIm&mPm1Xx0yXTonmYf)Z*EvyCL9*y# zf7l3N*S>VO@8!_&BIu+Mpg#Bnhg#8kWV{c8#!xj|F}v(*=eIrVJ%-1>7w|e={{bn2 zYnM4h1t2>Oy$d(We+CadUVmiXJ@)C8Oe(YQ+aii5_?G_gzpp)c12wUru7D}c245+F zBeKf=!;V)zaAi|)J~$ktq2Jc!qk(?Gn>v^TFMP!6uwB=|;o~Z&cW~g>6@ze8MU0%hpVY$VQUep z$~nVWpZ|L}cQM|a!%F#gK8M0rWnV!ss5S;bP-koz?{&(S9GgISjIiE=Lh}~GC=o=K zpnm_IqiVIY5Ved=j-R4Ev{|1^OrHHQ&Zq%AFu^9iAP&h#?&yMX7#IP8xqaJwXxa8p z;h{|qQhIXLHi)_im_lQ=L`e;%e52(W`J<`#0r|1xHlA+h*(uK%qM8yVY6W%T ze>7a#W!~9C)}-yjpJ|rUX_mfgjL+iUn6<{`somwlDrlAbsmgLZ4NgSrD|ggxpH-a58&r!zJx<`cOx0x<-zQ<&(wHH*Aau3=%O%IilKzZp&jrzQZ`s zCUG`>K`i=?Z;QqGa9cKoaW|?j8fPoXIkm>q&eOsJ5~JB0Z{_RA^Pj|S35)6+NkcN^ z>MfKvlo#v9Wh6srSRiJ8CSA~3ajJ)IC@iNSxS2d;S)mb-^d$dA^I9~?=Z05BOS z6XPPUjEeuXI`VuO`p<{fT_8j{5LlvT?G3}0w^!GiccE-LoD0PXd^IlqJfnW4v^^D* zqAo7AzK)fam63VKM&+itjS<$!m16X5nT~6K>{WyWncX!ITo%fa@+2uD4n(^nrOX6P z?{lJaMlw0<5k55EIl;9dJ?($^a-I$d?BwfBl4TP2`qp0ZSD_lkalGqo*X*HH5VRGMUPN?~HnL79Aoawjaw&@Dc=k>+2yE?Fu$k~+K~9>s%u=`!{ycK` z$RRp{(Jxi-m@+R1f8TCO$Nu?d1&l$^v|AbAN##)32$H%mIeaUSqN@Bsap2RM_T-t@ znp6FsKY^4#MW*+{TQ^8Njm4Hu#$By%GP6|UK(eXIuR5vcp{xT58y%py5fW#Y>r9S? zD&t8$sO+tKkghI?GE9`Txh}RUwACA~s~+M$-hWp~^~wpWwG-9V_2s@Ou)o0K10YZa zijqTUM`x@$d61wG7sz=olwQ=W%qKQVepL)@&r4RkqH+wl*Cs<>?g<$$Db(rPaBCQA z@na@T_f{&j`!)BlJ;Fc$;cE812DYqoMFdSQ9Guj*JW1BXW5v>xDjEM9{>PsJne z1YPuvfd{lfJ!ig=Wm)Q`?he>z^^e zFt`{0%xVzxhusidRiCTt10!W{ekheTV3dqCgD%4ngZOv>`|h;ajZjjCx-AAbqI~76 zM*yS6s$#RJ9*dyTVVZ>$i>_mj{>JG^A3e@$LyDS-$O|DsR_fab41V01xf8zpf(Pp2)HkUL}{d z0|Rp4g}VPBSMVi%(Z#mwC{b>WwE`32RM#yefGo=4`m0~cpOKqIAsVdudXv(mW*;1> z44yF)>?8BXOc{_Cp^7>bC9MdawF!-_K)wowQ0JQs);CN;zs3l#Q*40iRuf%8a<$mr zc$K4_zqpIDk6t#8Wg;TW_*x>)aGQXEnu3Y}0DP6w9=MaAGK7QbJYS+dG<-H?SZ7~l z_&68EJ{{1YVWzGjBT-UDbeNbWsqB%ZObF{g%N@y`yQx6Jw0KoR#T4AH3}HJe)?RCb zI2$)FQ3qjx3)7twF}@p_Cva0v zE=G}ld1zV~PHPI{KSBq$*+PEC@`4+I_e^LP$R%C5TLfMJQ@#CYj-9?q_T?Z$1RFC2 z58IeC!{D>&{r0ZU$Yz@$^pZ=Ra~jOA(dpi}ilSeqt_jfb#_F|SHx#9Mk8ohMAY?(@ zRAQV-uAY8=gL))6DSoFU1qqD6u5|KMZ;cs}EBM9E0u(NmJW1y;FZvhC7oW>{xasJF z*Sud8Z(0C@n{hhZv$)K>W>n8nW*WVW6b z2qb9efp=3L_zb}j?f|Hc*D!V6%w5=9^9(vCCT!Bq%8Np0Q?(t>F5-&@o*I|f zJpsiDd5X&s^cM!z9fp{!S691QlO7Ep-i3POO%=2d{ob|foHml<*|@$W6Ly>L)l?>a z@pQUDV@>4U!Fb5ypuqhY*@uC3*QOIX$^sQ&hi33tX7ijrF~@!d_;DQXGsIehY8ysk zGKEYzhJ2V)@W`RWgX!OlIsY-aw*z8(xJXS5qG?If055;X0RVr>BvbiAw*wZ$ZzUN)7$}Wu6k>O_WHU!h2?Dg*@4k8oc7) zm~I7WJSVuO`pp>R{Ar)YVNfI3YhWi{_iCV()IuLRhiwJb(~fFevT8vnRj(sO8Y{>D zz{Uff$sv1!7^@p;G>}M!4hER>$CD5F2T}{s_=3xpN}uET&^md|aozP)I{eZ#^n`zS zGmcxu150y8IHq;^LhtaoQBd~;bN|AJ9CX~FtQdg)OD(4$@m4HzJ_S8Hg8dfCH+AIC zyb)`eS{rnnY~T9BPmsqlbM9(maiC~Q&v3S1iz%*)1GKz)z~^#Y;os!VI8D*x+jkRp=dx1$mBit6AGCS0d@069i|~Q z^Lx8xvk;CU{|a^L*AE030)Zu|v!sgsqXp))J)2+WDY*OPQ%$9H+-u_(C)EPnr3At* zr0FkEuZDu-FedxxXNa4K$-Zt}guji+N6Ye&^i&cm40*aA38RZ}55jo;_SY9)-mEaJ zX{Fb+QfSbY`Os9Z2}ZR`9pz!rt_>G`qd!6WxHN=@sABPC`<}h5qM7pHNMv3bT(@bU zwL%(|nfm7@J1>cDm2F2-huUD6aP*_yf+TrS(K_&geF5VTLDu9H)cP!qk`yE>&@NbC z6)W)@g3B8e8c5ppflqM9;}U^`|DWYuoaB_qzFRUf1rfxEO-0O6(4ZSrjvt)3ZBIlx zR?5~t{xrFY+E^7LTz{ePbd+rYMT829eam4@(-#>)M;s72osRqNEY&F{|H>;YV!<*# z&-n!!2kAUsxzvn9locPQy!+qYssyIywjMx9;b`now#!1H z(--o9hcN0yS>5FIML1#SjohQxBzAqe>T4eHO)&kMa2{3!7Xo%eHkD*c`N%p;AirqJ zfL463Q%-bs#^6c^CI$8?+3fhv*p*sz(QJD9x#r}6#sBS06JPE}j1K zk?1u&2CP2`Fw`fb6IBwMrR|ULHdXU9A>4)nAzUo}QL2n(s~qmCXg`v2HTesmBUrw=ST`OrpA@=&8*&u)?6E2_qcNE9ec^%C#MSK9FWa-B&W~@I0{u_% zf_OfrpW@ug#s@Xr_Q}w`g1B!j@7|~mGMHfL1c!%X|)-a$()B zu>8MW*Y}>vqI_ZxWN)$TkM%|w^*JlKbmBy>h++i%O@HMn!|E#YkqR-os@6*%C!CqOQR6Ca5^f&yG_|6eHX14rkA2h za+r=)w*6a(@GzE|iN}hf_xTdREr-a8uF_e=!*j|)2Kv^>-{*m8DHTe&wI5JK&1X0L z-45{_#}3Ecj+(RX<;N&c*?~QdtO8x*uyAtmhyddsh~cXr1njDRp4qr@&tk$N^5Cc5 zLr_9d=5nk;oiH%X7Lwha{*>(ghYx+6Q`XnVDnopw#RCx9e=_haX>#6}1}I<1DD1I= z!hS~kF(WhPXDBlIOVbs|oC<=PaCoIJUWa69{RKZ%)j{&0uxIYnqO!bvVLQ)lVe( zfZPXk$7&TcOKgD#LM4yt<)K)l2Syb78&vuG*Oq#Iyj@2MSuq=hYGn9r?iIR)o&&%? zwAV4BpV0&knknduyo5UN4e~ZAohx$G2!?_~1tcmUNs$D)wsyDYa5gbG9I_DZ{nlA9 z+1+uDNO;qFq@5-E{Gk0E%$ZbaX=D)It3v*{>KFVK%oK77=hNh4=+-O|GGttKrzzNU z2U`IEW{9qi2rOC`DL2%(FoLeUuM>GgUy)IPc0>{=(%2e9hVXQ`n8H;VMmGc=arp4H zUyvA`mi{`wdU#GrYHz}4AvxL+#V9Qedi*UWYPQ_RC-Lz8WBrx8#Q8?=6FG@x0gw$~ zsu4V=(sWX*wV%CtQ!i)$w|}Hlp5&*gNGZZY>FIq_x|&n;eZ#?o--gkU{V7m%GqHkbAxM41<91hY!Z4 z$Znd^VMwY0FCd}Xpwrd+TJm%j5wO`H`x?*I0Byw^XFvc@X%n03g(TdtI+3hl@16$j zD<2@9d2JVh429mpaWXewL6ZBQesifG%Wsp6wsNid5h`B*(L0Y*>o zuzsx#JHBm`Rzy&8q)zA4Khv0puZ##cL+go(%^a;z{fFq||DNB(DQi{=B)+|V4$7GQ zPwZ}CNas3uhV_}Md&iFru%(<#^Ry}2$_lI_=MR0>+BP0+!#Sl>jvYbjOCK#X-Q?ip z$?G*<{bU7*kXMi&@Rr?x)LuR6xwX(O{XW87Y&IwQoo)r=FYV%&k#3Ucbwyn&P^$@? zaS=ZuAL#6ROeR;v^;JQV8+7#arAcUetayD}#Gj&Y9r;!B^{_-$usPW<`R>kZ@Dbq! zjRRfMgxgUa%(~@{g9HoUj-H0jqn#hxZo^j~LBsUI*<=&BfUf_j5TL`lXmmlHH8(c^ z(%;PL?-jUO4;tVMonixTLt%oE|*Nu{wkRLIzfRe&eU zCA=*&fL8SVOB$BE(cETbZ*VB|pLcqgS@4+YzKiE=Xw34A&i1nXJe5j3t@t+D1tQrd z)X_nrfyY1bz_X}gQ`ZhQi9Uo8smNnk(9HCwsPDJQ(3?vtk&07I?w9=-^}P5MUf$s0 zXTC1yQ*xe96 z4NyGC%9&lWY&%fZgJ6pcb5n;I3g2g!70g@VZ~r^G~@WGo{bqo7{Rp~{PWx8 z4GG#T@(ZyyOhA-~VfDxk;(e>^+U$;4Om#yiG>Gl6q-^Xssr228@OH~QNs)=(g3)Ri zq{u$SQr0t$ZIs)1=(9X#H($V0gb0gt2ehi%*<5m7ZCHO9^`TkHL&WF{P)8&rW#Y0m z?|6N7*KKdo#R+>qO{bctb#YmwUeAsFCB1A0PYdlT^3S!f&}!X?C9u`p&=IWBXSr;9chAOa ztc_V2ZA`trVgQBA^$xXh+EY*Q20(o*0S66$N33G`7e;mM0>LX^HdE8dxJt|KBDBdd zuQY42Tp7;9@&zewk~(abR+!7)E4>wPQiVFJ7F{vIhD4rVfu8~ZHQFp|x!5*+8~Tt& z1--m^9q0AyklapAmI(Q_LGnz^<1a&ogM2(=ytKA$v#uFXcaKzg@rCR7)d#8^qbe z5jBD4bQ4&&vcVR=V;Gido*oB<=a6*qhFy*MORMB>>4nn^PS-@!#mb-K{fbApk-fZa zl#q;r8va-#wDs7@3S!0Pss#&L&Y{>l8IE%Ot4(nQagVI3EEq`LkB!eo2L$@=N{nqj zx$_Fc#&Z!M^cM3$5}9|TSLEuB6`%#&ZSLDwn9*?-#26$}CbL)#EIfYv{Xg1#?j}@H zIy$Js0^ex}8#KtjJ90w5BcPEcMHDIk6+JNe?S)J-_g>ob)Q41MmnDV_wcNm4FEwnb zGDxr|X^%|#@>ROwj?nr=OEj5pnQC1{s;G_2GvW8ajdkoH2VH0T<#`~fr)yqvs&MNc zGvPPb^?misfKVYW_kSJW%H(~g5(MTxB-tg9MBl7@{{}Hy?<39kb-t+g-VGvnmAq9P z&aez4_lyU&zY7ITQ(HSW77i2f9`1sknY4PU;3q*WHhC?q9nP?9yOEF#l4m5}BO+ss zWF9DwF5~Z>eGfD^gZi5DLuq1#GNvLIl_C)Qa6#2Q)`4v<%&w26U!Oagedi^IY_{O* zgk$PlBN0mCMOYZYs0Oi<(Cdb>Hvv%LtVGV?iN$>BfkWBT_~5vt#bObg=~?;74*mCH z(vZm$J}Ajl$oqwG+^*;S1TD+H+(%`1eFb0ocAAm(y^VO~;SH4r70|{j_vzr?XtuWUpK7=&Rl(uYzqJTx8X0(}xy<5=vlhqS#m*>f(C{@!aejJtHBRO}q zYd?@TDY??tE5vGjR@<(YAG>H|_-&4|Lr5B1{tiI0d1D2;8(NhhG=6usyYHDiCo;Gt99McP~`wo!MSf*GwSB!I%8b2|q~0 zw$u2uV_FrjCD-gA9>7o1l?)#e=bDss)8Fj3ckFW8ZGEn!Qv*Al2maE?YAy=rW-tX@ zZV*FSYn+Umz)vE4?CtGr!IgvX4;kJM-jt8*623DuErqxm z6Ah6PaD{&0tU{<^KpELSd6b2u^w-ut=rB$H?)hnQ?4AXHoeWvJtdP;Uc^+7#>|Y*g zP#q^!zK^HRIV6rOE2B;e-E(unaTdl@phOgcqBrqVi%uH~c7dKd`S~P5z@|JNXU{ZC zco>wqsm;>tyMahJtFn0+gE%cb;PSWrRPXwTfcvL>8PCO*+)YPvLIHMhcQ6W7(xM&r z3{9ArMpMSBDmu6~>1>;g^IF3l`RSP`zsQ5Fm?ai$Q?t(3@yHhRnB!4X|ZR zA3Ywy96FO#s0!!cIO^!G#C@1P@i(n|l)Pt#(-1E1HY&~sj&rR1cg4+cG|3G|f+rTX z;ocHGc`j#OqBh!w@!+m(s@C^<;DFf=O-IyRin@Ko&G&yK6|0?XuPA?0I!O?mczowH zqazTp$$EFf$r1^yHUdOZdL1Rb<)`e#KJhA?iwVlB@YBlLIX3xVIieb?TIHWB#$mv&1!(~pQ z#ayfHD5r@QQ$oCo*RJnl2?6M!Q3|u!7uO2F zl|ZCcO27Z5*Gyux+KO~!3FWXSG+ZW8d#Sz2g3??-0c1s7EF#zVDK_m2)#w&1z_H0& zW7&1>qP{OxByPu$XCh|M@nxg(GdwQL{B1r)Ln>i6NZUF^!;C9u)n$cX%;$&vKHkgL zekZR^BWY;!@)-+&3tSgNubSefZHtL~9v@!EPPr9F`)tA(F-2e9kkw417ayUWfIbmFl<@1P2Xv6e&!^<1RouV%kLSk{_8e)JFp zBt(_fvJpc=C7D;>$nKeRHt_}Bb3S1#u{=x4dF66AL&1ufDg!HFMu3v31K}Abys2(o+#@6iI{#C z2JHzsnc(8U$<@Y+P*&KW{6>S08&5}If{{@tN}76yEKjZe=E`yay>USqss_xB-#Do1 zzGF;F2U_jO&cQTU*4DiPysDnG?4}ijir&JJ-m2g>5ozD=u+Nn=t0V43uMs^)cMFK$ zGNJSaU4dM|BZ)SoVGZ@O&coWVkLVpKQm=U-p&fL21?nL8{?d#g*RVy19gfMF2yEBd zEp-HS6_}TbrlC*Q3)Y$YSoW!-M{wj3gTT1!H_q_}uC_h$rI=~ zzm-F)iqs00arMR{PH@lrjDB0Dswg6T8^?n@UL?J;L7@Ls7}7L|xoPbFJC>s-(uvEb zecq~il$o)qXzttTo*ihzj%fq%2nvTJ?|76z>gguz&jJhwuR$~ z)DCVo^S*1Cl$*HS-R*FkRaK*ezicQ}uK*RUn&5 zm0f`nN{iC@fEqe>$l_SX-c2jx+tF!3!!QjY60b9*x_DEmbh=dXIHYbo6Fpn+8z34} zF{JF*Y4##sDHRp9e>G%JH_Eg9qw4<#go>ywKi^2?Y7n96$TN@%n~#N9t#RT-Mk5sM z3LGRd2t7tElzKjW3h}64=$Z9kSLhdmSjX@!Bx zI!JO4V4C}-iHn9SZ@|MRyi5z6tz#1h6Cyw;tVkYm_b;<#AX})YZQFJPpb&2HorVf3NJW#&sa<2=_(%^p+BBd5%je3N|$#w zj4sp+C+{OGM3;Y;YK!`^c)d;tq3}QUs~>2+!@cHUuXDGGE4NC>>@47VvW*;v+k4m+0AN^e z#Mcu`q(V7;r^6?gk+_Ip{o1{|#?Lto(rZQmbQ*FH#F)K$bc~^n_Pu52kxY1+fe6aw zm3$$2Sjj23NY8!DyWU@X90^HL;P3==C~xdU%_hQHJNOPI>d&S!u876!1|50?#cF}~ zG}N?E<;T){a$NEpt6{Je`5dvWOD-Teo%ZalO&k6lO!1~18|EL?YrV{Qw2(0DMSub1 zB!FTL?BqP%na;6>qVGPqz#-)%_YVX7>8J7;6qXN&K6Y-_?c6| zZO+L+6IUTsX4n@|jT21)2Tr_2+pLibwuCslG%p^K=ql1rO7!BPD~XOMIk2*T!Lf7! zrJaY|lNM&HaBG2d1?S1Dn|?vufSm8$fklEwDN(5ni45g7M?cdkRtrH}Z?K-nKqF~1 zBu>tRE~Ke(S_Cx#qWQLOd(suOzwd9&Go2&q>m~RKY^sRcuAG){&e@uN+*4Yy;8Feg zmpG1iU5@y%9QE#y)ZwUm>>51FSj^y&Stc>9!=H?9FrTcTKu~S~?O!f$NBcuioysG6 z>b~d(oS|d8+71C&hSHiwXK6nvlH1shij6tglqe!`$GZmP$%ks9qb~8rafVZv-q+Un zE#$|%^07waJTA{ror(M%VA_va8~ff9$-fABALgHs#DOV$yqixjE*Utp1i?6m?ZaVR zKX^x;zU^QJvn{^q1`LjU>%c!@KH6>xE;5%s`q)R}Hq+>lz5YpBW#7ci6ORxAvR?cR z;Hm1iR>ltPSIPyD)DMdQxV znoC=lHfxjjw_7%afvFaxu}IM2C2Z%ufjm>)ffFEhN_t@pqtZ;2xH%>%LC8A8mwLW$ z96aY_hLass9+WxqG)m~1bV1bu1i3u8{S`8(IzzukU$?PcA!Dx<9=4kJC!y3?zN*?5 z=m!iQR9%v`7^YbUx~e8%CKoezGF4J_^_BdfQ?JRetZYzrlrjOnA;^vOKP5&HZ=f-i zFtAPK!UgrcyICUL=q9Zvj}=oMemVPpTg(mR!GBx!1Fre-m7Kj!c&Tv*WF)fQ*0~)*Cp$yH_9A2tJY*8qDh?)p^IffM>fSpfHFXpZ{UH+M@?@nC9nlWnIe1-eyU zm^P(8lIx#^(hmw_aL+R85{&|gX z)FYWuz|iuX+Kg0$=lUYNFHnM^a`oS-y})v_SYfzvn_marf-6}%^WZK6Bb7BLFm^Ip zP{bjp;eVe%miK}_ZhK0z&^5q&LF1>uCxdG^3q;Xk1FS73w~s^l&EQNCK`gPLm96p4 zr7L1X)n}+To50D2ldba2~ZaZxY|@sl&AE zoVk#VV85@4Q>R#%$i`1R5q7Gz;+L?F-hc!Xxns;C5Pob1%xnd=+B*RG?XpC%%QMmy z_j++;7sQrI6VR0P_u^K`9;EMc7%T)6f_L_`=j2K^)rgn>$mLr-f`DUQkt^bl?y^r=$r8u zZZZfZZiL*xy9;^%I6u}F9WJUa?7kEM1(!+&8IkguJ{MQ&|Z=ObUj>pux+z# z<6kPAUcN?9>2`Y6xz+L@x{l{EtW;8?xp9xm5${;0nEyUEUNC32K7s(D<^R$$7v&Lq zM^_H~I3+0S*5AeMIXld-LtIzPHp_S?@oKIm#0D*euyC6jB3z6w`E8tSg3g{#jcmhN zleBxfn)RJ9WZKo(j$8x>vyoQbreO$Jn=fiFwbrLt$(WQu?hdL<9(Svn-Oausym(Y$5mtpC|i#Ys6K2zl(Yb;q{(w)H9rK9-7UU0} z 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%0AAY z8SZJ{_fFY)ZXQYXs!iIPMLX5HZxlRyo05F=yxzURz3NGU|HV90Io(^h^1LKkSi6Zm z^{|=9nK5>bV1+)r$OGuC#ZDL9B^Lx=6VEo>QaR7ci9GJ}<2e6J<0>j=4)vewn3vIl zOZ&OU)f=X1!oX|gW)|5eIGxf(S>hHs^(th*wsZ{-W ziCkTMFE}+HsXoQxHOOaIy!8X@Uv?4WW1#-Y=Q^m2;uUXyK;w2P_+0{?7ZdZ9?)^v` zbl4)^vig7Mn6Mj<4u|5a3~SdNZ{^sh$k8TD7l%_f|Iq>sg@5slv(-JGDc5TyYm_xt zq;Il3Bd>VN68t#%?gyu7?nP_6%i4Qp_-$HO@9^4%jBiR#G;5S68Cuyma0a?Bpxy)c zxNlR3>a}xG)?QB&r%qGGwdv@ia-z+_-oE8?phFxD76p6CX^l+Wd*y?u9?c^~-ycx! zMerW~XV7~yc7pxq;&LU;I^rO21eyC#2Dw#%9pL!Q^+)f-7kXFA&yCgmc+C4lL&cg` zpND;+ex6Tx=kqG&EL^D{&c_YgD&hai`=;yweP2qu;>RZRR*#MMIJ>}}X++#7hg_5m z+@Jf64v@Tex=dprN+;1_Q6P)!$7oNH^6Dn`V^*$0T-hfA8`zbtd}qWQhjV=!ZVMgd z&V1;s!ani*!m9-XaYFWg_vY%q`f2xnAAwKrZ#lLQxxrjV5&h+?v-V=n7?J&g&uGp; zJCYpPKHo1svI>8o-Y;w(`Obou7TKH}{hc<&C;NB5$S(L(`!x}lGrYyQd62b%5De%p

=8R;*T#*RosEgEs}ebHr|;#i$_=mG*@WNESqYsR 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%0D{cT$;L&Y(MhaSIxB_5$-&M=rV(sZ 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⪚Q6Ts3;edrMK4uO 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 z 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%0ASk{_BzICLxbF96Vk)gU1!_*OxJbf{C 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

?8*8?A8KRG6g_^~){;1hcLz+jBY8vKT}17v&^ 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

_c8#6THrq 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 $%lo~26aF;JyApY{-PmzOQ(gtLR))Ne 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

-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

&U3&+iWx=k8`~eP>+%ZMm@?*2 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

mB0AI4mpQxej~`+d1VMhuIx_F>F_r_L%LIH_zkr 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%0D@8TcPyK5%d8KhUtehbf27uQJrZr0DE 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

p{!#d);VZu$`hO?t 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 Date: Thu, 14 Dec 2023 22:13:29 +0100 Subject: [PATCH 229/866] crypto/tls: align FIPS-only mode with BoringSSL policy This enables TLS 1.3, disables P-521, and disables non-ECDHE suites. Reapplies CL 549975. Updates #64717 Updates #62372 Change-Id: I6c608704638d59a063a657fbd4eb1126027112dd Reviewed-on: https://go-review.googlesource.com/c/go/+/603376 Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/crypto/internal/boring/aes.go | 29 +++++++--- src/crypto/internal/boring/notboring.go | 1 + src/crypto/tls/boring_test.go | 70 ++++++++++++++++-------- src/crypto/tls/cipher_suites.go | 8 ++- src/crypto/tls/defaults.go | 8 +-- src/crypto/tls/handshake_client.go | 9 ++- src/crypto/tls/handshake_client_tls13.go | 4 -- src/crypto/tls/handshake_server_test.go | 1 + src/crypto/tls/handshake_server_tls13.go | 7 +-- 9 files changed, 93 insertions(+), 44 deletions(-) diff --git a/src/crypto/internal/boring/aes.go b/src/crypto/internal/boring/aes.go index 8819f576f4f4c5..d18ed5cdc5c259 100644 --- a/src/crypto/internal/boring/aes.go +++ b/src/crypto/internal/boring/aes.go @@ -228,26 +228,41 @@ func (c *aesCipher) NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) { if tagSize != gcmTagSize { return cipher.NewGCMWithTagSize(&noGCM{c}, tagSize) } - return c.newGCM(false) + return c.newGCM(0) } +const ( + VersionTLS12 = 0x0303 + VersionTLS13 = 0x0304 +) + func NewGCMTLS(c cipher.Block) (cipher.AEAD, error) { - return c.(*aesCipher).newGCM(true) + return c.(*aesCipher).newGCM(VersionTLS12) +} + +func NewGCMTLS13(c cipher.Block) (cipher.AEAD, error) { + return c.(*aesCipher).newGCM(VersionTLS13) } -func (c *aesCipher) newGCM(tls bool) (cipher.AEAD, error) { +func (c *aesCipher) newGCM(tlsVersion uint16) (cipher.AEAD, error) { var aead *C.GO_EVP_AEAD switch len(c.key) * 8 { case 128: - if tls { + switch tlsVersion { + case VersionTLS12: aead = C._goboringcrypto_EVP_aead_aes_128_gcm_tls12() - } else { + case VersionTLS13: + aead = C._goboringcrypto_EVP_aead_aes_128_gcm_tls13() + default: aead = C._goboringcrypto_EVP_aead_aes_128_gcm() } case 256: - if tls { + switch tlsVersion { + case VersionTLS12: aead = C._goboringcrypto_EVP_aead_aes_256_gcm_tls12() - } else { + case VersionTLS13: + aead = C._goboringcrypto_EVP_aead_aes_256_gcm_tls13() + default: aead = C._goboringcrypto_EVP_aead_aes_256_gcm() } default: diff --git a/src/crypto/internal/boring/notboring.go b/src/crypto/internal/boring/notboring.go index 361dec9672ff55..02bc468a0de8e7 100644 --- a/src/crypto/internal/boring/notboring.go +++ b/src/crypto/internal/boring/notboring.go @@ -50,6 +50,7 @@ func NewHMAC(h func() hash.Hash, key []byte) hash.Hash { panic("boringcrypto: no func NewAESCipher(key []byte) (cipher.Block, error) { panic("boringcrypto: not available") } func NewGCMTLS(cipher.Block) (cipher.AEAD, error) { panic("boringcrypto: not available") } +func NewGCMTLS13(cipher.Block) (cipher.AEAD, error) { panic("boringcrypto: not available") } type PublicKeyECDSA struct{ _ int } type PrivateKeyECDSA struct{ _ int } diff --git a/src/crypto/tls/boring_test.go b/src/crypto/tls/boring_test.go index be10b71bd2269b..56050421985927 100644 --- a/src/crypto/tls/boring_test.go +++ b/src/crypto/tls/boring_test.go @@ -25,6 +25,31 @@ import ( "time" ) +func allCipherSuitesIncludingTLS13() []uint16 { + s := allCipherSuites() + for _, suite := range cipherSuitesTLS13 { + s = append(s, suite.id) + } + return s +} + +func isTLS13CipherSuite(id uint16) bool { + for _, suite := range cipherSuitesTLS13 { + if id == suite.id { + return true + } + } + return false +} + +func generateKeyShare(group CurveID) keyShare { + key, err := generateECDHEKey(rand.Reader, group) + if err != nil { + panic(err) + } + return keyShare{group: group, data: key.PublicKey().Bytes()} +} + func TestBoringServerProtocolVersion(t *testing.T) { test := func(t *testing.T, name string, v uint16, msg string) { t.Run(name, func(t *testing.T) { @@ -60,22 +85,22 @@ func TestBoringServerProtocolVersion(t *testing.T) { test(t, "VersionTLS10", VersionTLS10, "supported versions") test(t, "VersionTLS11", VersionTLS11, "supported versions") test(t, "VersionTLS12", VersionTLS12, "") - test(t, "VersionTLS13", VersionTLS13, "supported versions") + test(t, "VersionTLS13", VersionTLS13, "") }) } func isBoringVersion(v uint16) bool { - return v == VersionTLS12 + return v == VersionTLS12 || v == VersionTLS13 } func isBoringCipherSuite(id uint16) bool { switch id { - case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + case TLS_AES_128_GCM_SHA256, + TLS_AES_256_GCM_SHA384, + TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384: + TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: return true } return false @@ -83,7 +108,7 @@ func isBoringCipherSuite(id uint16) bool { func isBoringCurve(id CurveID) bool { switch id { - case CurveP256, CurveP384, CurveP521: + case CurveP256, CurveP384: return true } return false @@ -95,7 +120,7 @@ func isECDSA(id uint16) bool { return suite.flags&suiteECSign == suiteECSign } } - panic(fmt.Sprintf("unknown cipher suite %#x", id)) + return false // TLS 1.3 cipher suites are not tied to the signature algorithm. } func isBoringSignatureScheme(alg SignatureScheme) bool { @@ -107,7 +132,6 @@ func isBoringSignatureScheme(alg SignatureScheme) bool { PKCS1WithSHA384, ECDSAWithP384AndSHA384, PKCS1WithSHA512, - ECDSAWithP521AndSHA512, PSSWithSHA256, PSSWithSHA384, PSSWithSHA512: @@ -118,10 +142,9 @@ func isBoringSignatureScheme(alg SignatureScheme) bool { func TestBoringServerCipherSuites(t *testing.T) { serverConfig := testConfig.Clone() - serverConfig.CipherSuites = allCipherSuites() serverConfig.Certificates = make([]Certificate, 1) - for _, id := range allCipherSuites() { + for _, id := range allCipherSuitesIncludingTLS13() { if isECDSA(id) { serverConfig.Certificates[0].Certificate = [][]byte{testECDSACertificate} serverConfig.Certificates[0].PrivateKey = testECDSAPrivateKey @@ -130,14 +153,20 @@ func TestBoringServerCipherSuites(t *testing.T) { serverConfig.Certificates[0].PrivateKey = testRSAPrivateKey } serverConfig.BuildNameToCertificate() - t.Run(fmt.Sprintf("suite=%#x", id), func(t *testing.T) { + t.Run(fmt.Sprintf("suite=%s", CipherSuiteName(id)), func(t *testing.T) { clientHello := &clientHelloMsg{ - vers: VersionTLS12, - random: make([]byte, 32), - cipherSuites: []uint16{id}, - compressionMethods: []uint8{compressionNone}, - supportedCurves: defaultCurvePreferences(), - supportedPoints: []uint8{pointFormatUncompressed}, + vers: VersionTLS12, + random: make([]byte, 32), + cipherSuites: []uint16{id}, + compressionMethods: []uint8{compressionNone}, + supportedCurves: defaultCurvePreferences(), + keyShares: []keyShare{generateKeyShare(CurveP256)}, + supportedPoints: []uint8{pointFormatUncompressed}, + supportedVersions: []uint16{VersionTLS12}, + supportedSignatureAlgorithms: defaultSupportedSignatureAlgorithmsFIPS, + } + if isTLS13CipherSuite(id) { + clientHello.supportedVersions = []uint16{VersionTLS13} } testClientHello(t, serverConfig, clientHello) @@ -156,9 +185,6 @@ func TestBoringServerCipherSuites(t *testing.T) { func TestBoringServerCurves(t *testing.T) { serverConfig := testConfig.Clone() - serverConfig.Certificates = make([]Certificate, 1) - serverConfig.Certificates[0].Certificate = [][]byte{testECDSACertificate} - serverConfig.Certificates[0].PrivateKey = testECDSAPrivateKey serverConfig.BuildNameToCertificate() for _, curveid := range defaultCurvePreferences() { @@ -288,7 +314,7 @@ func TestBoringClientHello(t *testing.T) { } if !isBoringVersion(hello.vers) { - t.Errorf("client vers=%#x, want %#x (TLS 1.2)", hello.vers, VersionTLS12) + t.Errorf("client vers=%#x", hello.vers) } for _, v := range hello.supportedVersions { if !isBoringVersion(v) { diff --git a/src/crypto/tls/cipher_suites.go b/src/crypto/tls/cipher_suites.go index eebc66880d631f..917a1eff42d34f 100644 --- a/src/crypto/tls/cipher_suites.go +++ b/src/crypto/tls/cipher_suites.go @@ -552,7 +552,13 @@ func aeadAESGCMTLS13(key, nonceMask []byte) aead { if err != nil { panic(err) } - aead, err := cipher.NewGCM(aes) + var aead cipher.AEAD + if boring.Enabled { + aead, err = boring.NewGCMTLS13(aes) + } else { + boring.Unreachable() + aead, err = cipher.NewGCM(aes) + } if err != nil { panic(err) } diff --git a/src/crypto/tls/defaults.go b/src/crypto/tls/defaults.go index 9b28acdc2d866a..ad4070df4a8883 100644 --- a/src/crypto/tls/defaults.go +++ b/src/crypto/tls/defaults.go @@ -90,13 +90,16 @@ var defaultCipherSuitesTLS13NoAES = []uint16{ TLS_AES_256_GCM_SHA384, } +// The FIPS-only policies below match BoringSSL's ssl_policy_fips_202205. + var defaultSupportedVersionsFIPS = []uint16{ VersionTLS12, + VersionTLS13, } // defaultCurvePreferencesFIPS are the FIPS-allowed curves, // in preference order (most preferable first). -var defaultCurvePreferencesFIPS = []CurveID{CurveP256, CurveP384, CurveP521} +var defaultCurvePreferencesFIPS = []CurveID{CurveP256, CurveP384} // defaultSupportedSignatureAlgorithmsFIPS currently are a subset of // defaultSupportedSignatureAlgorithms without Ed25519 and SHA-1. @@ -109,7 +112,6 @@ var defaultSupportedSignatureAlgorithmsFIPS = []SignatureScheme{ PKCS1WithSHA384, ECDSAWithP384AndSHA384, PKCS1WithSHA512, - ECDSAWithP521AndSHA512, } // defaultCipherSuitesFIPS are the FIPS-allowed cipher suites. @@ -118,8 +120,6 @@ var defaultCipherSuitesFIPS = []uint16{ TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, } // defaultCipherSuitesTLS13FIPS are the FIPS-allowed cipher suites for TLS 1.3. diff --git a/src/crypto/tls/handshake_client.go b/src/crypto/tls/handshake_client.go index 5025657590d32c..760e827f467f15 100644 --- a/src/crypto/tls/handshake_client.go +++ b/src/crypto/tls/handshake_client.go @@ -141,13 +141,18 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *keySharePrivateKeys, *echCon if len(hello.supportedVersions) == 1 { hello.cipherSuites = nil } - if hasAESGCMHardwareSupport { + if needFIPS() { + hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13FIPS...) + } else if hasAESGCMHardwareSupport { hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13...) } else { hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13NoAES...) } - curveID := config.curvePreferences(maxVersion)[0] + if len(hello.supportedCurves) == 0 { + return nil, nil, nil, errors.New("tls: no supported elliptic curves for ECDHE") + } + curveID := hello.supportedCurves[0] keyShareKeys = &keySharePrivateKeys{curveID: curveID} if curveID == x25519Kyber768Draft00 { keyShareKeys.ecdhe, err = generateECDHEKey(config.rand(), X25519) diff --git a/src/crypto/tls/handshake_client_tls13.go b/src/crypto/tls/handshake_client_tls13.go index db5e35d9a46c2e..21a501fbfd592b 100644 --- a/src/crypto/tls/handshake_client_tls13.go +++ b/src/crypto/tls/handshake_client_tls13.go @@ -45,10 +45,6 @@ type clientHandshakeStateTLS13 struct { func (hs *clientHandshakeStateTLS13) handshake() error { c := hs.c - if needFIPS() { - return errors.New("tls: internal error: TLS 1.3 reached in FIPS mode") - } - // The server must not select TLS 1.3 in a renegotiation. See RFC 8446, // sections 4.1.2 and 4.1.3. if c.handshakes > 0 { diff --git a/src/crypto/tls/handshake_server_test.go b/src/crypto/tls/handshake_server_test.go index 788a26af7559b6..01eae15a6b98c0 100644 --- a/src/crypto/tls/handshake_server_test.go +++ b/src/crypto/tls/handshake_server_test.go @@ -29,6 +29,7 @@ import ( ) func testClientHello(t *testing.T, serverConfig *Config, m handshakeMessage) { + t.Helper() testClientHelloFailure(t, serverConfig, m, "") } diff --git a/src/crypto/tls/handshake_server_tls13.go b/src/crypto/tls/handshake_server_tls13.go index 503a732e05765e..b8cf4c3fa50b24 100644 --- a/src/crypto/tls/handshake_server_tls13.go +++ b/src/crypto/tls/handshake_server_tls13.go @@ -47,10 +47,6 @@ type serverHandshakeStateTLS13 struct { func (hs *serverHandshakeStateTLS13) handshake() error { c := hs.c - if needFIPS() { - return errors.New("tls: internal error: TLS 1.3 reached in FIPS mode") - } - // For an overview of the TLS 1.3 handshake, see RFC 8446, Section 2. if err := hs.processClientHello(); err != nil { return err @@ -165,6 +161,9 @@ func (hs *serverHandshakeStateTLS13) processClientHello() error { if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { preferenceList = defaultCipherSuitesTLS13NoAES } + if needFIPS() { + preferenceList = defaultCipherSuitesTLS13FIPS + } for _, suiteID := range preferenceList { hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID) if hs.suite != nil { From 2ebe15c67e1989ccf962d587df1d4d18eb188da2 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 7 Aug 2024 11:52:39 -0400 Subject: [PATCH 230/866] cmd/internal/obj/wasm: handle stack unwinding in wasmexport CL 603055 added basic support of wasmexport. This CL follows it and adds stack unwinding handling. If the wasmexport Go function returns normally, we directly return to the host. If the Go function unwinds the stack (e.g. goroutine switch, stack growth), we need to run a PC loop to call functions on the new stack, similar to wasm_pc_f_loop. One difference is that when the wasmexport function returns normally, we need to exit the loop and return to the host. Now a wasmimport function can call back into the Go via wasmexport. During the callback the stack could have moved. The wasmimport code needs to read a new SP after the host function returns, instead of assuming the SP doesn't change. For #65199. Change-Id: I62c1cde1c46f7eb72625892dea41e8137b361891 Reviewed-on: https://go-review.googlesource.com/c/go/+/603836 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Achille Roussel --- src/cmd/compile/internal/ssagen/abi.go | 7 +++ src/cmd/internal/obj/wasm/wasmobj.go | 65 ++++++++++++++++++-------- src/cmd/link/internal/wasm/asm.go | 1 + src/runtime/asm_wasm.s | 52 +++++++++++++++++++++ 4 files changed, 105 insertions(+), 20 deletions(-) diff --git a/src/cmd/compile/internal/ssagen/abi.go b/src/cmd/compile/internal/ssagen/abi.go index 0c42c843123d8c..9e89da90c95960 100644 --- a/src/cmd/compile/internal/ssagen/abi.go +++ b/src/cmd/compile/internal/ssagen/abi.go @@ -397,9 +397,16 @@ func GenWasmExportWrapper(wrapped *ir.Func) { pp := objw.NewProgs(fn, 0) defer pp.Free() + // TEXT. Has a frame to pass args on stack to the Go function. pp.Text.To.Type = obj.TYPE_TEXTSIZE pp.Text.To.Val = int32(0) pp.Text.To.Offset = types.RoundUp(ft.ArgWidth(), int64(types.RegSize)) + // No locals. (Callee's args are covered in the callee's stackmap.) + p := pp.Prog(obj.AFUNCDATA) + p.From.SetConst(rtabi.FUNCDATA_LocalsPointerMaps) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = base.Ctxt.Lookup("no_pointers_stackmap") pp.Flush() // Actual code geneneration is in cmd/internal/obj/wasm. } diff --git a/src/cmd/internal/obj/wasm/wasmobj.go b/src/cmd/internal/obj/wasm/wasmobj.go index 4b5324cc560432..20ed142812d15d 100644 --- a/src/cmd/internal/obj/wasm/wasmobj.go +++ b/src/cmd/internal/obj/wasm/wasmobj.go @@ -125,9 +125,10 @@ var Linkwasm = obj.LinkArch{ } var ( - morestack *obj.LSym - morestackNoCtxt *obj.LSym - sigpanic *obj.LSym + morestack *obj.LSym + morestackNoCtxt *obj.LSym + sigpanic *obj.LSym + wasm_pc_f_loop_export *obj.LSym ) const ( @@ -147,6 +148,7 @@ func instinit(ctxt *obj.Link) { morestack = ctxt.Lookup("runtime.morestack") morestackNoCtxt = ctxt.Lookup("runtime.morestack_noctxt") sigpanic = ctxt.LookupABI("runtime.sigpanic", obj.ABIInternal) + wasm_pc_f_loop_export = ctxt.Lookup("wasm_pc_f_loop_export") } func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { @@ -825,13 +827,6 @@ func genWasmImportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args // https://github.com/WebAssembly/multi-value/blob/master/proposals/multi-value/Overview.md panic("invalid results type") // impossible until multi-value proposal has landed } - if len(wi.Results) == 1 { - // If we have a result (rather than returning nothing at all), then - // we'll write the result to the Go stack relative to the current stack pointer. - // We cache the current stack pointer value on the wasm stack here and then use - // it after the Call instruction to store the result. - p = appendp(p, AGet, regAddr(REG_SP)) - } for _, f := range wi.Params { // Each load instructions will consume the value of sp on the stack, so // we need to read sp for each param. WASM appears to not have a stack dup instruction @@ -878,20 +873,38 @@ func genWasmImportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args // to by 8 bytes to account for the return address on the Go stack. storeOffset := f.Offset + 8 - // This code is paired the code above that reads the stack pointer onto the wasm - // stack. We've done this so we have a consistent view of the sp value as it might - // be manipulated by the call and we want to ignore that manipulation here. + // We need to push SP on the Wasm stack for the Store instruction, which needs to + // be pushed before the value (call result). So we pop the value into a register, + // push SP, and push the value back. + // We cannot get the SP onto the stack before the call, as if the host function + // calls back into Go, the Go stack may have moved. switch f.Type { case obj.WasmI32: - p = appendp(p, AI32Store, constAddr(storeOffset)) + p = appendp(p, AI64ExtendI32U) // the register is 64-bit, so we have to extend + p = appendp(p, ASet, regAddr(REG_R0)) + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AGet, regAddr(REG_R0)) + p = appendp(p, AI64Store32, constAddr(storeOffset)) case obj.WasmI64: + p = appendp(p, ASet, regAddr(REG_R0)) + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AGet, regAddr(REG_R0)) p = appendp(p, AI64Store, constAddr(storeOffset)) case obj.WasmF32: + p = appendp(p, ASet, regAddr(REG_F0)) + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AGet, regAddr(REG_F0)) p = appendp(p, AF32Store, constAddr(storeOffset)) case obj.WasmF64: + p = appendp(p, ASet, regAddr(REG_F16)) + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AGet, regAddr(REG_F16)) p = appendp(p, AF64Store, constAddr(storeOffset)) case obj.WasmPtr: p = appendp(p, AI64ExtendI32U) + p = appendp(p, ASet, regAddr(REG_R0)) + p = appendp(p, AGet, regAddr(REG_SP)) + p = appendp(p, AGet, regAddr(REG_R0)) p = appendp(p, AI64Store, constAddr(storeOffset)) default: panic("bad result type") @@ -907,10 +920,13 @@ func genWasmExportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args we := s.Func().WasmExport we.CreateAuxSym() p := s.Func().Text + framesize := p.To.Offset + for p.Link != nil && p.Link.As == obj.AFUNCDATA { + p = p.Link + } if p.Link != nil { panic("wrapper functions for WASM export should not have a body") } - framesize := p.To.Offset // Store args for i, f := range we.Params { @@ -943,20 +959,25 @@ func genWasmExportWrapper(s *obj.LSym, appendp func(p *obj.Prog, as obj.As, args p = appendp(p, ASet, regAddr(REG_SP)) // write return address to Go stack p = appendp(p, AGet, regAddr(REG_SP)) - p = appendp(p, AI64Const, obj.Addr{ + retAddr := obj.Addr{ Type: obj.TYPE_ADDR, Name: obj.NAME_EXTERN, Sym: s, // PC_F Offset: 1, // PC_B=1, past the prologue, so we have the right SP delta - }) + } + p = appendp(p, AI64Const, retAddr) p = appendp(p, AI64Store, constAddr(0)) // Set PC_B parameter to function entry p = appendp(p, AI32Const, constAddr(0)) p = appendp(p, ACall, obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: we.WrappedSym}) - // return value is on the top of the stack, indicating whether to unwind the Wasm stack - // TODO: handle stack unwinding + // Return value is on the top of the stack, indicating whether to unwind the Wasm stack. + // In the unwinding case, we call wasm_pc_f_loop_export to handle stack switch and rewinding, + // until a normal return (non-unwinding) back to this function. p = appendp(p, AIf) - p = appendp(p, obj.AUNDEF) + p = appendp(p, AI32Const, retAddr) + p = appendp(p, AI32Const, constAddr(16)) + p = appendp(p, AI32ShrU) + p = appendp(p, ACall, obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: wasm_pc_f_loop_export}) p = appendp(p, AEnd) // Load result @@ -1008,6 +1029,7 @@ var notUsePC_B = map[string]bool{ "wasm_export_resume": true, "wasm_export_getsp": true, "wasm_pc_f_loop": true, + "wasm_pc_f_loop_export": true, "gcWriteBarrier": true, "runtime.gcWriteBarrier1": true, "runtime.gcWriteBarrier2": true, @@ -1062,6 +1084,9 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { "wasm_pc_f_loop", "runtime.wasmDiv", "runtime.wasmTruncS", "runtime.wasmTruncU", "memeqbody": varDecls = []*varDecl{} useAssemblyRegMap() + case "wasm_pc_f_loop_export": + varDecls = []*varDecl{{count: 2, typ: i32}} + useAssemblyRegMap() case "memchr", "memcmp": varDecls = []*varDecl{{count: 2, typ: i32}} useAssemblyRegMap() diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index cdd8de467d237e..5b36ea0fbcb15a 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -73,6 +73,7 @@ var wasmFuncTypes = map[string]*wasmFuncType{ "wasm_export_resume": {Params: []byte{}}, // "wasm_export_getsp": {Results: []byte{I32}}, // sp "wasm_pc_f_loop": {Params: []byte{}}, // + "wasm_pc_f_loop_export": {Params: []byte{I32}}, // pc_f "runtime.wasmDiv": {Params: []byte{I64, I64}, Results: []byte{I64}}, // x, y -> x/y "runtime.wasmTruncS": {Params: []byte{F64}, Results: []byte{I64}}, // x -> int(x) "runtime.wasmTruncU": {Params: []byte{F64}, Results: []byte{I64}}, // x -> uint(x) diff --git a/src/runtime/asm_wasm.s b/src/runtime/asm_wasm.s index b44a4f7dd4983d..419640be2dc8d2 100644 --- a/src/runtime/asm_wasm.s +++ b/src/runtime/asm_wasm.s @@ -554,5 +554,57 @@ TEXT wasm_pc_f_loop(SB),NOSPLIT,$0 Return +// wasm_pc_f_loop_export is like wasm_pc_f_loop, except that this takes an +// argument (on Wasm stack) that is a PC_F, and the loop stops when we get +// to that PC in a normal return (not unwinding). +// This is for handling an wasmexport function when it needs to switch the +// stack. +TEXT wasm_pc_f_loop_export(SB),NOSPLIT,$0 + Get PAUSE + I32Eqz +outer: + If + // R1 is whether a function return normally (0) or unwinding (1). + // Start with unwinding. + I32Const $1 + Set R1 + loop: + Loop + // Get PC_F & PC_B from -8(SP) + Get SP + I32Const $8 + I32Sub + I32Load16U $2 // PC_F + Tee R2 + + Get R0 + I32Eq + If // PC_F == R0, we're at the stop PC + Get R1 + I32Eqz + // Break if it is a normal return + BrIf outer // actually jump to after the corresponding End + End + + Get SP + I32Const $8 + I32Sub + I32Load16U $0 // PC_B + + Get R2 // PC_F + CallIndirect $0 + Set R1 // save return/unwinding state for next iteration + + Get PAUSE + I32Eqz + BrIf loop + End + End + + I32Const $0 + Set PAUSE + + Return + TEXT wasm_export_lib(SB),NOSPLIT,$0 UNDEF From 2f3fee058f3bb1c98b8ecc5aeb2329aaadf4dc0b Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 9 Aug 2024 12:50:24 -0400 Subject: [PATCH 231/866] runtime: make the wasm crash function abort Currently the crash function on Wasm is implemented as a nil pointer dereference, which turns into a sigpanic, which turns into "panic during runtime execution" as we're already in runtime when crash is called. Instead, just abort, which crashes hard and terminates the Wasm module execution, and the execution engine often dumps a stack trace. Change-Id: I3c57f8ff7a0c0015e4abcd7bf262bf9001624b85 Reviewed-on: https://go-review.googlesource.com/c/go/+/604515 Reviewed-by: Achille Roussel LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/runtime/os_wasm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/os_wasm.go b/src/runtime/os_wasm.go index fbafc319b988e6..fbf58439b9c478 100644 --- a/src/runtime/os_wasm.go +++ b/src/runtime/os_wasm.go @@ -96,7 +96,7 @@ func signame(sig uint32) string { } func crash() { - *(*int32)(nil) = 0 + abort() } func initsig(preinit bool) { From b538e953ee5e50a78880106452458c9694fe27e1 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 7 Aug 2024 14:25:31 -0700 Subject: [PATCH 232/866] cmd/compile: clean up some unused code in prove pass Change-Id: Ib695064c5a77a3f86d1d2a74f96823e65199b8e9 Reviewed-on: https://go-review.googlesource.com/c/go/+/603956 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/prove.go | 82 +------------------------ src/cmd/compile/internal/ssa/rewrite.go | 55 +++++++++++++++++ 2 files changed, 56 insertions(+), 81 deletions(-) diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 7c95922f4d8c6d..9bc2fdc90c1566 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -113,20 +113,6 @@ func (d domain) String() string { return s } -type pair struct { - // a pair of values, ordered by ID. - // v can be nil, to mean the zero value. - // for booleans the zero value (v == nil) is false. - v, w *Value - d domain -} - -// fact is a pair plus a relation for that pair. -type fact struct { - p pair - r relation -} - // a limit records known upper and lower bounds for a value. // // If we have min>max or umin>umax, then this limit is @@ -418,9 +404,8 @@ type factsTable struct { caps map[ID]*Value } -// checkpointFact is an invalid value used for checkpointing +// checkpointBound is an invalid value used for checkpointing // and restoring factsTable. -var checkpointFact = fact{} var checkpointBound = limitFact{} func newFactsTable(f *Func) *factsTable { @@ -1162,17 +1147,6 @@ func (ft *factsTable) restore() { } } -func lessByID(v, w *Value) bool { - if v == nil && w == nil { - // Should not happen, but just in case. - return false - } - if v == nil { - return true - } - return w != nil && v.ID < w.ID -} - var ( reverseBits = [...]relation{0, 4, 2, 6, 1, 5, 3, 7} @@ -2184,60 +2158,6 @@ func removeBranch(b *Block, branch branch) { } } -// isNonNegative reports whether v is known to be greater or equal to zero. -// TODO: no longer used by the prove pass; move elsewhere. -func isNonNegative(v *Value) bool { - if !v.Type.IsInteger() { - v.Fatalf("isNonNegative bad type: %v", v.Type) - } - // TODO: return true if !v.Type.IsSigned() - // SSA isn't type-safe enough to do that now (issue 37753). - // The checks below depend only on the pattern of bits. - - switch v.Op { - case OpConst64: - return v.AuxInt >= 0 - - case OpConst32: - return int32(v.AuxInt) >= 0 - - case OpConst16: - return int16(v.AuxInt) >= 0 - - case OpConst8: - return int8(v.AuxInt) >= 0 - - case OpStringLen, OpSliceLen, OpSliceCap, - OpZeroExt8to64, OpZeroExt16to64, OpZeroExt32to64, - OpZeroExt8to32, OpZeroExt16to32, OpZeroExt8to16, - OpCtz64, OpCtz32, OpCtz16, OpCtz8, - OpCtz64NonZero, OpCtz32NonZero, OpCtz16NonZero, OpCtz8NonZero, - OpBitLen64, OpBitLen32, OpBitLen16, OpBitLen8: - return true - - case OpRsh64Ux64, OpRsh32Ux64: - by := v.Args[1] - return by.Op == OpConst64 && by.AuxInt > 0 - - case OpRsh64x64, OpRsh32x64, OpRsh8x64, OpRsh16x64, OpRsh32x32, OpRsh64x32, - OpSignExt32to64, OpSignExt16to64, OpSignExt8to64, OpSignExt16to32, OpSignExt8to32: - return isNonNegative(v.Args[0]) - - case OpAnd64, OpAnd32, OpAnd16, OpAnd8: - return isNonNegative(v.Args[0]) || isNonNegative(v.Args[1]) - - case OpMod64, OpMod32, OpMod16, OpMod8, - OpDiv64, OpDiv32, OpDiv16, OpDiv8, - OpOr64, OpOr32, OpOr16, OpOr8, - OpXor64, OpXor32, OpXor16, OpXor8: - return isNonNegative(v.Args[0]) && isNonNegative(v.Args[1]) - - // We could handle OpPhi here, but the improvements from doing - // so are very minor, and it is neither simple nor cheap. - } - return false -} - // isConstDelta returns non-nil if v is equivalent to w+delta (signed). func isConstDelta(v *Value) (w *Value, delta int64) { cop := OpConst64 diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index 07004dea96052c..75f643697974e1 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -2340,3 +2340,58 @@ func setPos(v *Value, pos src.XPos) bool { v.Pos = pos return true } + +// isNonNegative reports whether v is known to be greater or equal to zero. +// Note that this is pretty simplistic. The prove pass generates more detailed +// nonnegative information about values. +func isNonNegative(v *Value) bool { + if !v.Type.IsInteger() { + v.Fatalf("isNonNegative bad type: %v", v.Type) + } + // TODO: return true if !v.Type.IsSigned() + // SSA isn't type-safe enough to do that now (issue 37753). + // The checks below depend only on the pattern of bits. + + switch v.Op { + case OpConst64: + return v.AuxInt >= 0 + + case OpConst32: + return int32(v.AuxInt) >= 0 + + case OpConst16: + return int16(v.AuxInt) >= 0 + + case OpConst8: + return int8(v.AuxInt) >= 0 + + case OpStringLen, OpSliceLen, OpSliceCap, + OpZeroExt8to64, OpZeroExt16to64, OpZeroExt32to64, + OpZeroExt8to32, OpZeroExt16to32, OpZeroExt8to16, + OpCtz64, OpCtz32, OpCtz16, OpCtz8, + OpCtz64NonZero, OpCtz32NonZero, OpCtz16NonZero, OpCtz8NonZero, + OpBitLen64, OpBitLen32, OpBitLen16, OpBitLen8: + return true + + case OpRsh64Ux64, OpRsh32Ux64: + by := v.Args[1] + return by.Op == OpConst64 && by.AuxInt > 0 + + case OpRsh64x64, OpRsh32x64, OpRsh8x64, OpRsh16x64, OpRsh32x32, OpRsh64x32, + OpSignExt32to64, OpSignExt16to64, OpSignExt8to64, OpSignExt16to32, OpSignExt8to32: + return isNonNegative(v.Args[0]) + + case OpAnd64, OpAnd32, OpAnd16, OpAnd8: + return isNonNegative(v.Args[0]) || isNonNegative(v.Args[1]) + + case OpMod64, OpMod32, OpMod16, OpMod8, + OpDiv64, OpDiv32, OpDiv16, OpDiv8, + OpOr64, OpOr32, OpOr16, OpOr8, + OpXor64, OpXor32, OpXor16, OpXor8: + return isNonNegative(v.Args[0]) && isNonNegative(v.Args[1]) + + // We could handle OpPhi here, but the improvements from doing + // so are very minor, and it is neither simple nor cheap. + } + return false +} From 82dcd147b684c6e61d42f41ce940946dd2916106 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sat, 10 Aug 2024 16:31:28 -0700 Subject: [PATCH 233/866] cmd/cgo: clarify that strings and slices may contain C pointers Fixes #68832 Change-Id: I74b6aad9a18953c263cbbe795268017a72261f7f Reviewed-on: https://go-review.googlesource.com/c/go/+/604715 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Reviewed-by: Carlos Amedee Commit-Queue: Ian Lance Taylor --- src/cmd/cgo/doc.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go index 8e11a127407244..eb20ebdb0d361c 100644 --- a/src/cmd/cgo/doc.go +++ b/src/cmd/cgo/doc.go @@ -347,12 +347,12 @@ determined by how the memory was allocated; it has nothing to do with the type of the pointer. Note that values of some Go types, other than the type's zero value, -always include Go pointers. This is true of string, slice, interface, -channel, map, and function types. A pointer type may hold a Go pointer -or a C pointer. Array and struct types may or may not include Go -pointers, depending on the element types. All the discussion below -about Go pointers applies not just to pointer types, but also to other -types that include Go pointers. +always include Go pointers. This is true of interface, channel, map, +and function types. A pointer type may hold a Go pointer or a C pointer. +Array, slice, string, and struct types may or may not include Go pointers, +depending on their type and how they are constructed. All the discussion +below about Go pointers applies not just to pointer types, +but also to other types that include Go pointers. All Go pointers passed to C must point to pinned Go memory. Go pointers passed as function arguments to C functions have the memory they point to From 0b4ab20d2cb30279c11a31cc6bd9324b14a4a38e Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Wed, 7 Aug 2024 13:09:18 -0400 Subject: [PATCH 234/866] go/types, types2: only use fileVersion if 1.21 or greater Only honor //go:build language version downgrades if the version specified is 1.21 or greater. Before 1.21 the version in //go:build lines didn't have the meaning of setting the file's language version. This fixes an issue that was appearing in GOPATH builds: Go 1.23 started providing -lang versions to the compiler in GOPATH mode (among other places) which it wasn't doing before. For example, take a go file with a //go:build line specifying go1.10. If that file used a 1.18 feature, that use would compile fine with a Go 1.22 toolchain. But, before this change, it would produce an error when compiling with the 1.23 toolchain because it set the language version to 1.20 and disallowed the 1.18 feature. This breaks backwards compatibility: when the build tag was added, it did not have the meaning of restricting the language version. Fixes #68658 Change-Id: I4ac2b45a981cd019183d52ba324ba8f0fed93a8e Reviewed-on: https://go-review.googlesource.com/c/go/+/603895 Reviewed-by: Robert Griesemer Commit-Queue: Michael Matloob LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Matloob --- src/cmd/compile/internal/types2/api_test.go | 8 ++++++-- src/cmd/compile/internal/types2/check.go | 15 +++++++++++++- src/go/types/api_test.go | 8 ++++++-- src/go/types/check.go | 15 +++++++++++++- .../types/testdata/check/go1_20_19.go | 2 +- .../types/testdata/check/go1_21_19.go | 2 +- .../types/testdata/check/go1_21_22.go | 16 +++++++++++++++ .../types/testdata/check/go1_22_21.go | 16 +++++++++++++++ .../types/testdata/fixedbugs/issue66285.go | 7 +------ test/fixedbugs/issue63489a.go | 20 +++++++++++-------- 10 files changed, 87 insertions(+), 22 deletions(-) create mode 100644 src/internal/types/testdata/check/go1_21_22.go create mode 100644 src/internal/types/testdata/check/go1_22_21.go diff --git a/src/cmd/compile/internal/types2/api_test.go b/src/cmd/compile/internal/types2/api_test.go index d9ba620888078a..37b26556892631 100644 --- a/src/cmd/compile/internal/types2/api_test.go +++ b/src/cmd/compile/internal/types2/api_test.go @@ -3036,17 +3036,21 @@ func TestFileVersions(t *testing.T) { {"", "go1.20", ""}, // file upgrade ignored {"go1.19", "go1.20", "go1.20"}, // file upgrade permitted {"go1.20", "go1.19", "go1.20"}, // file downgrade not permitted - {"go1.21", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21) + {"go1.21", "go1.20", "go1.21"}, // file downgrade not permitted + {"go1.22", "go1.21", "go1.21"}, // file downgrade permitted (file and module version are >= go1.21) // versions containing release numbers // (file versions containing release numbers are considered invalid) {"go1.19.0", "", "go1.19.0"}, // no file version specified {"go1.20", "go1.20.1", "go1.20"}, // file upgrade ignored {"go1.20.1", "go1.20", "go1.20.1"}, // file upgrade ignored + {"go1.21.0", "go1.21.1", "go1.21.0"}, // file upgrade ignored + {"go1.21", "go1.21.1", "go1.21"}, // file upgrade ignored {"go1.20.1", "go1.21", "go1.21"}, // file upgrade permitted + {"go1.21.1", "go1.21", "go1.21.1"}, // file downgrade ignored {"go1.20.1", "go1.19", "go1.20.1"}, // file downgrade not permitted {"go1.21.1", "go1.19.1", "go1.21.1"}, // file downgrade not permitted (invalid file version) - {"go1.21.1", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21) + {"go1.22.1", "go1.21", "go1.21"}, // file downgrade permitted (file and module version is >= go1.21) } { var src string if test.fileVersion != "" { diff --git a/src/cmd/compile/internal/types2/check.go b/src/cmd/compile/internal/types2/check.go index cd1b2d513c106c..5cee742063a795 100644 --- a/src/cmd/compile/internal/types2/check.go +++ b/src/cmd/compile/internal/types2/check.go @@ -353,12 +353,25 @@ func (check *Checker) initFiles(files []*syntax.File) { // To work around this, downgrades are only allowed when the // module's Go version is Go 1.21 or later. // + // Downgrades are also only allowed to Go versions Go 1.21 or later. + // In GOPATH mode, there's no way to set a module version and the + // -lang is set to the local toolchain version to allow the use of + // new features in GOPATH mode. But //go:build lines added before go1.21 + // weren't intended to downgrade, so code with //go:build lines for + // go versions earlier than 1.21 may use language features added + // in later versions and compile. + // + // We should probably change the downgradeOk condition to capture this + // instead of adding an extra condition, but to make the change simpler, + // we've tried to limit it to one line. + // TODO(gri): simplify this code after 1.23 has shipped + // // If there is no valid check.version, then we don't really know what // Go version to apply. // Legacy tools may do this, and they historically have accepted everything. // Preserve that behavior by ignoring //go:build constraints entirely in that // case (!pkgVersionOk). - if cmp > 0 || cmp < 0 && downgradeOk { + if cmp > 0 || cmp < 0 && downgradeOk && fileVersion.cmp(go1_21) >= 0 { v = file.GoVersion } } diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go index f5bf49b4f8fe5c..d2096c114afc3a 100644 --- a/src/go/types/api_test.go +++ b/src/go/types/api_test.go @@ -3040,17 +3040,21 @@ func TestFileVersions(t *testing.T) { {"", "go1.20", ""}, // file upgrade ignored {"go1.19", "go1.20", "go1.20"}, // file upgrade permitted {"go1.20", "go1.19", "go1.20"}, // file downgrade not permitted - {"go1.21", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21) + {"go1.21", "go1.20", "go1.21"}, // file downgrade not permitted + {"go1.22", "go1.21", "go1.21"}, // file downgrade permitted (file and module version are >= go1.21) // versions containing release numbers // (file versions containing release numbers are considered invalid) {"go1.19.0", "", "go1.19.0"}, // no file version specified {"go1.20", "go1.20.1", "go1.20"}, // file upgrade ignored {"go1.20.1", "go1.20", "go1.20.1"}, // file upgrade ignored + {"go1.21.0", "go1.21.1", "go1.21.0"}, // file upgrade ignored + {"go1.21", "go1.21.1", "go1.21"}, // file upgrade ignored {"go1.20.1", "go1.21", "go1.21"}, // file upgrade permitted + {"go1.21.1", "go1.21", "go1.21.1"}, // file downgrade ignored {"go1.20.1", "go1.19", "go1.20.1"}, // file downgrade not permitted {"go1.21.1", "go1.19.1", "go1.21.1"}, // file downgrade not permitted (invalid file version) - {"go1.21.1", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21) + {"go1.22.1", "go1.21", "go1.21"}, // file downgrade permitted (file and module version is >= go1.21) } { var src string if test.fileVersion != "" { diff --git a/src/go/types/check.go b/src/go/types/check.go index 2d56b0f75c5846..7472c9c5cd4406 100644 --- a/src/go/types/check.go +++ b/src/go/types/check.go @@ -374,12 +374,25 @@ func (check *Checker) initFiles(files []*ast.File) { // To work around this, downgrades are only allowed when the // module's Go version is Go 1.21 or later. // + // Downgrades are also only allowed to Go versions Go 1.21 or later. + // In GOPATH mode, there's no way to set a module version and the + // -lang is set to the local toolchain version to allow the use of + // new features in GOPATH mode. But //go:build lines added before go1.21 + // weren't intended to downgrade, so code with //go:build lines for + // go versions earlier than 1.21 may use language features added + // in later versions and compile. + // + // We should probably change the downgradeOk condition to capture this + // instead of adding an extra condition, but to make the change simpler, + // we've tried to limit it to one line. + // TODO(gri): simplify this code after 1.23 has shipped + // // If there is no valid check.version, then we don't really know what // Go version to apply. // Legacy tools may do this, and they historically have accepted everything. // Preserve that behavior by ignoring //go:build constraints entirely in that // case (!pkgVersionOk). - if cmp > 0 || cmp < 0 && downgradeOk { + if cmp > 0 || cmp < 0 && downgradeOk && fileVersion.cmp(go1_21) >= 0 { v = file.GoVersion } } diff --git a/src/internal/types/testdata/check/go1_20_19.go b/src/internal/types/testdata/check/go1_20_19.go index 08365a7cfb564d..ba1c454332322c 100644 --- a/src/internal/types/testdata/check/go1_20_19.go +++ b/src/internal/types/testdata/check/go1_20_19.go @@ -14,4 +14,4 @@ type Slice []byte type Array [8]byte var s Slice -var p = (Array)(s /* ok because Go 1.20 ignored the //go:build go1.19 */) +var p = (Array)(s /* ok because downgrades below 1.21 are ignored */) diff --git a/src/internal/types/testdata/check/go1_21_19.go b/src/internal/types/testdata/check/go1_21_19.go index 2acd25865d4b69..6c0900d0272762 100644 --- a/src/internal/types/testdata/check/go1_21_19.go +++ b/src/internal/types/testdata/check/go1_21_19.go @@ -14,4 +14,4 @@ type Slice []byte type Array [8]byte var s Slice -var p = (Array)(s /* ERROR "requires go1.20 or later" */) +var p = (Array)(s /* ok because downgrades below 1.21 are ignored */) diff --git a/src/internal/types/testdata/check/go1_21_22.go b/src/internal/types/testdata/check/go1_21_22.go new file mode 100644 index 00000000000000..695503ace17cb4 --- /dev/null +++ b/src/internal/types/testdata/check/go1_21_22.go @@ -0,0 +1,16 @@ +// -lang=go1.21 + +// Copyright 2022 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. + +// Check Go language version-specific errors. + +//go:build go1.22 + +package p + +func f() { + for _ = range /* ok because of upgrade to 1.22 */ 10 { + } +} \ No newline at end of file diff --git a/src/internal/types/testdata/check/go1_22_21.go b/src/internal/types/testdata/check/go1_22_21.go new file mode 100644 index 00000000000000..79e21a7de824a1 --- /dev/null +++ b/src/internal/types/testdata/check/go1_22_21.go @@ -0,0 +1,16 @@ +// -lang=go1.22 + +// Copyright 2024 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. + +// Check Go language version-specific errors. + +//go:build go1.21 + +package p + +func f() { + for _ = range 10 /* ERROR "requires go1.22 or later" */ { + } +} \ No newline at end of file diff --git a/src/internal/types/testdata/fixedbugs/issue66285.go b/src/internal/types/testdata/fixedbugs/issue66285.go index 9811fec3f35549..4af76f05da8e41 100644 --- a/src/internal/types/testdata/fixedbugs/issue66285.go +++ b/src/internal/types/testdata/fixedbugs/issue66285.go @@ -1,14 +1,9 @@ -// -lang=go1.21 +// -lang=go1.13 // Copyright 2024 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. -// Note: Downgrading to go1.13 requires at least go1.21, -// hence the need for -lang=go1.21 at the top. - -//go:build go1.13 - package p import "io" diff --git a/test/fixedbugs/issue63489a.go b/test/fixedbugs/issue63489a.go index b88120f2c045ef..9b06d949bfa962 100644 --- a/test/fixedbugs/issue63489a.go +++ b/test/fixedbugs/issue63489a.go @@ -1,16 +1,20 @@ -// errorcheck -lang=go1.21 +// errorcheck -lang=go1.22 // Copyright 2023 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. -//go:build go1.4 +// This file has been changed from its original version as +// //go:build language downgrades below go1.21 are no longer +// supported. The original tested a downgrade from go1.21 to +// go1.4 while this new version tests a downgrade from go1.22 +// to go1.21 -package p - -const c = 0o123 // ERROR "file declares //go:build go1.4" +//go:build go1.21 -// ERROR "file declares //go:build go1.4" +package p -//line issue63489a.go:13:1 -const d = 0o124 +func f() { + for _ = range 10 { // ERROR "file declares //go:build go1.21" + } +} From 9819ac51dfc0593755f334a3eedec4edf04313bf Mon Sep 17 00:00:00 2001 From: Andy Pan Date: Tue, 6 Aug 2024 21:22:57 +0800 Subject: [PATCH 235/866] os: employ sendfile(2) for file-to-file copying on SunOS when needed Change-Id: Ia46de6c62707db9ef193fe1a2aabb18585f1dd48 Reviewed-on: https://go-review.googlesource.com/c/go/+/603098 TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor Run-TryBot: Andy Pan LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil Auto-Submit: Ian Lance Taylor --- src/internal/poll/sendfile_solaris.go | 11 +- src/net/cgo_solaris.go | 2 +- src/os/readfrom_linux_test.go | 400 +--------------------- src/os/readfrom_solaris_test.go | 58 ++++ src/os/readfrom_unix_test.go | 456 ++++++++++++++++++++++++++ src/os/writeto_linux_test.go | 29 -- src/os/zero_copy_linux.go | 24 -- src/os/zero_copy_posix.go | 36 ++ src/os/zero_copy_solaris.go | 111 +++++++ src/os/zero_copy_stub.go | 2 +- 10 files changed, 684 insertions(+), 445 deletions(-) create mode 100644 src/os/readfrom_solaris_test.go create mode 100644 src/os/readfrom_unix_test.go create mode 100644 src/os/zero_copy_posix.go create mode 100644 src/os/zero_copy_solaris.go diff --git a/src/internal/poll/sendfile_solaris.go b/src/internal/poll/sendfile_solaris.go index ec675833a225dc..a5bf0ab1426044 100644 --- a/src/internal/poll/sendfile_solaris.go +++ b/src/internal/poll/sendfile_solaris.go @@ -6,6 +6,8 @@ package poll import "syscall" +//go:cgo_ldflag "-lsendfile" + // Not strictly needed, but very helpful for debugging, see issue #10221. // //go:cgo_import_dynamic _ _ "libsendfile.so" @@ -37,8 +39,13 @@ func SendFile(dstFD *FD, src int, pos, remain int64) (written int64, err error, } pos1 := pos n, err = syscall.Sendfile(dst, src, &pos1, n) - if err == syscall.EAGAIN || err == syscall.EINTR { - // partial write may have occurred + if err == syscall.EAGAIN || err == syscall.EINTR || err == syscall.EINVAL { + // Partial write or other quirks may have occurred. + // + // For EINVAL, this is another quirk on SunOS: sendfile() claims to support + // out_fd as a regular file but returns EINVAL when the out_fd is not a + // socket of SOCK_STREAM, while it actually sends out data anyway and updates + // the file offset. n = int(pos1 - pos) } if n > 0 { diff --git a/src/net/cgo_solaris.go b/src/net/cgo_solaris.go index cde9c957fee53c..98a0e819565d3f 100644 --- a/src/net/cgo_solaris.go +++ b/src/net/cgo_solaris.go @@ -7,7 +7,7 @@ package net /* -#cgo LDFLAGS: -lsocket -lnsl -lsendfile +#cgo LDFLAGS: -lsocket -lnsl #include */ import "C" diff --git a/src/os/readfrom_linux_test.go b/src/os/readfrom_linux_test.go index 3822b2e329d1fd..c719d6a099e715 100644 --- a/src/os/readfrom_linux_test.go +++ b/src/os/readfrom_linux_test.go @@ -16,7 +16,6 @@ import ( "path/filepath" "runtime" "strconv" - "strings" "sync" "syscall" "testing" @@ -25,277 +24,6 @@ import ( "golang.org/x/net/nettest" ) -func TestCopyFileRangeAndSendFile(t *testing.T) { - sizes := []int{ - 1, - 42, - 1025, - syscall.Getpagesize() + 1, - 32769, - } - t.Run("Basic", func(t *testing.T) { - for _, size := range sizes { - t.Run(strconv.Itoa(size), func(t *testing.T) { - testCopyFileRange(t, int64(size), -1) - testSendfileOverCopyFileRange(t, int64(size), -1) - }) - } - }) - t.Run("Limited", func(t *testing.T) { - t.Run("OneLess", func(t *testing.T) { - for _, size := range sizes { - t.Run(strconv.Itoa(size), func(t *testing.T) { - testCopyFileRange(t, int64(size), int64(size)-1) - testSendfileOverCopyFileRange(t, int64(size), int64(size)-1) - }) - } - }) - t.Run("Half", func(t *testing.T) { - for _, size := range sizes { - t.Run(strconv.Itoa(size), func(t *testing.T) { - testCopyFileRange(t, int64(size), int64(size)/2) - testSendfileOverCopyFileRange(t, int64(size), int64(size)/2) - }) - } - }) - t.Run("More", func(t *testing.T) { - for _, size := range sizes { - t.Run(strconv.Itoa(size), func(t *testing.T) { - testCopyFileRange(t, int64(size), int64(size)+7) - testSendfileOverCopyFileRange(t, int64(size), int64(size)+7) - }) - } - }) - }) - t.Run("DoesntTryInAppendMode", func(t *testing.T) { - for _, newTest := range []func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string){ - newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} { - dst, src, data, hook, testName := newTest(t, 42) - - dst2, err := OpenFile(dst.Name(), O_RDWR|O_APPEND, 0755) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - defer dst2.Close() - - if _, err := io.Copy(dst2, src); err != nil { - t.Fatalf("%s: %v", testName, err) - } - if hook.called { - t.Fatalf("%s: hook shouldn't be called with destination in O_APPEND mode", testName) - } - mustSeekStart(t, dst2) - mustContainData(t, dst2, data) // through traditional means - } - }) - t.Run("CopyFileItself", func(t *testing.T) { - for _, hookFunc := range []func(*testing.T) (*copyFileHook, string){hookCopyFileRange, hookSendFileOverCopyFileRange} { - hook, testName := hookFunc(t) - - f, err := CreateTemp("", "file-readfrom-itself-test") - if err != nil { - t.Fatalf("%s: failed to create tmp file: %v", testName, err) - } - t.Cleanup(func() { - f.Close() - Remove(f.Name()) - }) - - data := []byte("hello world!") - if _, err := f.Write(data); err != nil { - t.Fatalf("%s: failed to create and feed the file: %v", testName, err) - } - - if err := f.Sync(); err != nil { - t.Fatalf("%s: failed to save the file: %v", testName, err) - } - - // Rewind it. - if _, err := f.Seek(0, io.SeekStart); err != nil { - t.Fatalf("%s: failed to rewind the file: %v", testName, err) - } - - // Read data from the file itself. - if _, err := io.Copy(f, f); err != nil { - t.Fatalf("%s: failed to read from the file: %v", testName, err) - } - - if hook.written != 0 || hook.handled || hook.err != nil { - t.Fatalf("%s: File.readFrom is expected not to use any zero-copy techniques when copying itself."+ - "got hook.written=%d, hook.handled=%t, hook.err=%v; expected hook.written=0, hook.handled=false, hook.err=nil", - testName, hook.written, hook.handled, hook.err) - } - - switch testName { - case "hookCopyFileRange": - // For copy_file_range(2), it fails and returns EINVAL when the source and target - // refer to the same file and their ranges overlap. The hook should be called to - // get the returned error and fall back to generic copy. - if !hook.called { - t.Fatalf("%s: should have called the hook", testName) - } - case "hookSendFileOverCopyFileRange": - // For sendfile(2), it allows the source and target to refer to the same file and overlap. - // The hook should not be called and just fall back to generic copy directly. - if hook.called { - t.Fatalf("%s: shouldn't have called the hook", testName) - } - default: - t.Fatalf("%s: unexpected test", testName) - } - - // Rewind it. - if _, err := f.Seek(0, io.SeekStart); err != nil { - t.Fatalf("%s: failed to rewind the file: %v", testName, err) - } - - data2, err := io.ReadAll(f) - if err != nil { - t.Fatalf("%s: failed to read from the file: %v", testName, err) - } - - // It should wind up a double of the original data. - if s := strings.Repeat(string(data), 2); s != string(data2) { - t.Fatalf("%s: file contained %s, expected %s", testName, data2, s) - } - } - }) - t.Run("NotRegular", func(t *testing.T) { - t.Run("BothPipes", func(t *testing.T) { - for _, hookFunc := range []func(*testing.T) (*copyFileHook, string){hookCopyFileRange, hookSendFileOverCopyFileRange} { - hook, testName := hookFunc(t) - - pr1, pw1, err := Pipe() - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - defer pr1.Close() - defer pw1.Close() - - pr2, pw2, err := Pipe() - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - defer pr2.Close() - defer pw2.Close() - - // The pipe is empty, and PIPE_BUF is large enough - // for this, by (POSIX) definition, so there is no - // need for an additional goroutine. - data := []byte("hello") - if _, err := pw1.Write(data); err != nil { - t.Fatalf("%s: %v", testName, err) - } - pw1.Close() - - n, err := io.Copy(pw2, pr1) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - if n != int64(len(data)) { - t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) - } - if !hook.called { - t.Fatalf("%s: should have called the hook", testName) - } - pw2.Close() - mustContainData(t, pr2, data) - } - }) - t.Run("DstPipe", func(t *testing.T) { - for _, newTest := range []func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string){ - newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} { - dst, src, data, hook, testName := newTest(t, 255) - dst.Close() - - pr, pw, err := Pipe() - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - defer pr.Close() - defer pw.Close() - - n, err := io.Copy(pw, src) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - if n != int64(len(data)) { - t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) - } - if !hook.called { - t.Fatalf("%s: should have called the hook", testName) - } - pw.Close() - mustContainData(t, pr, data) - } - }) - t.Run("SrcPipe", func(t *testing.T) { - for _, newTest := range []func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string){ - newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} { - dst, src, data, hook, testName := newTest(t, 255) - src.Close() - - pr, pw, err := Pipe() - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - defer pr.Close() - defer pw.Close() - - // The pipe is empty, and PIPE_BUF is large enough - // for this, by (POSIX) definition, so there is no - // need for an additional goroutine. - if _, err := pw.Write(data); err != nil { - t.Fatalf("%s: %v", testName, err) - } - pw.Close() - - n, err := io.Copy(dst, pr) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - if n != int64(len(data)) { - t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) - } - if !hook.called { - t.Fatalf("%s: should have called the hook", testName) - } - mustSeekStart(t, dst) - mustContainData(t, dst, data) - } - }) - }) - t.Run("Nil", func(t *testing.T) { - var nilFile *File - anyFile, err := CreateTemp("", "") - if err != nil { - t.Fatal(err) - } - defer Remove(anyFile.Name()) - defer anyFile.Close() - - if _, err := io.Copy(nilFile, nilFile); err != ErrInvalid { - t.Errorf("io.Copy(nilFile, nilFile) = %v, want %v", err, ErrInvalid) - } - if _, err := io.Copy(anyFile, nilFile); err != ErrInvalid { - t.Errorf("io.Copy(anyFile, nilFile) = %v, want %v", err, ErrInvalid) - } - if _, err := io.Copy(nilFile, anyFile); err != ErrInvalid { - t.Errorf("io.Copy(nilFile, anyFile) = %v, want %v", err, ErrInvalid) - } - - if _, err := nilFile.ReadFrom(nilFile); err != ErrInvalid { - t.Errorf("nilFile.ReadFrom(nilFile) = %v, want %v", err, ErrInvalid) - } - if _, err := anyFile.ReadFrom(nilFile); err != ErrInvalid { - t.Errorf("anyFile.ReadFrom(nilFile) = %v, want %v", err, ErrInvalid) - } - if _, err := nilFile.ReadFrom(anyFile); err != ErrInvalid { - t.Errorf("nilFile.ReadFrom(anyFile) = %v, want %v", err, ErrInvalid) - } - }) -} - func TestSpliceFile(t *testing.T) { sizes := []int{ 1, @@ -516,6 +244,16 @@ func testSpliceToTTY(t *testing.T, proto string, size int64) { } } +var ( + copyFileTests = []copyFileTestFunc{newCopyFileRangeTest, newSendfileOverCopyFileRangeTest} + copyFileHooks = []copyFileTestHook{hookCopyFileRange, hookSendFileOverCopyFileRange} +) + +func testCopyFiles(t *testing.T, size, limit int64) { + testCopyFileRange(t, size, limit) + testSendfileOverCopyFileRange(t, size, limit) +} + func testCopyFileRange(t *testing.T, size int64, limit int64) { dst, src, data, hook, name := newCopyFileRangeTest(t, size) testCopyFile(t, dst, src, data, hook, limit, name) @@ -526,78 +264,13 @@ func testSendfileOverCopyFileRange(t *testing.T, size int64, limit int64) { testCopyFile(t, dst, src, data, hook, limit, name) } -func testCopyFile(t *testing.T, dst, src *File, data []byte, hook *copyFileHook, limit int64, testName string) { - // If we have a limit, wrap the reader. - var ( - realsrc io.Reader - lr *io.LimitedReader - ) - if limit >= 0 { - lr = &io.LimitedReader{N: limit, R: src} - realsrc = lr - if limit < int64(len(data)) { - data = data[:limit] - } - } else { - realsrc = src - } - - // Now call ReadFrom (through io.Copy), which will hopefully call - // poll.CopyFileRange or poll.SendFile. - n, err := io.Copy(dst, realsrc) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - - // If we didn't have a limit or had a positive limit, we should have called - // poll.CopyFileRange or poll.SendFile with the right file descriptor arguments. - if limit != 0 && !hook.called { - t.Fatalf("%s: never called the hook", testName) - } - if hook.called && hook.dstfd != int(dst.Fd()) { - t.Fatalf("%s: wrong destination file descriptor: got %d, want %d", testName, hook.dstfd, dst.Fd()) - } - if hook.called && hook.srcfd != int(src.Fd()) { - t.Fatalf("%s: wrong source file descriptor: got %d, want %d", testName, hook.srcfd, src.Fd()) - } - - // Check that the offsets after the transfer make sense, that the size - // of the transfer was reported correctly, and that the destination - // file contains exactly the bytes we expect it to contain. - dstoff, err := dst.Seek(0, io.SeekCurrent) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - srcoff, err := src.Seek(0, io.SeekCurrent) - if err != nil { - t.Fatalf("%s: %v", testName, err) - } - if dstoff != srcoff { - t.Errorf("%s: offsets differ: dstoff = %d, srcoff = %d", testName, dstoff, srcoff) - } - if dstoff != int64(len(data)) { - t.Errorf("%s: dstoff = %d, want %d", testName, dstoff, len(data)) - } - if n != int64(len(data)) { - t.Errorf("%s: short ReadFrom: wrote %d bytes, want %d", testName, n, len(data)) - } - mustSeekStart(t, dst) - mustContainData(t, dst, data) - - // If we had a limit, check that it was updated. - if lr != nil { - if want := limit - n; lr.N != want { - t.Fatalf("%s: didn't update limit correctly: got %d, want %d", testName, lr.N, want) - } - } -} - // newCopyFileRangeTest initializes a new test for copy_file_range. // // It hooks package os' call to poll.CopyFileRange and returns the hook, // so it can be inspected. func newCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, data []byte, hook *copyFileHook, name string) { t.Helper() + name = "newCopyFileRangeTest" dst, src, data = newCopyFileTest(t, size) @@ -606,7 +279,7 @@ func newCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, data []byte return } -// newSendFileTest initializes a new test for sendfile over copy_file_range. +// newSendfileOverCopyFileRangeTest initializes a new test for sendfile over copy_file_range. // It hooks package os' call to poll.SendFile and returns the hook, // so it can be inspected. func newSendfileOverCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, data []byte, hook *copyFileHook, name string) { @@ -620,22 +293,6 @@ func newSendfileOverCopyFileRangeTest(t *testing.T, size int64) (dst, src *File, return } -// newCopyFileTest initializes a new test for copying data between files. -// It creates source and destination files, and populates the source file -// with random data of the specified size, then rewind it, so it can be -// consumed by copy_file_range(2) or sendfile(2). -func newCopyFileTest(t *testing.T, size int64) (dst, src *File, data []byte) { - src, data = createTempFile(t, "test-copy_file_range-sendfile-src", size) - - dst, err := CreateTemp(t.TempDir(), "test-copy_file_range-sendfile-dst") - if err != nil { - t.Fatal(err) - } - t.Cleanup(func() { dst.Close() }) - - return -} - // newSpliceFileTest initializes a new test for splice. // // It creates source sockets and destination file, and populates the source sockets @@ -670,29 +327,6 @@ func newSpliceFileTest(t *testing.T, proto string, size int64) (*File, net.Conn, return dst, server, data, hook, func() { <-done } } -// mustContainData ensures that the specified file contains exactly the -// specified data. -func mustContainData(t *testing.T, f *File, data []byte) { - t.Helper() - - got := make([]byte, len(data)) - if _, err := io.ReadFull(f, got); err != nil { - t.Fatal(err) - } - if !bytes.Equal(got, data) { - t.Fatalf("didn't get the same data back from %s", f.Name()) - } - if _, err := f.Read(make([]byte, 1)); err != io.EOF { - t.Fatalf("not at EOF") - } -} - -func mustSeekStart(t *testing.T, f *File) { - if _, err := f.Seek(0, io.SeekStart); err != nil { - t.Fatal(err) - } -} - func hookCopyFileRange(t *testing.T) (hook *copyFileHook, name string) { name = "hookCopyFileRange" @@ -737,16 +371,6 @@ func hookSendFileOverCopyFileRange(t *testing.T) (hook *copyFileHook, name strin return } -type copyFileHook struct { - called bool - dstfd int - srcfd int - - written int64 - handled bool - err error -} - func hookSpliceFile(t *testing.T) *spliceFileHook { h := new(spliceFileHook) h.install() diff --git a/src/os/readfrom_solaris_test.go b/src/os/readfrom_solaris_test.go new file mode 100644 index 00000000000000..2019a3c030c9c2 --- /dev/null +++ b/src/os/readfrom_solaris_test.go @@ -0,0 +1,58 @@ +// Copyright 2024 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 os_test + +import ( + "internal/poll" + . "os" + "testing" +) + +var ( + copyFileTests = []copyFileTestFunc{newSendfileTest} + copyFileHooks = []copyFileTestHook{hookSendFile} +) + +func testCopyFiles(t *testing.T, size, limit int64) { + testSendfile(t, size, limit) +} + +func testSendfile(t *testing.T, size int64, limit int64) { + dst, src, data, hook, name := newSendfileTest(t, size) + testCopyFile(t, dst, src, data, hook, limit, name) +} + +// newSendFileTest initializes a new test for sendfile over copy_file_range. +// It hooks package os' call to poll.SendFile and returns the hook, +// so it can be inspected. +func newSendfileTest(t *testing.T, size int64) (dst, src *File, data []byte, hook *copyFileHook, name string) { + t.Helper() + + name = "newSendfileTest" + + dst, src, data = newCopyFileTest(t, size) + hook, _ = hookSendFile(t) + + return +} + +func hookSendFile(t *testing.T) (hook *copyFileHook, name string) { + name = "hookSendFile" + + hook = new(copyFileHook) + orig := poll.TestHookDidSendFile + t.Cleanup(func() { + poll.TestHookDidSendFile = orig + }) + poll.TestHookDidSendFile = func(dstFD *poll.FD, src int, written int64, err error, handled bool) { + hook.called = true + hook.dstfd = dstFD.Sysfd + hook.srcfd = src + hook.written = written + hook.err = err + hook.handled = handled + } + return +} diff --git a/src/os/readfrom_unix_test.go b/src/os/readfrom_unix_test.go new file mode 100644 index 00000000000000..966a4e99623c10 --- /dev/null +++ b/src/os/readfrom_unix_test.go @@ -0,0 +1,456 @@ +// Copyright 2024 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. + +//go:build linux || solaris + +package os_test + +import ( + "bytes" + "io" + "math/rand" + . "os" + "runtime" + "strconv" + "strings" + "syscall" + "testing" + "time" +) + +type ( + copyFileTestFunc func(*testing.T, int64) (*File, *File, []byte, *copyFileHook, string) + copyFileTestHook func(*testing.T) (*copyFileHook, string) +) + +func TestCopyFile(t *testing.T) { + sizes := []int{ + 1, + 42, + 1025, + syscall.Getpagesize() + 1, + 32769, + } + t.Run("Basic", func(t *testing.T) { + for _, size := range sizes { + t.Run(strconv.Itoa(size), func(t *testing.T) { + testCopyFiles(t, int64(size), -1) + }) + } + }) + t.Run("Limited", func(t *testing.T) { + t.Run("OneLess", func(t *testing.T) { + for _, size := range sizes { + t.Run(strconv.Itoa(size), func(t *testing.T) { + testCopyFiles(t, int64(size), int64(size)-1) + }) + } + }) + t.Run("Half", func(t *testing.T) { + for _, size := range sizes { + t.Run(strconv.Itoa(size), func(t *testing.T) { + testCopyFiles(t, int64(size), int64(size)/2) + }) + } + }) + t.Run("More", func(t *testing.T) { + for _, size := range sizes { + t.Run(strconv.Itoa(size), func(t *testing.T) { + testCopyFiles(t, int64(size), int64(size)+7) + }) + } + }) + }) + t.Run("DoesntTryInAppendMode", func(t *testing.T) { + for _, newTest := range copyFileTests { + dst, src, data, hook, testName := newTest(t, 42) + + dst2, err := OpenFile(dst.Name(), O_RDWR|O_APPEND, 0755) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer dst2.Close() + + if _, err := io.Copy(dst2, src); err != nil { + t.Fatalf("%s: %v", testName, err) + } + switch runtime.GOOS { + case "illumos", "solaris": // sendfile() on SunOS allows target file with O_APPEND set. + if !hook.called { + t.Fatalf("%s: should have called the hook even with destination in O_APPEND mode", testName) + } + default: + if hook.called { + t.Fatalf("%s: hook shouldn't be called with destination in O_APPEND mode", testName) + } + } + mustSeekStart(t, dst2) + mustContainData(t, dst2, data) // through traditional means + } + }) + t.Run("CopyFileItself", func(t *testing.T) { + for _, hookFunc := range copyFileHooks { + hook, testName := hookFunc(t) + + f, err := CreateTemp("", "file-readfrom-itself-test") + if err != nil { + t.Fatalf("%s: failed to create tmp file: %v", testName, err) + } + t.Cleanup(func() { + f.Close() + Remove(f.Name()) + }) + + data := []byte("hello world!") + if _, err := f.Write(data); err != nil { + t.Fatalf("%s: failed to create and feed the file: %v", testName, err) + } + + if err := f.Sync(); err != nil { + t.Fatalf("%s: failed to save the file: %v", testName, err) + } + + // Rewind it. + if _, err := f.Seek(0, io.SeekStart); err != nil { + t.Fatalf("%s: failed to rewind the file: %v", testName, err) + } + + // Read data from the file itself. + if _, err := io.Copy(f, f); err != nil { + t.Fatalf("%s: failed to read from the file: %v", testName, err) + } + + if hook.written != 0 || hook.handled || hook.err != nil { + t.Fatalf("%s: File.readFrom is expected not to use any zero-copy techniques when copying itself."+ + "got hook.written=%d, hook.handled=%t, hook.err=%v; expected hook.written=0, hook.handled=false, hook.err=nil", + testName, hook.written, hook.handled, hook.err) + } + + switch testName { + case "hookCopyFileRange": + // For copy_file_range(2), it fails and returns EINVAL when the source and target + // refer to the same file and their ranges overlap. The hook should be called to + // get the returned error and fall back to generic copy. + if !hook.called { + t.Fatalf("%s: should have called the hook", testName) + } + case "hookSendFile", "hookSendFileOverCopyFileRange": + // For sendfile(2), it allows the source and target to refer to the same file and overlap. + // The hook should not be called and just fall back to generic copy directly. + if hook.called { + t.Fatalf("%s: shouldn't have called the hook", testName) + } + default: + t.Fatalf("%s: unexpected test", testName) + } + + // Rewind it. + if _, err := f.Seek(0, io.SeekStart); err != nil { + t.Fatalf("%s: failed to rewind the file: %v", testName, err) + } + + data2, err := io.ReadAll(f) + if err != nil { + t.Fatalf("%s: failed to read from the file: %v", testName, err) + } + + // It should wind up a double of the original data. + if s := strings.Repeat(string(data), 2); s != string(data2) { + t.Fatalf("%s: file contained %s, expected %s", testName, data2, s) + } + } + }) + t.Run("NotRegular", func(t *testing.T) { + t.Run("BothPipes", func(t *testing.T) { + for _, hookFunc := range copyFileHooks { + hook, testName := hookFunc(t) + + pr1, pw1, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr1.Close() + defer pw1.Close() + + pr2, pw2, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr2.Close() + defer pw2.Close() + + // The pipe is empty, and PIPE_BUF is large enough + // for this, by (POSIX) definition, so there is no + // need for an additional goroutine. + data := []byte("hello") + if _, err := pw1.Write(data); err != nil { + t.Fatalf("%s: %v", testName, err) + } + pw1.Close() + + n, err := io.Copy(pw2, pr1) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if n != int64(len(data)) { + t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) + } + switch runtime.GOOS { + case "illumos", "solaris": + // On SunOS, We rely on File.Stat to get the size of the file, + // which doesn't work for pipe. + if hook.called { + t.Fatalf("%s: shouldn't have called the hook with a source of pipe", testName) + } + default: + if !hook.called { + t.Fatalf("%s: should have called the hook with a source of pipe", testName) + } + } + pw2.Close() + mustContainData(t, pr2, data) + } + }) + t.Run("DstPipe", func(t *testing.T) { + for _, newTest := range copyFileTests { + dst, src, data, hook, testName := newTest(t, 255) + dst.Close() + + pr, pw, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr.Close() + defer pw.Close() + + n, err := io.Copy(pw, src) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if n != int64(len(data)) { + t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) + } + if !hook.called { + t.Fatalf("%s: should have called the hook", testName) + } + pw.Close() + mustContainData(t, pr, data) + } + }) + t.Run("SrcPipe", func(t *testing.T) { + for _, newTest := range copyFileTests { + dst, src, data, hook, testName := newTest(t, 255) + src.Close() + + pr, pw, err := Pipe() + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + defer pr.Close() + defer pw.Close() + + // The pipe is empty, and PIPE_BUF is large enough + // for this, by (POSIX) definition, so there is no + // need for an additional goroutine. + if _, err := pw.Write(data); err != nil { + t.Fatalf("%s: %v", testName, err) + } + pw.Close() + + n, err := io.Copy(dst, pr) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if n != int64(len(data)) { + t.Fatalf("%s: transferred %d, want %d", testName, n, len(data)) + } + switch runtime.GOOS { + case "illumos", "solaris": + // On SunOS, We rely on File.Stat to get the size of the file, + // which doesn't work for pipe. + if hook.called { + t.Fatalf("%s: shouldn't have called the hook with a source of pipe", testName) + } + default: + if !hook.called { + t.Fatalf("%s: should have called the hook with a source of pipe", testName) + } + } + mustSeekStart(t, dst) + mustContainData(t, dst, data) + } + }) + }) + t.Run("Nil", func(t *testing.T) { + var nilFile *File + anyFile, err := CreateTemp("", "") + if err != nil { + t.Fatal(err) + } + defer Remove(anyFile.Name()) + defer anyFile.Close() + + if _, err := io.Copy(nilFile, nilFile); err != ErrInvalid { + t.Errorf("io.Copy(nilFile, nilFile) = %v, want %v", err, ErrInvalid) + } + if _, err := io.Copy(anyFile, nilFile); err != ErrInvalid { + t.Errorf("io.Copy(anyFile, nilFile) = %v, want %v", err, ErrInvalid) + } + if _, err := io.Copy(nilFile, anyFile); err != ErrInvalid { + t.Errorf("io.Copy(nilFile, anyFile) = %v, want %v", err, ErrInvalid) + } + + if _, err := nilFile.ReadFrom(nilFile); err != ErrInvalid { + t.Errorf("nilFile.ReadFrom(nilFile) = %v, want %v", err, ErrInvalid) + } + if _, err := anyFile.ReadFrom(nilFile); err != ErrInvalid { + t.Errorf("anyFile.ReadFrom(nilFile) = %v, want %v", err, ErrInvalid) + } + if _, err := nilFile.ReadFrom(anyFile); err != ErrInvalid { + t.Errorf("nilFile.ReadFrom(anyFile) = %v, want %v", err, ErrInvalid) + } + }) +} + +func testCopyFile(t *testing.T, dst, src *File, data []byte, hook *copyFileHook, limit int64, testName string) { + // If we have a limit, wrap the reader. + var ( + realsrc io.Reader + lr *io.LimitedReader + ) + if limit >= 0 { + lr = &io.LimitedReader{N: limit, R: src} + realsrc = lr + if limit < int64(len(data)) { + data = data[:limit] + } + } else { + realsrc = src + } + + // Now call ReadFrom (through io.Copy), which will hopefully call + // poll.CopyFileRange or poll.SendFile. + n, err := io.Copy(dst, realsrc) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + + // If we didn't have a limit or had a positive limit, we should have called + // poll.CopyFileRange or poll.SendFile with the right file descriptor arguments. + if limit != 0 && !hook.called { + t.Fatalf("%s: never called the hook", testName) + } + if hook.called && hook.dstfd != int(dst.Fd()) { + t.Fatalf("%s: wrong destination file descriptor: got %d, want %d", testName, hook.dstfd, dst.Fd()) + } + if hook.called && hook.srcfd != int(src.Fd()) { + t.Fatalf("%s: wrong source file descriptor: got %d, want %d", testName, hook.srcfd, src.Fd()) + } + + // Check that the offsets after the transfer make sense, that the size + // of the transfer was reported correctly, and that the destination + // file contains exactly the bytes we expect it to contain. + dstoff, err := dst.Seek(0, io.SeekCurrent) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + srcoff, err := src.Seek(0, io.SeekCurrent) + if err != nil { + t.Fatalf("%s: %v", testName, err) + } + if dstoff != srcoff { + t.Errorf("%s: offsets differ: dstoff = %d, srcoff = %d", testName, dstoff, srcoff) + } + if dstoff != int64(len(data)) { + t.Errorf("%s: dstoff = %d, want %d", testName, dstoff, len(data)) + } + if n != int64(len(data)) { + t.Errorf("%s: short ReadFrom: wrote %d bytes, want %d", testName, n, len(data)) + } + mustSeekStart(t, dst) + mustContainData(t, dst, data) + + // If we had a limit, check that it was updated. + if lr != nil { + if want := limit - n; lr.N != want { + t.Fatalf("%s: didn't update limit correctly: got %d, want %d", testName, lr.N, want) + } + } +} + +// mustContainData ensures that the specified file contains exactly the +// specified data. +func mustContainData(t *testing.T, f *File, data []byte) { + t.Helper() + + got := make([]byte, len(data)) + if _, err := io.ReadFull(f, got); err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, data) { + t.Fatalf("didn't get the same data back from %s", f.Name()) + } + if _, err := f.Read(make([]byte, 1)); err != io.EOF { + t.Fatalf("not at EOF") + } +} + +func mustSeekStart(t *testing.T, f *File) { + if _, err := f.Seek(0, io.SeekStart); err != nil { + t.Fatal(err) + } +} + +// newCopyFileTest initializes a new test for copying data between files. +// It creates source and destination files, and populates the source file +// with random data of the specified size, then rewind it, so it can be +// consumed by copy_file_range(2) or sendfile(2). +func newCopyFileTest(t *testing.T, size int64) (dst, src *File, data []byte) { + src, data = createTempFile(t, "test-copy-file-src", size) + + dst, err := CreateTemp(t.TempDir(), "test-copy-file-dst") + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { dst.Close() }) + + return +} + +type copyFileHook struct { + called bool + dstfd int + srcfd int + + written int64 + handled bool + err error +} + +func createTempFile(t *testing.T, name string, size int64) (*File, []byte) { + f, err := CreateTemp(t.TempDir(), name) + if err != nil { + t.Fatalf("failed to create temporary file: %v", err) + } + t.Cleanup(func() { + f.Close() + }) + + randSeed := time.Now().Unix() + t.Logf("random data seed: %d\n", randSeed) + prng := rand.New(rand.NewSource(randSeed)) + data := make([]byte, size) + prng.Read(data) + if _, err := f.Write(data); err != nil { + t.Fatalf("failed to create and feed the file: %v", err) + } + if err := f.Sync(); err != nil { + t.Fatalf("failed to save the file: %v", err) + } + if _, err := f.Seek(0, io.SeekStart); err != nil { + t.Fatalf("failed to rewind the file: %v", err) + } + + return f, data +} diff --git a/src/os/writeto_linux_test.go b/src/os/writeto_linux_test.go index a6f8980d10614c..59caecd0da411f 100644 --- a/src/os/writeto_linux_test.go +++ b/src/os/writeto_linux_test.go @@ -8,13 +8,11 @@ import ( "bytes" "internal/poll" "io" - "math/rand" "net" . "os" "strconv" "syscall" "testing" - "time" ) func TestSendFile(t *testing.T) { @@ -133,30 +131,3 @@ type sendFileHook struct { handled bool err error } - -func createTempFile(t *testing.T, name string, size int64) (*File, []byte) { - f, err := CreateTemp(t.TempDir(), name) - if err != nil { - t.Fatalf("failed to create temporary file: %v", err) - } - t.Cleanup(func() { - f.Close() - }) - - randSeed := time.Now().Unix() - t.Logf("random data seed: %d\n", randSeed) - prng := rand.New(rand.NewSource(randSeed)) - data := make([]byte, size) - prng.Read(data) - if _, err := f.Write(data); err != nil { - t.Fatalf("failed to create and feed the file: %v", err) - } - if err := f.Sync(); err != nil { - t.Fatalf("failed to save the file: %v", err) - } - if _, err := f.Seek(0, io.SeekStart); err != nil { - t.Fatalf("failed to rewind the file: %v", err) - } - - return f, data -} diff --git a/src/os/zero_copy_linux.go b/src/os/zero_copy_linux.go index 4492c56bf59f4d..42e05d4e1f8536 100644 --- a/src/os/zero_copy_linux.go +++ b/src/os/zero_copy_linux.go @@ -15,15 +15,6 @@ var ( pollSplice = poll.Splice ) -// wrapSyscallError takes an error and a syscall name. If the error is -// a syscall.Errno, it wraps it in an os.SyscallError using the syscall name. -func wrapSyscallError(name string, err error) error { - if _, ok := err.(syscall.Errno); ok { - err = NewSyscallError(name, err) - } - return err -} - func (f *File) writeTo(w io.Writer) (written int64, handled bool, err error) { pfd, network := getPollFDAndNetwork(w) // TODO(panjf2000): same as File.spliceToFile. @@ -187,21 +178,6 @@ func getPollFDAndNetwork(i any) (*poll.FD, poll.String) { return irc.PollFD(), irc.Network() } -// tryLimitedReader tries to assert the io.Reader to io.LimitedReader, it returns the io.LimitedReader, -// the underlying io.Reader and the remaining amount of bytes if the assertion succeeds, -// otherwise it just returns the original io.Reader and the theoretical unlimited remaining amount of bytes. -func tryLimitedReader(r io.Reader) (*io.LimitedReader, io.Reader, int64) { - var remain int64 = 1<<63 - 1 // by default, copy until EOF - - lr, ok := r.(*io.LimitedReader) - if !ok { - return nil, r, remain - } - - remain = lr.N - return lr, lr.R, remain -} - func isUnixOrTCP(network string) bool { switch network { case "tcp", "tcp4", "tcp6", "unix": diff --git a/src/os/zero_copy_posix.go b/src/os/zero_copy_posix.go new file mode 100644 index 00000000000000..161144fe23465b --- /dev/null +++ b/src/os/zero_copy_posix.go @@ -0,0 +1,36 @@ +// Copyright 2024 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. + +//go:build unix || js || wasip1 || windows + +package os + +import ( + "io" + "syscall" +) + +// wrapSyscallError takes an error and a syscall name. If the error is +// a syscall.Errno, it wraps it in an os.SyscallError using the syscall name. +func wrapSyscallError(name string, err error) error { + if _, ok := err.(syscall.Errno); ok { + err = NewSyscallError(name, err) + } + return err +} + +// tryLimitedReader tries to assert the io.Reader to io.LimitedReader, it returns the io.LimitedReader, +// the underlying io.Reader and the remaining amount of bytes if the assertion succeeds, +// otherwise it just returns the original io.Reader and the theoretical unlimited remaining amount of bytes. +func tryLimitedReader(r io.Reader) (*io.LimitedReader, io.Reader, int64) { + var remain int64 = 1<<63 - 1 // by default, copy until EOF + + lr, ok := r.(*io.LimitedReader) + if !ok { + return nil, r, remain + } + + remain = lr.N + return lr, lr.R, remain +} diff --git a/src/os/zero_copy_solaris.go b/src/os/zero_copy_solaris.go new file mode 100644 index 00000000000000..9d9eca1ae7c5b5 --- /dev/null +++ b/src/os/zero_copy_solaris.go @@ -0,0 +1,111 @@ +// Copyright 2024 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 os + +import ( + "internal/poll" + "io" + "syscall" +) + +func (f *File) writeTo(w io.Writer) (written int64, handled bool, err error) { + return 0, false, nil +} + +// readFrom is basically a refactor of net.sendFile, but adapted to work for the target of *File. +func (f *File) readFrom(r io.Reader) (written int64, handled bool, err error) { + // SunOS uses 0 as the "until EOF" value. + // If you pass in more bytes than the file contains, it will + // loop back to the beginning ad nauseam until it's sent + // exactly the number of bytes told to. As such, we need to + // know exactly how many bytes to send. + var remain int64 = 0 + + lr, ok := r.(*io.LimitedReader) + if ok { + remain, r = lr.N, lr.R + if remain <= 0 { + return 0, true, nil + } + } + + var src *File + switch v := r.(type) { + case *File: + src = v + case fileWithoutWriteTo: + src = v.File + default: + return 0, false, nil + } + + if src.checkValid("ReadFrom") != nil { + // Avoid returning the error as we report handled as false, + // leave further error handling as the responsibility of the caller. + return 0, false, nil + } + + // If fd_in and fd_out refer to the same file and the source and target ranges overlap, + // sendfile(2) on SunOS will allow this kind of overlapping and work like a memmove, + // in this case the file content remains the same after copying, which is not what we want. + // Thus, we just bail out here and leave it to generic copy when it's a file copying itself. + if f.pfd.Sysfd == src.pfd.Sysfd { + return 0, false, nil + } + + if remain == 0 { + fi, err := src.Stat() + if err != nil { + return 0, false, err + } + + remain = fi.Size() + } + + // The other quirk with SunOS' sendfile implementation + // is that it doesn't use the current position of the file + // -- if you pass it offset 0, it starts from offset 0. + // There's no way to tell it "start from current position", + // so we have to manage that explicitly. + pos, err := src.Seek(0, io.SeekCurrent) + if err != nil { + return + } + + sc, err := src.SyscallConn() + if err != nil { + return + } + + // System call sendfile()s on Solaris and illumos support file-to-file copying. + // Check out https://docs.oracle.com/cd/E86824_01/html/E54768/sendfile-3ext.html and + // https://docs.oracle.com/cd/E88353_01/html/E37843/sendfile-3c.html and + // https://illumos.org/man/3EXT/sendfile for more details. + rerr := sc.Read(func(fd uintptr) bool { + written, err, handled = poll.SendFile(&f.pfd, int(fd), pos, remain) + return true + }) + if lr != nil { + lr.N = remain - written + } + + // This is another quirk on SunOS: sendfile() claims to support + // out_fd as a regular file but returns EINVAL when the out_fd is not a + // socket of SOCK_STREAM, while it actually sends out data anyway and updates + // the file offset. In this case, we can just ignore the error. + if err == syscall.EINVAL && written > 0 { + err = nil + } + if err == nil { + err = rerr + } + + _, err1 := src.Seek(written, io.SeekCurrent) + if err1 != nil && err == nil { + return written, handled, err1 + } + + return written, handled, wrapSyscallError("sendfile", err) +} diff --git a/src/os/zero_copy_stub.go b/src/os/zero_copy_stub.go index 9ec5808101889d..fb70124fca098a 100644 --- a/src/os/zero_copy_stub.go +++ b/src/os/zero_copy_stub.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 !linux +//go:build !linux && !solaris package os From b67443459a5bbe0e125e34538b4ce3c895de9efd Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 8 Aug 2024 21:03:13 -0700 Subject: [PATCH 236/866] spec: clarify prose for embedded struct fields The spec says that an embedded field must be specified as a type name (or a pointer to a type name). This is explicit in the prose and the FieldDecl syntax. However, the prose on promoted methods required a named type (originally the term used for a "defined type"). Before the introduction of alias types, type names could only refer to named/defined types, so the prose was ok. With the introduction of alias types in Go 1.9, we distinguished between defined types (i.e., types given a name through a type declaration) and type aliases (types given an alternative name), and retired the notion of a named type since any type with a name (alias type and defined type) could be considered a "named type". To make things worse, with Go 1.18 we re-introduced the notion of a named type which now includes predeclared types, defined types, type parameters (and with that type aliases denoting named types). In the process some of the wording on method promotion didn't get updated correctly. At attempt to fix this was made with CL 406054, but while that CL's description correctly explained the intent, the CL changed the prose from "defined type" to "named type" (which had the new meaning after Go 1.18), and thus did not fix the issue. This CL fixes that fix by using the term "type name". This makes the prose consistent for embedded types and in turn clarifies that methods of embedded alias types (defined or not) can be promoted, consistent with the implementation. While at it, also document that the type of an embedded field cannot be a type parameter. This restriction has been in place since the introduction of type parameters with Go 1.18 and is enforced by the compiler. Fixes #66540. For #41687. Change-Id: If9e6a03d7b84d24a3e6a5ceda1d46bda99bdf1f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/603958 Reviewed-by: Ian Lance Taylor TryBot-Bypass: Robert Griesemer Reviewed-by: Robert Griesemer Reviewed-by: Alan Donovan Reviewed-by: Axel Wagner --- doc/go_spec.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index b5b7f15bbd369b..06aeeae6582b56 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ @@ -1086,7 +1086,7 @@

Struct types

An embedded field must be specified as a type name T or as a pointer to a non-interface type name *T, and T itself may not be -a pointer type. The unqualified type name acts as the field name. +a pointer type or type parameter. The unqualified type name acts as the field name.

@@ -1127,7 +1127,7 @@ 

Struct types

-Given a struct type S and a named type +Given a struct type S and a type name T, promoted methods are included in the method set of the struct as follows:

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