aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSam Ravnborg <sam@ravnborg.org>2009-01-14 15:38:20 -0500
committerSam Ravnborg <sam@ravnborg.org>2009-01-14 15:38:20 -0500
commit2ea038917bbdd51a7ae4a898c6a04641324dd033 (patch)
tree6a6f8b1db4d097d260449f88c267e39ab9d2bb3f /scripts
parenta6525042bfdfcab128bd91fad264de10fd24a55e (diff)
Revert "kbuild: strip generated symbols from *.ko"
This reverts commit ad7a953c522ceb496611d127e51e278bfe0ff483. And commit: ("allow stripping of generated symbols under CONFIG_KALLSYMS_ALL") 9bb482476c6c9d1ae033306440c51ceac93ea80c These stripping patches has caused a set of issues: 1) People have reported compatibility issues with binutils due to lack of support for `--strip-unneeded-symbols' with objcopy 2.15.92.0.2 Reported by: Wenji 2) ccache and distcc no longer works as expeced Reported by: Ted, Roland, + others 3) The installed modules increased a lot in size Reported by: Ted, Davej + others Reported-by: Wenji Huang <wenji.huang@oracle.com> Reported-by: "Theodore Ts'o" <tytso@mit.edu> Reported-by: Dave Jones <davej@redhat.com> Reported-by: Roland McGrath <roland@redhat.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.build55
-rw-r--r--scripts/Makefile.modinst3
-rw-r--r--scripts/genksyms/genksyms.c21
-rw-r--r--scripts/genksyms/keywords.c_shipped189
-rw-r--r--scripts/genksyms/keywords.gperf2
-rw-r--r--scripts/kallsyms.c21
-rw-r--r--scripts/mksysmap7
-rw-r--r--scripts/strip-symbols22
8 files changed, 138 insertions, 182 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 5d900307de3e..c7de8b39fcf1 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -151,16 +151,16 @@ cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $<
151$(obj)/%.i: $(src)/%.c FORCE 151$(obj)/%.i: $(src)/%.c FORCE
152 $(call if_changed_dep,cc_i_c) 152 $(call if_changed_dep,cc_i_c)
153 153
154cmd_genksyms = \ 154cmd_gensymtypes = \
155 $(CPP) -D__GENKSYMS__ $(c_flags) $< | \ 155 $(CPP) -D__GENKSYMS__ $(c_flags) $< | \
156 $(GENKSYMS) -T $@ -A -a $(ARCH) \ 156 $(GENKSYMS) -T $@ -a $(ARCH) \
157 $(if $(KBUILD_PRESERVE),-p) \ 157 $(if $(KBUILD_PRESERVE),-p) \
158 $(if $(1),-r $(firstword $(wildcard $(@:.symtypes=.symref) /dev/null))) 158 $(if $(1),-r $(firstword $(wildcard $(@:.symtypes=.symref) /dev/null)))
159 159
160quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ 160quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
161cmd_cc_symtypes_c = \ 161cmd_cc_symtypes_c = \
162 set -e; \ 162 set -e; \
163 $(call cmd_genksyms, true) >/dev/null; \ 163 $(call cmd_gensymtypes, true) >/dev/null; \
164 test -s $@ || rm -f $@ 164 test -s $@ || rm -f $@
165 165
166$(obj)/%.symtypes : $(src)/%.c FORCE 166$(obj)/%.symtypes : $(src)/%.c FORCE
@@ -177,38 +177,28 @@ cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
177 177
178else 178else
179# When module versioning is enabled the following steps are executed: 179# When module versioning is enabled the following steps are executed:
180# o compile a .tmp_<file>.s from <file>.c 180# o compile a .tmp_<file>.o from <file>.c
181# o if .tmp_<file>.s doesn't contain a __ksymtab version, i.e. does 181# o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does
182# not export symbols, we just assemble .tmp_<file>.s to <file>.o and 182# not export symbols, we just rename .tmp_<file>.o to <file>.o and
183# are done. 183# are done.
184# o otherwise, we calculate symbol versions using the good old 184# o otherwise, we calculate symbol versions using the good old
185# genksyms on the preprocessed source and postprocess them in a way 185# genksyms on the preprocessed source and postprocess them in a way
186# that they are usable as assembly source 186# that they are usable as a linker script
187# o assemble <file>.o from .tmp_<file>.s forcing inclusion of directives 187# o generate <file>.o from .tmp_<file>.o using the linker to
188# defining the actual values of __crc_*, followed by objcopy-ing them 188# replace the unresolved symbols __crc_exported_symbol with
189# to force these symbols to be local to permit stripping them later. 189# the actual value of the checksum generated by genksyms
190s_file = $(@D)/.tmp_$(@F:.o=.s)
191v_file = $(@D)/.tmp_$(@F:.o=.v)
192tmp_o_file = $(@D)/.tmp_$(@F)
193no_g_c_flags = $(filter-out -g%,$(c_flags))
194
195cmd_cc_o_c = $(CC) $(c_flags) -S -o $(s_file) $<
196 190
191cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
197cmd_modversions = \ 192cmd_modversions = \
198 if grep -q __ksymtab $(s_file); then \ 193 if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \
199 if $(call cmd_genksyms, $(KBUILD_SYMTYPES)) > $(v_file) \ 194 $(call cmd_gensymtypes, $(KBUILD_SYMTYPES)) \
200 && $(CC) $(no_g_c_flags) -c -Wa,$(v_file) \ 195 > $(@D)/.tmp_$(@F:.o=.ver); \
201 -o $(tmp_o_file) $(s_file) \ 196 \
202 && $(OBJCOPY) -L '__crc_*' -L '___crc_*' -w \ 197 $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
203 $(tmp_o_file) $@; \ 198 -T $(@D)/.tmp_$(@F:.o=.ver); \
204 then \ 199 rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
205 : ; \
206 else \
207 rm -f $@; exit 1; \
208 fi; \
209 else \ 200 else \
210 rm -f $(v_file); \ 201 mv -f $(@D)/.tmp_$(@F) $@; \
211 $(CC) $(no_g_c_flags) -c -o $@ $(s_file); \
212 fi; 202 fi;
213endif 203endif
214 204
@@ -225,12 +215,7 @@ define rule_cc_o_c
225 $(cmd_record_mcount) \ 215 $(cmd_record_mcount) \
226 scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ 216 scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \
227 $(dot-target).tmp; \ 217 $(dot-target).tmp; \
228 if [ -r $(@D)/.tmp_$(@F:.o=.v) ]; then \ 218 rm -f $(depfile); \
229 echo >> $(dot-target).tmp; \
230 echo '$@: $(GENKSYMS)' >> $(dot-target).tmp; \
231 echo '$(GENKSYMS):: ;' >> $(dot-target).tmp; \
232 fi; \
233 rm -f $(depfile) $(@D)/.tmp_$(@F:.o=.?); \
234 mv -f $(dot-target).tmp $(dot-target).cmd 219 mv -f $(dot-target).tmp $(dot-target).cmd
235endef 220endef
236 221
diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst
index a5122dce1264..efa5d940e632 100644
--- a/scripts/Makefile.modinst
+++ b/scripts/Makefile.modinst
@@ -17,8 +17,7 @@ __modinst: $(modules)
17 @: 17 @:
18 18
19quiet_cmd_modules_install = INSTALL $@ 19quiet_cmd_modules_install = INSTALL $@
20 cmd_modules_install = mkdir -p $(2); \ 20 cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@)
21 $(mod_strip_cmd) $@ $(2)/$(notdir $@) || cp $@ $(2)
22 21
23# Modules built outside the kernel source tree go into extra by default 22# Modules built outside the kernel source tree go into extra by default
24INSTALL_MOD_DIR ?= extra 23INSTALL_MOD_DIR ?= extra
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c
index f8bb4cabd62d..3a8297b5184c 100644
--- a/scripts/genksyms/genksyms.c
+++ b/scripts/genksyms/genksyms.c
@@ -43,7 +43,7 @@ int cur_line = 1;
43char *cur_filename; 43char *cur_filename;
44 44
45static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, 45static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
46 flag_preserve, flag_warnings, flag_asm; 46 flag_preserve, flag_warnings;
47static const char *arch = ""; 47static const char *arch = "";
48static const char *mod_prefix = ""; 48static const char *mod_prefix = "";
49 49
@@ -610,11 +610,8 @@ void export_symbol(const char *name)
610 if (flag_dump_defs) 610 if (flag_dump_defs)
611 fputs(">\n", debugfile); 611 fputs(">\n", debugfile);
612 612
613 /* Used as assembly source or a linker script. */ 613 /* Used as a linker script. */
614 printf(flag_asm 614 printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc);
615 ? ".equiv %s__crc_%s, %#08lx\n"
616 : "%s__crc_%s = %#08lx ;\n",
617 mod_prefix, name, crc);
618 } 615 }
619} 616}
620 617
@@ -651,10 +648,9 @@ void error_with_pos(const char *fmt, ...)
651 648
652static void genksyms_usage(void) 649static void genksyms_usage(void)
653{ 650{
654 fputs("Usage:\n" "genksyms [-aAdDTwqhV] > /path/to/.tmp_obj.ver\n" "\n" 651 fputs("Usage:\n" "genksyms [-adDTwqhV] > /path/to/.tmp_obj.ver\n" "\n"
655#ifdef __GNU_LIBRARY__ 652#ifdef __GNU_LIBRARY__
656 " -a, --arch Select architecture\n" 653 " -a, --arch Select architecture\n"
657 " -A, --asm Generate assembly rather than linker script\n"
658 " -d, --debug Increment the debug level (repeatable)\n" 654 " -d, --debug Increment the debug level (repeatable)\n"
659 " -D, --dump Dump expanded symbol defs (for debugging only)\n" 655 " -D, --dump Dump expanded symbol defs (for debugging only)\n"
660 " -r, --reference file Read reference symbols from a file\n" 656 " -r, --reference file Read reference symbols from a file\n"
@@ -666,7 +662,6 @@ static void genksyms_usage(void)
666 " -V, --version Print the release version\n" 662 " -V, --version Print the release version\n"
667#else /* __GNU_LIBRARY__ */ 663#else /* __GNU_LIBRARY__ */
668 " -a Select architecture\n" 664 " -a Select architecture\n"
669 " -A Generate assembly rather than linker script\n"
670 " -d Increment the debug level (repeatable)\n" 665 " -d Increment the debug level (repeatable)\n"
671 " -D Dump expanded symbol defs (for debugging only)\n" 666 " -D Dump expanded symbol defs (for debugging only)\n"
672 " -r file Read reference symbols from a file\n" 667 " -r file Read reference symbols from a file\n"
@@ -688,7 +683,6 @@ int main(int argc, char **argv)
688#ifdef __GNU_LIBRARY__ 68