* section.c (SEC_KEEP): Update comment.
	* bfd-in2.h: Regenerate.
	* elflink.c (bfd_elf_gc_sections): Ignore SEC_EXCLUDE sections.
	* merge.c (_bfd_merge_sections): Set SEC_KEEP on excluded sections.
	* stabs.c (_bfd_discard_section_stabs): Likewise.
	(_bfd_link_section_stabs): Likewise.  Simplify abs_section check.
ld/
	* ldlang.c (lang_map): Don't say SEC_LINKER_CREATED and SEC_KEEP
	sections have been discarded.
	(lang_do_version_exports_section): Set SEC_KEEP on export section.
	* emultempl/elf32.em (before_allocation): Set SEC_KEEP on warning
	sections.
This commit is contained in:
Alan Modra 2006-10-27 03:22:09 +00:00
parent 7ebede5616
commit a14a5de357
9 changed files with 38 additions and 18 deletions

View File

@ -1,3 +1,12 @@
2006-10-27 Alan Modra <amodra@bigpond.net.au>
* section.c (SEC_KEEP): Update comment.
* bfd-in2.h: Regenerate.
* elflink.c (bfd_elf_gc_sections): Ignore SEC_EXCLUDE sections.
* merge.c (_bfd_merge_sections): Set SEC_KEEP on excluded sections.
* stabs.c (_bfd_discard_section_stabs): Likewise.
(_bfd_link_section_stabs): Likewise. Simplify abs_section check.
2006-10-26 Ben Elliston <bje@au.ibm.com>
* reloc.c (_bfd_relocate_contents): Remove explicit case 0.
@ -12,7 +21,7 @@
(maxq_reloc_map): Likewise.
(maxq_reloc_type_lookup): Remove loop over maxq_reloc_map.
2006-10-26 Ben Elliston <bje@au.ibm.com>
2006-10-26 Ben Elliston <bje@au.ibm.com>
* elf.c (bfd_elf_set_dyn_lib_class): Change second argument type
from int to enum dynamic_lib_link_class lib_class.

View File

@ -1255,7 +1255,9 @@ typedef struct bfd_section
else up the line will take care of it later. */
#define SEC_LINKER_CREATED 0x200000
/* This section should not be subject to garbage collection. */
/* This section should not be subject to garbage collection.
Also set to inform the linker that this section should not be
listed in the link map as discarded. */
#define SEC_KEEP 0x400000
/* This section contains "short" data, and should be placed

View File

@ -9794,7 +9794,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
continue;
for (o = sub->sections; o != NULL; o = o->next)
if ((o->flags & SEC_KEEP) != 0 && !o->gc_mark)
if ((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP && !o->gc_mark)
if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
return FALSE;
}

View File

@ -766,7 +766,7 @@ _bfd_merge_sections (bfd *abfd ATTRIBUTE_UNUSED,
the hash table at all. */
for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
if (secinfo->first_str == NULL)
secinfo->sec->flags |= SEC_EXCLUDE;
secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
}
return TRUE;

View File

@ -294,7 +294,9 @@ CODE_FRAGMENT
. else up the line will take care of it later. *}
.#define SEC_LINKER_CREATED 0x200000
.
. {* This section should not be subject to garbage collection. *}
. {* This section should not be subject to garbage collection.
. Also set to inform the linker that this section should not be
. listed in the link map as discarded. *}
.#define SEC_KEEP 0x400000
.
. {* This section contains "short" data, and should be placed

View File

@ -175,10 +175,8 @@ _bfd_link_section_stabs (bfd *abfd,
prepared to handle them. */
return TRUE;
if ((stabsec->output_section != NULL
&& bfd_is_abs_section (stabsec->output_section))
|| (stabstrsec->output_section != NULL
&& bfd_is_abs_section (stabstrsec->output_section)))
if (bfd_is_abs_section (stabsec->output_section)
|| bfd_is_abs_section (stabstrsec->output_section))
/* At least one of the sections is being discarded from the
link, so we should just ignore them. */
return TRUE;
@ -433,7 +431,7 @@ _bfd_link_section_stabs (bfd *abfd,
++nest;
else if (incl_type == (int) N_EXCL)
/* Keep existing exclusion marks. */
continue;
continue;
else if (nest == 0)
{
*incl_pstridx = (bfd_size_type) -1;
@ -458,8 +456,8 @@ _bfd_link_section_stabs (bfd *abfd,
for that section. */
stabsec->size = (count - skip) * STABSIZE;
if (stabsec->size == 0)
stabsec->flags |= SEC_EXCLUDE;
stabstrsec->flags |= SEC_EXCLUDE;
stabsec->flags |= SEC_EXCLUDE | SEC_KEEP;
stabstrsec->flags |= SEC_EXCLUDE | SEC_KEEP;
sinfo->stabstr->size = _bfd_stringtab_size (sinfo->strings);
/* Calculate the `cumulative_skips' array now that stabs have been
@ -611,7 +609,7 @@ _bfd_discard_section_stabs (bfd *abfd,
/* Shrink the stabsec as needed. */
stabsec->size -= skip * STABSIZE;
if (stabsec->size == 0)
stabsec->flags |= SEC_EXCLUDE;
stabsec->flags |= SEC_EXCLUDE | SEC_KEEP;
/* Recalculate the `cumulative_skips' array now that stabs have been
deleted for this section. */

View File

@ -1,3 +1,11 @@
2006-10-27 Alan Modra <amodra@bigpond.net.au>
* ldlang.c (lang_map): Don't say SEC_LINKER_CREATED and SEC_KEEP
sections have been discarded.
(lang_do_version_exports_section): Set SEC_KEEP on export section.
* emultempl/elf32.em (before_allocation): Set SEC_KEEP on warning
sections.
2006-10-26 Joseph S. Myers <joseph@codesourcery.com>
Mark Mitchell <mark@codesourcery.com>

View File

@ -1214,7 +1214,7 @@ ${ELF_INTERPRETER_SET_DEFAULT}
/* Also set SEC_EXCLUDE, so that symbols defined in the warning
section don't get copied to the output. */
s->flags |= SEC_EXCLUDE;
s->flags |= SEC_EXCLUDE | SEC_KEEP;
}
}

View File

@ -1736,8 +1736,9 @@ lang_map (void)
continue;
for (s = file->the_bfd->sections; s != NULL; s = s->next)
if (s->output_section == NULL
|| s->output_section->owner != output_bfd)
if ((s->output_section == NULL
|| s->output_section->owner != output_bfd)
&& (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
{
if (! dis_header_printed)
{
@ -4629,7 +4630,7 @@ lang_size_sections_1
&newdot);
/* This symbol is relative to this section. */
if ((tree->type.node_class == etree_provided
if ((tree->type.node_class == etree_provided
|| tree->type.node_class == etree_assign)
&& (tree->assign.dst [0] != '.'
|| tree->assign.dst [1] != '\0'))
@ -6922,7 +6923,7 @@ lang_do_version_exports_section (void)
/* Do not free the contents, as we used them creating the regex. */
/* Do not include this section in the link. */
sec->flags |= SEC_EXCLUDE;
sec->flags |= SEC_EXCLUDE | SEC_KEEP;
}
lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);