On Mon, Jun 08, 2020 at 01:39:59PM +0000, Maria Teguiani wrote:
From: Fangrui Song maskray@google.com
Simplify gen_btf logic to make it work with llvm-objcopy. The existing 'file format' and 'architecture' parsing logic is brittle and does not work with llvm-objcopy/llvm-objdump.
'file format' output of llvm-objdump>=11 will match GNU objdump, but 'architecture' (bfdarch) may not.
.BTF in .tmp_vmlinux.btf is non-SHF_ALLOC. Add the SHF_ALLOC flag because it is part of vmlinux image used for introspection. C code can reference the section via linker script defined __start_BTF and __stop_BTF. This fixes a small problem that previous .BTF had the SHF_WRITE flag (objcopy -I binary -O elf* synthesized .data).
Additionally, `objcopy -I binary` synthesized symbols _binary__btf_vmlinux_bin_start and _binary__btf_vmlinux_bin_stop (not used elsewhere) are replaced with more commonplace __start_BTF and __stop_BTF.
Add 2>/dev/null because GNU objcopy (but not llvm-objcopy) warns "empty loadable segment detected at vaddr=0xffffffff81000000, is this intentional?"
We use a dd command to change the e_type field in the ELF header from ET_EXEC to ET_REL so that lld will accept .btf.vmlinux.bin.o. Accepting ET_EXEC as an input file is an extremely rare GNU ld feature that lld does not intend to support, because this is error-prone.
The output section description .BTF in include/asm-generic/vmlinux.lds.h avoids potential subtle orphan section placement issues and suppresses --orphan-handling=warn warnings.
Fixes: df786c9b9476 ("bpf: Force .BTF section start to zero when dumping from vmlinux") Fixes: cb0cc635c7a9 ("powerpc: Include .BTF section") Reported-by: Nathan Chancellor natechancellor@gmail.com Signed-off-by: Fangrui Song maskray@google.com Signed-off-by: Daniel Borkmann daniel@iogearbox.net Tested-by: Stanislav Fomichev sdf@google.com Tested-by: Andrii Nakryiko andriin@fb.com Reviewed-by: Stanislav Fomichev sdf@google.com Reviewed-by: Kees Cook keescook@chromium.org Acked-by: Andrii Nakryiko andriin@fb.com Acked-by: Michael Ellerman mpe@ellerman.id.au (powerpc) Link: https://github.com/ClangBuiltLinux/linux/issues/871 Link: https://lore.kernel.org/bpf/20200318222746.173648-1-maskray@google.com (cherry picked from commit 90ceddcb495008ac8ba7a3dce297841efcd7d584) Cc: stable@vger.kernel.org # 5.4.x Signed-off-by: Maria Teguiani teguiani@google.com
I've also queued this up to the 5.6.y tree, thanks.
greg k-h