]> Cypherpunks repositories - gostls13.git/commit
cmd/compile, cmd/link: use libFuzzer 8-bit instead of extra counters
authorKhaled Yakdan <yakdan@code-intelligence.com>
Wed, 18 May 2022 08:54:30 +0000 (08:54 +0000)
committerKeith Randall <khr@golang.org>
Fri, 20 May 2022 21:32:57 +0000 (21:32 +0000)
commit7ec6ef432a85a390365f2daed788f0d14c830c73
treec8f554af168c03e3fe383dfac516b034e10f71c3
parente66f895667cd51d0d28c42d369a803c12db8bb35
cmd/compile, cmd/link: use libFuzzer 8-bit instead of extra counters

By using libFuzzer’s 8-bit counters instead of extra counters, the
coverage instrumentation in libFuzzer mode is improved in three ways:
  1- 8-bit counters are supported on all platforms, including macOS and
     Windows, with all relevant versions of libFuzzer, whereas extra
     counters are a Linux-only feature that only recently received
     support on Windows.
  2- Newly covered blocks are now properly reported as new coverage by
     libFuzzer, not only as new features.
  3- The NeverZero strategy is used to ensure that coverage counters
     never become 0 again after having been positive once. This resolves
     issues encountered when fuzzing loops with iteration counts that
     are multiples of 256 (e.g., larger powers of two).

Change-Id: I9021210d7fbffd07c891ad08750402ee91cb3df5
GitHub-Last-Rev: 9057e4b21d146ce9ffb3993982bfb84b96705989
GitHub-Pull-Request: golang/go#51318
Reviewed-on: https://go-review.googlesource.com/c/go/+/387334
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
14 files changed:
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/ir/name.go
src/cmd/compile/internal/ssa/writebarrier.go
src/cmd/compile/internal/walk/order.go
src/cmd/internal/objabi/symkind.go
src/cmd/internal/objabi/symkind_string.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/elf.go
src/cmd/link/internal/ld/xcoff.go
src/cmd/link/internal/sym/symkind.go
src/cmd/link/internal/sym/symkind_string.go
src/runtime/libfuzzer.go
src/runtime/libfuzzer_amd64.s
src/runtime/libfuzzer_arm64.s