diff options
author | Andreas Gruenbacher <agruen@suse.de> | 2008-12-01 17:21:01 -0500 |
---|---|---|
committer | Sam Ravnborg <sam@ravnborg.org> | 2008-12-03 16:33:11 -0500 |
commit | 64e6c1e12372840e7caf8e25325a9e9c5fd370e6 (patch) | |
tree | aa47aa4e170dd4bb39c99cc7356231e2c61d64d2 /scripts/Makefile.build | |
parent | a680eedc6c621c75695c68198533fc3c98f4053b (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.build | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 468fbc9016c7..d21f0eac2e52 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
@@ -153,12 +153,18 @@ $(obj)/%.i: $(src)/%.c FORCE | |||
153 | 153 | ||
154 | quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ | 154 | quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ |
155 | cmd_cc_symtypes_c = \ | 155 | cmd_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) \ |