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.
Signed-off-by: Peter Oberparleiter <[email protected]>
---
scripts/Makefile.build | 25 ++++++++++---------------
1 files changed, 10 insertions(+), 15 deletions(-)
Index: linux-2.6.26-rc4/scripts/Makefile.build
===================================================================
--- linux-2.6.26-rc4.orig/scripts/Makefile.build
+++ linux-2.6.26-rc4/scripts/Makefile.build
@@ -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.
On Mon, Jun 02, 2008 at 06:31:14PM +0200, Peter Oberparleiter wrote:
> 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