diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2024-05-27 16:07:18 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-05-27 15:38:45 +0000 |
| commit | 1f9b5e5c3aa41af3a1403e3933f20a2776eb5f4b (patch) | |
| tree | 4b0949aebf14b55c4926f4804bcbb05185fd9d6a /pkg | |
| parent | ebd4cf5abe35b4d122640cf16b811d62de45be82 (diff) | |
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.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/backend/backend.go | 1 | ||||
| -rw-r--r-- | pkg/cover/backend/dwarf.go | 7 | ||||
| -rw-r--r-- | pkg/cover/backend/gvisor.go | 3 | ||||
| -rw-r--r-- | pkg/cover/backend/pc.go | 11 | ||||
| -rw-r--r-- | pkg/cover/report_test.go | 2 |
5 files changed, 10 insertions, 14 deletions
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) |
