Commit 02dabc24 authored by Daniel T. Lee's avatar Daniel T. Lee Committed by Alexei Starovoitov

samples/bpf: fix symbol mismatch by compiler optimization

Currently, multiple kprobe programs are suffering from symbol mismatch
due to compiler optimization. These optimizations might induce
additional suffix to the symbol name such as '.isra' or '.constprop'.

    # egrep ' finish_task_switch| __netif_receive_skb_core' /proc/kallsyms
    ffffffff81135e50 t finish_task_switch.isra.0
    ffffffff81dd36d0 t __netif_receive_skb_core.constprop.0
    ffffffff8205cc0e t finish_task_switch.isra.0.cold
    ffffffff820b1aba t __netif_receive_skb_core.constprop.0.cold

To avoid this, this commit replaces the original kprobe section to
kprobe.multi in order to match symbol with wildcard characters. Here,
asterisk is used for avoiding symbol mismatch.
Signed-off-by: default avatarDaniel T. Lee <danieltimlee@gmail.com>
Link: https://lore.kernel.org/r/20230818090119.477441-5-danieltimlee@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 4a0ee788
...@@ -118,7 +118,7 @@ int oncpu(struct trace_event_raw_sched_switch *ctx) ...@@ -118,7 +118,7 @@ int oncpu(struct trace_event_raw_sched_switch *ctx)
/* record previous thread sleep time */ /* record previous thread sleep time */
u32 pid = ctx->prev_pid; u32 pid = ctx->prev_pid;
#else #else
SEC("kprobe/finish_task_switch") SEC("kprobe.multi/finish_task_switch*")
int oncpu(struct pt_regs *ctx) int oncpu(struct pt_regs *ctx)
{ {
struct task_struct *p = (void *) PT_REGS_PARM1(ctx); struct task_struct *p = (void *) PT_REGS_PARM1(ctx);
......
...@@ -22,11 +22,12 @@ ...@@ -22,11 +22,12 @@
* Number of arguments and their positions can change, etc. * Number of arguments and their positions can change, etc.
* In such case this bpf+kprobe example will no longer be meaningful * In such case this bpf+kprobe example will no longer be meaningful
*/ */
SEC("kprobe/__netif_receive_skb_core") SEC("kprobe.multi/__netif_receive_skb_core*")
int bpf_prog1(struct pt_regs *ctx) int bpf_prog1(struct pt_regs *ctx)
{ {
/* attaches to kprobe __netif_receive_skb_core, /* attaches to kprobe __netif_receive_skb_core,
* looks for packets on loobpack device and prints them * looks for packets on loobpack device and prints them
* (wildcard is used for avoiding symbol mismatch due to optimization)
*/ */
char devname[IFNAMSIZ]; char devname[IFNAMSIZ];
struct net_device *dev; struct net_device *dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment