aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorMichal Marek <mmarek@suse.cz>2014-01-02 08:02:06 -0500
committerMichal Marek <mmarek@suse.cz>2014-01-02 08:02:06 -0500
commit37e2c2a775fc887acd1432908478dfd532f7f00f (patch)
treee51ebc699d8e262fd47e0913be6a711cb1a7b565 /scripts
parent1c8ddae09f4c102b97c9086cc70347e89468a547 (diff)
parent6ce4eac1f600b34f2f7f58f9cd8f0503d79e42ae (diff)
Merge commit v3.13-rc1 into kbuild/misc
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.modpost4
-rw-r--r--scripts/asn1_compiler.c2
-rwxr-xr-xscripts/bloat-o-meter7
-rwxr-xr-xscripts/checkpatch.pl171
-rw-r--r--scripts/docproc.c14
-rw-r--r--scripts/gen_initramfs_list.sh24
-rw-r--r--scripts/kallsyms.c18
-rw-r--r--scripts/kconfig/expr.h2
-rw-r--r--scripts/kconfig/mconf.c60
-rw-r--r--scripts/kconfig/menu.c11
-rw-r--r--scripts/kconfig/qconf.cc5
-rw-r--r--scripts/kconfig/qconf.h1
-rw-r--r--scripts/kconfig/symbol.c2
-rw-r--r--scripts/kconfig/zconf.l1
-rwxr-xr-xscripts/kernel-doc6
-rw-r--r--scripts/link-vmlinux.sh2
-rw-r--r--scripts/mod/modpost.c37
-rw-r--r--scripts/mod/sumversion.c2
-rw-r--r--scripts/package/Makefile4
-rwxr-xr-xscripts/recordmcount.pl4
-rw-r--r--scripts/sortextable.c24
-rw-r--r--scripts/sortextable.h26
22 files changed, 303 insertions, 124 deletions
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 8dcdca27d836..69f0a1417e9a 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -79,9 +79,11 @@ modpost = scripts/mod/modpost \
79 $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \ 79 $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
80 $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) 80 $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
81 81
82MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
83
82# We can go over command line length here, so be careful. 84# We can go over command line length here, so be careful.
83quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules 85quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
84 cmd_modpost = $(MODLISTCMD) | sed 's/\.ko$$/.o/' | $(modpost) -s -T - 86 cmd_modpost = $(MODLISTCMD) | sed 's/\.ko$$/.o/' | $(modpost) $(MODPOST_OPT) -s -T -
85 87
86PHONY += __modpost 88PHONY += __modpost
87__modpost: $(modules:.ko=.o) FORCE 89__modpost: $(modules:.ko=.o) FORCE
diff --git a/scripts/asn1_compiler.c b/scripts/asn1_compiler.c
index db0e5cd34c70..91c4117637ae 100644
--- a/scripts/asn1_compiler.c
+++ b/scripts/asn1_compiler.c
@@ -1353,6 +1353,8 @@ static void render_out_of_line_list(FILE *out)
1353 render_opcode(out, "ASN1_OP_END_SET_OF%s,\n", act); 1353 render_opcode(out, "ASN1_OP_END_SET_OF%s,\n", act);
1354 render_opcode(out, "_jump_target(%u),\n", entry); 1354 render_opcode(out, "_jump_target(%u),\n", entry);
1355 break; 1355 break;
1356 default:
1357 break;
1356 } 1358 }
1357 if (e->action) 1359 if (e->action)
1358 render_opcode(out, "_action(ACT_%s),\n", 1360 render_opcode(out, "_action(ACT_%s),\n",
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter
index 6129020c41a9..549d0ab8c662 100755
--- a/scripts/bloat-o-meter
+++ b/scripts/bloat-o-meter
@@ -19,9 +19,10 @@ def getsizes(file):
19 size, type, name = l[:-1].split() 19 size, type, name = l[:-1].split()
20 if type in "tTdDbBrR": 20 if type in "tTdDbBrR":
21 # strip generated symbols 21 # strip generated symbols
22 if name[:6] == "__mod_": continue 22 if name.startswith("__mod_"): continue
23 # function names begin with '.' on 64-bit powerpc 23 if name == "linux_banner": continue
24 if "." in name[1:]: name = "static." + name.split(".")[0] 24 # statics and some other optimizations adds random .NUMBER
25 name = re.sub(r'\.[0-9]+', '', name)
25 sym[name] = sym.get(name, 0) + int(size, 16) 26 sym[name] = sym.get(name, 0) + int(size, 16)
26 return sym 27 return sym
27 28
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 47016c304c84..9c9810030377 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -241,8 +241,11 @@ our $Sparse = qr{
241 __ref| 241 __ref|
242 __rcu 242 __rcu
243 }x; 243 }x;
244 244our $InitAttributePrefix = qr{__(?:mem|cpu|dev|net_|)};
245our $InitAttribute = qr{__(?:mem|cpu|dev|net_|)(?:initdata|initconst|init\b)}; 245our $InitAttributeData = qr{$InitAttributePrefix(?:initdata\b)};
246our $InitAttributeConst = qr{$InitAttributePrefix(?:initconst\b)};
247our $InitAttributeInit = qr{$InitAttributePrefix(?:init\b)};
248our $InitAttribute = qr{$InitAttributeData|$InitAttributeConst|$InitAttributeInit};
246 249
247# Notes to $Attribute: 250# Notes to $Attribute:
248# We need \b after 'init' otherwise 'initconst' will cause a false positive in a check 251# We need \b after 'init' otherwise 'initconst' will cause a false positive in a check
@@ -323,7 +326,8 @@ our $logFunctions = qr{(?x:
323 (?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)| 326 (?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
324 WARN(?:_RATELIMIT|_ONCE|)| 327 WARN(?:_RATELIMIT|_ONCE|)|
325 panic| 328 panic|
326 MODULE_[A-Z_]+ 329 MODULE_[A-Z_]+|
330 seq_vprintf|seq_printf|seq_puts
327)}; 331)};
328 332
329our $signature_tags = qr{(?xi: 333our $signature_tags = qr{(?xi:
@@ -442,8 +446,9 @@ sub seed_camelcase_file {
442 next if ($line !~ /(?:[A-Z][a-z]|[a-z][A-Z])/); 446 next if ($line !~ /(?:[A-Z][a-z]|[a-z][A-Z])/);
443 if ($line =~ /^[ \t]*(?:#[ \t]*define|typedef\s+$Type)\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)/) { 447 if ($line =~ /^[ \t]*(?:#[ \t]*define|typedef\s+$Type)\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)/) {
444 $camelcase{$1} = 1; 448 $camelcase{$1} = 1;
445 } 449 } elsif ($line =~ /^\s*$Declare\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)\s*[\(\[,;]/) {
446 elsif ($line =~ /^\s*$Declare\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)\s*\(/) { 450 $camelcase{$1} = 1;
451 } elsif ($line =~ /^\s*(?:union|struct|enum)\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)\s*[;\{]/) {
447 $camelcase{$1} = 1; 452 $camelcase{$1} = 1;
448 } 453 }
449 } 454 }
@@ -1512,6 +1517,14 @@ sub rtrim {
1512 return $string; 1517 return $string;
1513} 1518}
1514 1519
1520sub string_find_replace {
1521 my ($string, $find, $replace) = @_;
1522
1523 $string =~ s/$find/$replace/g;
1524
1525 return $string;
1526}
1527
1515sub tabify { 1528sub tabify {
1516 my ($leading) = @_; 1529 my ($leading) = @_;
1517 1530
@@ -1612,6 +1625,8 @@ sub process {
1612 my @setup_docs = (); 1625 my @setup_docs = ();
1613 my $setup_docs = 0; 1626 my $setup_docs = 0;
1614 1627
1628 my $camelcase_file_seeded = 0;
1629
1615 sanitise_line_reset(); 1630 sanitise_line_reset();
1616 my $line; 1631 my $line;
1617 foreach my $rawline (@rawlines) { 1632 foreach my $rawline (@rawlines) {
@@ -1754,11 +1769,11 @@ sub process {
1754 # extract the filename as it passes 1769 # extract the filename as it passes
1755 if ($line =~ /^diff --git.*?(\S+)$/) { 1770 if ($line =~ /^diff --git.*?(\S+)$/) {
1756 $realfile = $1; 1771 $realfile = $1;
1757 $realfile =~ s@^([^/]*)/@@; 1772 $realfile =~ s@^([^/]*)/@@ if (!$file);
1758 $in_commit_log = 0; 1773 $in_commit_log = 0;
1759 } elsif ($line =~ /^\+\+\+\s+(\S+)/) { 1774 } elsif ($line =~ /^\+\+\+\s+(\S+)/) {
1760 $realfile = $1; 1775 $realfile = $1;
1761 $realfile =~ s@^([^/]*)/@@; 1776 $realfile =~ s@^([^/]*)/@@ if (!$file);
1762 $in_commit_log = 0; 1777 $in_commit_log = 0;
1763 1778
1764 $p1_prefix = $1; 1779 $p1_prefix = $1;
@@ -1947,6 +1962,18 @@ sub process {
1947 $rpt_cleaners = 1; 1962 $rpt_cleaners = 1;
1948 } 1963 }
1949 1964
1965# Check for FSF mailing addresses.
1966 if ($rawline =~ /You should have received a copy/ ||
1967 $rawline =~ /write to the Free Software/ ||
1968 $rawline =~ /59 Temple Place/ ||
1969 $rawline =~ /51 Franklin Street/) {
1970 my $herevet = "$here\n" . cat_vet($rawline) . "\n";
1971 my $msg_type = \&ERROR;
1972 $msg_type = \&CHK if ($file);
1973 &{$msg_type}("FSF_MAILING_ADDRESS",
1974 "Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL.\n" . $herevet)
1975 }
1976
1950# check for Kconfig help text having a real description 1977# check for Kconfig help text having a real description
1951# Only applies when adding the entry originally, after that we do not have 1978# Only applies when adding the entry originally, after that we do not have
1952# sufficient context to determine whether it is indeed long enough. 1979# sufficient context to determine whether it is indeed long enough.
@@ -2838,7 +2865,7 @@ sub process {
2838 \+=|-=|\*=|\/=|%=|\^=|\|=|&=| 2865 \+=|-=|\*=|\/=|%=|\^=|\|=|&=|
2839 =>|->|<<|>>|<|>|=|!|~| 2866 =>|->|<<|>>|<|>|=|!|~|
2840 &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%| 2867 &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%|
2841 \?|: 2868 \?:|\?|:
2842 }x; 2869 }x;
2843 my @elements = split(/($ops|;)/, $opline); 2870 my @elements = split(/($ops|;)/, $opline);
2844 2871
@@ -3061,15 +3088,13 @@ sub process {
3061 $ok = 1; 3088 $ok = 1;
3062 } 3089 }
3063 3090
3064 # Ignore ?: 3091 # messages are ERROR, but ?: are CHK
3065 if (($opv eq ':O' && $ca =~ /\?$/) ||
3066 ($op eq '?' && $cc =~ /^:/)) {
3067 $ok = 1;
3068 }
3069
3070 if ($ok == 0) { 3092 if ($ok == 0) {
3071 if (ERROR("SPACING", 3093 my $msg_type = \&ERROR;
3072 "spaces required around that '$op' $at\n" . $hereptr)) { 3094 $msg_type = \&CHK if (($op eq '?:' || $op eq '?' || $op eq ':') && $ctx =~ /VxV/);
3095
3096 if (&{$msg_type}("SPACING",
3097 "spaces required around that '$op' $at\n" . $hereptr)) {
3073 $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " "; 3098 $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " ";
3074 if (defined $fix_elements[$n + 2]) { 3099 if (defined $fix_elements[$n + 2]) {
3075 $fix_elements[$n + 2] =~ s/^\s+//; 3100 $fix_elements[$n + 2] =~ s/^\s+//;
@@ -3208,21 +3233,10 @@ sub process {
3208 } 3233 }
3209 3234
3210# Return is not a function. 3235# Return is not a function.
3211 if (defined($stat) && $stat =~ /^.\s*return(\s*)(\(.*);/s) { 3236 if (defined($stat) && $stat =~ /^.\s*return(\s*)\(/s) {
3212 my $spacing = $1; 3237 my $spacing = $1;
3213 my $value = $2; 3238 if ($^V && $^V ge 5.10.0 &&
3214 3239 $stat =~ /^.\s*return\s*$balanced_parens\s*;\s*$/) {
3215 # Flatten any parentheses
3216 $value =~ s/\(/ \(/g;
3217 $value =~ s/\)/\) /g;
3218 while ($value =~ s/\[[^\[\]]*\]/1/ ||
3219 $value !~ /(?:$Ident|-?$Constant)\s*
3220 $Compare\s*
3221 (?:$Ident|-?$Constant)/x &&
3222 $value =~ s/\([^\(\)]*\)/1/) {
3223 }
3224#print "value<$value>\n";
3225 if ($value =~ /^\s*(?:$Ident|-?$Constant)\s*$/) {
3226 ERROR("RETURN_PARENTHESES", 3240 ERROR("RETURN_PARENTHESES",
3227 "return is not a function, parentheses are not required\n" . $herecurr); 3241 "return is not a function, parentheses are not required\n" . $herecurr);
3228 3242
@@ -3231,6 +3245,7 @@ sub process {
3231 "space required before the open parenthesis '('\n" . $herecurr); 3245 "space required before the open parenthesis '('\n" . $herecurr);
3232 } 3246 }
3233 } 3247 }
3248
3234# Return of what appears to be an errno should normally be -'ve 3249# Return of what appears to be an errno should normally be -'ve
3235 if ($line =~ /^.\s*return\s*(E[A-Z]*)\s*;/) { 3250 if ($line =~ /^.\s*return\s*(E[A-Z]*)\s*;/) {
3236 my $name = $1; 3251 my $name = $1;
@@ -3274,6 +3289,7 @@ sub process {
3274 } 3289 }
3275 } 3290 }
3276 if (!defined $suppress_whiletrailers{$linenr} && 3291 if (!defined $suppress_whiletrailers{$linenr} &&
3292 defined($stat) && defined($cond) &&
3277 $line =~ /\b(?:if|while|for)\s*\(/ && $line !~ /^.\s*#/) { 3293 $line =~ /\b(?:if|while|for)\s*\(/ && $line !~ /^.\s*#/) {
3278 my ($s, $c) = ($stat, $cond); 3294 my ($s, $c) = ($stat, $cond);
3279 3295
@@ -3396,7 +3412,13 @@ sub process {
3396 while ($var =~ m{($Ident)}g) { 3412 while ($var =~ m{($Ident)}g) {
3397 my $word = $1; 3413 my $word = $1;
3398 next if ($word !~ /[A-Z][a-z]|[a-z][A-Z]/); 3414 next if ($word !~ /[A-Z][a-z]|[a-z][A-Z]/);
3399 seed_camelcase_includes() if ($check); 3415 if ($check) {
3416 seed_camelcase_includes();
3417 if (!$file && !$camelcase_file_seeded) {
3418 seed_camelcase_file($realfile);
3419 $camelcase_file_seeded = 1;
3420 }
3421 }
3400 if (!defined $camelcase{$word}) { 3422 if (!defined $camelcase{$word}) {
3401 $camelcase{$word} = 1; 3423 $camelcase{$word} = 1;
3402 CHK("CAMELCASE", 3424 CHK("CAMELCASE",
@@ -3725,14 +3747,6 @@ sub process {
3725 } 3747 }
3726 } 3748 }
3727 3749
3728sub string_find_replace {
3729 my ($string, $find, $replace) = @_;
3730
3731 $string =~ s/$find/$replace/g;
3732
3733 return $string;
3734}
3735
3736# check for bad placement of section $InitAttribute (e.g.: __initdata) 3750# check for bad placement of section $InitAttribute (e.g.: __initdata)
3737 if ($line =~ /(\b$InitAttribute\b)/) { 3751 if ($line =~ /(\b$InitAttribute\b)/) {
3738 my $attr = $1; 3752 my $attr = $1;
@@ -3751,6 +3765,35 @@ sub string_find_replace {
3751 } 3765 }
3752 } 3766 }
3753 3767
3768# check for $InitAttributeData (ie: __initdata) with const
3769 if ($line =~ /\bconst\b/ && $line =~ /($InitAttributeData)/) {
3770 my $attr = $1;
3771 $attr =~ /($InitAttributePrefix)(.*)/;
3772 my $attr_prefix = $1;
3773 my $attr_type = $2;
3774 if (ERROR("INIT_ATTRIBUTE",
3775 "Use of const init definition must use ${attr_prefix}initconst\n" . $herecurr) &&
3776 $fix) {
3777 $fixed[$linenr - 1] =~
3778 s/$InitAttributeData/${attr_prefix}initconst/;
3779 }
3780 }
3781
3782# check for $InitAttributeConst (ie: __initconst) without const
3783 if ($line !~ /\bconst\b/ && $line =~ /($InitAttributeConst)/) {
3784 my $attr = $1;
3785 if (ERROR("INIT_ATTRIBUTE",
3786 "Use of $attr requires a separate use of const\n" . $herecurr) &&
3787 $fix) {
3788 my $lead = $fixed[$linenr - 1] =~
3789 /(^\+\s*(?:static\s+))/;
3790 $lead = rtrim($1);
3791 $lead = "$lead " if ($lead !~ /^\+$/);
3792 $lead = "${lead}const ";
3793 $fixed[$linenr - 1] =~ s/(^\+\s*(?:static\s+))/$lead/;
3794 }
3795 }
3796
3754# prefer usleep_range over udelay 3797# prefer usleep_range over udelay
3755 if ($line =~ /\budelay\s*\(\s*(\d+)\s*\)/) { 3798 if ($line =~ /\budelay\s*\(\s*(\d+)\s*\)/) {
3756 # ignore udelay's < 10, however 3799 # ignore udelay's < 10, however
@@ -3810,8 +3853,8 @@ sub string_find_replace {
3810# check for memory barriers without a comment. 3853# check for memory barriers without a comment.
3811 if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) { 3854 if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) {
3812 if (!ctx_has_comment($first_line, $linenr)) { 3855 if (!ctx_has_comment($first_line, $linenr)) {
3813 CHK("MEMORY_BARRIER", 3856 WARN("MEMORY_BARRIER",
3814 "memory barrier without comment\n" . $herecurr); 3857 "memory barrier without comment\n" . $herecurr);
3815 } 3858 }
3816 } 3859 }
3817# check of hardware specific defines 3860# check of hardware specific defines
@@ -3835,7 +3878,8 @@ sub string_find_replace {
3835 } 3878 }
3836 3879
3837# Check for __inline__ and __inline, prefer inline 3880# Check for __inline__ and __inline, prefer inline
3838 if ($line =~ /\b(__inline__|__inline)\b/) { 3881 if ($realfile !~ m@\binclude/uapi/@ &&
3882 $line =~ /\b(__inline__|__inline)\b/) {
3839 if (WARN("INLINE", 3883 if (WARN("INLINE",
3840 "plain inline is preferred over $1\n" . $herecurr) && 3884 "plain inline is preferred over $1\n" . $herecurr) &&
3841 $fix) { 3885 $fix) {
@@ -3845,19 +3889,22 @@ sub string_find_replace {
3845 } 3889 }
3846 3890
3847# Check for __attribute__ packed, prefer __packed 3891# Check for __attribute__ packed, prefer __packed
3848 if ($line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) { 3892 if ($realfile !~ m@\binclude/uapi/@ &&
3893 $line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
3849 WARN("PREFER_PACKED", 3894 WARN("PREFER_PACKED",
3850 "__packed is preferred over __attribute__((packed))\n" . $herecurr); 3895 "__packed is preferred over __attribute__((packed))\n" . $herecurr);
3851 } 3896 }
3852 3897
3853# Check for __attribute__ aligned, prefer __aligned 3898# Check for __attribute__ aligned, prefer __aligned
3854 if ($line =~ /\b__attribute__\s*\(\s*\(.*aligned/) { 3899 if ($realfile !~ m@\binclude/uapi/@ &&
3900 $line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
3855 WARN("PREFER_ALIGNED", 3901 WARN("PREFER_ALIGNED",
3856 "__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr); 3902 "__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr);
3857 } 3903 }
3858 3904
3859# Check for __attribute__ format(printf, prefer __printf 3905# Check for __attribute__ format(printf, prefer __printf
3860 if ($line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf/) { 3906 if ($realfile !~ m@\binclude/uapi/@ &&
3907 $line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf/) {
3861 if (WARN("PREFER_PRINTF", 3908 if (WARN("PREFER_PRINTF",
3862 "__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr) && 3909 "__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr) &&
3863 $fix) { 3910 $fix) {
@@ -3867,7 +3914,8 @@ sub string_find_replace {
3867 } 3914 }
3868 3915
3869# Check for __attribute__ format(scanf, prefer __scanf 3916# Check for __attribute__ format(scanf, prefer __scanf
3870 if ($line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\b/) { 3917 if ($realfile !~ m@\binclude/uapi/@ &&
3918 $line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\b/) {
3871 if (WARN("PREFER_SCANF", 3919 if (WARN("PREFER_SCANF",
3872 "__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr) && 3920 "__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr) &&
3873 $fix) { 3921 $fix) {
@@ -3903,9 +3951,9 @@ sub string_find_replace {
3903 } 3951 }
3904 3952
3905# check for seq_printf uses that could be seq_puts 3953# check for seq_printf uses that could be seq_puts
3906 if ($line =~ /\bseq_printf\s*\(/) { 3954 if ($sline =~ /\bseq_printf\s*\(.*"\s*\)\s*;\s*$/) {
3907 my $fmt = get_quoted_string($line, $rawline); 3955 my $fmt = get_quoted_string($line, $rawline);
3908 if ($fmt !~ /[^\\]\%/) { 3956 if ($fmt ne "" && $fmt !~ /[^\\]\%/) {
3909 if (WARN("PREFER_SEQ_PUTS", 3957 if (WARN("PREFER_SEQ_PUTS",
3910 "Prefer seq_puts to seq_printf\n" . $herecurr) && 3958 "Prefer seq_puts to seq_printf\n" . $herecurr) &&
3911 $fix) { 3959 $fix) {
@@ -3972,11 +4020,28 @@ sub string_find_replace {
3972 } 4020 }
3973 } 4021 }
3974 4022
4023# check for naked sscanf
4024 if ($^V && $^V ge 5.10.0 &&
4025 defined $stat &&
4026 $stat =~ /\bsscanf\b/ &&
4027 ($stat !~ /$Ident\s*=\s*sscanf\s*$balanced_parens/ &&
4028 $stat !~ /\bsscanf\s*$balanced_parens\s*(?:$Compare)/ &&
4029 $stat !~ /(?:$Compare)\s*\bsscanf\s*$balanced_parens/)) {
4030 my $lc = $stat =~ tr@\n@@;
4031 $lc = $lc + $linenr;
4032 my $stat_real = raw_line($linenr, 0);
4033 for (my $count = $linenr + 1; $count <= $lc; $count++) {
4034 $stat_real = $stat_real . "\n" . raw_line($count, 0);
4035 }
4036 WARN("NAKED_SSCANF",
4037 "unchecked sscanf return value\n" . "$here\n$stat_real\n");
4038 }
4039
3975# check for new externs in .h files. 4040# check for new externs in .h files.
3976 if ($realfile =~ /\.h$/ && 4041 if ($realfile =~ /\.h$/ &&
3977 $line =~ /^\+\s*(extern\s+)$Type\s*$Ident\s*\(/s) { 4042 $line =~ /^\+\s*(extern\s+)$Type\s*$Ident\s*\(/s) {
3978 if (WARN("AVOID_EXTERNS", 4043 if (CHK("AVOID_EXTERNS",
3979 "extern prototypes should be avoided in .h files\n" . $herecurr) && 4044 "extern prototypes should be avoided in .h files\n" . $herecurr) &&
3980 $fix) { 4045 $fix) {
3981 $fixed[$linenr - 1] =~ s/(.*)\bextern\b\s*(.*)/$1$2/; 4046 $fixed[$linenr - 1] =~ s/(.*)\bextern\b\s*(.*)/$1$2/;
3982 } 4047 }
@@ -4190,6 +4255,12 @@ sub string_find_replace {
4190 "usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr); 4255 "usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr);
4191 } 4256 }
4192 4257
4258# Use of __ARCH_HAS_<FOO> or ARCH_HAVE_<BAR> is wrong.
4259 if ($line =~ /\+\s*#\s*define\s+((?:__)?ARCH_(?:HAS|HAVE)\w*)\b/) {
4260 ERROR("DEFINE_ARCH_HAS",
4261 "#define of '$1' is wrong - use Kconfig variables or standard guards instead\n" . $herecurr);
4262 }
4263
4193# check for %L{u,d,i} in strings 4264# check for %L{u,d,i} in strings
4194 my $string; 4265 my $string;
4195 while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) { 4266 while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
diff --git a/scripts/docproc.c b/scripts/docproc.c
index 4cfdc1797eb8..2b69eaf5b646 100644
--- a/scripts/docproc.c
+++ b/scripts/docproc.c
@@ -72,6 +72,7 @@ FILELINE * docsection;
72#define FUNCTION "-function" 72#define FUNCTION "-function"
73#define NOFUNCTION "-nofunction" 73#define NOFUNCTION "-nofunction"
74#define NODOCSECTIONS "-no-doc-sections" 74#define NODOCSECTIONS "-no-doc-sections"
75#define SHOWNOTFOUND "-show-not-found"
75 76
76static char *srctree, *kernsrctree; 77static char *srctree, *kernsrctree;
77 78
@@ -294,6 +295,7 @@ static void singfunc(char * filename, char * line)
294 int startofsym = 1; 295 int startofsym = 1;
295 vec[idx++] = KERNELDOC; 296 vec[idx++] = KERNELDOC;
296 vec[idx++] = DOCBOOK; 297 vec[idx++] = DOCBOOK;
298 vec[idx++] = SHOWNOTFOUND;
297 299
298 /* Split line up in individual parameters preceded by FUNCTION */ 300 /* Split line up in individual parameters preceded by FUNCTION */
299 for (i=0; line[i]; i++) { 301 for (i=0; line[i]; i++) {
@@ -325,7 +327,8 @@ static void singfunc(char * filename, char * line)
325 */ 327 */
326static void docsect(char *filename, char *line) 328static void docsect(char *filename, char *line)
327{ 329{
328 char *vec[6]; /* kerneldoc -docbook -function "section" file NULL */ 330 /* kerneldoc -docbook -show-not-found -function "section" file NULL */
331 char *vec[7];
329 char *s; 332 char *s;
330 333
331 for (s = line; *s; s++) 334 for (s = line; *s; s++)
@@ -341,10 +344,11 @@ static void docsect(char *filename, char *line)
341 344
342 vec[0] = KERNELDOC; 345 vec[0] = KERNELDOC;
343 vec[1] = DOCBOOK; 346 vec[1] = DOCBOOK;
344 vec[2] = FUNCTION; 347 vec[2] = SHOWNOTFOUND;
345 vec[3] = line; 348 vec[3] = FUNCTION;
346 vec[4] = filename; 349 vec[4] = line;
347 vec[5] = NULL; 350 vec[5] = filename;
351 vec[6] = NULL;
348 exec_kernel_doc(vec); 352 exec_kernel_doc(vec);
349} 353}
350 354
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
index b482f162a18a..ef474098d9f1 100644
--- a/scripts/gen_initramfs_list.sh
+++ b/scripts/gen_initramfs_list.sh
@@ -240,12 +240,24 @@ case "$arg" in
240 output_file="$1" 240 output_file="$1"
241 cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)" 241 cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
242 output=${cpio_list} 242 output=${cpio_list}
243 echo "$output_file" | grep -q "\.gz$" && compr="gzip -n -9 -f" 243 echo "$output_file" | grep -q "\.gz$" \
244 echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f" 244 && [ -x "`which gzip 2> /dev/null`" ] \
245 echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f" 245 && compr="gzip -n -9 -f"
246 echo "$output_file" | grep -q "\.xz$" && \ 246 echo "$output_file" | grep -q "\.bz2$" \
247 compr="xz --check=crc32 --lzma2=dict=1MiB" 247 && [ -x "`which bzip2 2> /dev/null`" ] \
248 echo "$output_file" | grep -q "\.lzo$" && compr="lzop -9 -f" 248 && compr="bzip2 -9 -f"
249 echo "$output_file" | grep -q "\.lzma$" \
250 && [ -x "`which lzma 2> /dev/null`" ] \
251 && compr="lzma -9 -f"
252 echo "$output_file" | grep -q "\.xz$" \
253 && [ -x "`which xz 2> /dev/null`" ] \
254 && compr="xz --check=crc32 --lzma2=dict=1MiB"
255 echo "$output_file" | grep -q "\.lzo$" \
256 && [ -x "`which lzop 2> /dev/null`" ] \
257 && compr="lzop -9 -f"
258 echo "$output_file" | grep -q "\.lz4$" \
259 && [ -x "`which lz4 2> /dev/null`" ] \
260 && compr="lz4 -9 -f"
249 echo "$output_file" | grep -q "\.cpio$" && compr="cat" 261 echo "$output_file" | grep -q "\.cpio$" && compr="cat"
250 shift 262 shift
251 ;; 263 ;;
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index 487ac6f37ca2..10085de886fe 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -55,6 +55,7 @@ static struct sym_entry *table;
55static unsigned int table_size, table_cnt; 55static unsigned int table_size, table_cnt;
56static int all_symbols = 0; 56static int all_symbols = 0;
57static char symbol_prefix_char = '\0'; 57static char symbol_prefix_char = '\0';
58static unsigned long long kernel_start_addr = 0;
58 59
59int token_profit[0x10000]; 60int token_profit[0x10000];
60 61
@@ -65,7 +66,10 @@ unsigned char best_table_len[256];
65 66
66static void usage(void) 67static void usage(void)
67{ 68{
68 fprintf(stderr, "Usage: kallsyms [--all-symbols] [--symbol-prefix=<prefix char>] < in.map > out.S\n"); 69 fprintf(stderr, "Usage: kallsyms [--all-symbols] "
70 "[--symbol-prefix=<prefix char>] "
71 "[--page-offset=<CONFIG_PAGE_OFFSET>] "
72 "< in.map > out.S\n");
69 exit(1); 73 exit(1);
70} 74}
71 75
@@ -111,6 +115,12 @@ static int read_symbol(FILE *in, struct sym_entry *s)
111 fprintf(stderr, "Read error or end of file.\n"); 115 fprintf(stderr, "Read error or end of file.\n");
112 return -1; 116 return -1;
113 } 117 }
118 if (strlen(str) > KSYM_NAME_LEN) {
119 fprintf(stderr, "Symbol %s too long for kallsyms (%zu vs %d).\n"
120 "Please increase KSYM_NAME_LEN both in kernel and kallsyms.c\n",
121 str, strlen(str), KSYM_NAME_LEN);
122 return -1;
123 }
114 124
115 sym = str; 125 sym = str;
116 /* skip prefix char */ 126 /* skip prefix char */
@@ -194,6 +204,9 @@ static int symbol_valid(struct sym_entry *s)
194 int i; 204 int i;
195 int offset = 1; 205 int offset = 1;
196 206
207 if (s->addr < kernel_start_addr)
208 return 0;
209
197 /* skip prefix char */ 210 /* skip prefix char */
198 if (symbol_prefix_char && *(s->sym + 1) == symbol_prefix_char) 211 if (symbol_prefix_char && *(s->sym + 1) == symbol_prefix_char)
199 offset++; 212 offset++;
@@ -646,6 +659,9 @@ int main(int argc, char **argv)
646 if ((*p == '"' && *(p+2) == '"') || (*p == '\'' && *(p+2) == '\'')) 659 if ((*p == '"' && *(p+2) == '"') || (*p == '\'' && *(p+2) == '\''))
647 p++; 660 p++;
648 symbol_prefix_char = *p; 661 symbol_prefix_char = *p;
662 } else if (strncmp(argv[i], "--page-offset=", 14) == 0) {
663 const char *p = &argv[i][14];
664 kernel_start_addr = strtoull(p, NULL, 16);
649 } else 665 } else
650 usage(); 666 usage();
651 } 667 }
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
index df198a5f4822..ba663e1dc7e3 100644
--- a/scripts/kconfig/expr.h
+++ b/scripts/kconfig/expr.h
@@ -93,7 +93,7 @@ struct symbol {
93#define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */ 93#define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */
94#define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */ 94#define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */
95#define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */ 95#define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */
96#define SYMBOL_WRITE 0x0200 /* ? */ 96#define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */
97#define SYMBOL_CHANGED 0x0400 /* ? */ 97#define SYMBOL_CHANGED 0x0400 /* ? */
98#define SYMBOL_AUTO 0x1000 /* value from environment variable */ 98#define SYMBOL_AUTO 0x1000 /* value from environment variable */
99#define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ 99#define SYMBOL_CHECKED 0x2000 /* used during dependency checking */
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 2c3963165a0d..59184bb41ef8 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -25,7 +25,7 @@
25static const char mconf_readme[] = N_( 25static const char mconf_readme[] = N_(
26"Overview\n" 26"Overview\n"
27"--------\n" 27"--------\n"
28"This interface let you select features and parameters for the build.\n" 28"This interface lets you select features and parameters for the build.\n"
29"Features can either be built-in, modularized, or ignored. Parameters\n" 29"Features can either be built-in, modularized, or ignored. Parameters\n"
30"must be entered in as decimal or hexadecimal numbers or text.\n" 30"must be entered in as decimal or hexadecimal numbers or text.\n"
31"\n" 31"\n"
@@ -39,15 +39,15 @@ static const char mconf_readme[] = N_(
39"\n" 39"\n"
40"To change any of these features, highlight it with the cursor\n" 40"To change any of these features, highlight it with the cursor\n"
41"keys and press <Y> to build it in, <M> to make it a module or\n" 41"keys and press <Y> to build it in, <M> to make it a module or\n"
42"<N> to removed it. You may also press the <Space Bar> to cycle\n" 42"<N> to remove it. You may also press the <Space Bar> to cycle\n"
43"through the available options (ie. Y->N->M->Y).\n" 43"through the available options (i.e. Y->N->M->Y).\n"
44"\n" 44"\n"
45"Some additional keyboard hints:\n" 45"Some additional keyboard hints:\n"
46"\n" 46"\n"
47"Menus\n" 47"Menus\n"
48"----------\n" 48"----------\n"
49"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n" 49"o Use the Up/Down arrow keys (cursor keys) to highlight the item you\n"
50" you wish to change or submenu wish to select and press <Enter>.\n" 50" wish to change or the submenu you wish to select and press <Enter>.\n"
51" Submenus are designated by \"--->\", empty ones by \"----\".\n" 51" Submenus are designated by \"--->\", empty ones by \"----\".\n"
52"\n" 52"\n"
53" Shortcut: Press the option's highlighted letter (hotkey).\n" 53" Shortcut: Press the option's highlighted letter (hotkey).\n"
@@ -65,7 +65,7 @@ static const char mconf_readme[] = N_(
65" there is a delayed response which you may find annoying.\n" 65" there is a delayed response which you may find annoying.\n"
66"\n" 66"\n"
67" Also, the <TAB> and cursor keys will cycle between <Select>,\n" 67" Also, the <TAB> and cursor keys will cycle between <Select>,\n"
68" <Exit> and <Help>.\n" 68" <Exit>, <Help>, <Save>, and <Load>.\n"
69"\n" 69"\n"
70"o To get help with an item, use the cursor keys to highlight <Help>\n" 70"o To get help with an item, use the cursor keys to highlight <Help>\n"
71" and press <ENTER>.\n" 71" and press <ENTER>.\n"
@@ -105,7 +105,7 @@ static const char mconf_readme[] = N_(
105"Text Box (Help Window)\n" 105"Text Box (Help Window)\n"
106"--------\n" 106"--------\n"
107"o Use the cursor keys to scroll up/down/left/right. The VI editor\n" 107"o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
108" keys h,j,k,l function here as do <u>, <d>, <SPACE BAR> and <B> for \n" 108" keys h,j,k,l function here as do <u>, <d>, <SPACE BAR> and <B> for\n"
109" those who are familiar with less and lynx.\n" 109" those who are familiar with less and lynx.\n"
110"\n" 110"\n"
111"o Press <E>, <X>, <q>, <Enter> or <Esc><Esc> to exit.\n" 111"o Press <E>, <X>, <q>, <Enter> or <Esc><Esc> to exit.\n"
@@ -117,23 +117,21 @@ static const char mconf_readme[] = N_(
117"those who, for various reasons, find it necessary to switch\n" 117"those who, for various reasons, find it necessary to switch\n"
118"between different configurations.\n" 118"between different configurations.\n"
119"\n" 119"\n"
120"At the end of the main menu you will find two options. One is\n" 120"The <Save> button will let you save the current configuration to\n"
121"for saving the current configuration to a file of your choosing.\n" 121"a file of your choosing. Use the <Load> button to load a previously\n"
122"The other option is for loading a previously saved alternate\n" 122"saved alternate configuration.\n"
123"configuration.\n"
124"\n" 123"\n"
125"Even if you don't use alternate configuration files, but you\n" 124"Even if you don't use alternate configuration files, but you find\n"
126"find during a Menuconfig session that you have completely messed\n" 125"during a Menuconfig session that you have completely messed up your\n"
127"up your settings, you may use the \"Load Alternate...\" option to\n" 126"settings, you may use the <Load> button to restore your previously\n"
128"restore your previously saved settings from \".config\" without\n" 127"saved settings from \".config\" without restarting Menuconfig.\n"
129"restarting Menuconfig.\n"
130"\n" 128"\n"
131"Other information\n" 129"Other information\n"
132"-----------------\n" 130"-----------------\n"
133"If you use Menuconfig in an XTERM window make sure you have your\n" 131"If you use Menuconfig in an XTERM window, make sure you have your\n"
134"$TERM variable set to point to a xterm definition which supports color.\n" 132"$TERM variable set to point to an xterm definition which supports\n"
135"Otherwise, Menuconfig will look rather bad. Menuconfig will not\n" 133"color. Otherwise, Menuconfig will look rather bad. Menuconfig will\n"
136"display correctly in a RXVT window because rxvt displays only one\n" 134"not display correctly in an RXVT window because rxvt displays only one\n"
137"intensity of color, bright.\n" 135"intensity of color, bright.\n"
138"\n" 136"\n"
139"Menuconfig will display larger menus on screens or xterms which are\n" 137"Menuconfig will display larger menus on screens or xterms which are\n"
@@ -148,8 +146,8 @@ static const char mconf_readme[] = N_(
148"\n" 146"\n"
149"Optional personality available\n" 147"Optional personality available\n"
150"------------------------------\n" 148"------------------------------\n"
151"If you prefer to have all of the options listed in a single menu, rather\n" 149"If you prefer to have all of the options listed in a single menu,\n"
152"than the default multimenu hierarchy, run the menuconfig with\n" 150"rather than the default multimenu hierarchy, run the menuconfig with\n"
153"MENUCONFIG_MODE environment variable set to single_menu. Example:\n" 151"MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
154"\n" 152"\n"
155"make MENUCONFIG_MODE=single_menu menuconfig\n" 153"make MENUCONFIG_MODE=single_menu menuconfig\n"
@@ -172,7 +170,7 @@ static const char mconf_readme[] = N_(
172" mono => selects colors suitable for monochrome displays\n" 170" mono => selects colors suitable for monochrome displays\n"
173" blackbg => selects a color scheme with black background\n" 171" blackbg => selects a color scheme with black background\n"
174" classic => theme with blue background. The classic look\n" 172" classic => theme with blue background. The classic look\n"
175" bluetitle => a LCD friendly version of classic. (default)\n" 173" bluetitle => an LCD friendly version of classic. (default)\n"
176"\n"), 174"\n"),
177menu_instructions[] = N_( 175menu_instructions[] = N_(
178 "Arrow keys navigate the menu. " 176 "Arrow keys navigate the menu. "
@@ -238,24 +236,24 @@ search_help[] = N_(
238 "Symbol: FOO [=m]\n" 236 "Symbol: FOO [=m]\n"
239 "Type : tristate\n" 237 "Type : tristate\n"
240 "Prompt: Foo bus is used to drive the bar HW\n" 238 "Prompt: Foo bus is used to drive the bar HW\n"
241 " Defined at drivers/pci/Kconfig:47\n"
242 " Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
243 " Location:\n" 239 " Location:\n"
244 " -> Bus options (PCI, PCMCIA, EISA, ISA)\n" 240 " -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
245 " -> PCI support (PCI [=y])\n" 241 " -> PCI support (PCI [=y])\n"
246 "(1) -> PCI access mode (<choice> [=y])\n" 242 "(1) -> PCI access mode (<choice> [=y])\n"
243 " Defined at drivers/pci/Kconfig:47\n"
244 " Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
247 " Selects: LIBCRC32\n" 245 " Selects: LIBCRC32\n"
248 " Selected by: BAR\n" 246 " Selected by: BAR [=n]\n"
249 "-----------------------------------------------------------------\n" 247 "-----------------------------------------------------------------\n"
250 "o The line 'Type:' shows the type of the configuration option for\n" 248 "o The line 'Type:' shows the type of the configuration option for\n"
251 " this symbol (boolean, tristate, string, ...)\n" 249 " this symbol (boolean, tristate, string, ...)\n"
252 "o The line 'Prompt:' shows the text used in the menu structure for\n" 250 "o The line 'Prompt:' shows the text used in the menu structure for\n"
253 " this symbol\n" 251 " this symbol\n"
254 "o The 'Defined at' line tell at what file / line number the symbol\n" 252 "o The 'Defined at' line tells at what file / line number the symbol\n"
255 " is defined\n" 253 " is defined\n"
256 "o The 'Depends on:' line tell what symbols needs to be defined for\n" 254 "o The 'Depends on:' line tells what symbols need to be defined for\n"
257 " this symbol to be visible in the menu (selectable)\n" 255 " this symbol to be visible in the menu (selectable)\n"
258 "o The 'Location:' lines tell where in the menu structure this symbol\n" 256 "o The 'Location:' lines tells where in the menu structure this symbol\n"
259 " is located\n" 257 " is located\n"
260 " A location followed by a [=y] indicates that this is a\n" 258 " A location followed by a [=y] indicates that this is a\n"
261 " selectable menu item - and the current value is displayed inside\n" 259 " selectable menu item - and the current value is displayed inside\n"
@@ -263,9 +261,9 @@ search_help[] = N_(
263 " Press the key in the (#) prefix to jump directly to that\n" 261 " Press the key in the (#) prefix to jump directly to that\n"
264 " location. You will be returned to the current search results\n" 262 " location. You will be returned to the current search results\n"
265 " after exiting this new menu.\n" 263 " after exiting this new menu.\n"
266 "o The 'Selects:' line tell what symbol will be automatically\n" 264 "o The 'Selects:' line tells what symbols will be automatically\n"
267 " selected if this symbol is selected (y or m)\n" 265 " selected if this symbol is selected (y or m)\n"
268 "o The 'Selected by' line tell what symbol has selected this symbol\n" 266 "o The 'Selected by' line tells what symbol has selected this symbol\n"
269 "\n" 267 "\n"
270 "Only relevant lines are shown.\n" 268 "Only relevant lines are shown.\n"
271 "\n\n" 269 "\n\n"
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index c1d53200c306..db1512ae30cc 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -119,9 +119,10 @@ void menu_set_type(int type)
119 sym->type = type; 119 sym->type = type;
120 return; 120 return;
121 } 121 }
122 menu_warn(current_entry, "type of '%s' redefined from '%s' to '%s'", 122 menu_warn(current_entry,
123 sym->name ? sym->name : "<choice>", 123 "ignoring type redefinition of '%s' from '%s' to '%s'",
124 sym_type_name(sym->type), sym_type_name(type)); 124 sym->name ? sym->name : "<choice>",
125 sym_type_name(sym->type), sym_type_name(type));
125} 126}
126 127
127struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep) 128struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep)
@@ -583,7 +584,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
583 for (j = 4; --i >= 0; j += 2) { 584 for (j = 4; --i >= 0; j += 2) {
584 menu = submenu[i]; 585 menu = submenu[i];
585 if (head && location && menu == location) 586 if (head && location && menu == location)
586 jump->offset = r->len - 1; 587 jump->offset = strlen(r->s);
587 str_printf(r, "%*c-> %s", j, ' ', 588 str_printf(r, "%*c-> %s", j, ' ',
588 _(menu_get_prompt(menu))); 589 _(menu_get_prompt(menu)));
589 if (menu->sym) { 590 if (menu->sym) {
@@ -597,7 +598,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
597} 598}
598 599
599/* 600/*
600 * get peoperty of type P_SYMBOL 601 * get property of type P_SYMBOL
601 */ 602 */
602static struct property *get_symbol_prop(struct symbol *sym) 603static struct property *get_symbol_prop(struct symbol *sym)
603{ 604{
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
index 1500c38f0cca..9d3b04b0769c 100644
--- a/scripts/kconfig/qconf.cc
+++ b/scripts/kconfig/qconf.cc
@@ -69,6 +69,11 @@ static inline QString qgettext(const QString& str)
69 return QString::fromLocal8Bit(gettext(str.latin1())); 69 return QString::fromLocal8Bit(gettext(str.latin1()));
70} 70}
71 71
72ConfigSettings::ConfigSettings()
73 : QSettings("kernel.org", "qconf")
74{
75}
76
72/** 77/**
73 * Reads a list of integer values from the application settings. 78 * Reads a list of integer values from the application settings.
74 */ 79 */
diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h
index 3715b3e7212c..bde0c6b6f9e8 100644
--- a/scripts/kconfig/qconf.h
+++ b/scripts/kconfig/qconf.h
@@ -32,6 +32,7 @@ class ConfigMainWindow;
32 32
33class ConfigSettings : public QSettings { 33class ConfigSettings : public QSettings {
34public: 34public:
35 ConfigSettings();
35 Q3ValueList<int> readSizes(const QString& key, bool *ok); 36 Q3ValueList<int> readSizes(const QString& key, bool *ok);
36 bool writeSizes(const QString& key, const Q3ValueList<int>& value); 37 bool writeSizes(const QString& key, const Q3ValueList<int>& value);
37}; 38};
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index c9a6775565bf..7caabdb51c64 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -1047,7 +1047,7 @@ sym_re_search_free:
1047 * When we check for recursive dependencies we use a stack to save 1047 * When we check for recursive dependencies we use a stack to save
1048 * current state so we can print out relevant info to user. 1048 * current state so we can print out relevant info to user.
1049 * The entries are located on the call stack so no need to free memory. 1049 * The entries are located on the call stack so no need to free memory.
1050 * Note inser() remove() must always match to properly clear the stack. 1050 * Note insert() remove() must always match to properly clear the stack.
1051 */ 1051 */
1052static struct dep_stack { 1052static struct dep_stack {
1053 struct dep_stack *prev, *next; 1053 struct dep_stack *prev, *next;
diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
index 6555a475453b..1a9f53e535ca 100644
--- a/scripts/kconfig/zconf.l
+++ b/scripts/kconfig/zconf.l
@@ -68,7 +68,6 @@ static void alloc_string(const char *str, int size)
68} 68}
69%} 69%}
70 70
71ws [ \n\t]
72n [A-Za-z0-9_] 71n [A-Za-z0-9_]
73 72
74%% 73%%
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 16e8b50c8fcb..da058da413e7 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -257,6 +257,7 @@ my $man_date = ('January', 'February', 'March', 'April', 'May', 'June',
257 'July', 'August', 'September', 'October', 257 'July', 'August', 'September', 'October',
258 'November', 'December')[(localtime)[4]] . 258 'November', 'December')[(localtime)[4]] .
259 " " . ((localtime)[5]+1900); 259 " " . ((localtime)[5]+1900);
260my $show_not_found = 0;
260 261
261# Essentially these are globals. 262# Essentially these are globals.
262# They probably want to be tidied up, made more localised or something. 263# They probably want to be tidied up, made more localised or something.
@@ -369,6 +370,8 @@ while ($ARGV[0] =~ m/^-(.*)/) {
369 usage(); 370 usage();
370 } elsif ($cmd eq '-no-doc-sections') { 371 } elsif ($cmd eq '-no-doc-sections') {
371 $no_doc_sections = 1; 372 $no_doc_sections = 1;
373 } elsif ($cmd eq '-show-not-found') {
374 $show_not_found = 1;
372 } 375 }
373} 376}
374 377
@@ -2535,6 +2538,9 @@ sub process_file($) {
2535 } 2538 }
2536 if ($initial_section_counter == $section_counter) { 2539 if ($initial_section_counter == $section_counter) {
2537 print STDERR "Warning(${file}): no structured comments found\n"; 2540 print STDERR "Warning(${file}): no structured comments found\n";
2541 if (($function_only == 1) && ($show_not_found == 1)) {
2542 print STDERR " Was looking for '$_'.\n" for keys %function_table;
2543 }
2538 if ($output_mode eq "xml") { 2544 if ($output_mode eq "xml") {
2539 # The template wants at least one RefEntry here; make one. 2545 # The template wants at least one RefEntry here; make one.
2540 print "<refentry>\n"; 2546 print "<refentry>\n";
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 014994936b1c..32b10f53d0b4 100644
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -82,6 +82,8 @@ kallsyms()
82 kallsymopt="${kallsymopt} --all-symbols" 82 kallsymopt="${kallsymopt} --all-symbols"
83 fi 83 fi
84 84
85 kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET"
86
85 local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \ 87 local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \
86 ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}" 88 ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}"
87 89
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 8247979e8f64..17855761e6b7 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -17,6 +17,7 @@
17#include <string.h> 17#include <string.h>
18#include <limits.h> 18#include <limits.h>
19#include <stdbool.h> 19#include <stdbool.h>
20#include <errno.h>
20#include "modpost.h" 21#include "modpost.h"
21#include "../../include/generated/autoconf.h" 22#include "../../include/generated/autoconf.h"
22#include "../../include/linux/license.h" 23#include "../../include/linux/license.h"
@@ -37,6 +38,8 @@ static int warn_unresolved = 0;
37/* How a symbol is exported */ 38/* How a symbol is exported */
38static int sec_mismatch_count = 0; 39static int sec_mismatch_count = 0;
39static int sec_mismatch_verbose = 1; 40static int sec_mismatch_verbose = 1;
41/* ignore missing files */
42static int ignore_missing_files;
40 43
41enum export { 44enum export {
42 export_plain, export_unused, export_gpl, 45 export_plain, export_unused, export_gpl,
@@ -161,7 +164,7 @@ struct symbol {
161 unsigned int vmlinux:1; /* 1 if symbol is defined in vmlinux */ 164 unsigned int vmlinux:1; /* 1 if symbol is defined in vmlinux */
162 unsigned int kernel:1; /* 1 if symbol is from kernel 165 unsigned int kernel:1; /* 1 if symbol is from kernel
163 * (only for external modules) **/ 166 * (only for external modules) **/
164 unsigned int preloaded:1; /* 1 if symbol from Module.symvers */ 167 unsigned int preloaded:1; /* 1 if symbol from Module.symvers, or crc */
165 enum export export; /* Type of export */ 168 enum export export; /* Type of export */
166 char name[0]; 169 char name[0];
167}; 170};
@@ -329,8 +332,11 @@ static void sym_update_crc(const char *name, struct module *mod,
329{ 332{
330 struct symbol *s = find_symbol(name); 333 struct symbol *s = find_symbol(name);
331 334
332 if (!s) 335 if (!s) {
333 s = new_symbol(name, mod, export); 336 s = new_symbol(name, mod, export);
337 /* Don't complain when we find it later. */
338 s->preloaded = 1;
339 }
334 s->crc = crc; 340 s->crc = crc;
335 s->crc_valid = 1; 341 s->crc_valid = 1;
336} 342}
@@ -407,6 +413,11 @@ static int parse_elf(struct elf_info *info, const char *filename)
407 413
408 hdr = grab_file(filename, &info->size); 414 hdr = grab_file(filename, &info->size);
409 if (!hdr) { 415 if (!hdr) {
416 if (ignore_missing_files) {
417 fprintf(stderr, "%s: %s (ignored)\n", filename,
418 strerror(errno));
419 return 0;
420 }
410 perror(filename); 421 perror(filename);
411 exit(1); 422 exit(1);
412 } 423 }
@@ -599,18 +610,17 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
599 else 610 else
600 export = export_from_sec(info, get_secindex(info, sym)); 611 export = export_from_sec(info, get_secindex(info, sym));
601 612
613 /* CRC'd symbol */
614 if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
615 crc = (unsigned int) sym->st_value;
616 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
617 export);
618 }
619
602 switch (sym->st_shndx) { 620 switch (sym->st_shndx) {
603 case SHN_COMMON: 621 case SHN_COMMON:
604 warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name); 622 warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
605 break; 623 break;
606 case SHN_ABS:
607 /* CRC'd symbol */
608 if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
609 crc = (unsigned int) sym->st_value;
610 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
611 export);
612 }
613 break;
614 case SHN_UNDEF: 624 case SHN_UNDEF:
615 /* undefined symbol */ 625 /* undefined symbol */
616 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL && 626 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
@@ -1853,7 +1863,7 @@ static void add_header(struct buffer *b, struct module *mod)
1853 buf_printf(b, "\n"); 1863 buf_printf(b, "\n");
1854 buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n"); 1864 buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
1855 buf_printf(b, "\n"); 1865 buf_printf(b, "\n");
1856 buf_printf(b, "struct module __this_module\n"); 1866 buf_printf(b, "__visible struct module __this_module\n");
1857 buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n"); 1867 buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
1858 buf_printf(b, "\t.name = KBUILD_MODNAME,\n"); 1868 buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
1859 if (mod->has_init) 1869 if (mod->has_init)
@@ -2119,7 +2129,7 @@ int main(int argc, char **argv)
2119 struct ext_sym_list *extsym_iter; 2129 struct ext_sym_list *extsym_iter;
2120 struct ext_sym_list *extsym_start = NULL; 2130 struct ext_sym_list *extsym_start = NULL;
2121 2131
2122 while ((opt = getopt(argc, argv, "i:I:e:msST:o:awM:K:")) != -1) { 2132 while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:")) != -1) {
2123 switch (opt) { 2133 switch (opt) {
2124 case 'i': 2134 case 'i':
2125 kernel_read = optarg; 2135 kernel_read = optarg;
@@ -2139,6 +2149,9 @@ int main(int argc, char **argv)
2139 case 'm': 2149 case 'm':
2140 modversions = 1; 2150 modversions = 1;
2141 break; 2151 break;
2152 case 'n':
2153 ignore_missing_files = 1;
2154 break;
2142 case 'o': 2155 case 'o':
2143 dump_write = optarg; 2156 dump_write = optarg;
2144 break; 2157 break;
diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c
index 9dfcd6d988da..deb2994b04c4 100644
--- a/scripts/mod/sumversion.c
+++ b/scripts/mod/sumversion.c
@@ -416,7 +416,7 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen)
416 basename = strrchr(modname, '/') + 1; 416 basename = strrchr(modname, '/') + 1;
417 else 417 else
418 basename = modname; 418 basename = modname;
419 sprintf(filelist, "%s/%.*s.mod", modverdir, 419 snprintf(filelist, sizeof(filelist), "%s/%.*s.mod", modverdir,
420 (int) strlen(basename) - 2, basename); 420 (int) strlen(basename) - 2, basename);
421 421
422 file = grab_file(filelist, &len); 422 file = grab_file(filelist, &len);
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
index a4f31c900fa6..c5d473393816 100644
--- a/scripts/package/Makefile
+++ b/scripts/package/Makefile
@@ -115,7 +115,9 @@ git --git-dir=$(srctree)/.git archive --prefix=$(perf-tar)/ \
115 -o $(perf-tar).tar; \ 115 -o $(perf-tar).tar; \
116mkdir -p $(perf-tar); \ 116mkdir -p $(perf-tar); \
117git --git-dir=$(srctree)/.git rev-parse HEAD > $(perf-tar)/HEAD; \ 117git --git-dir=$(srctree)/.git rev-parse HEAD > $(perf-tar)/HEAD; \
118tar rf $(perf-tar).tar $(perf-tar)/HEAD; \ 118(cd $(srctree)/tools/perf; \
119util/PERF-VERSION-GEN ../../$(perf-tar)/ 2>/dev/null); \
120tar rf $(perf-tar).tar $(perf-tar)/HEAD $(perf-tar)/PERF-VERSION-FILE; \
119rm -r $(perf-tar); \ 121rm -r $(perf-tar); \
120$(if $(findstring tar-src,$@),, \ 122$(if $(findstring tar-src,$@),, \
121$(if $(findstring bz2,$@),bzip2, \ 123$(if $(findstring bz2,$@),bzip2, \
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index a674fd5507c1..d0da66396f62 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -214,13 +214,13 @@ $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)";
214$weak_regex = "^[0-9a-fA-F]+\\s+([wW])\\s+(\\S+)"; 214$weak_regex = "^[0-9a-fA-F]+\\s+([wW])\\s+(\\S+)";
215$section_regex = "Disassembly of section\\s+(\\S+):"; 215$section_regex = "Disassembly of section\\s+(\\S+):";
216$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; 216$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
217$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$"; 217$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s(mcount|__fentry__)\$";
218$section_type = '@progbits'; 218$section_type = '@progbits';
219$mcount_adjust = 0; 219$mcount_adjust = 0;
220$type = ".long"; 220$type = ".long";
221 221
222if ($arch eq "x86_64") { 222if ($arch eq "x86_64") {
223 $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount([+-]0x[0-9a-zA-Z]+)?\$"; 223 $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s(mcount|__fentry__)([+-]0x[0-9a-zA-Z]+)?\$";
224 $type = ".quad"; 224 $type = ".quad";
225 $alignment = 8; 225 $alignment = 8;
226 $mcount_adjust = -1; 226 $mcount_adjust = -1;
diff --git a/scripts/sortextable.c b/scripts/sortextable.c
index 7c2310c5b996..5f7a8b663cb9 100644
--- a/scripts/sortextable.c
+++ b/scripts/sortextable.c
@@ -152,6 +152,30 @@ static void (*w2)(uint16_t, uint16_t *);
152 152
153typedef void (*table_sort_t)(char *, int); 153typedef void (*table_sort_t)(char *, int);
154 154
155/*
156 * Move reserved section indices SHN_LORESERVE..SHN_HIRESERVE out of
157 * the way to -256..-1, to avoid conflicting with real section
158 * indices.
159 */
160#define SPECIAL(i) ((i) - (SHN_HIRESERVE + 1))
161
162static inline int is_shndx_special(unsigned int i)
163{
164 return i != SHN_XINDEX && i >= SHN_LORESERVE && i <= SHN_HIRESERVE;
165}
166
167/* Accessor for sym->st_shndx, hides ugliness of "64k sections" */
168static inline unsigned int get_secindex(unsigned int shndx,
169 unsigned int sym_offs,
170 const Elf32_Word *symtab_shndx_start)
171{
172 if (is_shndx_special(shndx))
173 return SPECIAL(shndx);
174 if (shndx != SHN_XINDEX)
175 return shndx;
176 return r(&symtab_shndx_start[sym_offs]);
177}
178
155/* 32 bit and 64 bit are very similar */ 179/* 32 bit and 64 bit are very similar */
156#include "sortextable.h" 180#include "sortextable.h"
157#define SORTEXTABLE_64 181#define SORTEXTABLE_64
diff --git a/scripts/sortextable.h b/scripts/sortextable.h
index f5eb43d42926..8fac3fd697a6 100644
--- a/scripts/sortextable.h
+++ b/scripts/sortextable.h
@@ -98,6 +98,8 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
98 Elf_Shdr *symtab_sec = NULL; 98 Elf_Shdr *symtab_sec = NULL;
99 Elf_Shdr *extab_sec = NULL; 99 Elf_Shdr *extab_sec = NULL;
100 Elf_Sym *sym; 100 Elf_Sym *sym;
101 const Elf_Sym *symtab;
102 Elf32_Word *symtab_shndx_start = NULL;
101 Elf_Sym *sort_needed_sym; 103 Elf_Sym *sort_needed_sym;
102 Elf_Shdr *sort_needed_sec; 104 Elf_Shdr *sort_needed_sec;
103 Elf_Rel *relocs = NULL; 105 Elf_Rel *relocs = NULL;
@@ -109,11 +111,22 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
109 int extab_index = 0; 111 int extab_index = 0;
110 int i; 112 int i;
111 int idx; 113 int idx;
114 unsigned int num_sections;
115 unsigned int secindex_strings;
112 116
113 shdr = (Elf_Shdr *)((char *)ehdr + _r(&ehdr->e_shoff)); 117 shdr = (Elf_Shdr *)((char *)ehdr + _r(&ehdr->e_shoff));
114 shstrtab_sec = shdr + r2(&ehdr->e_shstrndx); 118
119 num_sections = r2(&ehdr->e_shnum);
120 if (num_sections == SHN_UNDEF)
121 num_sections = _r(&shdr[0].sh_size);
122
123 secindex_strings = r2(&ehdr->e_shstrndx);
124 if (secindex_strings == SHN_XINDEX)
125 secindex_strings = r(&shdr[0].sh_link);
126
127 shstrtab_sec = shdr + secindex_strings;
115 secstrtab = (const char *)ehdr + _r(&shstrtab_sec->sh_offset); 128 secstrtab = (const char *)ehdr + _r(&shstrtab_sec->sh_offset);
116 for (i = 0; i < r2(&ehdr->e_shnum); i++) { 129 for (i = 0; i < num_sections; i++) {
117 idx = r(&shdr[i].sh_name); 130 idx = r(&shdr[i].sh_name);
118 if (strcmp(secstrtab + idx, "__ex_table") == 0) { 131 if (strcmp(secstrtab + idx, "__ex_table") == 0) {
119 extab_sec = shdr + i; 132 extab_sec = shdr + i;
@@ -129,6 +142,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
129 symtab_sec = shdr + i; 142 symtab_sec = shdr + i;
130 if (strcmp(secstrtab + idx, ".strtab") == 0) 143 if (strcmp(secstrtab + idx, ".strtab") == 0)
131 strtab_sec = shdr + i; 144 strtab_sec = shdr + i;
145 if (r(&shdr[i].sh_type) == SHT_SYMTAB_SHNDX)
146 symtab_shndx_start = (Elf32_Word *)(
147 (const char *)ehdr + _r(&shdr[i].sh_offset));
132 } 148 }
133 if (strtab_sec == NULL) { 149 if (strtab_sec == NULL) {
134 fprintf(stderr, "no .strtab in file: %s\n", fname); 150 fprintf(stderr, "no .strtab in file: %s\n", fname);
@@ -138,6 +154,8 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
138 fprintf(stderr, "no .symtab in file: %s\n", fname); 154 fprintf(stderr, "no .symtab in file: %s\n", fname);
139 fail_file(); 155 fail_file();
140 } 156 }
157 symtab = (const Elf_Sym *)((const char *)ehdr +
158 _r(&symtab_sec->sh_offset));
141 if (extab_sec == NULL) { 159 if (extab_sec == NULL) {
142 fprintf(stderr, "no __ex_table in file: %s\n", fname); 160 fprintf(stderr, "no __ex_table in file: %s\n", fname);
143 fail_file(); 161 fail_file();
@@ -176,7 +194,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
176 fname); 194 fname);
177 fail_file(); 195 fail_file();
178 } 196 }
179 sort_needed_sec = &shdr[r2(&sort_needed_sym->st_shndx)]; 197 sort_needed_sec = &shdr[get_secindex(r2(&sym->st_shndx),
198 sort_needed_sym - symtab,
199 symtab_shndx_start)];
180 sort_done_location = (void *)ehdr + 200 sort_done_location = (void *)ehdr +
181 _r(&sort_needed_sec->sh_offset) + 201 _r(&sort_needed_sec->sh_offset) +
182 _r(&sort_needed_sym->st_value) - 202 _r(&sort_needed_sym->st_value) -