• Yonghong Song's avatar
    bpf: Fix a compilation failure with clang lto build · 3144bfa5
    Yonghong Song authored
    When building the kernel with clang lto (CONFIG_LTO_CLANG_FULL=y), the
    following compilation error will appear:
    
      $ make LLVM=1 LLVM_IAS=1 -j
      ...
      ld.lld: error: ld-temp.o <inline asm>:26889:1: symbol 'cgroup_storage_map_btf_ids' is already defined
      cgroup_storage_map_btf_ids:;
      ^
      make[1]: *** [/.../bpf-next/scripts/Makefile.vmlinux_o:61: vmlinux.o] Error 1
    
    In local_storage.c, we have
      BTF_ID_LIST_SINGLE(cgroup_storage_map_btf_ids, struct, bpf_local_storage_map)
    Commit c4bcfb38 ("bpf: Implement cgroup storage available to
    non-cgroup-attached bpf progs") added the above identical BTF_ID_LIST_SINGLE
    definition in bpf_cgrp_storage.c. With duplicated definitions, llvm linker
    complains with lto build.
    
    Also, extracting btf_id of 'struct bpf_local_storage_map' is defined four times
    for sk, inode, task and cgrp local storages. Let us define a single global one
    with a different name than cgroup_storage_map_btf_ids, which also fixed
    the lto compilation error.
    
    Fixes: c4bcfb38 ("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs")
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20221130052147.1591625-1-yhs@fb.com
    3144bfa5
bpf_cgrp_storage.c 6.12 KB