aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJoey Jiao <quic_jiangenj@quicinc.com>2024-05-14 14:13:41 +0800
committerDmitry Vyukov <dvyukov@google.com>2024-07-03 08:00:41 +0000
commit1e708ca121f9ce1b476fbfe46a11372e4de36cb7 (patch)
tree1996f63a454a4f53f9510fe321e50ced887a2ec3 /pkg
parent703ca45bb7ef43679d6bfc489a86baa74cf518cc (diff)
pkg/cover: support read elf section range
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/backend/backend.go5
-rw-r--r--pkg/cover/backend/elf.go25
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)