From 1f9b5e5c3aa41af3a1403e3933f20a2776eb5f4b Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 27 May 2024 16:07:18 +0200 Subject: pkg/cover/backend: remove RestorePC Now that PCs are 64-bit we don't need RestorePC callback. Now we can just use PreviousInstructionPC, which does not require creation of ReportGenerator. --- pkg/cover/backend/backend.go | 1 - pkg/cover/backend/dwarf.go | 7 ------- pkg/cover/backend/gvisor.go | 3 --- pkg/cover/backend/pc.go | 11 +++++++++-- pkg/cover/report_test.go | 2 +- 5 files changed, 10 insertions(+), 14 deletions(-) (limited to 'pkg') diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index 5aa6a221c..b390f5cad 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -14,7 +14,6 @@ type Impl struct { Symbols []*Symbol Frames []Frame Symbolize func(pcs map[*Module][]uint64) ([]Frame, error) - RestorePC func(pc uint64) uint64 CallbackPoints []uint64 PreciseCoverage bool } diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go index 3f64cf752..a1f2b3e1e 100644 --- a/pkg/cover/backend/dwarf.go +++ b/pkg/cover/backend/dwarf.go @@ -223,19 +223,12 @@ func makeDWARFUnsafe(params *dwarfParams) (*Impl, error) { Symbolize: func(pcs map[*Module][]uint64) ([]Frame, error) { return symbolize(target, &interner, objDir, srcDir, buildDir, splitBuildDelimiters, pcs) }, - RestorePC: makeRestorePC(params), CallbackPoints: allCoverPoints[0], PreciseCoverage: preciseCoverage, } return impl, nil } -func makeRestorePC(params *dwarfParams) func(pc uint64) uint64 { - return func(pc uint64) uint64 { - return PreviousInstructionPC(params.target, pc) - } -} - func buildSymbols(symbols []*Symbol, ranges []pcRange, coverPoints [2][]uint64) []*Symbol { // Assign coverage point PCs to symbols. // Both symbols and coverage points are sorted, so we do it one pass over both. diff --git a/pkg/cover/backend/gvisor.go b/pkg/cover/backend/gvisor.go index 65a3da9a2..9d4fc68b3 100644 --- a/pkg/cover/backend/gvisor.go +++ b/pkg/cover/backend/gvisor.go @@ -48,9 +48,6 @@ func makeGvisor(target *targets.Target, objDir, srcDir, buildDir string, modules impl := &Impl{ Units: units, Frames: frames, - RestorePC: func(pc uint64) uint64 { - return pc - }, } return impl, nil } diff --git a/pkg/cover/backend/pc.go b/pkg/cover/backend/pc.go index 10462c243..24b4b296e 100644 --- a/pkg/cover/backend/pc.go +++ b/pkg/cover/backend/pc.go @@ -9,7 +9,11 @@ import ( "github.com/google/syzkaller/sys/targets" ) -func PreviousInstructionPC(target *targets.Target, pc uint64) uint64 { +func PreviousInstructionPC(target *targets.Target, vm string, pc uint64) uint64 { + if vm == "gvisor" { + // gVisor coverage returns real PCs that don't need adjustment. + return pc + } offset := instructionLen(target.Arch) pc -= offset // THUMB instructions are 2 or 4 bytes with low bit set. @@ -20,7 +24,10 @@ func PreviousInstructionPC(target *targets.Target, pc uint64) uint64 { return pc } -func NextInstructionPC(target *targets.Target, pc uint64) uint64 { +func NextInstructionPC(target *targets.Target, vm string, pc uint64) uint64 { + if vm == "gvisor" { + return pc + } offset := instructionLen(target.Arch) pc += offset // THUMB instructions are 2 or 4 bytes with low bit set. diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go index 07ae439ac..7ce519c83 100644 --- a/pkg/cover/report_test.go +++ b/pkg/cover/report_test.go @@ -348,7 +348,7 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) (*reports, if err != nil { t.Fatal(err) } - pcs = append(pcs, backend.PreviousInstructionPC(target, pc)) + pcs = append(pcs, backend.PreviousInstructionPC(target, "", pc)) t.Logf("using exact coverage PC 0x%x", pcs[0]) } else if target.OS == runtime.GOOS && (target.Arch == runtime.GOARCH || target.VMArch == runtime.GOARCH) { t.Fatal(err) -- cgit mrf-deployment