From 74037f858915b92302cfd72bce57d7751311ea16 Mon Sep 17 00:00:00 2001 From: Hengqi Chen Date: Thu, 24 Mar 2022 23:15:56 +0800 Subject: [PATCH] link/kprobe: Allow fallback to tracefs on old kernels Centos 8 (with kernel 4.18) has kprobe PMU support, but don't allow `.` in symbol name. Add a new option to workaround this problem. Signed-off-by: Hengqi Chen --- link/kprobe.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/link/kprobe.go b/link/kprobe.go index 7a849c8f6..a72997352 100644 --- a/link/kprobe.go +++ b/link/kprobe.go @@ -49,6 +49,13 @@ type KprobeOptions struct { // // Needs kernel 5.15+. Cookie uint64 + + // Fallback to legacy tracefs kprobe interface + // event if kernel has kprobe PMU + // + // This allows old kernels which has kprobe PMU + // but don't support `.` in symbol names to work properly + Legacy bool } const ( @@ -173,7 +180,7 @@ func kprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions, ret bool) (* if err == nil { return tp, nil } - if err != nil && !errors.Is(err, ErrNotSupported) { + if err != nil && !errors.Is(err, ErrNotSupported) && !opts.Legacy { return nil, fmt.Errorf("creating perf_kprobe PMU: %w", err) }