summaryrefslogtreecommitdiff
path: root/src/internal/coverage
Commit message (Collapse)AuthorAgeFilesLines
* internal/coverage/encodecounter: followup changes from code reviewThan McIntosh2023-05-051-6/+12
| | | | | | | | | | | | | | | | | This patch contains a small set of changes with fixes for some issues that surfaced during the code review for CL 484535. Due to an error on my part, these never got included in the final version that was checked in (I rebased, mailed the rebase, but then never mailed the final patch set with the changes). This patch sends the remaining bits and pieces. Updates #59563. Change-Id: I87dc05a83f8e44c8bfe7203bc2b035defc817af9 Reviewed-on: https://go-review.googlesource.com/c/go/+/492981 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
* all: remove repeated definite articlescui fliter2023-04-271-1/+1
| | | | | | | | | | | Change-Id: Idea3e6ca6e62bd5a5ff6e6d5c3f39efb7628f0ec Reviewed-on: https://go-review.googlesource.com/c/go/+/489635 Run-TryBot: Michael Pratt <mpratt@google.com> Run-TryBot: shuang cui <imcusg@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Michael Pratt <mpratt@google.com>
* coverage: fix count vs emit discrepancy in coverage counter data writingThan McIntosh2023-04-262-35/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch revises the way coverage counter data writing takes place to avoid problems where useful counter data (for user-written functions) is skipped in favor of counter data from stdlib functions that are executed "late in the game", during the counter writing process itself. Reading counter values from a running "--coverpkg=all" program is an inherently racy operation; while the the code that scans the coverage counter segment is reading values, the program is still executing, potentially updating those values, and updates can include execution of previously un-executed functions. The existing counter data writing code was using a two-pass model (initial sweep over the counter segment to count live functions, second sweep to actually write data), and wasn't properly accounting for the fact that the second pass could see more functions than the first. In the bug in question, the first pass discovered an initial set of 1240 functions, but by the time the second pass kicked in, several additional new functions were also live. The second pass scanned the counter segment again to write out exactly 1240 functions, but since some of the counters for the newly executed functions were earlier in the segment (due to linker layout quirks) than the user's selected function, the sweep terminated before writing out counters for the function of interest. The fix rewrites the counter data file encoder to make a single sweep over the counter segment instead of using a two-pass scheme. Fixes #59563. Change-Id: I5e908e226bb224adb90a2fb783013e52deb341da Reviewed-on: https://go-review.googlesource.com/c/go/+/484535 Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Than McIntosh <thanm@google.com>
* internal/coverage/slicewriter: fix off-by-1 error in seek utilitiesThan McIntosh2023-04-262-7/+10
| | | | | | | | | | | | The slicewriter Seek method was being too restrictive on offsets accepted, due to an off-by-one problem in the error checking code. This fixes the problem and touches up the unit tests. Change-Id: I75d6121551de19ec9275f0e331810db231db6ea9 Reviewed-on: https://go-review.googlesource.com/c/go/+/488116 Run-TryBot: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
* internal/coverage/decodemeta: fix coding error in func literal handlingThan McIntosh2023-01-202-3/+56
| | | | | | | | | | | | | | | | Fix a coding error in coverage meta-data decoding in the method decodemeta.CoverageMetaDataDecoder.ReadFunc. The code was not unconditionally assigning the "function literal" field of the coverage.FuncDesc object passed in, resulting in bad values depending on what the state of the field happened to be in the object. Fixes #57942. Change-Id: I6dfd7d7f7af6004f05c622f9a7116e9f6018cf4f Reviewed-on: https://go-review.googlesource.com/c/go/+/462955 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
* internal/coverage: use io.Seek* constantsTobias Klauser2022-12-012-6/+6
| | | | | | | | | | | | | | Use the io.Seek* constants instead of their deprecated os.SEEK_* counterparts. Change-Id: Ie899f9cf286de7304a394d9a2a091a55937542ad Reviewed-on: https://go-review.googlesource.com/c/go/+/453576 Reviewed-by: Than McIntosh <thanm@google.com> Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Than McIntosh <thanm@google.com>
* internal/coverage/slicereader: use unsafe.StringTobias Klauser2022-11-081-8/+1
| | | | | | | | | | | | Change-Id: Ifd88315626e0ce5b9b8d3c66aa9dd9806f8407dd Reviewed-on: https://go-review.googlesource.com/c/go/+/448555 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Than McIntosh <thanm@google.com> Auto-Submit: Than McIntosh <thanm@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
* all: fix comment typosDan Kortschak2022-11-051-1/+1
| | | | | | | | | | | | | Change-Id: Ic16824482142d4de4d0b949459e36505ee944ff7 Reviewed-on: https://go-review.googlesource.com/c/go/+/448175 Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Dan Kortschak <dan@kortschak.io> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Dan Kortschak <dan@kortschak.io> Auto-Submit: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
* cmd/{go,cover}: fix for -coverprofile path capture with local pkgThan McIntosh2022-11-011-0/+7
| | | | | | | | | | | | | | | | | | | | | | When coverage testing a local package (defined by a relative import path such as "./foo/bar") the convention when "-coverprofile" is used has been to capture source files by full pathname, as opposed to recording the full import path or the invented import path ("command-line-arguments/") created by the go command in the case of building named Go files. Doing this makes it much easier to use collected profiles with "go tool -cover -html=<profile>". The support for this feature/convention wound up being inadvertantly dropped during the GOEXPERIMENT=coverageredesign implementation; this patch restores it. Fixes #56433. Change-Id: Ib9556fdc86011b00c155caa614ab23e5148f3eb4 Reviewed-on: https://go-review.googlesource.com/c/go/+/445917 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
* internal/coverage: minor code cleanupsThan McIntosh2022-10-119-44/+42
| | | | | | | | Delete some unused code, various cleanups to fix staticcheck warnings. Change-Id: Ie475d57735a83351a4977f0dd4bc1387ce06a20e Reviewed-on: https://go-review.googlesource.com/c/go/+/441935 Reviewed-by: David Chase <drchase@google.com>
* internal: fix a few function names on commentscui fliter2022-09-301-1/+1
| | | | | | | | | | | Change-Id: I53169e386b8c789b092de348fa891fe50e11c2ef GitHub-Last-Rev: 75232393b4ba415bddc731f15550d7094ccfd953 GitHub-Pull-Request: golang/go#55965 Reviewed-on: https://go-review.googlesource.com/c/go/+/436883 Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
* internal: use io.SeekStart, io.SeekCurrent, and io.SeekEndcuiweixie2022-09-294-7/+7
| | | | | | | | | | Change-Id: I23ab738b73bc33d3b0b10013c3fadd95b5b24681 Reviewed-on: https://go-review.googlesource.com/c/go/+/436719 Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@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>
* all: fix some typoscui fliter2022-09-281-1/+1
| | | | | | | | | Change-Id: I8b28aebbb9494b2c877139a4584a5a42253e3bea GitHub-Last-Rev: e3703fd3a50b811785df75751472aa3ab098b3d1 GitHub-Pull-Request: golang/go#55902 Reviewed-on: https://go-review.googlesource.com/c/go/+/435617 Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
* runtime/coverage: runtime routines to emit coverage dataThan McIntosh2022-09-281-0/+9
| | | | | | | | | | | | | | | | | This patch fleshes out the runtime support for emitting coverage data at the end of a run of an instrumented binary. Data is emitted in the form of a pair of files, a meta-out-file and counter-data-outfile, each written to the dir GOCOVERDIR. The meta-out-file is emitted only if required; no need to emit again if an existing meta-data file with the same hash and length is present. Updates #51430. Change-Id: I59d20a4b8c05910c933ee29527972f8e401b1685 Reviewed-on: https://go-review.googlesource.com/c/go/+/355451 Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Than McIntosh <thanm@google.com>
* cmd/covdata: add tools to read/manipulate coverage data filesThan McIntosh2022-09-287-0/+1007
| | | | | | | | | | | | | | | | | | | Add a set of helper packages for reading collections of related meta-data and counter-data files ("pods") produced by runs of coverage-instrumented binaries, and a new tool program (cmd/covdata) for dumping and/or manipulating coverage data files. Currently "go tool covdata" subcommands include 'merge', 'intersect', 'percent', 'pkglist', 'subtract', 'debugdump', and 'textfmt' (conversion to the legacy "go tool cover" format). Updates #51430. Change-Id: I44167c578f574b4636ab8726e726388531fd3258 Reviewed-on: https://go-review.googlesource.com/c/go/+/357609 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
* internal: use bytes.Clonecuiweixie2022-09-281-2/+2
| | | | | | | | | | Change-Id: Ia96ddd520a7bd2fd53bff55315c6fac04ae96a2f Reviewed-on: https://go-review.googlesource.com/c/go/+/435282 Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
* cmd/compile: add coverage fixup modeThan McIntosh2022-09-271-0/+66
| | | | | | | | | | | | | | | | | | | | | Adds a -coveragecfg=<configfile> command line option to the compiler to help support a cooperative "tool and compiler" mode for coverage instrumentation. In this mode the cmd/cover tool generates most of the counter instrumentation via source-to-source rewriting, but the compiler fixes up the result if passed the "-coveragecfg" option. The fixups include: - reclassifying counter variables (special storage class) - marking meta-data variables are read-only - adding in an init call to do registation Updates #51430. Change-Id: Iead72b85209725ee044542374465f118a3ee72e0 Reviewed-on: https://go-review.googlesource.com/c/go/+/395895 Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
* runtime: add hook to register coverage-instrumented packagesThan McIntosh2022-09-262-0/+105
| | | | | | | | | | | | | | | | | | | | | | | | | Add support to the runtime for registering coverage-instrumented packages, using a new hook that can be called from the init function of an instrumented package. The hook records the meta-data symbol for the package (chaining it onto a list), and returns a package ID to be used to identify functions in the package. This new hook is not yet called; that will be added in a subsequent patch. The list of registered meta-data objects will be used (again in a future patch) as part of coverage data file writing. Special handling is required for packages such as "runtime" or "internal/cpu", where functions in the package execute before the package "init" func runs. For these packages hard-code the package ID, then record the position of the package in the overall list so that we can fix things up later on. Updates #51430. Change-Id: I6ca3ddf535197442a2603c6d7a0a9798b8496f40 Reviewed-on: https://go-review.googlesource.com/c/go/+/401234 Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Than McIntosh <thanm@google.com>
* internal/coverage: add apis for reading/writing counter dataThan McIntosh2022-09-265-10/+927
| | | | | | | | | | | | | | | | | | | | Add utilities for reading and writing of counter data files as part of the new code coverage implementation. Trivia note: currently the contents of counter data files are emitted in little-endian form, which for the counters is somewhat painful in that we need to visit each counter value and properly encode it. It might be better to instead emit counters in native endianity and then teach the tools to decode properly in the case of an endianity mismatch. Updates #51430. Change-Id: I124fdcb40fc339a48b64b35264bf24c3be50ddd4 Reviewed-on: https://go-review.googlesource.com/c/go/+/359403 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Than McIntosh <thanm@google.com>
* internal/coverage: add coverage meta-data decoderThan McIntosh2022-09-268-2/+1071
| | | | | | | | | | | | | | | | | Add a coverage meta-data decoder, which provides APIs for reading encoded coverage meta-data and expanding it usable form. This package is intended to be used in the coverage tooling that reads data files emitted from coverage runs. Along with the new decoding package is a unit test that runs the encode/decode paths together to check to make sure that "decode(encode(X)) == X". Updates #51430. Change-Id: I81d27d8da0b2fcfa5039114a6e35a4b463d19b3c Reviewed-on: https://go-review.googlesource.com/c/go/+/353454 Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
* internal/coverage: add coverage meta-data encoderThan McIntosh2022-09-265-0/+830
Add a new package with APIs for encoding coverage meta-data. This provides support for accumulating information about each function during the compilation process, and then encoding and emitting a payload for a coverage meta-data symbol. Not yet connected to the rest of the coverage machinery (that will appear in a later patch). Updates #51430. Change-Id: I61054ce87f205b25fb1bfedaa740fd7425c34de4 Reviewed-on: https://go-review.googlesource.com/c/go/+/353453 Run-TryBot: Than McIntosh <thanm@google.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>