aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-04-06cmd/go: report scan error position in 'go list -e'tlsJay Conrod
This CL extracts some error handling code into a common method for presenting errors encountered when loading package data. Fixes #36087 Fixes #36762 Change-Id: I87c8d41e3cc6e6afa152d9c067bc60923bf19fbe Reviewed-on: https://go-review.googlesource.com/c/go/+/210938 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
2020-04-06cmd/link: remove darwin/arm testCherry Zhang
The darwin/arm port is removed in Go 1.15. Setting GOOS=darwin GOARCH=arm will fail, therefore "go test cmd/link" on macOS will fail (in non -short mode). Remove this test point. Updates #37611. Change-Id: Ia9531c4b4a6692a0c49153517af9fdddd1f3e0bf Reviewed-on: https://go-review.googlesource.com/c/go/+/227341 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-06cmd/compile: lay out exit post-dominated blocks at the endJosh Bleecher Snyder
Complete a long-standing TODO in the code. Exit blocks are cold code, so we lay them out at the end of the function. Blocks that are post-dominated by exit blocks are also ipso facto exit blocks. Treat them as such. Implement using a simple loop, because there are generally very few exit blocks. In addition to improved instruction cache, this empirically yields better register allocation. Binary size impact: file before after Δ % cgo 4812872 4808776 -4096 -0.085% fix 3370072 3365976 -4096 -0.122% vet 8252280 8248184 -4096 -0.050% total 115052984 115040696 -12288 -0.011% This also appears to improve compiler performance (-0.15% geomean time/op, -1.20% geomean user time/op), but that could just be alignment effects. Compiler benchmarking hasn't been super reliably recently, and there's no particular reason to think this should speed up the compiler that much. Change-Id: I3d262c4f5cb80626a67a5c17285e2fa09f423c00 Reviewed-on: https://go-review.googlesource.com/c/go/+/227217 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
2020-04-06cmd/link: fix data race in testDWARFCherry Zhang
Multiple instances of testDWARF run in parallel, with a shared backing store of the env input slice. Do modification of the environment locally, instead of on the shared slice. Fixes #38265. Change-Id: I22a7194c8cd55ba22c9d6c47ac47bf7e710a7027 Reviewed-on: https://go-review.googlesource.com/c/go/+/227342 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-06cmd/go: report 'go get' errors for absolute paths outside module rootJay Conrod
'go get' will now check absolute paths without wildcards the same way it checks relative paths. modload.DirImportPath may be used for both without converting path separators. Fixes #38038 Change-Id: I453299898ece58f3b5002a5e80021d6bfe815fdd Reviewed-on: https://go-review.googlesource.com/c/go/+/226857 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Michael Matloob <matloob@golang.org>
2020-04-06cmd/compile: make logopt test skip if cannot create scratch directoryDavid Chase
Fixes #38251. Change-Id: Ic635843fb503484a1c9a230b0cca571393d3da5a Reviewed-on: https://go-review.googlesource.com/c/go/+/227339 Run-TryBot: David Chase <drchase@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2020-04-06cmd/compile: print block auxint value in HTML outputMichael Munday
The auxint value was being printed in LongString() but not LongHTML(). Fixes #38250. Change-Id: I28e819feef8710f912bee424d1b900eb07f3abb8 Reviewed-on: https://go-review.googlesource.com/c/go/+/227160 Run-TryBot: Michael Munday <mike.munday@ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
2020-04-06cmd/compile: improve lowered moves and zeros for ppc64leLynn Boger
This change includes the following: - Generate LXV/STXV sequences instead of LXVD2X/STXVD2X on power9. These instructions do not require an index register, which allows more loads and stores within a loop without initializing multiple index registers. The LoweredQuadXXX generate LXV/STXV. - Create LoweredMoveXXXShort and LoweredZeroXXXShort for short moves that don't generate loops, and therefore don't clobber the address registers or flags. - Use registers other than R3 and R4 to avoid conflicting with registers that have already been allocated to avoid unnecessary register moves. - Eliminate the use of R14 as scratch register and use R31 instead. - Add PCALIGN when the LoweredMoveXXX or LoweredZeroXXX generates a loop with more than 3 iterations. This performance opportunity was noticed in github.com/golang/snappy benchmarks. Results on power9: WordsDecode1e1 54.1ns ± 0% 53.8ns ± 0% -0.51% (p=0.029 n=4+4) WordsDecode1e2 287ns ± 0% 282ns ± 1% -1.83% (p=0.029 n=4+4) WordsDecode1e3 3.98µs ± 0% 3.64µs ± 0% -8.52% (p=0.029 n=4+4) WordsDecode1e4 66.9µs ± 0% 67.0µs ± 0% +0.20% (p=0.029 n=4+4) WordsDecode1e5 723µs ± 0% 723µs ± 0% -0.01% (p=0.200 n=4+4) WordsDecode1e6 7.21ms ± 0% 7.21ms ± 0% -0.02% (p=1.000 n=4+4) WordsEncode1e1 29.9ns ± 0% 29.4ns ± 0% -1.51% (p=0.029 n=4+4) WordsEncode1e2 2.12µs ± 0% 1.75µs ± 0% -17.70% (p=0.029 n=4+4) WordsEncode1e3 11.7µs ± 0% 11.2µs ± 0% -4.61% (p=0.029 n=4+4) WordsEncode1e4 119µs ± 0% 120µs ± 0% +0.36% (p=0.029 n=4+4) WordsEncode1e5 1.21ms ± 0% 1.22ms ± 0% +0.41% (p=0.029 n=4+4) WordsEncode1e6 12.0ms ± 0% 12.0ms ± 0% +0.57% (p=0.029 n=4+4) RandomEncode 286µs ± 0% 203µs ± 0% -28.82% (p=0.029 n=4+4) ExtendMatch 47.4µs ± 0% 47.0µs ± 0% -0.85% (p=0.029 n=4+4) Change-Id: Iecad3a39ae55280286e42760a5c9d5c1168f5858 Reviewed-on: https://go-review.googlesource.com/c/go/+/226539 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
2020-04-06time, runtime: only call resetTimer from (*Timer).ResetIan Lance Taylor
Previously we stopped the timer and then reset it. With the current timer implementation that is no longer required. Change-Id: Ie7aba61ad53ce835f6fcd0b6bce7fe0a15b10e24 Reviewed-on: https://go-review.googlesource.com/c/go/+/227180 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
2020-04-05cmd/compile: restore missing columns in ssa.htmlBradford Lamson-Scribner
If the final pass(es) are identical during ssa.html generation, they are persisted in-memory as "pendingPhases" but never get written as a column in the html. This change flushes those in-memory phases. Fixes #38242 Change-Id: Id13477dcbe7b419a818bb457861b2422ba5ef4bc Reviewed-on: https://go-review.googlesource.com/c/go/+/227182 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-05A+C: add Andy Pan (individual CLA)Andy Pan
https://go-review.googlesource.com/q/author:panjf2000%2540gmail.com Change-Id: I05c73d848b8f40dc864a18c733ca3f47b1eab54d Reviewed-on: https://go-review.googlesource.com/c/go/+/227004 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-05cmd/compile: refactor around HTMLWriter removing logger in favor of FuncBradford Lamson-Scribner
Replace HTMLWriter's Logger field with a *Func. Implement Fatalf method for HTMLWriter which gets the Frontend() from the Func and calls down into it's Fatalf method, passing the msg and args along. Replace remaining calls to the old Logger with calls to logging methods on the Func. Change-Id: I966342ef9997396f3416fb152fa52d60080ebecb Reviewed-on: https://go-review.googlesource.com/c/go/+/227277 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-05cmd/compile: enable -d=checkptr even on windowsAlex Brainman
CL 201783 enable -d=checkptr when -race or -msan is specified everywhere but windows. But, now that all unsafe pointer conversions in the standard library are fixed, enable -d=checkptr even on windows. Updates #34964 Updates #34972 Change-Id: Id912fa83b0d5b46c6f1c134c742fd94d2d185835 Reviewed-on: https://go-review.googlesource.com/c/go/+/227003 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2020-04-04cmd/dist: remove darwin/386, darwin/arm as valid portsBrad Fitzpatrick
This only removes the ability to build it, and removes it as a src/buildall.bash target (which uses go tool dist list). Now: $ go tool dist list | grep ^darwin darwin/amd64 darwin/arm64 After this, remaining is removing leftover port--specific code in the tree. Updates #37610 Updates #37611 Change-Id: I00f03b2355c2e152f75e57abd3063be243529d2d Reviewed-on: https://go-review.googlesource.com/c/go/+/226985 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Filippo Valsorda <filippo@golang.org>
2020-04-04cmd/compile: add intrinsic HasCPUFeature for checking cpu featuresJosh Bleecher Snyder
Before using some CPU instructions, we must check for their presence. We use global variables in the runtime package to record features. Prior to this CL, we issued a regular memory load for these features. The downside to this is that, because it is a regular memory load, it cannot be hoisted out of loops or otherwise reordered with other loads. This CL introduces a new intrinsic just for checking cpu features. It still ends up resulting in a memory load, but that memory load can now be floated to the entry block and rematerialized as needed. One downside is that the regular load could be combined with the comparison into a CMPBconstload+NE. This new intrinsic cannot; it generates MOVB+TESTB+NE. (It is possible that MOVBQZX+TESTQ+NE would be better.) This CL does only amd64. It is easy to extend to other architectures. For the benchmark in #36196, on my machine, this offers a mild speedup. name old time/op new time/op delta FMA-8 1.39ns ± 6% 1.29ns ± 9% -7.19% (p=0.000 n=97+96) NonFMA-8 2.03ns ±11% 2.04ns ±12% ~ (p=0.618 n=99+98) Updates #15808 Updates #36196 Change-Id: I75e2fcfcf5a6df1bdb80657a7143bed69fca6deb Reviewed-on: https://go-review.googlesource.com/c/go/+/212360 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Giovanni Bajo <rasky@develer.com>
2020-04-03cmd/compile: allow mid-stack inlining when there is a cycle of recursionDan Scales
We still disallow inlining for an immediately-recursive function, but allow inlining if a function is in a recursion chain. If all functions in the recursion chain are simple, then we could inline forever down the recursion chain (eventually running out of stack on the compiler), so we add a map to keep track of the functions we have already inlined at a call site. We stop inlining when we reach a function that we have already inlined in the recursive chain. Of course, normally the inlining will have stopped earlier, because of the cost function. We could also limit the depth of inlining by a simple count (say, limit max inlining of 10 at any given site). Would that limit other opportunities too much? Added a test in test/inline.go. runtime.BenchmarkStackCopyNoCache() is also already a good test that triggers the check to stop inlining when we reach the start of the recursive chain again. For the bent benchmark suite, the performance improvement was mostly not statistically significant, but the geomean averaged out to: -0.68%. The text size increase was less than .1% for all bent benchmarks. The cmd/go text size increase was 0.02% and the cmd/compile text size increase was .1%. Fixes #29737 Change-Id: I892fa84bb07a947b3125ec8f25ed0e508bf2bdf5 Reviewed-on: https://go-review.googlesource.com/c/go/+/226818 Run-TryBot: Dan Scales <danscales@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
2020-04-03crypto/sha512: optimize sha512 by removing function literalXiangdong Ji
The function 'block' called indirectly via function literal 'blockGeneric' prevents 'gc' performing an accurate escape analysis to its arguments, that will result in unnecessary heap object allocation and GC cost. Consistent performance improvement to sha512 and its dependency packages are observed on various arm64 servers if eliminating the function literal, especially for small-sized benchmarks. A72: ======================================================================================================== name old time/op new time/op delta pkg:crypto/sha512 goos:linux goarch:arm64 Hash8Bytes-64 1.61µs ± 0% 1.37µs ± 0% -14.99% (p=0.000 n=8+9) Hash1K-64 11.2µs ± 0% 10.9µs ± 0% -2.41% (p=0.000 n=8+10) Hash8K-64 77.8µs ± 0% 77.5µs ± 0% -0.44% (p=0.002 n=10+10) pkg:crypto/ecdsa goos:linux goarch:arm64 pkg:crypto/hmac goos:linux goarch:arm64 pkg:crypto/tls goos:linux goarch:arm64 HandshakeServer/RSA-64 920µs ± 0% 919µs ± 0% -0.10% (p=0.035 n=10+9) HandshakeServer/ECDHE-P256-RSA/TLSv13-64 1.32ms ± 1% 1.31ms ± 0% -0.24% (p=0.002 n=9+8) HandshakeServer/ECDHE-P256-RSA/TLSv12-64 1.25ms ± 0% 1.25ms ± 0% -0.07% (p=0.040 n=9+9) HandshakeServer/ECDHE-P256-ECDSA-P256/TLSv12-64 486µs ± 0% 485µs ± 0% -0.19% (p=0.000 n=9+10) HandshakeServer/ECDHE-X25519-ECDSA-P256/TLSv13-64 1.01ms ± 0% 1.01ms ± 0% -0.36% (p=0.000 n=9+10) HandshakeServer/ECDHE-X25519-ECDSA-P256/TLSv12-64 948µs ± 0% 947µs ± 0% -0.11% (p=0.001 n=10+10) HandshakeServer/ECDHE-P521-ECDSA-P521/TLSv12-64 42.1ms ± 3% 42.5ms ± 2% +0.77% (p=0.010 n=8+8) Throughput/MaxPacket/8MB/TLSv13-64 46.9ms ± 9% 42.8ms ± 2% -8.71% (p=0.000 n=10+9) Throughput/MaxPacket/64MB/TLSv13-64 385ms ±17% 332ms ±18% -13.64% (p=0.002 n=10+10) Throughput/DynamicPacket/2MB/TLSv12-64 39.1ms ±110% 17.2ms ±24% -55.97% (p=0.002 n=10+9) Throughput/DynamicPacket/4MB/TLSv12-64 32.2ms ±22% 27.2ms ±40% -15.69% (p=0.029 n=10+10) Throughput/DynamicPacket/4MB/TLSv13-64 27.4ms ±18% 24.9ms ±31% -9.12% (p=0.031 n=9+9) Throughput/DynamicPacket/8MB/TLSv12-64 61.8ms ±32% 43.9ms ±18% -28.93% (p=0.000 n=10+9) Throughput/DynamicPacket/8MB/TLSv13-64 49.4ms ±14% 45.7ms ±19% -7.44% (p=0.035 n=10+10) Throughput/DynamicPacket/32MB/TLSv13-64 181ms ±13% 163ms ± 7% -10.17% (p=0.001 n=9+10) Latency/MaxPacket/5000kbps/TLSv13-64 37.2ms ±52% 30.8ms ± 0% -17.21% (p=0.017 n=10+9) Latency/DynamicPacket/2000kbps/TLSv13-64 16.7ms ± 1% 16.6ms ± 0% -0.39% (p=0.002 n=8+10) pkg:crypto/ed25519 goos:linux goarch:arm64 KeyGeneration-64 139µs ± 0% 139µs ± 0% -0.45% (p=0.000 n=9+10) NewKeyFromSeed-64 139µs ± 0% 139µs ± 0% -0.34% (p=0.000 n=10+10) Signing-64 144µs ± 0% 143µs ± 0% -0.73% (p=0.000 n=10+10) Verification-64 410µs ± 0% 410µs ± 0% -0.09% (p=0.000 n=9+9) [Geo mean] 9.81ms 9.59ms -2.30% name old speed new speed delta pkg:crypto/sha512 goos:linux goarch:arm64 Hash8Bytes-64 4.96MB/s ± 0% 5.84MB/s ± 0% +17.60% (p=0.000 n=7+9) Hash1K-64 91.5MB/s ± 0% 93.7MB/s ± 0% +2.47% (p=0.000 n=8+10) Hash8K-64 105MB/s ± 0% 106MB/s ± 0% +0.45% (p=0.001 n=10+10) pkg:crypto/hmac goos:linux goarch:arm64 pkg:crypto/tls goos:linux goarch:arm64 Throughput/MaxPacket/8MB/TLSv13-64 179MB/s ± 9% 196MB/s ± 2% +9.31% (p=0.000 n=10+9) Throughput/MaxPacket/64MB/TLSv13-64 176MB/s ±20% 203MB/s ±16% +15.35% (p=0.002 n=10+10) Throughput/DynamicPacket/2MB/TLSv12-64 70.2MB/s ±82% 118.9MB/s ±45% +69.30% (p=0.005 n=10+10) Throughput/DynamicPacket/4MB/TLSv12-64 132MB/s ±19% 159MB/s ±31% +20.31% (p=0.029 n=10+10) Throughput/DynamicPacket/4MB/TLSv13-64 155MB/s ±16% 171MB/s ±24% +10.26% (p=0.031 n=9+9) Throughput/DynamicPacket/8MB/TLSv12-64 141MB/s ±37% 192MB/s ±15% +36.28% (p=0.000 n=10+9) Throughput/DynamicPacket/8MB/TLSv13-64 170MB/s ±12% 185MB/s ±17% +8.46% (p=0.035 n=10+10) Throughput/DynamicPacket/32MB/TLSv13-64 186MB/s ±12% 206MB/s ± 6% +10.96% (p=0.001 n=9+10) [Geo mean] 133MB/s 141MB/s +6.04% name old alloc/op new alloc/op delta pkg:crypto/ecdsa goos:linux goarch:arm64 SignP256-64 3.03kB ± 0% 2.67kB ± 1% -11.71% (p=0.000 n=10+9) pkg:crypto/ed25519 goos:linux goarch:arm64 NewKeyFromSeed-64 352B ± 0% 0B -100.00% (p=0.000 n=10+10) Signing-64 1.50kB ± 0% 0.45kB ± 0% -70.21% (p=0.000 n=10+10) [Geo mean] 3.39kB 4.08kB +20.24% name old allocs/op new allocs/op delta pkg:crypto/ecdsa goos:linux goarch:arm64 SignP256-64 34.0 ± 0% 32.0 ± 0% -5.88% (p=0.000 n=10+10) SignP384-64 14.5k ± 0% 14.5k ± 0% -0.12% (p=0.045 n=10+10) pkg:crypto/ed25519 goos:linux goarch:arm64 NewKeyFromSeed-64 2.00 ± 0% 0.00 -100.00% (p=0.000 n=10+10) Signing-64 11.0 ± 0% 5.0 ± 0% -54.55% (p=0.000 n=10+10) [Geo mean] 35.7 53.6 +50.15% A57: ========================================================================================================= name old time/op new time/op delta pkg:crypto/sha512 goos:linux goarch:arm64 Hash8Bytes-8 1.93µs ± 0% 1.69µs ± 0% -12.37% (p=0.000 n=10+10) Hash1K-8 13.8µs ± 0% 13.5µs ± 0% -2.01% (p=0.000 n=10+10) Hash8K-8 96.1µs ± 0% 95.7µs ± 0% -0.35% (p=0.000 n=10+8) pkg:crypto/ecdsa goos:linux goarch:arm64 SignP256-8 14.9µs ± 4% 14.4µs ± 1% -2.84% (p=0.000 n=10+9) pkg:crypto/hmac goos:linux goarch:arm64 HMACSHA256_1K-8 1.87µs ± 0% 1.86µs ± 0% -0.55% (p=0.000 n=9+10) HMACSHA256_32-8 760ns ± 0% 756ns ± 0% -0.54% (p=0.001 n=10+10) pkg:crypto/tls goos:linux goarch:arm64 HandshakeServer/RSA-8 1.11ms ± 0% 1.12ms ± 0% +0.35% (p=0.001 n=9+10) HandshakeServer/ECDHE-P256-RSA/TLSv13-8 1.63ms ± 0% 1.63ms ± 0% -0.23% (p=0.004 n=10+9) HandshakeServer/ECDHE-P256-ECDSA-P256/TLSv13-8 694µs ± 0% 687µs ± 0% -0.96% (p=0.000 n=10+8) HandshakeServer/ECDHE-P256-ECDSA-P256/TLSv12-8 607µs ± 0% 601µs ± 0% -0.99% (p=0.000 n=9+9) HandshakeServer/ECDHE-X25519-ECDSA-P256/TLSv13-8 1.25ms ± 0% 1.25ms ± 0% -0.24% (p=0.015 n=10+10) HandshakeServer/ECDHE-X25519-ECDSA-P256/TLSv12-8 1.16ms ± 0% 1.16ms ± 0% -0.30% (p=0.000 n=8+10) Latency/MaxPacket/200kbps/TLSv12-8 697ms ± 0% 697ms ± 0% +0.01% (p=0.029 n=10+10) Latency/DynamicPacket/200kbps/TLSv13-8 140ms ± 0% 140ms ± 0% +0.04% (p=0.006 n=9+10) pkg:crypto/ed25519 goos:linux goarch:arm64 NewKeyFromSeed-8 168µs ± 0% 168µs ± 0% +0.04% (p=0.001 n=9+10) Signing-8 174µs ± 0% 173µs ± 0% -0.26% (p=0.000 n=10+10) Verification-8 495µs ± 0% 494µs ± 0% -0.10% (p=0.000 n=9+9) [Geo mean] 9.85ms 9.82ms -0.36% name old speed new speed delta pkg:crypto/sha512 goos:linux goarch:arm64 Hash8Bytes-8 4.15MB/s ± 0% 4.74MB/s ± 0% +14.11% (p=0.000 n=10+10) Hash1K-8 74.3MB/s ± 0% 75.8MB/s ± 0% +2.05% (p=0.000 n=10+10) Hash8K-8 85.3MB/s ± 0% 85.6MB/s ± 0% +0.35% (p=0.000 n=10+8) pkg:crypto/hmac goos:linux goarch:arm64 HMACSHA256_1K-8 549MB/s ± 0% 552MB/s ± 0% +0.56% (p=0.000 n=9+10) HMACSHA256_32-8 42.1MB/s ± 0% 42.3MB/s ± 1% +0.53% (p=0.001 n=10+10) pkg:crypto/tls goos:linux goarch:arm64 [Geo mean] 138MB/s 139MB/s +0.54% name old alloc/op new alloc/op delta pkg:crypto/ecdsa goos:linux goarch:arm64 SignP256-8 2.99kB ± 0% 2.64kB ± 0% -11.77% (p=0.000 n=10+10) pkg:crypto/ed25519 goos:linux goarch:arm64 NewKeyFromSeed-8 352B ± 0% 0B -100.00% (p=0.000 n=10+10) Signing-8 1.50kB ± 0% 0.45kB ± 0% -70.21% (p=0.000 n=10+10) [Geo mean] 3.34kB 4.01kB +20.04% name old allocs/op new allocs/op delta pkg:crypto/ecdsa goos:linux goarch:arm64 SignP256-8 34.0 ± 0% 32.0 ± 0% -5.88% (p=0.000 n=10+10) pkg:crypto/ed25519 goos:linux goarch:arm64 NewKeyFromSeed-8 2.00 ± 0% 0.00 -100.00% (p=0.000 n=10+10) Signing-8 11.0 ± 0% 5.0 ± 0% -54.55% (p=0.000 n=10+10) [Geo mean] 35.7 53.6 +50.17% Change-Id: Ibbda2d9bdff4eea4f611d4590abceb8764c44f2e Reviewed-on: https://go-review.googlesource.com/c/go/+/211617 Reviewed-by: Filippo Valsorda <filippo@golang.org> Run-TryBot: Filippo Valsorda <filippo@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-03flag: fix TestExitCode on Plan 9David du Colombier
CL 221427 added TestExitCode. This test is failing on Plan 9 because ExitCode is always equal to 1 on error since Plan 9 use error strings. This change fixes TestExitCode by checking that ExitCode is equal to 1 on error instead of the specific value. Fixes #38237. Change-Id: Ie269722e731e275e5bfc51644c1fa6be76525f1f Reviewed-on: https://go-review.googlesource.com/c/go/+/227158 Run-TryBot: David du Colombier <0intro@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
2020-04-03cmd/go: report original module path in error parsing replaced go.modJay Conrod
MVS reports an error when a go.mod file declares a module path that doesn't match the path it was required with. If the module is a replacement, its declared path may be the original path (preferred) or the replacement path. This CL makes the reported error a little more clear: the "required as" path should be the original required path, not the replacement path. Fixes #38220 Change-Id: I08b50a100679a447c8803cca1d1b32bc115ec1b1 Reviewed-on: https://go-review.googlesource.com/c/go/+/227097 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
2020-04-03run.bat: check go.exe instead of goEgon Elbre
Windows requires checking with the .exe extension. Change-Id: I8e2fe83df81b92f04967bafb28f8effde999f597 Reviewed-on: https://go-review.googlesource.com/c/go/+/227157 Reviewed-by: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-03cmd/compile: add logging for large (>= 128 byte) copiesDavid Chase
For 1.15, unless someone really wants it in 1.14. A performance-sensitive user thought this would be useful, though "large" was not well-defined. If 128 is large, there are 139 static instances of "large" copies in the compiler itself. Includes test. Change-Id: I81f20c62da59d37072429f3a22c1809e6fb2946d Reviewed-on: https://go-review.googlesource.com/c/go/+/205066 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
2020-04-03runtime: eliminate redundant load in Xchg and Xadd on arm64Xiangdong Ji
Loading arguments of Xchg(64) and Xadd(64) functions to registers could be done only once. Change-Id: Iaf0a695ec9c6a221dfa755855edb68c476978a5b Reviewed-on: https://go-review.googlesource.com/c/go/+/227001 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-03cmd/link: in stack bound check, don't check a call repetitivelyCherry Zhang
In stack bound check pass, check a call once, not over and over again. Fix an accidental quadratic behavior... In particular, switching to the new linker caused MIPS builders noticeably slower. This CL fixes it. Change-Id: Idd00c79e80af6278652c92a1d9d7bb2d194e9490 Reviewed-on: https://go-review.googlesource.com/c/go/+/227078 Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Austin Clements <austin@google.com>
2020-04-03cmd/internal/obj/mips: don't emit spurious CALLIND relocationsCherry Zhang
Generate a CALLIND relocation only for indirect calls, not for indirect jumps. In particular, the RET instruction is lowered to JMP (LR), an indirect jump, and occurs frequently. The large amount of spurious relocations causes the linker to do a lot of extra work. Change-Id: Ie0edc04609788f5a687fd00c22558c3f83867697 Reviewed-on: https://go-review.googlesource.com/c/go/+/227079 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: David Chase <drchase@google.com>
2020-04-03cmd/link: write to temp directory in testCherry Zhang
In TestMMap, write to temporary directory, instead of the current directory (which may not be writeable). Fix linux-mips64le-mengzhuo builder. Change-Id: I06dc3266f125523568c543634079c447d91903bb Reviewed-on: https://go-review.googlesource.com/c/go/+/227077 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2020-04-03doc: document testing.TB.TempDir in release notesBrad Fitzpatrick
Updates #35998 Change-Id: I93784e9a9efdd1531e3c342aa0899bf059da0ae1 Reviewed-on: https://go-review.googlesource.com/c/go/+/226983 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-03flag: exit 0 when -h or -help invoked but undefinedShang Jian Ding
flag treats -h or -help as a special case to print a nice help message, but exit with a status code of 2. This update makes that status code 0. Fixes #37533 Change-Id: I7e0bd29944ce46607fb7cfc6740734f7444a151a GitHub-Last-Rev: 83f64d757bc3a9957c49caa5de74d05a96724771 GitHub-Pull-Request: golang/go#37530 Reviewed-on: https://go-review.googlesource.com/c/go/+/221427 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-03runtime/race: update some .syso filesKeith Randall
Update race detector syso files for some platforms. There's still 2 more to do, but they might take a while so I'm mailing the ones I have now. Note: some arm64 tests did not complete successfully due to out of memory errors, but I suspect the .syso is correct. Update #14481 Update #37485 (I think?) Update #37355 Change-Id: I7e7e707a1fd7574855a538ba89dc11acc999c760 Reviewed-on: https://go-review.googlesource.com/c/go/+/226981 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-02net/http: release callbacks after fetch promise completesDmitri Shuralyov
When the request context was canceled, the Transport.RoundTrip method could return before the fetch promise resolved. This would cause the success and failure callback functions to get called after they've been released, which in turn prints a "call to released function" error to the console. Avoid that problem by releasing the callbacks after the fetch promise completes, by moving the release calls into the callbacks themselves. This way we can still return from the Transport.RoundTrip method as soon as the context is canceled, without waiting on the promise to resolve. If the AbortController is unavailable and it's not possible to abort the fetch operation, the promise may take a long time to resolve. For #38003. Change-Id: Ied1475e31dcba101b3326521b0cd653dbb345e1d Reviewed-on: https://go-review.googlesource.com/c/go/+/226204 Reviewed-by: Johan Brandhorst <johan.brandhorst@gmail.com> Reviewed-by: Richard Musiol <neelance@gmail.com>
2020-04-02testing: add TB.TempDirBrad Fitzpatrick
Fixes #35998 Change-Id: I87c6bf4e34e832be68862ca16ecfa6ea12048d31 Reviewed-on: https://go-review.googlesource.com/c/go/+/226877 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-02net: update ParseIP doc to say IPv4-mapped-IPv6 is supportedBrad Fitzpatrick
Change-Id: I49a79c07081cd8f12a3ffef21fd02a9a622a7eb5 Reviewed-on: https://go-review.googlesource.com/c/go/+/226979 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-02cmd: merge branch 'dev.link' into masterCherry Zhang
In the dev.link branch we continued developing the new object file format support and the linker improvements described in https://golang.org/s/better-linker . The new object file is index-based and provides random access. The linker maps the object files into read-only memory, and accesses symbols on-demand using indices, as opposed to reading all object files sequentially into the heap with the old format. This work is not done yet. Currently we still convert back to the old in-memory representation half way through the link process, but only for symbols that are needed. At this point, we think it is ready to enable the new object files and new linker for early testing. Using the new object files and the new linker, it reduces the linker's memory usage by ~10% and wall-clock run time by ~5%, and more to come. Currently, both the old and new object file formats are supported. The new format and new linker are used by default. For feature gating, as a fallback, the old format and old linker can be used by setting the compiler/assembler/linker's -go115newobj flag to false. Note that the flag needs to be specified consistently to all compilations, i.e. -gcflags=all=-go115newobj=false -asmflags=all=-go115newobj=false -ldflags=all=-go115newobj=false In case we need to revert, we can set the flags default to false. CL 224626 is an example. cmd/oldlink is a full copy of the old linker. It is invoked if the old format is requested. This is a clean merge, as we already merged master branch to dev.link first. Change-Id: I8f081eef8c4621362f03ecbcb850d6262b5d3dc6
2020-04-02[dev.link] cmd/oldlink: update with recent changesCherry Zhang
Update the old linker to bring in recent changes made on the master branch: CL 225397 and CL 220917. This brings cmd/oldlink to be in sync with commit aa4d92b8aab63c847ab077417b809694a2a6ea81. Change-Id: Ic386736fa30944dcb71c57096915381d3e6be82c Reviewed-on: https://go-review.googlesource.com/c/go/+/227028 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-02[dev.link] all: merge branch 'master' into dev.linkCherry Zhang
The only conflict is a modify-deletion conflict in cmd/link/internal/ld/link.go, where the old error reporter is deleted in the new linker. Ported to cmd/link/internal/ld/errors.go. Change-Id: I5c78f398ea95bc1d7e6579c84dd8252c9f2196b7
2020-04-02crypto/rsa: refactor RSA-PSS signing and verificationFilippo Valsorda
Cleaned up for readability and consistency. There is one tiny behavioral change: when PSSSaltLengthEqualsHash is used and both hash and opts.Hash were set, hash.Size() was used for the salt length instead of opts.Hash.Size(). That's clearly wrong because opts.Hash is documented to override hash. Change-Id: I3e25dad933961eac827c6d2e3bbfe45fc5a6fb0e Reviewed-on: https://go-review.googlesource.com/c/go/+/226937 Run-TryBot: Filippo Valsorda <filippo@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Katie Hockman <katie@golang.org>
2020-04-02[dev.link] cmd: support large function alignmentCherry Zhang
This ports CL 226997 to the dev.link branch. - The assembler part and old object file writing are unchanged. - Changes to cmd/link are applied to cmd/oldlink. - Add alignment field to new object files for the new linker. Change-Id: Id00f323ae5bdd86b2709a702ee28bcaa9ba962f8 Reviewed-on: https://go-review.googlesource.com/c/go/+/227025 Reviewed-by: Than McIntosh <thanm@google.com>
2020-04-02cmd/link: skip symbol references when looking for missing symbolsJoel Sing
ErrorUnresolved attempts to find the missing symbol in another ABI, in order to provide more friendly error messages. However, in doing so it checks the same ABI and can find the symbol reference for the symbol that it is currently reporting the unresolved error for. Avoid this by ignoring SXREF symbols, which is the same behaviour used when linking is performed. Fixes #33979 Change-Id: I9bfc40146dec2666d25e93d3bcd1984da5c71215 Reviewed-on: https://go-review.googlesource.com/c/go/+/220917 Run-TryBot: Than McIntosh <thanm@google.com> Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-02cmd/asm: align an instruction or a function's addressfanzha02
Recently, the gVisor project needs an instruction's address with 128 bytes alignment to fit the architecture requirement for interrupt table. This patch allows aligning an instruction's address to be aligned to a specific value (2^n and in the range [8, 2048]) The main changes include: 1. Adds a new element in the FuncInfo structure defined in cmd/internal/obj/link.go file to record the alignment information. 2. Adds a new element in the Func structure defined in cmd/internal/goobj/read.go file to read the alignment information. 3. Adds the assembler support to align an intruction's offset with a specific value (2^n and in the range [8, 2048]). e.g. "PCALIGN $256" indicates that the next instruction should be aligned to 256 bytes. 4. An instruction's alignment is relative to the start of the function where this instruction is located, so the function's address must be aligned to the same or coarser boundary. This CL also adds a test. Change-Id: I9b365c111b3a12f767728f1b45aa0c00f073c37d Reviewed-on: https://go-review.googlesource.com/c/go/+/226997 Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-02cmd/compile: mark 'store multiple' as clobbering flags on s390xMichael Munday
Store multiple instructions can clobber flags on s390x when the offset passed into the assembler is outside the range representable with a signed 20 bit integer. This is because the assembler uses the agfi instruction to implement the large offset. The assembler could use a different sequence of instructions, but for now just mark the instruction as 'clobberFlags' since this is risk free. Noticed while investigating #38195. No test yet since I'm not sure how to get this bug to trigger and I haven't seen it affect real code. Change-Id: I4a6ab96455a3ef8ffacb76ef0166b97eb40ff925 Reviewed-on: https://go-review.googlesource.com/c/go/+/226759 Run-TryBot: Michael Munday <mike.munday@ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
2020-04-02internal/syscall/windows: change WSAMsg.Name typeAlex Brainman
The problem was discovered while running go test -a -short -gcflags=all=-d=checkptr -run=TestUDPConnSpecificMethods net WSAMsg is type defined by Windows. And WSAMsg.Name could point to two different structures for IPv4 and IPV6 sockets. Currently WSAMsg.Name is declared as *syscall.RawSockaddrAny. But that violates (1) Conversion of a *T1 to Pointer to *T2. rule of https://golang.org/pkg/unsafe/#Pointer When we convert *syscall.RawSockaddrInet4 into *syscall.RawSockaddrAny, syscall.RawSockaddrInet4 and syscall.RawSockaddrAny do not share an equivalent memory layout. Same for *syscall.SockaddrInet6 into *syscall.RawSockaddrAny. This CL changes WSAMsg.Name type to *syscall.Pointer. syscall.Pointer length is 0, and that at least makes type checker happy. After this change I was able to run go test -a -short -gcflags=all=-d=checkptr std cmd without type checker complaining. Updates #34972 Change-Id: Ic5c2321c20abd805c687ee16ef6f643a2f8cd93f Reviewed-on: https://go-review.googlesource.com/c/go/+/222457 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-02syscall: fix windows WSASendto -d=checkptr violationAlex Brainman
WSASendto converts unsafe.Pointer to *syscall.RawSockaddrAny. But that violates every rule of https://golang.org/pkg/unsafe/#Pointer Implement WSASendto by calling Windows WSASendTo API by calling syscall.Syscall9 directly. This allows us to comply with (4) Conversion of a Pointer to a uintptr when calling syscall.Syscall rule. After this change, this commands succeeds: go test -a -short -gcflags=all=-d=checkptr -run=TestPacketConn net Updates #34972 Change-Id: Ib9a810bedf9e05251b7d3c7f69e15bfbd177ac62 Reviewed-on: https://go-review.googlesource.com/c/go/+/220544 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-04-02sync/atomic: fix TestSwapPointer testKeith Randall
It plays way too loose with unsafe.Pointer rules. It runs afoul of the checkptr rules, so some race detector builds were failing. Fixes #38210 Change-Id: I5e1c78201d06295524fdedb3fe5b49d61446f443 Reviewed-on: https://go-review.googlesource.com/c/go/+/226880 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2020-04-01os/signal, runtime: remove runtime sigqueue initializationIan Lance Taylor
We can initialize the runtime sigqueue packages on first use. We don't require an explicit initialization step. So, remove it. Change-Id: I484e02dc2c67395fd5584f35ecda2e28b37168df Reviewed-on: https://go-review.googlesource.com/c/go/+/226540 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
2020-04-01crypto/tls: add missing alert valuesKatie Hockman
Fixes #35911 Change-Id: I093d25aa169963769b51c37d2481bce71bd0fd2f Reviewed-on: https://go-review.googlesource.com/c/go/+/226858 Run-TryBot: Katie Hockman <katie@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Filippo Valsorda <filippo@golang.org>
2020-04-01[dev.link] cmd/link: stop marking DWARF constant symbolsCherry Zhang
DWARF constant symbols were always marked and converted to sym.Symbols when DWARF generation uses sym.Symbols. Now that the DWARF generation uses the loader, no need to force-mark them. Change-Id: Ia4032430697cfa901fb4b6d106a483973277ea0a Reviewed-on: https://go-review.googlesource.com/c/go/+/226803 Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org>
2020-04-01[dev.link] cmd/internal/goobj2: remove old-style accessorsCherry Zhang
Now that we switched to new style accessors everywhere, remove the old ones. Keep goobj2.Sym, Reloc, and Aux for now, as they are still used on the writer side. Change-Id: I6f3f0d812ff591ea6f12cd0155232f160d53d453 Reviewed-on: https://go-review.googlesource.com/c/go/+/226802 Reviewed-by: Than McIntosh <thanm@google.com>
2020-04-01[dev.link] cmd/oldlink: remove testsCherry Zhang
They are essentially duplicates of cmd/link tests. No need to test twice. Change-Id: I91fdc996f5e160631648ee63341c4e46bb6cc54d Reviewed-on: https://go-review.googlesource.com/c/go/+/226801 Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2020-04-01[dev.link] cmd/oldlink: decouple from goobj2 packageCherry Zhang
The new object file support in the old linker should not be used. This is a minimal change that removes stuff from the old linker's loader package, so that it decouples from the goobj2 package, allowing the latter to evolve. Keep the change local in the loader package, so most of the old linker doesn't need to change. At this point I don't think we want to make significant changes to the old linker. Change-Id: I078c4cbb35dc4627c4b82f512a4aceec9b594925 Reviewed-on: https://go-review.googlesource.com/c/go/+/226800 Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2020-04-01[dev.link] cmd/internal/goobj: use new style accessorsCherry Zhang
We already move to new style accessors in the linker. This will allow us to get rid of the read side of old style ones. Change-Id: Id0c171c5634a5977fe8a6f764cb0d48203993ab7 Reviewed-on: https://go-review.googlesource.com/c/go/+/226799 Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2020-04-01[dev.link] cmd/internal/goobj2, cmd/link: add and use new Sym accessorsCherry Zhang
Along the line with Reloc and Aux, use new-style accessors for the Sym type. They avoid reading unnecessary fields, and also look nicer (to me). Change-Id: Ie37c5149a6edb2184724b3dfa26952015e74c085 Reviewed-on: https://go-review.googlesource.com/c/go/+/226798 Reviewed-by: Jeremy Faller <jeremy@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>