DWARF LTO debug sections vs. .stabstr

The exception for debug sections in clearing SEC_EXCLUDE when
relocatable was really for one specific debug section, so let's make
it do just that.

bfd/
	PR 27590
	* elf.c (_bfd_elf_make_section_from_shdr): Remove SHF_EXCLUDE
	test for .gnu.debuglto*.
ld/
	PR 27590
	* ldlang.c (lang_gc_sections): Clear SEC_EXCLUDE when relocatable
	for all sections except .stabstr.
This commit is contained in:
Alan Modra 2021-03-20 10:22:37 +10:30
parent 6536577167
commit 15407e7e0d
4 changed files with 17 additions and 7 deletions

View File

@ -1,7 +1,13 @@
2021-03-20 Alan Modra <amodra@gmail.com>
PR 27590
* elf.c (_bfd_elf_make_section_from_shdr): Remove SHF_EXCLUDE
test for .gnu.debuglto*.
2021-03-18 H.J. Lu <hongjiu.lu@intel.com> 2021-03-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/27590 PR ld/27590
* elf.c (_bfd_elf_make_section_from_shdr): Treate * elf.c (_bfd_elf_make_section_from_shdr): Treat
.gnu.debuglto_.debug_ section as debugging section unless it is .gnu.debuglto_.debug_ section as debugging section unless it is
marked with SHF_EXCLUDE. marked with SHF_EXCLUDE.
* elflink.c (elf_create_symbuf): Revert commit 994b2513281. * elflink.c (elf_create_symbuf): Revert commit 994b2513281.

View File

@ -1085,10 +1085,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
if (name [0] == '.') if (name [0] == '.')
{ {
if (strncmp (name, ".debug", 6) == 0 if (strncmp (name, ".debug", 6) == 0
/* NB: Treate .gnu.debuglto_.debug_ section as debugging || strncmp (name, ".gnu.debuglto_.debug_", 21) == 0
section unless it is marked with SHF_EXCLUDE. */
|| ((flags & SEC_EXCLUDE) == 0
&& strncmp (name, ".gnu.debuglto_.debug_", 21) == 0)
|| strncmp (name, ".gnu.linkonce.wi.", 17) == 0 || strncmp (name, ".gnu.linkonce.wi.", 17) == 0
|| strncmp (name, ".zdebug", 7) == 0) || strncmp (name, ".zdebug", 7) == 0)
flags |= SEC_DEBUGGING | SEC_ELF_OCTETS; flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;

View File

@ -1,3 +1,9 @@
2021-03-20 Alan Modra <amodra@gmail.com>
PR 27590
* ldlang.c (lang_gc_sections): Clear SEC_EXCLUDE when relocatable
for all sections except .stabstr.
2021-03-19 Alan Modra <amodra@gmail.com> 2021-03-19 Alan Modra <amodra@gmail.com>
PR 27590 PR 27590

View File

@ -7565,7 +7565,7 @@ lang_gc_sections (void)
lang_gc_sections_1 (statement_list.head); lang_gc_sections_1 (statement_list.head);
/* SEC_EXCLUDE is ignored when doing a relocatable link, except in /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
the special case of debug info. (See bfd/stabs.c) the special case of .stabstr debug info. (See bfd/stabs.c)
Twiddle the flag here, to simplify later linker code. */ Twiddle the flag here, to simplify later linker code. */
if (bfd_link_relocatable (&link_info)) if (bfd_link_relocatable (&link_info))
{ {
@ -7577,7 +7577,8 @@ lang_gc_sections (void)
continue; continue;
#endif #endif
for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next) for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
if ((sec->flags & SEC_DEBUGGING) == 0) if ((sec->flags & SEC_DEBUGGING) == 0
|| strcmp (sec->name, ".stabstr") != 0)
sec->flags &= ~SEC_EXCLUDE; sec->flags &= ~SEC_EXCLUDE;
} }
} }