diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2011-11-13 14:55:35 -0500 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2011-11-13 14:55:53 -0500 |
| commit | 2290c0d06d82faee87b1ab2d9d4f7bf81ef64379 (patch) | |
| tree | e075e4d5534193f28e6059904f61e5ca03958d3c /scripts | |
| parent | 4da669a2e3e5bc70b30a0465f3641528681b5f77 (diff) | |
| parent | 52e4c2a05256cb83cda12f3c2137ab1533344edb (diff) | |
Merge branch 'master' into for-next
Sync with Linus tree to have 157550ff ("mtd: add GPMI-NAND driver
in the config and Makefile") as I have patch depending on that one.
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/Makefile.build | 2 | ||||
| -rw-r--r-- | scripts/Makefile.lib | 4 | ||||
| -rw-r--r-- | scripts/basic/fixdep.c | 1 | ||||
| -rwxr-xr-x | scripts/checkpatch.pl | 50 | ||||
| -rwxr-xr-x | scripts/extract-vmlinux | 62 | ||||
| -rw-r--r-- | scripts/genksyms/genksyms.c | 3 | ||||
| -rw-r--r-- | scripts/genksyms/genksyms.h | 4 | ||||
| -rw-r--r-- | scripts/genksyms/lex.l | 8 | ||||
| -rw-r--r-- | scripts/genksyms/lex.lex.c_shipped | 12 | ||||
| -rw-r--r-- | scripts/genksyms/parse.tab.c_shipped | 645 | ||||
| -rw-r--r-- | scripts/genksyms/parse.tab.h_shipped | 7 | ||||
| -rw-r--r-- | scripts/genksyms/parse.y | 40 | ||||
| -rw-r--r-- | scripts/kconfig/Makefile | 28 | ||||
| -rw-r--r-- | scripts/kconfig/confdata.c | 49 | ||||
| -rw-r--r-- | scripts/kconfig/lxdialog/textbox.c | 3 | ||||
| -rw-r--r-- | scripts/kconfig/mconf.c | 86 | ||||
| -rw-r--r-- | scripts/kconfig/menu.c | 13 | ||||
| -rw-r--r-- | scripts/kconfig/nconf.c | 23 | ||||
| -rw-r--r-- | scripts/kconfig/nconf.gui.c | 59 | ||||
| -rw-r--r-- | scripts/kconfig/nconf.h | 2 | ||||
| -rw-r--r-- | scripts/kconfig/streamline_config.pl | 22 | ||||
| -rw-r--r-- | scripts/mod/file2alias.c | 25 | ||||
| -rw-r--r-- | scripts/mod/modpost.c | 7 | ||||
| -rwxr-xr-x | scripts/tags.sh | 4 |
24 files changed, 711 insertions, 448 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index a0fd5029cfe7..d2b366c16b64 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
| @@ -46,7 +46,7 @@ include $(kbuild-file) | |||
| 46 | # If the save-* variables changed error out | 46 | # If the save-* variables changed error out |
| 47 | ifeq ($(KBUILD_NOPEDANTIC),) | 47 | ifeq ($(KBUILD_NOPEDANTIC),) |
| 48 | ifneq ("$(save-cflags)","$(CFLAGS)") | 48 | ifneq ("$(save-cflags)","$(CFLAGS)") |
| 49 | $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS) | 49 | $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y) |
| 50 | endif | 50 | endif |
| 51 | endif | 51 | endif |
| 52 | 52 | ||
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index aeea84a24836..5d986d9adf1b 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib | |||
| @@ -167,6 +167,7 @@ ifdef REGENERATE_PARSERS | |||
| 167 | quiet_cmd_gperf = GPERF $@ | 167 | quiet_cmd_gperf = GPERF $@ |
| 168 | cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $< | 168 | cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $< |
| 169 | 169 | ||
| 170 | .PRECIOUS: $(src)/%.hash.c_shipped | ||
| 170 | $(src)/%.hash.c_shipped: $(src)/%.gperf | 171 | $(src)/%.hash.c_shipped: $(src)/%.gperf |
| 171 | $(call cmd,gperf) | 172 | $(call cmd,gperf) |
| 172 | 173 | ||
| @@ -177,6 +178,7 @@ LEX_PREFIX = $(if $(LEX_PREFIX_${baseprereq}),$(LEX_PREFIX_${baseprereq}),yy) | |||
| 177 | quiet_cmd_flex = LEX $@ | 178 | quiet_cmd_flex = LEX $@ |
| 178 | cmd_flex = flex -o$@ -L -P $(LEX_PREFIX) $< | 179 | cmd_flex = flex -o$@ -L -P $(LEX_PREFIX) $< |
| 179 | 180 | ||
| 181 | .PRECIOUS: $(src)/%.lex.c_shipped | ||
| 180 | $(src)/%.lex.c_shipped: $(src)/%.l | 182 | $(src)/%.lex.c_shipped: $(src)/%.l |
| 181 | $(call cmd,flex) | 183 | $(call cmd,flex) |
| 182 | 184 | ||
| @@ -187,12 +189,14 @@ YACC_PREFIX = $(if $(YACC_PREFIX_${baseprereq}),$(YACC_PREFIX_${baseprereq}),yy) | |||
| 187 | quiet_cmd_bison = YACC $@ | 189 | quiet_cmd_bison = YACC $@ |
| 188 | cmd_bison = bison -o$@ -t -l -p $(YACC_PREFIX) $< | 190 | cmd_bison = bison -o$@ -t -l -p $(YACC_PREFIX) $< |
| 189 | 191 | ||
| 192 | .PRECIOUS: $(src)/%.tab.c_shipped | ||
| 190 | $(src)/%.tab.c_shipped: $(src)/%.y | 193 | $(src)/%.tab.c_shipped: $(src)/%.y |
| 191 | $(call cmd,bison) | 194 | $(call cmd,bison) |
| 192 | 195 | ||
| 193 | quiet_cmd_bison_h = YACC $@ | 196 | quiet_cmd_bison_h = YACC $@ |
| 194 | cmd_bison_h = bison -o/dev/null --defines=$@ -t -l -p $(YACC_PREFIX) $< | 197 | cmd_bison_h = bison -o/dev/null --defines=$@ -t -l -p $(YACC_PREFIX) $< |
| 195 | 198 | ||
| 199 | .PRECIOUS: $(src)/%.tab.h_shipped | ||
| 196 | $(src)/%.tab.h_shipped: $(src)/%.y | 200 | $(src)/%.tab.h_shipped: $(src)/%.y |
| 197 | $(call cmd,bison_h) | 201 | $(call cmd,bison_h) |
| 198 | 202 | ||
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index 291228e25984..cb1f50cf12e3 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c | |||
| @@ -345,6 +345,7 @@ static void parse_dep_file(void *map, size_t len) | |||
| 345 | memcpy(s, m, p-m); s[p-m] = 0; | 345 | memcpy(s, m, p-m); s[p-m] = 0; |
| 346 | if (strrcmp(s, "include/generated/autoconf.h") && | 346 | if (strrcmp(s, "include/generated/autoconf.h") && |
| 347 | strrcmp(s, "arch/um/include/uml-config.h") && | 347 | strrcmp(s, "arch/um/include/uml-config.h") && |
| 348 | strrcmp(s, "include/linux/kconfig.h") && | ||
| 348 | strrcmp(s, ".ver")) { | 349 | strrcmp(s, ".ver")) { |
| 349 | /* | 350 | /* |
| 350 | * Do not list the source file as dependency, so that | 351 | * Do not list the source file as dependency, so that |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 0b3e35c9ef08..8fda3b3f7be8 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
| @@ -240,9 +240,8 @@ our $NonptrType; | |||
| 240 | our $Type; | 240 | our $Type; |
| 241 | our $Declare; | 241 | our $Declare; |
| 242 | 242 | ||
| 243 | our $UTF8 = qr { | 243 | our $NON_ASCII_UTF8 = qr{ |
| 244 | [\x09\x0A\x0D\x20-\x7E] # ASCII | 244 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte |
| 245 | | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | ||
| 246 | | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | 245 | | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs |
| 247 | | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | 246 | | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte |
| 248 | | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | 247 | | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates |
| @@ -251,6 +250,11 @@ our $UTF8 = qr { | |||
| 251 | | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 | 250 | | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 |
| 252 | }x; | 251 | }x; |
| 253 | 252 | ||
| 253 | our $UTF8 = qr{ | ||
| 254 | [\x09\x0A\x0D\x20-\x7E] # ASCII | ||
| 255 | | $NON_ASCII_UTF8 | ||
| 256 | }x; | ||
| 257 | |||
| 254 | our $typeTypedefs = qr{(?x: | 258 | our $typeTypedefs = qr{(?x: |
| 255 | (?:__)?(?:u|s|be|le)(?:8|16|32|64)| | 259 | (?:__)?(?:u|s|be|le)(?:8|16|32|64)| |
| 256 | atomic_t | 260 | atomic_t |
| @@ -1330,6 +1334,9 @@ sub process { | |||
| 1330 | my $signoff = 0; | 1334 | my $signoff = 0; |
| 1331 | my $is_patch = 0; | 1335 | my $is_patch = 0; |
| 1332 | 1336 | ||
| 1337 | my $in_header_lines = 1; | ||
| 1338 | my $in_commit_log = 0; #Scanning lines before patch | ||
| 1339 | |||
| 1333 | our @report = (); | 1340 | our @report = (); |
| 1334 | our $cnt_lines = 0; | 1341 | our $cnt_lines = 0; |
| 1335 | our $cnt_error = 0; | 1342 | our $cnt_error = 0; |
| @@ -1497,7 +1504,6 @@ sub process { | |||
| 1497 | if ($line =~ /^diff --git.*?(\S+)$/) { | 1504 | if ($line =~ /^diff --git.*?(\S+)$/) { |
| 1498 | $realfile = $1; | 1505 | $realfile = $1; |
| 1499 | $realfile =~ s@^([^/]*)/@@; | 1506 | $realfile =~ s@^([^/]*)/@@; |
| 1500 | |||
| 1501 | } elsif ($line =~ /^\+\+\+\s+(\S+)/) { | 1507 | } elsif ($line =~ /^\+\+\+\s+(\S+)/) { |
| 1502 | $realfile = $1; | 1508 | $realfile = $1; |
| 1503 | $realfile =~ s@^([^/]*)/@@; | 1509 | $realfile =~ s@^([^/]*)/@@; |
| @@ -1536,6 +1542,7 @@ sub process { | |||
| 1536 | # Check the patch for a signoff: | 1542 | # Check the patch for a signoff: |
| 1537 | if ($line =~ /^\s*signed-off-by:/i) { | 1543 | if ($line =~ /^\s*signed-off-by:/i) { |
| 1538 | $signoff++; | 1544 | $signoff++; |
| 1545 | $in_commit_log = 0; | ||
| 1539 | } | 1546 | } |
| 1540 | 1547 | ||
| 1541 | # Check signature styles | 1548 | # Check signature styles |
| @@ -1613,6 +1620,21 @@ sub process { | |||
| 1613 | "Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr); | 1620 | "Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr); |
| 1614 | } | 1621 | } |
| 1615 | 1622 | ||
| 1623 | # Check if it's the start of a commit log | ||
| 1624 | # (not a header line and we haven't seen the patch filename) | ||
| 1625 | if ($in_header_lines && $realfile =~ /^$/ && | ||
| 1626 | $rawline !~ /^(commit\b|from\b|\w+:).+$/i) { | ||
| 1627 | $in_header_lines = 0; | ||
| 1628 | $in_commit_log = 1; | ||
| 1629 | } | ||
| 1630 | |||
| 1631 | # Still not yet in a patch, check for any UTF-8 | ||
| 1632 | if ($in_commit_log && $realfile =~ /^$/ && | ||
| 1633 | $rawline =~ /$NON_ASCII_UTF8/) { | ||
| 1634 | CHK("UTF8_BEFORE_PATCH", | ||
| 1635 | "8-bit UTF-8 used in possible commit log\n" . $herecurr); | ||
| 1636 | } | ||
| 1637 | |||
| 1616 | # ignore non-hunk lines and lines being removed | 1638 | # ignore non-hunk lines and lines being removed |
| 1617 | next if (!$hunk_line || $line =~ /^-/); | 1639 | next if (!$hunk_line || $line =~ /^-/); |
| 1618 | 1640 | ||
| @@ -1661,6 +1683,20 @@ sub process { | |||
| 1661 | #print "is_end<$is_end> length<$length>\n"; | 1683 | #print "is_end<$is_end> length<$length>\n"; |
| 1662 | } | 1684 | } |
| 1663 | 1685 | ||
| 1686 | if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) && | ||
| 1687 | ($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) { | ||
| 1688 | my $flag = $1; | ||
| 1689 | my $replacement = { | ||
| 1690 | 'EXTRA_AFLAGS' => 'asflags-y', | ||
| 1691 | 'EXTRA_CFLAGS' => 'ccflags-y', | ||
| 1692 | 'EXTRA_CPPFLAGS' => 'cppflags-y', | ||
| 1693 | 'EXTRA_LDFLAGS' => 'ldflags-y', | ||
| 1694 | }; | ||
| 1695 | |||
| 1696 | WARN("DEPRECATED_VARIABLE", | ||
| 1697 | "Use of $flag is deprecated, please use \`$replacement->{$flag} instead.\n" . $herecurr) if ($replacement->{$flag}); | ||
| 1698 | } | ||
| 1699 | |||
| 1664 | # check we are in a valid source file if not then ignore this hunk | 1700 | # check we are in a valid source file if not then ignore this hunk |
| 1665 | next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/); | 1701 | next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/); |
| 1666 | 1702 | ||
| @@ -3151,10 +3187,10 @@ sub process { | |||
| 3151 | "consider using a completion\n" . $herecurr); | 3187 | "consider using a completion\n" . $herecurr); |
| 3152 | 3188 | ||
| 3153 | } | 3189 | } |
| 3154 | # recommend kstrto* over simple_strto* | 3190 | # recommend kstrto* over simple_strto* and strict_strto* |
| 3155 | if ($line =~ /\bsimple_(strto.*?)\s*\(/) { | 3191 | if ($line =~ /\b((simple|strict)_(strto(l|ll|ul|ull)))\s*\(/) { |
| 3156 | WARN("CONSIDER_KSTRTO", | 3192 | WARN("CONSIDER_KSTRTO", |
| 3157 | "consider using kstrto* in preference to simple_$1\n" . $herecurr); | 3193 | "$1 is obsolete, use k$3 instead\n" . $herecurr); |
| 3158 | } | 3194 | } |
| 3159 | # check for __initcall(), use device_initcall() explicitly please | 3195 | # check for __initcall(), use device_initcall() explicitly please |
| 3160 | if ($line =~ /^.\s*__initcall\s*\(/) { | 3196 | if ($line =~ /^.\s*__initcall\s*\(/) { |
diff --git a/scripts/extract-vmlinux b/scripts/extract-vmlinux new file mode 100755 index 000000000000..5061abcc2540 --- /dev/null +++ b/scripts/extract-vmlinux | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | # ---------------------------------------------------------------------- | ||
| 3 | # extract-vmlinux - Extract uncompressed vmlinux from a kernel image | ||
| 4 | # | ||
| 5 | # Inspired from extract-ikconfig | ||
| 6 | # (c) 2009,2010 Dick Streefland <dick@streefland.net> | ||
| 7 | # | ||
| 8 | # (c) 2011 Corentin Chary <corentin.chary@gmail.com> | ||
| 9 | # | ||
| 10 | # Licensed under the GNU General Public License, version 2 (GPLv2). | ||
| 11 | # ---------------------------------------------------------------------- | ||
| 12 | |||
| 13 | check_vmlinux() | ||
| 14 | { | ||
| 15 | # Use readelf to check if it's a valid ELF | ||
| 16 | # TODO: find a better to way to check that it's really vmlinux | ||
| 17 | # and not just an elf | ||
| 18 | readelf -h $1 > /dev/null 2>&1 || return 1 | ||
| 19 | |||
| 20 | cat $1 | ||
| 21 | exit 0 | ||
| 22 | } | ||
| 23 | |||
| 24 | try_decompress() | ||
| 25 | { | ||
| 26 | # The obscure use of the "tr" filter is to work around older versions of | ||
| 27 | # "grep" that report the byte offset of the line instead of the pattern. | ||
| 28 | |||
| 29 | # Try to find the header ($1) and decompress from here | ||
| 30 | for pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"` | ||
| 31 | do | ||
| 32 | pos=${pos%%:*} | ||
| 33 | tail -c+$pos "$img" | $3 > $tmp 2> /dev/null | ||
| 34 | check_vmlinux $tmp | ||
| 35 | done | ||
| 36 | } | ||
| 37 | |||
| 38 | # Check invocation: | ||
| 39 | me=${0##*/} | ||
| 40 | img=$1 | ||
| 41 | if [ $# -ne 1 -o ! -s "$img" ] | ||
| 42 | then | ||
| 43 | echo "Usage: $me <kernel-image>" >&2 | ||
| 44 | exit 2 | ||
| 45 | fi | ||
| 46 | |||
| 47 | # Prepare temp files: | ||
| 48 | tmp=$(mktemp /tmp/vmlinux-XXX) | ||
| 49 | trap "rm -f $tmp" 0 | ||
| 50 | |||
| 51 | # Initial attempt for uncompressed images or objects: | ||
| 52 | check_vmlinux $img | ||
| 53 | |||
| 54 | # That didn't work, so retry after decompression. | ||
| 55 | try_decompress '\037\213\010' xy gunzip | ||
| 56 | try_decompress '\3757zXZ\000' abcde unxz | ||
| 57 | try_decompress 'BZh' xy bunzip2 | ||
| 58 | try_decompress '\135\0\0\0' xxx unlzma | ||
| 59 | try_decompress '\211\114\132' xy 'lzop -d' | ||
| 60 | |||
| 61 | # Bail out: | ||
| 62 | echo "$me: Cannot find vmlinux." >&2 | ||
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index 6d3fda0ce2ae..8a106499ec4f 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c | |||
| @@ -40,7 +40,8 @@ static struct symbol *symtab[HASH_BUCKETS]; | |||
| 40 | static FILE *debugfile; | 40 | static FILE *debugfile; |
| 41 | 41 | ||
| 42 | int cur_line = 1; | 42 | int cur_line = 1; |
| 43 | char *cur_filename; | 43 | char *cur_filename, *source_file; |
| 44 | int in_source_file; | ||
| 44 | 45 | ||
| 45 | static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, | 46 | static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, |
| 46 | flag_preserve, flag_warnings; | 47 | flag_preserve, flag_warnings; |
diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h index 7ec52ae3846a..3bffdcaaa274 100644 --- a/scripts/genksyms/genksyms.h +++ b/scripts/genksyms/genksyms.h | |||
| @@ -37,6 +37,7 @@ enum symbol_status { | |||
| 37 | struct string_list { | 37 | struct string_list { |
| 38 | struct string_list *next; | 38 | struct string_list *next; |
| 39 | enum symbol_type tag; | 39 | enum symbol_type tag; |
| 40 | int in_source_file; | ||
| 40 | char *string; | 41 | char *string; |
| 41 | }; | 42 | }; |
| 42 | 43 | ||
| @@ -57,7 +58,8 @@ typedef struct string_list **yystype; | |||
| 57 | #define YYSTYPE yystype | 58 | #define YYSTYPE yystype |
| 58 | 59 | ||
| 59 | extern int cur_line; | 60 | extern int cur_line; |
| 60 | extern char *cur_filename; | 61 | extern char *cur_filename, *source_file; |
| 62 | extern int in_source_file; | ||
| 61 | 63 | ||
| 62 | struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); | 64 | struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); |
| 63 | struct symbol *add_symbol(const char *name, enum symbol_type type, | 65 | struct symbol *add_symbol(const char *name, enum symbol_type type, |
diff --git a/scripts/genksyms/lex.l b/scripts/genksyms/lex.l index 400ae06a70df..f770071719cb 100644 --- a/scripts/genksyms/lex.l +++ b/scripts/genksyms/lex.l | |||
| @@ -116,6 +116,7 @@ MC_TOKEN ([~%^&*+=|<>/-]=)|(&&)|("||")|(->)|(<<)|(>>) | |||
| 116 | cur_node->tag = \ | 116 | cur_node->tag = \ |
| 117 | find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\ | 117 | find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\ |
| 118 | SYM_ENUM_CONST : SYM_NORMAL ; \ | 118 | SYM_ENUM_CONST : SYM_NORMAL ; \ |
| 119 | cur_node->in_source_file = in_source_file; \ | ||
| 119 | } while (0) | 120 | } while (0) |
| 120 | 121 | ||
| 121 | #define APP _APP(yytext, yyleng) | 122 | #define APP _APP(yytext, yyleng) |
| @@ -166,6 +167,13 @@ repeat: | |||
| 166 | cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1); | 167 | cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1); |
| 167 | cur_line = atoi(yytext+2); | 168 | cur_line = atoi(yytext+2); |
| 168 | 169 | ||
| 170 | if (!source_file) { | ||
| 171 | source_file = xstrdup(cur_filename); | ||
| 172 | in_source_file = 1; | ||
| 173 | } else { | ||
| 174 | in_source_file = (strcmp(cur_filename, source_file) == 0); | ||
| 175 | } | ||
| 176 | |||
| 169 | goto repeat; | 177 | goto repeat; |
| 170 | } | 178 | } |
| 171 | 179 | ||
diff --git a/scripts/genksyms/lex.lex.c_shipped b/scripts/genksyms/lex.lex.c_shipped index c83cf60410be..0bf4157e6161 100644 --- a/scripts/genksyms/lex.lex.c_shipped +++ b/scripts/genksyms/lex.lex.c_shipped | |||
| @@ -660,7 +660,7 @@ static int input (void ); | |||
| 660 | /* This used to be an fputs(), but since the string might contain NUL's, | 660 | /* This used to be an fputs(), but since the string might contain NUL's, |
| 661 | * we now use fwrite(). | 661 | * we now use fwrite(). |
| 662 | */ | 662 | */ |
| 663 | #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) | 663 | #define ECHO fwrite( yytext, yyleng, 1, yyout ) |
| 664 | #endif | 664 | #endif |
| 665 | 665 | ||
| 666 | /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, | 666 | /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, |
| @@ -671,7 +671,7 @@ static int input (void ); | |||
| 671 | if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ | 671 | if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ |
| 672 | { \ | 672 | { \ |
| 673 | int c = '*'; \ | 673 | int c = '*'; \ |
| 674 | unsigned n; \ | 674 | int n; \ |
| 675 | for ( n = 0; n < max_size && \ | 675 | for ( n = 0; n < max_size && \ |
| 676 | (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ | 676 | (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ |
| 677 | buf[n] = (char) c; \ | 677 | buf[n] = (char) c; \ |
| @@ -1926,6 +1926,7 @@ void yyfree (void * ptr ) | |||
| 1926 | cur_node->tag = \ | 1926 | cur_node->tag = \ |
| 1927 | find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\ | 1927 | find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\ |
| 1928 | SYM_ENUM_CONST : SYM_NORMAL ; \ | 1928 | SYM_ENUM_CONST : SYM_NORMAL ; \ |
| 1929 | cur_node->in_source_file = in_source_file; \ | ||
| 1929 | } while (0) | 1930 | } while (0) |
| 1930 | 1931 | ||
| 1931 | #define APP _APP(yytext, yyleng) | 1932 | #define APP _APP(yytext, yyleng) |
| @@ -1975,6 +1976,13 @@ repeat: | |||
| 1975 | cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1); | 1976 | cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1); |
| 1976 | cur_line = atoi(yytext+2); | 1977 | cur_line = atoi(yytext+2); |
| 1977 | 1978 | ||
| 1979 | if (!source_file) { | ||
| 1980 | source_file = xstrdup(cur_filename); | ||
| 1981 | in_source_file = 1; | ||
| 1982 | } else { | ||
| 1983 | in_source_file = (strcmp(cur_filename, source_file) == 0); | ||
| 1984 | } | ||
| 1985 | |||
| 1978 | goto repeat; | 1986 | goto repeat; |
| 1979 | } | 1987 | } |
| 1980 | 1988 | ||
diff --git a/scripts/genksyms/parse.tab.c_shipped b/scripts/genksyms/parse.tab.c_shipped index 61d4a5d09856..ece53c79bb59 100644 --- a/scripts/genksyms/parse.tab.c_shipped +++ b/scripts/genksyms/parse.tab.c_shipped | |||
| @@ -1,9 +1,8 @@ | |||
| 1 | /* A Bison parser, made by GNU Bison 2.4.3. */ | 1 | /* A Bison parser, made by GNU Bison 2.5. */ |
| 2 | 2 | ||
| 3 | /* Skeleton implementation for Bison's Yacc-like parsers in C | 3 | /* Bison implementation for Yacc-like parsers in C |
| 4 | 4 | ||
| 5 | Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, | 5 | Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. |
| 6 | 2009, 2010 Free Software Foundation, Inc. | ||
| 7 | 6 | ||
| 8 | This program is free software: you can redistribute it and/or modify | 7 | This program is free software: you can redistribute it and/or modify |
| 9 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
| @@ -45,7 +44,7 @@ | |||
| 45 | #define YYBISON 1 | 44 | #define YYBISON 1 |
| 46 | 45 | ||
| 47 | /* Bison version. */ | 46 | /* Bison version. */ |
| 48 | #define YYBISON_VERSION "2.4.3" | 47 | #define YYBISON_VERSION "2.5" |
| 49 | 48 | ||
| 50 | /* Skeleton name. */ | 49 | /* Skeleton name. */ |
| 51 | #define YYSKELETON_NAME "yacc.c" | 50 | #define YYSKELETON_NAME "yacc.c" |
| @@ -96,6 +95,25 @@ remove_list(struct string_list **pb, struct string_list **pe) | |||
| 96 | free_list(b, e); | 95 | free_list(b, e); |
| 97 | } | 96 | } |
| 98 | 97 | ||
| 98 | /* Record definition of a struct/union/enum */ | ||
| 99 | static void record_compound(struct string_list **keyw, | ||
| 100 | struct string_list **ident, | ||
| 101 | struct string_list **body, | ||
| 102 | enum symbol_type type) | ||
| 103 | { | ||
| 104 | struct string_list *b = *body, *i = *ident, *r; | ||
| 105 | |||
| 106 | if (i->in_source_file) { | ||
| 107 | remove_node(keyw); | ||
| 108 | (*ident)->tag = type; | ||
| 109 | remove_list(body, ident); | ||
| 110 | return; | ||
| 111 | } | ||
| 112 | r = copy_node(i); r->tag = type; | ||
| 113 | r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL; | ||
| 114 | add_symbol(i->string, type, b, is_extern); | ||
| 115 | } | ||
| 116 | |||
| 99 | 117 | ||
| 100 | 118 | ||
| 101 | 119 | ||
| @@ -283,11 +301,11 @@ YYID (yyi) | |||
| 283 | # define alloca _alloca | 301 | # define alloca _alloca |
| 284 | # else | 302 | # else |
| 285 | # define YYSTACK_ALLOC alloca | 303 | # define YYSTACK_ALLOC alloca |
| 286 | # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ | 304 | # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
| 287 | || defined __cplusplus || defined _MSC_VER) | 305 | || defined __cplusplus || defined _MSC_VER) |
| 288 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 306 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
| 289 | # ifndef _STDLIB_H | 307 | # ifndef EXIT_SUCCESS |
| 290 | # define _STDLIB_H 1 | 308 | # define EXIT_SUCCESS 0 |
| 291 | # endif | 309 | # endif |
| 292 | # endif | 310 | # endif |
| 293 | # endif | 311 | # endif |
| @@ -310,24 +328,24 @@ YYID (yyi) | |||
| 310 | # ifndef YYSTACK_ALLOC_MAXIMUM | 328 | # ifndef YYSTACK_ALLOC_MAXIMUM |
| 311 | # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM | 329 | # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
| 312 | # endif | 330 | # endif |
| 313 | # if (defined __cplusplus && ! defined _STDLIB_H \ | 331 | # if (defined __cplusplus && ! defined EXIT_SUCCESS \ |
| 314 | && ! ((defined YYMALLOC || defined malloc) \ | 332 | && ! ((defined YYMALLOC || defined malloc) \ |
| 315 | && (defined YYFREE || defined free))) | 333 | && (defined YYFREE || defined free))) |
| 316 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 334 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
| 317 | # ifndef _STDLIB_H | 335 | # ifndef EXIT_SUCCESS |
| 318 | # define _STDLIB_H 1 | 336 | # define EXIT_SUCCESS 0 |
| 319 | # endif | 337 | # endif |
| 320 | # endif | 338 | # endif |
| 321 | # ifndef YYMALLOC | 339 | # ifndef YYMALLOC |
| 322 | # define YYMALLOC malloc | 340 | # define YYMALLOC malloc |
| 323 | # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ | 341 | # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
| 324 | || defined __cplusplus || defined _MSC_VER) | 342 | || defined __cplusplus || defined _MSC_VER) |
| 325 | void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ | 343 | void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ |
| 326 | # endif | 344 | # endif |
| 327 | # endif | 345 | # endif |
| 328 | # ifndef YYFREE | 346 | # ifndef YYFREE |
| 329 | # define YYFREE free | 347 | # define YYFREE free |
| 330 | # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ | 348 | # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
| 331 | || defined __cplusplus || defined _MSC_VER) | 349 | || defined __cplusplus || defined _MSC_VER) |
| 332 | void free (void *); /* INFRINGES ON USER NAME SPACE */ | 350 | void free (void *); /* INFRINGES ON USER NAME SPACE */ |
| 333 | # endif | 351 | # endif |
| @@ -356,23 +374,7 @@ union yyalloc | |||
| 356 | ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ | 374 | ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ |
| 357 | + YYSTACK_GAP_MAXIMUM) | 375 | + YYSTACK_GAP_MAXIMUM) |
| 358 | 376 | ||
| 359 | /* Copy COUNT objects from FROM to TO. The source and destination do | 377 | # define YYCOPY_NEEDED 1 |
| 360 | not overlap. */ | ||
| 361 | # ifndef YYCOPY | ||
| 362 | # if defined __GNUC__ && 1 < __GNUC__ | ||
| 363 | # define YYCOPY(To, From, Count) \ | ||
| 364 | __builtin_memcpy (To, From, (Count) * sizeof (*(From))) | ||
| 365 | # else | ||
| 366 | # define YYCOPY(To, From, Count) \ | ||
| 367 | do \ | ||
| 368 | { \ | ||
| 369 | YYSIZE_T yyi; \ | ||
| 370 | for (yyi = 0; yyi < (Count); yyi++) \ | ||
| 371 | (To)[yyi] = (From)[yyi]; \ | ||
| 372 | } \ | ||
| 373 | while (YYID (0)) | ||
| 374 | # endif | ||
| 375 | # endif | ||
| 376 | 378 | ||
| 377 | /* Relocate STACK from its old location to the new one. The | 379 | /* Relocate STACK from its old location to the new one. The |
| 378 | local variables YYSIZE and YYSTACKSIZE give the old and new number of | 380 | local variables YYSIZE and YYSTACKSIZE give the old and new number of |
| @@ -392,6 +394,26 @@ union yyalloc | |||
| 392 | 394 | ||
| 393 | #endif | 395 | #endif |
| 394 | 396 | ||
| 397 | #if defined YYCOPY_NEEDED && YYCOPY_NEEDED | ||
| 398 | /* Copy COUNT objects from FROM to TO. The source and destination do | ||
| 399 | not overlap. */ | ||
| 400 | # ifndef YYCOPY | ||
| 401 | # if defined __GNUC__ && 1 < __GNUC__ | ||
| 402 | # define YYCOPY(To, From, Count) \ | ||
| 403 | __builtin_memcpy (To, From, (Count) * sizeof (*(From))) | ||
| 404 | # else | ||
| 405 | # define YYCOPY(To, From, Count) \ | ||
| 406 | do \ | ||
| 407 | { \ | ||
| 408 | YYSIZE_T yyi; \ | ||
| 409 | for (yyi = 0; yyi < (Count); yyi++) \ | ||
| 410 | (To)[yyi] = (From)[yyi]; \ | ||
| 411 | } \ | ||
| 412 | while (YYID (0)) | ||
| 413 | # endif | ||
| 414 | # endif | ||
| 415 | #endif /* !YYCOPY_NEEDED */ | ||
| 416 | |||
| 395 | /* YYFINAL -- State number of the termination state. */ | 417 | /* YYFINAL -- State number of the termination state. */ |
| 396 | #define YYFINAL 4 | 418 | #define YYFINAL 4 |
| 397 | /* YYLAST -- Last index in YYTABLE. */ | 419 | /* YYLAST -- Last index in YYTABLE. */ |
| @@ -514,20 +536,20 @@ static const yytype_int8 yyrhs[] = | |||
| 514 | /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ | 536 | /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ |
| 515 | static const yytype_uint16 yyrline[] = | 537 | static const yytype_uint16 yyrline[] = |
| 516 | { | 538 | { |
| 517 | 0, 104, 104, 105, 109, 109, 115, 115, 117, 117, | 539 | 0, 123, 123, 124, 128, 128, 134, 134, 136, 136, |
| 518 | 119, 120, 121, 122, 123, 124, 128, 142, 143, 147, | 540 | 138, 139, 140, 141, 142, 143, 147, 161, 162, 166, |
| 519 | 155, 168, 174, 175, 179, 180, 184, 190, 194, 195, | 541 | 174, 187, 193, 194, 198, 199, 203, 209, 213, 214, |
| 520 | 196, 197, 198, 202, 203, 204, 205, 209, 211, 213, | 542 | 215, 216, 217, 221, 222, 223, 224, 228, 230, 232, |
| 521 | 217, 224, 231, 241, 244, 245, 249, 250, 251, 252, | 543 | 236, 238, 240, 245, 248, 249, 253, 254, 255, 256, |
| 522 | 253, 254, 255, 256, 257, 258, 259, 263, 268, 269, | 544 | 257, 258, 259, 260, 261, 262, 263, 267, 272, 273, |
| 523 | 273, 274, 278, 278, 278, 279, 287, 288, 292, 301, | 545 | 277, 278, 282, 282, 282, 283, 291, 292, 296, 305, |
| 524 | 303, 305, 307, 309, 316, 317, 321, 322, 323, 325, | 546 | 307, 309, 311, 313, 320, 321, 325, 326, 327, 329, |
| 525 | 327, 329, 331, 336, 337, 338, 342, 343, 347, 348, | 547 | 331, 333, 335, 340, 341, 342, 346, 347, 351, 352, |
| 526 | 353, 358, 360, 364, 365, 373, 377, 379, 381, 383, | 548 | 357, 362, 364, 368, 369, 377, 381, 383, 385, 387, |
| 527 | 385, 390, 399, 400, 405, 410, 411, 415, 416, 420, | 549 | 389, 394, 403, 404, 409, 414, 415, 419, 420, 424, |
| 528 | 421, 425, 427, 432, 433, 437, 438, 442, 443, 444, | 550 | 425, 429, 431, 436, 437, 441, 442, 446, 447, 448, |
| 529 | 448, 452, 453, 457, 458, 462, 463, 466, 471, 479, | 551 | 452, 456, 457, 461, 462, 466, 467, 470, 475, 483, |
| 530 | 483, 484, 488 | 552 | 487, 488, 492 |
| 531 | }; | 553 | }; |
| 532 | #endif | 554 | #endif |
| 533 | 555 | ||
| @@ -618,8 +640,8 @@ static const yytype_uint8 yyr2[] = | |||
| 618 | 0, 1, 5 | 640 | 0, 1, 5 |
| 619 | }; | 641 | }; |
| 620 | 642 | ||
| 621 | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state | 643 | /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. |
| 622 | STATE-NUM when YYTABLE doesn't specify something else to do. Zero | 644 | Performed when YYTABLE doesn't specify something else to do. Zero |
| 623 | means the default is an error. */ | 645 | means the default is an error. */ |
| 624 | static const yytype_uint8 yydefact[] = | 646 | static const yytype_uint8 yydefact[] = |
| 625 | { | 647 | { |
| @@ -692,8 +714,7 @@ static const yytype_int16 yypgoto[] = | |||
| 692 | 714 | ||
| 693 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If | 715 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If |
| 694 | positive, shift that token. If negative, reduce the rule which | 716 | positive, shift that token. If negative, reduce the rule which |
| 695 | number is the opposite. If zero, do what YYDEFACT says. | 717 | number is the opposite. If YYTABLE_NINF, syntax error. */ |
| 696 | If YYTABLE_NINF, syntax error. */ | ||
| 697 | #define YYTABLE_NINF -109 | 718 | #define YYTABLE_NINF -109 |
| 698 | static const yytype_int16 yytable[] = | 719 | static const yytype_int16 yytable[] = |
| 699 | { | 720 | { |
| @@ -753,6 +774,12 @@ static const yytype_int16 yytable[] = | |||
| 753 | 0, 0, 34 | 774 | 0, 0, 34 |
| 754 | }; | 775 | }; |
| 755 | 776 | ||
| 777 | #define yypact_value_is_default(yystate) \ | ||
| 778 | ((yystate) == (-135)) | ||
| 779 | |||
| 780 | #define yytable_value_is_error(yytable_value) \ | ||
| 781 | YYID (0) | ||
| 782 | |||
| 756 | static const yytype_int16 yycheck[] = | 783 | static const yytype_int16 yycheck[] = |
| 757 | { | 784 | { |
| 758 | 59, 38, 79, 3, 1, 8, 56, 37, 26, 37, | 785 | 59, 38, 79, 3, 1, 8, 56, 37, 26, 37, |
| @@ -869,7 +896,6 @@ do \ | |||
| 869 | { \ | 896 | { \ |
| 870 | yychar = (Token); \ | 897 | yychar = (Token); \ |
| 871 | yylval = (Value); \ | 898 | yylval = (Value); \ |
| 872 | yytoken = YYTRANSLATE (yychar); \ | ||
| 873 | YYPOPSTACK (1); \ | 899 | YYPOPSTACK (1); \ |
| 874 | goto yybackup; \ | 900 | goto yybackup; \ |
| 875 | } \ | 901 | } \ |
| @@ -911,19 +937,10 @@ while (YYID (0)) | |||
| 911 | #endif | 937 | #endif |
| 912 | 938 | ||
| 913 | 939 | ||
| 914 | /* YY_LOCATION_PRINT -- Print the location on the stream. | 940 | /* This macro is provided for backward compatibility. */ |
| 915 | This macro was not mandated originally: define only if we know | ||
| 916 | we won't break user code: when these are the locations we know. */ | ||
| 917 | 941 | ||
| 918 | #ifndef YY_LOCATION_PRINT | 942 | #ifndef YY_LOCATION_PRINT |
| 919 | # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL | 943 | # define YY_LOCATION_PRINT(File, Loc) ((void) 0) |
| 920 | # define YY_LOCATION_PRINT(File, Loc) \ | ||
| 921 | fprintf (File, "%d.%d-%d.%d", \ | ||
| 922 | (Loc).first_line, (Loc).first_column, \ | ||
| 923 | (Loc).last_line, (Loc).last_column) | ||
| 924 | # else | ||
| 925 | # define YY_LOCATION_PRINT(File, Loc) ((void) 0) | ||
| 926 | # endif | ||
| 927 | #endif | 944 | #endif |
| 928 | 945 | ||
| 929 | 946 | ||
| @@ -1115,7 +1132,6 @@ int yydebug; | |||
| 1115 | # define YYMAXDEPTH 10000 | 1132 | # define YYMAXDEPTH 10000 |
| 1116 | #endif | 1133 | #endif |
| 1117 | 1134 | ||
| 1118 | |||
| 1119 | 1135 | ||
| 1120 | #if YYERROR_VERBOSE | 1136 | #if YYERROR_VERBOSE |
| 1121 | 1137 | ||
| @@ -1218,115 +1234,142 @@ yytnamerr (char *yyres, const char *yystr) | |||
| 1218 | } | 1234 | } |
| 1219 | # endif | 1235 | # endif |
| 1220 | 1236 | ||
| 1221 | /* Copy into YYRESULT an error message about the unexpected token | 1237 | /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message |
| 1222 | YYCHAR while in state YYSTATE. Return the number of bytes copied, | 1238 | about the unexpected token YYTOKEN for the state stack whose top is |
| 1223 | including the terminating null byte. If YYRESULT is null, do not | 1239 | YYSSP. |
| 1224 | copy anything; just return the number of bytes that would be | ||
| 1225 | copied. As a special case, return 0 if an ordinary "syntax error" | ||
| 1226 | message will do. Return YYSIZE_MAXIMUM if overflow occurs during | ||
| 1227 | size calculation. */ | ||
| 1228 | static YYSIZE_T | ||
| 1229 | yysyntax_error (char *yyresult, int yystate, int yychar) | ||
| 1230 | { | ||
| 1231 | int yyn = yypact[yystate]; | ||
| 1232 | 1240 | ||
| 1233 | if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) | 1241 | Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is |
| 1234 | return 0; | 1242 | not large enough to hold the message. In that case, also set |
| 1235 | else | 1243 | *YYMSG_ALLOC to the required number of bytes. Return 2 if the |
| 1244 | required number of bytes is too large to store. */ | ||
| 1245 | static int | ||
| 1246 | yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | ||
| 1247 | yytype_int16 *yyssp, int yytoken) | ||
| 1248 | { | ||
| 1249 | YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); | ||
| 1250 | YYSIZE_T yysize = yysize0; | ||
| 1251 | YYSIZE_T yysize1; | ||
| 1252 | enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | ||
| 1253 | /* Internationalized format string. */ | ||
| 1254 | const char *yyformat = 0; | ||
| 1255 | /* Arguments of yyformat. */ | ||
| 1256 | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | ||
| 1257 | /* Number of reported tokens (one for the "unexpected", one per | ||
| 1258 | "expected"). */ | ||
| 1259 | int yycount = 0; | ||
| 1260 | |||
| 1261 | /* There are many possibilities here to consider: | ||
| 1262 | - Assume YYFAIL is not used. It's too flawed to consider. See | ||
| 1263 | <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> | ||
| 1264 | for details. YYERROR is fine as it does not invoke this | ||
| 1265 | function. | ||
| 1266 | - If this state is a consistent state with a default action, then | ||
| 1267 | the only way this function was invoked is if the default action | ||
| 1268 | is an error action. In that case, don't check for expected | ||
| 1269 | tokens because there are none. | ||
| 1270 | - The only way there can be no lookahead present (in yychar) is if | ||
| 1271 | this state is a consistent state with a default action. Thus, | ||
| 1272 | detecting the absence of a lookahead is sufficient to determine | ||
| 1273 | that there is no unexpected or expected token to report. In that | ||
| 1274 | case, just report a simple "syntax error". | ||
| 1275 | - Don't assume there isn't a lookahead just because this state is a | ||
| 1276 | consistent state with a default action. There might have been a | ||
| 1277 | previous inconsistent state, consistent state with a non-default | ||
| 1278 | action, or user semantic action that manipulated yychar. | ||
| 1279 | - Of course, the expected token list depends on states to have | ||
| 1280 | correct lookahead information, and it depends on the parser not | ||
| 1281 | to perform extra reductions after fetching a lookahead from the | ||
| 1282 | scanner and before detecting a syntax error. Thus, state merging | ||
| 1283 | (from LALR or IELR) and default reductions corrupt the expected | ||
| 1284 | token list. However, the list is correct for canonical LR with | ||
| 1285 | one exception: it will still contain any token that will not be | ||
| 1286 | accepted due to an error action in a later state. | ||
| 1287 | */ | ||
| 1288 | if (yytoken != YYEMPTY) | ||
| 1236 | { | 1289 | { |
| 1237 | int yytype = YYTRANSLATE (yychar); | 1290 | int yyn = yypact[*yyssp]; |
| 1238 | YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); | 1291 | yyarg[yycount++] = yytname[yytoken]; |
| 1239 | YYSIZE_T yysize = yysize0; | 1292 | if (!yypact_value_is_default (yyn)) |
| 1240 | YYSIZE_T yysize1; | 1293 | { |
| 1241 | int yysize_overflow = 0; | 1294 | /* Start YYX at -YYN if negative to avoid negative indexes in |
| 1242 | enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | 1295 | YYCHECK. In other words, skip the first -YYN actions for |
| 1243 | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | 1296 | this state because they are default actions. */ |
| 1244 | int yyx; | 1297 | int yyxbegin = yyn < 0 ? -yyn : 0; |
| 1245 | 1298 | /* Stay within bounds of both yycheck and yytname. */ | |
| 1246 | # if 0 | 1299 | int yychecklim = YYLAST - yyn + 1; |
| 1247 | /* This is so xgettext sees the translatable formats that are | 1300 | int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; |
| 1248 | constructed on the fly. */ | 1301 | int yyx; |
| 1249 | YY_("syntax error, unexpected %s"); | 1302 | |
| 1250 | YY_("syntax error, unexpected %s, expecting %s"); | 1303 | for (yyx = yyxbegin; yyx < yyxend; ++yyx) |
| 1251 | YY_("syntax error, unexpected %s, expecting %s or %s"); | 1304 | if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR |
| 1252 | YY_("syntax error, unexpected %s, expecting %s or %s or %s"); | 1305 | && !yytable_value_is_error (yytable[yyx + yyn])) |
| 1253 | YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); | 1306 | { |
| 1254 | # endif | 1307 | if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) |
| 1255 | char *yyfmt; | 1308 | { |
| 1256 | char const *yyf; | 1309 | yycount = 1; |
| 1257 | static char const yyunexpected[] = "syntax error, unexpected %s"; | 1310 | yysize = yysize0; |
| 1258 | static char const yyexpecting[] = ", expecting %s"; | 1311 | break; |
| 1259 | static char const yyor[] = " or %s"; | 1312 | } |
| 1260 | char yyformat[sizeof yyunexpected | 1313 | yyarg[yycount++] = yytname[yyx]; |
| 1261 | + sizeof yyexpecting - 1 | 1314 | yysize1 = yysize + yytnamerr (0, yytname[yyx]); |
| 1262 | + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) | 1315 | if (! (yysize <= yysize1 |
| 1263 | * (sizeof yyor - 1))]; | 1316 | && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
| 1264 | char const *yyprefix = yyexpecting; | 1317 | return 2; |
| 1265 | 1318 | yysize = yysize1; | |
| 1266 | /* Start YYX at -YYN if negative to avoid negative indexes in | 1319 | } |
| 1267 | YYCHECK. */ | 1320 | } |
| 1268 | int yyxbegin = yyn < 0 ? -yyn : 0; | 1321 | } |
| 1269 | |||
| 1270 | /* Stay within bounds of both yycheck and yytname. */ | ||
| 1271 | int yychecklim = YYLAST - yyn + 1; | ||
| 1272 | int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; | ||
| 1273 | int yycount = 1; | ||
| 1274 | |||
| 1275 | yyarg[0] = yytname[yytype]; | ||
| 1276 | yyfmt = yystpcpy (yyformat, yyunexpected); | ||
| 1277 | |||
| 1278 | for (yyx = yyxbegin; yyx < yyxend; ++yyx) | ||
| 1279 | if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) | ||
| 1280 | { | ||
| 1281 | if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) | ||
| 1282 | { | ||
| 1283 | yycount = 1; | ||
| 1284 | yysize = yysize0; | ||
| 1285 | yyformat[sizeof yyunexpected - 1] = '\0'; | ||
| 1286 | break; | ||
| 1287 | } | ||
| 1288 | yyarg[yycount++] = yytname[yyx]; | ||
| 1289 | yysize1 = yysize + yytnamerr (0, yytname[yyx]); | ||
| 1290 | yysize_overflow |= (yysize1 < yysize); | ||
| 1291 | yysize = yysize1; | ||
| 1292 | yyfmt = yystpcpy (yyfmt, yyprefix); | ||
| 1293 | yyprefix = yyor; | ||
| 1294 | } | ||
| 1295 | 1322 | ||
| 1296 | yyf = YY_(yyformat); | 1323 | switch (yycount) |
| 1297 | yysize1 = yysize + yystrlen (yyf); | 1324 | { |
| 1298 | yysize_overflow |= (yysize1 < yysize); | 1325 | # define YYCASE_(N, S) \ |
| 1299 | yysize = yysize1; | 1326 | case N: \ |
| 1327 | yyformat = S; \ | ||
| 1328 | break | ||
| 1329 | YYCASE_(0, YY_("syntax error")); | ||
| 1330 | YYCASE_(1, YY_("syntax error, unexpected %s")); | ||
| 1331 | YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); | ||
| 1332 | YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); | ||
| 1333 | YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); | ||
| 1334 | YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); | ||
| 1335 | # undef YYCASE_ | ||
| 1336 | } | ||
| 1300 | 1337 | ||
| 1301 | if (yysize_overflow) | 1338 | yysize1 = yysize + yystrlen (yyformat); |
| 1302 | return YYSIZE_MAXIMUM; | 1339 | if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
| 1340 | return 2; | ||
| 1341 | yysize = yysize1; | ||
| 1303 | 1342 | ||
| 1304 | if (yyresult) | 1343 | if (*yymsg_alloc < yysize) |
| 1305 | { | 1344 | { |
| 1306 | /* Avoid sprintf, as that infringes on the user's name space. | 1345 | *yymsg_alloc = 2 * yysize; |
| 1307 | Don't have undefined behavior even if the translation | 1346 | if (! (yysize <= *yymsg_alloc |
| 1308 | produced a string with the wrong number of "%s"s. */ | 1347 | && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) |
| 1309 | char *yyp = yyresult; | 1348 | *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; |
| 1310 | int yyi = 0; | 1349 | return 1; |
| 1311 | while ((*yyp = *yyf) != '\0') | ||
| 1312 | { | ||
| 1313 | if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) | ||
| 1314 | { | ||
| 1315 | yyp += yytnamerr (yyp, yyarg[yyi++]); | ||
| 1316 | yyf += 2; | ||
| 1317 | } | ||
| 1318 | else | ||
| 1319 | { | ||
| 1320 | yyp++; | ||
| 1321 | yyf++; | ||
| 1322 | } | ||
| 1323 | } | ||
| 1324 | } | ||
| 1325 | return yysize; | ||
| 1326 | } | 1350 | } |
| 1351 | |||
| 1352 | /* Avoid sprintf, as that infringes on the user's name space. | ||
| 1353 | Don't have undefined behavior even if the translation | ||
| 1354 | produced a string with the wrong number of "%s"s. */ | ||
| 1355 | { | ||
| 1356 | char *yyp = *yymsg; | ||
| 1357 | int yyi = 0; | ||
| 1358 | while ((*yyp = *yyformat) != '\0') | ||
| 1359 | if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) | ||
| 1360 | { | ||
| 1361 | yyp += yytnamerr (yyp, yyarg[yyi++]); | ||
| 1362 | yyformat += 2; | ||
| 1363 | } | ||
| 1364 | else | ||
| 1365 | { | ||
| 1366 | yyp++; | ||
| 1367 | yyformat++; | ||
| 1368 | } | ||
| 1369 | } | ||
| 1370 | return 0; | ||
| 1327 | } | 1371 | } |
| 1328 | #endif /* YYERROR_VERBOSE */ | 1372 | #endif /* YYERROR_VERBOSE */ |
| 1329 | |||
| 1330 | 1373 | ||
| 1331 | /*-----------------------------------------------. | 1374 | /*-----------------------------------------------. |
| 1332 | | Release the memory associated to this symbol. | | 1375 | | Release the memory associated to this symbol. | |
| @@ -1359,6 +1402,7 @@ yydestruct (yymsg, yytype, yyvaluep) | |||
| 1359 | } | 1402 | } |
| 1360 | } | 1403 | } |
| 1361 | 1404 | ||
| 1405 | |||
| 1362 | /* Prevent warnings from -Wmissing-prototypes. */ | 1406 | /* Prevent warnings from -Wmissing-prototypes. */ |
| 1363 | #ifdef YYPARSE_PARAM | 1407 | #ifdef YYPARSE_PARAM |
| 1364 | #if defined __STDC__ || defined __cplusplus | 1408 | #if defined __STDC__ || defined __cplusplus |
| @@ -1385,10 +1429,9 @@ YYSTYPE yylval; | |||
| 1385 | int yynerrs; | 1429 | int yynerrs; |
| 1386 | 1430 | ||
| 1387 | 1431 | ||
| 1388 | 1432 | /*----------. | |
| 1389 | /*-------------------------. | 1433 | | yyparse. | |
| 1390 | | yyparse or yypush_parse. | | 1434 | `----------*/ |
| 1391 | `-------------------------*/ | ||
| 1392 | 1435 | ||
| 1393 | #ifdef YYPARSE_PARAM | 1436 | #ifdef YYPARSE_PARAM |
| 1394 | #if (defined __STDC__ || defined __C99__FUNC__ \ | 1437 | #if (defined __STDC__ || defined __C99__FUNC__ \ |
| @@ -1412,8 +1455,6 @@ yyparse () | |||
| 1412 | #endif | 1455 | #endif |
| 1413 | #endif | 1456 | #endif |
| 1414 | { | 1457 | { |
| 1415 | |||
| 1416 | |||
| 1417 | int yystate; | 1458 | int yystate; |
| 1418 | /* Number of tokens to shift before error messages enabled. */ | 1459 | /* Number of tokens to shift before error messages enabled. */ |
| 1419 | int yyerrstatus; | 1460 | int yyerrstatus; |
| @@ -1568,7 +1609,7 @@ yybackup: | |||
| 1568 | 1609 | ||
| 1569 | /* First try to decide what to do without reference to lookahead token. */ | 1610 | /* First try to decide what to do without reference to lookahead token. */ |
| 1570 | yyn = yypact[yystate]; | 1611 | yyn = yypact[yystate]; |
| 1571 | if (yyn == YYPACT_NINF) | 1612 | if (yypact_value_is_default (yyn)) |
| 1572 | goto yydefault; | 1613 | goto yydefault; |
| 1573 | 1614 | ||
| 1574 | /* Not known => get a lookahead token if don't already have one. */ | 1615 | /* Not known => get a lookahead token if don't already have one. */ |
| @@ -1599,8 +1640,8 @@ yybackup: | |||
| 1599 | yyn = yytable[yyn]; | 1640 | yyn = yytable[yyn]; |
| 1600 | if (yyn <= 0) | 1641 | if (yyn <= 0) |
| 1601 | { | 1642 | { |
| 1602 | if (yyn == 0 || yyn == YYTABLE_NINF) | 1643 | if (yytable_value_is_error (yyn)) |
| 1603 | goto yyerrlab; | 1644 | goto yyerrlab; |
| 1604 | yyn = -yyn; | 1645 | yyn = -yyn; |
| 1605 | goto yyreduce; | 1646 | goto yyreduce; |
| 1606 | } | 1647 | } |
| @@ -1655,42 +1696,42 @@ yyreduce: | |||
| 1655 | { | 1696 | { |
| 1656 | case 4: | 1697 | case 4: |
| 1657 | 1698 | ||
| 1658 | { is_typedef = 0; is_extern = 0; current_name = NULL; decl_spec = NULL; ;} | 1699 | { is_typedef = 0; is_extern = 0; current_name = NULL; decl_spec = NULL; } |
| 1659 | break; | 1700 | break; |
| 1660 | 1701 | ||
| 1661 | case 5: | 1702 | case 5: |
| 1662 | 1703 | ||
| 1663 | { free_list(*(yyvsp[(2) - (2)]), NULL); *(yyvsp[(2) - (2)]) = NULL; ;} | 1704 | { free_list(*(yyvsp[(2) - (2)]), NULL); *(yyvsp[(2) - (2)]) = NULL; } |
| 1664 | break; | 1705 | break; |
| 1665 | 1706 | ||
| 1666 | case 6: | 1707 | case 6: |
| 1667 | 1708 | ||
| 1668 | { is_typedef = 1; ;} | 1709 | { is_typedef = 1; } |
| 1669 | break; | 1710 | break; |
| 1670 | 1711 | ||
| 1671 | case 7: | 1712 | case 7: |
| 1672 | 1713 | ||
| 1673 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 1714 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1674 | break; | 1715 | break; |
| 1675 | 1716 | ||
| 1676 | case 8: | 1717 | case 8: |
| 1677 | 1718 | ||
| 1678 | { is_typedef = 1; ;} | 1719 | { is_typedef = 1; } |
| 1679 | break; | 1720 | break; |
| 1680 | 1721 | ||
| 1681 | case 9: | 1722 | case 9: |
| 1682 | 1723 | ||
| 1683 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1724 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1684 | break; | 1725 | break; |
| 1685 | 1726 | ||
| 1686 | case 14: | 1727 | case 14: |
| 1687 | 1728 | ||
| 1688 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1729 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1689 | break; | 1730 | break; |
| 1690 | 1731 | ||
| 1691 | case 15: | 1732 | case 15: |
| 1692 | 1733 | ||
| 1693 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1734 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1694 | break; | 1735 | break; |
| 1695 | 1736 | ||
| 1696 | case 16: | 1737 | case 16: |
| @@ -1704,12 +1745,12 @@ yyreduce: | |||
| 1704 | current_name = NULL; | 1745 | current_name = NULL; |
| 1705 | } | 1746 | } |
| 1706 | (yyval) = (yyvsp[(3) - (3)]); | 1747 | (yyval) = (yyvsp[(3) - (3)]); |
| 1707 | ;} | 1748 | } |
| 1708 | break; | 1749 | break; |
| 1709 | 1750 | ||
| 1710 | case 17: | 1751 | case 17: |
| 1711 | 1752 | ||
| 1712 | { (yyval) = NULL; ;} | 1753 | { (yyval) = NULL; } |
| 1713 | break; | 1754 | break; |
| 1714 | 1755 | ||
| 1715 | case 19: | 1756 | case 19: |
| @@ -1720,7 +1761,7 @@ yyreduce: | |||
| 1720 | is_typedef ? SYM_TYPEDEF : SYM_NORMAL, decl, is_extern); | 1761 | is_typedef ? SYM_TYPEDEF : SYM_NORMAL, decl, is_extern); |
| 1721 | current_name = NULL; | 1762 | current_name = NULL; |
| 1722 | (yyval) = (yyvsp[(1) - (1)]); | 1763 | (yyval) = (yyvsp[(1) - (1)]); |
| 1723 | ;} | 1764 | } |
| 1724 | break; | 1765 | break; |
| 1725 | 1766 | ||
| 1726 | case 20: | 1767 | case 20: |
| @@ -1733,27 +1774,27 @@ yyreduce: | |||
| 1733 | is_typedef ? SYM_TYPEDEF : SYM_NORMAL, decl, is_extern); | 1774 | is_typedef ? SYM_TYPEDEF : SYM_NORMAL, decl, is_extern); |
| 1734 | current_name = NULL; | 1775 | current_name = NULL; |
| 1735 | (yyval) = (yyvsp[(3) - (3)]); | 1776 | (yyval) = (yyvsp[(3) - (3)]); |
| 1736 | ;} | 1777 | } |
| 1737 | break; | 1778 | break; |
| 1738 | 1779 | ||
| 1739 | case 21: | 1780 | case 21: |
| 1740 | 1781 | ||
| 1741 | { (yyval) = (yyvsp[(4) - (4)]) ? (yyvsp[(4) - (4)]) : (yyvsp[(3) - (4)]) ? (yyvsp[(3) - (4)]) : (yyvsp[(2) - (4)]) ? (yyvsp[(2) - (4)]) : (yyvsp[(1) - (4)]); ;} | 1782 | { (yyval) = (yyvsp[(4) - (4)]) ? (yyvsp[(4) - (4)]) : (yyvsp[(3) - (4)]) ? (yyvsp[(3) - (4)]) : (yyvsp[(2) - (4)]) ? (yyvsp[(2) - (4)]) : (yyvsp[(1) - (4)]); } |
| 1742 | break; | 1783 | break; |
| 1743 | 1784 | ||
| 1744 | case 22: | 1785 | case 22: |
| 1745 | 1786 | ||
| 1746 | { decl_spec = NULL; ;} | 1787 | { decl_spec = NULL; } |
| 1747 | break; | 1788 | break; |
| 1748 | 1789 | ||
| 1749 | case 24: | 1790 | case 24: |
| 1750 | 1791 | ||
| 1751 | { decl_spec = *(yyvsp[(1) - (1)]); ;} | 1792 | { decl_spec = *(yyvsp[(1) - (1)]); } |
| 1752 | break; | 1793 | break; |
| 1753 | 1794 | ||
| 1754 | case 25: | 1795 | case 25: |
| 1755 | 1796 | ||
| 1756 | { decl_spec = *(yyvsp[(2) - (2)]); ;} | 1797 | { decl_spec = *(yyvsp[(2) - (2)]); } |
| 1757 | break; | 1798 | break; |
| 1758 | 1799 | ||
| 1759 | case 26: | 1800 | case 26: |
| @@ -1762,97 +1803,82 @@ yyreduce: | |||
| 1762 | is really irrelevant to the linkage. */ | 1803 | is really irrelevant to the linkage. */ |
| 1763 | remove_node((yyvsp[(1) - (1)])); | 1804 | remove_node((yyvsp[(1) - (1)])); |
| 1764 | (yyval) = (yyvsp[(1) - (1)]); | 1805 | (yyval) = (yyvsp[(1) - (1)]); |
| 1765 | ;} | 1806 | } |
| 1766 | break; | 1807 | break; |
| 1767 | 1808 | ||
| 1768 | case 31: | 1809 | case 31: |
| 1769 | 1810 | ||
| 1770 | { is_extern = 1; (yyval) = (yyvsp[(1) - (1)]); ;} | 1811 | { is_extern = 1; (yyval) = (yyvsp[(1) - (1)]); } |
| 1771 | break; | 1812 | break; |
| 1772 | 1813 | ||
| 1773 | case 32: | 1814 | case 32: |
| 1774 | 1815 | ||
| 1775 | { is_extern = 0; (yyval) = (yyvsp[(1) - (1)]); ;} | 1816 | { is_extern = 0; (yyval) = (yyvsp[(1) - (1)]); } |
| 1776 | break; | 1817 | break; |
| 1777 | 1818 | ||
| 1778 | case 37: | 1819 | case 37: |
| 1779 | 1820 | ||
| 1780 | { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_STRUCT; (yyval) = (yyvsp[(2) - (2)]); ;} | 1821 | { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_STRUCT; (yyval) = (yyvsp[(2) - (2)]); } |
| 1781 | break; | 1822 | break; |
| 1782 | 1823 | ||
| 1783 | case 38: | 1824 | case 38: |
| 1784 | 1825 | ||
| 1785 | { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_UNION; (yyval) = (yyvsp[(2) - (2)]); ;} | 1826 | { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_UNION; (yyval) = (yyvsp[(2) - (2)]); } |
| 1786 | break; | 1827 | break; |
| 1787 | 1828 | ||
| 1788 | case 39: | 1829 | case 39: |
| 1789 | 1830 | ||
| 1790 | { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_ENUM; (yyval) = (yyvsp[(2) - (2)]); ;} | 1831 | { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_ENUM; (yyval) = (yyvsp[(2) - (2)]); } |
| 1791 | break; | 1832 | break; |
| 1792 | 1833 | ||
| 1793 | case 40: | 1834 | case 40: |
| 1794 | 1835 | ||
| 1795 | { struct string_list *s = *(yyvsp[(3) - (3)]), *i = *(yyvsp[(2) - (3)]), *r; | 1836 | { record_compound((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), SYM_STRUCT); (yyval) = (yyvsp[(3) - (3)]); } |
| 1796 | r = copy_node(i); r->tag = SYM_STRUCT; | ||
| 1797 | r->next = (*(yyvsp[(1) - (3)]))->next; *(yyvsp[(3) - (3)]) = r; (*(yyvsp[(1) - (3)]))->next = NULL; | ||
| 1798 | add_symbol(i->string, SYM_STRUCT, s, is_extern); | ||
| 1799 | (yyval) = (yyvsp[(3) - (3)]); | ||
| 1800 | ;} | ||
| 1801 | break; | 1837 | break; |
| 1802 | 1838 | ||
| 1803 | case 41: | 1839 | case 41: |
| 1804 | 1840 | ||
| 1805 | { struct string_list *s = *(yyvsp[(3) - (3)]), *i = *(yyvsp[(2) - (3)]), *r; | 1841 | { record_compound((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), SYM_UNION); (yyval) = (yyvsp[(3) - (3)]); } |
| 1806 | r = copy_node(i); r->tag = SYM_UNION; | ||
| 1807 | r->next = (*(yyvsp[(1) - (3)]))->next; *(yyvsp[(3) - (3)]) = r; (*(yyvsp[(1) - (3)]))->next = NULL; | ||
| 1808 | add_symbol(i->string, SYM_UNION, s, is_extern); | ||
| 1809 | (yyval) = (yyvsp[(3) - (3)]); | ||
| 1810 | ;} | ||
| 1811 | break; | 1842 | break; |
| 1812 | 1843 | ||
| 1813 | case 42: | 1844 | case 42: |
| 1814 | 1845 | ||
| 1815 | { struct string_list *s = *(yyvsp[(3) - (3)]), *i = *(yyvsp[(2) - (3)]), *r; | 1846 | { record_compound((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), SYM_ENUM); (yyval) = (yyvsp[(3) - (3)]); } |
| 1816 | r = copy_node(i); r->tag = SYM_ENUM; | ||
| 1817 | r->next = (*(yyvsp[(1) - (3)]))->next; *(yyvsp[(3) - (3)]) = r; (*(yyvsp[(1) - (3)]))->next = NULL; | ||
| 1818 | add_symbol(i->string, SYM_ENUM, s, is_extern); | ||
| 1819 | (yyval) = (yyvsp[(3) - (3)]); | ||
| 1820 | ;} | ||
| 1821 | break; | 1847 | break; |
| 1822 | 1848 | ||
| 1823 | case 43: | 1849 | case 43: |
| 1824 | 1850 | ||
| 1825 | { add_symbol(NULL, SYM_ENUM, NULL, 0); (yyval) = (yyvsp[(2) - (2)]); ;} | 1851 | { add_symbol(NULL, SYM_ENUM, NULL, 0); (yyval) = (yyvsp[(2) - (2)]); } |
| 1826 | break; | 1852 | break; |
| 1827 | 1853 | ||
| 1828 | case 44: | 1854 | case 44: |
| 1829 | 1855 | ||
| 1830 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1856 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1831 | break; | 1857 | break; |
| 1832 | 1858 | ||
| 1833 | case 45: | 1859 | case 45: |
| 1834 | 1860 | ||
| 1835 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1861 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1836 | break; | 1862 | break; |
| 1837 | 1863 | ||
| 1838 | case 56: | 1864 | case 56: |
| 1839 | 1865 | ||
| 1840 | { (*(yyvsp[(1) - (1)]))->tag = SYM_TYPEDEF; (yyval) = (yyvsp[(1) - (1)]); ;} | 1866 | { (*(yyvsp[(1) - (1)]))->tag = SYM_TYPEDEF; (yyval) = (yyvsp[(1) - (1)]); } |
| 1841 | break; | 1867 | break; |
| 1842 | 1868 | ||
| 1843 | case 57: | 1869 | case 57: |
| 1844 | 1870 | ||
| 1845 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); ;} | 1871 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); } |
| 1846 | break; | 1872 | break; |
| 1847 | 1873 | ||
| 1848 | case 58: | 1874 | case 58: |
| 1849 | 1875 | ||
| 1850 | { (yyval) = NULL; ;} | 1876 | { (yyval) = NULL; } |
| 1851 | break; | 1877 | break; |
| 1852 | 1878 | ||
| 1853 | case 61: | 1879 | case 61: |
| 1854 | 1880 | ||
| 1855 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1881 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1856 | break; | 1882 | break; |
| 1857 | 1883 | ||
| 1858 | case 65: | 1884 | case 65: |
| @@ -1860,12 +1886,12 @@ yyreduce: | |||
| 1860 | { /* restrict has no effect in prototypes so ignore it */ | 1886 | { /* restrict has no effect in prototypes so ignore it */ |
| 1861 | remove_node((yyvsp[(1) - (1)])); | 1887 | remove_node((yyvsp[(1) - (1)])); |
| 1862 | (yyval) = (yyvsp[(1) - (1)]); | 1888 | (yyval) = (yyvsp[(1) - (1)]); |
| 1863 | ;} | 1889 | } |
| 1864 | break; | 1890 | break; |
| 1865 | 1891 | ||
| 1866 | case 66: | 1892 | case 66: |
| 1867 | 1893 | ||
| 1868 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1894 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1869 | break; | 1895 | break; |
| 1870 | 1896 | ||
| 1871 | case 68: | 1897 | case 68: |
| @@ -1877,97 +1903,97 @@ yyreduce: | |||
| 1877 | current_name = (*(yyvsp[(1) - (1)]))->string; | 1903 | current_name = (*(yyvsp[(1) - (1)]))->string; |
| 1878 | (yyval) = (yyvsp[(1) - (1)]); | 1904 | (yyval) = (yyvsp[(1) - (1)]); |
| 1879 | } | 1905 | } |
| 1880 | ;} | 1906 | } |
| 1881 | break; | 1907 | break; |
| 1882 | 1908 | ||
| 1883 | case 69: | 1909 | case 69: |
| 1884 | 1910 | ||
| 1885 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 1911 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1886 | break; | 1912 | break; |
| 1887 | 1913 | ||
| 1888 | case 70: | 1914 | case 70: |
| 1889 | 1915 | ||
| 1890 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 1916 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1891 | break; | 1917 | break; |
| 1892 | 1918 | ||
| 1893 | case 71: | 1919 | case 71: |
| 1894 | 1920 | ||
| 1895 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1921 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1896 | break; | 1922 | break; |
| 1897 | 1923 | ||
| 1898 | case 72: | 1924 | case 72: |
| 1899 | 1925 | ||
| 1900 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1926 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1901 | break; | 1927 | break; |
| 1902 | 1928 | ||
| 1903 | case 73: | 1929 | case 73: |
| 1904 | 1930 | ||
| 1905 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1931 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1906 | break; | 1932 | break; |
| 1907 | 1933 | ||
| 1908 | case 74: | 1934 | case 74: |
| 1909 | 1935 | ||
| 1910 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1936 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1911 | break; | 1937 | break; |
| 1912 | 1938 | ||
| 1913 | case 78: | 1939 | case 78: |
| 1914 | 1940 | ||
| 1915 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 1941 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1916 | break; | 1942 | break; |
| 1917 | 1943 | ||
| 1918 | case 79: | 1944 | case 79: |
| 1919 | 1945 | ||
| 1920 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 1946 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1921 | break; | 1947 | break; |
| 1922 | 1948 | ||
| 1923 | case 80: | 1949 | case 80: |
| 1924 | 1950 | ||
| 1925 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1951 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1926 | break; | 1952 | break; |
| 1927 | 1953 | ||
| 1928 | case 81: | 1954 | case 81: |
| 1929 | 1955 | ||
| 1930 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1956 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1931 | break; | 1957 | break; |
| 1932 | 1958 | ||
| 1933 | case 82: | 1959 | case 82: |
| 1934 | 1960 | ||
| 1935 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1961 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1936 | break; | 1962 | break; |
| 1937 | 1963 | ||
| 1938 | case 83: | 1964 | case 83: |
| 1939 | 1965 | ||
| 1940 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 1966 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 1941 | break; | 1967 | break; |
| 1942 | 1968 | ||
| 1943 | case 85: | 1969 | case 85: |
| 1944 | 1970 | ||
| 1945 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1971 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1946 | break; | 1972 | break; |
| 1947 | 1973 | ||
| 1948 | case 86: | 1974 | case 86: |
| 1949 | 1975 | ||
| 1950 | { (yyval) = NULL; ;} | 1976 | { (yyval) = NULL; } |
| 1951 | break; | 1977 | break; |
| 1952 | 1978 | ||
| 1953 | case 89: | 1979 | case 89: |
| 1954 | 1980 | ||
| 1955 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 1981 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 1956 | break; | 1982 | break; |
| 1957 | 1983 | ||
| 1958 | case 90: | 1984 | case 90: |
| 1959 | 1985 | ||
| 1960 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); ;} | 1986 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); } |
| 1961 | break; | 1987 | break; |
| 1962 | 1988 | ||
| 1963 | case 91: | 1989 | case 91: |
| 1964 | 1990 | ||
| 1965 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); ;} | 1991 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); } |
| 1966 | break; | 1992 | break; |
| 1967 | 1993 | ||
| 1968 | case 93: | 1994 | case 93: |
| 1969 | 1995 | ||
| 1970 | { (yyval) = NULL; ;} | 1996 | { (yyval) = NULL; } |
| 1971 | break; | 1997 | break; |
| 1972 | 1998 | ||
| 1973 | case 94: | 1999 | case 94: |
| @@ -1976,39 +2002,39 @@ yyreduce: | |||
| 1976 | private parameter names. */ | 2002 | private parameter names. */ |
| 1977 | remove_node((yyvsp[(1) - (1)])); | 2003 | remove_node((yyvsp[(1) - (1)])); |
| 1978 | (yyval) = (yyvsp[(1) - (1)]); | 2004 | (yyval) = (yyvsp[(1) - (1)]); |
| 1979 | ;} | 2005 | } |
| 1980 | break; | 2006 | break; |
| 1981 | 2007 | ||
| 1982 | case 95: | 2008 | case 95: |
| 1983 | 2009 | ||
| 1984 | { remove_node((yyvsp[(1) - (1)])); | 2010 | { remove_node((yyvsp[(1) - (1)])); |
| 1985 | (yyval) = (yyvsp[(1) - (1)]); | 2011 | (yyval) = (yyvsp[(1) - (1)]); |
| 1986 | ;} | 2012 | } |
| 1987 | break; | 2013 | break; |
| 1988 | 2014 | ||
| 1989 | case 96: | 2015 | case 96: |
| 1990 | 2016 | ||
| 1991 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 2017 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1992 | break; | 2018 | break; |
| 1993 | 2019 | ||
| 1994 | case 97: | 2020 | case 97: |
| 1995 | 2021 | ||
| 1996 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 2022 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 1997 | break; | 2023 | break; |
| 1998 | 2024 | ||
| 1999 | case 98: | 2025 | case 98: |
| 2000 | 2026 | ||
| 2001 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 2027 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 2002 | break; | 2028 | break; |
| 2003 | 2029 | ||
| 2004 | case 99: | 2030 | case 99: |
| 2005 | 2031 | ||
| 2006 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2032 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2007 | break; | 2033 | break; |
| 2008 | 2034 | ||
| 2009 | case 100: | 2035 | case 100: |
| 2010 | 2036 | ||
| 2011 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2037 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2012 | break; | 2038 | break; |
| 2013 | 2039 | ||
| 2014 | case 101: | 2040 | case 101: |
| @@ -2017,87 +2043,87 @@ yyreduce: | |||
| 2017 | *(yyvsp[(2) - (3)]) = NULL; | 2043 | *(yyvsp[(2) - (3)]) = NULL; |
| 2018 | add_symbol(current_name, SYM_NORMAL, decl, is_extern); | 2044 | add_symbol(current_name, SYM_NORMAL, decl, is_extern); |
| 2019 | (yyval) = (yyvsp[(3) - (3)]); | 2045 | (yyval) = (yyvsp[(3) - (3)]); |
| 2020 | ;} | 2046 | } |
| 2021 | break; | 2047 | break; |
| 2022 | 2048 | ||
| 2023 | case 102: | 2049 | case 102: |
| 2024 | 2050 | ||
| 2025 | { (yyval) = NULL; ;} | 2051 | { (yyval) = NULL; } |
| 2026 | break; | 2052 | break; |
| 2027 | 2053 | ||
| 2028 | case 104: | 2054 | case 104: |
| 2029 | 2055 | ||
| 2030 | { remove_list((yyvsp[(2) - (2)]), &(*(yyvsp[(1) - (2)]))->next); (yyval) = (yyvsp[(2) - (2)]); ;} | 2056 | { remove_list((yyvsp[(2) - (2)]), &(*(yyvsp[(1) - (2)]))->next); (yyval) = (yyvsp[(2) - (2)]); } |
| 2031 | break; | 2057 | break; |
| 2032 | 2058 | ||
| 2033 | case 105: | 2059 | case 105: |
| 2034 | 2060 | ||
| 2035 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2061 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2036 | break; | 2062 | break; |
| 2037 | 2063 | ||
| 2038 | case 106: | 2064 | case 106: |
| 2039 | 2065 | ||
| 2040 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2066 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2041 | break; | 2067 | break; |
| 2042 | 2068 | ||
| 2043 | case 107: | 2069 | case 107: |
| 2044 | 2070 | ||
| 2045 | { (yyval) = NULL; ;} | 2071 | { (yyval) = NULL; } |
| 2046 | break; | 2072 | break; |
| 2047 | 2073 | ||
| 2048 | case 110: | 2074 | case 110: |
| 2049 | 2075 | ||
| 2050 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 2076 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 2051 | break; | 2077 | break; |
| 2052 | 2078 | ||
| 2053 | case 111: | 2079 | case 111: |
| 2054 | 2080 | ||
| 2055 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2081 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2056 | break; | 2082 | break; |
| 2057 | 2083 | ||
| 2058 | case 112: | 2084 | case 112: |
| 2059 | 2085 | ||
| 2060 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 2086 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 2061 | break; | 2087 | break; |
| 2062 | 2088 | ||
| 2063 | case 113: | 2089 | case 113: |
| 2064 | 2090 | ||
| 2065 | { (yyval) = NULL; ;} | 2091 | { (yyval) = NULL; } |
| 2066 | break; | 2092 | break; |
| 2067 | 2093 | ||
| 2068 | case 116: | 2094 | case 116: |
| 2069 | 2095 | ||
| 2070 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2096 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2071 | break; | 2097 | break; |
| 2072 | 2098 | ||
| 2073 | case 117: | 2099 | case 117: |
| 2074 | 2100 | ||
| 2075 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); ;} | 2101 | { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); } |
| 2076 | break; | 2102 | break; |
| 2077 | 2103 | ||
| 2078 | case 118: | 2104 | case 118: |
| 2079 | 2105 | ||
| 2080 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 2106 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 2081 | break; | 2107 | break; |
| 2082 | 2108 | ||
| 2083 | case 120: | 2109 | case 120: |
| 2084 | 2110 | ||
| 2085 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 2111 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 2086 | break; | 2112 | break; |
| 2087 | 2113 | ||
| 2088 | case 121: | 2114 | case 121: |
| 2089 | 2115 | ||
| 2090 | { (yyval) = NULL; ;} | 2116 | { (yyval) = NULL; } |
| 2091 | break; | 2117 | break; |
| 2092 | 2118 | ||
| 2093 | case 123: | 2119 | case 123: |
| 2094 | 2120 | ||
| 2095 | { (yyval) = (yyvsp[(3) - (3)]); ;} | 2121 | { (yyval) = (yyvsp[(3) - (3)]); } |
| 2096 | break; | 2122 | break; |
| 2097 | 2123 | ||
| 2098 | case 124: | 2124 | case 124: |
| 2099 | 2125 | ||
| 2100 | { (yyval) = (yyvsp[(4) - (4)]); ;} | 2126 | { (yyval) = (yyvsp[(4) - (4)]); } |
| 2101 | break; | 2127 | break; |
| 2102 | 2128 | ||
| 2103 | case 127: | 2129 | case 127: |
| @@ -2105,7 +2131,7 @@ yyreduce: | |||
| 2105 | { | 2131 | { |
| 2106 | const char *name = strdup((*(yyvsp[(1) - (1)]))->string); | 2132 | const char *name = strdup((*(yyvsp[(1) - (1)]))->string); |
| 2107 | add_symbol(name, SYM_ENUM_CONST, NULL, 0); | 2133 | add_symbol(name, SYM_ENUM_CONST, NULL, 0); |
| 2108 | ;} | 2134 | } |
| 2109 | break; | 2135 | break; |
| 2110 | 2136 | ||
| 2111 | case 128: | 2137 | case 128: |
| @@ -2114,28 +2140,39 @@ yyreduce: | |||
| 2114 | const char *name = strdup((*(yyvsp[(1) - (3)]))->string); | 2140 | const char *name = strdup((*(yyvsp[(1) - (3)]))->string); |
| 2115 | struct string_list *expr = copy_list_range(*(yyvsp[(3) - (3)]), *(yyvsp[(2) - (3)])); | 2141 | struct string_list *expr = copy_list_range(*(yyvsp[(3) - (3)]), *(yyvsp[(2) - (3)])); |
| 2116 | add_symbol(name, SYM_ENUM_CONST, expr, 0); | 2142 | add_symbol(name, SYM_ENUM_CONST, expr, 0); |
| 2117 | ;} | 2143 | } |
| 2118 | break; | 2144 | break; |
| 2119 | 2145 | ||
| 2120 | case 129: | 2146 | case 129: |
| 2121 | 2147 | ||
| 2122 | { (yyval) = (yyvsp[(2) - (2)]); ;} | 2148 | { (yyval) = (yyvsp[(2) - (2)]); } |
| 2123 | break; | 2149 | break; |
| 2124 | 2150 | ||
| 2125 | case 130: | 2151 | case 130: |
| 2126 | 2152 | ||
| 2127 | { (yyval) = NULL; ;} | 2153 | { (yyval) = NULL; } |
| 2128 | break; | 2154 | break; |
| 2129 | 2155 | ||
| 2130 | case 132: | 2156 | case 132: |
| 2131 | 2157 | ||
| 2132 | { export_symbol((*(yyvsp[(3) - (5)]))->string); (yyval) = (yyvsp[(5) - (5)]); ;} | 2158 | { export_symbol((*(yyvsp[(3) - (5)]))->string); (yyval) = (yyvsp[(5) - (5)]); } |
| 2133 | break; | 2159 | break; |
| 2134 | 2160 | ||
| 2135 | 2161 | ||
| 2136 | 2162 | ||
| 2137 | default: break; | 2163 | default: break; |
| 2138 | } | 2164 | } |
| 2165 | /* User semantic actions sometimes alter yychar, and that requires | ||
| 2166 | that yytoken be updated with the new translation. We take the | ||
| 2167 | approach of translating immediately before every use of yytoken. | ||
| 2168 | One alternative is translating here after every semantic action, | ||
| 2169 | but that translation would be missed if the semantic action invokes | ||
| 2170 | YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or | ||
| 2171 | if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an | ||
| 2172 | incorrect destructor might then be invoked immediately. In the | ||
| 2173 | case of YYERROR or YYBACKUP, subsequent parser actions might lead | ||
| 2174 | to an incorrect destructor call or verbose syntax error message | ||
| 2175 | before the lookahead is translated. */ | ||
| 2139 | YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); | 2176 | YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); |
| 2140 | 2177 | ||
| 2141 | YYPOPSTACK (yylen); | 2178 | YYPOPSTACK (yylen); |
| @@ -2163,6 +2200,10 @@ yyreduce: | |||
| 2163 | | yyerrlab -- here on detecting error | | 2200 | | yyerrlab -- here on detecting error | |
| 2164 | `------------------------------------*/ | 2201 | `------------------------------------*/ |
| 2165 | yyerrlab: | 2202 | yyerrlab: |
| 2203 | /* Make sure we have latest lookahead translation. See comments at | ||
| 2204 | user semantic actions for why this is necessary. */ | ||
| 2205 | yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); | ||
| 2206 | |||
| 2166 | /* If not already recovering from an error, report this error. */ | 2207 | /* If not already recovering from an error, report this error. */ |
| 2167 | if (!yyerrstatus) | 2208 | if (!yyerrstatus) |
| 2168 | { | 2209 | { |
| @@ -2170,37 +2211,36 @@ yyerrlab: | |||
| 2170 | #if ! YYERROR_VERBOSE | 2211 | #if ! YYERROR_VERBOSE |
| 2171 | yyerror (YY_("syntax error")); | 2212 | yyerror (YY_("syntax error")); |
| 2172 | #else | 2213 | #else |
| 2214 | # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ | ||
| 2215 | yyssp, yytoken) | ||
| 2173 | { | 2216 | { |
| 2174 | YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); | 2217 | char const *yymsgp = YY_("syntax error"); |
| 2175 | if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) | 2218 | int yysyntax_error_status; |
| 2176 | { | 2219 | yysyntax_error_status = YYSYNTAX_ERROR; |
| 2177 | YYSIZE_T yyalloc = 2 * yysize; | 2220 | if (yysyntax_error_status == 0) |
| 2178 | if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) | 2221 | yymsgp = yymsg; |
| 2179 | yyalloc = YYSTACK_ALLOC_MAXIMUM; | 2222 | else if (yysyntax_error_status == 1) |
| 2180 | if (yymsg != yymsgbuf) | 2223 | { |
| 2181 | YYSTACK_FREE (yymsg); | 2224 | if (yymsg != yymsgbuf) |
| 2182 | yymsg = (char *) YYSTACK_ALLOC (yyalloc); | 2225 | YYSTACK_FREE (yymsg); |
| 2183 | if (yymsg) | 2226 | yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); |
| 2184 | yymsg_alloc = yyalloc; | 2227 | if (!yymsg) |
| 2185 | else | 2228 | { |
| 2186 | { | 2229 | yymsg = yymsgbuf; |
| 2187 | yymsg = yymsgbuf; | 2230 | yymsg_alloc = sizeof yymsgbuf; |
| 2188 | yymsg_alloc = sizeof yymsgbuf; | 2231 | yysyntax_error_status = 2; |
| 2189 | } | 2232 | } |
| 2190 | } | 2233 | else |
| 2191 | 2234 | { | |
| 2192 | if (0 < yysize && yysize <= yymsg_alloc) | 2235 | yysyntax_error_status = YYSYNTAX_ERROR; |
| 2193 | { | 2236 | yymsgp = yymsg; |
| 2194 | (void) yysyntax_error (yymsg, yystate, yychar); | 2237 | } |
| 2195 | yyerror (yymsg); | 2238 | } |
| 2196 | } | 2239 | yyerror (yymsgp); |
| 2197 | else | 2240 | if (yysyntax_error_status == 2) |
| 2198 | { | 2241 | goto yyexhaustedlab; |
| 2199 | yyerror (YY_("syntax error")); | ||
| 2200 | if (yysize != 0) | ||
| 2201 | goto yyexhaustedlab; | ||
| 2202 | } | ||
| 2203 | } | 2242 | } |
| 2243 | # undef YYSYNTAX_ERROR | ||
| 2204 | #endif | 2244 | #endif |
| 2205 | } | 2245 | } |
| 2206 | 2246 | ||
| @@ -2259,7 +2299,7 @@ yyerrlab1: | |||
| 2259 | for (;;) | 2299 | for (;;) |
| 2260 | { | 2300 | { |
| 2261 | yyn = yypact[yystate]; | 2301 | yyn = yypact[yystate]; |
| 2262 | if (yyn != YYPACT_NINF) | 2302 | if (!yypact_value_is_default (yyn)) |
| 2263 | { | 2303 | { |
| 2264 | yyn += YYTERROR; | 2304 | yyn += YYTERROR; |
| 2265 | if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) | 2305 | if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) |
| @@ -2318,8 +2358,13 @@ yyexhaustedlab: | |||
| 2318 | 2358 | ||
| 2319 | yyreturn: | 2359 | yyreturn: |
| 2320 | if (yychar != YYEMPTY) | 2360 | if (yychar != YYEMPTY) |
| 2321 | yydestruct ("Cleanup: discarding lookahead", | 2361 | { |
| 2322 | yytoken, &yylval); | 2362 | /* Make sure we have latest lookahead translation. See comments at |
| 2363 | user semantic actions for why this is necessary. */ | ||
| 2364 | yytoken = YYTRANSLATE (yychar); | ||
| 2365 | yydestruct ("Cleanup: discarding lookahead", | ||
| 2366 | yytoken, &yylval); | ||
| 2367 | } | ||
| 2323 | /* Do not reclaim the symbols of the rule which action triggered | 2368 | /* Do not reclaim the symbols of the rule which action triggered |
| 2324 | this YYABORT or YYACCEPT. */ | 2369 | this YYABORT or YYACCEPT. */ |
| 2325 | YYPOPSTACK (yylen); | 2370 | YYPOPSTACK (yylen); |
diff --git a/scripts/genksyms/parse.tab.h_shipped b/scripts/genksyms/parse.tab.h_shipped index 350c2b403e21..93240a3cdecc 100644 --- a/scripts/genksyms/parse.tab.h_shipped +++ b/scripts/genksyms/parse.tab.h_shipped | |||
| @@ -1,9 +1,8 @@ | |||
| 1 | /* A Bison parser, made by GNU Bison 2.4.3. */ | 1 | /* A Bison parser, made by GNU Bison 2.5. */ |
| 2 | 2 | ||
| 3 | /* Skeleton interface for Bison's Yacc-like parsers in C | 3 | /* Bison interface for Yacc-like parsers in C |
| 4 | 4 | ||
| 5 | Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, | 5 | Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. |
| 6 | 2009, 2010 Free Software Foundation, Inc. | ||
| 7 | 6 | ||
| 8 | This program is free software: you can redistribute it and/or modify | 7 | This program is free software: you can redistribute it and/or modify |
| 9 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
diff --git a/scripts/genksyms/parse.y b/scripts/genksyms/parse.y index ba5c242866c1..23c39998ad86 100644 --- a/scripts/genksyms/parse.y +++ b/scripts/genksyms/parse.y | |||
| @@ -51,6 +51,25 @@ remove_list(struct string_list **pb, struct string_list **pe) | |||
| 51 | free_list(b, e); | 51 | free_list(b, e); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | /* Record definition of a struct/union/enum */ | ||
| 55 | static void record_compound(struct string_list **keyw, | ||
| 56 | struct string_list **ident, | ||
| 57 | struct string_list **body, | ||
| 58 | enum symbol_type type) | ||
| 59 | { | ||
| 60 | struct string_list *b = *body, *i = *ident, *r; | ||
| 61 | |||
| 62 | if (i->in_source_file) { | ||
| 63 | remove_node(keyw); | ||
| 64 | (*ident)->tag = type; | ||
| 65 | remove_list(body, ident); | ||
| 66 | return; | ||
| 67 | } | ||
| 68 | r = copy_node(i); r->tag = type; | ||
| 69 | r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL; | ||
| 70 | add_symbol(i->string, type, b, is_extern); | ||
| 71 | } | ||
| 72 | |||
| 54 | %} | 73 | %} |
| 55 | 74 | ||
| 56 | %token ASM_KEYW | 75 | %token ASM_KEYW |
| @@ -215,26 +234,11 @@ type_specifier: | |||
| 215 | 234 | ||
| 216 | /* Full definitions of an s/u/e. Record it. */ | 235 | /* Full definitions of an s/u/e. Record it. */ |
| 217 | | STRUCT_KEYW IDENT class_body | 236 | | STRUCT_KEYW IDENT class_body |
| 218 | { struct string_list *s = *$3, *i = *$2, *r; | 237 | { record_compound($1, $2, $3, SYM_STRUCT); $$ = $3; } |
| 219 | r = copy_node(i); r->tag = SYM_STRUCT; | ||
| 220 | r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL; | ||
| 221 | add_symbol(i->string, SYM_STRUCT, s, is_extern); | ||
| 222 | $$ = $3; | ||
| 223 | } | ||
| 224 | | UNION_KEYW IDENT class_body | 238 | | UNION_KEYW IDENT class_body |
| 225 | { struct string_list *s = *$3, *i = *$2, *r; | 239 | { record_compound($1, $2, $3, SYM_UNION); $$ = $3; } |
| 226 | r = copy_node(i); r->tag = SYM_UNION; | ||
| 227 | r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL; | ||
| 228 | add_symbol(i->string, SYM_UNION, s, is_extern); | ||
| 229 | $$ = $3; | ||
| 230 | } | ||
| 231 | | ENUM_KEYW IDENT enum_body | 240 | | ENUM_KEYW IDENT enum_body |
| 232 | { struct string_list *s = *$3, *i = *$2, *r; | 241 | { record_compound($1, $2, $3, SYM_ENUM); $$ = $3; } |
| 233 | r = copy_node(i); r->tag = SYM_ENUM; | ||
| 234 | r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL; | ||
| 235 | add_symbol(i->string, SYM_ENUM, s, is_extern); | ||
| 236 | $$ = $3; | ||
| 237 | } | ||
| 238 | /* | 242 | /* |
| 239 | * Anonymous enum definition. Tell add_symbol() to restart its counter. | 243 | * Anonymous enum definition. Tell add_symbol() to restart its counter. |
| 240 | */ | 244 | */ |
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 82d2eb285b70..ba573fe7c74d 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile | |||
| @@ -33,17 +33,9 @@ silentoldconfig: $(obj)/conf | |||
| 33 | $(Q)mkdir -p include/generated | 33 | $(Q)mkdir -p include/generated |
| 34 | $< --$@ $(Kconfig) | 34 | $< --$@ $(Kconfig) |
| 35 | 35 | ||
| 36 | # if no path is given, then use src directory to find file | 36 | localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf |
| 37 | ifdef LSMOD | ||
| 38 | LSMOD_F := $(LSMOD) | ||
| 39 | ifeq ($(findstring /,$(LSMOD)),) | ||
| 40 | LSMOD_F := $(objtree)/$(LSMOD) | ||
| 41 | endif | ||
| 42 | endif | ||
| 43 | |||
| 44 | localmodconfig: $(obj)/streamline_config.pl $(obj)/conf | ||
| 45 | $(Q)mkdir -p include/generated | 37 | $(Q)mkdir -p include/generated |
| 46 | $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config | 38 | $(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config |
| 47 | $(Q)if [ -f .config ]; then \ | 39 | $(Q)if [ -f .config ]; then \ |
| 48 | cmp -s .tmp.config .config || \ | 40 | cmp -s .tmp.config .config || \ |
| 49 | (mv -f .config .config.old.1; \ | 41 | (mv -f .config .config.old.1; \ |
| @@ -56,22 +48,6 @@ localmodconfig: $(obj)/streamline_config.pl $(obj)/conf | |||
| 56 | fi | 48 | fi |
| 57 | $(Q)rm -f .tmp.config | 49 | $(Q)rm -f .tmp.config |
| 58 | 50 | ||
| 59 | localyesconfig: $(obj)/streamline_config.pl $(obj)/conf | ||
| 60 | $(Q)mkdir -p include/generated | ||
| 61 | $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config | ||
| 62 | $(Q)sed -i s/=m/=y/ .tmp.config | ||
| 63 | $(Q)if [ -f .config ]; then \ | ||
| 64 | cmp -s .tmp.config .config || \ | ||
| 65 | (mv -f .config .config.old.1; \ | ||
| 66 | mv -f .tmp.config .config; \ | ||
| 67 | $(obj)/conf --silentoldconfig $(Kconfig); \ | ||
| 68 | mv -f .config.old.1 .config.old) \ | ||
| 69 | else \ | ||
| 70 | mv -f .tmp.config .config; \ | ||
| 71 | $(obj)/conf --silentoldconfig $(Kconfig); \ | ||
| 72 | fi | ||
| 73 | $(Q)rm -f .tmp.config | ||
| 74 | |||
| 75 | # Create new linux.pot file | 51 | # Create new linux.pot file |
| 76 | # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files | 52 | # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files |
| 77 | # The symlink is used to repair a deficiency in arch/um | 53 | # The symlink is used to repair a deficiency in arch/um |
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 59b667cae5f3..5a58965d8800 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
| @@ -503,17 +503,6 @@ header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) | |||
| 503 | fprintf(fp, "#define %s%s%s 1\n", | 503 | fprintf(fp, "#define %s%s%s 1\n", |
| 504 | CONFIG_, sym->name, suffix); | 504 | CONFIG_, sym->name, suffix); |
| 505 | } | 505 | } |
| 506 | /* | ||
| 507 | * Generate the __enabled_CONFIG_* and | ||
| 508 | * __enabled_CONFIG_*_MODULE macros for use by the | ||
| 509 | * IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is | ||
| 510 | * generated even for booleans so that the IS_ENABLED() macro | ||
| 511 | * works. | ||
| 512 | */ | ||
| 513 | fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n", | ||
| 514 | sym->name, (*value == 'y')); | ||
| 515 | fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n", | ||
| 516 | sym->name, (*value == 'm')); | ||
| 517 | break; | 506 | break; |
| 518 | } | 507 | } |
| 519 | case S_HEX: { | 508 | case S_HEX: { |
| @@ -565,6 +554,35 @@ static struct conf_printer header_printer_cb = | |||
| 565 | }; | 554 | }; |
| 566 | 555 | ||
| 567 | /* | 556 | /* |
| 557 | * Generate the __enabled_CONFIG_* and __enabled_CONFIG_*_MODULE macros for | ||
| 558 | * use by the IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is | ||
| 559 | * generated even for booleans so that the IS_ENABLED() macro works. | ||
| 560 | */ | ||
| 561 | static void | ||
| 562 | header_print__enabled_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) | ||
| 563 | { | ||
| 564 | |||
| 565 | switch (sym->type) { | ||
| 566 | case S_BOOLEAN: | ||
| 567 | case S_TRISTATE: { | ||
| 568 | fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n", | ||
| 569 | sym->name, (*value == 'y')); | ||
| 570 | fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n", | ||
| 571 | sym->name, (*value == 'm')); | ||
| 572 | break; | ||
| 573 | } | ||
| 574 | default: | ||
| 575 | break; | ||
| 576 | } | ||
| 577 | } | ||
| 578 | |||
| 579 | static struct conf_printer header__enabled_printer_cb = | ||
| 580 | { | ||
| 581 | .print_symbol = header_print__enabled_symbol, | ||
| 582 | .print_comment = header_print_comment, | ||
| 583 | }; | ||
| 584 | |||
| 585 | /* | ||
| 568 | * Tristate printer | 586 | * Tristate printer |
| 569 | * | 587 | * |
| 570 | * This printer is used when generating the `include/config/tristate.conf' file. | 588 | * This printer is used when generating the `include/config/tristate.conf' file. |
| @@ -945,11 +963,16 @@ int conf_write_autoconf(void) | |||
| 945 | conf_write_heading(out_h, &header_printer_cb, NULL); | 963 | conf_write_heading(out_h, &header_printer_cb, NULL); |
| 946 | 964 | ||
| 947 | for_all_symbols(i, sym) { | 965 | for_all_symbols(i, sym) { |
| 966 | if (!sym->name) | ||
| 967 | continue; | ||
| 968 | |||
| 948 | sym_calc_value(sym); | 969 | sym_calc_value(sym); |
| 949 | if (!(sym->flags & SYMBOL_WRITE) || !sym->name) | 970 | |
| 971 | conf_write_symbol(out_h, sym, &header__enabled_printer_cb, NULL); | ||
| 972 | |||
| 973 | if (!(sym->flags & SYMBOL_WRITE)) | ||
| 950 | continue; | 974 | continue; |
| 951 | 975 | ||
| 952 | /* write symbol to auto.conf, tristate and header files */ | ||
| 953 | conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); | 976 | conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); |
| 954 | 977 | ||
| 955 | conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1); | 978 | conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1); |
diff --git a/scripts/kconfig/lxdialog/textbox.c b/scripts/kconfig/lxdialog/textbox.c index c704712d0227..154c2dd245b7 100644 --- a/scripts/kconfig/lxdialog/textbox.c +++ b/scripts/kconfig/lxdialog/textbox.c | |||
| @@ -320,7 +320,6 @@ static void print_page(WINDOW * win, int height, int width) | |||
| 320 | */ | 320 | */ |
| 321 | static void print_line(WINDOW * win, int row, int width) | 321 | static void print_line(WINDOW * win, int row, int width) |
| 322 | { | 322 | { |
| 323 | int y, x; | ||
| 324 | char *line; | 323 | char *line; |
| 325 | 324 | ||
| 326 | line = get_line(); | 325 | line = get_line(); |
| @@ -329,10 +328,10 @@ static void print_line(WINDOW * win, int row, int width) | |||
| 329 | waddch(win, ' '); | 328 | waddch(win, ' '); |
| 330 | waddnstr(win, line, MIN(strlen(line), width - 2)); | 329 | waddnstr(win, line, MIN(strlen(line), width - 2)); |
| 331 | 330 | ||
| 332 | getyx(win, y, x); | ||
| 333 | /* Clear 'residue' of previous line */ | 331 | /* Clear 'residue' of previous line */ |
| 334 | #if OLD_NCURSES | 332 | #if OLD_NCURSES |
| 335 | { | 333 | { |
| 334 | int x = getcurx(win); | ||
| 336 | int i; | 335 | int i; |
| 337 | for (i = 0; i < width - x; i++) | 336 | for (i = 0; i < width - x; i++) |
| 338 | waddch(win, ' '); | 337 | waddch(win, ' '); |
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 820d2b6800fb..19e200d91120 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <stdarg.h> | 15 | #include <stdarg.h> |
| 16 | #include <stdlib.h> | 16 | #include <stdlib.h> |
| 17 | #include <string.h> | 17 | #include <string.h> |
| 18 | #include <signal.h> | ||
| 18 | #include <unistd.h> | 19 | #include <unistd.h> |
| 19 | #include <locale.h> | 20 | #include <locale.h> |
| 20 | 21 | ||
| @@ -272,6 +273,7 @@ static struct menu *current_menu; | |||
| 272 | static int child_count; | 273 | static int child_count; |
| 273 | static int single_menu_mode; | 274 | static int single_menu_mode; |
| 274 | static int show_all_options; | 275 | static int show_all_options; |
| 276 | static int saved_x, saved_y; | ||
| 275 | 277 | ||
| 276 | static void conf(struct menu *menu); | 278 | static void conf(struct menu *menu); |
| 277 | static void conf_choice(struct menu *menu); | 279 | static void conf_choice(struct menu *menu); |
| @@ -792,9 +794,54 @@ static void conf_save(void) | |||
| 792 | } | 794 | } |
| 793 | } | 795 | } |
| 794 | 796 | ||
| 797 | static int handle_exit(void) | ||
| 798 | { | ||
| 799 | int res; | ||
| 800 | |||
| 801 | dialog_clear(); | ||
| 802 | if (conf_get_changed()) | ||
| 803 | res = dialog_yesno(NULL, | ||
| 804 | _("Do you wish to save your new configuration ?\n" | ||
| 805 | "<ESC><ESC> to continue."), | ||
| 806 | 6, 60); | ||
| 807 | else | ||
| 808 | res = -1; | ||
| 809 | |||
| 810 | end_dialog(saved_x, saved_y); | ||
| 811 | |||
| 812 | switch (res) { | ||
| 813 | case 0: | ||
| 814 | if (conf_write(filename)) { | ||
| 815 | fprintf(stderr, _("\n\n" | ||
| 816 | "Error while writing of the configuration.\n" | ||
| 817 | "Your configuration changes were NOT saved." | ||
| 818 | "\n\n")); | ||
| 819 | return 1; | ||
| 820 | } | ||
| 821 | /* fall through */ | ||
| 822 | case -1: | ||
| 823 | printf(_("\n\n" | ||
| 824 | "*** End of the configuration.\n" | ||
| 825 | "*** Execute 'make' to start the build or try 'make help'." | ||
| 826 | "\n\n")); | ||
| 827 | res = 0; | ||
| 828 | break; | ||
| 829 | default: | ||
| 830 | fprintf(stderr, _("\n\n" | ||
| 831 | "Your configuration changes were NOT saved." | ||
| 832 | "\n\n")); | ||
| 833 | } | ||
| 834 | |||
| 835 | return res; | ||
| 836 | } | ||
| 837 | |||
| 838 | static void sig_handler(int signo) | ||
| 839 | { | ||
| 840 | exit(handle_exit()); | ||
| 841 | } | ||
| 842 | |||
| 795 | int main(int ac, char **av) | 843 | int main(int ac, char **av) |
| 796 | { | 844 | { |
| 797 | int saved_x, saved_y; | ||
| 798 | char *mode; | 845 | char *mode; |
| 799 | int res; | 846 | int res; |
| 800 | 847 | ||
| @@ -802,6 +849,8 @@ int main(int ac, char **av) | |||
| 802 | bindtextdomain(PACKAGE, LOCALEDIR); | 849 | bindtextdomain(PACKAGE, LOCALEDIR); |
| 803 | textdomain(PACKAGE); | 850 | textdomain(PACKAGE); |
| 804 | 851 | ||
| 852 | signal(SIGINT, sig_handler); | ||
| 853 | |||
| 805 | conf_parse(av[1]); | 854 | conf_parse(av[1]); |
| 806 | conf_read(NULL); | 855 | conf_read(NULL); |
| 807 | 856 | ||
| @@ -823,40 +872,9 @@ int main(int ac, char **av) | |||
| 823 | set_config_filename(conf_get_configname()); | 872 | set_config_filename(conf_get_configname()); |
| 824 | do { | 873 | do { |
| 825 | conf(&rootmenu); | 874 | conf(&rootmenu); |
| 826 | dialog_clear(); | 875 | res = handle_exit(); |
| 827 | if (conf_get_changed()) | ||
| 828 | res = dialog_yesno(NULL, | ||
| 829 | _("Do you wish to save your " | ||
| 830 | "new configuration?\n" | ||
| 831 | "<ESC><ESC> to continue."), | ||
| 832 | 6, 60); | ||
| 833 | else | ||
| 834 | res = -1; | ||
| 835 | } while (res == KEY_ESC); | 876 | } while (res == KEY_ESC); |
| 836 | end_dialog(saved_x, saved_y); | ||
| 837 | |||
| 838 | switch (res) { | ||
| 839 | case 0: | ||
| 840 | if (conf_write(filename)) { | ||
| 841 | fprintf(stderr, _("\n\n" | ||
| 842 | "Error while writing of the configuration.\n" | ||
| 843 | "Your configuration changes were NOT saved." | ||
| 844 | "\n\n")); | ||
| 845 | return 1; | ||
| 846 | } | ||
| 847 | /* fall through */ | ||
| 848 | case -1: | ||
| 849 | printf(_("\n\n" | ||
| 850 | "*** End of the configuration.\n" | ||
| 851 | "*** Execute 'make' to start the build or try 'make help'." | ||
| 852 | "\n\n")); | ||
| 853 | break; | ||
| 854 | default: | ||
| 855 | fprintf(stderr, _("\n\n" | ||
| 856 | "Your configuration changes were NOT saved." | ||
| 857 | "\n\n")); | ||
| 858 | } | ||
| 859 | 877 | ||
| 860 | return 0; | 878 | return res; |
| 861 | } | 879 | } |
| 862 | 880 | ||
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index d66008639a43..8c2a97e60faf 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c | |||
| @@ -10,8 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | #include "lkc.h" | 11 | #include "lkc.h" |
| 12 | 12 | ||
| 13 | static const char nohelp_text[] = N_( | 13 | static const char nohelp_text[] = "There is no help available for this option."; |
| 14 | "There is no help available for this option.\n"); | ||
| 15 | 14 | ||
| 16 | struct menu rootmenu; | 15 | struct menu rootmenu; |
| 17 | static struct menu **last_entry_ptr; | 16 | static struct menu **last_entry_ptr; |
| @@ -595,16 +594,14 @@ struct gstr get_relations_str(struct symbol **sym_arr) | |||
| 595 | void menu_get_ext_help(struct menu *menu, struct gstr *help) | 594 | void menu_get_ext_help(struct menu *menu, struct gstr *help) |
| 596 | { | 595 | { |
| 597 | struct symbol *sym = menu->sym; | 596 | struct symbol *sym = menu->sym; |
| 597 | const char *help_text = nohelp_text; | ||
| 598 | 598 | ||
| 599 | if (menu_has_help(menu)) { | 599 | if (menu_has_help(menu)) { |
| 600 | if (sym->name) { | 600 | if (sym->name) |
| 601 | str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); | 601 | str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); |
| 602 | str_append(help, _(menu_get_help(menu))); | 602 | help_text = menu_get_help(menu); |
| 603 | str_append(help, "\n"); | ||
| 604 | } | ||
| 605 | } else { | ||
| 606 | str_append(help, nohelp_text); | ||
| 607 | } | 603 | } |
| 604 | str_printf(help, "%s\n", _(help_text)); | ||
| 608 | if (sym) | 605 | if (sym) |
| 609 | get_symbol_str(help, sym); | 606 | get_symbol_str(help, sym); |
| 610 | } | 607 | } |
diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c index 39ca1f1640ea..73070cb0b6de 100644 --- a/scripts/kconfig/nconf.c +++ b/scripts/kconfig/nconf.c | |||
| @@ -182,8 +182,6 @@ setmod_text[] = N_( | |||
| 182 | "This feature depends on another which\n" | 182 | "This feature depends on another which\n" |
| 183 | "has been configured as a module.\n" | 183 | "has been configured as a module.\n" |
| 184 | "As a result, this feature will be built as a module."), | 184 | "As a result, this feature will be built as a module."), |
| 185 | nohelp_text[] = N_( | ||
| 186 | "There is no help available for this option.\n"), | ||
| 187 | load_config_text[] = N_( | 185 | load_config_text[] = N_( |
| 188 | "Enter the name of the configuration file you wish to load.\n" | 186 | "Enter the name of the configuration file you wish to load.\n" |
| 189 | "Accept the name shown to restore the configuration you\n" | 187 | "Accept the name shown to restore the configuration you\n" |
| @@ -280,6 +278,9 @@ static int global_exit; | |||
| 280 | /* the currently selected button */ | 278 | /* the currently selected button */ |
| 281 | const char *current_instructions = menu_instructions; | 279 | const char *current_instructions = menu_instructions; |
| 282 | 280 | ||
| 281 | static char *dialog_input_result; | ||
| 282 | static int dialog_input_result_len; | ||
| 283 | |||
| 283 | static void conf(struct menu *menu); | 284 | static void conf(struct menu *menu); |
| 284 | static void conf_choice(struct menu *menu); | 285 | static void conf_choice(struct menu *menu); |
| 285 | static void conf_string(struct menu *menu); | 286 | static void conf_string(struct menu *menu); |
| @@ -695,7 +696,6 @@ static void search_conf(void) | |||
| 695 | { | 696 | { |
| 696 | struct symbol **sym_arr; | 697 | struct symbol **sym_arr; |
| 697 | struct gstr res; | 698 | struct gstr res; |
| 698 | char dialog_input_result[100]; | ||
| 699 | char *dialog_input; | 699 | char *dialog_input; |
| 700 | int dres; | 700 | int dres; |
| 701 | again: | 701 | again: |
| @@ -703,7 +703,7 @@ again: | |||
| 703 | _("Search Configuration Parameter"), | 703 | _("Search Configuration Parameter"), |
| 704 | _("Enter " CONFIG_ " (sub)string to search for " | 704 | _("Enter " CONFIG_ " (sub)string to search for " |
| 705 | "(with or without \"" CONFIG_ "\")"), | 705 | "(with or without \"" CONFIG_ "\")"), |
| 706 | "", dialog_input_result, 99); | 706 | "", &dialog_input_result, &dialog_input_result_len); |
| 707 | switch (dres) { | 707 | switch (dres) { |
| 708 | case 0: | 708 | case 0: |
| 709 | break; | 709 | break; |
| @@ -1348,7 +1348,6 @@ static void conf_choice(struct menu *menu) | |||
| 1348 | static void conf_string(struct menu *menu) | 1348 | static void conf_string(struct menu *menu) |
| 1349 | { | 1349 | { |
| 1350 | const char *prompt = menu_get_prompt(menu); | 1350 | const char *prompt = menu_get_prompt(menu); |
| 1351 | char dialog_input_result[256]; | ||
| 1352 | 1351 | ||
| 1353 | while (1) { | 1352 | while (1) { |
| 1354 | int res; | 1353 | int res; |
| @@ -1371,8 +1370,8 @@ static void conf_string(struct menu *menu) | |||
| 1371 | prompt ? _(prompt) : _("Main Menu"), | 1370 | prompt ? _(prompt) : _("Main Menu"), |
| 1372 | heading, | 1371 | heading, |
| 1373 | sym_get_string_value(menu->sym), | 1372 | sym_get_string_value(menu->sym), |
| 1374 | dialog_input_result, | 1373 | &dialog_input_result, |
| 1375 | sizeof(dialog_input_result)); | 1374 | &dialog_input_result_len); |
| 1376 | switch (res) { | 1375 | switch (res) { |
| 1377 | case 0: | 1376 | case 0: |
| 1378 | if (sym_set_string_value(menu->sym, | 1377 | if (sym_set_string_value(menu->sym, |
| @@ -1392,14 +1391,13 @@ static void conf_string(struct menu *menu) | |||
| 1392 | 1391 | ||
| 1393 | static void conf_load(void) | 1392 | static void conf_load(void) |
| 1394 | { | 1393 | { |
| 1395 | char dialog_input_result[256]; | ||
| 1396 | while (1) { | 1394 | while (1) { |
| 1397 | int res; | 1395 | int res; |
| 1398 | res = dialog_inputbox(main_window, | 1396 | res = dialog_inputbox(main_window, |
| 1399 | NULL, load_config_text, | 1397 | NULL, load_config_text, |
| 1400 | filename, | 1398 | filename, |
| 1401 | dialog_input_result, | 1399 | &dialog_input_result, |
| 1402 | sizeof(dialog_input_result)); | 1400 | &dialog_input_result_len); |
| 1403 | switch (res) { | 1401 | switch (res) { |
| 1404 | case 0: | 1402 | case 0: |
| 1405 | if (!dialog_input_result[0]) | 1403 | if (!dialog_input_result[0]) |
| @@ -1424,14 +1422,13 @@ static void conf_load(void) | |||
| 1424 | 1422 | ||
| 1425 | static void conf_save(void) | 1423 | static void conf_save(void) |
| 1426 | { | 1424 | { |
| 1427 | char dialog_input_result[256]; | ||
| 1428 | while (1) { | 1425 | while (1) { |
| 1429 | int res; | 1426 | int res; |
| 1430 | res = dialog_inputbox(main_window, | 1427 | res = dialog_inputbox(main_window, |
| 1431 | NULL, save_config_text, | 1428 | NULL, save_config_text, |
| 1432 | filename, | 1429 | filename, |
| 1433 | dialog_input_result, | 1430 | &dialog_input_result, |
| 1434 | sizeof(dialog_input_result)); | 1431 | &dialog_input_result_len); |
| 1435 | switch (res) { | 1432 | switch (res) { |
| 1436 | case 0: | 1433 | case 0: |
| 1437 | if (!dialog_input_result[0]) | 1434 | if (!dialog_input_result[0]) |
diff --git a/scripts/kconfig/nconf.gui.c b/scripts/kconfig/nconf.gui.c index f8137b3a5382..3b18dd839668 100644 --- a/scripts/kconfig/nconf.gui.c +++ b/scripts/kconfig/nconf.gui.c | |||
| @@ -356,7 +356,7 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...) | |||
| 356 | 356 | ||
| 357 | int dialog_inputbox(WINDOW *main_window, | 357 | int dialog_inputbox(WINDOW *main_window, |
| 358 | const char *title, const char *prompt, | 358 | const char *title, const char *prompt, |
| 359 | const char *init, char *result, int result_len) | 359 | const char *init, char **resultp, int *result_len) |
| 360 | { | 360 | { |
| 361 | int prompt_lines = 0; | 361 | int prompt_lines = 0; |
| 362 | int prompt_width = 0; | 362 | int prompt_width = 0; |
| @@ -367,7 +367,13 @@ int dialog_inputbox(WINDOW *main_window, | |||
| 367 | int i, x, y; | 367 | int i, x, y; |
| 368 | int res = -1; | 368 | int res = -1; |
| 369 | int cursor_position = strlen(init); | 369 | int cursor_position = strlen(init); |
| 370 | int cursor_form_win; | ||
| 371 | char *result = *resultp; | ||
| 370 | 372 | ||
| 373 | if (strlen(init)+1 > *result_len) { | ||
| 374 | *result_len = strlen(init)+1; | ||
| 375 | *resultp = result = realloc(result, *result_len); | ||
| 376 | } | ||
| 371 | 377 | ||
| 372 | /* find the widest line of msg: */ | 378 | /* find the widest line of msg: */ |
| 373 | prompt_lines = get_line_no(prompt); | 379 | prompt_lines = get_line_no(prompt); |
| @@ -384,7 +390,7 @@ int dialog_inputbox(WINDOW *main_window, | |||
| 384 | y = (LINES-(prompt_lines+4))/2; | 390 | y = (LINES-(prompt_lines+4))/2; |
| 385 | x = (COLS-(prompt_width+4))/2; | 391 | x = (COLS-(prompt_width+4))/2; |
| 386 | 392 | ||
| 387 | strncpy(result, init, result_len); | 393 | strncpy(result, init, *result_len); |
| 388 | 394 | ||
| 389 | /* create the windows */ | 395 | /* create the windows */ |
| 390 | win = newwin(prompt_lines+6, prompt_width+7, y, x); | 396 | win = newwin(prompt_lines+6, prompt_width+7, y, x); |
| @@ -405,7 +411,9 @@ int dialog_inputbox(WINDOW *main_window, | |||
| 405 | fill_window(prompt_win, prompt); | 411 | fill_window(prompt_win, prompt); |
| 406 | 412 | ||
| 407 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); | 413 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); |
| 408 | mvwprintw(form_win, 0, 0, "%s", result); | 414 | cursor_form_win = min(cursor_position, prompt_width-1); |
| 415 | mvwprintw(form_win, 0, 0, "%s", | ||
| 416 | result + cursor_position-cursor_form_win); | ||
| 409 | 417 | ||
| 410 | /* create panels */ | 418 | /* create panels */ |
| 411 | panel = new_panel(win); | 419 | panel = new_panel(win); |
| @@ -431,6 +439,8 @@ int dialog_inputbox(WINDOW *main_window, | |||
| 431 | &result[cursor_position], | 439 | &result[cursor_position], |
| 432 | len-cursor_position+1); | 440 | len-cursor_position+1); |
| 433 | cursor_position--; | 441 | cursor_position--; |
| 442 | cursor_form_win--; | ||
| 443 | len--; | ||
| 434 | } | 444 | } |
| 435 | break; | 445 | break; |
| 436 | case KEY_DC: | 446 | case KEY_DC: |
| @@ -438,38 +448,63 @@ int dialog_inputbox(WINDOW *main_window, | |||
| 438 | memmove(&result[cursor_position], | 448 | memmove(&result[cursor_position], |
| 439 | &result[cursor_position+1], | 449 | &result[cursor_position+1], |
| 440 | len-cursor_position+1); | 450 | len-cursor_position+1); |
| 451 | len--; | ||
| 441 | } | 452 | } |
| 442 | break; | 453 | break; |
| 443 | case KEY_UP: | 454 | case KEY_UP: |
| 444 | case KEY_RIGHT: | 455 | case KEY_RIGHT: |
| 445 | if (cursor_position < len && | 456 | if (cursor_position < len) { |
| 446 | cursor_position < min(result_len, prompt_width)) | ||
| 447 | cursor_position++; | 457 | cursor_position++; |
| 458 | cursor_form_win++; | ||
| 459 | } | ||
| 448 | break; | 460 | break; |
| 449 | case KEY_DOWN: | 461 | case KEY_DOWN: |
| 450 | case KEY_LEFT: | 462 | case KEY_LEFT: |
| 451 | if (cursor_position > 0) | 463 | if (cursor_position > 0) { |
| 452 | cursor_position--; | 464 | cursor_position--; |
| 465 | cursor_form_win--; | ||
| 466 | } | ||
| 467 | break; | ||
| 468 | case KEY_HOME: | ||
| 469 | cursor_position = 0; | ||
| 470 | cursor_form_win = 0; | ||
| 471 | break; | ||
| 472 | case KEY_END: | ||
| 473 | cursor_position = len; | ||
| 474 | cursor_form_win = min(cursor_position, prompt_width-1); | ||
| 453 | break; | 475 | break; |
| 454 | default: | 476 | default: |
| 455 | if ((isgraph(res) || isspace(res)) && | 477 | if ((isgraph(res) || isspace(res))) { |
| 456 | len-2 < result_len) { | 478 | /* one for new char, one for '\0' */ |
| 479 | if (len+2 > *result_len) { | ||
| 480 | *result_len = len+2; | ||
| 481 | *resultp = result = realloc(result, | ||
| 482 | *result_len); | ||
| 483 | } | ||
| 457 | /* insert the char at the proper position */ | 484 | /* insert the char at the proper position */ |
| 458 | memmove(&result[cursor_position+1], | 485 | memmove(&result[cursor_position+1], |
| 459 | &result[cursor_position], | 486 | &result[cursor_position], |
| 460 | len+1); | 487 | len-cursor_position+1); |
| 461 | result[cursor_position] = res; | 488 | result[cursor_position] = res; |
| 462 | cursor_position++; | 489 | cursor_position++; |
| 490 | cursor_form_win++; | ||
| 491 | len++; | ||
| 463 | } else { | 492 | } else { |
| 464 | mvprintw(0, 0, "unknow key: %d\n", res); | 493 | mvprintw(0, 0, "unknown key: %d\n", res); |
| 465 | } | 494 | } |
| 466 | break; | 495 | break; |
| 467 | } | 496 | } |
| 497 | if (cursor_form_win < 0) | ||
| 498 | cursor_form_win = 0; | ||
| 499 | else if (cursor_form_win > prompt_width-1) | ||
| 500 | cursor_form_win = prompt_width-1; | ||
| 501 | |||
| 468 | wmove(form_win, 0, 0); | 502 | wmove(form_win, 0, 0); |
| 469 | wclrtoeol(form_win); | 503 | wclrtoeol(form_win); |
| 470 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); | 504 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); |
| 471 | mvwprintw(form_win, 0, 0, "%s", result); | 505 | mvwprintw(form_win, 0, 0, "%s", |
| 472 | wmove(form_win, 0, cursor_position); | 506 | result + cursor_position-cursor_form_win); |
| 507 | wmove(form_win, 0, cursor_form_win); | ||
| 473 | touchwin(win); | 508 | touchwin(win); |
| 474 | refresh_all_windows(main_window); | 509 | refresh_all_windows(main_window); |
| 475 | 510 | ||
diff --git a/scripts/kconfig/nconf.h b/scripts/kconfig/nconf.h index 58fbda8fc0dc..0d5261705ef5 100644 --- a/scripts/kconfig/nconf.h +++ b/scripts/kconfig/nconf.h | |||
| @@ -89,7 +89,7 @@ void fill_window(WINDOW *win, const char *text); | |||
| 89 | int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...); | 89 | int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...); |
| 90 | int dialog_inputbox(WINDOW *main_window, | 90 | int dialog_inputbox(WINDOW *main_window, |
| 91 | const char *title, const char *prompt, | 91 | const char *title, const char *prompt, |
| 92 | const char *init, char *result, int result_len); | 92 | const char *init, char **resultp, int *result_len); |
| 93 | void refresh_all_windows(WINDOW *main_window); | 93 | void refresh_all_windows(WINDOW *main_window); |
| 94 | void show_scroll_win(WINDOW *main_window, | 94 | void show_scroll_win(WINDOW *main_window, |
| 95 | const char *title, | 95 | const char *title, |
diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl index a4fe923c0131..ec7afce4c88d 100644 --- a/scripts/kconfig/streamline_config.pl +++ b/scripts/kconfig/streamline_config.pl | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | # make oldconfig | 43 | # make oldconfig |
| 44 | # | 44 | # |
| 45 | use strict; | 45 | use strict; |
| 46 | use Getopt::Long; | ||
| 46 | 47 | ||
| 47 | my $config = ".config"; | 48 | my $config = ".config"; |
| 48 | 49 | ||
| @@ -112,10 +113,17 @@ sub find_config { | |||
| 112 | 113 | ||
| 113 | find_config; | 114 | find_config; |
| 114 | 115 | ||
| 116 | # Parse options | ||
| 117 | my $localmodconfig = 0; | ||
| 118 | my $localyesconfig = 0; | ||
| 119 | |||
| 120 | GetOptions("localmodconfig" => \$localmodconfig, | ||
| 121 | "localyesconfig" => \$localyesconfig); | ||
| 122 | |||
| 115 | # Get the build source and top level Kconfig file (passed in) | 123 | # Get the build source and top level Kconfig file (passed in) |
| 116 | my $ksource = $ARGV[0]; | 124 | my $ksource = $ARGV[0]; |
| 117 | my $kconfig = $ARGV[1]; | 125 | my $kconfig = $ARGV[1]; |
| 118 | my $lsmod_file = $ARGV[2]; | 126 | my $lsmod_file = $ENV{'LSMOD'}; |
| 119 | 127 | ||
| 120 | my @makefiles = `find $ksource -name Makefile 2>/dev/null`; | 128 | my @makefiles = `find $ksource -name Makefile 2>/dev/null`; |
| 121 | chomp @makefiles; | 129 | chomp @makefiles; |
| @@ -296,7 +304,11 @@ my %modules; | |||
| 296 | 304 | ||
| 297 | if (defined($lsmod_file)) { | 305 | if (defined($lsmod_file)) { |
| 298 | if ( ! -f $lsmod_file) { | 306 | if ( ! -f $lsmod_file) { |
| 299 | die "$lsmod_file not found"; | 307 | if ( -f $ENV{'objtree'}."/".$lsmod_file) { |
| 308 | $lsmod_file = $ENV{'objtree'}."/".$lsmod_file; | ||
| 309 | } else { | ||
| 310 | die "$lsmod_file not found"; | ||
| 311 | } | ||
| 300 | } | 312 | } |
| 301 | if ( -x $lsmod_file) { | 313 | if ( -x $lsmod_file) { |
| 302 | # the file is executable, run it | 314 | # the file is executable, run it |
| @@ -421,7 +433,11 @@ while(<CIN>) { | |||
| 421 | 433 | ||
| 422 | if (/^(CONFIG.*)=(m|y)/) { | 434 | if (/^(CONFIG.*)=(m|y)/) { |
| 423 | if (defined($configs{$1})) { | 435 | if (defined($configs{$1})) { |
| 424 | $setconfigs{$1} = $2; | 436 | if ($localyesconfig) { |
| 437 | $setconfigs{$1} = 'y'; | ||
| 438 | } else { | ||
| 439 | $setconfigs{$1} = $2; | ||
| 440 | } | ||
| 425 | } elsif ($2 eq "m") { | 441 | } elsif ($2 eq "m") { |
| 426 | print "# $1 is not set\n"; | 442 | print "# $1 is not set\n"; |
| 427 | next; | 443 | next; |
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index e26e2fb462d4..f936d1fa969d 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
| @@ -735,6 +735,27 @@ static int do_virtio_entry(const char *filename, struct virtio_device_id *id, | |||
| 735 | return 1; | 735 | return 1; |
| 736 | } | 736 | } |
| 737 | 737 | ||
| 738 | /* | ||
| 739 | * Looks like: vmbus:guid | ||
| 740 | * Each byte of the guid will be represented by two hex characters | ||
| 741 | * in the name. | ||
| 742 | */ | ||
| 743 | |||
| 744 | static int do_vmbus_entry(const char *filename, struct hv_vmbus_device_id *id, | ||
| 745 | char *alias) | ||
| 746 | { | ||
| 747 | int i; | ||
| 748 | char guid_name[((sizeof(id->guid) + 1)) * 2]; | ||
| 749 | |||
| 750 | for (i = 0; i < (sizeof(id->guid) * 2); i += 2) | ||
| 751 | sprintf(&guid_name[i], "%02x", id->guid[i/2]); | ||
| 752 | |||
| 753 | strcpy(alias, "vmbus:"); | ||
| 754 | strcat(alias, guid_name); | ||
| 755 | |||
| 756 | return 1; | ||
| 757 | } | ||
| 758 | |||
| 738 | /* Looks like: i2c:S */ | 759 | /* Looks like: i2c:S */ |
| 739 | static int do_i2c_entry(const char *filename, struct i2c_device_id *id, | 760 | static int do_i2c_entry(const char *filename, struct i2c_device_id *id, |
| 740 | char *alias) | 761 | char *alias) |
| @@ -994,6 +1015,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, | |||
| 994 | do_table(symval, sym->st_size, | 1015 | do_table(symval, sym->st_size, |
| 995 | sizeof(struct virtio_device_id), "virtio", | 1016 | sizeof(struct virtio_device_id), "virtio", |
| 996 | do_virtio_entry, mod); | 1017 | do_virtio_entry, mod); |
| 1018 | else if (sym_is(symname, "__mod_vmbus_device_table")) | ||
| 1019 | do_table(symval, sym->st_size, | ||
| 1020 | sizeof(struct hv_vmbus_device_id), "vmbus", | ||
| 1021 | do_vmbus_entry, mod); | ||
| 997 | else if (sym_is(symname, "__mod_i2c_device_table")) | 1022 | else if (sym_is(symname, "__mod_i2c_device_table")) |
| 998 | do_table(symval, sym->st_size, | 1023 | do_table(symval, sym->st_size, |
| 999 | sizeof(struct i2c_device_id), "i2c", | 1024 | sizeof(struct i2c_device_id), "i2c", |
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index a509ff8f32fa..2bd594e6d1b4 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
| @@ -1849,6 +1849,12 @@ static void add_header(struct buffer *b, struct module *mod) | |||
| 1849 | buf_printf(b, "};\n"); | 1849 | buf_printf(b, "};\n"); |
| 1850 | } | 1850 | } |
| 1851 | 1851 | ||
| 1852 | static void add_intree_flag(struct buffer *b, int is_intree) | ||
| 1853 | { | ||
| 1854 | if (is_intree) | ||
| 1855 | buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n"); | ||
| 1856 | } | ||
| 1857 | |||
| 1852 | static void add_staging_flag(struct buffer *b, const char *name) | 1858 | static void add_staging_flag(struct buffer *b, const char *name) |
| 1853 | { | 1859 | { |
| 1854 | static const char *staging_dir = "drivers/staging"; | 1860 | static const char *staging_dir = "drivers/staging"; |
| @@ -2169,6 +2175,7 @@ int main(int argc, char **argv) | |||
| 2169 | buf.pos = 0; | 2175 | buf.pos = 0; |
| 2170 | 2176 | ||
| 2171 | add_header(&buf, mod); | 2177 | add_header(&buf, mod); |
| 2178 | add_intree_flag(&buf, !external_module); | ||
| 2172 | add_staging_flag(&buf, mod->name); | 2179 | add_staging_flag(&buf, mod->name); |
| 2173 | err |= add_versions(&buf, mod); | 2180 | err |= add_versions(&buf, mod); |
| 2174 | add_depends(&buf, mod, modules); | 2181 | add_depends(&buf, mod, modules); |
diff --git a/scripts/tags.sh b/scripts/tags.sh index 75c5d24f1993..38f6617a2cb1 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh | |||
| @@ -129,7 +129,7 @@ exuberant() | |||
| 129 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ | 129 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ |
| 130 | -I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ | 130 | -I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ |
| 131 | --extra=+f --c-kinds=+px \ | 131 | --extra=+f --c-kinds=+px \ |
| 132 | --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' \ | 132 | --regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/' \ |
| 133 | --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \ | 133 | --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \ |
| 134 | --regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \ | 134 | --regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \ |
| 135 | --regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' | 135 | --regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' |
| @@ -151,7 +151,7 @@ exuberant() | |||
| 151 | emacs() | 151 | emacs() |
| 152 | { | 152 | { |
| 153 | all_sources | xargs $1 -a \ | 153 | all_sources | xargs $1 -a \ |
| 154 | --regex='/^ENTRY(\([^)]*\)).*/\1/' \ | 154 | --regex='/^(ENTRY|_GLOBAL)(\([^)]*\)).*/\2/' \ |
| 155 | --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \ | 155 | --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \ |
| 156 | --regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \ | 156 | --regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \ |
| 157 | --regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' | 157 | --regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' |
