Currently, clang LTO built vmlinux won't work with pahole. LTO introduced cross-cu dwarf tag references and broke current pahole model which handles one cu as a time. The solution is to merge all cu's as one pahole cu as in [1]. We would like to do this merging only if cross-cu dwarf references happens. The LTO build mode is a pretty good indication for that. In earlier version of this patch ([2]), clang flag -grecord-gcc-switches is proposed to add to compilation flags so pahole could detect "-flto" and then merging cu's. This will increate the binary size of 1% without LTO though. Arnaldo suggested to use a note to indicate the vmlinux is built with LTO. Such a cheap way to get whether the vmlinux is built with LTO or not helps pahole but is also useful for tracing as LTO may inline/delete/demote global functions, promote static functions, etc. This patch set added an elfnote with type BUILD_COMPILER_LTO_INFO. The owner of the note is "Linux". Patch #1 did some refactoring and Patch #2 added the elfnote with BUILD_COMPILER_LTO_INFO to indicate whether vmlinux is built with LTO or not. [1] https://lore.kernel.org/bpf/20210325065316.3121287-1-yhs@xxxxxx/ [2] https://lore.kernel.org/bpf/20210331001623.2778934-1-yhs@xxxxxx/ Yonghong Song (2): kbuild: move LINUX_ELFNOTE_BUILD_SALT to elfnote.h kbuild: add an elfnote with type BUILD_COMPILER_LTO_INFO include/linux/build-salt.h | 2 -- include/linux/compiler.h | 8 ++++++++ include/linux/elfnote.h | 6 ++++++ init/version.c | 2 ++ scripts/mod/modpost.c | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) -- 2.30.2