diff options
| author | Joey Jiao <quic_jiangenj@quicinc.com> | 2024-05-14 14:13:41 +0800 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-07-03 08:00:41 +0000 |
| commit | 1e708ca121f9ce1b476fbfe46a11372e4de36cb7 (patch) | |
| tree | 1996f63a454a4f53f9510fe321e50ced887a2ec3 /pkg | |
| parent | 703ca45bb7ef43679d6bfc489a86baa74cf518cc (diff) | |
pkg/cover: support read elf section range
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/backend/backend.go | 5 | ||||
| -rw-r--r-- | pkg/cover/backend/elf.go | 25 |
2 files changed, 30 insertions, 0 deletions
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) |
