Commit 9bb482476c6c9d1ae033306440c51ceac93ea80c

Authored by Jan Beulich
Committed by Sam Ravnborg
1 parent ad7a953c52

allow stripping of generated symbols under CONFIG_KALLSYMS_ALL

Building upon parts of the module stripping patch, this patch
introduces similar stripping for vmlinux when CONFIG_KALLSYMS_ALL=y.
Using CONFIG_KALLSYMS_STRIP_GENERATED reduces the overhead of
CONFIG_KALLSYMS_ALL from 245k/310k to 65k/80k for the (i386/x86-64)
kernels I tested with.

The patch also does away with the need to special case the kallsyms-
internal symbols by making them available even in the first linking
stage.

While it is a generated file, the patch includes the changes to
scripts/genksyms/keywords.c_shipped, as I'm unsure what the procedure
here is.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>

Showing 7 changed files with 155 additions and 128 deletions Side-by-side Diff

... ... @@ -604,6 +604,9 @@
604 604 MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
605 605 export MODLIB
606 606  
  607 +strip-symbols := $(srctree)/scripts/strip-symbols \
  608 + $(wildcard $(srctree)/arch/$(ARCH)/scripts/strip-symbols)
  609 +
607 610 #
608 611 # INSTALL_MOD_STRIP, if defined, will cause modules to be stripped while
609 612 # they get installed. If INSTALL_MOD_STRIP is '1', then the default
... ... @@ -611,8 +614,10 @@
611 614 # be used as the option(s) to the objcopy command.
612 615 ifdef INSTALL_MOD_STRIP
613 616 ifeq ($(INSTALL_MOD_STRIP),1)
614   -mod_strip_cmd = $(OBJCOPY) --strip-debug --strip-symbols \
615   - $(srctree)/scripts/strip-symbols --wildcard
  617 +mod_strip_cmd = $(OBJCOPY) --strip-debug
  618 +ifeq ($(CONFIG_KALLSYMS_ALL),$(CONFIG_KALLSYMS_STRIP_GENERATED))
  619 +mod_strip_cmd += --wildcard $(addprefix --strip-symbols ,$(strip-symbols))
  620 +endif
616 621 else
617 622 mod_strip_cmd = $(OBJCOPY) $(INSTALL_MOD_STRIP)
618 623 endif # INSTALL_MOD_STRIP=1
... ... @@ -747,6 +752,7 @@
747 752 endif
748 753  
749 754 kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
  755 +kallsyms.h := $(wildcard include/config/kallsyms/*.h) $(wildcard include/config/kallsyms/*/*.h)
750 756  
751 757 define verify_kallsyms
752 758 $(Q)$(if $($(quiet)cmd_sysmap), \
753 759  
754 760  
755 761  
756 762  
757 763  
758 764  
... ... @@ -771,24 +777,41 @@
771 777  
772 778 # Generate .S file with all kernel symbols
773 779 quiet_cmd_kallsyms = KSYM $@
774   - cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
775   - $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
  780 + cmd_kallsyms = { test $* -eq 0 || $(NM) -n $<; } \
  781 + | $(KALLSYMS) $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) >$@
776 782  
777   -.tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
  783 +quiet_cmd_kstrip = STRIP $@
  784 + cmd_kstrip = $(OBJCOPY) --wildcard $(addprefix --strip$(if $(CONFIG_RELOCATABLE),-unneeded)-symbols ,$(filter %/scripts/strip-symbols,$^)) $< $@
  785 +
  786 +$(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): KBUILD_AFLAGS += -Wa,--strip-local-absolute
  787 +$(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): %.o: %.S scripts FORCE
778 788 $(call if_changed_dep,as_o_S)
779 789  
780   -.tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS)
  790 +ifeq ($(CONFIG_KALLSYMS_STRIP_GENERATED),y)
  791 +strip-ext := .stripped
  792 +endif
  793 +
  794 +.tmp_kallsyms%.S: .tmp_vmlinux%$(strip-ext) $(KALLSYMS) $(kallsyms.h)
781 795 $(call cmd,kallsyms)
782 796  
  797 +# make -jN seems to have problems with intermediate files, see bug #3330.
  798 +.SECONDARY: $(foreach n,1 2 3,.tmp_vmlinux$(n).stripped)
  799 +.tmp_vmlinux%.stripped: .tmp_vmlinux% $(strip-symbols) $(kallsyms.h)
  800 + $(call cmd,kstrip)
  801 +
  802 +ifneq ($(CONFIG_DEBUG_INFO),y)
  803 +.tmp_vmlinux%: LDFLAGS_vmlinux += -S
  804 +endif
783 805 # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version
784   -.tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE
785   - $(call if_changed_rule,ksym_ld)
  806 +.tmp_vmlinux%: $(vmlinux-lds) $(vmlinux-all) FORCE
  807 + $(if $(filter 1,$*),$(call if_changed_rule,ksym_ld),$(call if_changed,vmlinux__))
786 808  
787   -.tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE
788   - $(call if_changed,vmlinux__)
  809 +.tmp_vmlinux0$(strip-ext):
  810 + $(Q)echo "placeholder" >$@
789 811  
790   -.tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE
791   - $(call if_changed,vmlinux__)
  812 +.tmp_vmlinux1: .tmp_kallsyms0.o
  813 +.tmp_vmlinux2: .tmp_kallsyms1.o
  814 +.tmp_vmlinux3: .tmp_kallsyms2.o
792 815  
793 816 # Needs to visit scripts/ before $(KALLSYMS) can be used.
794 817 $(KALLSYMS): scripts ;
arch/x86/scripts/strip-symbols
  1 +__cpu_vendor_dev_X86_VENDOR_*
... ... @@ -588,6 +588,13 @@
588 588  
589 589 Say N.
590 590  
  591 +config KALLSYMS_STRIP_GENERATED
  592 + bool "Strip machine generated symbols from kallsyms"
  593 + depends on KALLSYMS_ALL
  594 + default y
  595 + help
  596 + Say N if you want kallsyms to retain even machine generated symbols.
  597 +
591 598 config KALLSYMS_EXTRA_PASS
592 599 bool "Do an extra kallsyms pass"
593 600 depends on KALLSYMS
... ... @@ -30,20 +30,19 @@
30 30 #define all_var 0
31 31 #endif
32 32  
33   -/* These will be re-linked against their real values during the second link stage */
34   -extern const unsigned long kallsyms_addresses[] __attribute__((weak));
35   -extern const u8 kallsyms_names[] __attribute__((weak));
  33 +extern const unsigned long kallsyms_addresses[];
  34 +extern const u8 kallsyms_names[];
36 35  
37 36 /* tell the compiler that the count isn't in the small data section if the arch
38 37 * has one (eg: FRV)
39 38 */
40 39 extern const unsigned long kallsyms_num_syms
41   -__attribute__((weak, section(".rodata")));
  40 + __attribute__((__section__(".rodata")));
42 41  
43   -extern const u8 kallsyms_token_table[] __attribute__((weak));
44   -extern const u16 kallsyms_token_index[] __attribute__((weak));
  42 +extern const u8 kallsyms_token_table[];
  43 +extern const u16 kallsyms_token_index[];
45 44  
46   -extern const unsigned long kallsyms_markers[] __attribute__((weak));
  45 +extern const unsigned long kallsyms_markers[];
47 46  
48 47 static inline int is_kernel_inittext(unsigned long addr)
49 48 {
... ... @@ -167,9 +166,6 @@
167 166 {
168 167 unsigned long symbol_start = 0, symbol_end = 0;
169 168 unsigned long i, low, high, mid;
170   -
171   - /* This kernel should never had been booted. */
172   - BUG_ON(!kallsyms_addresses);
173 169  
174 170 /* do a binary search on the sorted kallsyms_addresses array */
175 171 low = 0;
scripts/genksyms/keywords.c_shipped
1   -/* ANSI-C code produced by gperf version 3.0.2 */
  1 +/* ANSI-C code produced by gperf version 3.0.1 */
2 2 /* Command-line: gperf -L ANSI-C -a -C -E -g -H is_reserved_hash -k '1,3,$' -N is_reserved_word -p -t scripts/genksyms/keywords.gperf */
3 3  
4 4 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
... ... @@ -32,7 +32,7 @@
32 32  
33 33 #line 3 "scripts/genksyms/keywords.gperf"
34 34 struct resword { const char *name; int token; };
35   -/* maximum key range = 62, duplicates = 0 */
  35 +/* maximum key range = 64, duplicates = 0 */
36 36  
37 37 #ifdef __GNUC__
38 38 __inline
... ... @@ -46,32 +46,32 @@
46 46 {
47 47 static const unsigned char asso_values[] =
48 48 {
49   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
50   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
51   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
52   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
53   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
54   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
55   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 5,
56   - 65, 65, 65, 65, 65, 65, 35, 65, 65, 65,
57   - 0, 65, 65, 65, 65, 65, 65, 65, 65, 65,
58   - 65, 65, 65, 65, 65, 0, 65, 0, 65, 5,
59   - 20, 15, 10, 30, 65, 15, 65, 65, 20, 0,
60   - 10, 35, 20, 65, 10, 5, 0, 10, 5, 65,
61   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
62   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
63   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
64   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
66   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
67   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
68   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
69   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
70   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
71   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
72   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
73   - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
74   - 65, 65, 65, 65, 65, 65
  49 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  50 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  51 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  52 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  53 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  54 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  55 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 0,
  56 + 67, 67, 67, 67, 67, 67, 15, 67, 67, 67,
  57 + 0, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  58 + 67, 67, 67, 67, 67, 0, 67, 0, 67, 5,
  59 + 25, 20, 15, 30, 67, 15, 67, 67, 10, 0,
  60 + 10, 40, 20, 67, 10, 5, 0, 10, 15, 67,
  61 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  62 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  63 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  64 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  65 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  66 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  67 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  68 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  69 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  70 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  71 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  72 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  73 + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
  74 + 67, 67, 67, 67, 67, 67
75 75 };
76 76 return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
77 77 }
78 78  
79 79  
80 80  
81 81  
82 82  
83 83  
84 84  
85 85  
86 86  
87 87  
88 88  
89 89  
90 90  
91 91  
92 92  
93 93  
94 94  
95 95  
96 96  
97 97  
98 98  
99 99  
100 100  
101 101  
102 102  
103 103  
104 104  
105 105  
106 106  
107 107  
108 108  
109 109  
110 110  
111 111  
... ... @@ -84,116 +84,119 @@
84 84 {
85 85 enum
86 86 {
87   - TOTAL_KEYWORDS = 43,
  87 + TOTAL_KEYWORDS = 45,
88 88 MIN_WORD_LENGTH = 3,
89 89 MAX_WORD_LENGTH = 24,
90 90 MIN_HASH_VALUE = 3,
91   - MAX_HASH_VALUE = 64
  91 + MAX_HASH_VALUE = 66
92 92 };
93 93  
94 94 static const struct resword wordlist[] =
95 95 {
96 96 {""}, {""}, {""},
97   -#line 26 "scripts/genksyms/keywords.gperf"
  97 +#line 28 "scripts/genksyms/keywords.gperf"
98 98 {"asm", ASM_KEYW},
99 99 {""},
100   -#line 8 "scripts/genksyms/keywords.gperf"
  100 +#line 10 "scripts/genksyms/keywords.gperf"
101 101 {"__asm", ASM_KEYW},
102 102 {""},
103   -#line 9 "scripts/genksyms/keywords.gperf"
  103 +#line 11 "scripts/genksyms/keywords.gperf"
104 104 {"__asm__", ASM_KEYW},
105 105 {""}, {""},
106   -#line 52 "scripts/genksyms/keywords.gperf"
  106 +#line 54 "scripts/genksyms/keywords.gperf"
107 107 {"__typeof__", TYPEOF_KEYW},
108 108 {""},
109   -#line 12 "scripts/genksyms/keywords.gperf"
  109 +#line 14 "scripts/genksyms/keywords.gperf"
110 110 {"__const", CONST_KEYW},
111   -#line 11 "scripts/genksyms/keywords.gperf"
112   - {"__attribute__", ATTRIBUTE_KEYW},
113 111 #line 13 "scripts/genksyms/keywords.gperf"
  112 + {"__attribute__", ATTRIBUTE_KEYW},
  113 +#line 15 "scripts/genksyms/keywords.gperf"
114 114 {"__const__", CONST_KEYW},
115   -#line 18 "scripts/genksyms/keywords.gperf"
  115 +#line 20 "scripts/genksyms/keywords.gperf"
116 116 {"__signed__", SIGNED_KEYW},
117   -#line 44 "scripts/genksyms/keywords.gperf"
  117 +#line 46 "scripts/genksyms/keywords.gperf"
118 118 {"static", STATIC_KEYW},
119   -#line 20 "scripts/genksyms/keywords.gperf"
120   - {"__volatile__", VOLATILE_KEYW},
121   -#line 39 "scripts/genksyms/keywords.gperf"
  119 + {""},
  120 +#line 41 "scripts/genksyms/keywords.gperf"
122 121 {"int", INT_KEYW},
123   -#line 32 "scripts/genksyms/keywords.gperf"
  122 +#line 34 "scripts/genksyms/keywords.gperf"
124 123 {"char", CHAR_KEYW},
125   -#line 33 "scripts/genksyms/keywords.gperf"
  124 +#line 35 "scripts/genksyms/keywords.gperf"
126 125 {"const", CONST_KEYW},
127   -#line 45 "scripts/genksyms/keywords.gperf"
  126 +#line 47 "scripts/genksyms/keywords.gperf"
128 127 {"struct", STRUCT_KEYW},
129   -#line 24 "scripts/genksyms/keywords.gperf"
  128 +#line 26 "scripts/genksyms/keywords.gperf"
130 129 {"__restrict__", RESTRICT_KEYW},
131   -#line 25 "scripts/genksyms/keywords.gperf"
  130 +#line 27 "scripts/genksyms/keywords.gperf"
132 131 {"restrict", RESTRICT_KEYW},
133   -#line 23 "scripts/genksyms/keywords.gperf"
134   - {"_restrict", RESTRICT_KEYW},
135   -#line 16 "scripts/genksyms/keywords.gperf"
  132 +#line 7 "scripts/genksyms/keywords.gperf"
  133 + {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
  134 +#line 18 "scripts/genksyms/keywords.gperf"
136 135 {"__inline__", INLINE_KEYW},
137   -#line 10 "scripts/genksyms/keywords.gperf"
138   - {"__attribute", ATTRIBUTE_KEYW},
139 136 {""},
140   -#line 14 "scripts/genksyms/keywords.gperf"
  137 +#line 22 "scripts/genksyms/keywords.gperf"
  138 + {"__volatile__", VOLATILE_KEYW},
  139 +#line 5 "scripts/genksyms/keywords.gperf"
  140 + {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
  141 +#line 25 "scripts/genksyms/keywords.gperf"
  142 + {"_restrict", RESTRICT_KEYW},
  143 + {""},
  144 +#line 12 "scripts/genksyms/keywords.gperf"
  145 + {"__attribute", ATTRIBUTE_KEYW},
  146 +#line 6 "scripts/genksyms/keywords.gperf"
  147 + {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
  148 +#line 16 "scripts/genksyms/keywords.gperf"
141 149 {"__extension__", EXTENSION_KEYW},
142   -#line 35 "scripts/genksyms/keywords.gperf"
  150 +#line 37 "scripts/genksyms/keywords.gperf"
143 151 {"enum", ENUM_KEYW},
144   -#line 19 "scripts/genksyms/keywords.gperf"
145   - {"__volatile", VOLATILE_KEYW},
146   -#line 36 "scripts/genksyms/keywords.gperf"
  152 +#line 8 "scripts/genksyms/keywords.gperf"
  153 + {"EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW},
  154 +#line 38 "scripts/genksyms/keywords.gperf"
147 155 {"extern", EXTERN_KEYW},
148 156 {""},
149   -#line 17 "scripts/genksyms/keywords.gperf"
  157 +#line 19 "scripts/genksyms/keywords.gperf"
150 158 {"__signed", SIGNED_KEYW},
151   -#line 7 "scripts/genksyms/keywords.gperf"
152   - {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
153   - {""},
154   -#line 51 "scripts/genksyms/keywords.gperf"
  159 +#line 9 "scripts/genksyms/keywords.gperf"
  160 + {"EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
  161 +#line 49 "scripts/genksyms/keywords.gperf"
  162 + {"union", UNION_KEYW},
  163 +#line 53 "scripts/genksyms/keywords.gperf"
155 164 {"typeof", TYPEOF_KEYW},
156   -#line 46 "scripts/genksyms/keywords.gperf"
  165 +#line 48 "scripts/genksyms/keywords.gperf"
157 166 {"typedef", TYPEDEF_KEYW},
158   -#line 15 "scripts/genksyms/keywords.gperf"
  167 +#line 17 "scripts/genksyms/keywords.gperf"
159 168 {"__inline", INLINE_KEYW},
160   -#line 31 "scripts/genksyms/keywords.gperf"
  169 +#line 33 "scripts/genksyms/keywords.gperf"
161 170 {"auto", AUTO_KEYW},
162   -#line 47 "scripts/genksyms/keywords.gperf"
163   - {"union", UNION_KEYW},
  171 +#line 21 "scripts/genksyms/keywords.gperf"
  172 + {"__volatile", VOLATILE_KEYW},
164 173 {""}, {""},
165   -#line 48 "scripts/genksyms/keywords.gperf"
166   - {"unsigned", UNSIGNED_KEYW},
167   -#line 49 "scripts/genksyms/keywords.gperf"
168   - {"void", VOID_KEYW},
169   -#line 42 "scripts/genksyms/keywords.gperf"
170   - {"short", SHORT_KEYW},
171   - {""}, {""},
172 174 #line 50 "scripts/genksyms/keywords.gperf"
173   - {"volatile", VOLATILE_KEYW},
  175 + {"unsigned", UNSIGNED_KEYW},
174 176 {""},
175   -#line 37 "scripts/genksyms/keywords.gperf"
176   - {"float", FLOAT_KEYW},
177   -#line 34 "scripts/genksyms/keywords.gperf"
178   - {"double", DOUBLE_KEYW},
179   - {""},
180   -#line 5 "scripts/genksyms/keywords.gperf"
181   - {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
182   - {""}, {""},
183   -#line 38 "scripts/genksyms/keywords.gperf"
  177 +#line 44 "scripts/genksyms/keywords.gperf"
  178 + {"short", SHORT_KEYW},
  179 +#line 40 "scripts/genksyms/keywords.gperf"
184 180 {"inline", INLINE_KEYW},
185   -#line 6 "scripts/genksyms/keywords.gperf"
186   - {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
187   -#line 41 "scripts/genksyms/keywords.gperf"
188   - {"register", REGISTER_KEYW},
189 181 {""},
190   -#line 22 "scripts/genksyms/keywords.gperf"
  182 +#line 52 "scripts/genksyms/keywords.gperf"
  183 + {"volatile", VOLATILE_KEYW},
  184 +#line 42 "scripts/genksyms/keywords.gperf"
  185 + {"long", LONG_KEYW},
  186 +#line 24 "scripts/genksyms/keywords.gperf"
191 187 {"_Bool", BOOL_KEYW},
192   -#line 43 "scripts/genksyms/keywords.gperf"
193   - {"signed", SIGNED_KEYW},
194 188 {""}, {""},
195   -#line 40 "scripts/genksyms/keywords.gperf"
196   - {"long", LONG_KEYW}
  189 +#line 43 "scripts/genksyms/keywords.gperf"
  190 + {"register", REGISTER_KEYW},
  191 +#line 51 "scripts/genksyms/keywords.gperf"
  192 + {"void", VOID_KEYW},
  193 +#line 39 "scripts/genksyms/keywords.gperf"
  194 + {"float", FLOAT_KEYW},
  195 +#line 36 "scripts/genksyms/keywords.gperf"
  196 + {"double", DOUBLE_KEYW},
  197 + {""}, {""}, {""}, {""},
  198 +#line 45 "scripts/genksyms/keywords.gperf"
  199 + {"signed", SIGNED_KEYW}
197 200 };
198 201  
199 202 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
scripts/genksyms/keywords.gperf
... ... @@ -5,6 +5,8 @@
5 5 EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW
6 6 EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
7 7 EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW
  8 +EXPORT_UNUSED_SYMBOL, EXPORT_SYMBOL_KEYW
  9 +EXPORT_UNUSED_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
8 10 __asm, ASM_KEYW
9 11 __asm__, ASM_KEYW
10 12 __attribute, ATTRIBUTE_KEYW
... ... @@ -130,18 +130,9 @@
130 130 static int symbol_valid(struct sym_entry *s)
131 131 {
132 132 /* Symbols which vary between passes. Passes 1 and 2 must have
133   - * identical symbol lists. The kallsyms_* symbols below are only added
134   - * after pass 1, they would be included in pass 2 when --all-symbols is
135   - * specified so exclude them to get a stable symbol list.
  133 + * identical symbol lists.
136 134 */
137 135 static char *special_symbols[] = {
138   - "kallsyms_addresses",
139   - "kallsyms_num_syms",
140   - "kallsyms_names",
141   - "kallsyms_markers",
142   - "kallsyms_token_table",
143   - "kallsyms_token_index",
144   -
145 136 /* Exclude linker generated symbols which vary between passes */
146 137 "_SDA_BASE_", /* ppc */
147 138 "_SDA2_BASE_", /* ppc */
... ... @@ -173,7 +164,9 @@
173 164 }
174 165  
175 166 /* Exclude symbols which vary between passes. */
176   - if (strstr((char *)s->sym + offset, "_compiled."))
  167 + if (strstr((char *)s->sym + offset, "_compiled.") ||
  168 + strncmp((char*)s->sym + offset, "__compound_literal.", 19) == 0 ||
  169 + strncmp((char*)s->sym + offset, "__compound_literal$", 19) == 0)
177 170 return 0;
178 171  
179 172 for (i = 0; special_symbols[i]; i++)
... ... @@ -550,8 +543,10 @@
550 543 usage();
551 544  
552 545 read_map(stdin);
553   - sort_symbols();
554   - optimize_token_table();
  546 + if (table_cnt) {
  547 + sort_symbols();
  548 + optimize_token_table();
  549 + }
555 550 write_src();
556 551  
557 552 return 0;