boolean hex_mode;
-
+strip_symbols_type strip_symbols=STRIP_NONE;
+discard_locals_type discard_locals=DISCARD_NONE;
lang_memory_region_type *region;
boolean ldgram_want_filename = true;
boolean had_script = false;
boolean force_make_executable = false;
-boolean ldgram_in_expression = false;
+
boolean ldgram_in_script = false;
-boolean ldgram_in_defsym = false;
+boolean ldgram_had_equals = false;
/* LOCALS */
%token <name> NAME
%type <integer> length
-%right <token> PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ
+%right <token> PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ
%right <token> '?' ':'
%left <token> OROR
%left <token> ANDAND
%token <token> ALIGN_K BLOCK LONG SHORT BYTE
%token SECTIONS
%token '{' '}'
-%token ALIGNMENT SIZEOF_HEADERS
+%token ALIGNMENT SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
%token NEXT SIZEOF ADDR SCRIPT ENDSCRIPT
%token MEMORY
%token DSECT NOLOAD COPY INFO OVERLAY
%token OPTION_e OPTION_c OPTION_noinhibit_exec OPTION_s OPTION_S
%token OPTION_format OPTION_F OPTION_u
-%token OPTION_d OPTION_dc OPTION_dp OPTION_x OPTION_X
-%token OPTION_v OPTION_M OPTION_t STARTUP HLL SYSLIB FLOAT NOFLOAT OPTION_defsym
+%token OPTION_d OPTION_dc OPTION_dp OPTION_x OPTION_X OPTION_defsym
+%token OPTION_v OPTION_M OPTION_t STARTUP HLL SYSLIB FLOAT NOFLOAT
%token OPTION_n OPTION_r OPTION_o OPTION_b OPTION_A OPTION_R
%token <name> OPTION_l OPTION_L OPTION_T OPTION_Aarch OPTION_Tfile OPTION_Texp
%token OPTION_Ur
;
command_line_option:
- SCRIPT ifile_list ENDSCRIPT
+ '{'
+ { ldgram_in_script = true; }
+ ifile_list
+ { ldgram_in_script = false; }
+ '}'
| OPTION_v
{
ldversion();
}
| OPTION_defsym
{
- ldgram_in_defsym = true;
- ldgram_in_expression = true;
-
}
- assignment
+ NAME '='
+ exp_head
{
- ldgram_in_defsym = false;
- ldgram_in_expression = false;
+ lang_add_assignment(exp_assop($4,$3,$5));
}
| '-' NAME
{ info("%P%F Unrecognised option -%s\n", $2); }
script_file:
{ ldgram_in_script = true; }
- ifile_list ENDSCRIPT
+ ifile_list '}'
{ ldgram_in_script = false; }
;
ifile_list:
ifile_list ifile_p1
- |
+ |
;
| high_level_library
| low_level_library
| floating_point_support
- | assignment end
+ | statement_anywhere
| TARGET_K '(' NAME ')'
{ lang_add_target($3); }
| SEARCH_DIR '(' filename ')'
{ ldfile_add_library_path($3); }
| OUTPUT '(' filename ')'
{ lang_add_output($3); }
+ | OUTPUT_FORMAT '(' NAME ')'
+ { lang_add_output_format($3); }
+ | OUTPUT_ARCH '(' NAME ')'
+ { ldfile_set_output_arch($3); }
+ | FORCE_COMMON_ALLOCATION
+ { command_line.force_common_definition = true ; }
| INPUT '(' input_list ')'
| MAP '(' filename ')'
{ lang_add_map($3); }
statement:
statement assignment end
| statement CREATE_OBJECT_SYMBOLS
- { lang_add_attribute(lang_object_symbols_statement_enum); }
+ {
+ lang_add_attribute(lang_object_symbols_statement_enum); }
+
| statement input_section_spec
| statement length '(' exp_head ')'
{
;
exp_head:
- {
- ldgram_in_expression = true;
- }
- exp
- {
- ldgram_in_expression = false;
- $$ = $2;
- }
+ exp { $$ = $1; }
;
opt_exp: