kbuild: merge vmlinux_link() between the ordinary link and Clang LTO

When Clang LTO is enabled, vmlinux_link() reuses vmlinux.o instead of
re-linking ${KBUILD_VMLINUX_OBJS} and ${KBUILD_VMLINUX_LIBS}.

That is the only difference here, so merge the similar code.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
Masahiro Yamada 2021-08-19 09:57:37 +09:00
parent a8390ba9dd
commit 8f1305124e
1 changed files with 14 additions and 16 deletions

View File

@ -154,12 +154,23 @@ vmlinux_link()
local objects
local strip_debug
local map_option
local objs
local libs
info LD ${output}
# skip output file argument
shift
if [ -n "${CONFIG_LTO_CLANG}" ]; then
# Use vmlinux.o instead of performing the slow LTO link again.
objs=vmlinux.o
libs=
else
objs="${KBUILD_VMLINUX_OBJS}"
libs="${KBUILD_VMLINUX_LIBS}"
fi
# The kallsyms linking does not need debug symbols included.
if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then
strip_debug=-Wl,--strip-debug
@ -170,22 +181,9 @@ vmlinux_link()
fi
if [ "${SRCARCH}" != "um" ]; then
if [ -n "${CONFIG_LTO_CLANG}" ]; then
# Use vmlinux.o instead of performing the slow LTO
# link again.
objects="--whole-archive \
vmlinux.o \
--no-whole-archive \
${@}"
else
objects="--whole-archive \
${KBUILD_VMLINUX_OBJS} \
--no-whole-archive \
--start-group \
${KBUILD_VMLINUX_LIBS} \
--end-group \
${@}"
fi
objects="--whole-archive ${objs} --no-whole-archive \
--start-group ${libs} --end-group \
$@"
${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \
${strip_debug#-Wl,} \