From 1e708ca121f9ce1b476fbfe46a11372e4de36cb7 Mon Sep 17 00:00:00 2001 From: Joey Jiao Date: Tue, 14 May 2024 14:13:41 +0800 Subject: pkg/cover: support read elf section range --- pkg/cover/backend/backend.go | 5 +++++ pkg/cover/backend/elf.go | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) (limited to 'pkg') diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index 49f2f9508..9847bc8b3 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -58,6 +58,11 @@ type Range struct { EndCol int } +type SecRange struct { + Start uint64 + End uint64 +} + const LineEnd = 1 << 30 func Make(target *targets.Target, vm, objDir, srcDir, buildDir string, splitBuild bool, diff --git a/pkg/cover/backend/elf.go b/pkg/cover/backend/elf.go index 25536c170..2126292b4 100644 --- a/pkg/cover/backend/elf.go +++ b/pkg/cover/backend/elf.go @@ -220,6 +220,31 @@ func elfGetCompilerVersion(path string) string { return string(data[:]) } +func elfReadTextSecRange(module KernelModule) (*SecRange, error) { + text, err := elfReadTextSec(module) + if err != nil { + return nil, err + } + r := &SecRange{ + Start: text.Addr, + End: text.Addr + text.Size, + } + return r, nil +} + +func elfReadTextSec(module KernelModule) (*elf.Section, error) { + file, err := elf.Open(module.Path) + if err != nil { + return nil, err + } + defer file.Close() + text := file.Section(".text") + if text == nil { + return nil, fmt.Errorf("no .text section in the object file") + } + return text, nil +} + func getPCBase(cfg *mgrconfig.Config) (uint64, error) { bin := filepath.Join(cfg.KernelObj, cfg.SysTarget.KernelObject) file, err := elf.Open(bin) -- cgit mrf-deployment