kbuild: simplify module versioning procedure
PATCH 1/1 kbuild: simplify module versioning procedure
This patch used to be part of the gcov patch set but is no longer required. kbuild simplifications might still prove useful though.
--
From: Peter Oberparleiter <[email protected]>
Simplify module version generation to remove duplicate definition of cmd_cc_o_c build rule.
--- scripts/Makefile.build | 25 ++++++++++--------------- 1 files changed, 10 insertions(+), 15 deletions(-)
scripts/Makefile.build +10 -15
@@ -165,26 +165,23 @@ $(obj)/%.symtypes : $(src)/%.c FORCE # (See cmd_cc_o_c + relevant part of rule_cc_o_c) quiet_cmd_cc_o_c = CC $(quiet_modtag) $@ - -ifndef CONFIG_MODVERSIONS cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< -else -# When module versioning is enabled the following steps are executed: -# o compile a .tmp_<file>.o from <file>.c -# o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does -# not export symbols, we just rename .tmp_<file>.o to <file>.o and -# are done. -# o otherwise, we calculate symbol versions using the good old -# genksyms on the preprocessed source and postprocess them in a way -# that they are usable as a linker script +ifdef CONFIG_MODVERSIONS +# When module versioning is enabled the following steps are executed +# in addition to compiling: +# o if <file>.o doesn't contain a __ksymtab version, i.e. does +# not export symbols, we are done +# o otherwise, we rename <file>.o into .tmp_<file.o> and calculate symbol +# versions using the good old genksyms on the preprocessed source and +# postprocess them in a way that they are usable as a linker script # o generate <file>.o from .tmp_<file>.o using the linker to # replace the unresolved symbols __crc_exported_symbol with # the actual value of the checksum generated by genksyms -cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $< cmd_modversions = \ - if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \ + if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ + mv -f $@ $(@D)/.tmp_$(@F); \ $(CPP) -D__GENKSYMS__ $(c_flags) $< \ | $(GENKSYMS) $(if $(KBUILD_SYMTYPES), \ -T $(@D)/$(@F:.o=.symtypes)) -a $(ARCH) \
@@ -193,8 +190,6 @@ cmd_modversions = \ $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \ -T $(@D)/.tmp_$(@F:.o=.ver); \ rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \ - else \ - mv -f $(@D)/.tmp_$(@F) $@; \ fi; endif
Hi Peter.
Quoted 2 lines · Peter Oberparleiter
This patch used to be part of the gcov patch set but is no longer required. kbuild simplifications might still prove useful though.
It looks like a simplification but there is actually a reason why it is done with a temporary fil in this way.
Consider a kernel build that is being terminated with ctrl-c in the middle. If we when ctrl-c are hit are doing the final steps of genksyms then we will next time we type make consider all done and we will not redo the modversioning part of the rule because we have an updated .o file.
We have this issue in other places in the build system but I have not audited the use of redirects yet.
But applying your patch would introduce yet another place where we have such an issue and we want to get rid of the spots where hitting ctrl-c can leave us with an inconsistent build.
So I will not apply this patch.
Sam