• Jiri Olsa's avatar
    libbpf: Add bpf_program__attach_kprobe_multi_opts function · ddc6b049
    Jiri Olsa authored
    Adding bpf_program__attach_kprobe_multi_opts function for attaching
    kprobe program to multiple functions.
    
      struct bpf_link *
      bpf_program__attach_kprobe_multi_opts(const struct bpf_program *prog,
                                            const char *pattern,
                                            const struct bpf_kprobe_multi_opts *opts);
    
    User can specify functions to attach with 'pattern' argument that
    allows wildcards (*?' supported) or provide symbols or addresses
    directly through opts argument. These 3 options are mutually
    exclusive.
    
    When using symbols or addresses, user can also provide cookie value
    for each symbol/address that can be retrieved later in bpf program
    with bpf_get_attach_cookie helper.
    
      struct bpf_kprobe_multi_opts {
              size_t sz;
              const char **syms;
              const unsigned long *addrs;
              const __u64 *cookies;
              size_t cnt;
              bool retprobe;
              size_t :0;
      };
    
    Symbols, addresses and cookies are provided through opts object
    (syms/addrs/cookies) as array pointers with specified count (cnt).
    
    Each cookie value is paired with provided function address or symbol
    with the same array index.
    
    The program can be also attached as return probe if 'retprobe' is set.
    
    For quick usage with NULL opts argument, like:
    
      bpf_program__attach_kprobe_multi_opts(prog, "ksys_*", NULL)
    
    the 'prog' will be attached as kprobe to 'ksys_*' functions.
    
    Also adding new program sections for automatic attachment:
    
      kprobe.multi/<symbol_pattern>
      kretprobe.multi/<symbol_pattern>
    
    The symbol_pattern is used as 'pattern' argument in
    bpf_program__attach_kprobe_multi_opts function.
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220316122419.933957-10-jolsa@kernel.org
    ddc6b049
libbpf.c 316 KB