mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
elf: Clear the SEC_ALLOC bit for NOLOAD note sections
When generating an ELF output file, if a note section is marked as NOLOAD, clear the SEC_ALLOC bit so that it won't be treated as an SHF_ALLOC section, like a .bss style section. PR ld/32787 * ld.texi: Update NOLOAD for ELF output files. * ldlang.c (lang_add_section): Clear the SEC_ALLOC bit for NOLOAD note sections for ELF output files. * testsuite/ld-elf/pr32787.d: New file. * testsuite/ld-elf/pr32787.t: Likewise. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
@@ -5965,7 +5965,13 @@ parentheses. The following types are defined:
|
||||
|
||||
@item NOLOAD
|
||||
The section should be marked as not loadable, so that it will not be
|
||||
loaded into memory when the program is run.
|
||||
loaded into memory when the program is run. When generating an ELF
|
||||
output file, the memory space is allocated for the section at run-time,
|
||||
except for SHT_NOTE sections. For other output files, no memory space
|
||||
is allocated at run-time.
|
||||
|
||||
Note - the ELF behaviour is a bug that may change to be consistent
|
||||
with non-ELF targets.
|
||||
|
||||
@item READONLY
|
||||
The section should be marked as read-only.
|
||||
|
||||
@@ -2827,8 +2827,10 @@ lang_add_section (lang_statement_list_type *ptr,
|
||||
/* Unfortunately GNU ld has managed to evolve two different
|
||||
meanings to NOLOAD in scripts. ELF gets a .bss style noload,
|
||||
alloc, no contents section. All others get a noload, noalloc
|
||||
section. */
|
||||
if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
|
||||
section. Unlike a .bss style section, if a note section is
|
||||
marked as NOLOAD, also clear SEC_ALLOC. */
|
||||
if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
|
||||
&& elf_section_type (section) != SHT_NOTE)
|
||||
flags &= ~SEC_HAS_CONTENTS;
|
||||
else
|
||||
flags &= ~SEC_ALLOC;
|
||||
|
||||
9
ld/testsuite/ld-elf/pr32787.d
Normal file
9
ld/testsuite/ld-elf/pr32787.d
Normal file
@@ -0,0 +1,9 @@
|
||||
#source: start.s
|
||||
#ld: --build-id -T pr32787.t
|
||||
#nm: -n
|
||||
# The following targets don't support --build-id.
|
||||
#xfail: [uses_genelf]
|
||||
|
||||
#...
|
||||
.* start
|
||||
#pass
|
||||
12
ld/testsuite/ld-elf/pr32787.t
Normal file
12
ld/testsuite/ld-elf/pr32787.t
Normal file
@@ -0,0 +1,12 @@
|
||||
SECTIONS {
|
||||
. = SIZEOF_HEADERS;
|
||||
.text : {
|
||||
*(.text)
|
||||
}
|
||||
.data : {
|
||||
_data_start = .;
|
||||
*(.data)
|
||||
}
|
||||
.note.gnu.build-id (NOLOAD) : { *(.note.gnu.build-id) }
|
||||
/DISCARD/ : { *(*) }
|
||||
}
|
||||
Reference in New Issue
Block a user