* ldgram.y (YYDEBUG): If not defined, define as 1.
authorIan Lance Taylor <ian@airs.com>
Tue, 15 Aug 1995 21:35:46 +0000 (21:35 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 15 Aug 1995 21:35:46 +0000 (21:35 +0000)
(CASE, EXTERN, START): New tokens.
(mri_script_command): Handle CASE, EXTERN, INCLUDE, START.
(casesymlist): New nonterminal.
(extern_name_list): New nonterminal.
* ldlex.l: Accept lower case trailing base specifiers.  Don't
ignore the first digit when the base is a suffix.  Accept many
EXPRESSION state tokens in MRI state.  Support MRI continuation
lines and MRI semicolon comments.  Accept all MRI keywords in
lower case.  Add CASE, EXTERN, and START MRI keywords.

ld/ChangeLog
ld/ldgram.y

index ed0ebd1..6f2f009 100644 (file)
@@ -1,3 +1,16 @@
+Tue Aug 15 17:31:16 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * ldgram.y (YYDEBUG): If not defined, define as 1.
+       (CASE, EXTERN, START): New tokens.
+       (mri_script_command): Handle CASE, EXTERN, INCLUDE, START.
+       (casesymlist): New nonterminal.
+       (extern_name_list): New nonterminal.
+       * ldlex.l: Accept lower case trailing base specifiers.  Don't
+       ignore the first digit when the base is a suffix.  Accept many
+       EXPRESSION state tokens in MRI state.  Support MRI continuation
+       lines and MRI semicolon comments.  Accept all MRI keywords in
+       lower case.  Add CASE, EXTERN, and START MRI keywords.
+
 Tue Aug  8 19:14:58 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>
 
        * emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Use xmalloc
index 7d13971..4967145 100644 (file)
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 %{
 /*
@@ -39,6 +39,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "mri.h"
 #include "ldlex.h"
 
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+
 static int typebits;
 
 lang_memory_region_type *region;
@@ -70,7 +74,7 @@ static int error_index;
 %type <integer> fill_opt
 %type <name> memspec_opt
 %token <integer> INT  
-%token <name> NAME
+%token <name> NAME LNAME
 %type  <integer> length
 
 %right <token> PLUSEQ MINUSEQ MULTEQ DIVEQ  '=' LSHIFTEQ RSHIFTEQ   ANDEQ OREQ 
@@ -98,7 +102,7 @@ static int error_index;
 %token INCLUDE
 %token MEMORY DEFSYMEND
 %token NOLOAD DSECT COPY INFO OVERLAY
-%token NAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY
+%token NAME LNAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY
 %token <integer> SIZEOF NEXT ADDR
 %token STARTUP HLL SYSLIB FLOAT NOFLOAT
 %token ORIGIN FILL
@@ -108,7 +112,7 @@ static int error_index;
 %type <name>  filename
 %token CHIP LIST SECT ABSOLUTE  LOAD NEWLINE ENDWORD ORDER NAMEWORD
 %token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
-%token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM
+%token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START
 
 %%
 
@@ -157,15 +161,15 @@ mri_script_command:
                        }
         |       ORDER ordernamelist
        |       ENDWORD 
-        |       PUBLIC NAME '=' exp 
+        |       PUBLIC NAME '=' exp
                        { mri_public($2, $4); }
-        |       PUBLIC NAME ',' exp 
+        |       PUBLIC NAME ',' exp
                        { mri_public($2, $4); }
         |       PUBLIC NAME  exp 
                        { mri_public($2, $3); }
        |       FORMAT NAME
                        { mri_format($2); }
-       |       SECT NAME ',' exp 
+       |       SECT NAME ',' exp
                        { mri_output_section($2, $4);}
        |       SECT NAME  exp
                        { mri_output_section($2, $3);}
@@ -187,6 +191,12 @@ mri_script_command:
                        { mri_base($2); }
         |       TRUNCATE INT
                {  mri_truncate((unsigned int) $2); }
+       |       CASE casesymlist
+       |       EXTERN extern_name_list
+       |       INCLUDE filename
+               { ldfile_open_command_file ($2); } mri_script_lines END
+       |       START NAME
+               { lang_add_entry ($2, 0); }
         |
        ;
 
@@ -209,6 +219,19 @@ mri_abs_name_list:
                        { mri_only_load($3); }
        ;
 
+casesymlist:
+         /* empty */
+       | NAME
+       | casesymlist ',' NAME
+       ;
+
+extern_name_list:
+         NAME
+                       { ldlang_add_undef ($1); }
+       | extern_name_list ',' NAME
+                       { ldlang_add_undef ($3); }
+       ;
+
 script_file:
        {
         ldlex_both();
@@ -243,7 +266,10 @@ ifile_p1:
        |       OUTPUT '(' filename ')'
                { lang_add_output($3, 1); }
         |      OUTPUT_FORMAT '(' NAME ')'
-                 { lang_add_output_format($3, 1); }
+                 { lang_add_output_format ($3, (char *) NULL,
+                                           (char *) NULL, 1); }
+       |       OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')'
+                 { lang_add_output_format ($3, $5, $7, 1); }
         |      OUTPUT_ARCH '(' NAME ')'
                  { ldfile_set_output_arch($3); }
        |       FORCE_COMMON_ALLOCATION
@@ -269,6 +295,15 @@ input_list:
        |       input_list NAME
                { lang_add_input_file($2,lang_input_file_is_search_file_enum,
                                 (char *)NULL); }
+       |       LNAME
+               { lang_add_input_file($1,lang_input_file_is_l_enum,
+                                (char *)NULL); }
+       |       input_list ',' LNAME
+               { lang_add_input_file($3,lang_input_file_is_l_enum,
+                                (char *)NULL); }
+       |       input_list LNAME
+               { lang_add_input_file($2,lang_input_file_is_l_enum,
+                                (char *)NULL); }
        ;
 
 sections: