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:
parent
50e1d299ef
commit
eb026f09eb
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue