diff -rup binutils.orig/bfd/aoutx.h binutils-2.27/bfd/aoutx.h --- binutils.orig/bfd/aoutx.h 2017-03-24 13:50:55.358188013 +0000 +++ binutils-2.27/bfd/aoutx.h 2017-03-24 14:26:38.438542134 +0000 @@ -2807,9 +2807,17 @@ NAME (aout, find_nearest_line) (bfd *abf *filename_ptr = main_file_name; else { - sprintf (buf, "%s%s", directory_name, main_file_name); - *filename_ptr = buf; - buf += filelen + 1; + if (buf == NULL) + /* PR binutils/20891: In a corrupt input file both + main_file_name and directory_name can be empty... */ + * filename_ptr = NULL; + else + { + snprintf (buf, filelen + 1, "%s%s", directory_name, + main_file_name); + *filename_ptr = buf; + buf += filelen + 1; + } } } @@ -2818,6 +2826,13 @@ NAME (aout, find_nearest_line) (bfd *abf const char *function = func->name; char *colon; + if (buf == NULL) + { + /* PR binutils/20892: In a corrupt input file func can be empty. */ + * functionname_ptr = NULL; + return TRUE; + } + /* The caller expects a symbol name. We actually have a function name, without the leading underscore. Put the underscore back in, so that the caller gets a symbol name. */ diff -rup binutils.orig/bfd/compress.c binutils-2.27/bfd/compress.c --- binutils.orig/bfd/compress.c 2017-03-24 13:50:55.362187961 +0000 +++ binutils-2.27/bfd/compress.c 2017-03-24 14:17:49.075366778 +0000 @@ -292,7 +292,7 @@ bfd_get_full_section_contents (bfd *abfd SHF_COMPRESSED section. */ compression_header_size = 12; if (!decompress_contents (compressed_buffer + compression_header_size, - sec->compressed_size, p, sz)) + sec->compressed_size - compression_header_size, p, sz)) { bfd_set_error (bfd_error_bad_value); if (p != *ptr) diff -rup binutils.orig/bfd/peicode.h binutils-2.27/bfd/peicode.h --- binutils.orig/bfd/peicode.h 2017-03-24 13:50:55.374187806 +0000 +++ binutils-2.27/bfd/peicode.h 2017-03-24 14:22:36.326663483 +0000 @@ -1264,7 +1264,8 @@ pe_ILF_object_p (bfd * abfd) } symbol_name = (char *) ptr; - source_dll = symbol_name + strlen (symbol_name) + 1; + /* See PR 20905 for an example of where the strnlen is necessary. */ + source_dll = symbol_name + strnlen (symbol_name, size - 1) + 1; /* Verify that the strings are null terminated. */ if (ptr[size - 1] != 0 diff -rup binutils.orig/binutils/dwarf.c binutils-2.27/binutils/dwarf.c --- binutils.orig/binutils/dwarf.c 2017-03-24 13:50:55.381187716 +0000 +++ binutils-2.27/binutils/dwarf.c 2017-03-24 13:58:05.061648769 +0000 @@ -76,7 +76,6 @@ int dwarf_check = 0; as a zero-terminated list of section indexes comprising one set of debug sections from a .dwo file. */ -static int cu_tu_indexes_read = 0; static unsigned int *shndx_pool = NULL; static unsigned int shndx_pool_size = 0; static unsigned int shndx_pool_used = 0; @@ -99,7 +98,7 @@ static int tu_count = 0; static struct cu_tu_set *cu_sets = NULL; static struct cu_tu_set *tu_sets = NULL; -static void load_cu_tu_indexes (void *file); +static bfd_boolean load_cu_tu_indexes (void *); /* Values for do_debug_lines. */ #define FLAG_DEBUG_LINES_RAW 1 @@ -2713,7 +2712,7 @@ load_debug_info (void * file) return num_debug_info_entries; /* If this is a DWARF package file, load the CU and TU indexes. */ - load_cu_tu_indexes (file); + (void) load_cu_tu_indexes (file); if (load_debug_section (info, file) && process_debug_info (&debug_displays [info].section, file, abbrev, 1, 0)) @@ -7302,21 +7301,27 @@ process_cu_tu_index (struct dwarf_sectio section sets that we can use to associate a .debug_info.dwo section with its associated .debug_abbrev.dwo section in a .dwp file. */ -static void +static bfd_boolean load_cu_tu_indexes (void *file) { + static int cu_tu_indexes_read = -1; /* Tri-state variable. */ + /* If we have already loaded (or tried to load) the CU and TU indexes then do not bother to repeat the task. */ - if (cu_tu_indexes_read) - return; - - if (load_debug_section (dwp_cu_index, file)) - process_cu_tu_index (&debug_displays [dwp_cu_index].section, 0); + if (cu_tu_indexes_read == -1) + { + cu_tu_indexes_read = TRUE; + + if (load_debug_section (dwp_cu_index, file)) + if (! process_cu_tu_index (&debug_displays [dwp_cu_index].section, 0)) + cu_tu_indexes_read = FALSE; - if (load_debug_section (dwp_tu_index, file)) - process_cu_tu_index (&debug_displays [dwp_tu_index].section, 0); + if (load_debug_section (dwp_tu_index, file)) + if (! process_cu_tu_index (&debug_displays [dwp_tu_index].section, 0)) + cu_tu_indexes_read = FALSE; + } - cu_tu_indexes_read = 1; + return (bfd_boolean) cu_tu_indexes_read; } /* Find the set of sections that includes section SHNDX. */ @@ -7326,7 +7331,8 @@ find_cu_tu_set (void *file, unsigned int { unsigned int i; - load_cu_tu_indexes (file); + if (! load_cu_tu_indexes (file)) + return NULL; /* Find SHNDX in the shndx pool. */ for (i = 0; i < shndx_pool_used; i++) diff -rup binutils.orig/binutils/readelf.c binutils-2.27/binutils/readelf.c --- binutils.orig/binutils/readelf.c 2017-03-24 13:50:55.390187599 +0000 +++ binutils-2.27/binutils/readelf.c 2017-03-24 14:16:39.008271196 +0000 @@ -674,8 +674,14 @@ find_section_in_set (const char * name, if (set != NULL) { while ((i = *set++) > 0) - if (streq (SECTION_NAME (section_headers + i), name)) - return section_headers + i; + { + /* See PR 21156 for a reproducer. */ + if (i >= elf_header.e_shnum) + continue; /* FIXME: Should we issue an error message ? */ + + if (streq (SECTION_NAME (section_headers + i), name)) + return section_headers + i; + } } return find_section (name); @@ -11342,16 +11348,32 @@ process_syminfo (FILE * file ATTRIBUTE_U return 1; } +#define IN_RANGE(START,END,ADDR,OFF) \ + (((ADDR) >= (START)) && ((ADDR) + (OFF) < (END))) + /* Check to see if the given reloc needs to be handled in a target specific manner. If so then process the reloc and return TRUE otherwise return - FALSE. */ + FALSE. + + If called with reloc == NULL, then this is a signal that reloc processing + for the current section has finished, and any saved state should be + discarded. */ static bfd_boolean target_specific_reloc_handling (Elf_Internal_Rela * reloc, unsigned char * start, - Elf_Internal_Sym * symtab) + unsigned char * end, + Elf_Internal_Sym * symtab, + unsigned long num_syms) { - unsigned int reloc_type = get_reloc_type (reloc->r_info); + unsigned int reloc_type = 0; + unsigned long sym_index = 0; + + if (reloc) + { + reloc_type = get_reloc_type (reloc->r_info); + sym_index = get_reloc_symindex (reloc->r_info); + } switch (elf_header.e_machine) { @@ -11360,13 +11382,25 @@ target_specific_reloc_handling (Elf_Inte { static Elf_Internal_Sym * saved_sym = NULL; + if (reloc == NULL) + { + saved_sym = NULL; + return TRUE; + } + switch (reloc_type) { case 10: /* R_MSP430_SYM_DIFF */ if (uses_msp430x_relocs ()) break; + /* Fall through. */ case 21: /* R_MSP430X_SYM_DIFF */ - saved_sym = symtab + get_reloc_symindex (reloc->r_info); + /* PR 21139. */ + if (sym_index >= num_syms) + error (_("MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"), + sym_index); + else + saved_sym = symtab + sym_index; return TRUE; case 1: /* R_MSP430_32 or R_MSP430_ABS32 */ @@ -11388,13 +11422,24 @@ target_specific_reloc_handling (Elf_Inte handle_sym_diff: if (saved_sym != NULL) { + int reloc_size = reloc_type == 1 ? 4 : 2; bfd_vma value; - value = reloc->r_addend - + (symtab[get_reloc_symindex (reloc->r_info)].st_value - - saved_sym->st_value); + if (sym_index >= num_syms) + error (_("MSP430 reloc contains invalid symbol index %lu\n"), + sym_index); + else + { + value = reloc->r_addend + (symtab[sym_index].st_value + - saved_sym->st_value); - byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2); + if (IN_RANGE (start, end, start + reloc->r_offset, reloc_size)) + byte_put (start + reloc->r_offset, value, reloc_size); + else + /* PR 21137 */ + error (_("MSP430 sym diff reloc contains invalid offset: 0x%lx\n"), + (long) reloc->r_offset); + } saved_sym = NULL; return TRUE; @@ -11414,24 +11459,46 @@ target_specific_reloc_handling (Elf_Inte { static Elf_Internal_Sym * saved_sym = NULL; + if (reloc == NULL) + { + saved_sym = NULL; + return TRUE; + } + switch (reloc_type) { case 34: /* R_MN10300_ALIGN */ return TRUE; + case 33: /* R_MN10300_SYM_DIFF */ - saved_sym = symtab + get_reloc_symindex (reloc->r_info); + if (sym_index >= num_syms) + error (_("MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"), + sym_index); + else + saved_sym = symtab + sym_index; return TRUE; + case 1: /* R_MN10300_32 */ case 2: /* R_MN10300_16 */ if (saved_sym != NULL) { + int reloc_size = reloc_type == 1 ? 4 : 2; bfd_vma value; - value = reloc->r_addend - + (symtab[get_reloc_symindex (reloc->r_info)].st_value - - saved_sym->st_value); + if (sym_index >= num_syms) + error (_("MN10300 reloc contains invalid symbol index %lu\n"), + sym_index); + else + { + value = reloc->r_addend + (symtab[sym_index].st_value + - saved_sym->st_value); - byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2); + if (IN_RANGE (start, end, start + reloc->r_offset, reloc_size)) + byte_put (start + reloc->r_offset, value, reloc_size); + else + error (_("MN10300 sym diff reloc contains invalid offset: 0x%lx\n"), + (long) reloc->r_offset); + } saved_sym = NULL; return TRUE; @@ -11451,12 +11518,24 @@ target_specific_reloc_handling (Elf_Inte static bfd_vma saved_sym2 = 0; static bfd_vma value; + if (reloc == NULL) + { + saved_sym1 = saved_sym2 = 0; + return TRUE; + } + switch (reloc_type) { case 0x80: /* R_RL78_SYM. */ saved_sym1 = saved_sym2; - saved_sym2 = symtab[get_reloc_symindex (reloc->r_info)].st_value; - saved_sym2 += reloc->r_addend; + if (sym_index >= num_syms) + error (_("RL78_SYM reloc contains invalid symbol index %lu\n"), + sym_index); + else + { + saved_sym2 = symtab[sym_index].st_value; + saved_sym2 += reloc->r_addend; + } return TRUE; case 0x83: /* R_RL78_OPsub. */ @@ -11466,12 +11545,20 @@ target_specific_reloc_handling (Elf_Inte break; case 0x41: /* R_RL78_ABS32. */ - byte_put (start + reloc->r_offset, value, 4); + if (IN_RANGE (start, end, start + reloc->r_offset, 4)) + byte_put (start + reloc->r_offset, value, 4); + else + error (_("RL78 sym diff reloc contains invalid offset: 0x%lx\n"), + (long) reloc->r_offset); value = 0; return TRUE; case 0x43: /* R_RL78_ABS16. */ - byte_put (start + reloc->r_offset, value, 2); + if (IN_RANGE (start, end, start + reloc->r_offset, 2)) + byte_put (start + reloc->r_offset, value, 2); + else + error (_("RL78 sym diff reloc contains invalid offset: 0x%lx\n"), + (long) reloc->r_offset); value = 0; return TRUE; @@ -12078,7 +12165,7 @@ apply_relocations (void * reloc_type = get_reloc_type (rp->r_info); - if (target_specific_reloc_handling (rp, start, symtab)) + if (target_specific_reloc_handling (rp, start, end, symtab, num_syms)) continue; else if (is_none_reloc (reloc_type)) continue; @@ -12174,6 +12261,9 @@ apply_relocations (void * } free (symtab); + /* Let the target specific reloc processing code know that + we have finished with these relocs. */ + target_specific_reloc_handling (NULL, NULL, NULL, NULL, 0); if (relocs_return) { @@ -12471,10 +12561,18 @@ dump_section_as_bytes (Elf_Internal_Shdr new_size -= 12; } - if (uncompressed_size - && uncompress_section_contents (& start, uncompressed_size, - & new_size)) - section_size = new_size; + if (uncompressed_size) + { + if (uncompress_section_contents (& start, uncompressed_size, + & new_size)) + section_size = new_size; + else + { + error (_("Unable to decompress section %s\n"), + printable_section_name (section)); + return; + } + } } if (relocate) diff -rup binutils.orig/binutils/stabs.c binutils-2.27/binutils/stabs.c --- binutils.orig/binutils/stabs.c 2017-03-24 13:50:55.386187651 +0000 +++ binutils-2.27/binutils/stabs.c 2017-03-24 14:14:20.823055085 +0000 @@ -232,6 +232,10 @@ parse_number (const char **pp, bfd_boole orig = *pp; + /* Stop early if we are passed an empty string. */ + if (*orig == 0) + return (bfd_vma) 0; + errno = 0; ul = strtoul (*pp, (char **) pp, 0); if (ul + 1 != 0 || errno == 0) @@ -1975,9 +1979,17 @@ parse_stab_enum_type (void *dhandle, con bfd_signed_vma val; p = *pp; - while (*p != ':') + while (*p != ':' && *p != 0) ++p; + if (*p == 0) + { + bad_stab (orig); + free (names); + free (values); + return DEBUG_TYPE_NULL; + } + name = savestring (*pp, p - *pp); *pp = p + 1; diff -rup binutils.orig/gas/app.c binutils-2.27/gas/app.c --- binutils.orig/gas/app.c 2017-03-24 13:50:55.395187534 +0000 +++ binutils-2.27/gas/app.c 2017-03-24 13:52:02.141327121 +0000 @@ -1187,7 +1187,7 @@ do_scrub_chars (size_t (*get) (char *, s state = -2; break; } - else + else if (ch2 != EOF) { UNGET (ch2); } diff -rup binutils.orig/ld/ldlex.c binutils-2.27/ld/ldlex.c --- binutils.orig/ld/ldlex.c 2017-03-24 13:50:55.613184724 +0000 +++ binutils-2.27/ld/ldlex.c 2017-03-24 14:20:47.319068827 +0000 @@ -1,5 +1,5 @@ -#line 3 "ldlex.c" +#line 3 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" #define YY_INT_ALIGNED short int @@ -7,8 +7,8 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 0 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -46,7 +46,6 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; -typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -54,7 +53,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -85,6 +83,8 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ #ifdef __cplusplus @@ -141,7 +141,15 @@ typedef unsigned int flex_uint32_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else #define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -167,13 +175,14 @@ extern FILE *yyin, *yyout; #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ + yy_size_t yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ @@ -343,11 +352,17 @@ extern int yylineno; int yylineno = 1; extern char *yytext; +#ifdef yytext_ptr +#undef yytext_ptr +#endif #define yytext_ptr yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); +#if defined(__GNUC__) && __GNUC__ >= 3 +__attribute__((__noreturn__)) +#endif static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the @@ -355,7 +370,7 @@ static void yy_fatal_error (yyconst char */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ - yyleng = (yy_size_t) (yy_cp - yy_bp); \ + yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; @@ -568,7 +583,7 @@ static yyconst flex_int16_t yy_accept[17 174, 84, 84, 0 } ; -static yyconst flex_int32_t yy_ec[256] = +static yyconst YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, @@ -600,7 +615,7 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[83] = +static yyconst YY_CHAR yy_meta[83] = { 0, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 3, 5, 6, 7, 8, 9, 10, 10, 10, @@ -613,7 +628,7 @@ static yyconst flex_int32_t yy_meta[83] 1, 9 } ; -static yyconst flex_int16_t yy_base[1807] = +static yyconst flex_uint16_t yy_base[1807] = { 0, 0, 0, 0, 0, 82, 163, 244, 0, 326, 0, 408, 489, 570, 0, 112, 114, 652, 734, 816, 898, @@ -1019,7 +1034,7 @@ static yyconst flex_int16_t yy_def[1807] 1774, 1774, 1774, 1774, 1774, 1774 } ; -static yyconst flex_int16_t yy_nxt[2940] = +static yyconst flex_uint16_t yy_nxt[2940] = { 0, 23, 24, 25, 26, 27, 23, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 40, @@ -1687,8 +1702,8 @@ int yy_flex_debug = 0; #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "ldlex.l" -#line 4 "ldlex.l" +#line 1 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" +#line 4 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" /* Copyright (C) 1991-2016 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. @@ -1788,7 +1803,7 @@ int yywrap (void) { return 1; } -#line 1792 "ldlex.c" +#line 1807 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" #define INITIAL 0 #define SCRIPT 1 @@ -1830,11 +1845,11 @@ void yyset_extra (YY_EXTRA_TYPE user_def FILE *yyget_in (void ); -void yyset_in (FILE * in_str ); +void yyset_in (FILE * _in_str ); FILE *yyget_out (void ); -void yyset_out (FILE * out_str ); +void yyset_out (FILE * _out_str ); yy_size_t yyget_leng (void ); @@ -1842,7 +1857,7 @@ char *yyget_text (void ); int yyget_lineno (void ); -void yyset_lineno (int line_number ); +void yyset_lineno (int _line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1856,6 +1871,10 @@ extern int yywrap (void ); #endif #endif +#ifndef YY_NO_UNPUT + +#endif + #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif @@ -1876,7 +1895,12 @@ static int input (void ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else #define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1884,7 +1908,7 @@ static int input (void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO fwrite( yytext, yyleng, 1, yyout ) +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -1895,7 +1919,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - yy_size_t n; \ + size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -1963,7 +1987,7 @@ extern int yylex (void); /* Code executed at the end of each rule. */ #ifndef YY_BREAK -#define YY_BREAK break; +#define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ @@ -1973,31 +1997,10 @@ extern int yylex (void); */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; -#line 121 "ldlex.l" - - - if (parser_input != input_selected) - { - /* The first token of the input determines the initial parser state. */ - input_type t = parser_input; - parser_input = input_selected; - switch (t) - { - case input_script: return INPUT_SCRIPT; break; - case input_mri_script: return INPUT_MRI_SCRIPT; break; - case input_version_script: return INPUT_VERSION_SCRIPT; break; - case input_dynamic_list: return INPUT_DYNAMIC_LIST; break; - case input_defsym: return INPUT_DEFSYM; break; - default: abort (); - } - } - -#line 2000 "ldlex.c" - if ( !(yy_init) ) { (yy_init) = 1; @@ -2024,7 +2027,29 @@ YY_DECL yy_load_buffer_state( ); } - while ( 1 ) /* loops until end-of-file is reached */ + { +#line 121 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + + + if (parser_input != input_selected) + { + /* The first token of the input determines the initial parser state. */ + input_type t = parser_input; + parser_input = input_selected; + switch (t) + { + case input_script: return INPUT_SCRIPT; break; + case input_mri_script: return INPUT_MRI_SCRIPT; break; + case input_version_script: return INPUT_VERSION_SCRIPT; break; + case input_dynamic_list: return INPUT_DYNAMIC_LIST; break; + case input_defsym: return INPUT_DEFSYM; break; + default: abort (); + } + } + +#line 2051 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); @@ -2040,7 +2065,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -2081,32 +2106,32 @@ do_action: /* This label is used only to case 1: YY_RULE_SETUP -#line 139 "ldlex.l" +#line 139 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { comment (); } YY_BREAK case 2: YY_RULE_SETUP -#line 142 "ldlex.l" +#line 142 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('-');} YY_BREAK case 3: YY_RULE_SETUP -#line 143 "ldlex.l" +#line 143 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('+');} YY_BREAK case 4: YY_RULE_SETUP -#line 144 "ldlex.l" +#line 144 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext); return NAME; } YY_BREAK case 5: YY_RULE_SETUP -#line 145 "ldlex.l" +#line 145 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('='); } YY_BREAK case 6: YY_RULE_SETUP -#line 147 "ldlex.l" +#line 147 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.integer = bfd_scan_vma (yytext + 1, 0, 16); yylval.bigint.str = NULL; @@ -2115,7 +2140,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 153 "ldlex.l" +#line 153 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { int ibase ; switch (yytext[yyleng - 1]) { @@ -2144,7 +2169,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 178 "ldlex.l" +#line 178 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { char *s = yytext; int ibase = 0; @@ -2177,829 +2202,829 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 207 "ldlex.l" +#line 207 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(']');} YY_BREAK case 10: YY_RULE_SETUP -#line 208 "ldlex.l" +#line 208 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('[');} YY_BREAK case 11: YY_RULE_SETUP -#line 209 "ldlex.l" +#line 209 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LSHIFTEQ);} YY_BREAK case 12: YY_RULE_SETUP -#line 210 "ldlex.l" +#line 210 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(RSHIFTEQ);} YY_BREAK case 13: YY_RULE_SETUP -#line 211 "ldlex.l" +#line 211 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(OROR);} YY_BREAK case 14: YY_RULE_SETUP -#line 212 "ldlex.l" +#line 212 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(EQ);} YY_BREAK case 15: YY_RULE_SETUP -#line 213 "ldlex.l" +#line 213 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NE);} YY_BREAK case 16: YY_RULE_SETUP -#line 214 "ldlex.l" +#line 214 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(GE);} YY_BREAK case 17: YY_RULE_SETUP -#line 215 "ldlex.l" +#line 215 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LE);} YY_BREAK case 18: YY_RULE_SETUP -#line 216 "ldlex.l" +#line 216 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LSHIFT);} YY_BREAK case 19: YY_RULE_SETUP -#line 217 "ldlex.l" +#line 217 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(RSHIFT);} YY_BREAK case 20: YY_RULE_SETUP -#line 218 "ldlex.l" +#line 218 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(PLUSEQ);} YY_BREAK case 21: YY_RULE_SETUP -#line 219 "ldlex.l" +#line 219 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(MINUSEQ);} YY_BREAK case 22: YY_RULE_SETUP -#line 220 "ldlex.l" +#line 220 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(MULTEQ);} YY_BREAK case 23: YY_RULE_SETUP -#line 221 "ldlex.l" +#line 221 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(DIVEQ);} YY_BREAK case 24: YY_RULE_SETUP -#line 222 "ldlex.l" +#line 222 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ANDEQ);} YY_BREAK case 25: YY_RULE_SETUP -#line 223 "ldlex.l" +#line 223 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(OREQ);} YY_BREAK case 26: YY_RULE_SETUP -#line 224 "ldlex.l" +#line 224 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ANDAND);} YY_BREAK case 27: YY_RULE_SETUP -#line 225 "ldlex.l" +#line 225 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('>');} YY_BREAK case 28: YY_RULE_SETUP -#line 226 "ldlex.l" +#line 226 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(',');} YY_BREAK case 29: YY_RULE_SETUP -#line 227 "ldlex.l" +#line 227 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('&');} YY_BREAK case 30: YY_RULE_SETUP -#line 228 "ldlex.l" +#line 228 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('|');} YY_BREAK case 31: YY_RULE_SETUP -#line 229 "ldlex.l" +#line 229 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('~');} YY_BREAK case 32: YY_RULE_SETUP -#line 230 "ldlex.l" +#line 230 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('!');} YY_BREAK case 33: YY_RULE_SETUP -#line 231 "ldlex.l" +#line 231 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('?');} YY_BREAK case 34: YY_RULE_SETUP -#line 232 "ldlex.l" +#line 232 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('*');} YY_BREAK case 35: YY_RULE_SETUP -#line 233 "ldlex.l" +#line 233 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('+');} YY_BREAK case 36: YY_RULE_SETUP -#line 234 "ldlex.l" +#line 234 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('-');} YY_BREAK case 37: YY_RULE_SETUP -#line 235 "ldlex.l" +#line 235 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('/');} YY_BREAK case 38: YY_RULE_SETUP -#line 236 "ldlex.l" +#line 236 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('%');} YY_BREAK case 39: YY_RULE_SETUP -#line 237 "ldlex.l" +#line 237 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('<');} YY_BREAK case 40: YY_RULE_SETUP -#line 238 "ldlex.l" +#line 238 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('=');} YY_BREAK case 41: YY_RULE_SETUP -#line 239 "ldlex.l" +#line 239 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('}') ; } YY_BREAK case 42: YY_RULE_SETUP -#line 240 "ldlex.l" +#line 240 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('{'); } YY_BREAK case 43: YY_RULE_SETUP -#line 241 "ldlex.l" +#line 241 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(')');} YY_BREAK case 44: YY_RULE_SETUP -#line 242 "ldlex.l" +#line 242 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN('(');} YY_BREAK case 45: YY_RULE_SETUP -#line 243 "ldlex.l" +#line 243 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(':'); } YY_BREAK case 46: YY_RULE_SETUP -#line 244 "ldlex.l" +#line 244 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(';');} YY_BREAK case 47: YY_RULE_SETUP -#line 245 "ldlex.l" +#line 245 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(MEMORY);} YY_BREAK case 48: YY_RULE_SETUP -#line 246 "ldlex.l" +#line 246 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(REGION_ALIAS);} YY_BREAK case 49: YY_RULE_SETUP -#line 247 "ldlex.l" +#line 247 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LD_FEATURE);} YY_BREAK case 50: YY_RULE_SETUP -#line 248 "ldlex.l" +#line 248 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ORIGIN);} YY_BREAK case 51: YY_RULE_SETUP -#line 249 "ldlex.l" +#line 249 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(VERSIONK);} YY_BREAK case 52: YY_RULE_SETUP -#line 250 "ldlex.l" +#line 250 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(BLOCK);} YY_BREAK case 53: YY_RULE_SETUP -#line 251 "ldlex.l" +#line 251 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(BIND);} YY_BREAK case 54: YY_RULE_SETUP -#line 252 "ldlex.l" +#line 252 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LENGTH);} YY_BREAK case 55: YY_RULE_SETUP -#line 253 "ldlex.l" +#line 253 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGN_K);} YY_BREAK case 56: YY_RULE_SETUP -#line 254 "ldlex.l" +#line 254 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(DATA_SEGMENT_ALIGN);} YY_BREAK case 57: YY_RULE_SETUP -#line 255 "ldlex.l" +#line 255 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(DATA_SEGMENT_RELRO_END);} YY_BREAK case 58: YY_RULE_SETUP -#line 256 "ldlex.l" +#line 256 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(DATA_SEGMENT_END);} YY_BREAK case 59: YY_RULE_SETUP -#line 257 "ldlex.l" +#line 257 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ADDR);} YY_BREAK case 60: YY_RULE_SETUP -#line 258 "ldlex.l" +#line 258 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LOADADDR);} YY_BREAK case 61: YY_RULE_SETUP -#line 259 "ldlex.l" +#line 259 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGNOF); } YY_BREAK case 62: YY_RULE_SETUP -#line 260 "ldlex.l" +#line 260 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(MAX_K); } YY_BREAK case 63: YY_RULE_SETUP -#line 261 "ldlex.l" +#line 261 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(MIN_K); } YY_BREAK case 64: YY_RULE_SETUP -#line 262 "ldlex.l" +#line 262 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LOG2CEIL); } YY_BREAK case 65: YY_RULE_SETUP -#line 263 "ldlex.l" +#line 263 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ASSERT_K); } YY_BREAK case 66: YY_RULE_SETUP -#line 264 "ldlex.l" +#line 264 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ENTRY);} YY_BREAK case 67: YY_RULE_SETUP -#line 265 "ldlex.l" +#line 265 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(EXTERN);} YY_BREAK case 68: YY_RULE_SETUP -#line 266 "ldlex.l" +#line 266 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NEXT);} YY_BREAK case 69: YY_RULE_SETUP -#line 267 "ldlex.l" +#line 267 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SIZEOF_HEADERS);} YY_BREAK case 70: YY_RULE_SETUP -#line 268 "ldlex.l" +#line 268 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SIZEOF_HEADERS);} YY_BREAK case 71: YY_RULE_SETUP -#line 269 "ldlex.l" +#line 269 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SEGMENT_START);} YY_BREAK case 72: YY_RULE_SETUP -#line 270 "ldlex.l" +#line 270 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(MAP);} YY_BREAK case 73: YY_RULE_SETUP -#line 271 "ldlex.l" +#line 271 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SIZEOF);} YY_BREAK case 74: YY_RULE_SETUP -#line 272 "ldlex.l" +#line 272 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(TARGET_K);} YY_BREAK case 75: YY_RULE_SETUP -#line 273 "ldlex.l" +#line 273 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SEARCH_DIR);} YY_BREAK case 76: YY_RULE_SETUP -#line 274 "ldlex.l" +#line 274 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(OUTPUT);} YY_BREAK case 77: YY_RULE_SETUP -#line 275 "ldlex.l" +#line 275 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(INPUT);} YY_BREAK case 78: YY_RULE_SETUP -#line 276 "ldlex.l" +#line 276 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(GROUP);} YY_BREAK case 79: YY_RULE_SETUP -#line 277 "ldlex.l" +#line 277 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(AS_NEEDED);} YY_BREAK case 80: YY_RULE_SETUP -#line 278 "ldlex.l" +#line 278 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(DEFINED);} YY_BREAK case 81: YY_RULE_SETUP -#line 279 "ldlex.l" +#line 279 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(CREATE_OBJECT_SYMBOLS);} YY_BREAK case 82: YY_RULE_SETUP -#line 280 "ldlex.l" +#line 280 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( CONSTRUCTORS);} YY_BREAK case 83: YY_RULE_SETUP -#line 281 "ldlex.l" +#line 281 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(FORCE_COMMON_ALLOCATION);} YY_BREAK case 84: YY_RULE_SETUP -#line 282 "ldlex.l" +#line 282 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(INHIBIT_COMMON_ALLOCATION);} YY_BREAK case 85: YY_RULE_SETUP -#line 283 "ldlex.l" +#line 283 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SECTIONS);} YY_BREAK case 86: YY_RULE_SETUP -#line 284 "ldlex.l" +#line 284 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(INSERT_K);} YY_BREAK case 87: YY_RULE_SETUP -#line 285 "ldlex.l" +#line 285 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(AFTER);} YY_BREAK case 88: YY_RULE_SETUP -#line 286 "ldlex.l" +#line 286 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(BEFORE);} YY_BREAK case 89: YY_RULE_SETUP -#line 287 "ldlex.l" +#line 287 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(FILL);} YY_BREAK case 90: YY_RULE_SETUP -#line 288 "ldlex.l" +#line 288 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(STARTUP);} YY_BREAK case 91: YY_RULE_SETUP -#line 289 "ldlex.l" +#line 289 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(OUTPUT_FORMAT);} YY_BREAK case 92: YY_RULE_SETUP -#line 290 "ldlex.l" +#line 290 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( OUTPUT_ARCH);} YY_BREAK case 93: YY_RULE_SETUP -#line 291 "ldlex.l" +#line 291 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(HLL);} YY_BREAK case 94: YY_RULE_SETUP -#line 292 "ldlex.l" +#line 292 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SYSLIB);} YY_BREAK case 95: YY_RULE_SETUP -#line 293 "ldlex.l" +#line 293 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(FLOAT);} YY_BREAK case 96: YY_RULE_SETUP -#line 294 "ldlex.l" +#line 294 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( QUAD);} YY_BREAK case 97: YY_RULE_SETUP -#line 295 "ldlex.l" +#line 295 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( SQUAD);} YY_BREAK case 98: YY_RULE_SETUP -#line 296 "ldlex.l" +#line 296 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( LONG);} YY_BREAK case 99: YY_RULE_SETUP -#line 297 "ldlex.l" +#line 297 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( SHORT);} YY_BREAK case 100: YY_RULE_SETUP -#line 298 "ldlex.l" +#line 298 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( BYTE);} YY_BREAK case 101: YY_RULE_SETUP -#line 299 "ldlex.l" +#line 299 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NOFLOAT);} YY_BREAK case 102: YY_RULE_SETUP -#line 300 "ldlex.l" +#line 300 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NOCROSSREFS);} YY_BREAK case 103: YY_RULE_SETUP -#line 301 "ldlex.l" +#line 301 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NOCROSSREFS_TO);} YY_BREAK case 104: YY_RULE_SETUP -#line 302 "ldlex.l" +#line 302 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(OVERLAY); } YY_BREAK case 105: YY_RULE_SETUP -#line 303 "ldlex.l" +#line 303 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SORT_BY_NAME); } YY_BREAK case 106: YY_RULE_SETUP -#line 304 "ldlex.l" +#line 304 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SORT_BY_ALIGNMENT); } YY_BREAK case 107: YY_RULE_SETUP -#line 305 "ldlex.l" +#line 305 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SORT_BY_NAME); } YY_BREAK case 108: YY_RULE_SETUP -#line 306 "ldlex.l" +#line 306 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SORT_BY_INIT_PRIORITY); } YY_BREAK case 109: YY_RULE_SETUP -#line 307 "ldlex.l" +#line 307 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SORT_NONE); } YY_BREAK case 110: YY_RULE_SETUP -#line 308 "ldlex.l" +#line 308 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NOLOAD);} YY_BREAK case 111: YY_RULE_SETUP -#line 309 "ldlex.l" +#line 309 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(DSECT);} YY_BREAK case 112: YY_RULE_SETUP -#line 310 "ldlex.l" +#line 310 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(COPY);} YY_BREAK case 113: YY_RULE_SETUP -#line 311 "ldlex.l" +#line 311 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(INFO);} YY_BREAK case 114: YY_RULE_SETUP -#line 312 "ldlex.l" +#line 312 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(OVERLAY);} YY_BREAK case 115: YY_RULE_SETUP -#line 313 "ldlex.l" +#line 313 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ONLY_IF_RO); } YY_BREAK case 116: YY_RULE_SETUP -#line 314 "ldlex.l" +#line 314 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ONLY_IF_RW); } YY_BREAK case 117: YY_RULE_SETUP -#line 315 "ldlex.l" +#line 315 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SPECIAL); } YY_BREAK case 118: YY_RULE_SETUP -#line 316 "ldlex.l" +#line 316 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ORIGIN);} YY_BREAK case 119: YY_RULE_SETUP -#line 317 "ldlex.l" +#line 317 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ORIGIN);} YY_BREAK case 120: YY_RULE_SETUP -#line 318 "ldlex.l" +#line 318 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( LENGTH);} YY_BREAK case 121: YY_RULE_SETUP -#line 319 "ldlex.l" +#line 319 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN( LENGTH);} YY_BREAK case 122: YY_RULE_SETUP -#line 320 "ldlex.l" +#line 320 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(INPUT_SECTION_FLAGS); } YY_BREAK case 123: YY_RULE_SETUP -#line 321 "ldlex.l" +#line 321 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(INCLUDE);} YY_BREAK case 124: YY_RULE_SETUP -#line 322 "ldlex.l" +#line 322 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN (PHDRS); } YY_BREAK case 125: YY_RULE_SETUP -#line 323 "ldlex.l" +#line 323 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(AT);} YY_BREAK case 126: YY_RULE_SETUP -#line 324 "ldlex.l" +#line 324 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGN_WITH_INPUT);} YY_BREAK case 127: YY_RULE_SETUP -#line 325 "ldlex.l" +#line 325 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SUBALIGN);} YY_BREAK case 128: YY_RULE_SETUP -#line 326 "ldlex.l" +#line 326 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(HIDDEN); } YY_BREAK case 129: YY_RULE_SETUP -#line 327 "ldlex.l" +#line 327 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(PROVIDE); } YY_BREAK case 130: YY_RULE_SETUP -#line 328 "ldlex.l" +#line 328 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(PROVIDE_HIDDEN); } YY_BREAK case 131: YY_RULE_SETUP -#line 329 "ldlex.l" +#line 329 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(KEEP); } YY_BREAK case 132: YY_RULE_SETUP -#line 330 "ldlex.l" +#line 330 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(EXCLUDE_FILE); } YY_BREAK case 133: YY_RULE_SETUP -#line 331 "ldlex.l" +#line 331 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(CONSTANT);} YY_BREAK case 134: /* rule 134 can match eol */ YY_RULE_SETUP -#line 332 "ldlex.l" +#line 332 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { ++ lineno; } YY_BREAK case 135: /* rule 135 can match eol */ YY_RULE_SETUP -#line 333 "ldlex.l" +#line 333 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { ++ lineno; RTOKEN(NEWLINE); } YY_BREAK case 136: YY_RULE_SETUP -#line 334 "ldlex.l" +#line 334 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Mri comment line */ } YY_BREAK case 137: YY_RULE_SETUP -#line 335 "ldlex.l" +#line 335 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Mri comment line */ } YY_BREAK case 138: YY_RULE_SETUP -#line 336 "ldlex.l" +#line 336 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ENDWORD); } YY_BREAK case 139: YY_RULE_SETUP -#line 337 "ldlex.l" +#line 337 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGNMOD);} YY_BREAK case 140: YY_RULE_SETUP -#line 338 "ldlex.l" +#line 338 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGN_K);} YY_BREAK case 141: YY_RULE_SETUP -#line 339 "ldlex.l" +#line 339 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(CHIP); } YY_BREAK case 142: YY_RULE_SETUP -#line 340 "ldlex.l" +#line 340 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(BASE); } YY_BREAK case 143: YY_RULE_SETUP -#line 341 "ldlex.l" +#line 341 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIAS); } YY_BREAK case 144: YY_RULE_SETUP -#line 342 "ldlex.l" +#line 342 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(TRUNCATE); } YY_BREAK case 145: YY_RULE_SETUP -#line 343 "ldlex.l" +#line 343 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LOAD); } YY_BREAK case 146: YY_RULE_SETUP -#line 344 "ldlex.l" +#line 344 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(PUBLIC); } YY_BREAK case 147: YY_RULE_SETUP -#line 345 "ldlex.l" +#line 345 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ORDER); } YY_BREAK case 148: YY_RULE_SETUP -#line 346 "ldlex.l" +#line 346 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NAMEWORD); } YY_BREAK case 149: YY_RULE_SETUP -#line 347 "ldlex.l" +#line 347 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(FORMAT); } YY_BREAK case 150: YY_RULE_SETUP -#line 348 "ldlex.l" +#line 348 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(CASE); } YY_BREAK case 151: YY_RULE_SETUP -#line 349 "ldlex.l" +#line 349 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(START); } YY_BREAK case 152: YY_RULE_SETUP -#line 350 "ldlex.l" +#line 350 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LIST); /* LIST and ignore to end of line */ } YY_BREAK case 153: YY_RULE_SETUP -#line 351 "ldlex.l" +#line 351 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SECT); } YY_BREAK case 154: YY_RULE_SETUP -#line 352 "ldlex.l" +#line 352 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ABSOLUTE); } YY_BREAK case 155: YY_RULE_SETUP -#line 353 "ldlex.l" +#line 353 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ENDWORD); } YY_BREAK case 156: YY_RULE_SETUP -#line 354 "ldlex.l" +#line 354 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGNMOD);} YY_BREAK case 157: YY_RULE_SETUP -#line 355 "ldlex.l" +#line 355 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIGN_K);} YY_BREAK case 158: YY_RULE_SETUP -#line 356 "ldlex.l" +#line 356 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(CHIP); } YY_BREAK case 159: YY_RULE_SETUP -#line 357 "ldlex.l" +#line 357 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(BASE); } YY_BREAK case 160: YY_RULE_SETUP -#line 358 "ldlex.l" +#line 358 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ALIAS); } YY_BREAK case 161: YY_RULE_SETUP -#line 359 "ldlex.l" +#line 359 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(TRUNCATE); } YY_BREAK case 162: YY_RULE_SETUP -#line 360 "ldlex.l" +#line 360 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LOAD); } YY_BREAK case 163: YY_RULE_SETUP -#line 361 "ldlex.l" +#line 361 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(PUBLIC); } YY_BREAK case 164: YY_RULE_SETUP -#line 362 "ldlex.l" +#line 362 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ORDER); } YY_BREAK case 165: YY_RULE_SETUP -#line 363 "ldlex.l" +#line 363 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(NAMEWORD); } YY_BREAK case 166: YY_RULE_SETUP -#line 364 "ldlex.l" +#line 364 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(FORMAT); } YY_BREAK case 167: YY_RULE_SETUP -#line 365 "ldlex.l" +#line 365 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(CASE); } YY_BREAK case 168: YY_RULE_SETUP -#line 366 "ldlex.l" +#line 366 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(EXTERN); } YY_BREAK case 169: YY_RULE_SETUP -#line 367 "ldlex.l" +#line 367 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(START); } YY_BREAK case 170: YY_RULE_SETUP -#line 368 "ldlex.l" +#line 368 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LIST); /* LIST and ignore to end of line */ } YY_BREAK case 171: YY_RULE_SETUP -#line 369 "ldlex.l" +#line 369 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(SECT); } YY_BREAK case 172: YY_RULE_SETUP -#line 370 "ldlex.l" +#line 370 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(ABSOLUTE); } YY_BREAK case 173: YY_RULE_SETUP -#line 372 "ldlex.l" +#line 372 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Filename without commas, needed to parse mri stuff */ yylval.name = xstrdup (yytext); @@ -3008,7 +3033,7 @@ YY_RULE_SETUP YY_BREAK case 174: YY_RULE_SETUP -#line 379 "ldlex.l" +#line 379 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext); return NAME; @@ -3016,7 +3041,7 @@ YY_RULE_SETUP YY_BREAK case 175: YY_RULE_SETUP -#line 383 "ldlex.l" +#line 383 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Filename to be prefixed by --sysroot or when non-sysrooted, nothing. */ yylval.name = xstrdup (yytext); @@ -3025,7 +3050,7 @@ YY_RULE_SETUP YY_BREAK case 176: YY_RULE_SETUP -#line 388 "ldlex.l" +#line 388 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext + 2); return LNAME; @@ -3033,7 +3058,7 @@ YY_RULE_SETUP YY_BREAK case 177: YY_RULE_SETUP -#line 392 "ldlex.l" +#line 392 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext); return NAME; @@ -3041,7 +3066,7 @@ YY_RULE_SETUP YY_BREAK case 178: YY_RULE_SETUP -#line 396 "ldlex.l" +#line 396 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext + 2); return LNAME; @@ -3049,7 +3074,7 @@ YY_RULE_SETUP YY_BREAK case 179: YY_RULE_SETUP -#line 400 "ldlex.l" +#line 400 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Annoyingly, this pattern can match comments, and we have longest match issues to consider. So if the first two @@ -3070,66 +3095,72 @@ YY_RULE_SETUP case 180: /* rule 180 can match eol */ YY_RULE_SETUP -#line 417 "ldlex.l" +#line 417 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* No matter the state, quotes - give what's inside */ + give what's inside. */ + bfd_size_type len; yylval.name = xstrdup (yytext + 1); - yylval.name[yyleng - 2] = 0; + /* PR ld/20906. A corrupt input file + can contain bogus strings. */ + len = strlen (yylval.name); + if (len > yyleng - 2) + len = yyleng - 2; + yylval.name[len] = 0; return NAME; } YY_BREAK case 181: /* rule 181 can match eol */ YY_RULE_SETUP -#line 424 "ldlex.l" +#line 430 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { lineno++;} YY_BREAK case 182: YY_RULE_SETUP -#line 425 "ldlex.l" +#line 431 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { } YY_BREAK case 183: YY_RULE_SETUP -#line 427 "ldlex.l" +#line 433 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { return *yytext; } YY_BREAK case 184: YY_RULE_SETUP -#line 429 "ldlex.l" +#line 435 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(GLOBAL); } YY_BREAK case 185: YY_RULE_SETUP -#line 431 "ldlex.l" +#line 437 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(LOCAL); } YY_BREAK case 186: YY_RULE_SETUP -#line 433 "ldlex.l" +#line 439 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { RTOKEN(EXTERN); } YY_BREAK case 187: YY_RULE_SETUP -#line 435 "ldlex.l" +#line 441 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext); return VERS_IDENTIFIER; } YY_BREAK case 188: YY_RULE_SETUP -#line 438 "ldlex.l" +#line 444 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { yylval.name = xstrdup (yytext); return VERS_TAG; } YY_BREAK case 189: YY_RULE_SETUP -#line 441 "ldlex.l" +#line 447 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { BEGIN(VERS_SCRIPT); return *yytext; } YY_BREAK case 190: YY_RULE_SETUP -#line 443 "ldlex.l" +#line 449 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { BEGIN(VERS_NODE); vers_node_nesting = 0; return *yytext; @@ -3137,17 +3168,17 @@ YY_RULE_SETUP YY_BREAK case 191: YY_RULE_SETUP -#line 447 "ldlex.l" +#line 453 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { return *yytext; } YY_BREAK case 192: YY_RULE_SETUP -#line 448 "ldlex.l" +#line 454 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { vers_node_nesting++; return *yytext; } YY_BREAK case 193: YY_RULE_SETUP -#line 449 "ldlex.l" +#line 455 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { if (--vers_node_nesting < 0) BEGIN(VERS_SCRIPT); return *yytext; @@ -3156,17 +3187,17 @@ YY_RULE_SETUP case 194: /* rule 194 can match eol */ YY_RULE_SETUP -#line 454 "ldlex.l" +#line 460 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { lineno++; } YY_BREAK case 195: YY_RULE_SETUP -#line 456 "ldlex.l" +#line 462 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Eat up comments */ } YY_BREAK case 196: YY_RULE_SETUP -#line 458 "ldlex.l" +#line 464 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { /* Eat up whitespace */ } YY_BREAK case YY_STATE_EOF(INITIAL): @@ -3179,7 +3210,7 @@ case YY_STATE_EOF(MRI): case YY_STATE_EOF(VERS_START): case YY_STATE_EOF(VERS_SCRIPT): case YY_STATE_EOF(VERS_NODE): -#line 460 "ldlex.l" +#line 466 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" { include_stack_ptr--; if (include_stack_ptr == 0) @@ -3195,20 +3226,20 @@ case YY_STATE_EOF(VERS_NODE): YY_BREAK case 197: YY_RULE_SETUP -#line 473 "ldlex.l" +#line 479 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" lex_warn_invalid (" in script", yytext); YY_BREAK case 198: YY_RULE_SETUP -#line 474 "ldlex.l" +#line 480 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" lex_warn_invalid (" in expression", yytext); YY_BREAK case 199: YY_RULE_SETUP -#line 476 "ldlex.l" +#line 482 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" ECHO; YY_BREAK -#line 3212 "ldlex.c" +#line 3243 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" case YY_END_OF_BUFFER: { @@ -3337,6 +3368,7 @@ ECHO; "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ + } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer @@ -3348,9 +3380,9 @@ ECHO; */ static int yy_get_next_buffer (void) { - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + yy_size_t number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -3379,7 +3411,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -3392,14 +3424,14 @@ static int yy_get_next_buffer (void) else { - yy_size_t num_to_read = + int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); @@ -3482,14 +3514,14 @@ static int yy_get_next_buffer (void) static yy_state_type yy_get_previous_state (void) { - register yy_state_type yy_current_state; - register char *yy_cp; + yy_state_type yy_current_state; + char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -3514,10 +3546,10 @@ static int yy_get_next_buffer (void) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -3532,9 +3564,13 @@ static int yy_get_next_buffer (void) yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 1774); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } +#ifndef YY_NO_UNPUT + +#endif + #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) @@ -3583,7 +3619,7 @@ static int yy_get_next_buffer (void) case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) - return 0; + return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -3684,7 +3720,7 @@ static void yy_load_buffer_state (void) if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - b->yy_buf_size = size; + b->yy_buf_size = (yy_size_t)size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. @@ -3719,10 +3755,6 @@ static void yy_load_buffer_state (void) yyfree((void *) b ); } -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. @@ -3843,7 +3875,7 @@ static void yyensure_buffer_stack (void) * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ - num_to_alloc = 1; + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); @@ -3860,7 +3892,7 @@ static void yyensure_buffer_stack (void) if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; + yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc @@ -3927,8 +3959,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ @@ -3936,7 +3968,8 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst { YY_BUFFER_STATE b; char *buf; - yy_size_t n, i; + yy_size_t n; + yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -3967,7 +4000,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst static void yy_fatal_error (yyconst char* msg ) { - (void) fprintf( stderr, "%s\n", msg ); + (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -3978,7 +4011,7 @@ static void yy_fatal_error (yyconst char do \ { \ /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ + yy_size_t yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ @@ -4033,29 +4066,29 @@ char *yyget_text (void) } /** Set the current line number. - * @param line_number + * @param _line_number line number * */ -void yyset_lineno (int line_number ) +void yyset_lineno (int _line_number ) { - yylineno = line_number; + yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. - * @param in_str A readable stream. + * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ -void yyset_in (FILE * in_str ) +void yyset_in (FILE * _in_str ) { - yyin = in_str ; + yyin = _in_str ; } -void yyset_out (FILE * out_str ) +void yyset_out (FILE * _out_str ) { - yyout = out_str ; + yyout = _out_str ; } int yyget_debug (void) @@ -4063,9 +4096,9 @@ int yyget_debug (void) return yy_flex_debug; } -void yyset_debug (int bdebug ) +void yyset_debug (int _bdebug ) { - yy_flex_debug = bdebug ; + yy_flex_debug = _bdebug ; } static int yy_init_globals (void) @@ -4125,7 +4158,8 @@ int yylex_destroy (void) #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { - register int i; + + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } @@ -4134,7 +4168,7 @@ static void yy_flex_strncpy (char* s1, y #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; @@ -4144,11 +4178,12 @@ static int yy_flex_strlen (yyconst char void *yyalloc (yy_size_t size ) { - return (void *) malloc( size ); + return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { + /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter @@ -4161,12 +4196,12 @@ void *yyrealloc (void * ptr, yy_size_t void yyfree (void * ptr ) { - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" -#line 476 "ldlex.l" +#line 482 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" diff -rup binutils.orig/ld/ldlex.l binutils-2.27/ld/ldlex.l --- binutils.orig/ld/ldlex.l 2017-03-24 13:50:55.613184724 +0000 +++ binutils-2.27/ld/ldlex.l 2017-03-24 14:20:35.039227142 +0000 @@ -416,9 +416,15 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([ "\""[^\"]*"\"" { /* No matter the state, quotes - give what's inside */ + give what's inside. */ + bfd_size_type len; yylval.name = xstrdup (yytext + 1); - yylval.name[yyleng - 2] = 0; + /* PR ld/20906. A corrupt input file + can contain bogus strings. */ + len = strlen (yylval.name); + if (len > yyleng - 2) + len = yyleng - 2; + yylval.name[len] = 0; return NAME; } "\n" { lineno++;}