kbuild: refactor cmd_modversions_c
authorMasahiro Yamada <masahiroy@kernel.org>
Tue, 5 Apr 2022 11:33:57 +0000 (20:33 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Sat, 7 May 2022 18:16:58 +0000 (03:16 +0900)
cmd_modversions_c implements two parts; run genksyms to calculate CRCs
of exported symbols, run $(LD) to update the object with the CRCs. The
latter is not executed for CONFIG_LTO_CLANG=y since the object is not
ELF but LLVM bit code at this point.

The first part can be unified because we can always use $(NM) instead
of "$(OBJDUMP) -h" to dump the symbols.

Split the code into the two macros, cmd_gen_symversions_c and
cmd_modversions.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
scripts/Makefile.build

index 3ef2373f0a5795836b666b8f6d4fbf7c83a2b11b..e1992ddc35f6324cad79fe064e973ef281a9e22d 100644 (file)
@@ -168,29 +168,25 @@ ifdef CONFIG_MODVERSIONS
 #   the actual value of the checksum generated by genksyms
 # o remove .tmp_<file>.o to <file>.o
 
-ifdef CONFIG_LTO_CLANG
 # Generate .o.symversions files for each .o with exported symbols, and link these
 # to the kernel and/or modules at the end.
-cmd_modversions_c =                                                            \
+gen_symversions =                                                              \
        if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then                       \
-               $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))  \
+               $(call cmd_gensymtypes_$(1),$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
                    > $@.symversions;                                           \
        else                                                                    \
                rm -f $@.symversions;                                           \
-       fi;
-else
-cmd_modversions_c =                                                            \
-       if $(OBJDUMP) -h $@ | grep -q __ksymtab; then                           \
-               $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))  \
-                   > $(@D)/.tmp_$(@F:.o=.ver);                                 \
-                                                                               \
+       fi
+
+cmd_gen_symversions_c =        $(call gen_symversions,c)
+
+cmd_modversions =                                                              \
+       if [ -r $@.symversions ]; then                                          \
                $(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@               \
-                       -T $(@D)/.tmp_$(@F:.o=.ver);                            \
+                       -T $@.symversions;                                      \
                mv -f $(@D)/.tmp_$(@F) $@;                                      \
-               rm -f $(@D)/.tmp_$(@F:.o=.ver);                                 \
        fi
 endif
-endif
 
 ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
 # compiler will not generate __mcount_loc use recordmcount or recordmcount.pl
@@ -271,7 +267,8 @@ define rule_cc_o_c
        $(call cmd,checksrc)
        $(call cmd,checkdoc)
        $(call cmd,gen_objtooldep)
-       $(call cmd,modversions_c)
+       $(call cmd,gen_symversions_c)
+       $(if $(CONFIG_LTO_CLANG),,$(call cmd,modversions))
        $(call cmd,record_mcount)
 endef