summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-09-08 00:39:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-08 00:39:15 -0400
commit5969d1bb3082b41eba8fd2c826559abe38ccb6df (patch)
tree39f72fe44d2842ee29e89b0d23c61569fa7f725c /scripts
parent572c01ba19ef150e98aea0b45ca17d43356521b5 (diff)
parentbb3290d91695bb1ae78ab86f18fb4d7ad8e5ebcc (diff)
Merge branch 'gperf-removal'
Remove our use of 'gperf' for generating perfect hashes from some of our build tools. This removal was prompted by Masahiro Yamada sending out a patch that removes all our pre-generated files, and when I tested it, I noticed that the gperf version I have (3.1) apparently generates code that no longer works with out code-base because the function interfaces generated by gperf have changed. We really don't care that much, and the gperf people changed their interfaces in ways that makes it annoying to work with them. Tools that make it hard to use them should not be used, and the kernel is not at all interested in some autoconf mess. So remove the gperf dependency entirely. It turns out that if you ignore the pre-generated files, the use of gperf apparently saved us a whopping fifteen lines of code. It obviously wasn't worth it, considering that the pre-generated files are about 500 lines. I sent this out as a patch about three weeks ago, and got absolutely zero responses. So let's see if anybody notices now that I merge it. Because there might be serious bugs here, but it WorksForMe(tm). * gperf-removal: Remove gperf usage from toolchain
Diffstat (limited to 'scripts')
-rw-r--r--scripts/genksyms/Makefile4
-rw-r--r--scripts/genksyms/keywords.c74
-rw-r--r--scripts/genksyms/keywords.gperf61
-rw-r--r--scripts/genksyms/keywords.hash.c_shipped230
-rw-r--r--scripts/genksyms/lex.l8
-rw-r--r--scripts/genksyms/lex.lex.c_shipped8
-rw-r--r--scripts/kconfig/.gitignore1
-rw-r--r--scripts/kconfig/Makefile4
-rw-r--r--scripts/kconfig/kconf_id.c54
-rw-r--r--scripts/kconfig/lkc.h2
-rw-r--r--scripts/kconfig/zconf.gperf50
-rw-r--r--scripts/kconfig/zconf.hash.c_shipped297
-rw-r--r--scripts/kconfig/zconf.tab.c_shipped10
-rw-r--r--scripts/kconfig/zconf.y10
14 files changed, 151 insertions, 662 deletions
diff --git a/scripts/genksyms/Makefile b/scripts/genksyms/Makefile
index aca33b98bf63..3c23bab3367b 100644
--- a/scripts/genksyms/Makefile
+++ b/scripts/genksyms/Makefile
@@ -9,6 +9,6 @@ HOSTCFLAGS_parse.tab.o := -I$(src)
9HOSTCFLAGS_lex.lex.o := -I$(src) 9HOSTCFLAGS_lex.lex.o := -I$(src)
10 10
11# dependencies on generated files need to be listed explicitly 11# dependencies on generated files need to be listed explicitly
12$(obj)/lex.lex.o: $(obj)/keywords.hash.c $(obj)/parse.tab.h 12$(obj)/lex.lex.o: $(obj)/parse.tab.h
13 13
14clean-files := keywords.hash.c lex.lex.c parse.tab.c parse.tab.h 14clean-files := lex.lex.c parse.tab.c parse.tab.h
diff --git a/scripts/genksyms/keywords.c b/scripts/genksyms/keywords.c
new file mode 100644
index 000000000000..9f40bcd17d07
--- /dev/null
+++ b/scripts/genksyms/keywords.c
@@ -0,0 +1,74 @@
1static struct resword {
2 const char *name;
3 int token;
4} keywords[] = {
5 { "EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW },
6 { "EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW },
7 { "EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW },
8 { "EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW },
9 { "EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW },
10 { "__asm", ASM_KEYW },
11 { "__asm__", ASM_KEYW },
12 { "__attribute", ATTRIBUTE_KEYW },
13 { "__attribute__", ATTRIBUTE_KEYW },
14 { "__const", CONST_KEYW },
15 { "__const__", CONST_KEYW },
16 { "__extension__", EXTENSION_KEYW },
17 { "__inline", INLINE_KEYW },
18 { "__inline__", INLINE_KEYW },
19 { "__signed", SIGNED_KEYW },
20 { "__signed__", SIGNED_KEYW },
21 { "__typeof", TYPEOF_KEYW },
22 { "__typeof__", TYPEOF_KEYW },
23 { "__volatile", VOLATILE_KEYW },
24 { "__volatile__", VOLATILE_KEYW },
25 { "__builtin_va_list", VA_LIST_KEYW },
26
27 // According to rth, c99 defines "_Bool", __restrict", __restrict__", "restrict". KAO
28 { "_Bool", BOOL_KEYW },
29 { "_restrict", RESTRICT_KEYW },
30 { "__restrict__", RESTRICT_KEYW },
31 { "restrict", RESTRICT_KEYW },
32 { "asm", ASM_KEYW },
33
34 // attribute commented out in modutils 2.4.2. People are using 'attribute' as a
35 // field name which breaks the genksyms parser. It is not a gcc keyword anyway.
36 // KAO. },
37 // { "attribute", ATTRIBUTE_KEYW },
38
39 { "auto", AUTO_KEYW },
40 { "char", CHAR_KEYW },
41 { "const", CONST_KEYW },
42 { "double", DOUBLE_KEYW },
43 { "enum", ENUM_KEYW },
44 { "extern", EXTERN_KEYW },
45 { "float", FLOAT_KEYW },
46 { "inline", INLINE_KEYW },
47 { "int", INT_KEYW },
48 { "long", LONG_KEYW },
49 { "register", REGISTER_KEYW },
50 { "short", SHORT_KEYW },
51 { "signed", SIGNED_KEYW },
52 { "static", STATIC_KEYW },
53 { "struct", STRUCT_KEYW },
54 { "typedef", TYPEDEF_KEYW },
55 { "typeof", TYPEOF_KEYW },
56 { "union", UNION_KEYW },
57 { "unsigned", UNSIGNED_KEYW },
58 { "void", VOID_KEYW },
59 { "volatile", VOLATILE_KEYW },
60};
61
62#define NR_KEYWORDS (sizeof(keywords)/sizeof(struct resword))
63
64static int is_reserved_word(register const char *str, register unsigned int len)
65{
66 int i;
67 for (i = 0; i < NR_KEYWORDS; i++) {
68 struct resword *r = keywords + i;
69 int l = strlen(r->name);
70 if (len == l && !memcmp(str, r->name, len))
71 return r->token;
72 }
73 return -1;
74}
diff --git a/scripts/genksyms/keywords.gperf b/scripts/genksyms/keywords.gperf
deleted file mode 100644
index bd4c4b235588..000000000000
--- a/scripts/genksyms/keywords.gperf
+++ /dev/null
@@ -1,61 +0,0 @@
1%language=ANSI-C
2%define hash-function-name is_reserved_hash
3%define lookup-function-name is_reserved_word
4%{
5struct resword;
6static const struct resword *is_reserved_word(register const char *str, register unsigned int len);
7%}
8struct resword { const char *name; int token; }
9%%
10EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW
11EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
12EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW
13EXPORT_UNUSED_SYMBOL, EXPORT_SYMBOL_KEYW
14EXPORT_UNUSED_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
15__asm, ASM_KEYW
16__asm__, ASM_KEYW
17__attribute, ATTRIBUTE_KEYW
18__attribute__, ATTRIBUTE_KEYW
19__const, CONST_KEYW
20__const__, CONST_KEYW
21__extension__, EXTENSION_KEYW
22__inline, INLINE_KEYW
23__inline__, INLINE_KEYW
24__signed, SIGNED_KEYW
25__signed__, SIGNED_KEYW
26__typeof, TYPEOF_KEYW
27__typeof__, TYPEOF_KEYW
28__volatile, VOLATILE_KEYW
29__volatile__, VOLATILE_KEYW
30__builtin_va_list, VA_LIST_KEYW
31# According to rth, c99 defines _Bool, __restrict, __restrict__, restrict. KAO
32_Bool, BOOL_KEYW
33_restrict, RESTRICT_KEYW
34__restrict__, RESTRICT_KEYW
35restrict, RESTRICT_KEYW
36asm, ASM_KEYW
37# attribute commented out in modutils 2.4.2. People are using 'attribute' as a
38# field name which breaks the genksyms parser. It is not a gcc keyword anyway.
39# KAO.
40# attribute, ATTRIBUTE_KEYW
41auto, AUTO_KEYW
42char, CHAR_KEYW
43const, CONST_KEYW
44double, DOUBLE_KEYW
45enum, ENUM_KEYW
46extern, EXTERN_KEYW
47float, FLOAT_KEYW
48inline, INLINE_KEYW
49int, INT_KEYW
50long, LONG_KEYW
51register, REGISTER_KEYW
52short, SHORT_KEYW
53signed, SIGNED_KEYW
54static, STATIC_KEYW
55struct, STRUCT_KEYW
56typedef, TYPEDEF_KEYW
57typeof, TYPEOF_KEYW
58union, UNION_KEYW
59unsigned, UNSIGNED_KEYW
60void, VOID_KEYW
61volatile, VOLATILE_KEYW
diff --git a/scripts/genksyms/keywords.hash.c_shipped b/scripts/genksyms/keywords.hash.c_shipped
deleted file mode 100644
index 738018ba7375..000000000000
--- a/scripts/genksyms/keywords.hash.c_shipped
+++ /dev/null
@@ -1,230 +0,0 @@
1/* ANSI-C code produced by gperf version 3.0.4 */
2/* Command-line: gperf -t --output-file scripts/genksyms/keywords.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/genksyms/keywords.gperf */
3
4#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
5 && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
6 && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
7 && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
8 && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
9 && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
10 && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
11 && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
12 && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
13 && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
14 && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
15 && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
16 && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
17 && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
18 && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
19 && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
20 && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
21 && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
22 && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
23 && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
24 && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
25 && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
26 && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
27/* The character set is not based on ISO-646. */
28#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
29#endif
30
31#line 4 "scripts/genksyms/keywords.gperf"
32
33struct resword;
34static const struct resword *is_reserved_word(register const char *str, register unsigned int len);
35#line 8 "scripts/genksyms/keywords.gperf"
36struct resword { const char *name; int token; };
37/* maximum key range = 98, duplicates = 0 */
38
39#ifdef __GNUC__
40__inline
41#else
42#ifdef __cplusplus
43inline
44#endif
45#endif
46static unsigned int
47is_reserved_hash (register const char *str, register unsigned int len)
48{
49 static const unsigned char asso_values[] =
50 {
51 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
52 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
53 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
54 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
55 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
56 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
57 101, 101, 101, 101, 101, 101, 101, 101, 101, 0,
58 101, 101, 101, 101, 101, 101, 15, 101, 101, 101,
59 0, 101, 101, 101, 101, 101, 101, 101, 101, 101,
60 101, 101, 101, 101, 101, 0, 101, 0, 0, 5,
61 25, 20, 55, 30, 101, 15, 101, 101, 10, 0,
62 10, 40, 10, 101, 10, 5, 0, 10, 15, 101,
63 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
64 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
65 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
66 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
67 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
68 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
69 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
70 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
71 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
72 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
73 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
74 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
75 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
76 101, 101, 101, 101, 101, 101
77 };
78 return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
79}
80
81#ifdef __GNUC__
82__inline
83#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
84__attribute__ ((__gnu_inline__))
85#endif
86#endif
87const struct resword *
88is_reserved_word (register const char *str, register unsigned int len)
89{
90 enum
91 {
92 TOTAL_KEYWORDS = 47,
93 MIN_WORD_LENGTH = 3,
94 MAX_WORD_LENGTH = 24,
95 MIN_HASH_VALUE = 3,
96 MAX_HASH_VALUE = 100
97 };
98
99 static const struct resword wordlist[] =
100 {
101 {""}, {""}, {""},
102#line 36 "scripts/genksyms/keywords.gperf"
103 {"asm", ASM_KEYW},
104 {""},
105#line 15 "scripts/genksyms/keywords.gperf"
106 {"__asm", ASM_KEYW},
107 {""},
108#line 16 "scripts/genksyms/keywords.gperf"
109 {"__asm__", ASM_KEYW},
110 {""}, {""},
111#line 27 "scripts/genksyms/keywords.gperf"
112 {"__typeof__", TYPEOF_KEYW},
113 {""},
114#line 19 "scripts/genksyms/keywords.gperf"
115 {"__const", CONST_KEYW},
116#line 18 "scripts/genksyms/keywords.gperf"
117 {"__attribute__", ATTRIBUTE_KEYW},
118#line 20 "scripts/genksyms/keywords.gperf"
119 {"__const__", CONST_KEYW},
120#line 25 "scripts/genksyms/keywords.gperf"
121 {"__signed__", SIGNED_KEYW},
122#line 54 "scripts/genksyms/keywords.gperf"
123 {"static", STATIC_KEYW},
124#line 30 "scripts/genksyms/keywords.gperf"
125 {"__builtin_va_list", VA_LIST_KEYW},
126#line 49 "scripts/genksyms/keywords.gperf"
127 {"int", INT_KEYW},
128#line 42 "scripts/genksyms/keywords.gperf"
129 {"char", CHAR_KEYW},
130#line 43 "scripts/genksyms/keywords.gperf"
131 {"const", CONST_KEYW},
132#line 55 "scripts/genksyms/keywords.gperf"
133 {"struct", STRUCT_KEYW},
134#line 34 "scripts/genksyms/keywords.gperf"
135 {"__restrict__", RESTRICT_KEYW},
136#line 35 "scripts/genksyms/keywords.gperf"
137 {"restrict", RESTRICT_KEYW},
138#line 12 "scripts/genksyms/keywords.gperf"
139 {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
140#line 23 "scripts/genksyms/keywords.gperf"
141 {"__inline__", INLINE_KEYW},
142 {""},
143#line 29 "scripts/genksyms/keywords.gperf"
144 {"__volatile__", VOLATILE_KEYW},
145#line 10 "scripts/genksyms/keywords.gperf"
146 {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
147#line 33 "scripts/genksyms/keywords.gperf"
148 {"_restrict", RESTRICT_KEYW},
149 {""},
150#line 17 "scripts/genksyms/keywords.gperf"
151 {"__attribute", ATTRIBUTE_KEYW},
152#line 11 "scripts/genksyms/keywords.gperf"
153 {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
154#line 21 "scripts/genksyms/keywords.gperf"
155 {"__extension__", EXTENSION_KEYW},
156#line 45 "scripts/genksyms/keywords.gperf"
157 {"enum", ENUM_KEYW},
158#line 13 "scripts/genksyms/keywords.gperf"
159 {"EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW},
160#line 46 "scripts/genksyms/keywords.gperf"
161 {"extern", EXTERN_KEYW},
162 {""},
163#line 24 "scripts/genksyms/keywords.gperf"
164 {"__signed", SIGNED_KEYW},
165#line 14 "scripts/genksyms/keywords.gperf"
166 {"EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
167#line 58 "scripts/genksyms/keywords.gperf"
168 {"union", UNION_KEYW},
169 {""}, {""},
170#line 22 "scripts/genksyms/keywords.gperf"
171 {"__inline", INLINE_KEYW},
172#line 41 "scripts/genksyms/keywords.gperf"
173 {"auto", AUTO_KEYW},
174#line 28 "scripts/genksyms/keywords.gperf"
175 {"__volatile", VOLATILE_KEYW},
176 {""}, {""},
177#line 59 "scripts/genksyms/keywords.gperf"
178 {"unsigned", UNSIGNED_KEYW},
179 {""},
180#line 52 "scripts/genksyms/keywords.gperf"
181 {"short", SHORT_KEYW},
182#line 48 "scripts/genksyms/keywords.gperf"
183 {"inline", INLINE_KEYW},
184 {""},
185#line 61 "scripts/genksyms/keywords.gperf"
186 {"volatile", VOLATILE_KEYW},
187#line 50 "scripts/genksyms/keywords.gperf"
188 {"long", LONG_KEYW},
189#line 32 "scripts/genksyms/keywords.gperf"
190 {"_Bool", BOOL_KEYW},
191 {""}, {""},
192#line 51 "scripts/genksyms/keywords.gperf"
193 {"register", REGISTER_KEYW},
194#line 60 "scripts/genksyms/keywords.gperf"
195 {"void", VOID_KEYW},
196 {""},
197#line 44 "scripts/genksyms/keywords.gperf"
198 {"double", DOUBLE_KEYW},
199 {""},
200#line 26 "scripts/genksyms/keywords.gperf"
201 {"__typeof", TYPEOF_KEYW},
202 {""}, {""},
203#line 53 "scripts/genksyms/keywords.gperf"
204 {"signed", SIGNED_KEYW},
205 {""}, {""}, {""}, {""},
206#line 57 "scripts/genksyms/keywords.gperf"
207 {"typeof", TYPEOF_KEYW},
208#line 56 "scripts/genksyms/keywords.gperf"
209 {"typedef", TYPEDEF_KEYW},
210 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
211 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
212 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
213#line 47 "scripts/genksyms/keywords.gperf"
214 {"float", FLOAT_KEYW}
215 };
216
217 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
218 {
219 register int key = is_reserved_hash (str, len);
220
221 if (key <= MAX_HASH_VALUE && key >= 0)
222 {
223 register const char *s = wordlist[key].name;
224
225 if (*str == *s && !strcmp (str + 1, s + 1))
226 return &wordlist[key];
227 }
228 }
229 return 0;
230}
diff --git a/scripts/genksyms/lex.l b/scripts/genksyms/lex.l
index 5235aa507ba5..5dc25ee01c77 100644
--- a/scripts/genksyms/lex.l
+++ b/scripts/genksyms/lex.l
@@ -94,7 +94,7 @@ MC_TOKEN ([~%^&*+=|<>/-]=)|(&&)|("||")|(->)|(<<)|(>>)
94 94
95/* Bring in the keyword recognizer. */ 95/* Bring in the keyword recognizer. */
96 96
97#include "keywords.hash.c" 97#include "keywords.c"
98 98
99 99
100/* Macros to append to our phrase collection list. */ 100/* Macros to append to our phrase collection list. */
@@ -186,10 +186,10 @@ repeat:
186 case IDENT: 186 case IDENT:
187 APP; 187 APP;
188 { 188 {
189 const struct resword *r = is_reserved_word(yytext, yyleng); 189 int r = is_reserved_word(yytext, yyleng);
190 if (r) 190 if (r >= 0)
191 { 191 {
192 switch (token = r->token) 192 switch (token = r)
193 { 193 {
194 case ATTRIBUTE_KEYW: 194 case ATTRIBUTE_KEYW:
195 lexstate = ST_ATTRIBUTE; 195 lexstate = ST_ATTRIBUTE;
diff --git a/scripts/genksyms/lex.lex.c_shipped b/scripts/genksyms/lex.lex.c_shipped
index 985c5541aae4..d5a7474b3e57 100644
--- a/scripts/genksyms/lex.lex.c_shipped
+++ b/scripts/genksyms/lex.lex.c_shipped
@@ -1905,7 +1905,7 @@ void yyfree (void * ptr )
1905 1905
1906/* Bring in the keyword recognizer. */ 1906/* Bring in the keyword recognizer. */
1907 1907
1908#include "keywords.hash.c" 1908#include "keywords.c"
1909 1909
1910/* Macros to append to our phrase collection list. */ 1910/* Macros to append to our phrase collection list. */
1911 1911
@@ -1995,10 +1995,10 @@ repeat:
1995 case IDENT: 1995 case IDENT:
1996 APP; 1996 APP;
1997 { 1997 {
1998 const struct resword *r = is_reserved_word(yytext, yyleng); 1998 int r = is_reserved_word(yytext, yyleng);
1999 if (r) 1999 if (r >= 0)
2000 { 2000 {
2001 switch (token = r->token) 2001 switch (token = r)
2002 { 2002 {
2003 case ATTRIBUTE_KEYW: 2003 case ATTRIBUTE_KEYW:
2004 lexstate = ST_ATTRIBUTE; 2004 lexstate = ST_ATTRIBUTE;
diff --git a/scripts/kconfig/.gitignore b/scripts/kconfig/.gitignore
index be603c4fef62..51f1c877b543 100644
--- a/scripts/kconfig/.gitignore
+++ b/scripts/kconfig/.gitignore
@@ -5,7 +5,6 @@ config*
5*.lex.c 5*.lex.c
6*.tab.c 6*.tab.c
7*.tab.h 7*.tab.h
8zconf.hash.c
9*.moc 8*.moc
10gconf.glade.h 9gconf.glade.h
11*.pot 10*.pot
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index eb8144643b78..8c12c20c55a6 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -191,7 +191,7 @@ gconf-objs := gconf.o zconf.tab.o
191hostprogs-y := conf nconf mconf kxgettext qconf gconf 191hostprogs-y := conf nconf mconf kxgettext qconf gconf
192 192
193clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck 193clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
194clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h 194clean-files += zconf.tab.c zconf.lex.c gconf.glade.h
195clean-files += config.pot linux.pot 195clean-files += config.pot linux.pot
196 196
197# Check that we have the required ncurses stuff installed for lxdialog (menuconfig) 197# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
@@ -280,7 +280,7 @@ $(obj)/.tmp_gtkcheck:
280 fi 280 fi
281endif 281endif
282 282
283$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c 283$(obj)/zconf.tab.o: $(obj)/zconf.lex.c
284 284
285$(obj)/qconf.o: $(obj)/qconf.moc 285$(obj)/qconf.o: $(obj)/qconf.moc
286 286
diff --git a/scripts/kconfig/kconf_id.c b/scripts/kconfig/kconf_id.c
new file mode 100644
index 000000000000..5abbc728fbc4
--- /dev/null
+++ b/scripts/kconfig/kconf_id.c
@@ -0,0 +1,54 @@
1
2static struct kconf_id kconf_id_array[] = {
3 { "mainmenu", T_MAINMENU, TF_COMMAND },
4 { "menu", T_MENU, TF_COMMAND },
5 { "endmenu", T_ENDMENU, TF_COMMAND },
6 { "source", T_SOURCE, TF_COMMAND },
7 { "choice", T_CHOICE, TF_COMMAND },
8 { "endchoice", T_ENDCHOICE, TF_COMMAND },
9 { "comment", T_COMMENT, TF_COMMAND },
10 { "config", T_CONFIG, TF_COMMAND },
11 { "menuconfig", T_MENUCONFIG, TF_COMMAND },
12 { "help", T_HELP, TF_COMMAND },
13 { "---help---", T_HELP, TF_COMMAND },
14 { "if", T_IF, TF_COMMAND|TF_PARAM },
15 { "endif", T_ENDIF, TF_COMMAND },
16 { "depends", T_DEPENDS, TF_COMMAND },
17 { "optional", T_OPTIONAL, TF_COMMAND },
18 { "default", T_DEFAULT, TF_COMMAND, S_UNKNOWN },
19 { "prompt", T_PROMPT, TF_COMMAND },
20 { "tristate", T_TYPE, TF_COMMAND, S_TRISTATE },
21 { "def_tristate", T_DEFAULT, TF_COMMAND, S_TRISTATE },
22 { "bool", T_TYPE, TF_COMMAND, S_BOOLEAN },
23 { "boolean", T_TYPE, TF_COMMAND, S_BOOLEAN },
24 { "def_bool", T_DEFAULT, TF_COMMAND, S_BOOLEAN },
25 { "int", T_TYPE, TF_COMMAND, S_INT },
26 { "hex", T_TYPE, TF_COMMAND, S_HEX },
27 { "string", T_TYPE, TF_COMMAND, S_STRING },
28 { "select", T_SELECT, TF_COMMAND },
29 { "imply", T_IMPLY, TF_COMMAND },
30 { "range", T_RANGE, TF_COMMAND },
31 { "visible", T_VISIBLE, TF_COMMAND },
32 { "option", T_OPTION, TF_COMMAND },
33 { "on", T_ON, TF_PARAM },
34 { "modules", T_OPT_MODULES, TF_OPTION },
35 { "defconfig_list", T_OPT_DEFCONFIG_LIST, TF_OPTION },
36 { "env", T_OPT_ENV, TF_OPTION },
37 { "allnoconfig_y", T_OPT_ALLNOCONFIG_Y, TF_OPTION },
38};
39
40#define KCONF_ID_ARRAY_SIZE (sizeof(kconf_id_array)/sizeof(struct kconf_id))
41
42static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len)
43{
44 int i;
45
46 for (i = 0; i < KCONF_ID_ARRAY_SIZE; i++) {
47 struct kconf_id *id = kconf_id_array+i;
48 int l = strlen(id->name);
49
50 if (len == l && !memcmp(str, id->name, len))
51 return id;
52 }
53 return NULL;
54}
diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h
index 91ca126ea080..cdcbe43e87b3 100644
--- a/scripts/kconfig/lkc.h
+++ b/scripts/kconfig/lkc.h
@@ -62,7 +62,7 @@ enum conf_def_mode {
62#define T_OPT_ALLNOCONFIG_Y 4 62#define T_OPT_ALLNOCONFIG_Y 4
63 63
64struct kconf_id { 64struct kconf_id {
65 int name; 65 const char *name;
66 int token; 66 int token;
67 unsigned int flags; 67 unsigned int flags;
68 enum symbol_type stype; 68 enum symbol_type stype;
diff --git a/scripts/kconfig/zconf.gperf b/scripts/kconfig/zconf.gperf
deleted file mode 100644
index ead02edec936..000000000000
--- a/scripts/kconfig/zconf.gperf
+++ /dev/null
@@ -1,50 +0,0 @@
1%language=ANSI-C
2%define hash-function-name kconf_id_hash
3%define lookup-function-name kconf_id_lookup
4%define string-pool-name kconf_id_strings
5%compare-strncmp
6%enum
7%pic
8%struct-type
9
10struct kconf_id;
11
12static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
13
14%%
15mainmenu, T_MAINMENU, TF_COMMAND
16menu, T_MENU, TF_COMMAND
17endmenu, T_ENDMENU, TF_COMMAND
18source, T_SOURCE, TF_COMMAND
19choice, T_CHOICE, TF_COMMAND
20endchoice, T_ENDCHOICE, TF_COMMAND
21comment, T_COMMENT, TF_COMMAND
22config, T_CONFIG, TF_COMMAND
23menuconfig, T_MENUCONFIG, TF_COMMAND
24help, T_HELP, TF_COMMAND
25---help---, T_HELP, TF_COMMAND
26if, T_IF, TF_COMMAND|TF_PARAM
27endif, T_ENDIF, TF_COMMAND
28depends, T_DEPENDS, TF_COMMAND
29optional, T_OPTIONAL, TF_COMMAND
30default, T_DEFAULT, TF_COMMAND, S_UNKNOWN
31prompt, T_PROMPT, TF_COMMAND
32tristate, T_TYPE, TF_COMMAND, S_TRISTATE
33def_tristate, T_DEFAULT, TF_COMMAND, S_TRISTATE
34bool, T_TYPE, TF_COMMAND, S_BOOLEAN
35boolean, T_TYPE, TF_COMMAND, S_BOOLEAN
36def_bool, T_DEFAULT, TF_COMMAND, S_BOOLEAN
37int, T_TYPE, TF_COMMAND, S_INT
38hex, T_TYPE, TF_COMMAND, S_HEX
39string, T_TYPE, TF_COMMAND, S_STRING
40select, T_SELECT, TF_COMMAND
41imply, T_IMPLY, TF_COMMAND
42range, T_RANGE, TF_COMMAND
43visible, T_VISIBLE, TF_COMMAND
44option, T_OPTION, TF_COMMAND
45on, T_ON, TF_PARAM
46modules, T_OPT_MODULES, TF_OPTION
47defconfig_list, T_OPT_DEFCONFIG_LIST,TF_OPTION
48env, T_OPT_ENV, TF_OPTION
49allnoconfig_y, T_OPT_ALLNOCONFIG_Y,TF_OPTION
50%%
diff --git a/scripts/kconfig/zconf.hash.c_shipped b/scripts/kconfig/zconf.hash.c_shipped
deleted file mode 100644
index d51b15de074a..000000000000
--- a/scripts/kconfig/zconf.hash.c_shipped
+++ /dev/null
@@ -1,297 +0,0 @@
1/* ANSI-C code produced by gperf version 3.0.4 */
2/* Command-line: gperf -t --output-file scripts/kconfig/zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/kconfig/zconf.gperf */
3
4#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
5 && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
6 && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
7 && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
8 && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
9 && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
10 && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
11 && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
12 && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
13 && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
14 && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
15 && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
16 && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
17 && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
18 && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
19 && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
20 && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
21 && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
22 && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
23 && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
24 && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
25 && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
26 && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
27/* The character set is not based on ISO-646. */
28#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
29#endif
30
31#line 10 "scripts/kconfig/zconf.gperf"
32struct kconf_id;
33
34static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
35/* maximum key range = 71, duplicates = 0 */
36
37#ifdef __GNUC__
38__inline
39#else
40#ifdef __cplusplus
41inline
42#endif
43#endif
44static unsigned int
45kconf_id_hash (register const char *str, register unsigned int len)
46{
47 static const unsigned char asso_values[] =
48 {
49 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
50 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
51 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
52 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
53 73, 73, 73, 73, 73, 0, 73, 73, 73, 73,
54 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
55 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
56 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
57 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
58 73, 73, 73, 73, 73, 73, 73, 10, 25, 25,
59 0, 0, 0, 5, 0, 0, 73, 73, 5, 0,
60 10, 5, 45, 73, 20, 20, 0, 15, 15, 73,
61 20, 0, 73, 73, 73, 73, 73, 73, 73, 73,
62 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
63 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
64 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
65 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
66 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
67 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
68 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
69 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
70 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
71 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
72 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
73 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
74 73, 73, 73, 73, 73, 73
75 };
76 register int hval = len;
77
78 switch (hval)
79 {
80 default:
81 hval += asso_values[(unsigned char)str[2]];
82 /*FALLTHROUGH*/
83 case 2:
84 case 1:
85 hval += asso_values[(unsigned char)str[0]];
86 break;
87 }
88 return hval + asso_values[(unsigned char)str[len - 1]];
89}
90
91struct kconf_id_strings_t
92 {
93 char kconf_id_strings_str2[sizeof("if")];
94 char kconf_id_strings_str3[sizeof("int")];
95 char kconf_id_strings_str5[sizeof("endif")];
96 char kconf_id_strings_str7[sizeof("default")];
97 char kconf_id_strings_str8[sizeof("tristate")];
98 char kconf_id_strings_str9[sizeof("endchoice")];
99 char kconf_id_strings_str10[sizeof("---help---")];
100 char kconf_id_strings_str12[sizeof("def_tristate")];
101 char kconf_id_strings_str13[sizeof("def_bool")];
102 char kconf_id_strings_str14[sizeof("defconfig_list")];
103 char kconf_id_strings_str17[sizeof("on")];
104 char kconf_id_strings_str18[sizeof("optional")];
105 char kconf_id_strings_str21[sizeof("option")];
106 char kconf_id_strings_str22[sizeof("endmenu")];
107 char kconf_id_strings_str23[sizeof("mainmenu")];
108 char kconf_id_strings_str25[sizeof("menuconfig")];
109 char kconf_id_strings_str27[sizeof("modules")];
110 char kconf_id_strings_str28[sizeof("allnoconfig_y")];
111 char kconf_id_strings_str29[sizeof("menu")];
112 char kconf_id_strings_str31[sizeof("select")];
113 char kconf_id_strings_str32[sizeof("comment")];
114 char kconf_id_strings_str33[sizeof("env")];
115 char kconf_id_strings_str35[sizeof("range")];
116 char kconf_id_strings_str36[sizeof("choice")];
117 char kconf_id_strings_str39[sizeof("bool")];
118 char kconf_id_strings_str41[sizeof("source")];
119 char kconf_id_strings_str42[sizeof("visible")];
120 char kconf_id_strings_str43[sizeof("hex")];
121 char kconf_id_strings_str46[sizeof("config")];
122 char kconf_id_strings_str47[sizeof("boolean")];
123 char kconf_id_strings_str50[sizeof("imply")];
124 char kconf_id_strings_str51[sizeof("string")];
125 char kconf_id_strings_str54[sizeof("help")];
126 char kconf_id_strings_str56[sizeof("prompt")];
127 char kconf_id_strings_str72[sizeof("depends")];
128 };
129static const struct kconf_id_strings_t kconf_id_strings_contents =
130 {
131 "if",
132 "int",
133 "endif",
134 "default",
135 "tristate",
136 "endchoice",
137 "---help---",
138 "def_tristate",
139 "def_bool",
140 "defconfig_list",
141 "on",
142 "optional",
143 "option",
144 "endmenu",
145 "mainmenu",
146 "menuconfig",
147 "modules",
148 "allnoconfig_y",
149 "menu",
150 "select",
151 "comment",
152 "env",
153 "range",
154 "choice",
155 "bool",
156 "source",
157 "visible",
158 "hex",
159 "config",
160 "boolean",
161 "imply",
162 "string",
163 "help",
164 "prompt",
165 "depends"
166 };
167#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
168#ifdef __GNUC__
169__inline
170#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
171__attribute__ ((__gnu_inline__))
172#endif
173#endif
174const struct kconf_id *
175kconf_id_lookup (register const char *str, register unsigned int len)
176{
177 enum
178 {
179 TOTAL_KEYWORDS = 35,
180 MIN_WORD_LENGTH = 2,
181 MAX_WORD_LENGTH = 14,
182 MIN_HASH_VALUE = 2,
183 MAX_HASH_VALUE = 72
184 };
185
186 static const struct kconf_id wordlist[] =
187 {
188 {-1}, {-1},
189#line 26 "scripts/kconfig/zconf.gperf"
190 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM},
191#line 37 "scripts/kconfig/zconf.gperf"
192 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT},
193 {-1},
194#line 27 "scripts/kconfig/zconf.gperf"
195 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
196 {-1},
197#line 30 "scripts/kconfig/zconf.gperf"
198 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
199#line 32 "scripts/kconfig/zconf.gperf"
200 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_TYPE, TF_COMMAND, S_TRISTATE},
201#line 20 "scripts/kconfig/zconf.gperf"
202 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
203#line 25 "scripts/kconfig/zconf.gperf"
204 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_HELP, TF_COMMAND},
205 {-1},
206#line 33 "scripts/kconfig/zconf.gperf"
207 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_TRISTATE},
208#line 36 "scripts/kconfig/zconf.gperf"
209 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
210#line 47 "scripts/kconfig/zconf.gperf"
211 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_OPT_DEFCONFIG_LIST,TF_OPTION},
212 {-1}, {-1},
213#line 45 "scripts/kconfig/zconf.gperf"
214 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_ON, TF_PARAM},
215#line 29 "scripts/kconfig/zconf.gperf"
216 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_OPTIONAL, TF_COMMAND},
217 {-1}, {-1},
218#line 44 "scripts/kconfig/zconf.gperf"
219 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_OPTION, TF_COMMAND},
220#line 17 "scripts/kconfig/zconf.gperf"
221 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ENDMENU, TF_COMMAND},
222#line 15 "scripts/kconfig/zconf.gperf"
223 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_MAINMENU, TF_COMMAND},
224 {-1},
225#line 23 "scripts/kconfig/zconf.gperf"
226 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_MENUCONFIG, TF_COMMAND},
227 {-1},
228#line 46 "scripts/kconfig/zconf.gperf"
229 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
230#line 49 "scripts/kconfig/zconf.gperf"
231 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_OPT_ALLNOCONFIG_Y,TF_OPTION},
232#line 16 "scripts/kconfig/zconf.gperf"
233 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
234 {-1},
235#line 40 "scripts/kconfig/zconf.gperf"
236 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SELECT, TF_COMMAND},
237#line 21 "scripts/kconfig/zconf.gperf"
238 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
239#line 48 "scripts/kconfig/zconf.gperf"
240 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_OPT_ENV, TF_OPTION},
241 {-1},
242#line 42 "scripts/kconfig/zconf.gperf"
243 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_RANGE, TF_COMMAND},
244#line 19 "scripts/kconfig/zconf.gperf"
245 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_CHOICE, TF_COMMAND},
246 {-1}, {-1},
247#line 34 "scripts/kconfig/zconf.gperf"
248 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39, T_TYPE, TF_COMMAND, S_BOOLEAN},
249 {-1},
250#line 18 "scripts/kconfig/zconf.gperf"
251 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SOURCE, TF_COMMAND},
252#line 43 "scripts/kconfig/zconf.gperf"
253 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42, T_VISIBLE, TF_COMMAND},
254#line 38 "scripts/kconfig/zconf.gperf"
255 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43, T_TYPE, TF_COMMAND, S_HEX},
256 {-1}, {-1},
257#line 22 "scripts/kconfig/zconf.gperf"
258 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_CONFIG, TF_COMMAND},
259#line 35 "scripts/kconfig/zconf.gperf"
260 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47, T_TYPE, TF_COMMAND, S_BOOLEAN},
261 {-1}, {-1},
262#line 41 "scripts/kconfig/zconf.gperf"
263 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str50, T_IMPLY, TF_COMMAND},
264#line 39 "scripts/kconfig/zconf.gperf"
265 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51, T_TYPE, TF_COMMAND, S_STRING},
266 {-1}, {-1},
267#line 24 "scripts/kconfig/zconf.gperf"
268 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str54, T_HELP, TF_COMMAND},
269 {-1},
270#line 31 "scripts/kconfig/zconf.gperf"
271 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str56, T_PROMPT, TF_COMMAND},
272 {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
273 {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
274#line 28 "scripts/kconfig/zconf.gperf"
275 {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72, T_DEPENDS, TF_COMMAND}
276 };
277
278 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
279 {
280 register int key = kconf_id_hash (str, len);
281
282 if (key <= MAX_HASH_VALUE && key >= 0)
283 {
284 register int o = wordlist[key].name;
285 if (o >= 0)
286 {
287 register const char *s = o + kconf_id_strings;
288
289 if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
290 return &wordlist[key];
291 }
292 }
293 }
294 return 0;
295}
296#line 50 "scripts/kconfig/zconf.gperf"
297
diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped
index 65b7515a577c..a22b285d759f 100644
--- a/scripts/kconfig/zconf.tab.c_shipped
+++ b/scripts/kconfig/zconf.tab.c_shipped
@@ -209,8 +209,8 @@ int zconfparse (void);
209/* Copy the second part of user declarations. */ 209/* Copy the second part of user declarations. */
210 210
211 211
212/* Include zconf.hash.c here so it can see the token constants. */ 212/* Include kconf_id.c here so it can see the token constants. */
213#include "zconf.hash.c" 213#include "kconf_id.c"
214 214
215 215
216 216
@@ -1515,7 +1515,7 @@ yyreduce:
1515 case 12: 1515 case 12:
1516 1516
1517 { 1517 {
1518 zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[-2].id)->name); 1518 zconf_error("unexpected option \"%s\"", (yyvsp[-2].id)->name);
1519} 1519}
1520 1520
1521 break; 1521 break;
@@ -2268,13 +2268,13 @@ static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtok
2268{ 2268{
2269 if (id->token != endtoken) { 2269 if (id->token != endtoken) {
2270 zconf_error("unexpected '%s' within %s block", 2270 zconf_error("unexpected '%s' within %s block",
2271 kconf_id_strings + id->name, zconf_tokenname(starttoken)); 2271 id->name, zconf_tokenname(starttoken));
2272 zconfnerrs++; 2272 zconfnerrs++;
2273 return false; 2273 return false;
2274 } 2274 }
2275 if (current_menu->file != current_file) { 2275 if (current_menu->file != current_file) {
2276 zconf_error("'%s' in different file than '%s'", 2276 zconf_error("'%s' in different file than '%s'",
2277 kconf_id_strings + id->name, zconf_tokenname(starttoken)); 2277 id->name, zconf_tokenname(starttoken));
2278 fprintf(stderr, "%s:%d: location of the '%s'\n", 2278 fprintf(stderr, "%s:%d: location of the '%s'\n",
2279 current_menu->file->name, current_menu->lineno, 2279 current_menu->file->name, current_menu->lineno,
2280 zconf_tokenname(starttoken)); 2280 zconf_tokenname(starttoken));
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index 001305fa080b..c8f396c3b190 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -101,8 +101,8 @@ static struct menu *current_menu, *current_entry;
101} if_entry menu_entry choice_entry 101} if_entry menu_entry choice_entry
102 102
103%{ 103%{
104/* Include zconf.hash.c here so it can see the token constants. */ 104/* Include zconf_id.c here so it can see the token constants. */
105#include "zconf.hash.c" 105#include "kconf_id.c"
106%} 106%}
107 107
108%% 108%%
@@ -119,7 +119,7 @@ stmt_list:
119 | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); } 119 | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); }
120 | stmt_list option_name error T_EOL 120 | stmt_list option_name error T_EOL
121{ 121{
122 zconf_error("unexpected option \"%s\"", kconf_id_strings + $2->name); 122 zconf_error("unexpected option \"%s\"", $2->name);
123} 123}
124 | stmt_list error T_EOL { zconf_error("invalid statement"); } 124 | stmt_list error T_EOL { zconf_error("invalid statement"); }
125; 125;
@@ -551,13 +551,13 @@ static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtok
551{ 551{
552 if (id->token != endtoken) { 552 if (id->token != endtoken) {
553 zconf_error("unexpected '%s' within %s block", 553 zconf_error("unexpected '%s' within %s block",
554 kconf_id_strings + id->name, zconf_tokenname(starttoken)); 554 id->name, zconf_tokenname(starttoken));
555 zconfnerrs++; 555 zconfnerrs++;
556 return false; 556 return false;
557 } 557 }
558 if (current_menu->file != current_file) { 558 if (current_menu->file != current_file) {
559 zconf_error("'%s' in different file than '%s'", 559 zconf_error("'%s' in different file than '%s'",
560 kconf_id_strings + id->name, zconf_tokenname(starttoken)); 560 id->name, zconf_tokenname(starttoken));
561 fprintf(stderr, "%s:%d: location of the '%s'\n", 561 fprintf(stderr, "%s:%d: location of the '%s'\n",
562 current_menu->file->name, current_menu->lineno, 562 current_menu->file->name, current_menu->lineno,
563 zconf_tokenname(starttoken)); 563 zconf_tokenname(starttoken));