kbuild: merge vmlinux_link() between the ordinary link and Clang LTO
authorMasahiro Yamada <masahiroy@kernel.org>
Thu, 19 Aug 2021 00:57:37 +0000 (09:57 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 2 Sep 2021 23:17:20 +0000 (08:17 +0900)
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>
scripts/link-vmlinux.sh

index 36ef7b3..a6c4d0b 100755 (executable)
@@ -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,}                     \