aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/backend/dwarf.go6
-rw-r--r--pkg/cover/backend/dwarf_test.go10
-rw-r--r--pkg/cover/report_test.go21
3 files changed, 11 insertions, 26 deletions
diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go
index b13ba2ca8..331cab9e3 100644
--- a/pkg/cover/backend/dwarf.go
+++ b/pkg/cover/backend/dwarf.go
@@ -189,7 +189,7 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) {
}
allRanges = append(allRanges, ranges...)
allUnits = append(allUnits, units...)
- if IsKcovBrokenInCompiler(params.getCompilerVersion(module.Path)) {
+ if isKcovBrokenInCompiler(params.getCompilerVersion(module.Path)) {
preciseCoverage = false
}
}
@@ -304,7 +304,7 @@ func buildSymbols(symbols []*Symbol, ranges []pcRange, coverPoints [2][]uint64)
return symbols
}
-// Regexps to parse compiler version string in IsKcovBrokenInCompiler.
+// Regexps to parse compiler version string in isKcovBrokenInCompiler.
// Some targets (e.g. NetBSD) use g++ instead of gcc.
var gccRE = regexp.MustCompile(`gcc|GCC|g\+\+`)
var gccVersionRE = regexp.MustCompile(`(gcc|GCC|g\+\+).* ([0-9]{1,2})\.[0-9]+\.[0-9]+`)
@@ -312,7 +312,7 @@ var gccVersionRE = regexp.MustCompile(`(gcc|GCC|g\+\+).* ([0-9]{1,2})\.[0-9]+\.[
// GCC < 14 incorrectly tail-calls kcov callbacks, which does not let syzkaller
// verify that collected coverage points have matching callbacks.
// See https://github.com/google/syzkaller/issues/4447 for more information.
-func IsKcovBrokenInCompiler(versionStr string) bool {
+func isKcovBrokenInCompiler(versionStr string) bool {
if !gccRE.MatchString(versionStr) {
return false
}
diff --git a/pkg/cover/backend/dwarf_test.go b/pkg/cover/backend/dwarf_test.go
index bc2ebf12e..9d4da8e90 100644
--- a/pkg/cover/backend/dwarf_test.go
+++ b/pkg/cover/backend/dwarf_test.go
@@ -26,15 +26,13 @@ func TestIsKcovBrokenInCompiler(t *testing.T) {
"g++ (Compiler-Explorer-Build-gcc-2a9637b229f64775d82fb5917f83f71e8ad1911d-binutils-2.40) 14.0.1 20240125 (experimental)", // nolint:lll
}
for _, ver := range inputDataTrue {
- result := IsKcovBrokenInCompiler(ver)
- if !result {
- t.Fatalf("IsKcovBrokenInCompiler(`%s`) unexpectedly returned %v\n", ver, result)
+ if !isKcovBrokenInCompiler(ver) {
+ t.Fatalf("isKcovBrokenInCompiler(%q) unexpectedly returned false\n", ver)
}
}
for _, ver := range inputDataFalse {
- result := IsKcovBrokenInCompiler(ver)
- if result {
- t.Fatalf("IsKcovBrokenInCompiler(`%s`) unexpectedly returned %v\n", ver, result)
+ if isKcovBrokenInCompiler(ver) {
+ t.Fatalf("isKcovBrokenInCompiler(%q) unexpectedly returned true\n", ver)
}
}
}
diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go
index 729caba41..ab0be490b 100644
--- a/pkg/cover/report_test.go
+++ b/pkg/cover/report_test.go
@@ -40,9 +40,6 @@ type Test struct {
DebugInfo bool
AddCover bool
AddBadPc bool
- // Set by the testing environment depending on the target compiler.
- // See https://github.com/google/syzkaller/issues/4447.
- KcovIsBroken bool
// Set to true if the test should be skipped under broken kcov.
SkipIfKcovIsBroken bool
// Inexact coverage generated by AddCover=true may override empty Result.
@@ -135,17 +132,12 @@ func TestReportGenerator(t *testing.T) {
if target.BrokenCompiler != "" {
t.Skip("skipping the test due to broken cross-compiler:\n" + target.BrokenCompiler)
}
- kcovIsBroken := targetKcovIsBroken(t, target)
for _, test := range tests {
test := test
- test.KcovIsBroken = kcovIsBroken
t.Run(test.Name, func(t *testing.T) {
if test.Supports != nil && !test.Supports(target) {
t.Skip("unsupported target")
}
- if test.SkipIfKcovIsBroken && test.KcovIsBroken {
- t.Skip("coverage testing requested, but kcov is broken")
- }
t.Parallel()
testReportGenerator(t, target, test)
})
@@ -281,14 +273,6 @@ func buildTestBinary(t *testing.T, target *targets.Target, test *Test, dir strin
return bin
}
-// Work around https://github.com/google/syzkaller/issues/4447. Do not use for anything else.
-func targetKcovIsBroken(t *testing.T, target *targets.Target) bool {
- if out, err := osutil.RunCmd(time.Hour, "", target.CCompiler, "--version"); err == nil {
- return backend.IsKcovBrokenInCompiler(string(out))
- }
- return true
-}
-
type reports struct {
html []byte
csv []byte
@@ -328,6 +312,9 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) (*reports,
if err != nil {
return nil, err
}
+ if !rg.PreciseCoverage && test.SkipIfKcovIsBroken {
+ t.Skip("coverage testing requested, but kcov is broken")
+ }
if test.AddCover {
var pcs []uint64
Inexact := false
@@ -363,7 +350,7 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) (*reports,
t.Logf("using inexact coverage range 0x%x-0x%x", main.Addr, main.Addr+uint64(main.Size))
Inexact = true
}
- if Inexact && test.Result == "" && !test.KcovIsBroken {
+ if Inexact && test.Result == "" && rg.PreciseCoverage {
test.Result = fmt.Sprintf("%d out of %d PCs returned by kcov do not have matching coverage callbacks",
len(pcs)-1, len(pcs))
}