Skip to content

Commit 22deea6

Browse files
committed
fix: Get bpf prog func name from insns
It'll get wrong func name of bpf prog when there are multiple bpf progs in one BTF. Instead, get the very first symbol name from bpf prog's instructions as its entry func name. Signed-off-by: Leon Hwang <hffilwlqm@gmail.com>
1 parent d932b39 commit 22deea6

File tree

1 file changed

+6
-18
lines changed

1 file changed

+6
-18
lines changed

internal/vista/bpf_prog.go

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"fmt"
1010

1111
"github.com/cilium/ebpf"
12-
"github.com/cilium/ebpf/btf"
1312
"golang.org/x/sys/unix"
1413
)
1514

@@ -50,26 +49,15 @@ func getEntryFuncName(prog *ebpf.Program) (string, string, error) {
5049
return "", "", fmt.Errorf("failed to get program info: %w", err)
5150
}
5251

53-
id, ok := info.BTFID()
54-
if !ok {
55-
return "", "", errNotFound
56-
}
57-
58-
handle, err := btf.NewHandleFromID(id)
59-
if err != nil {
60-
return "", "", fmt.Errorf("failed to get BTF handle: %w", err)
61-
}
62-
defer handle.Close()
63-
64-
spec, err := handle.Spec(nil)
52+
insns, err := info.Instructions()
6553
if err != nil {
66-
return "", "", fmt.Errorf("failed to get BTF spec: %w", err)
54+
return "", "", fmt.Errorf("failed to get program instructions: %w", err)
6755
}
6856

69-
iter := spec.Iterate()
70-
for iter.Next() {
71-
if fn, ok := iter.Type.(*btf.Func); ok {
72-
return fn.Name, info.Name, nil
57+
for _, insn := range insns {
58+
sym := insn.Symbol()
59+
if sym != "" {
60+
return sym, info.Name, nil
7361
}
7462
}
7563

0 commit comments

Comments
 (0)