aboutsummaryrefslogtreecommitdiff
path: root/ld/ldgram.y
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2022-02-16 17:41:23 +0000
committerNick Clifton <nickc@redhat.com>2022-02-16 17:41:23 +0000
commitc212f39d9a82c6c09f4a1447d9d2ff09843827c5 (patch)
tree4dcd736239b6373674032ce36fa62ecd9ea67883 /ld/ldgram.y
parent1f841a9348f189a8ee4423eb416d6e5495b5b49d (diff)
downloadfsf-binutils-gdb-c212f39d9a82c6c09f4a1447d9d2ff09843827c5.zip
fsf-binutils-gdb-c212f39d9a82c6c09f4a1447d9d2ff09843827c5.tar.gz
fsf-binutils-gdb-c212f39d9a82c6c09f4a1447d9d2ff09843827c5.tar.bz2
ld: Support customized output section type
bfd/ PR ld/28841 * bfd-in2.h (struct bfd_section): Add type. (discarded_section): Add field. * elf.c (elf_fake_sections): Handle bfd_section::type. * section.c (BFD_FAKE_SECTION): Add field. * mri.c (mri_draw_tree): Update function call. ld/ PR ld/28841 * ld.texi: Document new output section type. * ldlex.l: Add new token TYPE. * ldgram.y: Handle TYPE=exp. * ldlang.h: Add type_section to list of section types. * ldlang.c (lang_add_section): Handle type_section. (map_input_to_output_sections): Handle type_section. * testsuite/ld-scripts/output-section-types.t: Add tests. * testsuite/ld-scripts/output-section-types.d: Update.
Diffstat (limited to 'ld/ldgram.y')
-rw-r--r--ld/ldgram.y11
1 files changed, 7 insertions, 4 deletions
diff --git a/ld/ldgram.y b/ld/ldgram.y
index 11c2f21..3a904e3 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -47,6 +47,7 @@
#endif
static enum section_type sectype;
+static etree_type *sectype_value;
static lang_memory_region_type *region;
static bool ldgram_had_keep = false;
@@ -139,6 +140,7 @@ static int error_index;
%token LD_FEATURE
%token NOLOAD DSECT COPY INFO OVERLAY
%token READONLY
+%token TYPE
%token DEFINED TARGET_K SEARCH_DIR MAP ENTRY
%token <integer> NEXT
%token SIZEOF ALIGNOF ADDR LOADADDR MAX_K MIN_K
@@ -1058,9 +1060,8 @@ section: NAME
{
ldlex_popstate ();
ldlex_wild ();
- lang_enter_output_section_statement($1, $3, sectype,
- $5, $7, $4,
- $8, $6);
+ lang_enter_output_section_statement ($1, $3, sectype,
+ sectype_value, $5, $7, $4, $8, $6);
}
'{'
statement_list_opt
@@ -1130,8 +1131,10 @@ type:
| COPY { sectype = noalloc_section; }
| INFO { sectype = noalloc_section; }
| OVERLAY { sectype = noalloc_section; }
+ | READONLY '(' TYPE '=' exp ')' { sectype = typed_readonly_section; sectype_value = $5; }
| READONLY { sectype = readonly_section; }
- ;
+ | TYPE '=' exp { sectype = type_section; sectype_value = $3; }
+ ;
atype:
'(' type ')'