From 1417953aed7e2cf2915fc27de870f3229f3cb66f Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Wed, 17 Jan 2024 16:35:42 +0100 Subject: Revert "pkg/cover: ensure that all PCs returned by kcov have matching callbacks" This reverts commit 3392690e404b6ba5022825d33259bc2e9e89eb53. x86 bots are unable to generate coverage reports, because they actually have coverage PCs without matching callbacks. --- pkg/cover/backend/backend.go | 11 +++++------ pkg/cover/backend/dwarf.go | 11 +---------- pkg/cover/report.go | 15 --------------- pkg/cover/report_test.go | 32 +++++--------------------------- 4 files changed, 11 insertions(+), 58 deletions(-) (limited to 'pkg') diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index dc3fd7f0c..3bd95a6fa 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -11,12 +11,11 @@ import ( ) type Impl struct { - Units []*CompileUnit - Symbols []*Symbol - Frames []Frame - Symbolize func(pcs map[*Module][]uint64) ([]Frame, error) - RestorePC func(pc uint32) uint64 - CoverPoints map[uint64]bool + Units []*CompileUnit + Symbols []*Symbol + Frames []Frame + Symbolize func(pcs map[*Module][]uint64) ([]Frame, error) + RestorePC func(pc uint32) uint64 } type Module struct { diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go index 75063f9e0..924ae151a 100644 --- a/pkg/cover/backend/dwarf.go +++ b/pkg/cover/backend/dwarf.go @@ -184,22 +184,13 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { // On FreeBSD .text address in ELF is 0, but .text is actually mapped at 0xffffffff. pcBase = ^uint64(0) } - var allCoverPointsMap = make(map[uint64]bool) - for i := 0; i < 2; i++ { - for _, pc := range allCoverPoints[i] { - if pc != 0 { - allCoverPointsMap[pc] = true - } - } - } impl := &Impl{ Units: allUnits, Symbols: allSymbols, Symbolize: func(pcs map[*Module][]uint64) ([]Frame, error) { return symbolize(target, objDir, srcDir, buildDir, pcs) }, - RestorePC: makeRestorePC(params, pcBase), - CoverPoints: allCoverPointsMap, + RestorePC: makeRestorePC(params, pcBase), } return impl, nil } diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 2fffbab14..d150fcab7 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -88,18 +88,12 @@ func (rg *ReportGenerator) prepareFileMap(progs []Prog) (map[string]*file, error } } progPCs := make(map[uint64]map[int]bool) - allProgPCs := make(map[uint64]bool) - matchedProgPCs := make(map[uint64]bool) for i, prog := range progs { for _, pc := range prog.PCs { if progPCs[pc] == nil { progPCs[pc] = make(map[int]bool) } progPCs[pc][i] = true - allProgPCs[pc] = true - if rg.CoverPoints[pc] { - matchedProgPCs[pc] = true - } } } matchedPC := false @@ -129,15 +123,6 @@ func (rg *ReportGenerator) prepareFileMap(progs []Prog) (map[string]*file, error if !matchedPC { return nil, fmt.Errorf("coverage doesn't match any coverage callbacks") } - if len(allProgPCs) != len(matchedProgPCs) { - for mismatch := range allProgPCs { - if !matchedProgPCs[mismatch] { - return nil, fmt.Errorf("%d out of %d PCs returned by kcov do not have matching "+ - "coverage callbacks. Check the discoverModules() code, %v", - len(allProgPCs)-len(matchedProgPCs), len(allProgPCs), mismatch) - } - } - } for _, unit := range rg.Units { f := files[unit.Name] for _, pc := range unit.PCs { diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go index 2c07cb107..64baf3ee2 100644 --- a/pkg/cover/report_test.go +++ b/pkg/cover/report_test.go @@ -11,7 +11,6 @@ package cover import ( "bytes" "encoding/csv" - "fmt" "os" "path/filepath" "reflect" @@ -37,10 +36,8 @@ type Test struct { Progs []Prog DebugInfo bool AddCover bool - AddBadPc bool - // Inexact coverage generated by AddCover=true may override empty Result. - Result string - Supports func(target *targets.Target) bool + Result string + Supports func(target *targets.Target) bool } func TestReportGenerator(t *testing.T) { @@ -76,14 +73,6 @@ func TestReportGenerator(t *testing.T) { CFlags: []string{"-fsanitize-coverage=trace-pc"}, DebugInfo: true, }, - { - Name: "mismatch-pcs", - AddCover: true, - AddBadPc: true, - CFlags: []string{"-fsanitize-coverage=trace-pc"}, - DebugInfo: true, - Result: `.* do not have matching coverage callbacks`, - }, { Name: "good-pie", AddCover: true, @@ -143,7 +132,7 @@ func TestReportGenerator(t *testing.T) { } func testReportGenerator(t *testing.T, target *targets.Target, test Test) { - rep, csv, err := generateReport(t, target, &test) + rep, csv, err := generateReport(t, target, test) if err != nil { if test.Result == "" { t.Fatalf("expected no error, but got:\n%v", err) @@ -188,7 +177,7 @@ void* aslr_base() { return NULL; } void __sanitizer_cov_trace_pc() { printf("%llu", (long long)(__builtin_return_address(0) - aslr_base())); } ` -func buildTestBinary(t *testing.T, target *targets.Target, test *Test, dir string) string { +func buildTestBinary(t *testing.T, target *targets.Target, test Test, dir string) string { kcovSrc := filepath.Join(dir, "kcov.c") kcovObj := filepath.Join(dir, "kcov.o") if err := osutil.WriteFile(kcovSrc, []byte(kcovCode)); err != nil { @@ -268,7 +257,7 @@ func buildTestBinary(t *testing.T, target *targets.Target, test *Test, dir strin return bin } -func generateReport(t *testing.T, target *targets.Target, test *Test) ([]byte, []byte, error) { +func generateReport(t *testing.T, target *targets.Target, test Test) ([]byte, []byte, error) { dir := t.TempDir() bin := buildTestBinary(t, target, test, dir) cfg := &mgrconfig.Config{ @@ -303,7 +292,6 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) ([]byte, [ } if test.AddCover { var pcs []uint64 - Inexact := false // Sanitizers crash when installing signal handlers with static libc. const sanitizerOptions = "handle_segv=0:handle_sigbus=0:handle_sigfpe=0" cmd := osutil.Command(bin) @@ -334,16 +322,6 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) ([]byte, [ pcs = append(pcs, main.Addr+uint64(off)) } t.Logf("using inexact coverage range 0x%x-0x%x", main.Addr, main.Addr+uint64(main.Size)) - Inexact = true - } - // All PCs are required to have corresponding coverage callbacks. If the expected result is empty, - // override it with an error message. - if Inexact && test.Result == "" { - test.Result = fmt.Sprintf("%d out of %d PCs returned by kcov do not have matching coverage callbacks", - len(pcs)-1, len(pcs)) - } - if test.AddBadPc { - pcs = append(pcs, 0xdeadbeef) } progs = append(progs, Prog{Data: "main", PCs: pcs}) } -- cgit mrf-deployment