* ldgram.y (mri_script_command): Surround processing of INCLUDE
authorAlan Modra <amodra@gmail.com>
Sat, 20 Oct 2001 13:49:00 +0000 (13:49 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 20 Oct 2001 13:49:00 +0000 (13:49 +0000)
with ldlex_script, ldlex_popstate.
(ifile_p1): Likewise.
* ldlex.l (EOF): Don't BEGIN(SCRIPT).  Restore lineno from the
correct slot.
(lex_push_file): Save current lineno to lineno_stack.  Set lineno
to 1.  Don't BEGIN(SCRIPT).
(lex_redirect): Similarly.
* ldmain.c (main): Set yydebug non-zero if YYDEBUG.

ld/ChangeLog
ld/ldgram.y
ld/ldlex.l
ld/ldmain.c

index 1ff2d260c2ae8a68496ae960dd3b3790d8bec1d6..50816d095315b182ef509b68c16ddfca9ec9057d 100644 (file)
@@ -1,3 +1,15 @@
+2001-10-20  Alan Modra  <amodra@bigpond.net.au>
+
+       * ldgram.y (mri_script_command): Surround processing of INCLUDE
+       with ldlex_script, ldlex_popstate.
+       (ifile_p1): Likewise.
+       * ldlex.l (EOF): Don't BEGIN(SCRIPT).  Restore lineno from the
+       correct slot.
+       (lex_push_file): Save current lineno to lineno_stack.  Set lineno
+       to 1.  Don't BEGIN(SCRIPT).
+       (lex_redirect): Similarly.
+       * ldmain.c (main): Set yydebug non-zero if YYDEBUG.
+
 2001-10-20  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * scripttempl/armcoff.sc: Define __EH_FRAME_BEGIN__ and
index 25d8d090b28c8f17e855e7844b2ff7ed7d905aee..c57ad158163b22239f4a273bd746af4a38a99328 100644 (file)
@@ -238,7 +238,9 @@ mri_script_command:
        |       CASE casesymlist
        |       EXTERN extern_name_list
        |       INCLUDE filename
-               { ldfile_open_command_file ($2); } mri_script_lines END
+               { ldlex_script (); ldfile_open_command_file($2); }
+               mri_script_lines END
+               { ldlex_popstate (); }
        |       START NAME
                { lang_add_entry ($2, false); }
         |
@@ -332,7 +334,9 @@ ifile_p1:
        |       MAP '(' filename ')'
                { lang_add_map($3); }
        |       INCLUDE filename 
-               { ldfile_open_command_file($2); } ifile_list END
+               { ldlex_script (); ldfile_open_command_file($2); }
+               ifile_list END
+               { ldlex_popstate (); }
        |       NOCROSSREFS '(' nocrossref_list ')'
                {
                  lang_add_nocrossref ($3);
index b43cfa31874509fe48f4d446c0748993df3fcf34..95a31f5a64a120adac9baf512dbbc52677a7bd5f 100644 (file)
@@ -418,11 +418,10 @@ V_IDENTIFIER [*?.$_a-zA-Z]([*?.$_a-zA-Z0-9]|::)*
   else 
   {
     yy_switch_to_buffer(include_stack[include_stack_ptr]);
-
   }
-  BEGIN(SCRIPT);
+
   ldfile_input_filename = file_name_stack[include_stack_ptr - 1];
-  lineno = lineno_stack[include_stack_ptr - 1];
+  lineno = lineno_stack[include_stack_ptr];
 
   return END;
 }
@@ -446,13 +445,13 @@ lex_push_file (file, name)
       einfo("%F:includes nested too deeply\n");
     }
   file_name_stack[include_stack_ptr] = name;
-  lineno_stack[include_stack_ptr] = 1;
+  lineno_stack[include_stack_ptr] = lineno;
   include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
 
   include_stack_ptr++;
+  lineno = 1;
   yyin = file;
   yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
-  BEGIN (SCRIPT);
 }
 
 /* Return a newly created flex input buffer containing STRING,
@@ -512,12 +511,12 @@ lex_redirect (string)
       einfo("%F: macros nested too deeply\n");
     }
   file_name_stack[include_stack_ptr] = "redirect";
-  lineno_stack[include_stack_ptr] = 0;
+  lineno_stack[include_stack_ptr] = lineno;
   include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
   include_stack_ptr++;
+  lineno = 1;
   tmp = yy_create_string_buffer (string, strlen (string));
   yy_switch_to_buffer (tmp);
-  BEGIN (SCRIPT);
 }
 \f
 /* Functions to switch to a different flex start condition,
index 578e34f84e0d07f6eac11cb7bc221ded3a95349d..462e16af7deab132b2247ba69bf0d5927cffa8a2 100644 (file)
@@ -196,6 +196,13 @@ main (argc, argv)
       xexit (1);
     }
 
+#if YYDEBUG
+  {
+    extern int yydebug;
+    yydebug = 1;
+  }
+#endif
+
   /* Initialize the data about options.  */
   trace_files = trace_file_tries = version_printed = false;
   whole_archive = false;