On Thu, Sep 07, 2023 at 12:01:18PM -0700, Nick Desaulniers wrote: > So we've got a curious report recently: > https://github.com/ClangBuiltLinux/linux/issues/1913 > > ld.lld: error: ld-temp.o <inline asm>:14577:1: symbol > '__BTF_ID__struct__cgroup__624' is already defined > __BTF_ID__struct__cgroup__624: > ^ > > It's been hard to pin down a SHA and .config to reproduce this, but > looking at the definition of BTF_ID's usage of __ID's usage of > __COUNTER__, and the two statements: > > kernel/bpf/helpers.c:2460:BTF_ID(struct, cgroup) > kernel/bpf/verifier.c:5075:BTF_ID(struct, cgroup) > > Is it possible that __COUNTER__ could evaluate to the same value > across 2 different translation units, leading to a name collision like > the above? hum, that probably the case, I see same counter values at different __BTF_ID_ symbols: ffffffff833fe540 r __BTF_ID__struct__bpf_bloom_filter__380 ffffffff833fe548 r __BTF_ID__struct__bpf_queue_stack__380 ffffffff833fe578 r __BTF_ID__struct__cgroup__380 perhaps we were just lucky not to hit that :-\ > > looking at another usage of BTF_ID other than struct > cgroup;kernel/bpf/helpers.c:2461:BTF_ID(func, bpf_cgroup_release) > is only defined in one translation unit > > Should one of those two `BTF_ID(struct, cgroup)` be removed? Is there > some other way we can avoid these collisions in the future? need to find some way to make the symbol unique, will check > > Was this a previously observed/fixed issue? first time I see that thanks, jirka