diff options
author | Steve French <sfrench@us.ibm.com> | 2008-05-06 13:55:32 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2008-05-06 13:55:32 -0400 |
commit | a815752ac0ffdb910e92958d41d28f4fb28e5296 (patch) | |
tree | a3aa16a282354da0debe8e3a3a7ed8aac6e54001 /scripts | |
parent | 5ade9deaaa3e1f7291467d97b238648e43eae15e (diff) | |
parent | a15306365a16380f3bafee9e181ba01231d4acd7 (diff) |
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/Lindent | 18 | ||||
-rwxr-xr-x | scripts/checkpatch.pl | 150 | ||||
-rw-r--r-- | scripts/gen_initramfs_list.sh | 2 | ||||
-rw-r--r-- | scripts/kallsyms.c | 6 | ||||
-rw-r--r-- | scripts/kconfig/lex.zconf.c_shipped | 25 | ||||
-rw-r--r-- | scripts/kconfig/lkc.h | 6 | ||||
-rw-r--r-- | scripts/kconfig/lkc_proto.h | 2 | ||||
-rw-r--r-- | scripts/kconfig/lxdialog/check-lxdialog.sh | 6 | ||||
-rw-r--r-- | scripts/kconfig/lxdialog/inputbox.c | 2 | ||||
-rw-r--r-- | scripts/kconfig/mconf.c | 3 | ||||
-rw-r--r-- | scripts/kconfig/menu.c | 64 | ||||
-rw-r--r-- | scripts/kconfig/symbol.c | 118 | ||||
-rw-r--r-- | scripts/kconfig/zconf.tab.c_shipped | 301 | ||||
-rw-r--r-- | scripts/kconfig/zconf.y | 13 | ||||
-rw-r--r-- | scripts/mod/file2alias.c | 48 |
15 files changed, 456 insertions, 308 deletions
diff --git a/scripts/Lindent b/scripts/Lindent index 9468ec7971db..9c4b3e2b7098 100755 --- a/scripts/Lindent +++ b/scripts/Lindent | |||
@@ -1,2 +1,18 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1 "$@" | 2 | PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1" |
3 | RES=`indent --version` | ||
4 | V1=`echo $RES | cut -d' ' -f3 | cut -d'.' -f1` | ||
5 | V2=`echo $RES | cut -d' ' -f3 | cut -d'.' -f2` | ||
6 | V3=`echo $RES | cut -d' ' -f3 | cut -d'.' -f3` | ||
7 | if [ $V1 -gt 2 ]; then | ||
8 | PARAM="$PARAM -il0" | ||
9 | elif [ $V1 -eq 2 ]; then | ||
10 | if [ $V2 -gt 2 ]; then | ||
11 | PARAM="$PARAM -il0"; | ||
12 | elif [ $V2 -eq 2 ]; then | ||
13 | if [ $V3 -ge 10 ]; then | ||
14 | PARAM="$PARAM -il0" | ||
15 | fi | ||
16 | fi | ||
17 | fi | ||
18 | indent $PARAM "$@" | ||
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 64ec4b8a51b5..b6bbbcdc557e 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -9,7 +9,7 @@ use strict; | |||
9 | my $P = $0; | 9 | my $P = $0; |
10 | $P =~ s@.*/@@g; | 10 | $P =~ s@.*/@@g; |
11 | 11 | ||
12 | my $V = '0.16'; | 12 | my $V = '0.18'; |
13 | 13 | ||
14 | use Getopt::Long qw(:config no_auto_abbrev); | 14 | use Getopt::Long qw(:config no_auto_abbrev); |
15 | 15 | ||
@@ -131,6 +131,17 @@ our $NonptrType; | |||
131 | our $Type; | 131 | our $Type; |
132 | our $Declare; | 132 | our $Declare; |
133 | 133 | ||
134 | our $UTF8 = qr { | ||
135 | [\x09\x0A\x0D\x20-\x7E] # ASCII | ||
136 | | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | ||
137 | | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | ||
138 | | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | ||
139 | | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | ||
140 | | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | ||
141 | | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | ||
142 | | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 | ||
143 | }x; | ||
144 | |||
134 | our @typeList = ( | 145 | our @typeList = ( |
135 | qr{void}, | 146 | qr{void}, |
136 | qr{char}, | 147 | qr{char}, |
@@ -692,7 +703,7 @@ sub annotate_values { | |||
692 | while (length($cur)) { | 703 | while (length($cur)) { |
693 | @av_paren_type = ('E') if ($#av_paren_type < 0); | 704 | @av_paren_type = ('E') if ($#av_paren_type < 0); |
694 | print " <" . join('', @av_paren_type) . | 705 | print " <" . join('', @av_paren_type) . |
695 | "> <$type> " if ($dbg_values > 1); | 706 | "> <$type> <$av_pending>" if ($dbg_values > 1); |
696 | if ($cur =~ /^(\s+)/o) { | 707 | if ($cur =~ /^(\s+)/o) { |
697 | print "WS($1)\n" if ($dbg_values > 1); | 708 | print "WS($1)\n" if ($dbg_values > 1); |
698 | if ($1 =~ /\n/ && $av_preprocessor) { | 709 | if ($1 =~ /\n/ && $av_preprocessor) { |
@@ -705,9 +716,18 @@ sub annotate_values { | |||
705 | $type = 'T'; | 716 | $type = 'T'; |
706 | 717 | ||
707 | } elsif ($cur =~ /^(#\s*define\s*$Ident)(\(?)/o) { | 718 | } elsif ($cur =~ /^(#\s*define\s*$Ident)(\(?)/o) { |
708 | print "DEFINE($1)\n" if ($dbg_values > 1); | 719 | print "DEFINE($1,$2)\n" if ($dbg_values > 1); |
709 | $av_preprocessor = 1; | 720 | $av_preprocessor = 1; |
710 | $av_pending = 'N'; | 721 | push(@av_paren_type, $type); |
722 | if ($2 ne '') { | ||
723 | $av_pending = 'N'; | ||
724 | } | ||
725 | $type = 'E'; | ||
726 | |||
727 | } elsif ($cur =~ /^(#\s*undef\s*$Ident)/o) { | ||
728 | print "UNDEF($1)\n" if ($dbg_values > 1); | ||
729 | $av_preprocessor = 1; | ||
730 | push(@av_paren_type, $type); | ||
711 | 731 | ||
712 | } elsif ($cur =~ /^(#\s*(?:ifdef|ifndef|if))/o) { | 732 | } elsif ($cur =~ /^(#\s*(?:ifdef|ifndef|if))/o) { |
713 | print "PRE_START($1)\n" if ($dbg_values > 1); | 733 | print "PRE_START($1)\n" if ($dbg_values > 1); |
@@ -715,7 +735,7 @@ sub annotate_values { | |||
715 | 735 | ||
716 | push(@av_paren_type, $type); | 736 | push(@av_paren_type, $type); |
717 | push(@av_paren_type, $type); | 737 | push(@av_paren_type, $type); |
718 | $type = 'N'; | 738 | $type = 'E'; |
719 | 739 | ||
720 | } elsif ($cur =~ /^(#\s*(?:else|elif))/o) { | 740 | } elsif ($cur =~ /^(#\s*(?:else|elif))/o) { |
721 | print "PRE_RESTART($1)\n" if ($dbg_values > 1); | 741 | print "PRE_RESTART($1)\n" if ($dbg_values > 1); |
@@ -723,7 +743,7 @@ sub annotate_values { | |||
723 | 743 | ||
724 | push(@av_paren_type, $av_paren_type[$#av_paren_type]); | 744 | push(@av_paren_type, $av_paren_type[$#av_paren_type]); |
725 | 745 | ||
726 | $type = 'N'; | 746 | $type = 'E'; |
727 | 747 | ||
728 | } elsif ($cur =~ /^(#\s*(?:endif))/o) { | 748 | } elsif ($cur =~ /^(#\s*(?:endif))/o) { |
729 | print "PRE_END($1)\n" if ($dbg_values > 1); | 749 | print "PRE_END($1)\n" if ($dbg_values > 1); |
@@ -734,11 +754,16 @@ sub annotate_values { | |||
734 | # one does, and continue as if the #endif was not here. | 754 | # one does, and continue as if the #endif was not here. |
735 | pop(@av_paren_type); | 755 | pop(@av_paren_type); |
736 | push(@av_paren_type, $type); | 756 | push(@av_paren_type, $type); |
737 | $type = 'N'; | 757 | $type = 'E'; |
738 | 758 | ||
739 | } elsif ($cur =~ /^(\\\n)/o) { | 759 | } elsif ($cur =~ /^(\\\n)/o) { |
740 | print "PRECONT($1)\n" if ($dbg_values > 1); | 760 | print "PRECONT($1)\n" if ($dbg_values > 1); |
741 | 761 | ||
762 | } elsif ($cur =~ /^(__attribute__)\s*\(?/o) { | ||
763 | print "ATTR($1)\n" if ($dbg_values > 1); | ||
764 | $av_pending = $type; | ||
765 | $type = 'N'; | ||
766 | |||
742 | } elsif ($cur =~ /^(sizeof)\s*(\()?/o) { | 767 | } elsif ($cur =~ /^(sizeof)\s*(\()?/o) { |
743 | print "SIZEOF($1)\n" if ($dbg_values > 1); | 768 | print "SIZEOF($1)\n" if ($dbg_values > 1); |
744 | if (defined $2) { | 769 | if (defined $2) { |
@@ -930,7 +955,7 @@ sub process { | |||
930 | # edge is a close comment then we must be in a comment | 955 | # edge is a close comment then we must be in a comment |
931 | # at context start. | 956 | # at context start. |
932 | my $edge; | 957 | my $edge; |
933 | for (my $ln = $linenr; $ln < ($linenr + $realcnt); $ln++) { | 958 | for (my $ln = $linenr + 1; $ln < ($linenr + $realcnt); $ln++) { |
934 | next if ($line =~ /^-/); | 959 | next if ($line =~ /^-/); |
935 | ($edge) = ($rawlines[$ln - 1] =~ m@(/\*|\*/)@); | 960 | ($edge) = ($rawlines[$ln - 1] =~ m@(/\*|\*/)@); |
936 | last if (defined $edge); | 961 | last if (defined $edge); |
@@ -951,9 +976,9 @@ sub process { | |||
951 | ##print "COMMENT:$in_comment edge<$edge> $rawline\n"; | 976 | ##print "COMMENT:$in_comment edge<$edge> $rawline\n"; |
952 | sanitise_line_reset($in_comment); | 977 | sanitise_line_reset($in_comment); |
953 | 978 | ||
954 | } elsif ($realcnt) { | 979 | } elsif ($realcnt && $rawline =~ /^(?:\+| |$)/) { |
955 | # Standardise the strings and chars within the input to | 980 | # Standardise the strings and chars within the input to |
956 | # simplify matching. | 981 | # simplify matching -- only bother with positive lines. |
957 | $line = sanitise_line($rawline); | 982 | $line = sanitise_line($rawline); |
958 | } | 983 | } |
959 | push(@lines, $line); | 984 | push(@lines, $line); |
@@ -1066,17 +1091,14 @@ sub process { | |||
1066 | 1091 | ||
1067 | # UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php | 1092 | # UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php |
1068 | if (($realfile =~ /^$/ || $line =~ /^\+/) && | 1093 | if (($realfile =~ /^$/ || $line =~ /^\+/) && |
1069 | !($rawline =~ m/^( | 1094 | $rawline !~ m/^$UTF8*$/) { |
1070 | [\x09\x0A\x0D\x20-\x7E] # ASCII | 1095 | my ($utf8_prefix) = ($rawline =~ /^($UTF8*)/); |
1071 | | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | 1096 | |
1072 | | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | 1097 | my $blank = copy_spacing($rawline); |
1073 | | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | 1098 | my $ptr = substr($blank, 0, length($utf8_prefix)) . "^"; |
1074 | | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | 1099 | my $hereptr = "$hereline$ptr\n"; |
1075 | | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | 1100 | |
1076 | | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | 1101 | ERROR("Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr); |
1077 | | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 | ||
1078 | )*$/x )) { | ||
1079 | ERROR("Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $herecurr); | ||
1080 | } | 1102 | } |
1081 | 1103 | ||
1082 | #ignore lines being removed | 1104 | #ignore lines being removed |
@@ -1112,7 +1134,7 @@ sub process { | |||
1112 | if ($rawline =~ /^\+\s* \t\s*\S/ || | 1134 | if ($rawline =~ /^\+\s* \t\s*\S/ || |
1113 | $rawline =~ /^\+\s* \s*/) { | 1135 | $rawline =~ /^\+\s* \s*/) { |
1114 | my $herevet = "$here\n" . cat_vet($rawline) . "\n"; | 1136 | my $herevet = "$here\n" . cat_vet($rawline) . "\n"; |
1115 | ERROR("use tabs not spaces\n" . $herevet); | 1137 | ERROR("code indent should use tabs where possible\n" . $herevet); |
1116 | } | 1138 | } |
1117 | 1139 | ||
1118 | # check for RCS/CVS revision markers | 1140 | # check for RCS/CVS revision markers |
@@ -1121,35 +1143,40 @@ sub process { | |||
1121 | } | 1143 | } |
1122 | 1144 | ||
1123 | # Check for potential 'bare' types | 1145 | # Check for potential 'bare' types |
1124 | if ($realcnt) { | 1146 | my ($stat, $cond); |
1125 | my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0); | 1147 | if ($realcnt && $line =~ /.\s*\S/) { |
1126 | $s =~ s/\n./ /g; | 1148 | ($stat, $cond) = ctx_statement_block($linenr, |
1127 | $s =~ s/{.*$//; | 1149 | $realcnt, 0); |
1150 | $stat =~ s/\n./\n /g; | ||
1151 | $cond =~ s/\n./\n /g; | ||
1152 | |||
1153 | my $s = $stat; | ||
1154 | $s =~ s/{.*$//s; | ||
1128 | 1155 | ||
1129 | # Ignore goto labels. | 1156 | # Ignore goto labels. |
1130 | if ($s =~ /$Ident:\*$/) { | 1157 | if ($s =~ /$Ident:\*$/s) { |
1131 | 1158 | ||
1132 | # Ignore functions being called | 1159 | # Ignore functions being called |
1133 | } elsif ($s =~ /^.\s*$Ident\s*\(/) { | 1160 | } elsif ($s =~ /^.\s*$Ident\s*\(/s) { |
1134 | 1161 | ||
1135 | # definitions in global scope can only start with types | 1162 | # definitions in global scope can only start with types |
1136 | } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/) { | 1163 | } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/s) { |
1137 | possible($1, $s); | 1164 | possible($1, $s); |
1138 | 1165 | ||
1139 | # declarations always start with types | 1166 | # declarations always start with types |
1140 | } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:const\s+)?($Ident)\b(:?\s+$Sparse)?\s*\**\s*$Ident\s*(?:;|=|,)/) { | 1167 | } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:const\s+)?($Ident)\b(:?\s+$Sparse)?\s*\**\s*$Ident\s*(?:;|=|,)/s) { |
1141 | possible($1, $s); | 1168 | possible($1, $s); |
1142 | } | 1169 | } |
1143 | 1170 | ||
1144 | # any (foo ... *) is a pointer cast, and foo is a type | 1171 | # any (foo ... *) is a pointer cast, and foo is a type |
1145 | while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/g) { | 1172 | while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/sg) { |
1146 | possible($1, $s); | 1173 | possible($1, $s); |
1147 | } | 1174 | } |
1148 | 1175 | ||
1149 | # Check for any sort of function declaration. | 1176 | # Check for any sort of function declaration. |
1150 | # int foo(something bar, other baz); | 1177 | # int foo(something bar, other baz); |
1151 | # void (*store_gdt)(x86_descr_ptr *); | 1178 | # void (*store_gdt)(x86_descr_ptr *); |
1152 | if ($prev_values eq 'E' && $s =~ /^(.(?:typedef\s*)?(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/) { | 1179 | if ($prev_values eq 'E' && $s =~ /^(.(?:typedef\s*)?(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/s) { |
1153 | my ($name_len) = length($1); | 1180 | my ($name_len) = length($1); |
1154 | 1181 | ||
1155 | my $ctx = $s; | 1182 | my $ctx = $s; |
@@ -1282,18 +1309,19 @@ sub process { | |||
1282 | ($prevline !~ /^ }/) && | 1309 | ($prevline !~ /^ }/) && |
1283 | ($prevline !~ /^.DECLARE_$Ident\(\Q$name\E\)/) && | 1310 | ($prevline !~ /^.DECLARE_$Ident\(\Q$name\E\)/) && |
1284 | ($prevline !~ /^.LIST_HEAD\(\Q$name\E\)/) && | 1311 | ($prevline !~ /^.LIST_HEAD\(\Q$name\E\)/) && |
1312 | ($prevline !~ /^.$Type\s*\(\s*\*\s*\Q$name\E\s*\)\s*\(/) && | ||
1285 | ($prevline !~ /\b\Q$name\E(?:\s+$Attribute)?\s*(?:;|=|\[)/)) { | 1313 | ($prevline !~ /\b\Q$name\E(?:\s+$Attribute)?\s*(?:;|=|\[)/)) { |
1286 | WARN("EXPORT_SYMBOL(foo); should immediately follow its function/variable\n" . $herecurr); | 1314 | WARN("EXPORT_SYMBOL(foo); should immediately follow its function/variable\n" . $herecurr); |
1287 | } | 1315 | } |
1288 | } | 1316 | } |
1289 | 1317 | ||
1290 | # check for external initialisers. | 1318 | # check for external initialisers. |
1291 | if ($line =~ /^.$Type\s*$Ident\s*=\s*(0|NULL);/) { | 1319 | if ($line =~ /^.$Type\s*$Ident\s*=\s*(0|NULL|false)\s*;/) { |
1292 | ERROR("do not initialise externals to 0 or NULL\n" . | 1320 | ERROR("do not initialise externals to 0 or NULL\n" . |
1293 | $herecurr); | 1321 | $herecurr); |
1294 | } | 1322 | } |
1295 | # check for static initialisers. | 1323 | # check for static initialisers. |
1296 | if ($line =~ /\s*static\s.*=\s*(0|NULL);/) { | 1324 | if ($line =~ /\s*static\s.*=\s*(0|NULL|false)\s*;/) { |
1297 | ERROR("do not initialise statics to 0 or NULL\n" . | 1325 | ERROR("do not initialise statics to 0 or NULL\n" . |
1298 | $herecurr); | 1326 | $herecurr); |
1299 | } | 1327 | } |
@@ -1512,7 +1540,10 @@ sub process { | |||
1512 | if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { | 1540 | if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { |
1513 | ERROR("space required before that '$op' $at\n" . $hereptr); | 1541 | ERROR("space required before that '$op' $at\n" . $hereptr); |
1514 | } | 1542 | } |
1515 | if ($ctx =~ /.xW/) { | 1543 | if ($op eq '*' && $cc =~/\s*const\b/) { |
1544 | # A unary '*' may be const | ||
1545 | |||
1546 | } elsif ($ctx =~ /.xW/) { | ||
1516 | ERROR("space prohibited after that '$op' $at\n" . $hereptr); | 1547 | ERROR("space prohibited after that '$op' $at\n" . $hereptr); |
1517 | } | 1548 | } |
1518 | 1549 | ||
@@ -1617,7 +1648,7 @@ sub process { | |||
1617 | 1648 | ||
1618 | # Check for illegal assignment in if conditional. | 1649 | # Check for illegal assignment in if conditional. |
1619 | if ($line =~ /\bif\s*\(/) { | 1650 | if ($line =~ /\bif\s*\(/) { |
1620 | my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0); | 1651 | my ($s, $c) = ($stat, $cond); |
1621 | 1652 | ||
1622 | if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/) { | 1653 | if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/) { |
1623 | ERROR("do not use assignment in if condition\n" . $herecurr); | 1654 | ERROR("do not use assignment in if condition\n" . $herecurr); |
@@ -1695,7 +1726,7 @@ sub process { | |||
1695 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) | 1726 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) |
1696 | if ($tree && $rawline =~ m{^.\#\s*include\s*\<asm\/(.*)\.h\>}) { | 1727 | if ($tree && $rawline =~ m{^.\#\s*include\s*\<asm\/(.*)\.h\>}) { |
1697 | my $checkfile = "$root/include/linux/$1.h"; | 1728 | my $checkfile = "$root/include/linux/$1.h"; |
1698 | if (-f $checkfile && $1 ne 'irq.h') { | 1729 | if (-f $checkfile && $1 ne 'irq') { |
1699 | WARN("Use #include <linux/$1.h> instead of <asm/$1.h>\n" . | 1730 | WARN("Use #include <linux/$1.h> instead of <asm/$1.h>\n" . |
1700 | $herecurr); | 1731 | $herecurr); |
1701 | } | 1732 | } |
@@ -1910,7 +1941,8 @@ sub process { | |||
1910 | } | 1941 | } |
1911 | 1942 | ||
1912 | # check for spinlock_t definitions without a comment. | 1943 | # check for spinlock_t definitions without a comment. |
1913 | if ($line =~ /^.\s*(struct\s+mutex|spinlock_t)\s+\S+;/) { | 1944 | if ($line =~ /^.\s*(struct\s+mutex|spinlock_t)\s+\S+;/ || |
1945 | $line =~ /^.\s*(DEFINE_MUTEX)\s*\(/) { | ||
1914 | my $which = $1; | 1946 | my $which = $1; |
1915 | if (!ctx_has_comment($first_line, $linenr)) { | 1947 | if (!ctx_has_comment($first_line, $linenr)) { |
1916 | CHK("$1 definition without comment\n" . $herecurr); | 1948 | CHK("$1 definition without comment\n" . $herecurr); |
@@ -1940,7 +1972,26 @@ sub process { | |||
1940 | } | 1972 | } |
1941 | 1973 | ||
1942 | # check for new externs in .c files. | 1974 | # check for new externs in .c files. |
1943 | if ($line =~ /^.\s*extern\s/ && ($realfile =~ /\.c$/)) { | 1975 | if ($realfile =~ /\.c$/ && defined $stat && |
1976 | $stat =~ /^.\s*(?:extern\s+)?$Type\s+$Ident(\s*)\(/s) | ||
1977 | { | ||
1978 | my $paren_space = $1; | ||
1979 | |||
1980 | my $s = $stat; | ||
1981 | if (defined $cond) { | ||
1982 | substr($s, 0, length($cond), ''); | ||
1983 | } | ||
1984 | if ($s =~ /^\s*;/) { | ||
1985 | WARN("externs should be avoided in .c files\n" . $herecurr); | ||
1986 | } | ||
1987 | |||
1988 | if ($paren_space =~ /\n/) { | ||
1989 | WARN("arguments for function declarations should follow identifier\n" . $herecurr); | ||
1990 | } | ||
1991 | |||
1992 | } elsif ($realfile =~ /\.c$/ && defined $stat && | ||
1993 | $stat =~ /^.\s*extern\s+/) | ||
1994 | { | ||
1944 | WARN("externs should be avoided in .c files\n" . $herecurr); | 1995 | WARN("externs should be avoided in .c files\n" . $herecurr); |
1945 | } | 1996 | } |
1946 | 1997 | ||
@@ -1964,11 +2015,11 @@ sub process { | |||
1964 | } | 2015 | } |
1965 | 2016 | ||
1966 | # check for semaphores used as mutexes | 2017 | # check for semaphores used as mutexes |
1967 | if ($line =~ /\b(DECLARE_MUTEX|init_MUTEX)\s*\(/) { | 2018 | if ($line =~ /^.\s*(DECLARE_MUTEX|init_MUTEX)\s*\(/) { |
1968 | WARN("mutexes are preferred for single holder semaphores\n" . $herecurr); | 2019 | WARN("mutexes are preferred for single holder semaphores\n" . $herecurr); |
1969 | } | 2020 | } |
1970 | # check for semaphores used as mutexes | 2021 | # check for semaphores used as mutexes |
1971 | if ($line =~ /\binit_MUTEX_LOCKED\s*\(/) { | 2022 | if ($line =~ /^.\s*init_MUTEX_LOCKED\s*\(/) { |
1972 | WARN("consider using a completion\n" . $herecurr); | 2023 | WARN("consider using a completion\n" . $herecurr); |
1973 | } | 2024 | } |
1974 | # recommend strict_strto* over simple_strto* | 2025 | # recommend strict_strto* over simple_strto* |
@@ -1979,11 +2030,24 @@ sub process { | |||
1979 | # use of NR_CPUS is usually wrong | 2030 | # use of NR_CPUS is usually wrong |
1980 | # ignore definitions of NR_CPUS and usage to define arrays as likely right | 2031 | # ignore definitions of NR_CPUS and usage to define arrays as likely right |
1981 | if ($line =~ /\bNR_CPUS\b/ && | 2032 | if ($line =~ /\bNR_CPUS\b/ && |
1982 | $line !~ /^.#\s*define\s+NR_CPUS\s+/ && | 2033 | $line !~ /^.#\s*if\b.*\bNR_CPUS\b/ && |
1983 | $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/) | 2034 | $line !~ /^.#\s*define\b.*\bNR_CPUS\b/ && |
2035 | $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/ && | ||
2036 | $line !~ /\[[^\]]*\.\.\.[^\]]*NR_CPUS[^\]]*\]/ && | ||
2037 | $line !~ /\[[^\]]*NR_CPUS[^\]]*\.\.\.[^\]]*\]/) | ||
1984 | { | 2038 | { |
1985 | WARN("usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr); | 2039 | WARN("usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr); |
1986 | } | 2040 | } |
2041 | |||
2042 | # check for %L{u,d,i} in strings | ||
2043 | my $string; | ||
2044 | while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) { | ||
2045 | $string = substr($rawline, $-[1], $+[1] - $-[1]); | ||
2046 | if ($string =~ /(?<!%)%L[udi]/) { | ||
2047 | WARN("\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr); | ||
2048 | last; | ||
2049 | } | ||
2050 | } | ||
1987 | } | 2051 | } |
1988 | 2052 | ||
1989 | # If we have no input at all, then there is nothing to report on | 2053 | # If we have no input at all, then there is nothing to report on |
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh index 684fb9cdc055..5f3415f28736 100644 --- a/scripts/gen_initramfs_list.sh +++ b/scripts/gen_initramfs_list.sh | |||
@@ -135,7 +135,7 @@ parse() { | |||
135 | str="${ftype} ${name} ${str} ${dev} ${maj} ${min}" | 135 | str="${ftype} ${name} ${str} ${dev} ${maj} ${min}" |
136 | ;; | 136 | ;; |
137 | "slink") | 137 | "slink") |
138 | local target=`field 11 $(LC_ALL=C ls -l "${location}")` | 138 | local target=`readlink "${location}"` |
139 | str="${ftype} ${name} ${target} ${str}" | 139 | str="${ftype} ${name} ${target} ${str}" |
140 | ;; | 140 | ;; |
141 | *) | 141 | *) |
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index c912137f80e2..5d20a2e24cd1 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c | |||
@@ -7,12 +7,6 @@ | |||
7 | * | 7 | * |
8 | * Usage: nm -n vmlinux | scripts/kallsyms [--all-symbols] > symbols.S | 8 | * Usage: nm -n vmlinux | scripts/kallsyms [--all-symbols] > symbols.S |
9 | * | 9 | * |
10 | * ChangeLog: | ||
11 | * | ||
12 | * (25/Aug/2004) Paulo Marques <pmarques@grupopie.com> | ||
13 | * Changed the compression method from stem compression to "table lookup" | ||
14 | * compression | ||
15 | * | ||
16 | * Table compression uses all the unused char codes on the symbols and | 10 | * Table compression uses all the unused char codes on the symbols and |
17 | * maps these to the most used substrings (tokens). For instance, it might | 11 | * maps these to the most used substrings (tokens). For instance, it might |
18 | * map char code 0xF7 to represent "write_" and then in every symbol where | 12 | * map char code 0xF7 to represent "write_" and then in every symbol where |
diff --git a/scripts/kconfig/lex.zconf.c_shipped b/scripts/kconfig/lex.zconf.c_shipped index bed0f4e2d2f7..6a61cee4a32c 100644 --- a/scripts/kconfig/lex.zconf.c_shipped +++ b/scripts/kconfig/lex.zconf.c_shipped | |||
@@ -5,25 +5,6 @@ | |||
5 | 5 | ||
6 | /* A lexical scanner generated by flex */ | 6 | /* A lexical scanner generated by flex */ |
7 | 7 | ||
8 | #define yy_create_buffer zconf_create_buffer | ||
9 | #define yy_delete_buffer zconf_delete_buffer | ||
10 | #define yy_flex_debug zconf_flex_debug | ||
11 | #define yy_init_buffer zconf_init_buffer | ||
12 | #define yy_flush_buffer zconf_flush_buffer | ||
13 | #define yy_load_buffer_state zconf_load_buffer_state | ||
14 | #define yy_switch_to_buffer zconf_switch_to_buffer | ||
15 | #define yyin zconfin | ||
16 | #define yyleng zconfleng | ||
17 | #define yylex zconflex | ||
18 | #define yylineno zconflineno | ||
19 | #define yyout zconfout | ||
20 | #define yyrestart zconfrestart | ||
21 | #define yytext zconftext | ||
22 | #define yywrap zconfwrap | ||
23 | #define yyalloc zconfalloc | ||
24 | #define yyrealloc zconfrealloc | ||
25 | #define yyfree zconffree | ||
26 | |||
27 | #define FLEX_SCANNER | 8 | #define FLEX_SCANNER |
28 | #define YY_FLEX_MAJOR_VERSION 2 | 9 | #define YY_FLEX_MAJOR_VERSION 2 |
29 | #define YY_FLEX_MINOR_VERSION 5 | 10 | #define YY_FLEX_MINOR_VERSION 5 |
@@ -354,7 +335,7 @@ void zconffree (void * ); | |||
354 | 335 | ||
355 | /* Begin user sect3 */ | 336 | /* Begin user sect3 */ |
356 | 337 | ||
357 | #define zconfwrap(n) 1 | 338 | #define zconfwrap() 1 |
358 | #define YY_SKIP_YYWRAP | 339 | #define YY_SKIP_YYWRAP |
359 | 340 | ||
360 | typedef unsigned char YY_CHAR; | 341 | typedef unsigned char YY_CHAR; |
@@ -1535,7 +1516,7 @@ static int yy_get_next_buffer (void) | |||
1535 | 1516 | ||
1536 | /* Read in more data. */ | 1517 | /* Read in more data. */ |
1537 | YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), | 1518 | YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), |
1538 | (yy_n_chars), num_to_read ); | 1519 | (yy_n_chars), (size_t) num_to_read ); |
1539 | 1520 | ||
1540 | YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); | 1521 | YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); |
1541 | } | 1522 | } |
@@ -2007,7 +1988,7 @@ YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size ) | |||
2007 | 1988 | ||
2008 | /** Setup the input buffer state to scan a string. The next call to zconflex() will | 1989 | /** Setup the input buffer state to scan a string. The next call to zconflex() will |
2009 | * scan from a @e copy of @a str. | 1990 | * scan from a @e copy of @a str. |
2010 | * @param str a NUL-terminated string to scan | 1991 | * @param yystr a NUL-terminated string to scan |
2011 | * | 1992 | * |
2012 | * @return the newly allocated buffer state object. | 1993 | * @return the newly allocated buffer state object. |
2013 | * @note If you want to scan bytes that may contain NUL values, then use | 1994 | * @note If you want to scan bytes that may contain NUL values, then use |
diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h index 4bc68f20a73c..96521cb087ec 100644 --- a/scripts/kconfig/lkc.h +++ b/scripts/kconfig/lkc.h | |||
@@ -11,9 +11,9 @@ | |||
11 | #ifndef KBUILD_NO_NLS | 11 | #ifndef KBUILD_NO_NLS |
12 | # include <libintl.h> | 12 | # include <libintl.h> |
13 | #else | 13 | #else |
14 | # define gettext(Msgid) ((const char *) (Msgid)) | 14 | static inline const char *gettext(const char *txt) { return txt; } |
15 | # define textdomain(Domainname) ((const char *) (Domainname)) | 15 | static inline void textdomain(const char *domainname) {} |
16 | # define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) | 16 | static inline void bindtextdomain(const char *name, const char *dir) {} |
17 | #endif | 17 | #endif |
18 | 18 | ||
19 | #ifdef __cplusplus | 19 | #ifdef __cplusplus |
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h index 4d09f6ddefe3..8e69461313d1 100644 --- a/scripts/kconfig/lkc_proto.h +++ b/scripts/kconfig/lkc_proto.h | |||
@@ -21,7 +21,7 @@ P(menu_get_help,const char *,(struct menu *menu)); | |||
21 | /* symbol.c */ | 21 | /* symbol.c */ |
22 | P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); | 22 | P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); |
23 | 23 | ||
24 | P(sym_lookup,struct symbol *,(const char *name, int isconst)); | 24 | P(sym_lookup,struct symbol *,(const char *name, int flags)); |
25 | P(sym_find,struct symbol *,(const char *name)); | 25 | P(sym_find,struct symbol *,(const char *name)); |
26 | P(sym_re_search,struct symbol **,(const char *pattern)); | 26 | P(sym_re_search,struct symbol **,(const char *pattern)); |
27 | P(sym_type_name,const char *,(enum symbol_type type)); | 27 | P(sym_type_name,const char *,(enum symbol_type type)); |
diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh index 62e1e02126e6..5552154cbedb 100644 --- a/scripts/kconfig/lxdialog/check-lxdialog.sh +++ b/scripts/kconfig/lxdialog/check-lxdialog.sh | |||
@@ -36,8 +36,10 @@ trap "rm -f $tmp" 0 1 2 3 15 | |||
36 | 36 | ||
37 | # Check if we can link to ncurses | 37 | # Check if we can link to ncurses |
38 | check() { | 38 | check() { |
39 | echo -e " #include CURSES_LOC \n main() {}" | | 39 | $cc -xc - -o $tmp 2>/dev/null <<'EOF' |
40 | $cc -xc - -o $tmp 2> /dev/null | 40 | #include CURSES_LOC |
41 | main() {} | ||
42 | EOF | ||
41 | if [ $? != 0 ]; then | 43 | if [ $? != 0 ]; then |
42 | echo " *** Unable to find the ncurses libraries or the" 1>&2 | 44 | echo " *** Unable to find the ncurses libraries or the" 1>&2 |
43 | echo " *** required header files." 1>&2 | 45 | echo " *** required header files." 1>&2 |
diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c index 4946bd02b46d..616c60138183 100644 --- a/scripts/kconfig/lxdialog/inputbox.c +++ b/scripts/kconfig/lxdialog/inputbox.c | |||
@@ -89,7 +89,7 @@ do_resize: | |||
89 | box_y = y + 2; | 89 | box_y = y + 2; |
90 | box_x = (width - box_width) / 2; | 90 | box_x = (width - box_width) / 2; |
91 | draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, | 91 | draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, |
92 | dlg.border.atr, dlg.dialog.atr); | 92 | dlg.dialog.atr, dlg.border.atr); |
93 | 93 | ||
94 | print_buttons(dialog, height, width, 0); | 94 | print_buttons(dialog, height, width, 0); |
95 | 95 | ||
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 734cf4f3131e..6841e95c0989 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c | |||
@@ -773,7 +773,7 @@ static void conf_string(struct menu *menu) | |||
773 | 773 | ||
774 | while (1) { | 774 | while (1) { |
775 | int res; | 775 | int res; |
776 | char *heading; | 776 | const char *heading; |
777 | 777 | ||
778 | switch (sym_get_type(menu->sym)) { | 778 | switch (sym_get_type(menu->sym)) { |
779 | case S_INT: | 779 | case S_INT: |
@@ -925,3 +925,4 @@ int main(int ac, char **av) | |||
925 | 925 | ||
926 | return 0; | 926 | return 0; |
927 | } | 927 | } |
928 | |||
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index 606ceb9e746e..07ff8d105c9d 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c | |||
@@ -235,18 +235,22 @@ void menu_finalize(struct menu *parent) | |||
235 | sym = parent->sym; | 235 | sym = parent->sym; |
236 | if (parent->list) { | 236 | if (parent->list) { |
237 | if (sym && sym_is_choice(sym)) { | 237 | if (sym && sym_is_choice(sym)) { |
238 | /* find the first choice value and find out choice type */ | 238 | if (sym->type == S_UNKNOWN) { |
239 | for (menu = parent->list; menu; menu = menu->next) { | 239 | /* find the first choice value to find out choice type */ |
240 | if (menu->sym) { | 240 | current_entry = parent; |
241 | current_entry = parent; | 241 | for (menu = parent->list; menu; menu = menu->next) { |
242 | if (sym->type == S_UNKNOWN) | 242 | if (menu->sym && menu->sym->type != S_UNKNOWN) { |
243 | menu_set_type(menu->sym->type); | 243 | menu_set_type(menu->sym->type); |
244 | current_entry = menu; | 244 | break; |
245 | if (menu->sym->type == S_UNKNOWN) | 245 | } |
246 | menu_set_type(sym->type); | ||
247 | break; | ||
248 | } | 246 | } |
249 | } | 247 | } |
248 | /* set the type of the remaining choice values */ | ||
249 | for (menu = parent->list; menu; menu = menu->next) { | ||
250 | current_entry = menu; | ||
251 | if (menu->sym && menu->sym->type == S_UNKNOWN) | ||
252 | menu_set_type(sym->type); | ||
253 | } | ||
250 | parentdep = expr_alloc_symbol(sym); | 254 | parentdep = expr_alloc_symbol(sym); |
251 | } else if (parent->prompt) | 255 | } else if (parent->prompt) |
252 | parentdep = parent->prompt->visible.expr; | 256 | parentdep = parent->prompt->visible.expr; |
@@ -313,50 +317,36 @@ void menu_finalize(struct menu *parent) | |||
313 | } | 317 | } |
314 | } | 318 | } |
315 | for (menu = parent->list; menu; menu = menu->next) { | 319 | for (menu = parent->list; menu; menu = menu->next) { |
316 | if (sym && sym_is_choice(sym) && menu->sym) { | 320 | if (sym && sym_is_choice(sym) && |
321 | menu->sym && !sym_is_choice_value(menu->sym)) { | ||
322 | current_entry = menu; | ||
317 | menu->sym->flags |= SYMBOL_CHOICEVAL; | 323 | menu->sym->flags |= SYMBOL_CHOICEVAL; |
318 | if (!menu->prompt) | 324 | if (!menu->prompt) |
319 | menu_warn(menu, "choice value must have a prompt"); | 325 | menu_warn(menu, "choice value must have a prompt"); |
320 | for (prop = menu->sym->prop; prop; prop = prop->next) { | 326 | for (prop = menu->sym->prop; prop; prop = prop->next) { |
321 | if (prop->type == P_PROMPT && prop->menu != menu) { | ||
322 | prop_warn(prop, "choice values " | ||
323 | "currently only support a " | ||
324 | "single prompt"); | ||
325 | } | ||
326 | if (prop->type == P_DEFAULT) | 327 | if (prop->type == P_DEFAULT) |
327 | prop_warn(prop, "defaults for choice " | 328 | prop_warn(prop, "defaults for choice " |
328 | "values not supported"); | 329 | "values not supported"); |
330 | if (prop->menu == menu) | ||
331 | continue; | ||
332 | if (prop->type == P_PROMPT && | ||
333 | prop->menu->parent->sym != sym) | ||
334 | prop_warn(prop, "choice value used outside its choice group"); | ||
329 | } | 335 | } |
330 | current_entry = menu; | ||
331 | if (menu->sym->type == S_UNKNOWN) | ||
332 | menu_set_type(sym->type); | ||
333 | /* Non-tristate choice values of tristate choices must | 336 | /* Non-tristate choice values of tristate choices must |
334 | * depend on the choice being set to Y. The choice | 337 | * depend on the choice being set to Y. The choice |
335 | * values' dependencies were propagated to their | 338 | * values' dependencies were propagated to their |
336 | * properties above, so the change here must be re- | 339 | * properties above, so the change here must be re- |
337 | * propagated. */ | 340 | * propagated. |
341 | */ | ||
338 | if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) { | 342 | if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) { |
339 | basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes); | 343 | basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes); |
340 | basedep = expr_alloc_and(basedep, menu->dep); | 344 | menu->dep = expr_alloc_and(basedep, menu->dep); |
341 | basedep = expr_eliminate_dups(basedep); | ||
342 | menu->dep = basedep; | ||
343 | for (prop = menu->sym->prop; prop; prop = prop->next) { | 345 | for (prop = menu->sym->prop; prop; prop = prop->next) { |
344 | if (prop->menu != menu) | 346 | if (prop->menu != menu) |
345 | continue; | 347 | continue; |
346 | dep = expr_alloc_and(expr_copy(basedep), | 348 | prop->visible.expr = expr_alloc_and(expr_copy(basedep), |
347 | prop->visible.expr); | 349 | prop->visible.expr); |
348 | dep = expr_eliminate_dups(dep); | ||
349 | dep = expr_trans_bool(dep); | ||
350 | prop->visible.expr = dep; | ||
351 | if (prop->type == P_SELECT) { | ||
352 | struct symbol *es = prop_get_symbol(prop); | ||
353 | dep2 = expr_alloc_symbol(menu->sym); | ||
354 | dep = expr_alloc_and(dep2, | ||
355 | expr_copy(dep)); | ||
356 | dep = expr_alloc_or(es->rev_dep.expr, dep); | ||
357 | dep = expr_eliminate_dups(dep); | ||
358 | es->rev_dep.expr = dep; | ||
359 | } | ||
360 | } | 350 | } |
361 | } | 351 | } |
362 | menu_add_symbol(P_CHOICE, sym, NULL); | 352 | menu_add_symbol(P_CHOICE, sym, NULL); |
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 4a03191ad176..18f3e5c33634 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c | |||
@@ -40,7 +40,7 @@ void sym_add_default(struct symbol *sym, const char *def) | |||
40 | { | 40 | { |
41 | struct property *prop = prop_alloc(P_DEFAULT, sym); | 41 | struct property *prop = prop_alloc(P_DEFAULT, sym); |
42 | 42 | ||
43 | prop->expr = expr_alloc_symbol(sym_lookup(def, 1)); | 43 | prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST)); |
44 | } | 44 | } |
45 | 45 | ||
46 | void sym_init(void) | 46 | void sym_init(void) |
@@ -350,9 +350,6 @@ void sym_calc_value(struct symbol *sym) | |||
350 | ; | 350 | ; |
351 | } | 351 | } |
352 | 352 | ||
353 | if (sym->flags & SYMBOL_AUTO) | ||
354 | sym->flags &= ~SYMBOL_WRITE; | ||
355 | |||
356 | sym->curr = newval; | 353 | sym->curr = newval; |
357 | if (sym_is_choice(sym) && newval.tri == yes) | 354 | if (sym_is_choice(sym) && newval.tri == yes) |
358 | sym->curr.val = sym_calc_choice(sym); | 355 | sym->curr.val = sym_calc_choice(sym); |
@@ -377,6 +374,9 @@ void sym_calc_value(struct symbol *sym) | |||
377 | sym_set_changed(choice_sym); | 374 | sym_set_changed(choice_sym); |
378 | } | 375 | } |
379 | } | 376 | } |
377 | |||
378 | if (sym->flags & SYMBOL_AUTO) | ||
379 | sym->flags &= ~SYMBOL_WRITE; | ||
380 | } | 380 | } |
381 | 381 | ||
382 | void sym_clear_all_valid(void) | 382 | void sym_clear_all_valid(void) |
@@ -651,7 +651,7 @@ bool sym_is_changable(struct symbol *sym) | |||
651 | return sym->visible > sym->rev_dep.tri; | 651 | return sym->visible > sym->rev_dep.tri; |
652 | } | 652 | } |
653 | 653 | ||
654 | struct symbol *sym_lookup(const char *name, int isconst) | 654 | struct symbol *sym_lookup(const char *name, int flags) |
655 | { | 655 | { |
656 | struct symbol *symbol; | 656 | struct symbol *symbol; |
657 | const char *ptr; | 657 | const char *ptr; |
@@ -671,11 +671,10 @@ struct symbol *sym_lookup(const char *name, int isconst) | |||
671 | hash &= 0xff; | 671 | hash &= 0xff; |
672 | 672 | ||
673 | for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { | 673 | for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { |
674 | if (!strcmp(symbol->name, name)) { | 674 | if (!strcmp(symbol->name, name) && |
675 | if ((isconst && symbol->flags & SYMBOL_CONST) || | 675 | (flags ? symbol->flags & flags |
676 | (!isconst && !(symbol->flags & SYMBOL_CONST))) | 676 | : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE)))) |
677 | return symbol; | 677 | return symbol; |
678 | } | ||
679 | } | 678 | } |
680 | new_name = strdup(name); | 679 | new_name = strdup(name); |
681 | } else { | 680 | } else { |
@@ -687,8 +686,7 @@ struct symbol *sym_lookup(const char *name, int isconst) | |||
687 | memset(symbol, 0, sizeof(*symbol)); | 686 | memset(symbol, 0, sizeof(*symbol)); |
688 | symbol->name = new_name; | 687 | symbol->name = new_name; |
689 | symbol->type = S_UNKNOWN; | 688 | symbol->type = S_UNKNOWN; |
690 | if (isconst) | 689 | symbol->flags |= flags; |
691 | symbol->flags |= SYMBOL_CONST; | ||
692 | 690 | ||
693 | symbol->next = symbol_hash[hash]; | 691 | symbol->next = symbol_hash[hash]; |
694 | symbol_hash[hash] = symbol; | 692 | symbol_hash[hash] = symbol; |
@@ -762,8 +760,6 @@ struct symbol **sym_re_search(const char *pattern) | |||
762 | } | 760 | } |
763 | 761 | ||
764 | 762 | ||
765 | struct symbol *sym_check_deps(struct symbol *sym); | ||
766 | |||
767 | static struct symbol *sym_check_expr_deps(struct expr *e) | 763 | static struct symbol *sym_check_expr_deps(struct expr *e) |
768 | { | 764 | { |
769 | struct symbol *sym; | 765 | struct symbol *sym; |
@@ -795,40 +791,100 @@ static struct symbol *sym_check_expr_deps(struct expr *e) | |||
795 | } | 791 | } |
796 | 792 | ||
797 | /* return NULL when dependencies are OK */ | 793 | /* return NULL when dependencies are OK */ |
798 | struct symbol *sym_check_deps(struct symbol *sym) | 794 | static struct symbol *sym_check_sym_deps(struct symbol *sym) |
799 | { | 795 | { |
800 | struct symbol *sym2; | 796 | struct symbol *sym2; |
801 | struct property *prop; | 797 | struct property *prop; |
802 | 798 | ||
803 | if (sym->flags & SYMBOL_CHECK) { | ||
804 | fprintf(stderr, "%s:%d:error: found recursive dependency: %s", | ||
805 | sym->prop->file->name, sym->prop->lineno, sym->name); | ||
806 | return sym; | ||
807 | } | ||
808 | if (sym->flags & SYMBOL_CHECKED) | ||
809 | return NULL; | ||
810 | |||
811 | sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); | ||
812 | sym2 = sym_check_expr_deps(sym->rev_dep.expr); | 799 | sym2 = sym_check_expr_deps(sym->rev_dep.expr); |
813 | if (sym2) | 800 | if (sym2) |
814 | goto out; | 801 | return sym2; |
815 | 802 | ||
816 | for (prop = sym->prop; prop; prop = prop->next) { | 803 | for (prop = sym->prop; prop; prop = prop->next) { |
817 | if (prop->type == P_CHOICE || prop->type == P_SELECT) | 804 | if (prop->type == P_CHOICE || prop->type == P_SELECT) |
818 | continue; | 805 | continue; |
819 | sym2 = sym_check_expr_deps(prop->visible.expr); | 806 | sym2 = sym_check_expr_deps(prop->visible.expr); |
820 | if (sym2) | 807 | if (sym2) |
821 | goto out; | 808 | break; |
822 | if (prop->type != P_DEFAULT || sym_is_choice(sym)) | 809 | if (prop->type != P_DEFAULT || sym_is_choice(sym)) |
823 | continue; | 810 | continue; |
824 | sym2 = sym_check_expr_deps(prop->expr); | 811 | sym2 = sym_check_expr_deps(prop->expr); |
825 | if (sym2) | 812 | if (sym2) |
826 | goto out; | 813 | break; |
827 | } | 814 | } |
828 | out: | 815 | |
816 | return sym2; | ||
817 | } | ||
818 | |||
819 | static struct symbol *sym_check_choice_deps(struct symbol *choice) | ||
820 | { | ||
821 | struct symbol *sym, *sym2; | ||
822 | struct property *prop; | ||
823 | struct expr *e; | ||
824 | |||
825 | prop = sym_get_choice_prop(choice); | ||
826 | expr_list_for_each_sym(prop->expr, e, sym) | ||
827 | sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); | ||
828 | |||
829 | choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); | ||
830 | sym2 = sym_check_sym_deps(choice); | ||
831 | choice->flags &= ~SYMBOL_CHECK; | ||
829 | if (sym2) | 832 | if (sym2) |
830 | fprintf(stderr, " -> %s%s", sym->name, sym2 == sym? "\n": ""); | 833 | goto out; |
831 | sym->flags &= ~SYMBOL_CHECK; | 834 | |
835 | expr_list_for_each_sym(prop->expr, e, sym) { | ||
836 | sym2 = sym_check_sym_deps(sym); | ||
837 | if (sym2) { | ||
838 | fprintf(stderr, " -> %s", sym->name); | ||
839 | break; | ||
840 | } | ||
841 | } | ||
842 | out: | ||
843 | expr_list_for_each_sym(prop->expr, e, sym) | ||
844 | sym->flags &= ~SYMBOL_CHECK; | ||
845 | |||
846 | if (sym2 && sym_is_choice_value(sym2) && | ||
847 | prop_get_symbol(sym_get_choice_prop(sym2)) == choice) | ||
848 | sym2 = choice; | ||
849 | |||
850 | return sym2; | ||
851 | } | ||
852 | |||
853 | struct symbol *sym_check_deps(struct symbol *sym) | ||
854 | { | ||
855 | struct symbol *sym2; | ||
856 | struct property *prop; | ||
857 | |||
858 | if (sym->flags & SYMBOL_CHECK) { | ||
859 | fprintf(stderr, "%s:%d:error: found recursive dependency: %s", | ||
860 | sym->prop->file->name, sym->prop->lineno, | ||
861 | sym->name ? sym->name : "<choice>"); | ||
862 | return sym; | ||
863 | } | ||
864 | if (sym->flags & SYMBOL_CHECKED) | ||
865 | return NULL; | ||
866 | |||
867 | if (sym_is_choice_value(sym)) { | ||
868 | /* for choice groups start the check with main choice symbol */ | ||
869 | prop = sym_get_choice_prop(sym); | ||
870 | sym2 = sym_check_deps(prop_get_symbol(prop)); | ||
871 | } else if (sym_is_choice(sym)) { | ||
872 | sym2 = sym_check_choice_deps(sym); | ||
873 | } else { | ||
874 | sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); | ||
875 | sym2 = sym_check_sym_deps(sym); | ||
876 | sym->flags &= ~SYMBOL_CHECK; | ||
877 | } | ||
878 | |||
879 | if (sym2) { | ||
880 | fprintf(stderr, " -> %s", sym->name ? sym->name : "<choice>"); | ||
881 | if (sym2 == sym) { | ||
882 | fprintf(stderr, "\n"); | ||
883 | zconfnerrs++; | ||
884 | sym2 = NULL; | ||
885 | } | ||
886 | } | ||
887 | |||
832 | return sym2; | 888 | return sym2; |
833 | } | 889 | } |
834 | 890 | ||
@@ -904,7 +960,7 @@ void prop_add_env(const char *env) | |||
904 | } | 960 | } |
905 | 961 | ||
906 | prop = prop_alloc(P_ENV, sym); | 962 | prop = prop_alloc(P_ENV, sym); |
907 | prop->expr = expr_alloc_symbol(sym_lookup(env, 1)); | 963 | prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST)); |
908 | 964 | ||
909 | sym_env_list = expr_alloc_one(E_LIST, sym_env_list); | 965 | sym_env_list = expr_alloc_one(E_LIST, sym_env_list); |
910 | sym_env_list->right.sym = sym; | 966 | sym_env_list->right.sym = sym; |
diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped index d22d92496f25..95df833b5a9d 100644 --- a/scripts/kconfig/zconf.tab.c_shipped +++ b/scripts/kconfig/zconf.tab.c_shipped | |||
@@ -446,16 +446,16 @@ union yyalloc | |||
446 | /* YYFINAL -- State number of the termination state. */ | 446 | /* YYFINAL -- State number of the termination state. */ |
447 | #define YYFINAL 3 | 447 | #define YYFINAL 3 |
448 | /* YYLAST -- Last index in YYTABLE. */ | 448 | /* YYLAST -- Last index in YYTABLE. */ |
449 | #define YYLAST 258 | 449 | #define YYLAST 259 |
450 | 450 | ||
451 | /* YYNTOKENS -- Number of terminals. */ | 451 | /* YYNTOKENS -- Number of terminals. */ |
452 | #define YYNTOKENS 35 | 452 | #define YYNTOKENS 35 |
453 | /* YYNNTS -- Number of nonterminals. */ | 453 | /* YYNNTS -- Number of nonterminals. */ |
454 | #define YYNNTS 45 | 454 | #define YYNNTS 46 |
455 | /* YYNRULES -- Number of rules. */ | 455 | /* YYNRULES -- Number of rules. */ |
456 | #define YYNRULES 108 | 456 | #define YYNRULES 110 |
457 | /* YYNRULES -- Number of states. */ | 457 | /* YYNRULES -- Number of states. */ |
458 | #define YYNSTATES 178 | 458 | #define YYNSTATES 180 |
459 | 459 | ||
460 | /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ | 460 | /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ |
461 | #define YYUNDEFTOK 2 | 461 | #define YYUNDEFTOK 2 |
@@ -507,13 +507,14 @@ static const yytype_uint16 yyprhs[] = | |||
507 | 28, 33, 37, 39, 41, 43, 45, 47, 49, 51, | 507 | 28, 33, 37, 39, 41, 43, 45, 47, 49, 51, |
508 | 53, 55, 57, 59, 61, 63, 67, 70, 74, 77, | 508 | 53, 55, 57, 59, 61, 63, 67, 70, 74, 77, |
509 | 81, 84, 85, 88, 91, 94, 97, 100, 103, 107, | 509 | 81, 84, 85, 88, 91, 94, 97, 100, 103, 107, |
510 | 112, 117, 122, 128, 132, 133, 137, 138, 141, 144, | 510 | 112, 117, 122, 128, 132, 133, 137, 138, 141, 145, |
511 | 147, 149, 153, 154, 157, 160, 163, 166, 169, 174, | 511 | 148, 150, 154, 155, 158, 161, 164, 167, 170, 175, |
512 | 178, 181, 186, 187, 190, 194, 196, 200, 201, 204, | 512 | 179, 182, 187, 188, 191, 195, 197, 201, 202, 205, |
513 | 207, 210, 214, 217, 219, 223, 224, 227, 230, 233, | 513 | 208, 211, 215, 218, 220, 224, 225, 228, 231, 234, |
514 | 237, 241, 244, 247, 250, 251, 254, 257, 260, 265, | 514 | 238, 242, 245, 248, 251, 252, 255, 258, 261, 266, |
515 | 266, 269, 271, 273, 276, 279, 282, 284, 287, 288, | 515 | 267, 270, 272, 274, 277, 280, 283, 285, 288, 289, |
516 | 291, 293, 297, 301, 305, 308, 312, 316, 318 | 516 | 292, 294, 298, 302, 306, 309, 313, 317, 319, 321, |
517 | 322 | ||
517 | }; | 518 | }; |
518 | 519 | ||
519 | /* YYRHS -- A `-1'-separated list of the rules' RHS. */ | 520 | /* YYRHS -- A `-1'-separated list of the rules' RHS. */ |
@@ -533,24 +534,25 @@ static const yytype_int8 yyrhs[] = | |||
533 | 30, -1, 20, 78, 77, 30, -1, 21, 25, 77, | 534 | 30, -1, 20, 78, 77, 30, -1, 21, 25, 77, |
534 | 30, -1, 22, 79, 79, 77, 30, -1, 23, 48, | 535 | 30, -1, 22, 79, 79, 77, 30, -1, 23, 48, |
535 | 30, -1, -1, 48, 25, 49, -1, -1, 33, 74, | 536 | 30, -1, -1, 48, 25, 49, -1, -1, 33, 74, |
536 | -1, 7, 30, -1, 50, 54, -1, 75, -1, 51, | 537 | -1, 7, 80, 30, -1, 50, 54, -1, 75, -1, |
537 | 56, 52, -1, -1, 54, 55, -1, 54, 72, -1, | 538 | 51, 56, 52, -1, -1, 54, 55, -1, 54, 72, |
538 | 54, 70, -1, 54, 30, -1, 54, 40, -1, 18, | 539 | -1, 54, 70, -1, 54, 30, -1, 54, 40, -1, |
539 | 74, 77, 30, -1, 19, 73, 30, -1, 17, 30, | 540 | 18, 74, 77, 30, -1, 19, 73, 30, -1, 17, |
540 | -1, 20, 25, 77, 30, -1, -1, 56, 39, -1, | 541 | 30, -1, 20, 25, 77, 30, -1, -1, 56, 39, |
541 | 14, 78, 76, -1, 75, -1, 57, 60, 58, -1, | 542 | -1, 14, 78, 76, -1, 75, -1, 57, 60, 58, |
542 | -1, 60, 39, -1, 60, 64, -1, 60, 53, -1, | 543 | -1, -1, 60, 39, -1, 60, 64, -1, 60, 53, |
543 | 4, 74, 30, -1, 61, 71, -1, 75, -1, 62, | 544 | -1, 4, 74, 30, -1, 61, 71, -1, 75, -1, |
544 | 65, 63, -1, -1, 65, 39, -1, 65, 64, -1, | 545 | 62, 65, 63, -1, -1, 65, 39, -1, 65, 64, |
545 | 65, 53, -1, 6, 74, 30, -1, 9, 74, 30, | 546 | -1, 65, 53, -1, 6, 74, 30, -1, 9, 74, |
546 | -1, 67, 71, -1, 12, 30, -1, 69, 13, -1, | 547 | 30, -1, 67, 71, -1, 12, 30, -1, 69, 13, |
547 | -1, 71, 72, -1, 71, 30, -1, 71, 40, -1, | 548 | -1, -1, 71, 72, -1, 71, 30, -1, 71, 40, |
548 | 16, 24, 78, 30, -1, -1, 74, 77, -1, 25, | 549 | -1, 16, 24, 78, 30, -1, -1, 74, 77, -1, |
549 | -1, 26, -1, 5, 30, -1, 8, 30, -1, 15, | 550 | 25, -1, 26, -1, 5, 30, -1, 8, 30, -1, |
550 | 30, -1, 30, -1, 76, 30, -1, -1, 14, 78, | 551 | 15, 30, -1, 30, -1, 76, 30, -1, -1, 14, |
551 | -1, 79, -1, 79, 33, 79, -1, 79, 27, 79, | 552 | 78, -1, 79, -1, 79, 33, 79, -1, 79, 27, |
552 | -1, 29, 78, 28, -1, 34, 78, -1, 78, 31, | 553 | 79, -1, 29, 78, 28, -1, 34, 78, -1, 78, |
553 | 78, -1, 78, 32, 78, -1, 25, -1, 26, -1 | 554 | 31, 78, -1, 78, 32, 78, -1, 25, -1, 26, |
555 | -1, -1, 25, -1 | ||
554 | }; | 556 | }; |
555 | 557 | ||
556 | /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ | 558 | /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ |
@@ -566,7 +568,8 @@ static const yytype_uint16 yyrline[] = | |||
566 | 339, 344, 351, 356, 364, 367, 369, 370, 371, 374, | 568 | 339, 344, 351, 356, 364, 367, 369, 370, 371, 374, |
567 | 382, 389, 396, 402, 409, 411, 412, 413, 416, 424, | 569 | 382, 389, 396, 402, 409, 411, 412, 413, 416, 424, |
568 | 426, 431, 432, 435, 436, 437, 441, 442, 445, 446, | 570 | 426, 431, 432, 435, 436, 437, 441, 442, 445, 446, |
569 | 449, 450, 451, 452, 453, 454, 455, 458, 459 | 571 | 449, 450, 451, 452, 453, 454, 455, 458, 459, 462, |
572 | 463 | ||
570 | }; | 573 | }; |
571 | #endif | 574 | #endif |
572 | 575 | ||
@@ -590,7 +593,8 @@ static const char *const yytname[] = | |||
590 | "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry", | 593 | "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry", |
591 | "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment", | 594 | "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment", |
592 | "comment_stmt", "help_start", "help", "depends_list", "depends", | 595 | "comment_stmt", "help_start", "help", "depends_list", "depends", |
593 | "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0 | 596 | "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", |
597 | "word_opt", 0 | ||
594 | }; | 598 | }; |
595 | #endif | 599 | #endif |
596 | 600 | ||
@@ -619,7 +623,8 @@ static const yytype_uint8 yyr1[] = | |||
619 | 60, 61, 62, 63, 64, 65, 65, 65, 65, 66, | 623 | 60, 61, 62, 63, 64, 65, 65, 65, 65, 66, |
620 | 67, 68, 69, 70, 71, 71, 71, 71, 72, 73, | 624 | 67, 68, 69, 70, 71, 71, 71, 71, 72, 73, |
621 | 73, 74, 74, 75, 75, 75, 76, 76, 77, 77, | 625 | 73, 74, 74, 75, 75, 75, 76, 76, 77, 77, |
622 | 78, 78, 78, 78, 78, 78, 78, 79, 79 | 626 | 78, 78, 78, 78, 78, 78, 78, 79, 79, 80, |
627 | 80 | ||
623 | }; | 628 | }; |
624 | 629 | ||
625 | /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ | 630 | /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ |
@@ -629,13 +634,14 @@ static const yytype_uint8 yyr2[] = | |||
629 | 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, | 634 | 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, |
630 | 1, 1, 1, 1, 1, 3, 2, 3, 2, 3, | 635 | 1, 1, 1, 1, 1, 3, 2, 3, 2, 3, |
631 | 2, 0, 2, 2, 2, 2, 2, 2, 3, 4, | 636 | 2, 0, 2, 2, 2, 2, 2, 2, 3, 4, |
632 | 4, 4, 5, 3, 0, 3, 0, 2, 2, 2, | 637 | 4, 4, 5, 3, 0, 3, 0, 2, 3, 2, |
633 | 1, 3, 0, 2, 2, 2, 2, 2, 4, 3, | 638 | 1, 3, 0, 2, 2, 2, 2, 2, 4, 3, |
634 | 2, 4, 0, 2, 3, 1, 3, 0, 2, 2, | 639 | 2, 4, 0, 2, 3, 1, 3, 0, 2, 2, |
635 | 2, 3, 2, 1, 3, 0, 2, 2, 2, 3, | 640 | 2, 3, 2, 1, 3, 0, 2, 2, 2, 3, |
636 | 3, 2, 2, 2, 0, 2, 2, 2, 4, 0, | 641 | 3, 2, 2, 2, 0, 2, 2, 2, 4, 0, |
637 | 2, 1, 1, 2, 2, 2, 1, 2, 0, 2, | 642 | 2, 1, 1, 2, 2, 2, 1, 2, 0, 2, |
638 | 1, 3, 3, 3, 2, 3, 3, 1, 1 | 643 | 1, 3, 3, 3, 2, 3, 3, 1, 1, 0, |
644 | 1 | ||
639 | }; | 645 | }; |
640 | 646 | ||
641 | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state | 647 | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state |
@@ -643,69 +649,69 @@ static const yytype_uint8 yyr2[] = | |||
643 | means the default is an error. */ | 649 | means the default is an error. */ |
644 | static const yytype_uint8 yydefact[] = | 650 | static const yytype_uint8 yydefact[] = |
645 | { | 651 | { |
646 | 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, | 652 | 3, 0, 0, 1, 0, 0, 0, 0, 0, 109, |
647 | 0, 0, 0, 0, 0, 0, 12, 16, 13, 14, | 653 | 0, 0, 0, 0, 0, 0, 12, 16, 13, 14, |
648 | 18, 15, 17, 0, 19, 0, 4, 31, 22, 31, | 654 | 18, 15, 17, 0, 19, 0, 4, 31, 22, 31, |
649 | 23, 52, 62, 5, 67, 20, 84, 75, 6, 24, | 655 | 23, 52, 62, 5, 67, 20, 84, 75, 6, 24, |
650 | 84, 21, 8, 11, 91, 92, 0, 0, 93, 0, | 656 | 84, 21, 8, 11, 91, 92, 0, 0, 93, 0, |
651 | 48, 94, 0, 0, 0, 107, 108, 0, 0, 0, | 657 | 110, 0, 94, 0, 0, 0, 107, 108, 0, 0, |
652 | 100, 95, 0, 0, 0, 0, 0, 0, 0, 0, | 658 | 0, 100, 95, 0, 0, 0, 0, 0, 0, 0, |
653 | 0, 0, 96, 7, 71, 79, 80, 27, 29, 0, | 659 | 0, 0, 0, 96, 7, 71, 79, 48, 80, 27, |
654 | 104, 0, 0, 64, 0, 0, 9, 10, 0, 0, | 660 | 29, 0, 104, 0, 0, 64, 0, 0, 9, 10, |
655 | 0, 0, 89, 0, 0, 0, 44, 0, 37, 36, | 661 | 0, 0, 0, 0, 89, 0, 0, 0, 44, 0, |
656 | 32, 33, 0, 35, 34, 0, 0, 89, 0, 56, | 662 | 37, 36, 32, 33, 0, 35, 34, 0, 0, 89, |
657 | 57, 53, 55, 54, 63, 51, 50, 68, 70, 66, | 663 | 0, 56, 57, 53, 55, 54, 63, 51, 50, 68, |
658 | 69, 65, 86, 87, 85, 76, 78, 74, 77, 73, | 664 | 70, 66, 69, 65, 86, 87, 85, 76, 78, 74, |
659 | 97, 103, 105, 106, 102, 101, 26, 82, 0, 98, | 665 | 77, 73, 97, 103, 105, 106, 102, 101, 26, 82, |
660 | 0, 98, 98, 98, 0, 0, 0, 83, 60, 98, | 666 | 0, 98, 0, 98, 98, 98, 0, 0, 0, 83, |
661 | 0, 98, 0, 0, 0, 38, 90, 0, 0, 98, | 667 | 60, 98, 0, 98, 0, 0, 0, 38, 90, 0, |
662 | 46, 43, 25, 0, 59, 0, 88, 99, 39, 40, | 668 | 0, 98, 46, 43, 25, 0, 59, 0, 88, 99, |
663 | 41, 0, 0, 45, 58, 61, 42, 47 | 669 | 39, 40, 41, 0, 0, 45, 58, 61, 42, 47 |
664 | }; | 670 | }; |
665 | 671 | ||
666 | /* YYDEFGOTO[NTERM-NUM]. */ | 672 | /* YYDEFGOTO[NTERM-NUM]. */ |
667 | static const yytype_int16 yydefgoto[] = | 673 | static const yytype_int16 yydefgoto[] = |
668 | { | 674 | { |
669 | -1, 1, 2, 25, 26, 99, 27, 28, 29, 30, | 675 | -1, 1, 2, 25, 26, 101, 27, 28, 29, 30, |
670 | 64, 100, 101, 145, 173, 31, 32, 115, 33, 66, | 676 | 65, 102, 103, 147, 175, 31, 32, 117, 33, 67, |
671 | 111, 67, 34, 119, 35, 68, 36, 37, 127, 38, | 677 | 113, 68, 34, 121, 35, 69, 36, 37, 129, 38, |
672 | 70, 39, 40, 41, 102, 103, 69, 104, 140, 141, | 678 | 71, 39, 40, 41, 104, 105, 70, 106, 142, 143, |
673 | 42, 73, 154, 59, 60 | 679 | 42, 74, 156, 60, 61, 51 |
674 | }; | 680 | }; |
675 | 681 | ||
676 | /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing | 682 | /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing |
677 | STATE-NUM. */ | 683 | STATE-NUM. */ |
678 | #define YYPACT_NINF -78 | 684 | #define YYPACT_NINF -80 |
679 | static const yytype_int16 yypact[] = | 685 | static const yytype_int16 yypact[] = |
680 | { | 686 | { |
681 | -78, 33, 130, -78, -28, 73, 73, 7, 73, 36, | 687 | -80, 2, 132, -80, -13, -1, -1, -2, -1, 9, |
682 | 41, 73, 26, 52, -4, 58, -78, -78, -78, -78, | 688 | 33, -1, 27, 40, -3, 38, -80, -80, -80, -80, |
683 | -78, -78, -78, 90, -78, 94, -78, -78, -78, -78, | 689 | -80, -80, -80, 71, -80, 77, -80, -80, -80, -80, |
684 | -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, | 690 | -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, |
685 | -78, -78, -78, -78, -78, -78, 74, 85, -78, 96, | 691 | -80, -80, -80, -80, -80, -80, 57, 61, -80, 63, |
686 | -78, -78, 131, 134, 147, -78, -78, -4, -4, 193, | 692 | -80, 76, -80, 87, 101, 133, -80, -80, -3, -3, |
687 | -10, -78, 162, 164, 38, 102, 64, 148, 5, 192, | 693 | 195, -6, -80, 136, 149, 39, 104, 65, 150, 5, |
688 | 5, 165, -78, 174, -78, -78, -78, -78, -78, 65, | 694 | 194, 5, 167, -80, 176, -80, -80, -80, -80, -80, |
689 | -78, -4, -4, 174, 103, 103, -78, -78, 175, 185, | 695 | -80, 68, -80, -3, -3, 176, 72, 72, -80, -80, |
690 | 197, 73, 73, -4, 194, 103, -78, 231, -78, -78, | 696 | 177, 187, 78, -1, -1, -3, 196, 72, -80, 222, |
691 | -78, -78, 220, -78, -78, 204, 73, 73, 210, -78, | 697 | -80, -80, -80, -80, 221, -80, -80, 205, -1, -1, |
692 | -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, | 698 | 211, -80, -80, -80, -80, -80, -80, -80, -80, -80, |
693 | -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, | 699 | -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, |
694 | -78, -78, 205, -78, -78, -78, -78, -78, -4, 222, | 700 | -80, -80, -80, -80, 206, -80, -80, -80, -80, -80, |
695 | 208, 222, 195, 222, 103, 2, 209, -78, -78, 222, | 701 | -3, 223, 209, 223, 197, 223, 72, 7, 210, -80, |
696 | 211, 222, 199, -4, 212, -78, -78, 213, 214, 222, | 702 | -80, 223, 212, 223, 201, -3, 213, -80, -80, 214, |
697 | 207, -78, -78, 215, -78, 216, -78, 111, -78, -78, | 703 | 215, 223, 208, -80, -80, 216, -80, 217, -80, 113, |
698 | -78, 217, 73, -78, -78, -78, -78, -78 | 704 | -80, -80, -80, 218, -1, -80, -80, -80, -80, -80 |
699 | }; | 705 | }; |
700 | 706 | ||
701 | /* YYPGOTO[NTERM-NUM]. */ | 707 | /* YYPGOTO[NTERM-NUM]. */ |
702 | static const yytype_int16 yypgoto[] = | 708 | static const yytype_int16 yypgoto[] = |
703 | { | 709 | { |
704 | -78, -78, -78, -78, 121, -35, -78, -78, -78, -78, | 710 | -80, -80, -80, -80, 122, -34, -80, -80, -80, -80, |
705 | 219, -78, -78, -78, -78, -78, -78, -78, -44, -78, | 711 | 220, -80, -80, -80, -80, -80, -80, -80, 59, -80, |
706 | -78, -78, -78, -78, -78, -78, -78, -78, -78, -6, | 712 | -80, -80, -80, -80, -80, -80, -80, -80, -80, 125, |
707 | -78, -78, -78, -78, -78, 183, 218, 21, 143, -5, | 713 | -80, -80, -80, -80, -80, 183, 219, 22, 142, -5, |
708 | 146, 196, 69, -53, -77 | 714 | 147, 192, 69, -54, -79, -80 |
709 | }; | 715 | }; |
710 | 716 | ||
711 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If | 717 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If |
@@ -715,62 +721,62 @@ static const yytype_int16 yypgoto[] = | |||
715 | #define YYTABLE_NINF -82 | 721 | #define YYTABLE_NINF -82 |
716 | static const yytype_int16 yytable[] = | 722 | static const yytype_int16 yytable[] = |
717 | { | 723 | { |
718 | 46, 47, 43, 49, 79, 80, 52, 134, 135, 6, | 724 | 46, 47, 3, 49, 81, 82, 53, 136, 137, 6, |
719 | 7, 8, 9, 10, 11, 12, 13, 84, 144, 14, | 725 | 7, 8, 9, 10, 11, 12, 13, 43, 146, 14, |
720 | 15, 55, 56, 85, 118, 57, 126, 160, 132, 133, | 726 | 15, 86, 56, 57, 44, 45, 58, 87, 48, 134, |
721 | 58, 110, 161, 3, 123, 24, 123, 48, -28, 88, | 727 | 135, 59, 162, 112, 50, 24, 125, 163, 125, -28, |
722 | 142, -28, -28, -28, -28, -28, -28, -28, -28, -28, | 728 | 90, 144, -28, -28, -28, -28, -28, -28, -28, -28, |
723 | 89, 53, -28, -28, 90, -28, 91, 92, 93, 94, | 729 | -28, 91, 54, -28, -28, 92, -28, 93, 94, 95, |
724 | 95, 96, 120, 97, 128, 88, 50, 159, 98, -49, | 730 | 96, 97, 98, 52, 99, 55, 90, 161, 62, 100, |
725 | -49, 51, -49, -49, -49, -49, 89, 54, -49, -49, | 731 | -49, -49, 63, -49, -49, -49, -49, 91, 64, -49, |
726 | 90, 105, 106, 107, 108, 152, 139, 113, 61, 97, | 732 | -49, 92, 107, 108, 109, 110, 154, 73, 141, 115, |
727 | 124, 62, 124, 131, 109, 63, 81, 82, 44, 45, | 733 | 99, 75, 126, 76, 126, 111, 133, 56, 57, 83, |
728 | 167, 149, -30, 88, 72, -30, -30, -30, -30, -30, | 734 | 84, 169, 140, 151, -30, 90, 77, -30, -30, -30, |
729 | -30, -30, -30, -30, 89, 74, -30, -30, 90, -30, | 735 | -30, -30, -30, -30, -30, -30, 91, 78, -30, -30, |
730 | 91, 92, 93, 94, 95, 96, 75, 97, 55, 56, | 736 | 92, -30, 93, 94, 95, 96, 97, 98, 120, 99, |
731 | -2, 4, 98, 5, 6, 7, 8, 9, 10, 11, | 737 | 128, 79, -2, 4, 100, 5, 6, 7, 8, 9, |
732 | 12, 13, 81, 82, 14, 15, 16, 17, 18, 19, | 738 | 10, 11, 12, 13, 83, 84, 14, 15, 16, 17, |
733 | 20, 21, 22, 7, 8, 23, 10, 11, 12, 13, | 739 | 18, 19, 20, 21, 22, 7, 8, 23, 10, 11, |
734 | 24, 76, 14, 15, 77, -81, 88, 177, -81, -81, | 740 | 12, 13, 24, 80, 14, 15, 88, -81, 90, 179, |
735 | -81, -81, -81, -81, -81, -81, -81, 78, 24, -81, | 741 | -81, -81, -81, -81, -81, -81, -81, -81, -81, 89, |
736 | -81, 90, -81, -81, -81, -81, -81, -81, 114, 117, | 742 | 24, -81, -81, 92, -81, -81, -81, -81, -81, -81, |
737 | 97, 125, 86, 88, 87, 122, -72, -72, -72, -72, | 743 | 116, 119, 99, 127, 122, 90, 130, 124, -72, -72, |
738 | -72, -72, -72, -72, 130, 136, -72, -72, 90, 153, | 744 | -72, -72, -72, -72, -72, -72, 132, 138, -72, -72, |
739 | 156, 157, 158, 116, 121, 137, 129, 97, 163, 143, | 745 | 92, 155, 158, 159, 160, 118, 123, 139, 131, 99, |
740 | 165, 138, 122, 72, 81, 82, 81, 82, 171, 166, | 746 | 165, 145, 167, 148, 124, 73, 83, 84, 83, 84, |
741 | 81, 82, 146, 147, 148, 151, 153, 82, 155, 162, | 747 | 173, 168, 83, 84, 149, 150, 153, 155, 84, 157, |
742 | 172, 164, 168, 169, 170, 174, 175, 176, 65, 112, | 748 | 164, 174, 166, 170, 171, 172, 176, 177, 178, 66, |
743 | 150, 0, 0, 0, 0, 83, 0, 0, 71 | 749 | 114, 152, 85, 0, 0, 0, 0, 0, 0, 72 |
744 | }; | 750 | }; |
745 | 751 | ||
746 | static const yytype_int16 yycheck[] = | 752 | static const yytype_int16 yycheck[] = |
747 | { | 753 | { |
748 | 5, 6, 30, 8, 57, 58, 11, 84, 85, 4, | 754 | 5, 6, 0, 8, 58, 59, 11, 86, 87, 4, |
749 | 5, 6, 7, 8, 9, 10, 11, 27, 95, 14, | 755 | 5, 6, 7, 8, 9, 10, 11, 30, 97, 14, |
750 | 15, 25, 26, 33, 68, 29, 70, 25, 81, 82, | 756 | 15, 27, 25, 26, 25, 26, 29, 33, 30, 83, |
751 | 34, 66, 30, 0, 69, 30, 71, 30, 0, 1, | 757 | 84, 34, 25, 67, 25, 30, 70, 30, 72, 0, |
752 | 93, 3, 4, 5, 6, 7, 8, 9, 10, 11, | 758 | 1, 95, 3, 4, 5, 6, 7, 8, 9, 10, |
753 | 12, 25, 14, 15, 16, 17, 18, 19, 20, 21, | 759 | 11, 12, 25, 14, 15, 16, 17, 18, 19, 20, |
754 | 22, 23, 68, 25, 70, 1, 30, 144, 30, 5, | 760 | 21, 22, 23, 30, 25, 25, 1, 146, 30, 30, |
755 | 6, 30, 8, 9, 10, 11, 12, 25, 14, 15, | 761 | 5, 6, 1, 8, 9, 10, 11, 12, 1, 14, |
756 | 16, 17, 18, 19, 20, 138, 91, 66, 30, 25, | 762 | 15, 16, 17, 18, 19, 20, 140, 30, 93, 67, |
757 | 69, 1, 71, 28, 30, 1, 31, 32, 25, 26, | 763 | 25, 30, 70, 30, 72, 30, 28, 25, 26, 31, |
758 | 153, 106, 0, 1, 30, 3, 4, 5, 6, 7, | 764 | 32, 155, 24, 108, 0, 1, 30, 3, 4, 5, |
759 | 8, 9, 10, 11, 12, 30, 14, 15, 16, 17, | 765 | 6, 7, 8, 9, 10, 11, 12, 30, 14, 15, |
760 | 18, 19, 20, 21, 22, 23, 30, 25, 25, 26, | 766 | 16, 17, 18, 19, 20, 21, 22, 23, 69, 25, |
761 | 0, 1, 30, 3, 4, 5, 6, 7, 8, 9, | 767 | 71, 30, 0, 1, 30, 3, 4, 5, 6, 7, |
762 | 10, 11, 31, 32, 14, 15, 16, 17, 18, 19, | 768 | 8, 9, 10, 11, 31, 32, 14, 15, 16, 17, |
763 | 20, 21, 22, 5, 6, 25, 8, 9, 10, 11, | 769 | 18, 19, 20, 21, 22, 5, 6, 25, 8, 9, |
764 | 30, 30, 14, 15, 30, 0, 1, 172, 3, 4, | 770 | 10, 11, 30, 30, 14, 15, 30, 0, 1, 174, |
765 | 5, 6, 7, 8, 9, 10, 11, 30, 30, 14, | 771 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 30, |
766 | 15, 16, 17, 18, 19, 20, 21, 22, 67, 68, | 772 | 30, 14, 15, 16, 17, 18, 19, 20, 21, 22, |
767 | 25, 70, 30, 1, 30, 30, 4, 5, 6, 7, | 773 | 68, 69, 25, 71, 69, 1, 71, 30, 4, 5, |
768 | 8, 9, 10, 11, 30, 30, 14, 15, 16, 14, | 774 | 6, 7, 8, 9, 10, 11, 30, 30, 14, 15, |
769 | 141, 142, 143, 67, 68, 30, 70, 25, 149, 25, | 775 | 16, 14, 143, 144, 145, 68, 69, 30, 71, 25, |
770 | 151, 24, 30, 30, 31, 32, 31, 32, 159, 30, | 776 | 151, 25, 153, 1, 30, 30, 31, 32, 31, 32, |
771 | 31, 32, 1, 13, 30, 25, 14, 32, 30, 30, | 777 | 161, 30, 31, 32, 13, 30, 25, 14, 32, 30, |
772 | 33, 30, 30, 30, 30, 30, 30, 30, 29, 66, | 778 | 30, 33, 30, 30, 30, 30, 30, 30, 30, 29, |
773 | 107, -1, -1, -1, -1, 59, -1, -1, 40 | 779 | 67, 109, 60, -1, -1, -1, -1, -1, -1, 40 |
774 | }; | 780 | }; |
775 | 781 | ||
776 | /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing | 782 | /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing |
@@ -782,19 +788,19 @@ static const yytype_uint8 yystos[] = | |||
782 | 20, 21, 22, 25, 30, 38, 39, 41, 42, 43, | 788 | 20, 21, 22, 25, 30, 38, 39, 41, 42, 43, |
783 | 44, 50, 51, 53, 57, 59, 61, 62, 64, 66, | 789 | 44, 50, 51, 53, 57, 59, 61, 62, 64, 66, |
784 | 67, 68, 75, 30, 25, 26, 74, 74, 30, 74, | 790 | 67, 68, 75, 30, 25, 26, 74, 74, 30, 74, |
785 | 30, 30, 74, 25, 25, 25, 26, 29, 34, 78, | 791 | 25, 80, 30, 74, 25, 25, 25, 26, 29, 34, |
786 | 79, 30, 1, 1, 45, 45, 54, 56, 60, 71, | 792 | 78, 79, 30, 1, 1, 45, 45, 54, 56, 60, |
787 | 65, 71, 30, 76, 30, 30, 30, 30, 30, 78, | 793 | 71, 65, 71, 30, 76, 30, 30, 30, 30, 30, |
788 | 78, 31, 32, 76, 27, 33, 30, 30, 1, 12, | 794 | 30, 78, 78, 31, 32, 76, 27, 33, 30, 30, |
789 | 16, 18, 19, 20, 21, 22, 23, 25, 30, 40, | 795 | 1, 12, 16, 18, 19, 20, 21, 22, 23, 25, |
790 | 46, 47, 69, 70, 72, 17, 18, 19, 20, 30, | 796 | 30, 40, 46, 47, 69, 70, 72, 17, 18, 19, |
791 | 40, 55, 70, 72, 39, 52, 75, 39, 53, 58, | 797 | 20, 30, 40, 55, 70, 72, 39, 52, 75, 39, |
792 | 64, 75, 30, 40, 72, 39, 53, 63, 64, 75, | 798 | 53, 58, 64, 75, 30, 40, 72, 39, 53, 63, |
793 | 30, 28, 78, 78, 79, 79, 30, 30, 24, 74, | 799 | 64, 75, 30, 28, 78, 78, 79, 79, 30, 30, |
794 | 73, 74, 78, 25, 79, 48, 1, 13, 30, 74, | 800 | 24, 74, 73, 74, 78, 25, 79, 48, 1, 13, |
795 | 73, 25, 78, 14, 77, 30, 77, 77, 77, 79, | 801 | 30, 74, 73, 25, 78, 14, 77, 30, 77, 77, |
796 | 25, 30, 30, 77, 30, 77, 30, 78, 30, 30, | 802 | 77, 79, 25, 30, 30, 77, 30, 77, 30, 78, |
797 | 30, 77, 33, 49, 30, 30, 30, 74 | 803 | 30, 30, 30, 77, 33, 49, 30, 30, 30, 74 |
798 | }; | 804 | }; |
799 | 805 | ||
800 | #define yyerrok (yyerrstatus = 0) | 806 | #define yyerrok (yyerrstatus = 0) |
@@ -1781,8 +1787,8 @@ yyreduce: | |||
1781 | case 48: | 1787 | case 48: |
1782 | 1788 | ||
1783 | { | 1789 | { |
1784 | struct symbol *sym = sym_lookup(NULL, 0); | 1790 | struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE); |
1785 | sym->flags |= SYMBOL_CHOICE; | 1791 | sym->flags |= SYMBOL_AUTO; |
1786 | menu_add_entry(sym); | 1792 | menu_add_entry(sym); |
1787 | menu_add_expr(P_CHOICE, NULL, NULL); | 1793 | menu_add_expr(P_CHOICE, NULL, NULL); |
1788 | printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); | 1794 | printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); |
@@ -2014,7 +2020,12 @@ yyreduce: | |||
2014 | 2020 | ||
2015 | case 108: | 2021 | case 108: |
2016 | 2022 | ||
2017 | { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 1); free((yyvsp[(1) - (1)].string)); ;} | 2023 | { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;} |
2024 | break; | ||
2025 | |||
2026 | case 109: | ||
2027 | |||
2028 | { (yyval.string) = NULL; ;} | ||
2018 | break; | 2029 | break; |
2019 | 2030 | ||
2020 | 2031 | ||
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index d9b96ba8e38c..9710b82466f2 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y | |||
@@ -91,7 +91,7 @@ static struct menu *current_menu, *current_entry; | |||
91 | %type <id> end | 91 | %type <id> end |
92 | %type <id> option_name | 92 | %type <id> option_name |
93 | %type <menu> if_entry menu_entry choice_entry | 93 | %type <menu> if_entry menu_entry choice_entry |
94 | %type <string> symbol_option_arg | 94 | %type <string> symbol_option_arg word_opt |
95 | 95 | ||
96 | %destructor { | 96 | %destructor { |
97 | fprintf(stderr, "%s:%d: missing end statement for this entry\n", | 97 | fprintf(stderr, "%s:%d: missing end statement for this entry\n", |
@@ -239,10 +239,10 @@ symbol_option_arg: | |||
239 | 239 | ||
240 | /* choice entry */ | 240 | /* choice entry */ |
241 | 241 | ||
242 | choice: T_CHOICE T_EOL | 242 | choice: T_CHOICE word_opt T_EOL |
243 | { | 243 | { |
244 | struct symbol *sym = sym_lookup(NULL, 0); | 244 | struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE); |
245 | sym->flags |= SYMBOL_CHOICE; | 245 | sym->flags |= SYMBOL_AUTO; |
246 | menu_add_entry(sym); | 246 | menu_add_entry(sym); |
247 | menu_add_expr(P_CHOICE, NULL, NULL); | 247 | menu_add_expr(P_CHOICE, NULL, NULL); |
248 | printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); | 248 | printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); |
@@ -456,9 +456,12 @@ expr: symbol { $$ = expr_alloc_symbol($1); } | |||
456 | ; | 456 | ; |
457 | 457 | ||
458 | symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } | 458 | symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } |
459 | | T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); } | 459 | | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); } |
460 | ; | 460 | ; |
461 | 461 | ||
462 | word_opt: /* empty */ { $$ = NULL; } | ||
463 | | T_WORD | ||
464 | |||
462 | %% | 465 | %% |
463 | 466 | ||
464 | void conf_parse(const char *name) | 467 | void conf_parse(const char *name) |
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 769b69db89c1..cea4a790e1e9 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
@@ -51,6 +51,15 @@ do { \ | |||
51 | sprintf(str + strlen(str), "*"); \ | 51 | sprintf(str + strlen(str), "*"); \ |
52 | } while(0) | 52 | } while(0) |
53 | 53 | ||
54 | /* Always end in a wildcard, for future extension */ | ||
55 | static inline void add_wildcard(char *str) | ||
56 | { | ||
57 | int len = strlen(str); | ||
58 | |||
59 | if (str[len - 1] != '*') | ||
60 | strcat(str + len, "*"); | ||
61 | } | ||
62 | |||
54 | unsigned int cross_build = 0; | 63 | unsigned int cross_build = 0; |
55 | /** | 64 | /** |
56 | * Check that sizeof(device_id type) are consistent with size of section | 65 | * Check that sizeof(device_id type) are consistent with size of section |
@@ -133,9 +142,7 @@ static void do_usb_entry(struct usb_device_id *id, | |||
133 | id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL, | 142 | id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL, |
134 | id->bInterfaceProtocol); | 143 | id->bInterfaceProtocol); |
135 | 144 | ||
136 | /* Always end in a wildcard, for future extension */ | 145 | add_wildcard(alias); |
137 | if (alias[strlen(alias)-1] != '*') | ||
138 | strcat(alias, "*"); | ||
139 | buf_printf(&mod->dev_table_buf, | 146 | buf_printf(&mod->dev_table_buf, |
140 | "MODULE_ALIAS(\"%s\");\n", alias); | 147 | "MODULE_ALIAS(\"%s\");\n", alias); |
141 | } | 148 | } |
@@ -219,6 +226,7 @@ static int do_ieee1394_entry(const char *filename, | |||
219 | ADD(alias, "ver", id->match_flags & IEEE1394_MATCH_VERSION, | 226 | ADD(alias, "ver", id->match_flags & IEEE1394_MATCH_VERSION, |
220 | id->version); | 227 | id->version); |
221 | 228 | ||
229 | add_wildcard(alias); | ||
222 | return 1; | 230 | return 1; |
223 | } | 231 | } |
224 | 232 | ||
@@ -261,6 +269,7 @@ static int do_pci_entry(const char *filename, | |||
261 | ADD(alias, "bc", baseclass_mask == 0xFF, baseclass); | 269 | ADD(alias, "bc", baseclass_mask == 0xFF, baseclass); |
262 | ADD(alias, "sc", subclass_mask == 0xFF, subclass); | 270 | ADD(alias, "sc", subclass_mask == 0xFF, subclass); |
263 | ADD(alias, "i", interface_mask == 0xFF, interface); | 271 | ADD(alias, "i", interface_mask == 0xFF, interface); |
272 | add_wildcard(alias); | ||
264 | return 1; | 273 | return 1; |
265 | } | 274 | } |
266 | 275 | ||
@@ -283,6 +292,7 @@ static int do_ccw_entry(const char *filename, | |||
283 | id->dev_type); | 292 | id->dev_type); |
284 | ADD(alias, "dm", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_MODEL, | 293 | ADD(alias, "dm", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_MODEL, |
285 | id->dev_model); | 294 | id->dev_model); |
295 | add_wildcard(alias); | ||
286 | return 1; | 296 | return 1; |
287 | } | 297 | } |
288 | 298 | ||
@@ -290,7 +300,7 @@ static int do_ccw_entry(const char *filename, | |||
290 | static int do_ap_entry(const char *filename, | 300 | static int do_ap_entry(const char *filename, |
291 | struct ap_device_id *id, char *alias) | 301 | struct ap_device_id *id, char *alias) |
292 | { | 302 | { |
293 | sprintf(alias, "ap:t%02X", id->dev_type); | 303 | sprintf(alias, "ap:t%02X*", id->dev_type); |
294 | return 1; | 304 | return 1; |
295 | } | 305 | } |
296 | 306 | ||
@@ -309,6 +319,7 @@ static int do_serio_entry(const char *filename, | |||
309 | ADD(alias, "id", id->id != SERIO_ANY, id->id); | 319 | ADD(alias, "id", id->id != SERIO_ANY, id->id); |
310 | ADD(alias, "ex", id->extra != SERIO_ANY, id->extra); | 320 | ADD(alias, "ex", id->extra != SERIO_ANY, id->extra); |
311 | 321 | ||
322 | add_wildcard(alias); | ||
312 | return 1; | 323 | return 1; |
313 | } | 324 | } |
314 | 325 | ||
@@ -316,7 +327,7 @@ static int do_serio_entry(const char *filename, | |||
316 | static int do_acpi_entry(const char *filename, | 327 | static int do_acpi_entry(const char *filename, |
317 | struct acpi_device_id *id, char *alias) | 328 | struct acpi_device_id *id, char *alias) |
318 | { | 329 | { |
319 | sprintf(alias, "acpi*:%s:", id->id); | 330 | sprintf(alias, "acpi*:%s:*", id->id); |
320 | return 1; | 331 | return 1; |
321 | } | 332 | } |
322 | 333 | ||
@@ -324,7 +335,7 @@ static int do_acpi_entry(const char *filename, | |||
324 | static int do_pnp_entry(const char *filename, | 335 | static int do_pnp_entry(const char *filename, |
325 | struct pnp_device_id *id, char *alias) | 336 | struct pnp_device_id *id, char *alias) |
326 | { | 337 | { |
327 | sprintf(alias, "pnp:d%s", id->id); | 338 | sprintf(alias, "pnp:d%s*", id->id); |
328 | return 1; | 339 | return 1; |
329 | } | 340 | } |
330 | 341 | ||
@@ -409,6 +420,7 @@ static int do_pcmcia_entry(const char *filename, | |||
409 | ADD(alias, "pc", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3, id->prod_id_hash[2]); | 420 | ADD(alias, "pc", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3, id->prod_id_hash[2]); |
410 | ADD(alias, "pd", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4, id->prod_id_hash[3]); | 421 | ADD(alias, "pd", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4, id->prod_id_hash[3]); |
411 | 422 | ||
423 | add_wildcard(alias); | ||
412 | return 1; | 424 | return 1; |
413 | } | 425 | } |
414 | 426 | ||
@@ -432,6 +444,7 @@ static int do_of_entry (const char *filename, struct of_device_id *of, char *ali | |||
432 | if (isspace (*tmp)) | 444 | if (isspace (*tmp)) |
433 | *tmp = '_'; | 445 | *tmp = '_'; |
434 | 446 | ||
447 | add_wildcard(alias); | ||
435 | return 1; | 448 | return 1; |
436 | } | 449 | } |
437 | 450 | ||
@@ -448,6 +461,7 @@ static int do_vio_entry(const char *filename, struct vio_device_id *vio, | |||
448 | if (isspace (*tmp)) | 461 | if (isspace (*tmp)) |
449 | *tmp = '_'; | 462 | *tmp = '_'; |
450 | 463 | ||
464 | add_wildcard(alias); | ||
451 | return 1; | 465 | return 1; |
452 | } | 466 | } |
453 | 467 | ||
@@ -511,6 +525,8 @@ static int do_eisa_entry(const char *filename, struct eisa_device_id *eisa, | |||
511 | { | 525 | { |
512 | if (eisa->sig[0]) | 526 | if (eisa->sig[0]) |
513 | sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", eisa->sig); | 527 | sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", eisa->sig); |
528 | else | ||
529 | strcat(alias, "*"); | ||
514 | return 1; | 530 | return 1; |
515 | } | 531 | } |
516 | 532 | ||
@@ -529,6 +545,7 @@ static int do_parisc_entry(const char *filename, struct parisc_device_id *id, | |||
529 | ADD(alias, "rev", id->hversion_rev != PA_HVERSION_REV_ANY_ID, id->hversion_rev); | 545 | ADD(alias, "rev", id->hversion_rev != PA_HVERSION_REV_ANY_ID, id->hversion_rev); |
530 | ADD(alias, "sv", id->sversion != PA_SVERSION_ANY_ID, id->sversion); | 546 | ADD(alias, "sv", id->sversion != PA_SVERSION_ANY_ID, id->sversion); |
531 | 547 | ||
548 | add_wildcard(alias); | ||
532 | return 1; | 549 | return 1; |
533 | } | 550 | } |
534 | 551 | ||
@@ -544,6 +561,7 @@ static int do_sdio_entry(const char *filename, | |||
544 | ADD(alias, "c", id->class != (__u8)SDIO_ANY_ID, id->class); | 561 | ADD(alias, "c", id->class != (__u8)SDIO_ANY_ID, id->class); |
545 | ADD(alias, "v", id->vendor != (__u16)SDIO_ANY_ID, id->vendor); | 562 | ADD(alias, "v", id->vendor != (__u16)SDIO_ANY_ID, id->vendor); |
546 | ADD(alias, "d", id->device != (__u16)SDIO_ANY_ID, id->device); | 563 | ADD(alias, "d", id->device != (__u16)SDIO_ANY_ID, id->device); |
564 | add_wildcard(alias); | ||
547 | return 1; | 565 | return 1; |
548 | } | 566 | } |
549 | 567 | ||
@@ -559,6 +577,7 @@ static int do_ssb_entry(const char *filename, | |||
559 | ADD(alias, "v", id->vendor != SSB_ANY_VENDOR, id->vendor); | 577 | ADD(alias, "v", id->vendor != SSB_ANY_VENDOR, id->vendor); |
560 | ADD(alias, "id", id->coreid != SSB_ANY_ID, id->coreid); | 578 | ADD(alias, "id", id->coreid != SSB_ANY_ID, id->coreid); |
561 | ADD(alias, "rev", id->revision != SSB_ANY_REV, id->revision); | 579 | ADD(alias, "rev", id->revision != SSB_ANY_REV, id->revision); |
580 | add_wildcard(alias); | ||
562 | return 1; | 581 | return 1; |
563 | } | 582 | } |
564 | 583 | ||
@@ -573,6 +592,16 @@ static int do_virtio_entry(const char *filename, struct virtio_device_id *id, | |||
573 | ADD(alias, "d", 1, id->device); | 592 | ADD(alias, "d", 1, id->device); |
574 | ADD(alias, "v", id->vendor != VIRTIO_DEV_ANY_ID, id->vendor); | 593 | ADD(alias, "v", id->vendor != VIRTIO_DEV_ANY_ID, id->vendor); |
575 | 594 | ||
595 | add_wildcard(alias); | ||
596 | return 1; | ||
597 | } | ||
598 | |||
599 | /* Looks like: i2c:S */ | ||
600 | static int do_i2c_entry(const char *filename, struct i2c_device_id *id, | ||
601 | char *alias) | ||
602 | { | ||
603 | sprintf(alias, I2C_MODULE_PREFIX "%s", id->name); | ||
604 | |||
576 | return 1; | 605 | return 1; |
577 | } | 606 | } |
578 | 607 | ||
@@ -603,9 +632,6 @@ static void do_table(void *symval, unsigned long size, | |||
603 | 632 | ||
604 | for (i = 0; i < size; i += id_size) { | 633 | for (i = 0; i < size; i += id_size) { |
605 | if (do_entry(mod->name, symval+i, alias)) { | 634 | if (do_entry(mod->name, symval+i, alias)) { |
606 | /* Always end in a wildcard, for future extension */ | ||
607 | if (alias[strlen(alias)-1] != '*') | ||
608 | strcat(alias, "*"); | ||
609 | buf_printf(&mod->dev_table_buf, | 635 | buf_printf(&mod->dev_table_buf, |
610 | "MODULE_ALIAS(\"%s\");\n", alias); | 636 | "MODULE_ALIAS(\"%s\");\n", alias); |
611 | } | 637 | } |
@@ -704,6 +730,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, | |||
704 | do_table(symval, sym->st_size, | 730 | do_table(symval, sym->st_size, |
705 | sizeof(struct virtio_device_id), "virtio", | 731 | sizeof(struct virtio_device_id), "virtio", |
706 | do_virtio_entry, mod); | 732 | do_virtio_entry, mod); |
733 | else if (sym_is(symname, "__mod_i2c_device_table")) | ||
734 | do_table(symval, sym->st_size, | ||
735 | sizeof(struct i2c_device_id), "i2c", | ||
736 | do_i2c_entry, mod); | ||
707 | free(zeros); | 737 | free(zeros); |
708 | } | 738 | } |
709 | 739 | ||