aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/Makefile.build
diff options
context:
space:
mode:
authorAndreas Gruenbacher <agruen@suse.de>2008-12-01 17:21:01 -0500
committerSam Ravnborg <sam@ravnborg.org>2008-12-03 16:33:11 -0500
commit64e6c1e12372840e7caf8e25325a9e9c5fd370e6 (patch)
treeaa47aa4e170dd4bb39c99cc7356231e2c61d64d2 /scripts/Makefile.build
parenta680eedc6c621c75695c68198533fc3c98f4053b (diff)
genksyms: track symbol checksum changes
Sometimes it is preferable to avoid changes of exported symbol checksums (to avoid breaking externally provided modules). When a checksum change occurs, it can be hard to figure out what caused this change: underlying types may have changed, or additional type information may simply have become available at the point where a symbol is exported. Add a new --reference option to genksyms which allows it to report why checksums change, based on the type information dumps it creates with the --dump-types flag. Genksyms will read in such a dump from a previous run, and report which symbols have changed (and why). The behavior can be controlled for an entire build as follows: If KBUILD_SYMTYPES is set, genksyms uses --dump-types to produce *.symtypes dump files. If any *.symref files exist, those will be used as the reference to check against. If KBUILD_PRESERVE is set, checksum changes will fail the build. Signed-off-by: Andreas Gruenbacher <agruen@suse.de> Cc: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts/Makefile.build')
-rw-r--r--scripts/Makefile.build16
1 files changed, 13 insertions, 3 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 468fbc9016c..d21f0eac2e5 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -153,12 +153,18 @@ $(obj)/%.i: $(src)/%.c FORCE
153 153
154quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ 154quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
155cmd_cc_symtypes_c = \ 155cmd_cc_symtypes_c = \
156 set -e; \
156 $(CPP) -D__GENKSYMS__ $(c_flags) $< \ 157 $(CPP) -D__GENKSYMS__ $(c_flags) $< \
157 | $(GENKSYMS) -T $@ >/dev/null; \ 158 | $(GENKSYMS) -T $@ \
159 -r $(firstword $(wildcard \
160 $(@:.symtypes=.symref) /dev/null)) \
161 $(if $(KBUILD_PRESERVE),-p) \
162 -a $(ARCH) \
163 >/dev/null; \
158 test -s $@ || rm -f $@ 164 test -s $@ || rm -f $@
159 165
160$(obj)/%.symtypes : $(src)/%.c FORCE 166$(obj)/%.symtypes : $(src)/%.c FORCE
161 $(call if_changed_dep,cc_symtypes_c) 167 $(call cmd,cc_symtypes_c)
162 168
163# C (.c) files 169# C (.c) files
164# The C file is compiled and updated dependency information is generated. 170# The C file is compiled and updated dependency information is generated.
@@ -187,7 +193,11 @@ cmd_modversions = \
187 if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \ 193 if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \
188 $(CPP) -D__GENKSYMS__ $(c_flags) $< \ 194 $(CPP) -D__GENKSYMS__ $(c_flags) $< \
189 | $(GENKSYMS) $(if $(KBUILD_SYMTYPES), \ 195 | $(GENKSYMS) $(if $(KBUILD_SYMTYPES), \
190 -T $(@D)/$(@F:.o=.symtypes)) -a $(ARCH) \ 196 -T $(@:.o=.symtypes)) \
197 -r $(firstword $(wildcard \
198 $(@:.o=.symref) /dev/null)) \
199 $(if $(KBUILD_PRESERVE),-p) \
200 -a $(ARCH) \
191 > $(@D)/.tmp_$(@F:.o=.ver); \ 201 > $(@D)/.tmp_$(@F:.o=.ver); \
192 \ 202 \
193 $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \ 203 $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \