• Wang Nan's avatar
    perf test: Add libbpf relocation checker · 7b6982ce
    Wang Nan authored
    There's a bug in LLVM that it can generate unneeded relocation
    information. See [1] and [2]. Libbpf should check the target section of
    a relocation symbol.
    
    This patch adds a testcase which references a global variable (BPF
    doesn't support global variables). Before fixing libbpf, the new test
    case can be loaded into kernel, the global variable acts like the first
    map. It is incorrect.
    
    Result:
    
      # ~/perf test BPF
      37: Test BPF filter                                          :
      37.1: Test basic BPF filtering                               : Ok
      37.2: Test BPF prologue generation                           : Ok
      37.3: Test BPF relocation checker                            : FAILED!
    
      # ~/perf test -v BPF
      ...
      libbpf: loading object '[bpf_relocation_test]' from buffer
      libbpf: section .strtab, size 126, link 0, flags 0, type=3
      libbpf: section .text, size 0, link 0, flags 6, type=1
      libbpf: section .data, size 0, link 0, flags 3, type=1
      libbpf: section .bss, size 0, link 0, flags 3, type=8
      libbpf: section func=sys_write, size 104, link 0, flags 6, type=1
      libbpf: found program func=sys_write
      libbpf: section .relfunc=sys_write, size 16, link 10, flags 0, type=9
      libbpf: section maps, size 16, link 0, flags 3, type=1
      libbpf: maps in [bpf_relocation_test]: 16 bytes
      libbpf: section license, size 4, link 0, flags 3, type=1
      libbpf: license of [bpf_relocation_test] is GPL
      libbpf: section version, size 4, link 0, flags 3, type=1
      libbpf: kernel version of [bpf_relocation_test] is 40400
      libbpf: section .symtab, size 144, link 1, flags 0, type=2
      libbpf: map 0 is "my_table"
      libbpf: collecting relocating info for: 'func=sys_write'
      libbpf: relocation: insn_idx=7
      Success unexpectedly: libbpf error when dealing with relocation
      test child finished with -1
      ---- end ----
      Test BPF filter subtest 2: FAILED!
    
    [1] https://llvm.org/bugs/show_bug.cgi?id=26243
    [2] https://patchwork.ozlabs.org/patch/571385/Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Li Zefan <lizefan@huawei.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1453715801-7732-2-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    7b6982ce
bpf.c 5.72 KB