mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
garbage collect debug sections when no alloc sections are kept
The pr20882 testcase fails on a number of targets that add attribute or note sections to object files, and the default linker script says those sections should be kept. This patch changes --gc-sections to drop debug and special sections like .comment when no SEC_ALLOC section in an object file is kept. The assumption is that debug sections are describing code and data that will become part of the final image in memory. * elflink.c (_bfd_elf_gc_mark_extra_sections): Don't keep debug and special sections when no non-note alloc sections in an object are kept.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2017-05-19 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elflink.c (_bfd_elf_gc_mark_extra_sections): Don't keep
|
||||||
|
debug and special sections when no non-note alloc sections in an
|
||||||
|
object are kept.
|
||||||
|
|
||||||
2017-05-18 Alan Modra <amodra@gmail.com>
|
2017-05-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* arc-got.h: Don't compare boolean values against TRUE or FALSE.
|
* arc-got.h: Don't compare boolean values against TRUE or FALSE.
|
||||||
|
@ -12961,7 +12961,9 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
|
|||||||
{
|
{
|
||||||
if ((isec->flags & SEC_LINKER_CREATED) != 0)
|
if ((isec->flags & SEC_LINKER_CREATED) != 0)
|
||||||
isec->gc_mark = 1;
|
isec->gc_mark = 1;
|
||||||
else if (isec->gc_mark)
|
else if (isec->gc_mark
|
||||||
|
&& (isec->flags & SEC_ALLOC) != 0
|
||||||
|
&& elf_section_type (isec) != SHT_NOTE)
|
||||||
some_kept = TRUE;
|
some_kept = TRUE;
|
||||||
|
|
||||||
if (!debug_frag_seen
|
if (!debug_frag_seen
|
||||||
@ -12970,8 +12972,8 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
|
|||||||
debug_frag_seen = TRUE;
|
debug_frag_seen = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If no section in this file will be kept, then we can
|
/* If no non-note alloc section in this file will be kept, then
|
||||||
toss out the debug and special sections. */
|
we can toss out the debug and special sections. */
|
||||||
if (!some_kept)
|
if (!some_kept)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user