https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112849
--- Comment #1 from David Faust <david.faust at oracle dot com> --- Simple reproducer. Note how clang does not emit an entry in BTF_KIND_DATASEC for 'extern int a'. $ cat a.c extern int a; int b; int foo (void) { return a + b; } $ ~/toolchains/bpf/bin/bpf-unknown-none-gcc -gbtf -c a.c -o a.o $ /usr/sbin/bpftool btf dump file a.o [1] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED [2] FUNC_PROTO '(anon)' ret_type_id=1 vlen=0 [3] VAR 'a' type_id=1, linkage=extern [4] VAR 'b' type_id=1, linkage=global [5] FUNC 'foo' type_id=2 linkage=global [6] DATASEC '.bss' size=0 vlen=2 type_id=3 offset=0 size=4 (VAR 'a') type_id=4 offset=0 size=4 (VAR 'b') $ ~/toolchains/llvm/bin/clang -target bpf -c -g a.c -o a.o $ /usr/sbin/bpftool btf dump file a.o [1] FUNC_PROTO '(anon)' ret_type_id=2 vlen=0 [2] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED [3] FUNC 'foo' type_id=1 linkage=global [4] VAR 'a' type_id=2, linkage=extern [5] VAR 'b' type_id=2, linkage=global [6] DATASEC '.bss' size=0 vlen=1 type_id=5 offset=0 size=4 (VAR 'b')