diff options
author | Fangrui Song <maskray@google.com> | 2022-02-16 17:41:23 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2022-02-16 17:41:23 +0000 |
commit | c212f39d9a82c6c09f4a1447d9d2ff09843827c5 (patch) | |
tree | 4dcd736239b6373674032ce36fa62ecd9ea67883 /bfd | |
parent | 1f841a9348f189a8ee4423eb416d6e5495b5b49d (diff) | |
download | gdb-c212f39d9a82c6c09f4a1447d9d2ff09843827c5.zip gdb-c212f39d9a82c6c09f4a1447d9d2ff09843827c5.tar.gz 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 'bfd')
-rw-r--r-- | bfd/ChangeLog | 10 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 7 | ||||
-rw-r--r-- | bfd/elf.c | 4 | ||||
-rw-r--r-- | bfd/section.c | 4 |
4 files changed, 20 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 97026b0..e959a78 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2022-02-16 Fangrui Song <maskray@google.com> + Nick Clifton <nickc@redhat.com> + + 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. + 2022-02-11 Michael Forney <mforney@mforney.org> * bfd.c (bfd_set_gp_value): Remove return with expression diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 3b2a4f4..78a0a1d 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -1170,6 +1170,9 @@ typedef struct bfd_section This is used when support for non-contiguous memory regions is enabled. */ struct bfd_section *already_assigned; + /* Explicitly specified section type, if non-zero. */ + unsigned int type; + } asection; /* Relax table contains information about instructions which can @@ -1352,8 +1355,8 @@ discarded_section (const asection *sec) /* symbol, symbol_ptr_ptr, */ \ (struct bfd_symbol *) SYM, &SEC.symbol, \ \ - /* map_head, map_tail, already_assigned */ \ - { NULL }, { NULL }, NULL \ + /* map_head, map_tail, already_assigned, type */ \ + { NULL }, { NULL }, NULL, 0 \ \ } @@ -3280,7 +3280,9 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) /* If the section type is unspecified, we set it based on asect->flags. */ - if ((asect->flags & SEC_GROUP) != 0) + if (asect->type != 0) + sh_type = asect->type; + else if ((asect->flags & SEC_GROUP) != 0) sh_type = SHT_GROUP; else sh_type = bfd_elf_get_default_section_type (asect->flags); diff --git a/bfd/section.c b/bfd/section.c index 899438a..2de7dbf 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -737,8 +737,8 @@ CODE_FRAGMENT . {* symbol, symbol_ptr_ptr, *} \ . (struct bfd_symbol *) SYM, &SEC.symbol, \ . \ -. {* map_head, map_tail, already_assigned *} \ -. { NULL }, { NULL }, NULL \ +. {* map_head, map_tail, already_assigned, type *} \ +. { NULL }, { NULL }, NULL, 0 \ . \ . } . |