diff options
| -rw-r--r-- | scripts/dtc/dtc-parser.tab.c_shipped | 469 | ||||
| -rw-r--r-- | scripts/dtc/dtc-parser.tab.h_shipped | 36 | ||||
| -rw-r--r-- | scripts/dtc/dtc.c | 119 | ||||
| -rw-r--r-- | scripts/dtc/dtc.h | 1 | ||||
| -rw-r--r-- | scripts/dtc/srcpos.c | 6 | ||||
| -rwxr-xr-x | scripts/dtc/update-dtc-source.sh | 54 | ||||
| -rw-r--r-- | scripts/dtc/util.c | 141 | ||||
| -rw-r--r-- | scripts/dtc/util.h | 107 | ||||
| -rw-r--r-- | scripts/dtc/version_gen.h | 2 |
9 files changed, 570 insertions, 365 deletions
diff --git a/scripts/dtc/dtc-parser.tab.c_shipped b/scripts/dtc/dtc-parser.tab.c_shipped index ee1d8c3042fb..c8769d550cfb 100644 --- a/scripts/dtc/dtc-parser.tab.c_shipped +++ b/scripts/dtc/dtc-parser.tab.c_shipped | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | /* A Bison parser, made by GNU Bison 2.5. */ | 1 | /* A Bison parser, made by GNU Bison 2.7.12-4996. */ |
| 2 | 2 | ||
| 3 | /* Bison implementation for Yacc-like parsers in C | 3 | /* Bison implementation for Yacc-like parsers in C |
| 4 | 4 | ||
| 5 | Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. | 5 | Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. |
| 6 | 6 | ||
| 7 | 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 |
| 8 | 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 |
| @@ -44,7 +44,7 @@ | |||
| 44 | #define YYBISON 1 | 44 | #define YYBISON 1 |
| 45 | 45 | ||
| 46 | /* Bison version. */ | 46 | /* Bison version. */ |
| 47 | #define YYBISON_VERSION "2.5" | 47 | #define YYBISON_VERSION "2.7.12-4996" |
| 48 | 48 | ||
| 49 | /* Skeleton name. */ | 49 | /* Skeleton name. */ |
| 50 | #define YYSKELETON_NAME "yacc.c" | 50 | #define YYSKELETON_NAME "yacc.c" |
| @@ -58,14 +58,11 @@ | |||
| 58 | /* Pull parsers. */ | 58 | /* Pull parsers. */ |
| 59 | #define YYPULL 1 | 59 | #define YYPULL 1 |
| 60 | 60 | ||
| 61 | /* Using locations. */ | ||
| 62 | #define YYLSP_NEEDED 0 | ||
| 63 | 61 | ||
| 64 | 62 | ||
| 65 | 63 | ||
| 66 | /* Copy the first part of user declarations. */ | 64 | /* Copy the first part of user declarations. */ |
| 67 | 65 | /* Line 371 of yacc.c */ | |
| 68 | /* Line 268 of yacc.c */ | ||
| 69 | #line 21 "dtc-parser.y" | 66 | #line 21 "dtc-parser.y" |
| 70 | 67 | ||
| 71 | #include <stdio.h> | 68 | #include <stdio.h> |
| @@ -85,14 +82,16 @@ extern int treesource_error; | |||
| 85 | static unsigned long long eval_literal(const char *s, int base, int bits); | 82 | static unsigned long long eval_literal(const char *s, int base, int bits); |
| 86 | static unsigned char eval_char_literal(const char *s); | 83 | static unsigned char eval_char_literal(const char *s); |
| 87 | 84 | ||
| 85 | /* Line 371 of yacc.c */ | ||
| 86 | #line 87 "dtc-parser.tab.c" | ||
| 88 | 87 | ||
| 89 | /* Line 268 of yacc.c */ | 88 | # ifndef YY_NULL |
| 90 | #line 91 "dtc-parser.tab.c" | 89 | # if defined __cplusplus && 201103L <= __cplusplus |
| 91 | 90 | # define YY_NULL nullptr | |
| 92 | /* Enabling traces. */ | 91 | # else |
| 93 | #ifndef YYDEBUG | 92 | # define YY_NULL 0 |
| 94 | # define YYDEBUG 0 | 93 | # endif |
| 95 | #endif | 94 | # endif |
| 96 | 95 | ||
| 97 | /* Enabling verbose error messages. */ | 96 | /* Enabling verbose error messages. */ |
| 98 | #ifdef YYERROR_VERBOSE | 97 | #ifdef YYERROR_VERBOSE |
| @@ -102,11 +101,17 @@ static unsigned char eval_char_literal(const char *s); | |||
| 102 | # define YYERROR_VERBOSE 0 | 101 | # define YYERROR_VERBOSE 0 |
| 103 | #endif | 102 | #endif |
| 104 | 103 | ||
| 105 | /* Enabling the token table. */ | 104 | /* In a future release of Bison, this section will be replaced |
| 106 | #ifndef YYTOKEN_TABLE | 105 | by #include "dtc-parser.tab.h". */ |
| 107 | # define YYTOKEN_TABLE 0 | 106 | #ifndef YY_YY_DTC_PARSER_TAB_H_INCLUDED |
| 107 | # define YY_YY_DTC_PARSER_TAB_H_INCLUDED | ||
| 108 | /* Enabling traces. */ | ||
| 109 | #ifndef YYDEBUG | ||
| 110 | # define YYDEBUG 0 | ||
| 111 | #endif | ||
| 112 | #if YYDEBUG | ||
| 113 | extern int yydebug; | ||
| 108 | #endif | 114 | #endif |
| 109 | |||
| 110 | 115 | ||
| 111 | /* Tokens. */ | 116 | /* Tokens. */ |
| 112 | #ifndef YYTOKENTYPE | 117 | #ifndef YYTOKENTYPE |
| @@ -140,12 +145,10 @@ static unsigned char eval_char_literal(const char *s); | |||
| 140 | #endif | 145 | #endif |
| 141 | 146 | ||
| 142 | 147 | ||
| 143 | |||
| 144 | #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED | 148 | #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED |
| 145 | typedef union YYSTYPE | 149 | typedef union YYSTYPE |
| 146 | { | 150 | { |
| 147 | 151 | /* Line 387 of yacc.c */ | |
| 148 | /* Line 293 of yacc.c */ | ||
| 149 | #line 40 "dtc-parser.y" | 152 | #line 40 "dtc-parser.y" |
| 150 | 153 | ||
| 151 | char *propnodename; | 154 | char *propnodename; |
| @@ -168,21 +171,36 @@ typedef union YYSTYPE | |||
| 168 | uint64_t integer; | 171 | uint64_t integer; |
| 169 | 172 | ||
| 170 | 173 | ||
| 171 | 174 | /* Line 387 of yacc.c */ | |
| 172 | /* Line 293 of yacc.c */ | 175 | #line 176 "dtc-parser.tab.c" |
| 173 | #line 174 "dtc-parser.tab.c" | ||
| 174 | } YYSTYPE; | 176 | } YYSTYPE; |
| 175 | # define YYSTYPE_IS_TRIVIAL 1 | 177 | # define YYSTYPE_IS_TRIVIAL 1 |
| 176 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 178 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
| 177 | # define YYSTYPE_IS_DECLARED 1 | 179 | # define YYSTYPE_IS_DECLARED 1 |
| 178 | #endif | 180 | #endif |
| 179 | 181 | ||
| 182 | extern YYSTYPE yylval; | ||
| 180 | 183 | ||
| 181 | /* Copy the second part of user declarations. */ | 184 | #ifdef YYPARSE_PARAM |
| 185 | #if defined __STDC__ || defined __cplusplus | ||
| 186 | int yyparse (void *YYPARSE_PARAM); | ||
| 187 | #else | ||
| 188 | int yyparse (); | ||
| 189 | #endif | ||
| 190 | #else /* ! YYPARSE_PARAM */ | ||
| 191 | #if defined __STDC__ || defined __cplusplus | ||
| 192 | int yyparse (void); | ||
| 193 | #else | ||
| 194 | int yyparse (); | ||
| 195 | #endif | ||
| 196 | #endif /* ! YYPARSE_PARAM */ | ||
| 182 | 197 | ||
| 198 | #endif /* !YY_YY_DTC_PARSER_TAB_H_INCLUDED */ | ||
| 183 | 199 | ||
| 184 | /* Line 343 of yacc.c */ | 200 | /* Copy the second part of user declarations. */ |
| 185 | #line 186 "dtc-parser.tab.c" | 201 | |
| 202 | /* Line 390 of yacc.c */ | ||
| 203 | #line 204 "dtc-parser.tab.c" | ||
| 186 | 204 | ||
| 187 | #ifdef short | 205 | #ifdef short |
| 188 | # undef short | 206 | # undef short |
| @@ -235,24 +253,33 @@ typedef short int yytype_int16; | |||
| 235 | # if defined YYENABLE_NLS && YYENABLE_NLS | 253 | # if defined YYENABLE_NLS && YYENABLE_NLS |
| 236 | # if ENABLE_NLS | 254 | # if ENABLE_NLS |
| 237 | # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ | 255 | # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ |
| 238 | # define YY_(msgid) dgettext ("bison-runtime", msgid) | 256 | # define YY_(Msgid) dgettext ("bison-runtime", Msgid) |
| 239 | # endif | 257 | # endif |
| 240 | # endif | 258 | # endif |
| 241 | # ifndef YY_ | 259 | # ifndef YY_ |
| 242 | # define YY_(msgid) msgid | 260 | # define YY_(Msgid) Msgid |
| 261 | # endif | ||
| 262 | #endif | ||
| 263 | |||
| 264 | #ifndef __attribute__ | ||
| 265 | /* This feature is available in gcc versions 2.5 and later. */ | ||
| 266 | # if (! defined __GNUC__ || __GNUC__ < 2 \ | ||
| 267 | || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) | ||
| 268 | # define __attribute__(Spec) /* empty */ | ||
| 243 | # endif | 269 | # endif |
| 244 | #endif | 270 | #endif |
| 245 | 271 | ||
| 246 | /* Suppress unused-variable warnings by "using" E. */ | 272 | /* Suppress unused-variable warnings by "using" E. */ |
| 247 | #if ! defined lint || defined __GNUC__ | 273 | #if ! defined lint || defined __GNUC__ |
| 248 | # define YYUSE(e) ((void) (e)) | 274 | # define YYUSE(E) ((void) (E)) |
| 249 | #else | 275 | #else |
| 250 | # define YYUSE(e) /* empty */ | 276 | # define YYUSE(E) /* empty */ |
| 251 | #endif | 277 | #endif |
| 252 | 278 | ||
| 279 | |||
| 253 | /* Identity function, used to suppress warnings about constant conditions. */ | 280 | /* Identity function, used to suppress warnings about constant conditions. */ |
| 254 | #ifndef lint | 281 | #ifndef lint |
| 255 | # define YYID(n) (n) | 282 | # define YYID(N) (N) |
| 256 | #else | 283 | #else |
| 257 | #if (defined __STDC__ || defined __C99__FUNC__ \ | 284 | #if (defined __STDC__ || defined __C99__FUNC__ \ |
| 258 | || defined __cplusplus || defined _MSC_VER) | 285 | || defined __cplusplus || defined _MSC_VER) |
| @@ -288,6 +315,7 @@ YYID (yyi) | |||
| 288 | # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ | 315 | # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
| 289 | || defined __cplusplus || defined _MSC_VER) | 316 | || defined __cplusplus || defined _MSC_VER) |
| 290 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 317 | # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
| 318 | /* Use EXIT_SUCCESS as a witness for stdlib.h. */ | ||
| 291 | # ifndef EXIT_SUCCESS | 319 | # ifndef EXIT_SUCCESS |
| 292 | # define EXIT_SUCCESS 0 | 320 | # define EXIT_SUCCESS 0 |
| 293 | # endif | 321 | # endif |
| @@ -379,20 +407,20 @@ union yyalloc | |||
| 379 | #endif | 407 | #endif |
| 380 | 408 | ||
| 381 | #if defined YYCOPY_NEEDED && YYCOPY_NEEDED | 409 | #if defined YYCOPY_NEEDED && YYCOPY_NEEDED |
| 382 | /* Copy COUNT objects from FROM to TO. The source and destination do | 410 | /* Copy COUNT objects from SRC to DST. The source and destination do |
| 383 | not overlap. */ | 411 | not overlap. */ |
| 384 | # ifndef YYCOPY | 412 | # ifndef YYCOPY |
| 385 | # if defined __GNUC__ && 1 < __GNUC__ | 413 | # if defined __GNUC__ && 1 < __GNUC__ |
| 386 | # define YYCOPY(To, From, Count) \ | 414 | # define YYCOPY(Dst, Src, Count) \ |
| 387 | __builtin_memcpy (To, From, (Count) * sizeof (*(From))) | 415 | __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) |
| 388 | # else | 416 | # else |
| 389 | # define YYCOPY(To, From, Count) \ | 417 | # define YYCOPY(Dst, Src, Count) \ |
| 390 | do \ | 418 | do \ |
| 391 | { \ | 419 | { \ |
| 392 | YYSIZE_T yyi; \ | 420 | YYSIZE_T yyi; \ |
| 393 | for (yyi = 0; yyi < (Count); yyi++) \ | 421 | for (yyi = 0; yyi < (Count); yyi++) \ |
| 394 | (To)[yyi] = (From)[yyi]; \ | 422 | (Dst)[yyi] = (Src)[yyi]; \ |
| 395 | } \ | 423 | } \ |
| 396 | while (YYID (0)) | 424 | while (YYID (0)) |
| 397 | # endif | 425 | # endif |
| 398 | # endif | 426 | # endif |
| @@ -513,7 +541,7 @@ static const yytype_uint16 yyrline[] = | |||
| 513 | }; | 541 | }; |
| 514 | #endif | 542 | #endif |
| 515 | 543 | ||
| 516 | #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE | 544 | #if YYDEBUG || YYERROR_VERBOSE || 0 |
| 517 | /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. | 545 | /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. |
| 518 | First, the terminals, then, starting at YYNTOKENS, nonterminals. */ | 546 | First, the terminals, then, starting at YYNTOKENS, nonterminals. */ |
| 519 | static const char *const yytname[] = | 547 | static const char *const yytname[] = |
| @@ -530,7 +558,7 @@ static const char *const yytname[] = | |||
| 530 | "integer_expr", "integer_trinary", "integer_or", "integer_and", | 558 | "integer_expr", "integer_trinary", "integer_or", "integer_and", |
| 531 | "integer_bitor", "integer_bitxor", "integer_bitand", "integer_eq", | 559 | "integer_bitor", "integer_bitxor", "integer_bitand", "integer_eq", |
| 532 | "integer_rela", "integer_shift", "integer_add", "integer_mul", | 560 | "integer_rela", "integer_shift", "integer_add", "integer_mul", |
| 533 | "integer_unary", "bytestring", "subnodes", "subnode", 0 | 561 | "integer_unary", "bytestring", "subnodes", "subnode", YY_NULL |
| 534 | }; | 562 | }; |
| 535 | #endif | 563 | #endif |
| 536 | 564 | ||
| @@ -655,10 +683,10 @@ static const yytype_uint8 yytable[] = | |||
| 655 | 137, 0, 73, 139 | 683 | 137, 0, 73, 139 |
| 656 | }; | 684 | }; |
| 657 | 685 | ||
| 658 | #define yypact_value_is_default(yystate) \ | 686 | #define yypact_value_is_default(Yystate) \ |
| 659 | ((yystate) == (-78)) | 687 | (!!((Yystate) == (-78))) |
| 660 | 688 | ||
| 661 | #define yytable_value_is_error(yytable_value) \ | 689 | #define yytable_value_is_error(Yytable_value) \ |
| 662 | YYID (0) | 690 | YYID (0) |
| 663 | 691 | ||
| 664 | static const yytype_int16 yycheck[] = | 692 | static const yytype_int16 yycheck[] = |
| @@ -727,62 +755,35 @@ static const yytype_uint8 yystos[] = | |||
| 727 | 755 | ||
| 728 | #define YYRECOVERING() (!!yyerrstatus) | 756 | #define YYRECOVERING() (!!yyerrstatus) |
| 729 | 757 | ||
| 730 | #define YYBACKUP(Token, Value) \ | 758 | #define YYBACKUP(Token, Value) \ |
| 731 | do \ | 759 | do \ |
| 732 | if (yychar == YYEMPTY && yylen == 1) \ | 760 | if (yychar == YYEMPTY) \ |
| 733 | { \ | 761 | { \ |
| 734 | yychar = (Token); \ | 762 | yychar = (Token); \ |
| 735 | yylval = (Value); \ | 763 | yylval = (Value); \ |
| 736 | YYPOPSTACK (1); \ | 764 | YYPOPSTACK (yylen); \ |
| 737 | goto yybackup; \ | 765 | yystate = *yyssp; \ |
| 738 | } \ | 766 | goto yybackup; \ |
| 739 | else \ | 767 | } \ |
| 740 | { \ | 768 | else \ |
| 769 | { \ | ||
| 741 | yyerror (YY_("syntax error: cannot back up")); \ | 770 | yyerror (YY_("syntax error: cannot back up")); \ |
| 742 | YYERROR; \ | 771 | YYERROR; \ |
| 743 | } \ | 772 | } \ |
| 744 | while (YYID (0)) | 773 | while (YYID (0)) |
| 745 | 774 | ||
| 746 | 775 | /* Error token number */ | |
| 747 | #define YYTERROR 1 | 776 | #define YYTERROR 1 |
| 748 | #define YYERRCODE 256 | 777 | #define YYERRCODE 256 |
| 749 | 778 | ||
| 750 | 779 | ||
| 751 | /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. | ||
| 752 | If N is 0, then set CURRENT to the empty location which ends | ||
| 753 | the previous symbol: RHS[0] (always defined). */ | ||
| 754 | |||
| 755 | #define YYRHSLOC(Rhs, K) ((Rhs)[K]) | ||
| 756 | #ifndef YYLLOC_DEFAULT | ||
| 757 | # define YYLLOC_DEFAULT(Current, Rhs, N) \ | ||
| 758 | do \ | ||
| 759 | if (YYID (N)) \ | ||
| 760 | { \ | ||
| 761 | (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ | ||
| 762 | (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ | ||
| 763 | (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ | ||
| 764 | (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ | ||
| 765 | } \ | ||
| 766 | else \ | ||
| 767 | { \ | ||
| 768 | (Current).first_line = (Current).last_line = \ | ||
| 769 | YYRHSLOC (Rhs, 0).last_line; \ | ||
| 770 | (Current).first_column = (Current).last_column = \ | ||
| 771 | YYRHSLOC (Rhs, 0).last_column; \ | ||
| 772 | } \ | ||
| 773 | while (YYID (0)) | ||
| 774 | #endif | ||
| 775 | |||
| 776 | |||
| 777 | /* This macro is provided for backward compatibility. */ | 780 | /* This macro is provided for backward compatibility. */ |
| 778 | |||
| 779 | #ifndef YY_LOCATION_PRINT | 781 | #ifndef YY_LOCATION_PRINT |
| 780 | # define YY_LOCATION_PRINT(File, Loc) ((void) 0) | 782 | # define YY_LOCATION_PRINT(File, Loc) ((void) 0) |
| 781 | #endif | 783 | #endif |
| 782 | 784 | ||
| 783 | 785 | ||
| 784 | /* YYLEX -- calling `yylex' with the right arguments. */ | 786 | /* YYLEX -- calling `yylex' with the right arguments. */ |
| 785 | |||
| 786 | #ifdef YYLEX_PARAM | 787 | #ifdef YYLEX_PARAM |
| 787 | # define YYLEX yylex (YYLEX_PARAM) | 788 | # define YYLEX yylex (YYLEX_PARAM) |
| 788 | #else | 789 | #else |
| @@ -832,6 +833,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) | |||
| 832 | YYSTYPE const * const yyvaluep; | 833 | YYSTYPE const * const yyvaluep; |
| 833 | #endif | 834 | #endif |
| 834 | { | 835 | { |
| 836 | FILE *yyo = yyoutput; | ||
| 837 | YYUSE (yyo); | ||
| 835 | if (!yyvaluep) | 838 | if (!yyvaluep) |
| 836 | return; | 839 | return; |
| 837 | # ifdef YYPRINT | 840 | # ifdef YYPRINT |
| @@ -840,11 +843,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) | |||
| 840 | # else | 843 | # else |
| 841 | YYUSE (yyoutput); | 844 | YYUSE (yyoutput); |
| 842 | # endif | 845 | # endif |
| 843 | switch (yytype) | 846 | YYUSE (yytype); |
| 844 | { | ||
| 845 | default: | ||
| 846 | break; | ||
| 847 | } | ||
| 848 | } | 847 | } |
| 849 | 848 | ||
| 850 | 849 | ||
| @@ -1083,12 +1082,11 @@ static int | |||
| 1083 | yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | 1082 | yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, |
| 1084 | yytype_int16 *yyssp, int yytoken) | 1083 | yytype_int16 *yyssp, int yytoken) |
| 1085 | { | 1084 | { |
| 1086 | YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); | 1085 | YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); |
| 1087 | YYSIZE_T yysize = yysize0; | 1086 | YYSIZE_T yysize = yysize0; |
| 1088 | YYSIZE_T yysize1; | ||
| 1089 | enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | 1087 | enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; |
| 1090 | /* Internationalized format string. */ | 1088 | /* Internationalized format string. */ |
| 1091 | const char *yyformat = 0; | 1089 | const char *yyformat = YY_NULL; |
| 1092 | /* Arguments of yyformat. */ | 1090 | /* Arguments of yyformat. */ |
| 1093 | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | 1091 | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; |
| 1094 | /* Number of reported tokens (one for the "unexpected", one per | 1092 | /* Number of reported tokens (one for the "unexpected", one per |
| @@ -1148,11 +1146,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | |||
| 1148 | break; | 1146 | break; |
| 1149 | } | 1147 | } |
| 1150 | yyarg[yycount++] = yytname[yyx]; | 1148 | yyarg[yycount++] = yytname[yyx]; |
| 1151 | yysize1 = yysize + yytnamerr (0, yytname[yyx]); | 1149 | { |
| 1152 | if (! (yysize <= yysize1 | 1150 | YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); |
| 1153 | && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) | 1151 | if (! (yysize <= yysize1 |
| 1154 | return 2; | 1152 | && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
| 1155 | yysize = yysize1; | 1153 | return 2; |
| 1154 | yysize = yysize1; | ||
| 1155 | } | ||
| 1156 | } | 1156 | } |
| 1157 | } | 1157 | } |
| 1158 | } | 1158 | } |
| @@ -1172,10 +1172,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | |||
| 1172 | # undef YYCASE_ | 1172 | # undef YYCASE_ |
| 1173 | } | 1173 | } |
| 1174 | 1174 | ||
| 1175 | yysize1 = yysize + yystrlen (yyformat); | 1175 | { |
| 1176 | if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) | 1176 | YYSIZE_T yysize1 = yysize + yystrlen (yyformat); |
| 1177 | return 2; | 1177 | if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
| 1178 | yysize = yysize1; | 1178 | return 2; |
| 1179 | yysize = yysize1; | ||
| 1180 | } | ||
| 1179 | 1181 | ||
| 1180 | if (*yymsg_alloc < yysize) | 1182 | if (*yymsg_alloc < yysize) |
| 1181 | { | 1183 | { |
| @@ -1231,36 +1233,26 @@ yydestruct (yymsg, yytype, yyvaluep) | |||
| 1231 | yymsg = "Deleting"; | 1233 | yymsg = "Deleting"; |
| 1232 | YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); | 1234 | YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); |
| 1233 | 1235 | ||
| 1234 | switch (yytype) | 1236 | YYUSE (yytype); |
| 1235 | { | ||
| 1236 | |||
| 1237 | default: | ||
| 1238 | break; | ||
| 1239 | } | ||
| 1240 | } | 1237 | } |
| 1241 | 1238 | ||
| 1242 | 1239 | ||
| 1243 | /* Prevent warnings from -Wmissing-prototypes. */ | ||
| 1244 | #ifdef YYPARSE_PARAM | ||
| 1245 | #if defined __STDC__ || defined __cplusplus | ||
| 1246 | int yyparse (void *YYPARSE_PARAM); | ||
| 1247 | #else | ||
| 1248 | int yyparse (); | ||
| 1249 | #endif | ||
| 1250 | #else /* ! YYPARSE_PARAM */ | ||
| 1251 | #if defined __STDC__ || defined __cplusplus | ||
| 1252 | int yyparse (void); | ||
| 1253 | #else | ||
| 1254 | int yyparse (); | ||
| 1255 | #endif | ||
| 1256 | #endif /* ! YYPARSE_PARAM */ | ||
| 1257 | 1240 | ||
| 1258 | 1241 | ||
| 1259 | /* The lookahead symbol. */ | 1242 | /* The lookahead symbol. */ |
| 1260 | int yychar; | 1243 | int yychar; |
| 1261 | 1244 | ||
| 1245 | |||
| 1246 | #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | ||
| 1247 | # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | ||
| 1248 | # define YY_IGNORE_MAYBE_UNINITIALIZED_END | ||
| 1249 | #endif | ||
| 1250 | #ifndef YY_INITIAL_VALUE | ||
| 1251 | # define YY_INITIAL_VALUE(Value) /* Nothing. */ | ||
| 1252 | #endif | ||
| 1253 | |||
| 1262 | /* The semantic value of the lookahead symbol. */ | 1254 | /* The semantic value of the lookahead symbol. */ |
| 1263 | YYSTYPE yylval; | 1255 | YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); |
| 1264 | 1256 | ||
| 1265 | /* Number of syntax errors so far. */ | 1257 | /* Number of syntax errors so far. */ |
| 1266 | int yynerrs; | 1258 | int yynerrs; |
| @@ -1300,7 +1292,7 @@ yyparse () | |||
| 1300 | `yyss': related to states. | 1292 | `yyss': related to states. |
| 1301 | `yyvs': related to semantic values. | 1293 | `yyvs': related to semantic values. |
| 1302 | 1294 | ||
| 1303 | Refer to the stacks thru separate pointers, to allow yyoverflow | 1295 | Refer to the stacks through separate pointers, to allow yyoverflow |
| 1304 | to reallocate them elsewhere. */ | 1296 | to reallocate them elsewhere. */ |
| 1305 | 1297 | ||
| 1306 | /* The state stack. */ | 1298 | /* The state stack. */ |
| @@ -1318,7 +1310,7 @@ yyparse () | |||
| 1318 | int yyn; | 1310 | int yyn; |
| 1319 | int yyresult; | 1311 | int yyresult; |
| 1320 | /* Lookahead token as an internal (translated) token number. */ | 1312 | /* Lookahead token as an internal (translated) token number. */ |
| 1321 | int yytoken; | 1313 | int yytoken = 0; |
| 1322 | /* The variables used to return semantic value and location from the | 1314 | /* The variables used to return semantic value and location from the |
| 1323 | action routines. */ | 1315 | action routines. */ |
| 1324 | YYSTYPE yyval; | 1316 | YYSTYPE yyval; |
| @@ -1336,9 +1328,8 @@ yyparse () | |||
| 1336 | Keep to zero when no symbol should be popped. */ | 1328 | Keep to zero when no symbol should be popped. */ |
| 1337 | int yylen = 0; | 1329 | int yylen = 0; |
| 1338 | 1330 | ||
| 1339 | yytoken = 0; | 1331 | yyssp = yyss = yyssa; |
| 1340 | yyss = yyssa; | 1332 | yyvsp = yyvs = yyvsa; |
| 1341 | yyvs = yyvsa; | ||
| 1342 | yystacksize = YYINITDEPTH; | 1333 | yystacksize = YYINITDEPTH; |
| 1343 | 1334 | ||
| 1344 | YYDPRINTF ((stderr, "Starting parse\n")); | 1335 | YYDPRINTF ((stderr, "Starting parse\n")); |
| @@ -1347,14 +1338,6 @@ yyparse () | |||
| 1347 | yyerrstatus = 0; | 1338 | yyerrstatus = 0; |
| 1348 | yynerrs = 0; | 1339 | yynerrs = 0; |
| 1349 | yychar = YYEMPTY; /* Cause a token to be read. */ | 1340 | yychar = YYEMPTY; /* Cause a token to be read. */ |
| 1350 | |||
| 1351 | /* Initialize stack pointers. | ||
| 1352 | Waste one element of value and location stack | ||
| 1353 | so that they stay on the same level as the state stack. | ||
| 1354 | The wasted elements are never initialized. */ | ||
| 1355 | yyssp = yyss; | ||
| 1356 | yyvsp = yyvs; | ||
| 1357 | |||
| 1358 | goto yysetstate; | 1341 | goto yysetstate; |
| 1359 | 1342 | ||
| 1360 | /*------------------------------------------------------------. | 1343 | /*------------------------------------------------------------. |
| @@ -1495,7 +1478,9 @@ yybackup: | |||
| 1495 | yychar = YYEMPTY; | 1478 | yychar = YYEMPTY; |
| 1496 | 1479 | ||
| 1497 | yystate = yyn; | 1480 | yystate = yyn; |
| 1481 | YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | ||
| 1498 | *++yyvsp = yylval; | 1482 | *++yyvsp = yylval; |
| 1483 | YY_IGNORE_MAYBE_UNINITIALIZED_END | ||
| 1499 | 1484 | ||
| 1500 | goto yynewstate; | 1485 | goto yynewstate; |
| 1501 | 1486 | ||
| @@ -1532,8 +1517,7 @@ yyreduce: | |||
| 1532 | switch (yyn) | 1517 | switch (yyn) |
| 1533 | { | 1518 | { |
| 1534 | case 2: | 1519 | case 2: |
| 1535 | 1520 | /* Line 1787 of yacc.c */ | |
| 1536 | /* Line 1806 of yacc.c */ | ||
| 1537 | #line 110 "dtc-parser.y" | 1521 | #line 110 "dtc-parser.y" |
| 1538 | { | 1522 | { |
| 1539 | the_boot_info = build_boot_info((yyvsp[(3) - (4)].re), (yyvsp[(4) - (4)].node), | 1523 | the_boot_info = build_boot_info((yyvsp[(3) - (4)].re), (yyvsp[(4) - (4)].node), |
| @@ -1542,8 +1526,7 @@ yyreduce: | |||
| 1542 | break; | 1526 | break; |
| 1543 | 1527 | ||
| 1544 | case 3: | 1528 | case 3: |
| 1545 | 1529 | /* Line 1787 of yacc.c */ | |
| 1546 | /* Line 1806 of yacc.c */ | ||
| 1547 | #line 118 "dtc-parser.y" | 1530 | #line 118 "dtc-parser.y" |
| 1548 | { | 1531 | { |
| 1549 | (yyval.re) = NULL; | 1532 | (yyval.re) = NULL; |
| @@ -1551,8 +1534,7 @@ yyreduce: | |||
| 1551 | break; | 1534 | break; |
| 1552 | 1535 | ||
| 1553 | case 4: | 1536 | case 4: |
| 1554 | 1537 | /* Line 1787 of yacc.c */ | |
| 1555 | /* Line 1806 of yacc.c */ | ||
| 1556 | #line 122 "dtc-parser.y" | 1538 | #line 122 "dtc-parser.y" |
| 1557 | { | 1539 | { |
| 1558 | (yyval.re) = chain_reserve_entry((yyvsp[(1) - (2)].re), (yyvsp[(2) - (2)].re)); | 1540 | (yyval.re) = chain_reserve_entry((yyvsp[(1) - (2)].re), (yyvsp[(2) - (2)].re)); |
| @@ -1560,8 +1542,7 @@ yyreduce: | |||
| 1560 | break; | 1542 | break; |
| 1561 | 1543 | ||
| 1562 | case 5: | 1544 | case 5: |
| 1563 | 1545 | /* Line 1787 of yacc.c */ | |
| 1564 | /* Line 1806 of yacc.c */ | ||
| 1565 | #line 129 "dtc-parser.y" | 1546 | #line 129 "dtc-parser.y" |
| 1566 | { | 1547 | { |
| 1567 | (yyval.re) = build_reserve_entry((yyvsp[(2) - (4)].integer), (yyvsp[(3) - (4)].integer)); | 1548 | (yyval.re) = build_reserve_entry((yyvsp[(2) - (4)].integer), (yyvsp[(3) - (4)].integer)); |
| @@ -1569,8 +1550,7 @@ yyreduce: | |||
| 1569 | break; | 1550 | break; |
| 1570 | 1551 | ||
| 1571 | case 6: | 1552 | case 6: |
| 1572 | 1553 | /* Line 1787 of yacc.c */ | |
| 1573 | /* Line 1806 of yacc.c */ | ||
| 1574 | #line 133 "dtc-parser.y" | 1554 | #line 133 "dtc-parser.y" |
| 1575 | { | 1555 | { |
| 1576 | add_label(&(yyvsp[(2) - (2)].re)->labels, (yyvsp[(1) - (2)].labelref)); | 1556 | add_label(&(yyvsp[(2) - (2)].re)->labels, (yyvsp[(1) - (2)].labelref)); |
| @@ -1579,8 +1559,7 @@ yyreduce: | |||
| 1579 | break; | 1559 | break; |
| 1580 | 1560 | ||
| 1581 | case 7: | 1561 | case 7: |
| 1582 | 1562 | /* Line 1787 of yacc.c */ | |
| 1583 | /* Line 1806 of yacc.c */ | ||
| 1584 | #line 141 "dtc-parser.y" | 1563 | #line 141 "dtc-parser.y" |
| 1585 | { | 1564 | { |
| 1586 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), ""); | 1565 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), ""); |
| @@ -1588,8 +1567,7 @@ yyreduce: | |||
| 1588 | break; | 1567 | break; |
| 1589 | 1568 | ||
| 1590 | case 8: | 1569 | case 8: |
| 1591 | 1570 | /* Line 1787 of yacc.c */ | |
| 1592 | /* Line 1806 of yacc.c */ | ||
| 1593 | #line 145 "dtc-parser.y" | 1571 | #line 145 "dtc-parser.y" |
| 1594 | { | 1572 | { |
| 1595 | (yyval.node) = merge_nodes((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); | 1573 | (yyval.node) = merge_nodes((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); |
| @@ -1597,8 +1575,7 @@ yyreduce: | |||
| 1597 | break; | 1575 | break; |
| 1598 | 1576 | ||
| 1599 | case 9: | 1577 | case 9: |
| 1600 | 1578 | /* Line 1787 of yacc.c */ | |
| 1601 | /* Line 1806 of yacc.c */ | ||
| 1602 | #line 149 "dtc-parser.y" | 1579 | #line 149 "dtc-parser.y" |
| 1603 | { | 1580 | { |
| 1604 | struct node *target = get_node_by_ref((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].labelref)); | 1581 | struct node *target = get_node_by_ref((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].labelref)); |
| @@ -1612,8 +1589,7 @@ yyreduce: | |||
| 1612 | break; | 1589 | break; |
| 1613 | 1590 | ||
| 1614 | case 10: | 1591 | case 10: |
| 1615 | 1592 | /* Line 1787 of yacc.c */ | |
| 1616 | /* Line 1806 of yacc.c */ | ||
| 1617 | #line 159 "dtc-parser.y" | 1593 | #line 159 "dtc-parser.y" |
| 1618 | { | 1594 | { |
| 1619 | struct node *target = get_node_by_ref((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].labelref)); | 1595 | struct node *target = get_node_by_ref((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].labelref)); |
| @@ -1628,8 +1604,7 @@ yyreduce: | |||
| 1628 | break; | 1604 | break; |
| 1629 | 1605 | ||
| 1630 | case 11: | 1606 | case 11: |
| 1631 | 1607 | /* Line 1787 of yacc.c */ | |
| 1632 | /* Line 1806 of yacc.c */ | ||
| 1633 | #line 173 "dtc-parser.y" | 1608 | #line 173 "dtc-parser.y" |
| 1634 | { | 1609 | { |
| 1635 | (yyval.node) = build_node((yyvsp[(2) - (5)].proplist), (yyvsp[(3) - (5)].nodelist)); | 1610 | (yyval.node) = build_node((yyvsp[(2) - (5)].proplist), (yyvsp[(3) - (5)].nodelist)); |
| @@ -1637,8 +1612,7 @@ yyreduce: | |||
| 1637 | break; | 1612 | break; |
| 1638 | 1613 | ||
| 1639 | case 12: | 1614 | case 12: |
| 1640 | 1615 | /* Line 1787 of yacc.c */ | |
| 1641 | /* Line 1806 of yacc.c */ | ||
| 1642 | #line 180 "dtc-parser.y" | 1616 | #line 180 "dtc-parser.y" |
| 1643 | { | 1617 | { |
| 1644 | (yyval.proplist) = NULL; | 1618 | (yyval.proplist) = NULL; |
| @@ -1646,8 +1620,7 @@ yyreduce: | |||
| 1646 | break; | 1620 | break; |
| 1647 | 1621 | ||
| 1648 | case 13: | 1622 | case 13: |
| 1649 | 1623 | /* Line 1787 of yacc.c */ | |
| 1650 | /* Line 1806 of yacc.c */ | ||
| 1651 | #line 184 "dtc-parser.y" | 1624 | #line 184 "dtc-parser.y" |
| 1652 | { | 1625 | { |
| 1653 | (yyval.proplist) = chain_property((yyvsp[(2) - (2)].prop), (yyvsp[(1) - (2)].proplist)); | 1626 | (yyval.proplist) = chain_property((yyvsp[(2) - (2)].prop), (yyvsp[(1) - (2)].proplist)); |
| @@ -1655,8 +1628,7 @@ yyreduce: | |||
| 1655 | break; | 1628 | break; |
| 1656 | 1629 | ||
| 1657 | case 14: | 1630 | case 14: |
| 1658 | 1631 | /* Line 1787 of yacc.c */ | |
| 1659 | /* Line 1806 of yacc.c */ | ||
| 1660 | #line 191 "dtc-parser.y" | 1632 | #line 191 "dtc-parser.y" |
| 1661 | { | 1633 | { |
| 1662 | (yyval.prop) = build_property((yyvsp[(1) - (4)].propnodename), (yyvsp[(3) - (4)].data)); | 1634 | (yyval.prop) = build_property((yyvsp[(1) - (4)].propnodename), (yyvsp[(3) - (4)].data)); |
| @@ -1664,8 +1636,7 @@ yyreduce: | |||
| 1664 | break; | 1636 | break; |
| 1665 | 1637 | ||
| 1666 | case 15: | 1638 | case 15: |
| 1667 | 1639 | /* Line 1787 of yacc.c */ | |
| 1668 | /* Line 1806 of yacc.c */ | ||
| 1669 | #line 195 "dtc-parser.y" | 1640 | #line 195 "dtc-parser.y" |
| 1670 | { | 1641 | { |
| 1671 | (yyval.prop) = build_property((yyvsp[(1) - (2)].propnodename), empty_data); | 1642 | (yyval.prop) = build_property((yyvsp[(1) - (2)].propnodename), empty_data); |
| @@ -1673,8 +1644,7 @@ yyreduce: | |||
| 1673 | break; | 1644 | break; |
| 1674 | 1645 | ||
| 1675 | case 16: | 1646 | case 16: |
| 1676 | 1647 | /* Line 1787 of yacc.c */ | |
| 1677 | /* Line 1806 of yacc.c */ | ||
| 1678 | #line 199 "dtc-parser.y" | 1648 | #line 199 "dtc-parser.y" |
| 1679 | { | 1649 | { |
| 1680 | (yyval.prop) = build_property_delete((yyvsp[(2) - (3)].propnodename)); | 1650 | (yyval.prop) = build_property_delete((yyvsp[(2) - (3)].propnodename)); |
| @@ -1682,8 +1652,7 @@ yyreduce: | |||
| 1682 | break; | 1652 | break; |
| 1683 | 1653 | ||
| 1684 | case 17: | 1654 | case 17: |
| 1685 | 1655 | /* Line 1787 of yacc.c */ | |
| 1686 | /* Line 1806 of yacc.c */ | ||
| 1687 | #line 203 "dtc-parser.y" | 1656 | #line 203 "dtc-parser.y" |
| 1688 | { | 1657 | { |
| 1689 | add_label(&(yyvsp[(2) - (2)].prop)->labels, (yyvsp[(1) - (2)].labelref)); | 1658 | add_label(&(yyvsp[(2) - (2)].prop)->labels, (yyvsp[(1) - (2)].labelref)); |
| @@ -1692,8 +1661,7 @@ yyreduce: | |||
| 1692 | break; | 1661 | break; |
| 1693 | 1662 | ||
| 1694 | case 18: | 1663 | case 18: |
| 1695 | 1664 | /* Line 1787 of yacc.c */ | |
| 1696 | /* Line 1806 of yacc.c */ | ||
| 1697 | #line 211 "dtc-parser.y" | 1665 | #line 211 "dtc-parser.y" |
| 1698 | { | 1666 | { |
| 1699 | (yyval.data) = data_merge((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].data)); | 1667 | (yyval.data) = data_merge((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].data)); |
| @@ -1701,8 +1669,7 @@ yyreduce: | |||
| 1701 | break; | 1669 | break; |
| 1702 | 1670 | ||
| 1703 | case 19: | 1671 | case 19: |
| 1704 | 1672 | /* Line 1787 of yacc.c */ | |
| 1705 | /* Line 1806 of yacc.c */ | ||
| 1706 | #line 215 "dtc-parser.y" | 1673 | #line 215 "dtc-parser.y" |
| 1707 | { | 1674 | { |
| 1708 | (yyval.data) = data_merge((yyvsp[(1) - (3)].data), (yyvsp[(2) - (3)].array).data); | 1675 | (yyval.data) = data_merge((yyvsp[(1) - (3)].data), (yyvsp[(2) - (3)].array).data); |
| @@ -1710,8 +1677,7 @@ yyreduce: | |||
| 1710 | break; | 1677 | break; |
| 1711 | 1678 | ||
| 1712 | case 20: | 1679 | case 20: |
| 1713 | 1680 | /* Line 1787 of yacc.c */ | |
| 1714 | /* Line 1806 of yacc.c */ | ||
| 1715 | #line 219 "dtc-parser.y" | 1681 | #line 219 "dtc-parser.y" |
| 1716 | { | 1682 | { |
| 1717 | (yyval.data) = data_merge((yyvsp[(1) - (4)].data), (yyvsp[(3) - (4)].data)); | 1683 | (yyval.data) = data_merge((yyvsp[(1) - (4)].data), (yyvsp[(3) - (4)].data)); |
| @@ -1719,8 +1685,7 @@ yyreduce: | |||
| 1719 | break; | 1685 | break; |
| 1720 | 1686 | ||
| 1721 | case 21: | 1687 | case 21: |
| 1722 | 1688 | /* Line 1787 of yacc.c */ | |
| 1723 | /* Line 1806 of yacc.c */ | ||
| 1724 | #line 223 "dtc-parser.y" | 1689 | #line 223 "dtc-parser.y" |
| 1725 | { | 1690 | { |
| 1726 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), REF_PATH, (yyvsp[(2) - (2)].labelref)); | 1691 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), REF_PATH, (yyvsp[(2) - (2)].labelref)); |
| @@ -1728,8 +1693,7 @@ yyreduce: | |||
| 1728 | break; | 1693 | break; |
| 1729 | 1694 | ||
| 1730 | case 22: | 1695 | case 22: |
| 1731 | 1696 | /* Line 1787 of yacc.c */ | |
| 1732 | /* Line 1806 of yacc.c */ | ||
| 1733 | #line 227 "dtc-parser.y" | 1697 | #line 227 "dtc-parser.y" |
| 1734 | { | 1698 | { |
| 1735 | FILE *f = srcfile_relative_open((yyvsp[(4) - (9)].data).val, NULL); | 1699 | FILE *f = srcfile_relative_open((yyvsp[(4) - (9)].data).val, NULL); |
| @@ -1750,8 +1714,7 @@ yyreduce: | |||
| 1750 | break; | 1714 | break; |
| 1751 | 1715 | ||
| 1752 | case 23: | 1716 | case 23: |
| 1753 | 1717 | /* Line 1787 of yacc.c */ | |
| 1754 | /* Line 1806 of yacc.c */ | ||
| 1755 | #line 244 "dtc-parser.y" | 1718 | #line 244 "dtc-parser.y" |
| 1756 | { | 1719 | { |
| 1757 | FILE *f = srcfile_relative_open((yyvsp[(4) - (5)].data).val, NULL); | 1720 | FILE *f = srcfile_relative_open((yyvsp[(4) - (5)].data).val, NULL); |
| @@ -1765,8 +1728,7 @@ yyreduce: | |||
| 1765 | break; | 1728 | break; |
| 1766 | 1729 | ||
| 1767 | case 24: | 1730 | case 24: |
| 1768 | 1731 | /* Line 1787 of yacc.c */ | |
| 1769 | /* Line 1806 of yacc.c */ | ||
| 1770 | #line 254 "dtc-parser.y" | 1732 | #line 254 "dtc-parser.y" |
| 1771 | { | 1733 | { |
| 1772 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); | 1734 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); |
| @@ -1774,8 +1736,7 @@ yyreduce: | |||
| 1774 | break; | 1736 | break; |
| 1775 | 1737 | ||
| 1776 | case 25: | 1738 | case 25: |
| 1777 | 1739 | /* Line 1787 of yacc.c */ | |
| 1778 | /* Line 1806 of yacc.c */ | ||
| 1779 | #line 261 "dtc-parser.y" | 1740 | #line 261 "dtc-parser.y" |
| 1780 | { | 1741 | { |
| 1781 | (yyval.data) = empty_data; | 1742 | (yyval.data) = empty_data; |
| @@ -1783,8 +1744,7 @@ yyreduce: | |||
| 1783 | break; | 1744 | break; |
| 1784 | 1745 | ||
| 1785 | case 26: | 1746 | case 26: |
| 1786 | 1747 | /* Line 1787 of yacc.c */ | |
| 1787 | /* Line 1806 of yacc.c */ | ||
| 1788 | #line 265 "dtc-parser.y" | 1748 | #line 265 "dtc-parser.y" |
| 1789 | { | 1749 | { |
| 1790 | (yyval.data) = (yyvsp[(1) - (2)].data); | 1750 | (yyval.data) = (yyvsp[(1) - (2)].data); |
| @@ -1792,8 +1752,7 @@ yyreduce: | |||
| 1792 | break; | 1752 | break; |
| 1793 | 1753 | ||
| 1794 | case 27: | 1754 | case 27: |
| 1795 | 1755 | /* Line 1787 of yacc.c */ | |
| 1796 | /* Line 1806 of yacc.c */ | ||
| 1797 | #line 269 "dtc-parser.y" | 1756 | #line 269 "dtc-parser.y" |
| 1798 | { | 1757 | { |
| 1799 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); | 1758 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); |
| @@ -1801,8 +1760,7 @@ yyreduce: | |||
| 1801 | break; | 1760 | break; |
| 1802 | 1761 | ||
| 1803 | case 28: | 1762 | case 28: |
| 1804 | 1763 | /* Line 1787 of yacc.c */ | |
| 1805 | /* Line 1806 of yacc.c */ | ||
| 1806 | #line 276 "dtc-parser.y" | 1764 | #line 276 "dtc-parser.y" |
| 1807 | { | 1765 | { |
| 1808 | (yyval.array).data = empty_data; | 1766 | (yyval.array).data = empty_data; |
| @@ -1821,8 +1779,7 @@ yyreduce: | |||
| 1821 | break; | 1779 | break; |
| 1822 | 1780 | ||
| 1823 | case 29: | 1781 | case 29: |
| 1824 | 1782 | /* Line 1787 of yacc.c */ | |
| 1825 | /* Line 1806 of yacc.c */ | ||
| 1826 | #line 291 "dtc-parser.y" | 1783 | #line 291 "dtc-parser.y" |
| 1827 | { | 1784 | { |
| 1828 | (yyval.array).data = empty_data; | 1785 | (yyval.array).data = empty_data; |
| @@ -1831,8 +1788,7 @@ yyreduce: | |||
| 1831 | break; | 1788 | break; |
| 1832 | 1789 | ||
| 1833 | case 30: | 1790 | case 30: |
| 1834 | 1791 | /* Line 1787 of yacc.c */ | |
| 1835 | /* Line 1806 of yacc.c */ | ||
| 1836 | #line 296 "dtc-parser.y" | 1792 | #line 296 "dtc-parser.y" |
| 1837 | { | 1793 | { |
| 1838 | if ((yyvsp[(1) - (2)].array).bits < 64) { | 1794 | if ((yyvsp[(1) - (2)].array).bits < 64) { |
| @@ -1856,8 +1812,7 @@ yyreduce: | |||
| 1856 | break; | 1812 | break; |
| 1857 | 1813 | ||
| 1858 | case 31: | 1814 | case 31: |
| 1859 | 1815 | /* Line 1787 of yacc.c */ | |
| 1860 | /* Line 1806 of yacc.c */ | ||
| 1861 | #line 316 "dtc-parser.y" | 1816 | #line 316 "dtc-parser.y" |
| 1862 | { | 1817 | { |
| 1863 | uint64_t val = ~0ULL >> (64 - (yyvsp[(1) - (2)].array).bits); | 1818 | uint64_t val = ~0ULL >> (64 - (yyvsp[(1) - (2)].array).bits); |
| @@ -1875,8 +1830,7 @@ yyreduce: | |||
| 1875 | break; | 1830 | break; |
| 1876 | 1831 | ||
| 1877 | case 32: | 1832 | case 32: |
| 1878 | 1833 | /* Line 1787 of yacc.c */ | |
| 1879 | /* Line 1806 of yacc.c */ | ||
| 1880 | #line 330 "dtc-parser.y" | 1834 | #line 330 "dtc-parser.y" |
| 1881 | { | 1835 | { |
| 1882 | (yyval.array).data = data_add_marker((yyvsp[(1) - (2)].array).data, LABEL, (yyvsp[(2) - (2)].labelref)); | 1836 | (yyval.array).data = data_add_marker((yyvsp[(1) - (2)].array).data, LABEL, (yyvsp[(2) - (2)].labelref)); |
| @@ -1884,8 +1838,7 @@ yyreduce: | |||
| 1884 | break; | 1838 | break; |
| 1885 | 1839 | ||
| 1886 | case 33: | 1840 | case 33: |
| 1887 | 1841 | /* Line 1787 of yacc.c */ | |
| 1888 | /* Line 1806 of yacc.c */ | ||
| 1889 | #line 337 "dtc-parser.y" | 1842 | #line 337 "dtc-parser.y" |
| 1890 | { | 1843 | { |
| 1891 | (yyval.integer) = eval_literal((yyvsp[(1) - (1)].literal), 0, 64); | 1844 | (yyval.integer) = eval_literal((yyvsp[(1) - (1)].literal), 0, 64); |
| @@ -1893,8 +1846,7 @@ yyreduce: | |||
| 1893 | break; | 1846 | break; |
| 1894 | 1847 | ||
| 1895 | case 34: | 1848 | case 34: |
| 1896 | 1849 | /* Line 1787 of yacc.c */ | |
| 1897 | /* Line 1806 of yacc.c */ | ||
| 1898 | #line 341 "dtc-parser.y" | 1850 | #line 341 "dtc-parser.y" |
| 1899 | { | 1851 | { |
| 1900 | (yyval.integer) = eval_char_literal((yyvsp[(1) - (1)].literal)); | 1852 | (yyval.integer) = eval_char_literal((yyvsp[(1) - (1)].literal)); |
| @@ -1902,8 +1854,7 @@ yyreduce: | |||
| 1902 | break; | 1854 | break; |
| 1903 | 1855 | ||
| 1904 | case 35: | 1856 | case 35: |
| 1905 | 1857 | /* Line 1787 of yacc.c */ | |
| 1906 | /* Line 1806 of yacc.c */ | ||
| 1907 | #line 345 "dtc-parser.y" | 1858 | #line 345 "dtc-parser.y" |
| 1908 | { | 1859 | { |
| 1909 | (yyval.integer) = (yyvsp[(2) - (3)].integer); | 1860 | (yyval.integer) = (yyvsp[(2) - (3)].integer); |
| @@ -1911,162 +1862,139 @@ yyreduce: | |||
| 1911 | break; | 1862 | break; |
| 1912 | 1863 | ||
| 1913 | case 38: | 1864 | case 38: |
| 1914 | 1865 | /* Line 1787 of yacc.c */ | |
| 1915 | /* Line 1806 of yacc.c */ | ||
| 1916 | #line 356 "dtc-parser.y" | 1866 | #line 356 "dtc-parser.y" |
| 1917 | { (yyval.integer) = (yyvsp[(1) - (5)].integer) ? (yyvsp[(3) - (5)].integer) : (yyvsp[(5) - (5)].integer); } | 1867 | { (yyval.integer) = (yyvsp[(1) - (5)].integer) ? (yyvsp[(3) - (5)].integer) : (yyvsp[(5) - (5)].integer); } |
| 1918 | break; | 1868 | break; |
| 1919 | 1869 | ||
| 1920 | case 40: | 1870 | case 40: |
| 1921 | 1871 | /* Line 1787 of yacc.c */ | |
| 1922 | /* Line 1806 of yacc.c */ | ||
| 1923 | #line 361 "dtc-parser.y" | 1872 | #line 361 "dtc-parser.y" |
| 1924 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) || (yyvsp[(3) - (3)].integer); } | 1873 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) || (yyvsp[(3) - (3)].integer); } |
| 1925 | break; | 1874 | break; |
| 1926 | 1875 | ||
| 1927 | case 42: | 1876 | case 42: |
| 1928 | 1877 | /* Line 1787 of yacc.c */ | |
| 1929 | /* Line 1806 of yacc.c */ | ||
| 1930 | #line 366 "dtc-parser.y" | 1878 | #line 366 "dtc-parser.y" |
| 1931 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) && (yyvsp[(3) - (3)].integer); } | 1879 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) && (yyvsp[(3) - (3)].integer); } |
| 1932 | break; | 1880 | break; |
| 1933 | 1881 | ||
| 1934 | case 44: | 1882 | case 44: |
| 1935 | 1883 | /* Line 1787 of yacc.c */ | |
| 1936 | /* Line 1806 of yacc.c */ | ||
| 1937 | #line 371 "dtc-parser.y" | 1884 | #line 371 "dtc-parser.y" |
| 1938 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) | (yyvsp[(3) - (3)].integer); } | 1885 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) | (yyvsp[(3) - (3)].integer); } |
| 1939 | break; | 1886 | break; |
| 1940 | 1887 | ||
| 1941 | case 46: | 1888 | case 46: |
| 1942 | 1889 | /* Line 1787 of yacc.c */ | |
| 1943 | /* Line 1806 of yacc.c */ | ||
| 1944 | #line 376 "dtc-parser.y" | 1890 | #line 376 "dtc-parser.y" |
| 1945 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) ^ (yyvsp[(3) - (3)].integer); } | 1891 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) ^ (yyvsp[(3) - (3)].integer); } |
| 1946 | break; | 1892 | break; |
| 1947 | 1893 | ||
| 1948 | case 48: | 1894 | case 48: |
| 1949 | 1895 | /* Line 1787 of yacc.c */ | |
| 1950 | /* Line 1806 of yacc.c */ | ||
| 1951 | #line 381 "dtc-parser.y" | 1896 | #line 381 "dtc-parser.y" |
| 1952 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) & (yyvsp[(3) - (3)].integer); } | 1897 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) & (yyvsp[(3) - (3)].integer); } |
| 1953 | break; | 1898 | break; |
| 1954 | 1899 | ||
| 1955 | case 50: | 1900 | case 50: |
| 1956 | 1901 | /* Line 1787 of yacc.c */ | |
| 1957 | /* Line 1806 of yacc.c */ | ||
| 1958 | #line 386 "dtc-parser.y" | 1902 | #line 386 "dtc-parser.y" |
| 1959 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) == (yyvsp[(3) - (3)].integer); } | 1903 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) == (yyvsp[(3) - (3)].integer); } |
| 1960 | break; | 1904 | break; |
| 1961 | 1905 | ||
| 1962 | case 51: | 1906 | case 51: |
| 1963 | 1907 | /* Line 1787 of yacc.c */ | |
| 1964 | /* Line 1806 of yacc.c */ | ||
| 1965 | #line 387 "dtc-parser.y" | 1908 | #line 387 "dtc-parser.y" |
| 1966 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) != (yyvsp[(3) - (3)].integer); } | 1909 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) != (yyvsp[(3) - (3)].integer); } |
| 1967 | break; | 1910 | break; |
| 1968 | 1911 | ||
| 1969 | case 53: | 1912 | case 53: |
| 1970 | 1913 | /* Line 1787 of yacc.c */ | |
| 1971 | /* Line 1806 of yacc.c */ | ||
| 1972 | #line 392 "dtc-parser.y" | 1914 | #line 392 "dtc-parser.y" |
| 1973 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) < (yyvsp[(3) - (3)].integer); } | 1915 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) < (yyvsp[(3) - (3)].integer); } |
| 1974 | break; | 1916 | break; |
| 1975 | 1917 | ||
| 1976 | case 54: | 1918 | case 54: |
| 1977 | 1919 | /* Line 1787 of yacc.c */ | |
| 1978 | /* Line 1806 of yacc.c */ | ||
| 1979 | #line 393 "dtc-parser.y" | 1920 | #line 393 "dtc-parser.y" |
| 1980 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) > (yyvsp[(3) - (3)].integer); } | 1921 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) > (yyvsp[(3) - (3)].integer); } |
| 1981 | break; | 1922 | break; |
| 1982 | 1923 | ||
| 1983 | case 55: | 1924 | case 55: |
| 1984 | 1925 | /* Line 1787 of yacc.c */ | |
| 1985 | /* Line 1806 of yacc.c */ | ||
| 1986 | #line 394 "dtc-parser.y" | 1926 | #line 394 "dtc-parser.y" |
| 1987 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) <= (yyvsp[(3) - (3)].integer); } | 1927 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) <= (yyvsp[(3) - (3)].integer); } |
| 1988 | break; | 1928 | break; |
| 1989 | 1929 | ||
| 1990 | case 56: | 1930 | case 56: |
| 1991 | 1931 | /* Line 1787 of yacc.c */ | |
| 1992 | /* Line 1806 of yacc.c */ | ||
| 1993 | #line 395 "dtc-parser.y" | 1932 | #line 395 "dtc-parser.y" |
| 1994 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >= (yyvsp[(3) - (3)].integer); } | 1933 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >= (yyvsp[(3) - (3)].integer); } |
| 1995 | break; | 1934 | break; |
| 1996 | 1935 | ||
| 1997 | case 57: | 1936 | case 57: |
| 1998 | 1937 | /* Line 1787 of yacc.c */ | |
| 1999 | /* Line 1806 of yacc.c */ | ||
| 2000 | #line 399 "dtc-parser.y" | 1938 | #line 399 "dtc-parser.y" |
| 2001 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) << (yyvsp[(3) - (3)].integer); } | 1939 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) << (yyvsp[(3) - (3)].integer); } |
| 2002 | break; | 1940 | break; |
| 2003 | 1941 | ||
| 2004 | case 58: | 1942 | case 58: |
| 2005 | 1943 | /* Line 1787 of yacc.c */ | |
| 2006 | /* Line 1806 of yacc.c */ | ||
| 2007 | #line 400 "dtc-parser.y" | 1944 | #line 400 "dtc-parser.y" |
| 2008 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >> (yyvsp[(3) - (3)].integer); } | 1945 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) >> (yyvsp[(3) - (3)].integer); } |
| 2009 | break; | 1946 | break; |
| 2010 | 1947 | ||
| 2011 | case 60: | 1948 | case 60: |
| 2012 | 1949 | /* Line 1787 of yacc.c */ | |
| 2013 | /* Line 1806 of yacc.c */ | ||
| 2014 | #line 405 "dtc-parser.y" | 1950 | #line 405 "dtc-parser.y" |
| 2015 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) + (yyvsp[(3) - (3)].integer); } | 1951 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) + (yyvsp[(3) - (3)].integer); } |
| 2016 | break; | 1952 | break; |
| 2017 | 1953 | ||
| 2018 | case 61: | 1954 | case 61: |
| 2019 | 1955 | /* Line 1787 of yacc.c */ | |
| 2020 | /* Line 1806 of yacc.c */ | ||
| 2021 | #line 406 "dtc-parser.y" | 1956 | #line 406 "dtc-parser.y" |
| 2022 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) - (yyvsp[(3) - (3)].integer); } | 1957 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) - (yyvsp[(3) - (3)].integer); } |
| 2023 | break; | 1958 | break; |
| 2024 | 1959 | ||
| 2025 | case 63: | 1960 | case 63: |
| 2026 | 1961 | /* Line 1787 of yacc.c */ | |
| 2027 | /* Line 1806 of yacc.c */ | ||
| 2028 | #line 411 "dtc-parser.y" | 1962 | #line 411 "dtc-parser.y" |
| 2029 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) * (yyvsp[(3) - (3)].integer); } | 1963 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) * (yyvsp[(3) - (3)].integer); } |
| 2030 | break; | 1964 | break; |
| 2031 | 1965 | ||
| 2032 | case 64: | 1966 | case 64: |
| 2033 | 1967 | /* Line 1787 of yacc.c */ | |
| 2034 | /* Line 1806 of yacc.c */ | ||
| 2035 | #line 412 "dtc-parser.y" | 1968 | #line 412 "dtc-parser.y" |
| 2036 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) / (yyvsp[(3) - (3)].integer); } | 1969 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) / (yyvsp[(3) - (3)].integer); } |
| 2037 | break; | 1970 | break; |
| 2038 | 1971 | ||
| 2039 | case 65: | 1972 | case 65: |
| 2040 | 1973 | /* Line 1787 of yacc.c */ | |
| 2041 | /* Line 1806 of yacc.c */ | ||
| 2042 | #line 413 "dtc-parser.y" | 1974 | #line 413 "dtc-parser.y" |
| 2043 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) % (yyvsp[(3) - (3)].integer); } | 1975 | { (yyval.integer) = (yyvsp[(1) - (3)].integer) % (yyvsp[(3) - (3)].integer); } |
| 2044 | break; | 1976 | break; |
| 2045 | 1977 | ||
| 2046 | case 68: | 1978 | case 68: |
| 2047 | 1979 | /* Line 1787 of yacc.c */ | |
| 2048 | /* Line 1806 of yacc.c */ | ||
| 2049 | #line 419 "dtc-parser.y" | 1980 | #line 419 "dtc-parser.y" |
| 2050 | { (yyval.integer) = -(yyvsp[(2) - (2)].integer); } | 1981 | { (yyval.integer) = -(yyvsp[(2) - (2)].integer); } |
| 2051 | break; | 1982 | break; |
| 2052 | 1983 | ||
| 2053 | case 69: | 1984 | case 69: |
| 2054 | 1985 | /* Line 1787 of yacc.c */ | |
| 2055 | /* Line 1806 of yacc.c */ | ||
| 2056 | #line 420 "dtc-parser.y" | 1986 | #line 420 "dtc-parser.y" |
| 2057 | { (yyval.integer) = ~(yyvsp[(2) - (2)].integer); } | 1987 | { (yyval.integer) = ~(yyvsp[(2) - (2)].integer); } |
| 2058 | break; | 1988 | break; |
| 2059 | 1989 | ||
| 2060 | case 70: | 1990 | case 70: |
| 2061 | 1991 | /* Line 1787 of yacc.c */ | |
| 2062 | /* Line 1806 of yacc.c */ | ||
| 2063 | #line 421 "dtc-parser.y" | 1992 | #line 421 "dtc-parser.y" |
| 2064 | { (yyval.integer) = !(yyvsp[(2) - (2)].integer); } | 1993 | { (yyval.integer) = !(yyvsp[(2) - (2)].integer); } |
| 2065 | break; | 1994 | break; |
| 2066 | 1995 | ||
| 2067 | case 71: | 1996 | case 71: |
| 2068 | 1997 | /* Line 1787 of yacc.c */ | |
| 2069 | /* Line 1806 of yacc.c */ | ||
| 2070 | #line 426 "dtc-parser.y" | 1998 | #line 426 "dtc-parser.y" |
| 2071 | { | 1999 | { |
| 2072 | (yyval.data) = empty_data; | 2000 | (yyval.data) = empty_data; |
| @@ -2074,8 +2002,7 @@ yyreduce: | |||
| 2074 | break; | 2002 | break; |
| 2075 | 2003 | ||
| 2076 | case 72: | 2004 | case 72: |
| 2077 | 2005 | /* Line 1787 of yacc.c */ | |
| 2078 | /* Line 1806 of yacc.c */ | ||
| 2079 | #line 430 "dtc-parser.y" | 2006 | #line 430 "dtc-parser.y" |
| 2080 | { | 2007 | { |
| 2081 | (yyval.data) = data_append_byte((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].byte)); | 2008 | (yyval.data) = data_append_byte((yyvsp[(1) - (2)].data), (yyvsp[(2) - (2)].byte)); |
| @@ -2083,8 +2010,7 @@ yyreduce: | |||
| 2083 | break; | 2010 | break; |
| 2084 | 2011 | ||
| 2085 | case 73: | 2012 | case 73: |
| 2086 | 2013 | /* Line 1787 of yacc.c */ | |
| 2087 | /* Line 1806 of yacc.c */ | ||
| 2088 | #line 434 "dtc-parser.y" | 2014 | #line 434 "dtc-parser.y" |
| 2089 | { | 2015 | { |
| 2090 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); | 2016 | (yyval.data) = data_add_marker((yyvsp[(1) - (2)].data), LABEL, (yyvsp[(2) - (2)].labelref)); |
| @@ -2092,8 +2018,7 @@ yyreduce: | |||
| 2092 | break; | 2018 | break; |
| 2093 | 2019 | ||
| 2094 | case 74: | 2020 | case 74: |
| 2095 | 2021 | /* Line 1787 of yacc.c */ | |
| 2096 | /* Line 1806 of yacc.c */ | ||
| 2097 | #line 441 "dtc-parser.y" | 2022 | #line 441 "dtc-parser.y" |
| 2098 | { | 2023 | { |
| 2099 | (yyval.nodelist) = NULL; | 2024 | (yyval.nodelist) = NULL; |
| @@ -2101,8 +2026,7 @@ yyreduce: | |||
| 2101 | break; | 2026 | break; |
| 2102 | 2027 | ||
| 2103 | case 75: | 2028 | case 75: |
| 2104 | 2029 | /* Line 1787 of yacc.c */ | |
| 2105 | /* Line 1806 of yacc.c */ | ||
| 2106 | #line 445 "dtc-parser.y" | 2030 | #line 445 "dtc-parser.y" |
| 2107 | { | 2031 | { |
| 2108 | (yyval.nodelist) = chain_node((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].nodelist)); | 2032 | (yyval.nodelist) = chain_node((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].nodelist)); |
| @@ -2110,8 +2034,7 @@ yyreduce: | |||
| 2110 | break; | 2034 | break; |
| 2111 | 2035 | ||
| 2112 | case 76: | 2036 | case 76: |
| 2113 | 2037 | /* Line 1787 of yacc.c */ | |
| 2114 | /* Line 1806 of yacc.c */ | ||
| 2115 | #line 449 "dtc-parser.y" | 2038 | #line 449 "dtc-parser.y" |
| 2116 | { | 2039 | { |
| 2117 | print_error("syntax error: properties must precede subnodes"); | 2040 | print_error("syntax error: properties must precede subnodes"); |
| @@ -2120,8 +2043,7 @@ yyreduce: | |||
| 2120 | break; | 2043 | break; |
| 2121 | 2044 | ||
| 2122 | case 77: | 2045 | case 77: |
| 2123 | 2046 | /* Line 1787 of yacc.c */ | |
| 2124 | /* Line 1806 of yacc.c */ | ||
| 2125 | #line 457 "dtc-parser.y" | 2047 | #line 457 "dtc-parser.y" |
| 2126 | { | 2048 | { |
| 2127 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), (yyvsp[(1) - (2)].propnodename)); | 2049 | (yyval.node) = name_node((yyvsp[(2) - (2)].node), (yyvsp[(1) - (2)].propnodename)); |
| @@ -2129,8 +2051,7 @@ yyreduce: | |||
| 2129 | break; | 2051 | break; |
| 2130 | 2052 | ||
| 2131 | case 78: | 2053 | case 78: |
| 2132 | 2054 | /* Line 1787 of yacc.c */ | |
| 2133 | /* Line 1806 of yacc.c */ | ||
| 2134 | #line 461 "dtc-parser.y" | 2055 | #line 461 "dtc-parser.y" |
| 2135 | { | 2056 | { |
| 2136 | (yyval.node) = name_node(build_node_delete(), (yyvsp[(2) - (3)].propnodename)); | 2057 | (yyval.node) = name_node(build_node_delete(), (yyvsp[(2) - (3)].propnodename)); |
| @@ -2138,8 +2059,7 @@ yyreduce: | |||
| 2138 | break; | 2059 | break; |
| 2139 | 2060 | ||
| 2140 | case 79: | 2061 | case 79: |
| 2141 | 2062 | /* Line 1787 of yacc.c */ | |
| 2142 | /* Line 1806 of yacc.c */ | ||
| 2143 | #line 465 "dtc-parser.y" | 2063 | #line 465 "dtc-parser.y" |
| 2144 | { | 2064 | { |
| 2145 | add_label(&(yyvsp[(2) - (2)].node)->labels, (yyvsp[(1) - (2)].labelref)); | 2065 | add_label(&(yyvsp[(2) - (2)].node)->labels, (yyvsp[(1) - (2)].labelref)); |
| @@ -2148,9 +2068,8 @@ yyreduce: | |||
| 2148 | break; | 2068 | break; |
| 2149 | 2069 | ||
| 2150 | 2070 | ||
| 2151 | 2071 | /* Line 1787 of yacc.c */ | |
| 2152 | /* Line 1806 of yacc.c */ | 2072 | #line 2073 "dtc-parser.tab.c" |
| 2153 | #line 2154 "dtc-parser.tab.c" | ||
| 2154 | default: break; | 2073 | default: break; |
| 2155 | } | 2074 | } |
| 2156 | /* User semantic actions sometimes alter yychar, and that requires | 2075 | /* User semantic actions sometimes alter yychar, and that requires |
| @@ -2313,7 +2232,9 @@ yyerrlab1: | |||
| 2313 | YY_STACK_PRINT (yyss, yyssp); | 2232 | YY_STACK_PRINT (yyss, yyssp); |
| 2314 | } | 2233 | } |
| 2315 | 2234 | ||
| 2235 | YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | ||
| 2316 | *++yyvsp = yylval; | 2236 | *++yyvsp = yylval; |
| 2237 | YY_IGNORE_MAYBE_UNINITIALIZED_END | ||
| 2317 | 2238 | ||
| 2318 | 2239 | ||
| 2319 | /* Shift the error token. */ | 2240 | /* Shift the error token. */ |
| @@ -2337,7 +2258,7 @@ yyabortlab: | |||
| 2337 | yyresult = 1; | 2258 | yyresult = 1; |
| 2338 | goto yyreturn; | 2259 | goto yyreturn; |
| 2339 | 2260 | ||
| 2340 | #if !defined(yyoverflow) || YYERROR_VERBOSE | 2261 | #if !defined yyoverflow || YYERROR_VERBOSE |
| 2341 | /*-------------------------------------------------. | 2262 | /*-------------------------------------------------. |
| 2342 | | yyexhaustedlab -- memory exhaustion comes here. | | 2263 | | yyexhaustedlab -- memory exhaustion comes here. | |
| 2343 | `-------------------------------------------------*/ | 2264 | `-------------------------------------------------*/ |
| @@ -2379,8 +2300,7 @@ yyreturn: | |||
| 2379 | } | 2300 | } |
| 2380 | 2301 | ||
| 2381 | 2302 | ||
| 2382 | 2303 | /* Line 2050 of yacc.c */ | |
| 2383 | /* Line 2067 of yacc.c */ | ||
| 2384 | #line 471 "dtc-parser.y" | 2304 | #line 471 "dtc-parser.y" |
| 2385 | 2305 | ||
| 2386 | 2306 | ||
| @@ -2444,4 +2364,3 @@ static unsigned char eval_char_literal(const char *s) | |||
| 2444 | 2364 | ||
| 2445 | return c; | 2365 | return c; |
| 2446 | } | 2366 | } |
| 2447 | |||
diff --git a/scripts/dtc/dtc-parser.tab.h_shipped b/scripts/dtc/dtc-parser.tab.h_shipped index 25d3b88c6132..b2e7a86cd85e 100644 --- a/scripts/dtc/dtc-parser.tab.h_shipped +++ b/scripts/dtc/dtc-parser.tab.h_shipped | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | /* A Bison parser, made by GNU Bison 2.5. */ | 1 | /* A Bison parser, made by GNU Bison 2.7.12-4996. */ |
| 2 | 2 | ||
| 3 | /* Bison interface for Yacc-like parsers in C | 3 | /* Bison interface for Yacc-like parsers in C |
| 4 | 4 | ||
| 5 | Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. | 5 | Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. |
| 6 | 6 | ||
| 7 | 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 |
| 8 | 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 |
| @@ -30,6 +30,15 @@ | |||
| 30 | This special exception was added by the Free Software Foundation in | 30 | This special exception was added by the Free Software Foundation in |
| 31 | version 2.2 of Bison. */ | 31 | version 2.2 of Bison. */ |
| 32 | 32 | ||
| 33 | #ifndef YY_YY_DTC_PARSER_TAB_H_INCLUDED | ||
| 34 | # define YY_YY_DTC_PARSER_TAB_H_INCLUDED | ||
| 35 | /* Enabling traces. */ | ||
| 36 | #ifndef YYDEBUG | ||
| 37 | # define YYDEBUG 0 | ||
| 38 | #endif | ||
| 39 | #if YYDEBUG | ||
| 40 | extern int yydebug; | ||
| 41 | #endif | ||
| 33 | 42 | ||
| 34 | /* Tokens. */ | 43 | /* Tokens. */ |
| 35 | #ifndef YYTOKENTYPE | 44 | #ifndef YYTOKENTYPE |
| @@ -63,12 +72,10 @@ | |||
| 63 | #endif | 72 | #endif |
| 64 | 73 | ||
| 65 | 74 | ||
| 66 | |||
| 67 | #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED | 75 | #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED |
| 68 | typedef union YYSTYPE | 76 | typedef union YYSTYPE |
| 69 | { | 77 | { |
| 70 | 78 | /* Line 2053 of yacc.c */ | |
| 71 | /* Line 2068 of yacc.c */ | ||
| 72 | #line 40 "dtc-parser.y" | 79 | #line 40 "dtc-parser.y" |
| 73 | 80 | ||
| 74 | char *propnodename; | 81 | char *propnodename; |
| @@ -91,9 +98,8 @@ typedef union YYSTYPE | |||
| 91 | uint64_t integer; | 98 | uint64_t integer; |
| 92 | 99 | ||
| 93 | 100 | ||
| 94 | 101 | /* Line 2053 of yacc.c */ | |
| 95 | /* Line 2068 of yacc.c */ | 102 | #line 103 "dtc-parser.tab.h" |
| 96 | #line 97 "dtc-parser.tab.h" | ||
| 97 | } YYSTYPE; | 103 | } YYSTYPE; |
| 98 | # define YYSTYPE_IS_TRIVIAL 1 | 104 | # define YYSTYPE_IS_TRIVIAL 1 |
| 99 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 105 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
| @@ -102,4 +108,18 @@ typedef union YYSTYPE | |||
| 102 | 108 | ||
| 103 | extern YYSTYPE yylval; | 109 | extern YYSTYPE yylval; |
| 104 | 110 | ||
| 111 | #ifdef YYPARSE_PARAM | ||
| 112 | #if defined __STDC__ || defined __cplusplus | ||
| 113 | int yyparse (void *YYPARSE_PARAM); | ||
| 114 | #else | ||
| 115 | int yyparse (); | ||
| 116 | #endif | ||
| 117 | #else /* ! YYPARSE_PARAM */ | ||
| 118 | #if defined __STDC__ || defined __cplusplus | ||
| 119 | int yyparse (void); | ||
| 120 | #else | ||
| 121 | int yyparse (); | ||
| 122 | #endif | ||
| 123 | #endif /* ! YYPARSE_PARAM */ | ||
| 105 | 124 | ||
| 125 | #endif /* !YY_YY_DTC_PARSER_TAB_H_INCLUDED */ | ||
diff --git a/scripts/dtc/dtc.c b/scripts/dtc/dtc.c index a375683c1534..e3c96536fd9d 100644 --- a/scripts/dtc/dtc.c +++ b/scripts/dtc/dtc.c | |||
| @@ -21,8 +21,6 @@ | |||
| 21 | #include "dtc.h" | 21 | #include "dtc.h" |
| 22 | #include "srcpos.h" | 22 | #include "srcpos.h" |
| 23 | 23 | ||
| 24 | #include "version_gen.h" | ||
| 25 | |||
| 26 | /* | 24 | /* |
| 27 | * Command line options | 25 | * Command line options |
| 28 | */ | 26 | */ |
| @@ -49,55 +47,60 @@ static void fill_fullpaths(struct node *tree, const char *prefix) | |||
| 49 | fill_fullpaths(child, tree->fullpath); | 47 | fill_fullpaths(child, tree->fullpath); |
| 50 | } | 48 | } |
| 51 | 49 | ||
| 52 | static void __attribute__ ((noreturn)) usage(void) | 50 | /* Usage related data. */ |
| 53 | { | 51 | static const char usage_synopsis[] = "dtc [options] <input file>"; |
| 54 | fprintf(stderr, "Usage:\n"); | 52 | static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv"; |
| 55 | fprintf(stderr, "\tdtc [options] <input file>\n"); | 53 | static struct option const usage_long_opts[] = { |
| 56 | fprintf(stderr, "\nOptions:\n"); | 54 | {"quiet", no_argument, NULL, 'q'}, |
| 57 | fprintf(stderr, "\t-h\n"); | 55 | {"in-format", a_argument, NULL, 'I'}, |
| 58 | fprintf(stderr, "\t\tThis help text\n"); | 56 | {"out", a_argument, NULL, 'o'}, |
| 59 | fprintf(stderr, "\t-q\n"); | 57 | {"out-format", a_argument, NULL, 'O'}, |
| 60 | fprintf(stderr, "\t\tQuiet: -q suppress warnings, -qq errors, -qqq all\n"); | 58 | {"out-version", a_argument, NULL, 'V'}, |
| 61 | fprintf(stderr, "\t-I <input format>\n"); | 59 | {"out-dependency", a_argument, NULL, 'd'}, |
| 62 | fprintf(stderr, "\t\tInput formats are:\n"); | 60 | {"reserve", a_argument, NULL, 'R'}, |
| 63 | fprintf(stderr, "\t\t\tdts - device tree source text\n"); | 61 | {"space", a_argument, NULL, 'S'}, |
| 64 | fprintf(stderr, "\t\t\tdtb - device tree blob\n"); | 62 | {"pad", a_argument, NULL, 'p'}, |
| 65 | fprintf(stderr, "\t\t\tfs - /proc/device-tree style directory\n"); | 63 | {"boot-cpu", a_argument, NULL, 'b'}, |
| 66 | fprintf(stderr, "\t-o <output file>\n"); | 64 | {"force", no_argument, NULL, 'f'}, |
| 67 | fprintf(stderr, "\t-O <output format>\n"); | 65 | {"include", a_argument, NULL, 'i'}, |
| 68 | fprintf(stderr, "\t\tOutput formats are:\n"); | 66 | {"sort", no_argument, NULL, 's'}, |
| 69 | fprintf(stderr, "\t\t\tdts - device tree source text\n"); | 67 | {"phandle", a_argument, NULL, 'H'}, |
| 70 | fprintf(stderr, "\t\t\tdtb - device tree blob\n"); | 68 | {"warning", a_argument, NULL, 'W'}, |
| 71 | fprintf(stderr, "\t\t\tasm - assembler source\n"); | 69 | {"error", a_argument, NULL, 'E'}, |
| 72 | fprintf(stderr, "\t-V <output version>\n"); | 70 | {"help", no_argument, NULL, 'h'}, |
| 73 | fprintf(stderr, "\t\tBlob version to produce, defaults to %d (relevant for dtb\n\t\tand asm output only)\n", DEFAULT_FDT_VERSION); | 71 | {"version", no_argument, NULL, 'v'}, |
| 74 | fprintf(stderr, "\t-d <output dependency file>\n"); | 72 | {NULL, no_argument, NULL, 0x0}, |
| 75 | fprintf(stderr, "\t-R <number>\n"); | 73 | }; |
| 76 | fprintf(stderr, "\t\tMake space for <number> reserve map entries (relevant for \n\t\tdtb and asm output only)\n"); | 74 | static const char * const usage_opts_help[] = { |
| 77 | fprintf(stderr, "\t-S <bytes>\n"); | 75 | "\n\tQuiet: -q suppress warnings, -qq errors, -qqq all", |
| 78 | fprintf(stderr, "\t\tMake the blob at least <bytes> long (extra space)\n"); | 76 | "\n\tInput formats are:\n" |
| 79 | fprintf(stderr, "\t-p <bytes>\n"); | 77 | "\t\tdts - device tree source text\n" |
| 80 | fprintf(stderr, "\t\tAdd padding to the blob of <bytes> long (extra space)\n"); | 78 | "\t\tdtb - device tree blob\n" |
| 81 | fprintf(stderr, "\t-b <number>\n"); | 79 | "\t\tfs - /proc/device-tree style directory", |
| 82 | fprintf(stderr, "\t\tSet the physical boot cpu\n"); | 80 | "\n\tOutput file", |
| 83 | fprintf(stderr, "\t-f\n"); | 81 | "\n\tOutput formats are:\n" |
| 84 | fprintf(stderr, "\t\tForce - try to produce output even if the input tree has errors\n"); | 82 | "\t\tdts - device tree source text\n" |
| 85 | fprintf(stderr, "\t-i\n"); | 83 | "\t\tdtb - device tree blob\n" |
| 86 | fprintf(stderr, "\t\tAdd a path to search for include files\n"); | 84 | "\t\tasm - assembler source", |
| 87 | fprintf(stderr, "\t-s\n"); | 85 | "\n\tBlob version to produce, defaults to %d (for dtb and asm output)", //, DEFAULT_FDT_VERSION); |
| 88 | fprintf(stderr, "\t\tSort nodes and properties before outputting (only useful for\n\t\tcomparing trees)\n"); | 86 | "\n\tOutput dependency file", |
| 89 | fprintf(stderr, "\t-v\n"); | 87 | "\n\ttMake space for <number> reserve map entries (for dtb and asm output)", |
| 90 | fprintf(stderr, "\t\tPrint DTC version and exit\n"); | 88 | "\n\tMake the blob at least <bytes> long (extra space)", |
| 91 | fprintf(stderr, "\t-H <phandle format>\n"); | 89 | "\n\tAdd padding to the blob of <bytes> long (extra space)", |
| 92 | fprintf(stderr, "\t\tphandle formats are:\n"); | 90 | "\n\tSet the physical boot cpu", |
| 93 | fprintf(stderr, "\t\t\tlegacy - \"linux,phandle\" properties only\n"); | 91 | "\n\tTry to produce output even if the input tree has errors", |
| 94 | fprintf(stderr, "\t\t\tepapr - \"phandle\" properties only\n"); | 92 | "\n\tAdd a path to search for include files", |
| 95 | fprintf(stderr, "\t\t\tboth - Both \"linux,phandle\" and \"phandle\" properties\n"); | 93 | "\n\tSort nodes and properties before outputting (useful for comparing trees)", |
| 96 | fprintf(stderr, "\t-W [no-]<checkname>\n"); | 94 | "\n\tValid phandle formats are:\n" |
| 97 | fprintf(stderr, "\t-E [no-]<checkname>\n"); | 95 | "\t\tlegacy - \"linux,phandle\" properties only\n" |
| 98 | fprintf(stderr, "\t\t\tenable or disable warnings and errors\n"); | 96 | "\t\tepapr - \"phandle\" properties only\n" |
| 99 | exit(3); | 97 | "\t\tboth - Both \"linux,phandle\" and \"phandle\" properties", |
| 100 | } | 98 | "\n\tEnable/disable warnings (prefix with \"no-\")", |
| 99 | "\n\tEnable/disable errors (prefix with \"no-\")", | ||
| 100 | "\n\tPrint this help and exit", | ||
| 101 | "\n\tPrint version and exit", | ||
| 102 | NULL, | ||
| 103 | }; | ||
| 101 | 104 | ||
| 102 | int main(int argc, char *argv[]) | 105 | int main(int argc, char *argv[]) |
| 103 | { | 106 | { |
| @@ -118,8 +121,7 @@ int main(int argc, char *argv[]) | |||
| 118 | minsize = 0; | 121 | minsize = 0; |
| 119 | padsize = 0; | 122 | padsize = 0; |
| 120 | 123 | ||
| 121 | while ((opt = getopt(argc, argv, "hI:O:o:V:d:R:S:p:fqb:i:vH:sW:E:")) | 124 | while ((opt = util_getopt_long()) != EOF) { |
| 122 | != EOF) { | ||
| 123 | switch (opt) { | 125 | switch (opt) { |
| 124 | case 'I': | 126 | case 'I': |
| 125 | inform = optarg; | 127 | inform = optarg; |
| @@ -158,8 +160,7 @@ int main(int argc, char *argv[]) | |||
| 158 | srcfile_add_search_path(optarg); | 160 | srcfile_add_search_path(optarg); |
| 159 | break; | 161 | break; |
| 160 | case 'v': | 162 | case 'v': |
| 161 | printf("Version: %s\n", DTC_VERSION); | 163 | util_version(); |
| 162 | exit(0); | ||
| 163 | case 'H': | 164 | case 'H': |
| 164 | if (streq(optarg, "legacy")) | 165 | if (streq(optarg, "legacy")) |
| 165 | phandle_format = PHANDLE_LEGACY; | 166 | phandle_format = PHANDLE_LEGACY; |
| @@ -185,13 +186,14 @@ int main(int argc, char *argv[]) | |||
| 185 | break; | 186 | break; |
| 186 | 187 | ||
| 187 | case 'h': | 188 | case 'h': |
| 189 | usage(NULL); | ||
| 188 | default: | 190 | default: |
| 189 | usage(); | 191 | usage("unknown option"); |
| 190 | } | 192 | } |
| 191 | } | 193 | } |
| 192 | 194 | ||
| 193 | if (argc > (optind+1)) | 195 | if (argc > (optind+1)) |
| 194 | usage(); | 196 | usage("missing files"); |
| 195 | else if (argc < (optind+1)) | 197 | else if (argc < (optind+1)) |
| 196 | arg = "-"; | 198 | arg = "-"; |
| 197 | else | 199 | else |
| @@ -201,9 +203,6 @@ int main(int argc, char *argv[]) | |||
| 201 | if (minsize && padsize) | 203 | if (minsize && padsize) |
| 202 | die("Can't set both -p and -S\n"); | 204 | die("Can't set both -p and -S\n"); |
| 203 | 205 | ||
| 204 | if (minsize) | ||
| 205 | fprintf(stderr, "DTC: Use of \"-S\" is deprecated; it will be removed soon, use \"-p\" instead\n"); | ||
| 206 | |||
| 207 | if (depname) { | 206 | if (depname) { |
| 208 | depfile = fopen(depname, "w"); | 207 | depfile = fopen(depname, "w"); |
| 209 | if (!depfile) | 208 | if (!depfile) |
diff --git a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h index 3e42a071070e..264a20cf66a8 100644 --- a/scripts/dtc/dtc.h +++ b/scripts/dtc/dtc.h | |||
| @@ -66,7 +66,6 @@ typedef uint32_t cell_t; | |||
| 66 | #define strneq(a, b, n) (strncmp((a), (b), (n)) == 0) | 66 | #define strneq(a, b, n) (strncmp((a), (b), (n)) == 0) |
| 67 | 67 | ||
| 68 | #define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) | 68 | #define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) |
| 69 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) | ||
| 70 | 69 | ||
| 71 | /* Data blobs */ | 70 | /* Data blobs */ |
| 72 | enum markertype { | 71 | enum markertype { |
diff --git a/scripts/dtc/srcpos.c b/scripts/dtc/srcpos.c index 246ab4bc0d9d..c20bc5315bc1 100644 --- a/scripts/dtc/srcpos.c +++ b/scripts/dtc/srcpos.c | |||
| @@ -297,9 +297,9 @@ srcpos_verror(struct srcpos *pos, char const *fmt, va_list va) | |||
| 297 | 297 | ||
| 298 | srcstr = srcpos_string(pos); | 298 | srcstr = srcpos_string(pos); |
| 299 | 299 | ||
| 300 | fprintf(stdout, "Error: %s ", srcstr); | 300 | fprintf(stderr, "Error: %s ", srcstr); |
| 301 | vfprintf(stdout, fmt, va); | 301 | vfprintf(stderr, fmt, va); |
| 302 | fprintf(stdout, "\n"); | 302 | fprintf(stderr, "\n"); |
| 303 | } | 303 | } |
| 304 | 304 | ||
| 305 | void | 305 | void |
diff --git a/scripts/dtc/update-dtc-source.sh b/scripts/dtc/update-dtc-source.sh new file mode 100755 index 000000000000..feb01ef26be4 --- /dev/null +++ b/scripts/dtc/update-dtc-source.sh | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | # Simple script to update the version of DTC carried by the Linux kernel | ||
| 3 | # | ||
| 4 | # This script assumes that the dtc and the linux git trees are in the | ||
| 5 | # same directory. After building dtc in the dtc directory, it copies the | ||
| 6 | # source files and generated source files into the scripts/dtc directory | ||
| 7 | # in the kernel and creates a git commit updating them to the new | ||
| 8 | # version. | ||
| 9 | # | ||
| 10 | # Usage: from the top level Linux source tree, run: | ||
| 11 | # $ ./scripts/dtc/update-dtc-source.sh | ||
| 12 | # | ||
| 13 | # The script will change into the dtc tree, build and test dtc, copy the | ||
| 14 | # relevant files into the kernel tree and create a git commit. The commit | ||
| 15 | # message will need to be modified to reflect the version of DTC being | ||
| 16 | # imported | ||
| 17 | # | ||
| 18 | # TODO: | ||
| 19 | # This script is pretty basic, but it is seldom used so a few manual tasks | ||
| 20 | # aren't a big deal. If anyone is interested in making it more robust, the | ||
| 21 | # the following would be nice: | ||
| 22 | # * Actually fail to complete if any testcase fails. | ||
| 23 | # - The dtc "make check" target needs to return a failure | ||
| 24 | # * Extract the version number from the dtc repo for the commit message | ||
| 25 | # * Build dtc in the kernel tree | ||
| 26 | # * run 'make check" on dtc built from the kernel tree | ||
| 27 | |||
| 28 | set -ev | ||
| 29 | |||
| 30 | DTC_UPSTREAM_PATH=`pwd`/../dtc | ||
| 31 | DTC_LINUX_PATH=`pwd`/scripts/dtc | ||
| 32 | |||
| 33 | DTC_SOURCE="checks.c data.c dtc.c dtc.h flattree.c fstree.c livetree.c srcpos.c \ | ||
| 34 | srcpos.h treesource.c util.c util.h version_gen.h Makefile.dtc \ | ||
| 35 | dtc-lexer.l dtc-parser.y" | ||
| 36 | DTC_GENERATED="dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h" | ||
| 37 | |||
| 38 | # Build DTC | ||
| 39 | cd $DTC_UPSTREAM_PATH | ||
| 40 | make clean | ||
| 41 | make check | ||
| 42 | |||
| 43 | # Copy the files into the Linux tree | ||
| 44 | cd $DTC_LINUX_PATH | ||
| 45 | for f in $DTC_SOURCE; do | ||
| 46 | cp ${DTC_UPSTREAM_PATH}/${f} ${f} | ||
| 47 | git add ${f} | ||
| 48 | done | ||
| 49 | for f in $DTC_GENERATED; do | ||
| 50 | cp ${DTC_UPSTREAM_PATH}/$f ${f}_shipped | ||
| 51 | git add ${f}_shipped | ||
| 52 | done | ||
| 53 | |||
| 54 | git commit -e -v -m "scripts/dtc: Update to upstream version [CHANGEME]" | ||
diff --git a/scripts/dtc/util.c b/scripts/dtc/util.c index 2422c34e11df..3055c16e980d 100644 --- a/scripts/dtc/util.c +++ b/scripts/dtc/util.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | #include "libfdt.h" | 35 | #include "libfdt.h" |
| 36 | #include "util.h" | 36 | #include "util.h" |
| 37 | #include "version_gen.h" | ||
| 37 | 38 | ||
| 38 | char *xstrdup(const char *s) | 39 | char *xstrdup(const char *s) |
| 39 | { | 40 | { |
| @@ -72,7 +73,7 @@ char *join_path(const char *path, const char *name) | |||
| 72 | int util_is_printable_string(const void *data, int len) | 73 | int util_is_printable_string(const void *data, int len) |
| 73 | { | 74 | { |
| 74 | const char *s = data; | 75 | const char *s = data; |
| 75 | const char *ss; | 76 | const char *ss, *se; |
| 76 | 77 | ||
| 77 | /* zero length is not */ | 78 | /* zero length is not */ |
| 78 | if (len == 0) | 79 | if (len == 0) |
| @@ -82,13 +83,19 @@ int util_is_printable_string(const void *data, int len) | |||
| 82 | if (s[len - 1] != '\0') | 83 | if (s[len - 1] != '\0') |
| 83 | return 0; | 84 | return 0; |
| 84 | 85 | ||
| 85 | ss = s; | 86 | se = s + len; |
| 86 | while (*s && isprint(*s)) | ||
| 87 | s++; | ||
| 88 | 87 | ||
| 89 | /* not zero, or not done yet */ | 88 | while (s < se) { |
| 90 | if (*s != '\0' || (s + 1 - ss) < len) | 89 | ss = s; |
| 91 | return 0; | 90 | while (s < se && *s && isprint(*s)) |
| 91 | s++; | ||
| 92 | |||
| 93 | /* not zero, or not done yet */ | ||
| 94 | if (*s != '\0' || s == ss) | ||
| 95 | return 0; | ||
| 96 | |||
| 97 | s++; | ||
| 98 | } | ||
| 92 | 99 | ||
| 93 | return 1; | 100 | return 1; |
| 94 | } | 101 | } |
| @@ -191,7 +198,7 @@ char get_escape_char(const char *s, int *i) | |||
| 191 | return val; | 198 | return val; |
| 192 | } | 199 | } |
| 193 | 200 | ||
| 194 | int utilfdt_read_err(const char *filename, char **buffp) | 201 | int utilfdt_read_err_len(const char *filename, char **buffp, off_t *len) |
| 195 | { | 202 | { |
| 196 | int fd = 0; /* assume stdin */ | 203 | int fd = 0; /* assume stdin */ |
| 197 | char *buf = NULL; | 204 | char *buf = NULL; |
| @@ -206,12 +213,12 @@ int utilfdt_read_err(const char *filename, char **buffp) | |||
| 206 | } | 213 | } |
| 207 | 214 | ||
| 208 | /* Loop until we have read everything */ | 215 | /* Loop until we have read everything */ |
| 209 | buf = malloc(bufsize); | 216 | buf = xmalloc(bufsize); |
| 210 | do { | 217 | do { |
| 211 | /* Expand the buffer to hold the next chunk */ | 218 | /* Expand the buffer to hold the next chunk */ |
| 212 | if (offset == bufsize) { | 219 | if (offset == bufsize) { |
| 213 | bufsize *= 2; | 220 | bufsize *= 2; |
| 214 | buf = realloc(buf, bufsize); | 221 | buf = xrealloc(buf, bufsize); |
| 215 | if (!buf) { | 222 | if (!buf) { |
| 216 | ret = ENOMEM; | 223 | ret = ENOMEM; |
| 217 | break; | 224 | break; |
| @@ -232,13 +239,20 @@ int utilfdt_read_err(const char *filename, char **buffp) | |||
| 232 | free(buf); | 239 | free(buf); |
| 233 | else | 240 | else |
| 234 | *buffp = buf; | 241 | *buffp = buf; |
| 242 | *len = bufsize; | ||
| 235 | return ret; | 243 | return ret; |
| 236 | } | 244 | } |
| 237 | 245 | ||
| 238 | char *utilfdt_read(const char *filename) | 246 | int utilfdt_read_err(const char *filename, char **buffp) |
| 247 | { | ||
| 248 | off_t len; | ||
| 249 | return utilfdt_read_err_len(filename, buffp, &len); | ||
| 250 | } | ||
| 251 | |||
| 252 | char *utilfdt_read_len(const char *filename, off_t *len) | ||
| 239 | { | 253 | { |
| 240 | char *buff; | 254 | char *buff; |
| 241 | int ret = utilfdt_read_err(filename, &buff); | 255 | int ret = utilfdt_read_err_len(filename, &buff, len); |
| 242 | 256 | ||
| 243 | if (ret) { | 257 | if (ret) { |
| 244 | fprintf(stderr, "Couldn't open blob from '%s': %s\n", filename, | 258 | fprintf(stderr, "Couldn't open blob from '%s': %s\n", filename, |
| @@ -249,6 +263,12 @@ char *utilfdt_read(const char *filename) | |||
| 249 | return buff; | 263 | return buff; |
| 250 | } | 264 | } |
| 251 | 265 | ||
| 266 | char *utilfdt_read(const char *filename) | ||
| 267 | { | ||
| 268 | off_t len; | ||
| 269 | return utilfdt_read_len(filename, &len); | ||
| 270 | } | ||
| 271 | |||
| 252 | int utilfdt_write_err(const char *filename, const void *blob) | 272 | int utilfdt_write_err(const char *filename, const void *blob) |
| 253 | { | 273 | { |
| 254 | int fd = 1; /* assume stdout */ | 274 | int fd = 1; /* assume stdout */ |
| @@ -329,3 +349,100 @@ int utilfdt_decode_type(const char *fmt, int *type, int *size) | |||
| 329 | return -1; | 349 | return -1; |
| 330 | return 0; | 350 | return 0; |
| 331 | } | 351 | } |
| 352 | |||
| 353 | void utilfdt_print_data(const char *data, int len) | ||
| 354 | { | ||
| 355 | int i; | ||
| 356 | const char *p = data; | ||
| 357 | const char *s; | ||
| 358 | |||
| 359 | /* no data, don't print */ | ||
| 360 | if (len == 0) | ||
| 361 | return; | ||
| 362 | |||
| 363 | if (util_is_printable_string(data, len)) { | ||
| 364 | printf(" = "); | ||
| 365 | |||
| 366 | s = data; | ||
| 367 | do { | ||
| 368 | printf("\"%s\"", s); | ||
| 369 | s += strlen(s) + 1; | ||
| 370 | if (s < data + len) | ||
| 371 | printf(", "); | ||
| 372 | } while (s < data + len); | ||
| 373 | |||
| 374 | } else if ((len % 4) == 0) { | ||
| 375 | const uint32_t *cell = (const uint32_t *)data; | ||
| 376 | |||
| 377 | printf(" = <"); | ||
| 378 | for (i = 0; i < len; i += 4) | ||
| 379 | printf("0x%08x%s", fdt32_to_cpu(cell[i]), | ||
| 380 | i < (len - 4) ? " " : ""); | ||
| 381 | printf(">"); | ||
| 382 | } else { | ||
| 383 | printf(" = ["); | ||
| 384 | for (i = 0; i < len; i++) | ||
| 385 | printf("%02x%s", *p++, i < len - 1 ? " " : ""); | ||
| 386 | printf("]"); | ||
| 387 | } | ||
| 388 | } | ||
| 389 | |||
| 390 | void util_version(void) | ||
| 391 | { | ||
| 392 | printf("Version: %s\n", DTC_VERSION); | ||
| 393 | exit(0); | ||
| 394 | } | ||
| 395 | |||
| 396 | void util_usage(const char *errmsg, const char *synopsis, | ||
| 397 | const char *short_opts, struct option const long_opts[], | ||
| 398 | const char * const opts_help[]) | ||
| 399 | { | ||
| 400 | FILE *fp = errmsg ? stderr : stdout; | ||
| 401 | const char a_arg[] = "<arg>"; | ||
| 402 | size_t a_arg_len = strlen(a_arg) + 1; | ||
| 403 | size_t i; | ||
| 404 | int optlen; | ||
| 405 | |||
| 406 | fprintf(fp, | ||
| 407 | "Usage: %s\n" | ||
| 408 | "\n" | ||
| 409 | "Options: -[%s]\n", synopsis, short_opts); | ||
| 410 | |||
| 411 | /* prescan the --long opt length to auto-align */ | ||
| 412 | optlen = 0; | ||
| 413 | for (i = 0; long_opts[i].name; ++i) { | ||
| 414 | /* +1 is for space between --opt and help text */ | ||
| 415 | int l = strlen(long_opts[i].name) + 1; | ||
| 416 | if (long_opts[i].has_arg == a_argument) | ||
| 417 | l += a_arg_len; | ||
| 418 | if (optlen < l) | ||
| 419 | optlen = l; | ||
| 420 | } | ||
| 421 | |||
| 422 | for (i = 0; long_opts[i].name; ++i) { | ||
| 423 | /* helps when adding new applets or options */ | ||
| 424 | assert(opts_help[i] != NULL); | ||
| 425 | |||
| 426 | /* first output the short flag if it has one */ | ||
| 427 | if (long_opts[i].val > '~') | ||
| 428 | fprintf(fp, " "); | ||
| 429 | else | ||
| 430 | fprintf(fp, " -%c, ", long_opts[i].val); | ||
| 431 | |||
| 432 | /* then the long flag */ | ||
| 433 | if (long_opts[i].has_arg == no_argument) | ||
| 434 | fprintf(fp, "--%-*s", optlen, long_opts[i].name); | ||
| 435 | else | ||
| 436 | fprintf(fp, "--%s %s%*s", long_opts[i].name, a_arg, | ||
| 437 | (int)(optlen - strlen(long_opts[i].name) - a_arg_len), ""); | ||
| 438 | |||
| 439 | /* finally the help text */ | ||
| 440 | fprintf(fp, "%s\n", opts_help[i]); | ||
| 441 | } | ||
| 442 | |||
| 443 | if (errmsg) { | ||
| 444 | fprintf(fp, "\nError: %s\n", errmsg); | ||
| 445 | exit(EXIT_FAILURE); | ||
| 446 | } else | ||
| 447 | exit(EXIT_SUCCESS); | ||
| 448 | } | ||
diff --git a/scripts/dtc/util.h b/scripts/dtc/util.h index c8eb45d9f04b..8f40b4499359 100644 --- a/scripts/dtc/util.h +++ b/scripts/dtc/util.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define _UTIL_H | 2 | #define _UTIL_H |
| 3 | 3 | ||
| 4 | #include <stdarg.h> | 4 | #include <stdarg.h> |
| 5 | #include <getopt.h> | ||
| 5 | 6 | ||
| 6 | /* | 7 | /* |
| 7 | * Copyright 2011 The Chromium Authors, All Rights Reserved. | 8 | * Copyright 2011 The Chromium Authors, All Rights Reserved. |
| @@ -23,7 +24,9 @@ | |||
| 23 | * USA | 24 | * USA |
| 24 | */ | 25 | */ |
| 25 | 26 | ||
| 26 | static inline void __attribute__((noreturn)) die(char * str, ...) | 27 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
| 28 | |||
| 29 | static inline void __attribute__((noreturn)) die(const char *str, ...) | ||
| 27 | { | 30 | { |
| 28 | va_list ap; | 31 | va_list ap; |
| 29 | 32 | ||
| @@ -57,12 +60,14 @@ extern char *xstrdup(const char *s); | |||
| 57 | extern char *join_path(const char *path, const char *name); | 60 | extern char *join_path(const char *path, const char *name); |
| 58 | 61 | ||
| 59 | /** | 62 | /** |
| 60 | * Check a string of a given length to see if it is all printable and | 63 | * Check a property of a given length to see if it is all printable and |
| 61 | * has a valid terminator. | 64 | * has a valid terminator. The property can contain either a single string, |
| 65 | * or multiple strings each of non-zero length. | ||
| 62 | * | 66 | * |
| 63 | * @param data The string to check | 67 | * @param data The string to check |
| 64 | * @param len The string length including terminator | 68 | * @param len The string length including terminator |
| 65 | * @return 1 if a valid printable string, 0 if not */ | 69 | * @return 1 if a valid printable string, 0 if not |
| 70 | */ | ||
| 66 | int util_is_printable_string(const void *data, int len); | 71 | int util_is_printable_string(const void *data, int len); |
| 67 | 72 | ||
| 68 | /* | 73 | /* |
| @@ -83,6 +88,13 @@ char get_escape_char(const char *s, int *i); | |||
| 83 | char *utilfdt_read(const char *filename); | 88 | char *utilfdt_read(const char *filename); |
| 84 | 89 | ||
| 85 | /** | 90 | /** |
| 91 | * Like utilfdt_read(), but also passes back the size of the file read. | ||
| 92 | * | ||
| 93 | * @param len If non-NULL, the amount of data we managed to read | ||
| 94 | */ | ||
| 95 | char *utilfdt_read_len(const char *filename, off_t *len); | ||
| 96 | |||
| 97 | /** | ||
| 86 | * Read a device tree file into a buffer. Does not report errors, but only | 98 | * Read a device tree file into a buffer. Does not report errors, but only |
| 87 | * returns them. The value returned can be passed to strerror() to obtain | 99 | * returns them. The value returned can be passed to strerror() to obtain |
| 88 | * an error message for the user. | 100 | * an error message for the user. |
| @@ -93,6 +105,12 @@ char *utilfdt_read(const char *filename); | |||
| 93 | */ | 105 | */ |
| 94 | int utilfdt_read_err(const char *filename, char **buffp); | 106 | int utilfdt_read_err(const char *filename, char **buffp); |
| 95 | 107 | ||
| 108 | /** | ||
| 109 | * Like utilfdt_read_err(), but also passes back the size of the file read. | ||
| 110 | * | ||
| 111 | * @param len If non-NULL, the amount of data we managed to read | ||
| 112 | */ | ||
| 113 | int utilfdt_read_err_len(const char *filename, char **buffp, off_t *len); | ||
| 96 | 114 | ||
| 97 | /** | 115 | /** |
| 98 | * Write a device tree buffer to a file. This will report any errors on | 116 | * Write a device tree buffer to a file. This will report any errors on |
| @@ -148,6 +166,85 @@ int utilfdt_decode_type(const char *fmt, int *type, int *size); | |||
| 148 | #define USAGE_TYPE_MSG \ | 166 | #define USAGE_TYPE_MSG \ |
| 149 | "<type>\ts=string, i=int, u=unsigned, x=hex\n" \ | 167 | "<type>\ts=string, i=int, u=unsigned, x=hex\n" \ |
| 150 | "\tOptional modifier prefix:\n" \ | 168 | "\tOptional modifier prefix:\n" \ |
| 151 | "\t\thh or b=byte, h=2 byte, l=4 byte (default)\n"; | 169 | "\t\thh or b=byte, h=2 byte, l=4 byte (default)"; |
| 170 | |||
| 171 | /** | ||
| 172 | * Print property data in a readable format to stdout | ||
| 173 | * | ||
| 174 | * Properties that look like strings will be printed as strings. Otherwise | ||
| 175 | * the data will be displayed either as cells (if len is a multiple of 4 | ||
| 176 | * bytes) or bytes. | ||
| 177 | * | ||
| 178 | * If len is 0 then this function does nothing. | ||
| 179 | * | ||
| 180 | * @param data Pointers to property data | ||
| 181 | * @param len Length of property data | ||
| 182 | */ | ||
| 183 | void utilfdt_print_data(const char *data, int len); | ||
| 184 | |||
| 185 | /** | ||
| 186 | * Show source version and exit | ||
| 187 | */ | ||
| 188 | void util_version(void) __attribute__((noreturn)); | ||
| 189 | |||
| 190 | /** | ||
| 191 | * Show usage and exit | ||
| 192 | * | ||
| 193 | * This helps standardize the output of various utils. You most likely want | ||
| 194 | * to use the usage() helper below rather than call this. | ||
| 195 | * | ||
| 196 | * @param errmsg If non-NULL, an error message to display | ||
| 197 | * @param synopsis The initial example usage text (and possible examples) | ||
| 198 | * @param short_opts The string of short options | ||
| 199 | * @param long_opts The structure of long options | ||
| 200 | * @param opts_help An array of help strings (should align with long_opts) | ||
| 201 | */ | ||
| 202 | void util_usage(const char *errmsg, const char *synopsis, | ||
| 203 | const char *short_opts, struct option const long_opts[], | ||
| 204 | const char * const opts_help[]) __attribute__((noreturn)); | ||
| 205 | |||
| 206 | /** | ||
| 207 | * Show usage and exit | ||
| 208 | * | ||
| 209 | * If you name all your usage variables with usage_xxx, then you can call this | ||
| 210 | * help macro rather than expanding all arguments yourself. | ||
| 211 | * | ||
| 212 | * @param errmsg If non-NULL, an error message to display | ||
| 213 | */ | ||
| 214 | #define usage(errmsg) \ | ||
| 215 | util_usage(errmsg, usage_synopsis, usage_short_opts, \ | ||
| 216 | usage_long_opts, usage_opts_help) | ||
| 217 | |||
| 218 | /** | ||
| 219 | * Call getopt_long() with standard options | ||
| 220 | * | ||
| 221 | * Since all util code runs getopt in the same way, provide a helper. | ||
| 222 | */ | ||
| 223 | #define util_getopt_long() getopt_long(argc, argv, usage_short_opts, \ | ||
| 224 | usage_long_opts, NULL) | ||
| 225 | |||
| 226 | /* Helper for aligning long_opts array */ | ||
| 227 | #define a_argument required_argument | ||
| 228 | |||
| 229 | /* Helper for usage_short_opts string constant */ | ||
| 230 | #define USAGE_COMMON_SHORT_OPTS "hV" | ||
| 231 | |||
| 232 | /* Helper for usage_long_opts option array */ | ||
| 233 | #define USAGE_COMMON_LONG_OPTS \ | ||
| 234 | {"help", no_argument, NULL, 'h'}, \ | ||
| 235 | {"version", no_argument, NULL, 'V'}, \ | ||
| 236 | {NULL, no_argument, NULL, 0x0} | ||
| 237 | |||
| 238 | /* Helper for usage_opts_help array */ | ||
| 239 | #define USAGE_COMMON_OPTS_HELP \ | ||
| 240 | "Print this help and exit", \ | ||
| 241 | "Print version and exit", \ | ||
| 242 | NULL | ||
| 243 | |||
| 244 | /* Helper for getopt case statements */ | ||
| 245 | #define case_USAGE_COMMON_FLAGS \ | ||
| 246 | case 'h': usage(NULL); \ | ||
| 247 | case 'V': util_version(); \ | ||
| 248 | case '?': usage("unknown option"); | ||
| 152 | 249 | ||
| 153 | #endif /* _UTIL_H */ | 250 | #endif /* _UTIL_H */ |
diff --git a/scripts/dtc/version_gen.h b/scripts/dtc/version_gen.h index 6158b867df99..54d4e904433a 100644 --- a/scripts/dtc/version_gen.h +++ b/scripts/dtc/version_gen.h | |||
| @@ -1 +1 @@ | |||
| #define DTC_VERSION "DTC 1.2.0-g37c0b6a0" | #define DTC_VERSION "DTC 1.4.0-dirty" | ||
