diff options
author | Nick Clifton <nickc@redhat.com> | 2018-09-03 17:06:05 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-09-03 17:06:45 +0100 |
commit | 8744470deabb6a2fae35be0f66c60ee4ba094c1d (patch) | |
tree | b56f58c2c18fdc26e204846c185ea7459af38cc6 /gas | |
parent | 78a3b0fab8200fdca2b1b934645c29e7bd502d36 (diff) | |
download | binutils-8744470deabb6a2fae35be0f66c60ee4ba094c1d.zip binutils-8744470deabb6a2fae35be0f66c60ee4ba094c1d.tar.gz binutils-8744470deabb6a2fae35be0f66c60ee4ba094c1d.tar.bz2 |
Change the .section directive for the AVR assembler so that the .noinit section is always given the ELF NOBITS section type.
PR gas/23570
* config/tc-avr.c (md_pseudo_table): Add entry for "secction".
(avr_set_section): New function. Ensures that the .noinit section
gets the NOBITS ELF section type.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-avr.c | 19 |
2 files changed, 26 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 56aae60..07ab7c7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2018-09-03 Nick Clifton <nickc@redhat.com> + + PR gas/23570 + * config/tc-avr.c (md_pseudo_table): Add entry for "secction". + (avr_set_section): New function. Ensures that the .noinit section + gets the NOBITS ELF section type. + 2018-08-31 Kito Cheng <kito@andestech.com> * testsuite/gas/riscv/c-fld-fsd-fail.d: New. diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c index d628c95..edf60f4 100644 --- a/gas/config/tc-avr.c +++ b/gas/config/tc-avr.c @@ -481,11 +481,13 @@ const char EXP_CHARS[] = "eE"; const char FLT_CHARS[] = "dD"; static void avr_set_arch (int); +static void avr_set_section (int); /* The target specific pseudo-ops which we support. */ const pseudo_typeS md_pseudo_table[] = { {"arch", avr_set_arch, 0}, + {"section", avr_set_section, 0}, { NULL, NULL, 0} }; @@ -702,6 +704,23 @@ avr_set_arch (int dummy ATTRIBUTE_UNUSED) bfd_set_arch_mach (stdoutput, TARGET_ARCH, avr_mcu->mach); } +static void +avr_set_section (int push) +{ + obj_elf_section (push); + + /* PR 23570. The .noinit section needs to be explicitly + set to the NOBITS type. */ + if (seg_info (now_seg)->bss == 0 + && strcmp (bfd_get_section_name (stdoutput, now_seg), ".noinit") == 0) + { + bfd_set_section_flags (stdoutput, now_seg, SEC_ALLOC | SEC_RELOC); + seg_info (now_seg)->bss = 1; + elf_section_type (now_seg) = SHT_NOBITS; + elf_section_flags (now_seg) = SHF_ALLOC | SHF_WRITE; + } +} + int md_parse_option (int c, const char *arg) { |