aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.build55
-rw-r--r--scripts/Makefile.modinst3
-rw-r--r--scripts/bootgraph.pl50
-rwxr-xr-xscripts/checkpatch.pl52
-rwxr-xr-xscripts/config4
-rw-r--r--scripts/gcc-x86_32-has-stack-protector.sh8
-rw-r--r--scripts/gcc-x86_64-has-stack-protector.sh6
-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/headers_check.pl2
-rw-r--r--scripts/kallsyms.c21
-rwxr-xr-xscripts/kernel-doc40
-rw-r--r--scripts/markup_oops.pl216
-rw-r--r--scripts/mksysmap7
-rw-r--r--scripts/mod/file2alias.c18
-rw-r--r--scripts/mod/modpost.c5
-rwxr-xr-xscripts/package/mkspec8
-rwxr-xr-xscripts/setlocalversion9
-rw-r--r--scripts/strip-symbols22
-rwxr-xr-xscripts/tags.sh12
21 files changed, 510 insertions, 240 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/bootgraph.pl b/scripts/bootgraph.pl
index 0a498e33b30b..12caa822a232 100644
--- a/scripts/bootgraph.pl
+++ b/scripts/bootgraph.pl
@@ -41,18 +41,21 @@ use strict;
41 41
42my %start; 42my %start;
43my %end; 43my %end;
44my %type;
44my $done = 0; 45my $done = 0;
45my $maxtime = 0; 46my $maxtime = 0;
46my $firsttime = 100; 47my $firsttime = 100;
47my $count = 0; 48my $count = 0;
48my %pids; 49my %pids;
50my %pidctr;
49 51
50while (<>) { 52while (<>) {
51 my $line = $_; 53 my $line = $_;
52 if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z0-9\_]+)\+/) { 54 if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z0-9\_\.]+)\+/) {
53 my $func = $2; 55 my $func = $2;
54 if ($done == 0) { 56 if ($done == 0) {
55 $start{$func} = $1; 57 $start{$func} = $1;
58 $type{$func} = 0;
56 if ($1 < $firsttime) { 59 if ($1 < $firsttime) {
57 $firsttime = $1; 60 $firsttime = $1;
58 } 61 }
@@ -63,12 +66,40 @@ while (<>) {
63 $count = $count + 1; 66 $count = $count + 1;
64 } 67 }
65 68
66 if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_]+)\+.*returned/) { 69 if ($line =~ /([0-9\.]+)\] async_waiting @ ([0-9]+)/) {
70 my $pid = $2;
71 my $func;
72 if (!defined($pidctr{$pid})) {
73 $func = "wait_" . $pid . "_1";
74 $pidctr{$pid} = 1;
75 } else {
76 $pidctr{$pid} = $pidctr{$pid} + 1;
77 $func = "wait_" . $pid . "_" . $pidctr{$pid};
78 }
79 if ($done == 0) {
80 $start{$func} = $1;
81 $type{$func} = 1;
82 if ($1 < $firsttime) {
83 $firsttime = $1;
84 }
85 }
86 $pids{$func} = $pid;
87 $count = $count + 1;
88 }
89
90 if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_\.]+)\+.*returned/) {
67 if ($done == 0) { 91 if ($done == 0) {
68 $end{$2} = $1; 92 $end{$2} = $1;
69 $maxtime = $1; 93 $maxtime = $1;
70 } 94 }
71 } 95 }
96
97 if ($line =~ /([0-9\.]+)\] async_continuing @ ([0-9]+)/) {
98 my $pid = $2;
99 my $func = "wait_" . $pid . "_" . $pidctr{$pid};
100 $end{$func} = $1;
101 $maxtime = $1;
102 }
72 if ($line =~ /Write protecting the/) { 103 if ($line =~ /Write protecting the/) {
73 $done = 1; 104 $done = 1;
74 } 105 }
@@ -105,6 +136,8 @@ $styles[9] = "fill:rgb(255,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0
105$styles[10] = "fill:rgb(255,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; 136$styles[10] = "fill:rgb(255,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)";
106$styles[11] = "fill:rgb(128,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; 137$styles[11] = "fill:rgb(128,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)";
107 138
139my $style_wait = "fill:rgb(128,128,128);fill-opacity:0.5;stroke-width:0;stroke:rgb(0,0,0)";
140
108my $mult = 1950.0 / ($maxtime - $firsttime); 141my $mult = 1950.0 / ($maxtime - $firsttime);
109my $threshold2 = ($maxtime - $firsttime) / 120.0; 142my $threshold2 = ($maxtime - $firsttime) / 120.0;
110my $threshold = $threshold2/10; 143my $threshold = $threshold2/10;
@@ -139,11 +172,16 @@ foreach my $key (@initcalls) {
139 $stylecounter = 0; 172 $stylecounter = 0;
140 }; 173 };
141 174
142 print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n"; 175 if ($type{$key} == 1) {
143 if ($duration >= $threshold2) { 176 $y = $y + 15;
144 print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n"; 177 print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"115\" style=\"$style_wait\"/>\n";
145 } else { 178 } else {
146 print "<text transform=\"translate($s3,$y2) rotate(90)\" font-size=\"3pt\">$key</text>\n"; 179 print "<rect x=\"$s\" width=\"$w\" y=\"$y\" height=\"145\" style=\"$style\"/>\n";
180 if ($duration >= $threshold2) {
181 print "<text transform=\"translate($s2,$y2) rotate(90)\">$key</text>\n";
182 } else {
183 print "<text transform=\"translate($s3,$y2) rotate(90)\" font-size=\"3pt\">$key</text>\n";
184 }
147 } 185 }
148 } 186 }
149} 187}
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 7bed4ed2c519..2d5ece798c4c 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -10,7 +10,7 @@ use strict;
10my $P = $0; 10my $P = $0;
11$P =~ s@.*/@@g; 11$P =~ s@.*/@@g;
12 12
13my $V = '0.26'; 13my $V = '0.28';
14 14
15use Getopt::Long qw(:config no_auto_abbrev); 15use Getopt::Long qw(:config no_auto_abbrev);
16 16
@@ -110,7 +110,8 @@ our $Sparse = qr{
110 __iomem| 110 __iomem|
111 __must_check| 111 __must_check|
112 __init_refok| 112 __init_refok|
113 __kprobes 113 __kprobes|
114 __ref
114 }x; 115 }x;
115our $Attribute = qr{ 116our $Attribute = qr{
116 const| 117 const|
@@ -411,13 +412,15 @@ sub ctx_statement_block {
411 412
412 my $type = ''; 413 my $type = '';
413 my $level = 0; 414 my $level = 0;
414 my @stack = ([$type, $level]); 415 my @stack = ();
415 my $p; 416 my $p;
416 my $c; 417 my $c;
417 my $len = 0; 418 my $len = 0;
418 419
419 my $remainder; 420 my $remainder;
420 while (1) { 421 while (1) {
422 @stack = (['', 0]) if ($#stack == -1);
423
421 #warn "CSB: blk<$blk> remain<$remain>\n"; 424 #warn "CSB: blk<$blk> remain<$remain>\n";
422 # If we are about to drop off the end, pull in more 425 # If we are about to drop off the end, pull in more
423 # context. 426 # context.
@@ -1238,7 +1241,8 @@ sub process {
1238 $realfile =~ s@^([^/]*)/@@; 1241 $realfile =~ s@^([^/]*)/@@;
1239 1242
1240 $p1_prefix = $1; 1243 $p1_prefix = $1;
1241 if ($tree && $p1_prefix ne '' && -e "$root/$p1_prefix") { 1244 if (!$file && $tree && $p1_prefix ne '' &&
1245 -e "$root/$p1_prefix") {
1242 WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n"); 1246 WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n");
1243 } 1247 }
1244 1248
@@ -1581,9 +1585,9 @@ sub process {
1581 } 1585 }
1582# TEST: allow direct testing of the attribute matcher. 1586# TEST: allow direct testing of the attribute matcher.
1583 if ($dbg_attr) { 1587 if ($dbg_attr) {
1584 if ($line =~ /^.\s*$Attribute\s*$/) { 1588 if ($line =~ /^.\s*$Modifier\s*$/) {
1585 ERROR("TEST: is attr\n" . $herecurr); 1589 ERROR("TEST: is attr\n" . $herecurr);
1586 } elsif ($dbg_attr > 1 && $line =~ /^.+($Attribute)/) { 1590 } elsif ($dbg_attr > 1 && $line =~ /^.+($Modifier)/) {
1587 ERROR("TEST: is not attr ($1 is)\n". $herecurr); 1591 ERROR("TEST: is not attr ($1 is)\n". $herecurr);
1588 } 1592 }
1589 next; 1593 next;
@@ -1655,7 +1659,7 @@ sub process {
1655 1659
1656# * goes on variable not on type 1660# * goes on variable not on type
1657 # (char*[ const]) 1661 # (char*[ const])
1658 if ($line =~ m{\($NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)*)\)}) { 1662 if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) {
1659 my ($from, $to) = ($1, $1); 1663 my ($from, $to) = ($1, $1);
1660 1664
1661 # Should start with a space. 1665 # Should start with a space.
@@ -1663,14 +1667,14 @@ sub process {
1663 # Should not end with a space. 1667 # Should not end with a space.
1664 $to =~ s/\s+$//; 1668 $to =~ s/\s+$//;
1665 # '*'s should not have spaces between. 1669 # '*'s should not have spaces between.
1666 while ($to =~ s/(.)\s\*/$1\*/) { 1670 while ($to =~ s/\*\s+\*/\*\*/) {
1667 } 1671 }
1668 1672
1669 #print "from<$from> to<$to>\n"; 1673 #print "from<$from> to<$to>\n";
1670 if ($from ne $to) { 1674 if ($from ne $to) {
1671 ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr); 1675 ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr);
1672 } 1676 }
1673 } elsif ($line =~ m{\b$NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)?)($Ident)}) { 1677 } elsif ($line =~ m{\b$NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)($Ident)}) {
1674 my ($from, $to, $ident) = ($1, $1, $2); 1678 my ($from, $to, $ident) = ($1, $1, $2);
1675 1679
1676 # Should start with a space. 1680 # Should start with a space.
@@ -1678,13 +1682,13 @@ sub process {
1678 # Should not end with a space. 1682 # Should not end with a space.
1679 $to =~ s/\s+$//; 1683 $to =~ s/\s+$//;
1680 # '*'s should not have spaces between. 1684 # '*'s should not have spaces between.
1681 while ($to =~ s/(.)\s\*/$1\*/) { 1685 while ($to =~ s/\*\s+\*/\*\*/) {
1682 } 1686 }
1683 # Modifiers should have spaces. 1687 # Modifiers should have spaces.
1684 $to =~ s/(\b$Modifier$)/$1 /; 1688 $to =~ s/(\b$Modifier$)/$1 /;
1685 1689
1686 #print "from<$from> to<$to>\n"; 1690 #print "from<$from> to<$to> ident<$ident>\n";
1687 if ($from ne $to) { 1691 if ($from ne $to && $ident !~ /^$Modifier$/) {
1688 ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr); 1692 ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr);
1689 } 1693 }
1690 } 1694 }
@@ -1883,11 +1887,11 @@ sub process {
1883 if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { 1887 if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) {
1884 ERROR("space required before that '$op' $at\n" . $hereptr); 1888 ERROR("space required before that '$op' $at\n" . $hereptr);
1885 } 1889 }
1886 if ($op eq '*' && $cc =~/\s*const\b/) { 1890 if ($op eq '*' && $cc =~/\s*$Modifier\b/) {
1887 # A unary '*' may be const 1891 # A unary '*' may be const
1888 1892
1889 } elsif ($ctx =~ /.xW/) { 1893 } elsif ($ctx =~ /.xW/) {
1890 ERROR("space prohibited after that '$op' $at\n" . $hereptr); 1894 ERROR("Aspace prohibited after that '$op' $at\n" . $hereptr);
1891 } 1895 }
1892 1896
1893 # unary ++ and unary -- are allowed no space on one side. 1897 # unary ++ and unary -- are allowed no space on one side.
@@ -2014,7 +2018,11 @@ sub process {
2014 2018
2015 # Flatten any parentheses 2019 # Flatten any parentheses
2016 $value =~ s/\)\(/\) \(/g; 2020 $value =~ s/\)\(/\) \(/g;
2017 while ($value !~ /(?:$Ident|-?$Constant)\s*$Compare\s*(?:$Ident|-?$Constant)/ && $value =~ s/\([^\(\)]*\)/1/) { 2021 while ($value =~ s/\[[^\{\}]*\]/1/ ||
2022 $value !~ /(?:$Ident|-?$Constant)\s*
2023 $Compare\s*
2024 (?:$Ident|-?$Constant)/x &&
2025 $value =~ s/\([^\(\)]*\)/1/) {
2018 } 2026 }
2019 2027
2020 if ($value =~ /^(?:$Ident|-?$Constant)$/) { 2028 if ($value =~ /^(?:$Ident|-?$Constant)$/) {
@@ -2102,6 +2110,11 @@ sub process {
2102 ERROR("trailing statements should be on next line\n" . $herecurr); 2110 ERROR("trailing statements should be on next line\n" . $herecurr);
2103 } 2111 }
2104 } 2112 }
2113# if should not continue a brace
2114 if ($line =~ /}\s*if\b/) {
2115 ERROR("trailing statements should be on next line\n" .
2116 $herecurr);
2117 }
2105# case and default should not have general statements after them 2118# case and default should not have general statements after them
2106 if ($line =~ /^.\s*(?:case\s*.*|default\s*):/g && 2119 if ($line =~ /^.\s*(?:case\s*.*|default\s*):/g &&
2107 $line !~ /\G(?: 2120 $line !~ /\G(?:
@@ -2516,9 +2529,10 @@ sub process {
2516 WARN("please use device_initcall() instead of __initcall()\n" . $herecurr); 2529 WARN("please use device_initcall() instead of __initcall()\n" . $herecurr);
2517 } 2530 }
2518# check for struct file_operations, ensure they are const. 2531# check for struct file_operations, ensure they are const.
2519 if ($line =~ /\bstruct\s+file_operations\b/ && 2532 if ($line !~ /\bconst\b/ &&
2520 $line !~ /\bconst\b/) { 2533 $line =~ /\bstruct\s+(file_operations|seq_operations)\b/) {
2521 WARN("struct file_operations should normally be const\n" . $herecurr); 2534 WARN("struct $1 should normally be const\n" .
2535 $herecurr);
2522 } 2536 }
2523 2537
2524# use of NR_CPUS is usually wrong 2538# use of NR_CPUS is usually wrong
@@ -2548,7 +2562,7 @@ sub process {
2548 if ($line =~ /\bin_atomic\s*\(/) { 2562 if ($line =~ /\bin_atomic\s*\(/) {
2549 if ($realfile =~ m@^drivers/@) { 2563 if ($realfile =~ m@^drivers/@) {
2550 ERROR("do not use in_atomic in drivers\n" . $herecurr); 2564 ERROR("do not use in_atomic in drivers\n" . $herecurr);
2551 } else { 2565 } elsif ($realfile !~ m@^kernel/@) {
2552 WARN("use of in_atomic() is incorrect outside core kernel code\n" . $herecurr); 2566 WARN("use of in_atomic() is incorrect outside core kernel code\n" . $herecurr);
2553 } 2567 }
2554 } 2568 }
diff --git a/scripts/config b/scripts/config
index 68b9761cdc38..db6084b78a10 100755
--- a/scripts/config
+++ b/scripts/config
@@ -60,6 +60,10 @@ else
60 FN=.config 60 FN=.config
61fi 61fi
62 62
63if [ "$1" = "" ] ; then
64 usage
65fi
66
63while [ "$1" != "" ] ; do 67while [ "$1" != "" ] ; do
64 CMD="$1" 68 CMD="$1"
65 shift 69 shift
diff --git a/scripts/gcc-x86_32-has-stack-protector.sh b/scripts/gcc-x86_32-has-stack-protector.sh
new file mode 100644
index 000000000000..29493dc4528d
--- /dev/null
+++ b/scripts/gcc-x86_32-has-stack-protector.sh
@@ -0,0 +1,8 @@
1#!/bin/sh
2
3echo "int foo(void) { char X[200]; return 3; }" | $* -S -xc -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
4if [ "$?" -eq "0" ] ; then
5 echo y
6else
7 echo n
8fi
diff --git a/scripts/gcc-x86_64-has-stack-protector.sh b/scripts/gcc-x86_64-has-stack-protector.sh
index 325c0a1b03b6..afaec618b395 100644
--- a/scripts/gcc-x86_64-has-stack-protector.sh
+++ b/scripts/gcc-x86_64-has-stack-protector.sh
@@ -1,6 +1,8 @@
1#!/bin/sh 1#!/bin/sh
2 2
3echo "int foo(void) { char X[200]; return 3; }" | $1 -S -xc -c -O0 -mcmodel=kernel -fstack-protector - -o - 2> /dev/null | grep -q "%gs" 3echo "int foo(void) { char X[200]; return 3; }" | $* -S -xc -c -O0 -mcmodel=kernel -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
4if [ "$?" -eq "0" ] ; then 4if [ "$?" -eq "0" ] ; then
5 echo $2 5 echo y
6else
7 echo n
6fi 8fi
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__ 683#ifdef __GNU_LIBRARY__
689 struct option long_opts[] = { 684 struct option long_opts[] = {
690 {"arch", 1, 0, 'a'}, 685 {"arch", 1, 0, 'a'},
691 {"asm", 0, 0, 'A'},
692 {"debug", 0, 0, 'd'}, 686 {"debug", 0, 0, 'd'},
693 {"warnings", 0, 0, 'w'}, 687 {"warnings", 0, 0, 'w'},
694 {"quiet", 0, 0, 'q'}, 688 {"quiet", 0, 0, 'q'},
@@ -701,10 +695,10 @@ int main(int argc, char **argv)
701 {0, 0, 0, 0} 695 {0, 0, 0, 0}
702 }; 696 };
703 697
704 while ((o = getopt_long(argc, argv, "a:dwqVADr:T:ph", 698 while ((o = getopt_long(argc, argv, "a:dwqVDr:T:ph",
705 &long_opts[0], NULL)) != EOF) 699 &long_opts[0], NULL)) != EOF)
706#else /* __GNU_LIBRARY__ */ 700#else /* __GNU_LIBRARY__ */
707 while ((o = getopt(argc, argv, "a:dwqVADr:T:ph")) != EOF) 701 while ((o = getopt(argc, argv, "a:dwqVDr:T:ph")) != EOF)
708#endif /* __GNU_LIBRARY__ */ 702#endif /* __GNU_LIBRARY__ */
709 switch (o) { 703 switch (o) {
710 case 'a': 704 case 'a':
@@ -722,9 +716,6 @@ int main(int argc, char **argv)
722 case 'V': 716 case 'V':
723 fputs("genksyms version 2.5.60\n", stderr); 717 fputs("genksyms version 2.5.60\n", stderr);
724 break; 718 break;
725 case 'A':
726 flag_asm = 1;
727 break;
728 case 'D': 719 case 'D':
729 flag_dump_defs = 1; 720 flag_dump_defs = 1;
730 break; 721 break;
diff --git a/scripts/genksyms/keywords.c_shipped b/scripts/genksyms/keywords.c_shipped
index 83484fe93ede..971e0113ae7a 100644
--- a/scripts/genksyms/keywords.c_shipped
+++ b/scripts/genksyms/keywords.c_shipped
@@ -1,4 +1,4 @@
1/* ANSI-C code produced by gperf version 3.0.1 */ 1/* ANSI-C code produced by gperf version 3.0.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 */ 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#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ 4#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -32,7 +32,7 @@
32 32
33#line 3 "scripts/genksyms/keywords.gperf" 33#line 3 "scripts/genksyms/keywords.gperf"
34struct resword { const char *name; int token; }; 34struct resword { const char *name; int token; };
35/* maximum key range = 64, duplicates = 0 */ 35/* maximum key range = 62, duplicates = 0 */
36 36
37#ifdef __GNUC__ 37#ifdef __GNUC__
38__inline 38__inline
@@ -46,32 +46,32 @@ is_reserved_hash (register const char *str, register unsigned int len)
46{ 46{
47 static const unsigned char asso_values[] = 47 static const unsigned char asso_values[] =
48 { 48 {
49 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 49 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
50 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 50 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
51 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 51 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
52 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 52 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
53 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 53 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
54 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 54 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
55 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 55 65, 65, 65, 65, 65, 65, 65, 65, 65, 5,
56 67, 67, 67, 67, 67, 67, 15, 67, 67, 67, 56 65, 65, 65, 65, 65, 65, 35, 65, 65, 65,
57 0, 67, 67, 67, 67, 67, 67, 67, 67, 67, 57 0, 65, 65, 65, 65, 65, 65, 65, 65, 65,
58 67, 67, 67, 67, 67, 0, 67, 0, 67, 5, 58 65, 65, 65, 65, 65, 0, 65, 0, 65, 5,
59 25, 20, 15, 30, 67, 15, 67, 67, 10, 0, 59 20, 15, 10, 30, 65, 15, 65, 65, 20, 0,
60 10, 40, 20, 67, 10, 5, 0, 10, 15, 67, 60 10, 35, 20, 65, 10, 5, 0, 10, 5, 65,
61 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 61 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
62 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 62 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
63 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 63 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
64 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 64 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 65 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
66 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
67 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
68 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
69 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 69 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
70 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 70 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
71 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 71 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
72 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 72 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
73 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 73 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
74 67, 67, 67, 67, 67, 67 74 65, 65, 65, 65, 65, 65
75 }; 75 };
76 return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]]; 76 return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
77} 77}
@@ -84,119 +84,116 @@ is_reserved_word (register const char *str, register unsigned int len)
84{ 84{
85 enum 85 enum
86 { 86 {
87 TOTAL_KEYWORDS = 45, 87 TOTAL_KEYWORDS = 43,
88 MIN_WORD_LENGTH = 3, 88 MIN_WORD_LENGTH = 3,
89 MAX_WORD_LENGTH = 24, 89 MAX_WORD_LENGTH = 24,
90 MIN_HASH_VALUE = 3, 90 MIN_HASH_VALUE = 3,
91 MAX_HASH_VALUE = 66 91 MAX_HASH_VALUE = 64
92 }; 92 };
93 93
94 static const struct resword wordlist[] = 94 static const struct resword wordlist[] =
95 { 95 {
96 {""}, {""}, {""}, 96 {""}, {""}, {""},
97#line 28 "scripts/genksyms/keywords.gperf" 97#line 26 "scripts/genksyms/keywords.gperf"
98 {"asm", ASM_KEYW}, 98 {"asm", ASM_KEYW},
99 {""}, 99 {""},
100#line 10 "scripts/genksyms/keywords.gperf" 100#line 8 "scripts/genksyms/keywords.gperf"
101 {"__asm", ASM_KEYW}, 101 {"__asm", ASM_KEYW},
102 {""}, 102 {""},
103#line 11 "scripts/genksyms/keywords.gperf" 103#line 9 "scripts/genksyms/keywords.gperf"
104 {"__asm__", ASM_KEYW}, 104 {"__asm__", ASM_KEYW},
105 {""}, {""}, 105 {""}, {""},
106#line 54 "scripts/genksyms/keywords.gperf" 106#line 52 "scripts/genksyms/keywords.gperf"
107 {"__typeof__", TYPEOF_KEYW}, 107 {"__typeof__", TYPEOF_KEYW},
108 {""}, 108 {""},
109#line 14 "scripts/genksyms/keywords.gperf" 109#line 12 "scripts/genksyms/keywords.gperf"
110 {"__const", CONST_KEYW}, 110 {"__const", CONST_KEYW},
111#line 13 "scripts/genksyms/keywords.gperf" 111#line 11 "scripts/genksyms/keywords.gperf"
112 {"__attribute__", ATTRIBUTE_KEYW}, 112 {"__attribute__", ATTRIBUTE_KEYW},
113#line 15 "scripts/genksyms/keywords.gperf" 113#line 13 "scripts/genksyms/keywords.gperf"
114 {"__const__", CONST_KEYW}, 114 {"__const__", CONST_KEYW},
115#line 20 "scripts/genksyms/keywords.gperf" 115#line 18 "scripts/genksyms/keywords.gperf"
116 {"__signed__", SIGNED_KEYW}, 116 {"__signed__", SIGNED_KEYW},
117#line 46 "scripts/genksyms/keywords.gperf" 117#line 44 "scripts/genksyms/keywords.gperf"
118 {"static", STATIC_KEYW}, 118 {"static", STATIC_KEYW},
119 {""}, 119#line 20 "scripts/genksyms/keywords.gperf"
120#line 41 "scripts/genksyms/keywords.gperf" 120 {"__volatile__", VOLATILE_KEYW},
121#line 39 "scripts/genksyms/keywords.gperf"
121 {"int", INT_KEYW}, 122 {"int", INT_KEYW},
122#line 34 "scripts/genksyms/keywords.gperf" 123#line 32 "scripts/genksyms/keywords.gperf"
123 {"char", CHAR_KEYW}, 124 {"char", CHAR_KEYW},
124#line 35 "scripts/genksyms/keywords.gperf" 125#line 33 "scripts/genksyms/keywords.gperf"
125 {"const", CONST_KEYW}, 126 {"const", CONST_KEYW},
126#line 47 "scripts/genksyms/keywords.gperf" 127#line 45 "scripts/genksyms/keywords.gperf"
127 {"struct", STRUCT_KEYW}, 128 {"struct", STRUCT_KEYW},
128#line 26 "scripts/genksyms/keywords.gperf" 129#line 24 "scripts/genksyms/keywords.gperf"
129 {"__restrict__", RESTRICT_KEYW}, 130 {"__restrict__", RESTRICT_KEYW},
130#line 27 "scripts/genksyms/keywords.gperf"
131 {"restrict", RESTRICT_KEYW},
132#line 7 "scripts/genksyms/keywords.gperf"
133 {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
134#line 18 "scripts/genksyms/keywords.gperf"
135 {"__inline__", INLINE_KEYW},
136 {""},
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" 131#line 25 "scripts/genksyms/keywords.gperf"
132 {"restrict", RESTRICT_KEYW},
133#line 23 "scripts/genksyms/keywords.gperf"
142 {"_restrict", RESTRICT_KEYW}, 134 {"_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" 135#line 16 "scripts/genksyms/keywords.gperf"
136 {"__inline__", INLINE_KEYW},
137#line 10 "scripts/genksyms/keywords.gperf"
138 {"__attribute", ATTRIBUTE_KEYW},
139 {""},
140#line 14 "scripts/genksyms/keywords.gperf"
149 {"__extension__", EXTENSION_KEYW}, 141 {"__extension__", EXTENSION_KEYW},
150#line 37 "scripts/genksyms/keywords.gperf" 142#line 35 "scripts/genksyms/keywords.gperf"
151 {"enum", ENUM_KEYW}, 143 {"enum", ENUM_KEYW},
152#line 8 "scripts/genksyms/keywords.gperf" 144#line 19 "scripts/genksyms/keywords.gperf"
153 {"EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW}, 145 {"__volatile", VOLATILE_KEYW},
154#line 38 "scripts/genksyms/keywords.gperf" 146#line 36 "scripts/genksyms/keywords.gperf"
155 {"extern", EXTERN_KEYW}, 147 {"extern", EXTERN_KEYW},
156 {""}, 148 {""},
157#line 19 "scripts/genksyms/keywords.gperf" 149#line 17 "scripts/genksyms/keywords.gperf"
158 {"__signed", SIGNED_KEYW}, 150 {"__signed", SIGNED_KEYW},
159#line 9 "scripts/genksyms/keywords.gperf" 151#line 7 "scripts/genksyms/keywords.gperf"
160 {"EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW}, 152 {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
161#line 49 "scripts/genksyms/keywords.gperf" 153 {""},
162 {"union", UNION_KEYW}, 154#line 51 "scripts/genksyms/keywords.gperf"
163#line 53 "scripts/genksyms/keywords.gperf"
164 {"typeof", TYPEOF_KEYW}, 155 {"typeof", TYPEOF_KEYW},
165#line 48 "scripts/genksyms/keywords.gperf" 156#line 46 "scripts/genksyms/keywords.gperf"
166 {"typedef", TYPEDEF_KEYW}, 157 {"typedef", TYPEDEF_KEYW},
167#line 17 "scripts/genksyms/keywords.gperf" 158#line 15 "scripts/genksyms/keywords.gperf"
168 {"__inline", INLINE_KEYW}, 159 {"__inline", INLINE_KEYW},
169#line 33 "scripts/genksyms/keywords.gperf" 160#line 31 "scripts/genksyms/keywords.gperf"
170 {"auto", AUTO_KEYW}, 161 {"auto", AUTO_KEYW},
171#line 21 "scripts/genksyms/keywords.gperf" 162#line 47 "scripts/genksyms/keywords.gperf"
172 {"__volatile", VOLATILE_KEYW}, 163 {"union", UNION_KEYW},
173 {""}, {""}, 164 {""}, {""},
174#line 50 "scripts/genksyms/keywords.gperf" 165#line 48 "scripts/genksyms/keywords.gperf"
175 {"unsigned", UNSIGNED_KEYW}, 166 {"unsigned", UNSIGNED_KEYW},
176 {""}, 167#line 49 "scripts/genksyms/keywords.gperf"
177#line 44 "scripts/genksyms/keywords.gperf" 168 {"void", VOID_KEYW},
169#line 42 "scripts/genksyms/keywords.gperf"
178 {"short", SHORT_KEYW}, 170 {"short", SHORT_KEYW},
179#line 40 "scripts/genksyms/keywords.gperf" 171 {""}, {""},
172#line 50 "scripts/genksyms/keywords.gperf"
173 {"volatile", VOLATILE_KEYW},
174 {""},
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"
180 {"inline", INLINE_KEYW}, 184 {"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},
181 {""}, 189 {""},
182#line 52 "scripts/genksyms/keywords.gperf" 190#line 22 "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"
187 {"_Bool", BOOL_KEYW}, 191 {"_Bool", BOOL_KEYW},
188 {""}, {""},
189#line 43 "scripts/genksyms/keywords.gperf" 192#line 43 "scripts/genksyms/keywords.gperf"
190 {"register", REGISTER_KEYW}, 193 {"signed", SIGNED_KEYW},
191#line 51 "scripts/genksyms/keywords.gperf" 194 {""}, {""},
192 {"void", VOID_KEYW}, 195#line 40 "scripts/genksyms/keywords.gperf"
193#line 39 "scripts/genksyms/keywords.gperf" 196 {"long", LONG_KEYW}
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}
200 }; 197 };
201 198
202 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) 199 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
diff --git a/scripts/genksyms/keywords.gperf b/scripts/genksyms/keywords.gperf
index 8abe7ab8d88f..5ef3733225fb 100644
--- a/scripts/genksyms/keywords.gperf
+++ b/scripts/genksyms/keywords.gperf
@@ -5,8 +5,6 @@ struct resword { const char *name; int token; }
5EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW 5EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW
6EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW 6EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
7EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW 7EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW
8EXPORT_UNUSED_SYMBOL, EXPORT_SYMBOL_KEYW
9EXPORT_UNUSED_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
10__asm, ASM_KEYW 8__asm, ASM_KEYW
11__asm__, ASM_KEYW 9__asm__, ASM_KEYW
12__attribute, ATTRIBUTE_KEYW 10__attribute, ATTRIBUTE_KEYW
diff --git a/scripts/headers_check.pl b/scripts/headers_check.pl
index db30fac3083e..56f90a480899 100644
--- a/scripts/headers_check.pl
+++ b/scripts/headers_check.pl
@@ -38,7 +38,7 @@ foreach my $file (@files) {
38 &check_asm_types(); 38 &check_asm_types();
39 &check_sizetypes(); 39 &check_sizetypes();
40 &check_prototypes(); 40 &check_prototypes();
41 &check_config(); 41 # Dropped for now. Too much noise &check_config();
42 } 42 }
43 close FH; 43 close FH;
44} 44}
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index 92758120a767..ad2434b26970 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -130,9 +130,18 @@ static int read_symbol(FILE *in, struct sym_entry *s)
130static int symbol_valid(struct sym_entry *s) 130static int symbol_valid(struct sym_entry *s)
131{ 131{
132 /* Symbols which vary between passes. Passes 1 and 2 must have 132 /* Symbols which vary between passes. Passes 1 and 2 must have
133 * identical symbol lists. 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.
134 */ 136 */
135 static char *special_symbols[] = { 137 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
136 /* Exclude linker generated symbols which vary between passes */ 145 /* Exclude linker generated symbols which vary between passes */
137 "_SDA_BASE_", /* ppc */ 146 "_SDA_BASE_", /* ppc */
138 "_SDA2_BASE_", /* ppc */ 147 "_SDA2_BASE_", /* ppc */
@@ -164,9 +173,7 @@ static int symbol_valid(struct sym_entry *s)
164 } 173 }
165 174
166 /* Exclude symbols which vary between passes. */ 175 /* Exclude symbols which vary between passes. */
167 if (strstr((char *)s->sym + offset, "_compiled.") || 176 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)
170 return 0; 177 return 0;
171 178
172 for (i = 0; special_symbols[i]; i++) 179 for (i = 0; special_symbols[i]; i++)
@@ -543,10 +550,8 @@ int main(int argc, char **argv)
543 usage(); 550 usage();
544 551
545 read_map(stdin); 552 read_map(stdin);
546 if (table_cnt) { 553 sort_symbols();
547 sort_symbols(); 554 optimize_token_table();
548 optimize_token_table();
549 }
550 write_src(); 555 write_src();
551 556
552 return 0; 557 return 0;
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 8bb83a100edb..0f11870116dc 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1827,6 +1827,40 @@ sub reset_state {
1827 $state = 0; 1827 $state = 0;
1828} 1828}
1829 1829
1830sub syscall_munge() {
1831 my $void = 0;
1832
1833 $prototype =~ s@[\r\n\t]+@ @gos; # strip newlines/CR's/tabs
1834## if ($prototype =~ m/SYSCALL_DEFINE0\s*\(\s*(a-zA-Z0-9_)*\s*\)/) {
1835 if ($prototype =~ m/SYSCALL_DEFINE0/) {
1836 $void = 1;
1837## $prototype = "long sys_$1(void)";
1838 }
1839
1840 $prototype =~ s/SYSCALL_DEFINE.*\(/long sys_/; # fix return type & func name
1841 if ($prototype =~ m/long (sys_.*?),/) {
1842 $prototype =~ s/,/\(/;
1843 } elsif ($void) {
1844 $prototype =~ s/\)/\(void\)/;
1845 }
1846
1847 # now delete all of the odd-number commas in $prototype
1848 # so that arg types & arg names don't have a comma between them
1849 my $count = 0;
1850 my $len = length($prototype);
1851 if ($void) {
1852 $len = 0; # skip the for-loop
1853 }
1854 for (my $ix = 0; $ix < $len; $ix++) {
1855 if (substr($prototype, $ix, 1) eq ',') {
1856 $count++;
1857 if ($count % 2 == 1) {
1858 substr($prototype, $ix, 1) = ' ';
1859 }
1860 }
1861 }
1862}
1863
1830sub process_state3_function($$) { 1864sub process_state3_function($$) {
1831 my $x = shift; 1865 my $x = shift;
1832 my $file = shift; 1866 my $file = shift;
@@ -1839,11 +1873,15 @@ sub process_state3_function($$) {
1839 elsif ($x =~ /([^\{]*)/) { 1873 elsif ($x =~ /([^\{]*)/) {
1840 $prototype .= $1; 1874 $prototype .= $1;
1841 } 1875 }
1876
1842 if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) { 1877 if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) {
1843 $prototype =~ s@/\*.*?\*/@@gos; # strip comments. 1878 $prototype =~ s@/\*.*?\*/@@gos; # strip comments.
1844 $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. 1879 $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
1845 $prototype =~ s@^\s+@@gos; # strip leading spaces 1880 $prototype =~ s@^\s+@@gos; # strip leading spaces
1846 dump_function($prototype,$file); 1881 if ($prototype =~ /SYSCALL_DEFINE/) {
1882 syscall_munge();
1883 }
1884 dump_function($prototype, $file);
1847 reset_state(); 1885 reset_state();
1848 } 1886 }
1849} 1887}
diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl
index 700a7a654a3f..528492bcba5b 100644
--- a/scripts/markup_oops.pl
+++ b/scripts/markup_oops.pl
@@ -1,4 +1,6 @@
1#!/usr/bin/perl -w 1#!/usr/bin/perl
2
3use File::Basename;
2 4
3# Copyright 2008, Intel Corporation 5# Copyright 2008, Intel Corporation
4# 6#
@@ -13,23 +15,165 @@
13 15
14 16
15my $vmlinux_name = $ARGV[0]; 17my $vmlinux_name = $ARGV[0];
16 18if (!defined($vmlinux_name)) {
19 my $kerver = `uname -r`;
20 chomp($kerver);
21 $vmlinux_name = "/lib/modules/$kerver/build/vmlinux";
22 print "No vmlinux specified, assuming $vmlinux_name\n";
23}
24my $filename = $vmlinux_name;
17# 25#
18# Step 1: Parse the oops to find the EIP value 26# Step 1: Parse the oops to find the EIP value
19# 27#
20 28
21my $target = "0"; 29my $target = "0";
30my $function;
31my $module = "";
32my $func_offset = 0;
33my $vmaoffset = 0;
34
35my %regs;
36
37
38sub parse_x86_regs
39{
40 my ($line) = @_;
41 if ($line =~ /EAX: ([0-9a-f]+) EBX: ([0-9a-f]+) ECX: ([0-9a-f]+) EDX: ([0-9a-f]+)/) {
42 $regs{"%eax"} = $1;
43 $regs{"%ebx"} = $2;
44 $regs{"%ecx"} = $3;
45 $regs{"%edx"} = $4;
46 }
47 if ($line =~ /ESI: ([0-9a-f]+) EDI: ([0-9a-f]+) EBP: ([0-9a-f]+) ESP: ([0-9a-f]+)/) {
48 $regs{"%esi"} = $1;
49 $regs{"%edi"} = $2;
50 $regs{"%esp"} = $4;
51 }
52 if ($line =~ /RAX: ([0-9a-f]+) RBX: ([0-9a-f]+) RCX: ([0-9a-f]+)/) {
53 $regs{"%eax"} = $1;
54 $regs{"%ebx"} = $2;
55 $regs{"%ecx"} = $3;
56 }
57 if ($line =~ /RDX: ([0-9a-f]+) RSI: ([0-9a-f]+) RDI: ([0-9a-f]+)/) {
58 $regs{"%edx"} = $1;
59 $regs{"%esi"} = $2;
60 $regs{"%edi"} = $3;
61 }
62 if ($line =~ /RBP: ([0-9a-f]+) R08: ([0-9a-f]+) R09: ([0-9a-f]+)/) {
63 $regs{"%r08"} = $2;
64 $regs{"%r09"} = $3;
65 }
66 if ($line =~ /R10: ([0-9a-f]+) R11: ([0-9a-f]+) R12: ([0-9a-f]+)/) {
67 $regs{"%r10"} = $1;
68 $regs{"%r11"} = $2;
69 $regs{"%r12"} = $3;
70 }
71 if ($line =~ /R13: ([0-9a-f]+) R14: ([0-9a-f]+) R15: ([0-9a-f]+)/) {
72 $regs{"%r13"} = $1;
73 $regs{"%r14"} = $2;
74 $regs{"%r15"} = $3;
75 }
76}
77
78sub reg_name
79{
80 my ($reg) = @_;
81 $reg =~ s/r(.)x/e\1x/;
82 $reg =~ s/r(.)i/e\1i/;
83 $reg =~ s/r(.)p/e\1p/;
84 return $reg;
85}
86
87sub process_x86_regs
88{
89 my ($line, $cntr) = @_;
90 my $str = "";
91 if (length($line) < 40) {
92 return ""; # not an asm istruction
93 }
94
95 # find the arguments to the instruction
96 if ($line =~ /([0-9a-zA-Z\,\%\(\)\-\+]+)$/) {
97 $lastword = $1;
98 } else {
99 return "";
100 }
101
102 # we need to find the registers that get clobbered,
103 # since their value is no longer relevant for previous
104 # instructions in the stream.
105
106 $clobber = $lastword;
107 # first, remove all memory operands, they're read only
108 $clobber =~ s/\([a-z0-9\%\,]+\)//g;
109 # then, remove everything before the comma, thats the read part
110 $clobber =~ s/.*\,//g;
111
112 # if this is the instruction that faulted, we haven't actually done
113 # the write yet... nothing is clobbered.
114 if ($cntr == 0) {
115 $clobber = "";
116 }
117
118 foreach $reg (keys(%regs)) {
119 my $clobberprime = reg_name($clobber);
120 my $lastwordprime = reg_name($lastword);
121 my $val = $regs{$reg};
122 if ($val =~ /^[0]+$/) {
123 $val = "0";
124 } else {
125 $val =~ s/^0*//;
126 }
127
128 # first check if we're clobbering this register; if we do
129 # we print it with a =>, and then delete its value
130 if ($clobber =~ /$reg/ || $clobberprime =~ /$reg/) {
131 if (length($val) > 0) {
132 $str = $str . " $reg => $val ";
133 }
134 $regs{$reg} = "";
135 $val = "";
136 }
137 # now check if we're reading this register
138 if ($lastword =~ /$reg/ || $lastwordprime =~ /$reg/) {
139 if (length($val) > 0) {
140 $str = $str . " $reg = $val ";
141 }
142 }
143 }
144 return $str;
145}
146
147# parse the oops
22while (<STDIN>) { 148while (<STDIN>) {
23 if ($_ =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) { 149 my $line = $_;
150 if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) {
24 $target = $1; 151 $target = $1;
25 } 152 }
26} 153 if ($line =~ /RIP: 0010:\[\<([a-z0-9]+)\>\]/) {
154 $target = $1;
155 }
156 if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) {
157 $function = $1;
158 $func_offset = $2;
159 }
160 if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) {
161 $function = $1;
162 $func_offset = $2;
163 }
27 164
28if ($target =~ /^f8/) { 165 # check if it's a module
29 print "This script does not work on modules ... \n"; 166 if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) {
30 exit; 167 $module = $3;
168 }
169 if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) {
170 $module = $3;
171 }
172 parse_x86_regs($line);
31} 173}
32 174
175my $decodestart = hex($target) - hex($func_offset);
176my $decodestop = hex($target) + 8192;
33if ($target eq "0") { 177if ($target eq "0") {
34 print "No oops found!\n"; 178 print "No oops found!\n";
35 print "Usage: \n"; 179 print "Usage: \n";
@@ -37,10 +181,34 @@ if ($target eq "0") {
37 exit; 181 exit;
38} 182}
39 183
184# if it's a module, we need to find the .ko file and calculate a load offset
185if ($module ne "") {
186 my $dir = dirname($filename);
187 $dir = $dir . "/";
188 my $mod = $module . ".ko";
189 my $modulefile = `find $dir -name $mod | head -1`;
190 chomp($modulefile);
191 $filename = $modulefile;
192 if ($filename eq "") {
193 print "Module .ko file for $module not found. Aborting\n";
194 exit;
195 }
196 # ok so we found the module, now we need to calculate the vma offset
197 open(FILE, "objdump -dS $filename |") || die "Cannot start objdump";
198 while (<FILE>) {
199 if ($_ =~ /^([0-9a-f]+) \<$function\>\:/) {
200 my $fu = $1;
201 $vmaoffset = hex($target) - hex($fu) - hex($func_offset);
202 }
203 }
204 close(FILE);
205}
206
40my $counter = 0; 207my $counter = 0;
41my $state = 0; 208my $state = 0;
42my $center = 0; 209my $center = 0;
43my @lines; 210my @lines;
211my @reglines;
44 212
45sub InRange { 213sub InRange {
46 my ($address, $target) = @_; 214 my ($address, $target) = @_;
@@ -59,9 +227,7 @@ sub InRange {
59# first, parse the input into the lines array, but to keep size down, 227# first, parse the input into the lines array, but to keep size down,
60# we only do this for 4Kb around the sweet spot 228# we only do this for 4Kb around the sweet spot
61 229
62my $filename; 230open(FILE, "objdump -dS --adjust-vma=$vmaoffset --start-address=$decodestart --stop-address=$decodestop $filename |") || die "Cannot start objdump";
63
64open(FILE, "objdump -dS $vmlinux_name |") || die "Cannot start objdump";
65 231
66while (<FILE>) { 232while (<FILE>) {
67 my $line = $_; 233 my $line = $_;
@@ -147,16 +313,36 @@ while ($finish < $counter) {
147 313
148my $i; 314my $i;
149 315
150my $fulltext = ""; 316
317# start annotating the registers in the asm.
318# this goes from the oopsing point back, so that the annotator
319# can track (opportunistically) which registers got written and
320# whos value no longer is relevant.
321
322$i = $center;
323while ($i >= $start) {
324 $reglines[$i] = process_x86_regs($lines[$i], $center - $i);
325 $i = $i - 1;
326}
327
151$i = $start; 328$i = $start;
152while ($i < $finish) { 329while ($i < $finish) {
330 my $line;
153 if ($i == $center) { 331 if ($i == $center) {
154 $fulltext = $fulltext . "*$lines[$i] <----- faulting instruction\n"; 332 $line = "*$lines[$i] ";
155 } else { 333 } else {
156 $fulltext = $fulltext . " $lines[$i]\n"; 334 $line = " $lines[$i] ";
335 }
336 print $line;
337 if (defined($reglines[$i]) && length($reglines[$i]) > 0) {
338 my $c = 60 - length($line);
339 while ($c > 0) { print " "; $c = $c - 1; };
340 print "| $reglines[$i]";
157 } 341 }
342 if ($i == $center) {
343 print "<--- faulting instruction";
344 }
345 print "\n";
158 $i = $i +1; 346 $i = $i +1;
159} 347}
160 348
161print $fulltext;
162
diff --git a/scripts/mksysmap b/scripts/mksysmap
index 1db316a3712b..6e133a0bae7a 100644
--- a/scripts/mksysmap
+++ b/scripts/mksysmap
@@ -37,6 +37,9 @@
37 37
38# readprofile starts reading symbols when _stext is found, and 38# readprofile starts reading symbols when _stext is found, and
39# continue until it finds a symbol which is not either of 'T', 't', 39# continue until it finds a symbol which is not either of 'T', 't',
40# 'W' or 'w'. 40# 'W' or 'w'. __crc_ are 'A' and placed in the middle
41# so we just ignore them to let readprofile continue to work.
42# (At least sparc64 has __crc_ in the middle).
43
44$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2
41 45
42$NM -n $1 | grep -v '\( [aNUw] \)\|\( \$[adt]\)' > $2
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index d4dc222a74f3..4eea60b1693e 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -210,6 +210,7 @@ static void do_usb_table(void *symval, unsigned long size,
210static int do_hid_entry(const char *filename, 210static int do_hid_entry(const char *filename,
211 struct hid_device_id *id, char *alias) 211 struct hid_device_id *id, char *alias)
212{ 212{
213 id->bus = TO_NATIVE(id->bus);
213 id->vendor = TO_NATIVE(id->vendor); 214 id->vendor = TO_NATIVE(id->vendor);
214 id->product = TO_NATIVE(id->product); 215 id->product = TO_NATIVE(id->product);
215 216
@@ -366,11 +367,17 @@ static void do_pnp_device_entry(void *symval, unsigned long size,
366 367
367 for (i = 0; i < count; i++) { 368 for (i = 0; i < count; i++) {
368 const char *id = (char *)devs[i].id; 369 const char *id = (char *)devs[i].id;
370 char acpi_id[sizeof(devs[0].id)];
371 int j;
369 372
370 buf_printf(&mod->dev_table_buf, 373 buf_printf(&mod->dev_table_buf,
371 "MODULE_ALIAS(\"pnp:d%s*\");\n", id); 374 "MODULE_ALIAS(\"pnp:d%s*\");\n", id);
375
376 /* fix broken pnp bus lowercasing */
377 for (j = 0; j < sizeof(acpi_id); j++)
378 acpi_id[j] = toupper(id[j]);
372 buf_printf(&mod->dev_table_buf, 379 buf_printf(&mod->dev_table_buf,
373 "MODULE_ALIAS(\"acpi*:%s:*\");\n", id); 380 "MODULE_ALIAS(\"acpi*:%s:*\");\n", acpi_id);
374 } 381 }
375} 382}
376 383
@@ -416,10 +423,17 @@ static void do_pnp_card_entries(void *symval, unsigned long size,
416 423
417 /* add an individual alias for every device entry */ 424 /* add an individual alias for every device entry */
418 if (!dup) { 425 if (!dup) {
426 char acpi_id[sizeof(card->devs[0].id)];
427 int k;
428
419 buf_printf(&mod->dev_table_buf, 429 buf_printf(&mod->dev_table_buf,
420 "MODULE_ALIAS(\"pnp:d%s*\");\n", id); 430 "MODULE_ALIAS(\"pnp:d%s*\");\n", id);
431
432 /* fix broken pnp bus lowercasing */
433 for (k = 0; k < sizeof(acpi_id); k++)
434 acpi_id[k] = toupper(id[k]);
421 buf_printf(&mod->dev_table_buf, 435 buf_printf(&mod->dev_table_buf,
422 "MODULE_ALIAS(\"acpi*:%s:*\");\n", id); 436 "MODULE_ALIAS(\"acpi*:%s:*\");\n", acpi_id);
423 } 437 }
424 } 438 }
425 } 439 }
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 88921611b22e..7e62303133dc 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -415,8 +415,9 @@ static int parse_elf(struct elf_info *info, const char *filename)
415 const char *secstrings 415 const char *secstrings
416 = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; 416 = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
417 const char *secname; 417 const char *secname;
418 int nobits = sechdrs[i].sh_type == SHT_NOBITS;
418 419
419 if (sechdrs[i].sh_offset > info->size) { 420 if (!nobits && sechdrs[i].sh_offset > info->size) {
420 fatal("%s is truncated. sechdrs[i].sh_offset=%lu > " 421 fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
421 "sizeof(*hrd)=%zu\n", filename, 422 "sizeof(*hrd)=%zu\n", filename,
422 (unsigned long)sechdrs[i].sh_offset, 423 (unsigned long)sechdrs[i].sh_offset,
@@ -425,6 +426,8 @@ static int parse_elf(struct elf_info *info, const char *filename)
425 } 426 }
426 secname = secstrings + sechdrs[i].sh_name; 427 secname = secstrings + sechdrs[i].sh_name;
427 if (strcmp(secname, ".modinfo") == 0) { 428 if (strcmp(secname, ".modinfo") == 0) {
429 if (nobits)
430 fatal("%s has NOBITS .modinfo\n", filename);
428 info->modinfo = (void *)hdr + sechdrs[i].sh_offset; 431 info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
429 info->modinfo_len = sechdrs[i].sh_size; 432 info->modinfo_len = sechdrs[i].sh_size;
430 } else if (strcmp(secname, "__ksymtab") == 0) 433 } else if (strcmp(secname, "__ksymtab") == 0)
diff --git a/scripts/package/mkspec b/scripts/package/mkspec
index 2500886fb90a..ee448cdc6a2b 100755
--- a/scripts/package/mkspec
+++ b/scripts/package/mkspec
@@ -86,6 +86,14 @@ echo "%endif"
86echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE" 86echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE"
87 87
88echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE" 88echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE"
89
90echo "%ifnarch ppc64"
91echo 'cp vmlinux vmlinux.orig'
92echo 'bzip2 -9 vmlinux'
93echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2"
94echo 'mv vmlinux.orig vmlinux'
95echo "%endif"
96
89echo "" 97echo ""
90echo "%clean" 98echo "%clean"
91echo '#echo -rf $RPM_BUILD_ROOT' 99echo '#echo -rf $RPM_BUILD_ROOT'
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index f6946cf99ce1..f1c4b35bc324 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -58,14 +58,7 @@ fi
58# Check for svn and a svn repo. 58# Check for svn and a svn repo.
59if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then 59if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then
60 rev=`echo $rev | awk '{print $NF}'` 60 rev=`echo $rev | awk '{print $NF}'`
61 changes=`svn status 2>/dev/null | grep '^[AMD]' | wc -l` 61 printf -- '-svn%s' "$rev"
62
63 # Are there uncommitted changes?
64 if [ $changes != 0 ]; then
65 printf -- '-svn%s%s' "$rev" -dirty
66 else
67 printf -- '-svn%s' "$rev"
68 fi
69 62
70 # All done with svn 63 # All done with svn
71 exit 64 exit
diff --git a/scripts/strip-symbols b/scripts/strip-symbols
deleted file mode 100644
index 29ee8c1a014b..000000000000
--- a/scripts/strip-symbols
+++ /dev/null
@@ -1,22 +0,0 @@
1<*>
2*.h
3__compound_literal[$.][0-9]*
4__crc_[a-zA-Z_]*
5__exitcall_[a-zA-Z_]*
6__func__[$.][0-9]*
7__FUNCTION__[$.][0-9]*
8gcc[0-9]_compiled[$.]
9__initcall_[a-zA-Z_]*
10__kcrctab_[a-zA-Z_]*
11__kstrtab_[a-zA-Z_]*
12__ksymtab_[a-zA-Z_]*
13__mod_[a-zA-Z_]*[0-9]
14__module_depends
15__param_[a-zA-Z_]*
16__pci_fixup_*PCI_ANY_IDPCI_ANY_ID*
17__pci_fixup_*PCI_ANY_IDPCI_DEVICE_ID_*
18__pci_fixup_*PCI_VENDOR_ID_*PCI_ANY_ID*
19__pci_fixup_*PCI_VENDOR_ID_*PCI_DEVICE_ID_*
20__PRETTY_FUNCTION__[$.][0-9]*
21__setup_[a-zA-Z_]*
22____versions
diff --git a/scripts/tags.sh b/scripts/tags.sh
index fdbe78bb5e2b..5bd8b1003d44 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -76,7 +76,10 @@ all_sources()
76 76
77all_kconfigs() 77all_kconfigs()
78{ 78{
79 find_sources $ALLSOURCE_ARCHS 'Kconfig*' 79 for arch in $ALLSOURCE_ARCHS; do
80 find_sources $arch 'Kconfig*'
81 done
82 find_other_sources 'Kconfig*'
80} 83}
81 84
82all_defconfigs() 85all_defconfigs()
@@ -99,7 +102,8 @@ exuberant()
99 -I ____cacheline_internodealigned_in_smp \ 102 -I ____cacheline_internodealigned_in_smp \
100 -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ 103 -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
101 --extra=+f --c-kinds=+px \ 104 --extra=+f --c-kinds=+px \
102 --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' 105 --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' \
106 --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/'
103 107
104 all_kconfigs | xargs $1 -a \ 108 all_kconfigs | xargs $1 -a \
105 --langdef=kconfig --language-force=kconfig \ 109 --langdef=kconfig --language-force=kconfig \
@@ -117,7 +121,9 @@ exuberant()
117 121
118emacs() 122emacs()
119{ 123{
120 all_sources | xargs $1 -a 124 all_sources | xargs $1 -a \
125 --regex='/^ENTRY(\([^)]*\)).*/\1/' \
126 --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/'
121 127
122 all_kconfigs | xargs $1 -a \ 128 all_kconfigs | xargs $1 -a \
123 --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' 129 --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'