diff options
| author | Sam Ravnborg <sam@ravnborg.org> | 2009-01-14 15:38:20 -0500 |
|---|---|---|
| committer | Sam Ravnborg <sam@ravnborg.org> | 2009-01-14 15:38:20 -0500 |
| commit | 2ea038917bbdd51a7ae4a898c6a04641324dd033 (patch) | |
| tree | 6a6f8b1db4d097d260449f88c267e39ab9d2bb3f /scripts | |
| parent | a6525042bfdfcab128bd91fad264de10fd24a55e (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.build | 55 | ||||
| -rw-r--r-- | scripts/Makefile.modinst | 3 | ||||
| -rw-r--r-- | scripts/genksyms/genksyms.c | 21 | ||||
| -rw-r--r-- | scripts/genksyms/keywords.c_shipped | 189 | ||||
| -rw-r--r-- | scripts/genksyms/keywords.gperf | 2 | ||||
| -rw-r--r-- | scripts/kallsyms.c | 21 | ||||
| -rw-r--r-- | scripts/mksysmap | 7 | ||||
| -rw-r--r-- | scripts/strip-symbols | 22 |
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 | ||
| 154 | cmd_genksyms = \ | 154 | cmd_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 | ||
| 160 | quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ | 160 | quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ |
| 161 | cmd_cc_symtypes_c = \ | 161 | cmd_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 | ||
| 178 | else | 178 | else |
| 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 |
| 190 | s_file = $(@D)/.tmp_$(@F:.o=.s) | ||
| 191 | v_file = $(@D)/.tmp_$(@F:.o=.v) | ||
| 192 | tmp_o_file = $(@D)/.tmp_$(@F) | ||
| 193 | no_g_c_flags = $(filter-out -g%,$(c_flags)) | ||
| 194 | |||
| 195 | cmd_cc_o_c = $(CC) $(c_flags) -S -o $(s_file) $< | ||
| 196 | 190 | ||
| 191 | cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $< | ||
| 197 | cmd_modversions = \ | 192 | cmd_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; |
| 213 | endif | 203 | endif |
| 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 |
| 235 | endef | 220 | endef |
| 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 | ||
| 19 | quiet_cmd_modules_install = INSTALL $@ | 19 | quiet_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 |
| 24 | INSTALL_MOD_DIR ?= extra | 23 | INSTALL_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; | |||
| 43 | char *cur_filename; | 43 | char *cur_filename; |
| 44 | 44 | ||
| 45 | static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, | 45 | static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, |
| 46 | flag_preserve, flag_warnings, flag_asm; | 46 | flag_preserve, flag_warnings; |
| 47 | static const char *arch = ""; | 47 | static const char *arch = ""; |
| 48 | static const char *mod_prefix = ""; | 48 | static 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 | ||
| 652 | static void genksyms_usage(void) | 649 | static 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 | |
