aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-04-21test: rename live_syscall.go to live_uintptrkeepalive.goMichael Pratt
CL 388095 will change this file significantly. Move it preemptively to ensure git tracks the move properly. For #51087 Change-Id: I1408aecf8675723041b64e54cf44cdec38cc655c Reviewed-on: https://go-review.googlesource.com/c/go/+/388094 Run-TryBot: Michael Pratt <mpratt@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-21go/build: replace a call to os.Environ with (*exec.Cmd).EnvironBryan C. Mills
This is a code simplification using the new API added in #50599. Change-Id: Icb9628bcd0daa3dc2d653e9654b38099730137d1 Reviewed-on: https://go-review.googlesource.com/c/go/+/401535 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-21cmd/go: replace some calls to base.AppendPWD with cmd.EnvironBryan C. Mills
With #50599 implemented, base.AppendPWD is redundant if cmd.Env would otherwise be nil, and calls to os.Environ followed by base.AppendPWD can be replaced by a simpler call to cmd.Environ. Updates #50599. Change-Id: I94a22e2a4cc8e83c815ac41702ea0b1ee5034ecc Reviewed-on: https://go-review.googlesource.com/c/go/+/401534 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-21net: use fastrand64 in randIntzhangyunhao
Change-Id: If3d8391d81e8de869dbb3c857f0570817e8aa440 Reviewed-on: https://go-review.googlesource.com/c/go/+/400914 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-21runtime: use fastrand64 in mapiterinitzhangyunhao
Change-Id: I5698c7576a0f39ae62de7bea64286ac8e578d421 Reviewed-on: https://go-review.googlesource.com/c/go/+/400916 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-21hash/maphash: use fastrand64 in MakeSeedzhangyunhao
Change-Id: I5ccbcea4c53658136b25ca608faec19eeec2e908 Reviewed-on: https://go-review.googlesource.com/c/go/+/400915 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-21os/exec: set PWD implicitly if Dir is non-empty and Env is nilBryan C. Mills
Fixes #50599. Change-Id: I4e5dbb3972cdf21ede049567bfb98f2c992c5849 Reviewed-on: https://go-review.googlesource.com/c/go/+/401340 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-21Revert "cmd/go/internal/test: wrap os.Stdout always"Bryan Mills
This reverts CL 400877. Reason for revert: broke TestScript/test_output_wait and the regression test for #18153 on certain builders. Fixes #52461. Change-Id: I98627ce5e22088b0784be502c459480c41ba353a Reviewed-on: https://go-review.googlesource.com/c/go/+/401494 Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Michael Pratt <mpratt@google.com>
2022-04-21crypto/x509: use SAN when comparing certs during path buildingRoland Shoemaker
Per RFC 4158 Section 2.4.2, when we are discarding candidate certificates during path building, use the SANs as well as subject and public key when checking whether a certificate is already present in the built path. This supports the case where a certificate in the chain (typically a leaf) has the exact same subject and public key as another certificate in the chain (typically its parent) but has SANs which don't match. Change-Id: I212c234e94a1f6afbe9691e4a3ba257461db3a7e Reviewed-on: https://go-review.googlesource.com/c/go/+/401115 Reviewed-by: Roland Shoemaker <roland@golang.org> Run-TryBot: Roland Shoemaker <roland@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Damien Neil <dneil@google.com>
2022-04-21crypto/tls: reject duplicate extensionsRoland Shoemaker
Does what it says on the tin. Fixes #51088 Change-Id: I12c0fa6bba1c1ce96c1ad31ba387c77a93f801c9 Reviewed-on: https://go-review.googlesource.com/c/go/+/384894 Reviewed-by: Roland Shoemaker <roland@golang.org> Run-TryBot: Roland Shoemaker <roland@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Damien Neil <dneil@google.com>
2022-04-21[dev.boringcrypto] all: merge master into dev.boringcryptoChressie Himpel
Change-Id: I30dbbe508a6252d50b4154cb9a8299cf0a054449
2022-04-21os/exec: preserve original order of entries in dedupEnvBryan C. Mills
Once #50599 is implemented, the entries will be observable via the Environ method. I find it confusing for later entries in the list to jump arbitrarily far forward based on entries for the same key that no longer exist. This also fixes the deduplication logic for the degenerate Windows keys observed in #49886, which were previously deduplicated as empty keys. (It does not do anything about the even-more-degenerate keys observed in #52436.) For #50599. Change-Id: Ia7cd2200ec34ccc4b9d18631cb513194dc420c25 Reviewed-on: https://go-review.googlesource.com/c/go/+/401339 Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-21cmd/go/internal/test: wrap os.Stdout alwaysAndrew Gerrand
There is an issue where 'go test' will hang after the tests complete if a test starts a sub-process that does not exit (see #24050). However, go test only exhibits that behavior when a package name is explicitly passed as an argument. If 'go test' is invoked without any package arguments then the package in the working directory is assumed, however in that case (and only that case) os.Stdout is used as the test process's cmd.Stdout, which does *not* cause 'go test' wait for the sub-process to exit (see #23019). This change wraps os.Stdout in an io.Writer struct in this case, hiding the *os.File from the os/exec package, causing cmd.Wait to always wait for the full output from the test process and any of its sub-processes. In other words, this makes 'go test' exhibit the same behavior as 'go test .' (or 'go test ./...' and so on). Update #23019 Update #24050 Change-Id: Ica09bf156f3b017f9a31aad91ed0f16a7837195b Reviewed-on: https://go-review.googlesource.com/c/go/+/400877 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Andrew Gerrand <adg@golang.org> Auto-Submit: Andrew Gerrand <adg@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Andrew Gerrand <adg@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-20runtime: add fastrand64zhangyunhao
Support fastrand64 in the runtime, although fastrand uses wyrand to generate 64-bit random number, it still returns uint32. In some cases, we need to generate a 64-bit random number, the new API would be faster and easier to use, and at least we can use the new function in these places: src/net/dnsclient.go:randInt() src/hash/maphash/maphash.go:MakeSeed() src/runtime/map.go:mapiterinit() name time/op Fastrand-16 0.09ns ± 5% Fastrand64-16 0.09ns ± 6% Change-Id: Ibb97378c7ca59bc7dc15535d4872fa58ea112e6a Reviewed-on: https://go-review.googlesource.com/c/go/+/400734 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-20reflect: remove unused overflowPad variablePhil Kulin
overflowPad variable in bucketOf function is a holdover from a NaCl port and never used now. Change-Id: Ib68fdb054e1b6a655ffbfd34521a3f8773a22694 GitHub-Last-Rev: f281be9c115a87605fd28b39c0b09eed54cc774a GitHub-Pull-Request: golang/go#52449 Reviewed-on: https://go-review.googlesource.com/c/go/+/401274 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-20net/http: drop mimesniff for audio/basicSean Liao
The WHATWG Mime Sniffing Standard we follow dropped support for .snd / audio/basic. https://github.com/whatwg/mimesniff/issues/151 Change-Id: Iae1bd8b29063b06b5b3909a944e12ead5974a526 Reviewed-on: https://go-review.googlesource.com/c/go/+/400754 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Auto-Submit: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Damien Neil <dneil@google.com>
2022-04-20cmd/compile/internal/syntax: correct an error stringRobert Griesemer
When we have an error in a function type used in an expression we don't know until we see an opening { whether we have a function literal or a function type. Use "function type" as context because that's always correct in the specific error message. Change-Id: I9aad8fcddf31ae53daa53cebd2c2001f08eabde0 Reviewed-on: https://go-review.googlesource.com/c/go/+/401316 Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
2022-04-20cmd/go: don't compute Deps fields if they're not neededMichael Matloob
If the user provides the -json flag to explicitly specify fields, but doesn't specify the Deps or DepsErrors fields, skip computing the deps fields. For #29666 Change-Id: I15596c374aba1af13bdf5808d11d54abdc838667 Reviewed-on: https://go-review.googlesource.com/c/go/+/392495 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Michael Matloob <matloob@golang.org> Auto-Submit: Michael Matloob <matloob@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-20cmd/link: fix StackCheckOutput on AIXAustin Clements
This test forces GOARCH to amd64, but currently uses the default GOOS. This works on every OS that supports amd64, which is every OS we support except AIX. Hence, on AIX this fails with an unsupported GOOS/GOARCH combination. Fix this by forcing GOOS to linux. Fixes #52451. Change-Id: I9321dd6386c7ef0fe2b47d77ed900aafc53f2a46 Reviewed-on: https://go-review.googlesource.com/c/go/+/401334 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Bryan Mills <bcmills@google.com> Auto-Submit: Austin Clements <austin@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-20net/http: deflake TestTransportConnectionCloseOnRequestBrad Fitzpatrick
Fixes #52450 (hopefully) Change-Id: Ib723f8efb4a13af1b98c25cd02935425172d01e6 Reviewed-on: https://go-review.googlesource.com/c/go/+/401314 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Damien Neil <dneil@google.com>
2022-04-20crypto/rand: apply the same max read size on Illumos as on SolarisBryan C. Mills
This case was missed in CL 370894, and masked by the lack of an Illumos TryBot. Fixes #52452. Change-Id: I7cda193e33c11a9d04eb888fdb5ec9218e6ed1b5 Reviewed-on: https://go-review.googlesource.com/c/go/+/401294 Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Filippo Valsorda <valsorda@google.com>
2022-04-20go/internal/srcimporter: add context to cgo errorsBryan C. Mills
An error message like "could not import os/user (exit status 1)" (observed in https://go.dev/issue/52407) is fairly inscrutable. On the other hand, srcimporter doesn't report errors with quite enough structure to dump the entire stderr output from 'go tool cgo' without potentially overwhelming the caller. Here, we split the difference by describing which command failed but not printing the output of that command. For #52407, that would at least provide a stronger clue connecting to #52408. Change-Id: Iabdc95b17ba20a0f6ff38e5c7084e5081e1ef5e8 Reviewed-on: https://go-review.googlesource.com/c/go/+/400817 Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-20[dev.boringcrypto] all: merge master into dev.boringcryptoChressie Himpel
Change-Id: I52009bf809dda4fbcff03aa82d0ea8aa2a978fa2
2022-04-20cmd/go/internal/base: in AppendPWD, check that PWD is absoluteBryan C. Mills
The POSIX standard requires the PWD variable to be an absolute path. Fixes #46832 Change-Id: I1938592538633e1a0a0958276f1fefc3c4808399 Reviewed-on: https://go-review.googlesource.com/c/go/+/378396 Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Michael Matloob <matloob@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19spec: clarify rules for type set construction of an interfaceRobert Griesemer
Be explicit that we always mean non-interface types when we talk about sets of types. Also, clarify that the quantification "all non-interface types" means all such types in all possible programs, not just the current program. Per suggestion from Philip Wadler. Change-Id: Ibc7b5823164e547bfcee85d4e523e58c7c27ac8a Reviewed-on: https://go-review.googlesource.com/c/go/+/398655 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
2022-04-19cmd/compile/internal/types2: use correct value of iotaRobert Griesemer
Fixes #52438. Change-Id: I5cbf8c448dba037e9e0c5fe8f209401d6bf7d43f Reviewed-on: https://go-review.googlesource.com/c/go/+/401134 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
2022-04-19cmd/compile/internal/types2: don't crash in overflow checkRobert Griesemer
Be careful before accessing an operand's expr field (which may be nil in some rare cases). While at it, factor out position information so that it's only computed when there's an error, which is almost never. In go/types, remove an unnecessary argument to Checker.overflow. The code is otherwise ok as it's structured slightly differently due to the way positions are recorded in AST nodes. Fixes #52401. Change-Id: I447ebd9bb0c33eb6bff5e7b4d5aee37ceb0a4b14 Reviewed-on: https://go-review.googlesource.com/c/go/+/400798 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
2022-04-19cmd/compile/internal/types2: permit parentheses around types in interfacesRobert Griesemer
Before Go 1.18, an embedded type name in an interface could not be parenthesized. With generalized embedding of types in interfaces, where one might write ~(chan<- int) for clarity (making clear that the ~ applies to the entire channel type), it also makes sense to permit (chan<- int), or (int) for that matter. Adjust the parser accordingly to match the spec. (go/types already accepts the notation as specified by the spec.) Fixes #52391. Change-Id: Ifdd9a199c5ccc3473b2dac40dbca31d2df10d12b Reviewed-on: https://go-review.googlesource.com/c/go/+/400797 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: Robert Griesemer <gri@google.com>
2022-04-19crypto/rand: remove all bufferingJason A. Donenfeld
The kernel's RNG is fast enough, and buffering means taking locks, which we don't want to do. So just remove all buffering. This also means the randomness we get is "fresher". That also means we don't need any locking, making this potentially faster if multiple cores are hitting GetRandom() at the same time on newer Linuxes. Also, change the build tag of the tests to be 'unix' instead of enumerating them. Change-Id: Ia773fab768270d2aa20c0649f4171c5326b71d02 Reviewed-on: https://go-review.googlesource.com/c/go/+/390038 Reviewed-by: Filippo Valsorda <valsorda@google.com> Run-TryBot: Jason Donenfeld <Jason@zx2c4.com> Auto-Submit: Jason Donenfeld <Jason@zx2c4.com> Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19crypto/rand: batch and buffer calls to getrandom/getentropyJason A. Donenfeld
We're using bufio to batch reads of /dev/urandom to 4k, but we weren't doing the same on newer platforms with getrandom/getentropy. Since the overhead is the same for these -- one syscall -- we should batch reads of these into the same 4k buffer. While we're at it, we can simplify a lot of the constant dispersal. This also adds a new test case to make sure the buffering works as desired. Change-Id: I7297d4aa795c00712e6484b841cef8650c2be4ef Reviewed-on: https://go-review.googlesource.com/c/go/+/370894 Reviewed-by: Filippo Valsorda <valsorda@google.com> Run-TryBot: Jason Donenfeld <Jason@zx2c4.com> Auto-Submit: Jason Donenfeld <Jason@zx2c4.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-19cmd/compile: more negation related generic SSA rewrite rulesJorropo
The x + (-y) => x - y rule is hitted 75 times while building stage 3 and tools and make the linux-amd64 go binary 0.007% smaller. It transform: NEG AX ADD BX, AX Into: SUB BX, AX Which is 2X faster (assuming this assembly in a vacum). The x ^ (-1) => ^x rule is not hitted in the toolchain. It transforms: XOR $-1, AX Into: NOT AX Which is more compact as it doesn't encode the immediate. Cache usage aside, this does not affect performance (assuming this assembly in a vacum). On my ryzen 3600, with some surrouding code, this randomly might be 2X faster, I guess this has to do with loading the immediate into a temporary register. Combined to an other rule that already exists it also rewrite manual two's complement negation from: XOR $-1, AX INC AX Into: NEG AX Which is 2X faster. The other rules just eliminates similar trivial cases and help constants folding. This should generalise to other architectures. Change-Id: Ia1e51b340622e7ed88e5d856f3b1aa424aa039de GitHub-Last-Rev: ce35ff2efdd8911f1e812806ec41a41e8cabc4c7 GitHub-Pull-Request: golang/go#52395 Reviewed-on: https://go-review.googlesource.com/c/go/+/400714 Reviewed-by: Keith Randall <khr@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-19reflect: adjust MapRange allocation test for noopt builder, take 2Keith Randall
Change-Id: If2887f84b3d14fac3c059fc5bad4186ec9d69d0f Reviewed-on: https://go-review.googlesource.com/c/go/+/401077 Reviewed-by: Joseph Tsai <joetsai@digital-static.net> Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Keith Randall <khr@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-19reflect: adjust MapRange allocation test for noopt builderKeith Randall
Change-Id: I55899ff0ed2c3c01f24ab1ccf133ce4236049e39 Reviewed-on: https://go-review.googlesource.com/c/go/+/401074 Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Joseph Tsai <joetsai@digital-static.net> Reviewed-by: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2022-04-19doc/go1.19: move the description of the runtime.GOROOT change from 'cmd/go' ↵Bryan C. Mills
to 'runtime' Even though the change in the behavior of 'runtime.GOROOT' was not actually due to a change in the runtime package proper, I suspect that users who notice it will look for the release note in that section, not the 'cmd/go' section. Fixes #51461. Change-Id: I271752968d4152a7fdf3e170537e3072bf87ce86 Reviewed-on: https://go-review.googlesource.com/c/go/+/400814 Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-19io/ioutil: provide an equivalent for the deprecated ReadDirDaniel Martí
All APIs in the now-deprecated io/ioutil package have a direct replacement in either the io or os package with the same signature, with the notable exception of ioutil.ReadDir, as os.ReadDir has a slightly different signature with fs.DirEntry rather than fs.FileInfo. New code can easily make use of []fs.DirEntry directly, but existing code may need to continue using []fs.FileInfo for backwards compatibility reasons. For instance, I had a bit of code that exposed the slice as a public API, like: return ioutil.ReadDir(name) It took me a couple of minutes to figure out what the exact equivalent in terms of os.ReadDir would be, and a code sample would have helped. Add one for future reference. For #42026. For #51927. Change-Id: I76d46cd7d68fc609c873821755fdcfc299ffd56c Reviewed-on: https://go-review.googlesource.com/c/go/+/399854 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
2022-04-19cmd/link: faster algorithm for nosplit stack checking, better errorsAustin Clements
The linker performs a global analysis of all nosplit call chains to check they fit in the stack space ensured by splittable functions. That analysis has two problems right now: 1. It's inefficient. It performs a top-down analysis, starting with every nosplit function and the nosplit stack limit and walking *down* the call graph to compute how much stack remains at every call. As a result, it visits the same functions over and over, often with different remaining stack depths. This approach is historical: this check was originally written in C and this approach avoided the need for any interesting data structures. 2. If some call chain is over the limit, it only reports a single call chain. As a result, if the check does fail, you often wind up playing whack-a-mole by guessing where the problem is in the one chain, trying to reduce the stack size, and then seeing if the link works or reports a different path. This CL completely rewrites the nosplit stack check. It now uses a bottom-up analysis, computing the maximum stack height required by every function's call tree. This visits every function exactly once, making it much more efficient. It uses slightly more heap space for intermediate storage, but still very little in the scheme of the overall link. For example, when linking cmd/go, the new algorithm virtually eliminates the time spent in this pass, and reduces overall link time: │ before │ after │ │ sec/op │ sec/op vs base │ Dostkcheck 7.926m ± 4% 1.831m ± 6% -76.90% (p=0.000 n=20) TotalTime 301.3m ± 1% 296.4m ± 3% -1.62% (p=0.040 n=20) │ before │ after │ │ B/op │ B/op vs base │ Dostkcheck 40.00Ki ± 0% 212.15Ki ± 0% +430.37% (p=0.000 n=20) Most of this time is spent analyzing the runtime, so for larger binaries, the total time saved is roughly the same, and proportionally less of the overall link. If the new implementation finds an error, it redoes the analysis, switching to preferring quality of error reporting over performance. For error reporting, it computes stack depths top-down (like the old algorithm), and reports *all* paths that are over the stack limit, presented as a tree for compactness. For example, this is the output from a simple test case from test/nosplit with two over-limit paths from f1: main.f1: nosplit stack overflow main.f1 grows 768 bytes, calls main.f2 grows 56 bytes, calls main.f4 grows 48 bytes 80 bytes over limit grows 768 bytes, calls main.f3 grows 104 bytes 80 bytes over limit While we're here, we do a few nice cleanups: - We add a debug output flag, which will be useful for understanding what our nosplit chains look like and which ones are close to running over. - We move the implementation out of the fog of lib.go to its own file. - The implementation is generally more Go-like and less C-like. Change-Id: If1ab31197f5215475559b93695c44a01bd16e276 Reviewed-on: https://go-review.googlesource.com/c/go/+/398176 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19test/nosplit: add more complicated recursion testsAustin Clements
Change-Id: I301ed8bcc93f31147d247e60a7aab8ed42421bbd Reviewed-on: https://go-review.googlesource.com/c/go/+/398175 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19test/nosplit: apply stack limit adjustment in the right placeAustin Clements
The nosplit test was originally written when the stack limit was a mere 128 bytes. Now it's much larger, but rather than rewriting all of the tests, we apply a hack to just add the extra space into the stack frames of the existing tests. Unfortunately, we add it in the wrong place. The extra space should be added just once per chain of nosplit functions, but instead we add it to every frame that appears first on a line in the test's little script language. This means that for tests like start 0 call f1 f1 16 nosplit call f2 f2 16 nosplit call f3 f3 16 nosplit call f4 f4 16 nosplit call f5 f5 16 nosplit call f6 f6 16 nosplit call f7 f7 16 nosplit call f8 f8 16 nosplit call end end 1000 REJECT we add 672 bytes to *every* frame, meaning that we wind up way over the stack limit by the end of the stanza, rather than just a little as originally intended. Fix this by instead adding the extra space to the first nosplit function in a stanza. This isn't perfect either, since we could have a nosplit -> split -> nosplit chain, but it's the best we can do without a graph analysis. Change-Id: Ibf156c68fe3eb1b64a438115f4a17f1a6c7e2bd1 Reviewed-on: https://go-review.googlesource.com/c/go/+/398174 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19cmd/compile,cmd/internal/obj: replace Ctxt.FixedFrameSize method with Arch fieldAustin Clements
And delete now-unused FixedFrameSize methods. Change-Id: Id257e1647dbeb4eb4ab866c53744010c4efeb953 Reviewed-on: https://go-review.googlesource.com/c/go/+/400819 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19internal/sys: add LR and fixed frame size to sys.ArchAustin Clements
Storing this information in the Arch eliminates some code duplication between the compiler and linker. This information is entirely determined by the Arch, so the current approach of attaching it to an entire Ctxt is a little silly. This will also make it easier to use this information from tests. The next CL will be a rote refactoring to eliminate the Ctxt.FixedFrameSize methods. Change-Id: I315c524fa66a0ea99f63ae5a2a6fdc367d843bad Reviewed-on: https://go-review.googlesource.com/c/go/+/400818 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19cmd/link: use TOC-relative trampolines on PPC64 when neededPaul E. Murphy
When linking a PIE binary with the internal linker, TOC relative relocations need to be generated. Update trampolines to indirect call using R12 to more closely match the AIX/ELFv2 regardless of buildmode, and work with position-indepdent code. Likewise, update the check for offseting R_CALLPOWER relocs to make a local call. It should be checking ldr.AttrExternal, not ldr.IsExternal. This offset should not be adjusted for external (non-go) object files, it is handled when ELF reloc are translated into go relocs. And, update trampoline tests to verify these are generated correctly and produce a working binary using -buildmode=pie on ppc64le. Fixes #52337 Change-Id: I8a2dea06c3237bdf0e87888b56a17b6c4c99a7de Reviewed-on: https://go-review.googlesource.com/c/go/+/400234 Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Paul Murphy <murp@ibm.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-19crypto/x509: move sha1 removal to unspecified future releaseJordan Liggitt
Updates #41682 Change-Id: I3a2d6eedf4030cdc7308001aef549eb20eeb11c1 Reviewed-on: https://go-review.googlesource.com/c/go/+/396774 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Filippo Valsorda <valsorda@google.com> Run-TryBot: Filippo Valsorda <valsorda@google.com> Auto-Submit: Filippo Valsorda <valsorda@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-18crypto/x509: reject duplicate extensionsRoland Shoemaker
When parsing certificates and CSRs, reject duplicate extensions (and additionally duplicate requested extensions in CSRs.) Fixes #50988 Change-Id: I531e932cfcdde78f64c106e747a68270bd4f1d80 Reviewed-on: https://go-review.googlesource.com/c/go/+/383215 Reviewed-by: Damien Neil <dneil@google.com> Run-TryBot: Roland Shoemaker <roland@golang.org> Auto-Submit: Roland Shoemaker <roland@golang.org> Reviewed-by: Roland Shoemaker <roland@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-18reflect: make Value.MapRange inlineableJoe Tsai
This allows the caller to decide whether MapIter should be stack allocated or heap allocated based on whether it escapes. In most cases, it does not escape and thus removes the utility of MapIter.Reset (#46293). In fact, use of sync.Pool with MapIter and calling MapIter.Reset is likely to be slower. Change-Id: Ic93e7d39e5dd4c83e7fca9e0bdfbbcd70777f0e1 Reviewed-on: https://go-review.googlesource.com/c/go/+/400675 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-18net/http: eliminate arbitrary timeouts in ↵Bryan C. Mills
TestServerRequestContextCancel_ConnClose These timeouts are empirically sometimes (but rarely) too short on slower builders, and at any rate if this test fails “for real” we'll want a goroutine dump in order to debug it anyway. A goroutine dump is exactly what we get if we let the test time out on its own. Fixes #52414. Change-Id: Id2dd3839977bd8a41f296d67d1cccbf068fd73f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/400816 Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-18cmd/compile: fix missing source information in ssa viewhopehook
Endlineno is lost when we call "genericSubst" to create the new instantiation of the generic function. This will cause "readFuncLines" to fail to read the target function. To fix this issue, as @mdempsky pointed out, add the line in cmd/compile/internal/noder/stencil.go: newf.Endlineno = gf.Endlineno Fixes #51988 Change-Id: Ib408e4ed0ceb68df8dedda4fb551309e8385aada Reviewed-on: https://go-review.googlesource.com/c/go/+/399057 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Auto-Submit: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
2022-04-18runtime: improve memclr on ppc64xLynn Boger
This improves performance for memclr for sizes >= 64 and < 512 by unrolling the loop to clear 64 bytes at a time, whereas before it was doing 32 bytes. On a power9, the improvement is: Memclr/64 6.07ns ± 0% 5.17ns ± 0% -14.86% (p=1.000 n=1+1) Memclr/256 11.8ns ± 0% 8.3ns ± 0% -30.10% (p=1.000 n=1+1) GoMemclr/64 5.58ns ± 0% 5.02ns ± 0% -10.04% (p=1.000 n=1+1) GoMemclr/256 12.0ns ± 0% 8.8ns ± 0% -26.62% (p=1.000 n=1+1) Change-Id: I929389ae9e50128cba81e0c412e7ba431da7facc Reviewed-on: https://go-review.googlesource.com/c/go/+/399895 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-17net/http: correctly show error types in transfer testJorropo
actualReader and tc.expectedReader are reflect.Type instances, not the actual objects. Change-Id: I7c9cfa489e3297b94c603b62bad1ed84bd207057 GitHub-Last-Rev: d581402375aea0c911fef663ec7e89a24c4e5524 GitHub-Pull-Request: golang/go#52339 Reviewed-on: https://go-review.googlesource.com/c/go/+/400235 Reviewed-by: Damien Neil <dneil@google.com> Run-TryBot: Damien Neil <dneil@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Ian Lance Taylor <iant@golang.org>
2022-04-17reflect: make Value.Type inlineableJoe Tsai
This allows the result of Type to be computed much faster. Performance: old new delta 1.76ns 0.66ns -62.27% Change-Id: Ie007fd175aaa41b2f67c71fa2a34ab8d292dd0e0 Reviewed-on: https://go-review.googlesource.com/c/go/+/400335 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
2022-04-16bytes: explode checks for n too largePhilippe Antoine
As is already done in strings package. Change-Id: Ia45e6443ddf6beac5e70a1cc493119030e173139 GitHub-Last-Rev: 1174c250350f31eced1513169d62a8a3e679dcf6 GitHub-Pull-Request: golang/go#52348 Reviewed-on: https://go-review.googlesource.com/c/go/+/400239 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>