(bfd_elf_gc_sections): Call bfd_generic_gc_sections.
* reloc.c (bfd_mark_used_section): New function.
(bfd_generic_gc_sections): Call bfd_mark_used_section.
+2005-06-09 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (elf_mark_used_section): Delete.
+ (bfd_elf_gc_sections): Call bfd_generic_gc_sections.
+ * reloc.c (bfd_mark_used_section): New function.
+ (bfd_generic_gc_sections): Call bfd_mark_used_section.
+
2005-06-08 Alan Modra <amodra@bigpond.net.au>
* opncls.c (bfd_fopen): Don't set bfd_error unconditionally.
return TRUE;
}
-/* Mark sections containing global symbols. This is called through
- elf_link_hash_traverse. */
-
-static bfd_boolean
-elf_mark_used_section (struct elf_link_hash_entry *h,
- void *data ATTRIBUTE_UNUSED)
-{
- if (h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
-
- if (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- {
- asection *s = h->root.u.def.section;
- if (s != NULL && s->output_section != NULL)
- s->output_section->flags |= SEC_KEEP;
- }
-
- return TRUE;
-}
-
/* Do mark and sweep of unused sections. */
bfd_boolean
struct elf_link_hash_entry *h, Elf_Internal_Sym *);
if (!info->gc_sections)
- {
- /* If we are called when info->gc_sections is 0, we will mark
- all sections containing global symbols for non-relocatable
- link. */
- if (!info->relocatable)
- elf_link_hash_traverse (elf_hash_table (info),
- elf_mark_used_section, NULL);
- return TRUE;
- }
+ return bfd_generic_gc_sections (abfd, info);
if (!get_elf_backend_data (abfd)->can_gc_sections
|| info->relocatable
return TRUE;
}
+/* Mark sections containing global symbols. This is called through
+ bfd_link_hash_traverse. */
+
+static bfd_boolean
+bfd_mark_used_section (struct bfd_link_hash_entry *h,
+ void *data ATTRIBUTE_UNUSED)
+{
+ if (h->type == bfd_link_hash_warning)
+ h = h->u.i.link;
+
+ if (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ {
+ asection *s = h->u.def.section;
+ if (s != NULL && s->output_section != NULL)
+ s->output_section->flags |= SEC_KEEP;
+ }
+
+ return TRUE;
+}
+
/*
INTERNAL_FUNCTION
bfd_generic_gc_sections
DESCRIPTION
Provides default handling for relaxing for back ends which
- don't do section gc -- i.e., does nothing.
+ don't do section gc -- i.e., does nothing besides the special
+ case for marking sections having global symbols.
*/
bfd_boolean
bfd_generic_gc_sections (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info)
{
+ /* If called when info->gc_sections is 0, then mark all sections
+ containing global symbols with SEC_KEEP. */
+ if (!info->gc_sections && !info->relocatable)
+ bfd_link_hash_traverse (info->hash, bfd_mark_used_section, NULL);
return TRUE;
}