diff options
author | Jakub Jelinek <jakub@redhat.com> | 2004-05-19 14:01:14 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2004-05-19 14:01:14 +0000 |
commit | 0841712ea90a7633d54bbc1f00fa82e068815b66 (patch) | |
tree | 2fa51ae9ff719886f69c1aa790ec08b9b2bb27d6 /ld/ldgram.y | |
parent | f2c503287936db895a7ab693f3ddf618a46a89a3 (diff) | |
download | gdb-0841712ea90a7633d54bbc1f00fa82e068815b66.zip gdb-0841712ea90a7633d54bbc1f00fa82e068815b66.tar.gz gdb-0841712ea90a7633d54bbc1f00fa82e068815b66.tar.bz2 |
* ldgram.y (sect_constraint): New.
(ONLY_IF_RO, ONLY_IF_RW): New tokens.
(section): Add sect_constraint. Pass additional argument
to lang_enter_output_section_statement.
* mri.c (mri_draw_tree): Pass additional argument to
lang_enter_output_section_statement.
* emultempl/pe.em (place_orphan): Likewise.
(output_prev_sec_find): Disregard output section statements with
constraint == -1.
* emultempl/mmo.em (output_prev_sec_find): Likewise.
(mmo_place_orphan): Pass additional argument to
lang_enter_output_section_statement.
* emultempl/elf32.em (output_prev_sec_find): Disregard output section
statements with constraint == -1.
(place_orphan): Pass additional argument to
lang_enter_output_section_statement.
* ldlang.c (lang_enter_overlay_section): Likewise.
(lang_output_section_find_1): New.
(lang_output_section_find): Use it.
(lang_output_section_statement_lookup_1): New.
(lang_output_section_statement_lookup): Use it.
(check_section_callback, check_input_sections): New.
(map_input_to_output_sections): Check if all input sections
are readonly if ONLY_IF_RO or ONLY_IF_RW was seen.
(strip_excluded_output_sections): Disregard output section statements
with constraint == -1.
(lang_record_phdrs): Likewise.
(lang_enter_output_section_statement): Add constraint argument.
Use lang_output_section_statement_lookup_1.
* ldlang.h (lang_output_section_statement_type): Add constraint
and all_input_readonly fields.
(lang_enter_output_section_statement): Adjust prototype.
* ldlex.l (ONLY_IF_RO, ONLY_IF_RW): New tokens.
* scripttempl/elf.sc (.eh_frame, .gcc_except_table): Move into text
segment if all input sections are readonly.
Diffstat (limited to 'ld/ldgram.y')
-rw-r--r-- | ld/ldgram.y | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/ld/ldgram.y b/ld/ldgram.y index 462bd42..75f4e70 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -143,14 +143,14 @@ static int error_index; %token ORIGIN FILL %token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS %token ALIGNMOD AT SUBALIGN PROVIDE -%type <token> assign_op atype attributes_opt +%type <token> assign_op atype attributes_opt sect_constraint %type <name> filename %token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K %token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL %token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START %token <name> VERS_TAG VERS_IDENTIFIER %token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT -%token KEEP +%token KEEP ONLY_IF_RO ONLY_IF_RW %token EXCLUDE_FILE %type <versyms> vers_defns %type <versnode> vers_tag @@ -840,22 +840,29 @@ opt_subalign: | { $$ = 0; } ; +sect_constraint: + ONLY_IF_RO { $$ = ONLY_IF_RO; } + | ONLY_IF_RW { $$ = ONLY_IF_RW; } + | { $$ = 0; } + ; + section: NAME { ldlex_expression(); } opt_exp_with_type opt_at opt_subalign { ldlex_popstate (); ldlex_script (); } + sect_constraint '{' { lang_enter_output_section_statement($1, $3, sectype, - 0, $5, $4); + 0, $5, $4, $7); } statement_list_opt '}' { ldlex_popstate (); ldlex_expression (); } memspec_opt memspec_at_opt phdr_opt fill_opt { ldlex_popstate (); - lang_leave_output_section_statement ($15, $12, $14, $13); + lang_leave_output_section_statement ($16, $13, $15, $14); } opt_comma {} |