30 lines
840 B
Go
30 lines
840 B
Go
|
// Copyright 2021 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
//go:build (darwin || linux || windows || freebsd) && (amd64 || arm64)
|
||
|
|
||
|
package fuzz
|
||
|
|
||
|
import (
|
||
|
"internal/unsafeheader"
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
// coverage returns a []byte containing unique 8-bit counters for each edge of
|
||
|
// the instrumented source code. This coverage data will only be generated if
|
||
|
// `-d=libfuzzer` is set at build time. This can be used to understand the code
|
||
|
// coverage of a test execution.
|
||
|
func coverage() []byte {
|
||
|
addr := unsafe.Pointer(&_counters)
|
||
|
size := uintptr(unsafe.Pointer(&_ecounters)) - uintptr(addr)
|
||
|
|
||
|
var res []byte
|
||
|
*(*unsafeheader.Slice)(unsafe.Pointer(&res)) = unsafeheader.Slice{
|
||
|
Data: addr,
|
||
|
Len: int(size),
|
||
|
Cap: int(size),
|
||
|
}
|
||
|
return res
|
||
|
}
|