• W
    bpf tools: Relocate eBPF programs · 8a47a6c5
    Wang Nan 提交于
    If an eBPF program accesses a map, LLVM generates a load instruction
    which loads an absolute address into a register, like this:
    
      ld_64   r1, <MCOperand Expr:(mymap)>
      ...
      call    2
    
    That ld_64 instruction will be recorded in relocation section.
    To enable the usage of that map, relocation must be done by replacing
    the immediate value by real map file descriptor so it can be found by
    eBPF map functions.
    
    This patch to the relocation work based on information collected by
    patches:
    
    'bpf tools: Collect symbol table from SHT_SYMTAB section',
    'bpf tools: Collect relocation sections from SHT_REL sections'
    and
    'bpf tools: Record map accessing instructions for each program'.
    
    For each instruction which needs relocation, it inject corresponding
    file descriptor to imm field. As a part of protocol, src_reg is set to
    BPF_PSEUDO_MAP_FD to notify kernel this is a map loading instruction.
    
    This is the final part of map relocation patch. The principle of map
    relocation is described in commit message of 'bpf tools: Collect symbol
    table from SHT_SYMTAB section'.
    Signed-off-by: NWang Nan <wangnan0@huawei.com>
    Acked-by: NAlexei Starovoitov <ast@plumgrid.com>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kaixu Xia <xiakaixu@huawei.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1435716878-189507-18-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    8a47a6c5
libbpf.c 17.5 KB