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:
Alan Modra 2017-05-19 12:40:10 +09:30
parent 50e1d299ef
commit eb026f09eb
2 changed files with 11 additions and 3 deletions

View File

@ -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>
* arc-got.h: Don't compare boolean values against TRUE or FALSE.

View File

@ -12961,7 +12961,9 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
{
if ((isec->flags & SEC_LINKER_CREATED) != 0)
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;
if (!debug_frag_seen
@ -12970,8 +12972,8 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
debug_frag_seen = TRUE;
}
/* If no section in this file will be kept, then we can
toss out the debug and special sections. */
/* If no non-note alloc section in this file will be kept, then
we can toss out the debug and special sections. */
if (!some_kept)
continue;