backends,bpf: add proper relocation support
authorYonghong Song <yhs@fb.com>
Sat, 16 Jun 2018 20:02:43 +0000 (13:02 -0700)
committerMark Wielaard <mark@klomp.org>
Thu, 21 Jun 2018 18:33:32 +0000 (20:33 +0200)
commitc1990d36cfe37a30bcc49422c37a6767fd190559
treefd16623796936526ef3de10feac44e50cdb47864
parent3e4f78a7be8faec96f89da58ce9849a274aef0c4
backends,bpf: add proper relocation support

Due to libdw does not have proper BPF relocation support,
the pahole cannot display filenames correctly for objects
with default llvm options. So we have to invent
a special option "llc -march=bpf -mattr=dwarfris" to
prevent llvm from generating cross-section dwarf relocation
records (https://reviews.llvm.org/rL326505).
The pahole related discussion is in linux netdev
mailing list (http://lists.openwall.net/netdev/2018/06/15/38, etc.)

We would like to add proper BPF relocation support
to libdw so eventually we could retire the special llc bpf
flag "-mattr=dwarfris".

The bpf relocations are defined in
llvm_repo:include/llvm/BinaryFormat/ELFRelocs/BPF.def:
  ELF_RELOC(R_BPF_NONE,        0)
  ELF_RELOC(R_BPF_64_64,       1)
  ELF_RELOC(R_BPF_64_32,      10)

Removed the relocation type R_BPF_MAP_FD whoes name does not
confirm to llvm definition and replaced it with R_BPF_64_64.
The BPF object is just a relocatible object, not an executable or
a shared library, so assign ELF type to REL only in bpf_reloc.def.

Signed-off-by: Yonghong Song <yhs@fb.com>
backends/ChangeLog
backends/Makefile.am
backends/bpf_init.c
backends/bpf_reloc.def
backends/bpf_symbol.c [new file with mode: 0644]
tests/ChangeLog
tests/Makefile.am
tests/run-reloc-bpf.sh [new file with mode: 0755]
tests/testfile-bpf-reloc.expect.bz2 [new file with mode: 0644]
tests/testfile-bpf-reloc.o.bz2 [new file with mode: 0644]