diff options
author | Andrii Nakryiko <andrii@kernel.org> | 2021-03-26 07:30:36 +0300 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2021-03-26 19:45:17 +0300 |
commit | 36e7985160782bc683001afe09e33a288435def0 (patch) | |
tree | 24c9ede976c5357a23ffab13bf742d2330fb8f6c /kernel/bpf/verifier.c | |
parent | fcb8d0d7587e0f2b7439d6c14a380fd17a450f96 (diff) | |
download | linux-36e7985160782bc683001afe09e33a288435def0.tar.xz |
libbpf: Preserve empty DATASEC BTFs during static linking
Ensure that BPF static linker preserves all DATASEC BTF types, even if some of
them might not have any variable information at all. This may happen if the
compiler promotes local initialized variable contents into .rodata section and
there are no global or static functions in the program.
For example,
$ cat t.c
struct t { char a; char b; char c; };
void bar(struct t*);
void find() {
struct t tmp = {1, 2, 3};
bar(&tmp);
}
$ clang -target bpf -O2 -g -S t.c
.long 104 # BTF_KIND_DATASEC(id = 8)
.long 251658240 # 0xf000000
.long 0
.ascii ".rodata" # string offset=104
$ clang -target bpf -O2 -g -c t.c
$ readelf -S t.o | grep data
[ 4] .rodata PROGBITS 0000000000000000 00000090
Fixes: 8fd27bf69b86 ("libbpf: Add BPF static linker BTF and BTF.ext support")
Reported-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20210326043036.3081011-1-andrii@kernel.org
Diffstat (limited to 'kernel/bpf/verifier.c')
0 files changed, 0 insertions, 0 deletions