Re: [PATCH bpf-next v6] bpf: Support llvm-objcopy for vmlinux BTF
From: Daniel Borkmann <daniel@iogearbox.net>
Date: 2020-03-19 12:04:53
Also in:
bpf
On 3/19/20 11:27 AM, Michael Ellerman wrote:
Fangrui Song [off-list ref] writes:quoted
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. v6: - drop llvm-objdump from the title. We don't run objdump now - delete unused local variables: bin_arch, bin_format and bin_file - mention in the comment that lld does not allow an ET_EXEC input - rename BTF back to .BTF . The section name is assumed by bpftool - add output section description to include/asm-generic/vmlinux.lds.h - mention cb0cc635c7a9 ("powerpc: Include .BTF section") v5: - rebase on top of bpf-next/master - rename .BTF to BTF Fixes: df786c9b9476 ("bpf: Force .BTF section start to zero when dumping from vmlinux") Fixes: cb0cc635c7a9 ("powerpc: Include .BTF section") Link: https://github.com/ClangBuiltLinux/linux/issues/871 Signed-off-by: Fangrui Song <redacted> Reported-by: Nathan Chancellor <redacted> Reviewed-by: Stanislav Fomichev <redacted> Tested-by: Stanislav Fomichev <redacted> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Andrii Nakryiko <redacted> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: David S. Miller <davem@davemloft.net> Cc: Kees Cook <redacted> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Naveen N. Rao <redacted> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: clang-built-linux@googlegroups.com
Applied, thanks everyone!