diff options
Diffstat (limited to 'ld/ldgram.y')
-rw-r--r-- | ld/ldgram.y | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/ld/ldgram.y b/ld/ldgram.y index 9c882f7..7639ab1 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -133,7 +133,7 @@ struct sec *section; %token '{' '}' %token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH %token SIZEOF_HEADERS -%token MEMORY +%token MEMORY DEFSYMEND %token NOLOAD DSECT COPY INFO OVERLAY %token NAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY %token OPTION_e OPTION_c OPTION_noinhibit_exec OPTION_s OPTION_S OPTION_sort_common @@ -152,7 +152,8 @@ struct sec *section; %type <name> filename -%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD FORMAT +%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD +%token FORMAT PUBLIC DEFSYMEND BASE ALIAS %{ ld_config_type config; @@ -269,11 +270,11 @@ command_line_option: lang_add_target($2); } | OPTION_Texp - { + { ldlex_expression(); hex_mode = 16; } INT - { + { ldlex_popstate(); lang_section_start($1,exp_intop($3)); hex_mode = 0; } @@ -320,10 +321,9 @@ END { ldlex_command();} lang_input_file_is_symbols_only_enum, (char *)NULL); } - | OPTION_defsym { ldlex_expression(); - - } - NAME '=' mustbe_exp { ldlex_popstate(); + + | OPTION_defsym { ldlex_defsym(); } + NAME '=' exp DEFSYMEND { ldlex_popstate(); lang_add_assignment(exp_assop($4,$3,$5)); } | '-' NAME @@ -361,6 +361,12 @@ mri_script_command: } | ORDER ordernamelist | ENDWORD + | PUBLIC NAME '=' exp + { mri_public($2, $4); } + | PUBLIC NAME ',' exp + { mri_public($2, $4); } + | PUBLIC NAME exp + { mri_public($2, $3); } | FORMAT NAME { mri_format($2); } | SECT NAME ',' exp @@ -373,6 +379,12 @@ mri_script_command: | LOAD mri_load_name_list | NAMEWORD NAME { mri_name($2); } + | ALIAS NAME ',' NAME + { mri_alias($2,$4,0);} + | ALIAS NAME ',' INT + { mri_alias($2,0,$4);} + | BASE exp + { mri_base($2); } | ; @@ -750,10 +762,12 @@ section: NAME { ldlex_expression(); } { lang_enter_output_section_statement($1,$3,$5,$6); } - statement '}' fill_opt memspec_opt + statement '}' {ldlex_expression();} fill_opt memspec_opt { - lang_leave_output_section_statement($13, $14); + ldlex_popstate(); + lang_leave_output_section_statement($14, $15); } +opt_comma ; |