* elf.c (_bfd_elf_make_section_from_shdr): Don't set SEC_EXCLUDE
	for SHT_GROUP sections.
ld/
	* ldlang.c (lang_add_section): Set SEC_EXCLUDE for SEC_GROUP
	sections when doing a final link.  Clear SEC_EXCLUDE when doing
	a relocable link, except for SEC_DEBUGGING sections.
	* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Use the
	same condition here to drop SEC_EXCLUDE orphan sections.
This commit is contained in:
Alan Modra
2004-05-26 10:23:51 +00:00
parent c23968a218
commit e49f502242
5 changed files with 37 additions and 7 deletions

View File

@ -1096,11 +1096,26 @@ lang_add_section (lang_statement_list_type *ptr,
discard = FALSE;
/* Discard sections marked with SEC_EXCLUDE if we are doing a final
link. Discard debugging sections marked with SEC_EXCLUDE on a
relocatable link too. */
if ((flags & SEC_EXCLUDE) != 0
&& ((flags & SEC_DEBUGGING) != 0 || !link_info.relocatable))
if (link_info.relocatable)
{
/* SEC_EXCLUDE is ignored when doing a relocatable link,
except in the special case of debug info. (See bfd/stabs.c) */
if ((flags & SEC_DEBUGGING) == 0)
flags &= ~SEC_EXCLUDE;
}
else
{
/* SEC_GROUP sections should be dropped on a final link. */
if ((flags & SEC_GROUP) != 0)
flags |= SEC_EXCLUDE;
}
/* Write SEC_EXCLUDE flag back, to simplify later linker code. */
if (section->owner != NULL)
bfd_set_section_flags (section->owner, section, flags);
/* Discard sections marked with SEC_EXCLUDE. */
if ((flags & SEC_EXCLUDE) != 0)
discard = TRUE;
/* Discard input sections which are assigned to a section named