bfd/
* 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:
parent
7ebede5616
commit
a14a5de357
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
14
bfd/stabs.c
14
bfd/stabs.c
@ -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. */
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user