• Masahiro Yamada's avatar
    kbuild: merge temporary vmlinux for BTF and kallsyms · b1a9a5e0
    Masahiro Yamada authored
    CONFIG_DEBUG_INFO_BTF=y requires one additional link step.
    (.tmp_vmlinux.btf)
    
    CONFIG_KALLSYMS=y requires two additional link steps.
    (.tmp_vmlinux.kallsyms1 and .tmp_vmlinux.kallsyms2)
    
    Enabling both requires three additional link steps.
    
    When CONFIG_DEBUG_INFO_BTF=y and CONFIG_KALLSYMS=y, the current build
    process is as follows:
    
        KSYMS   .tmp_vmlinux.kallsyms0.S
        AS      .tmp_vmlinux.kallsyms0.o
        LD      .tmp_vmlinux.btf             # temporary vmlinux for BTF
        BTF     .btf.vmlinux.bin.o
        LD      .tmp_vmlinux.kallsyms1       # temporary vmlinux for kallsyms step 1
        NM      .tmp_vmlinux.kallsyms1.syms
        KSYMS   .tmp_vmlinux.kallsyms1.S
        AS      .tmp_vmlinux.kallsyms1.o
        LD      .tmp_vmlinux.kallsyms2       # temporary vmlinux for kallsyms step 2
        NM      .tmp_vmlinux.kallsyms2.syms
        KSYMS   .tmp_vmlinux.kallsyms2.S
        AS      .tmp_vmlinux.kallsyms2.o
        LD      vmlinux                      # final vmlinux
    
    This is redundant because the BTF generation and the kallsyms step 1 can
    be performed against the same temporary vmlinux.
    
    When both CONFIG_DEBUG_INFO_BTF and CONFIG_KALLSYMS are enabled, we can
    reduce the number of link steps by one.
    
    This commit changes the build process as follows:
    
        KSYMS   .tmp_vmlinux0.kallsyms.S
        AS      .tmp_vmlinux0.kallsyms.o
        LD      .tmp_vmlinux1                # temporary vmlinux for BTF and kallsyms step 1
        BTF     .tmp_vmlinux1.btf.o
        NM      .tmp_vmlinux1.syms
        KSYMS   .tmp_vmlinux1.kallsyms.S
        AS      .tmp_vmlinux1.kallsyms.o
        LD      .tmp_vmlinux2                # temporary vmlinux for kallsyms step 2
        NM      .tmp_vmlinux2.syms
        KSYMS   .tmp_vmlinux2.kallsyms.S
        AS      .tmp_vmlinux2.kallsyms.o
        LD      vmlinux                      # final vmlinux
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    b1a9a5e0
link-vmlinux.sh 7.75 KB