* elflink.c (elf_mark_used_section): Delete.
authorAlan Modra <amodra@gmail.com>
Thu, 9 Jun 2005 02:02:18 +0000 (02:02 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 9 Jun 2005 02:02:18 +0000 (02:02 +0000)
(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.

bfd/ChangeLog
bfd/elflink.c
bfd/reloc.c

index 58f3b9129b8dec38cfb4d20259a17de0814955f5..0b142675346fd068bcef133f3354bb949fb02dd6 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 5dd51384dc203dc5104fdd8e055a55f05c311755..d90be1c2b7fa407c09399ea0c482d46d007bd7cf 100644 (file)
@@ -9067,27 +9067,6 @@ elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h,
   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
@@ -9100,15 +9079,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
      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
index 078529d1a357c40fa3f722c73d59c77fa6692127..207b775ab93250f51f511cf4e2a39a013a05c374 100644 (file)
@@ -4516,6 +4516,27 @@ bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
   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
@@ -4526,13 +4547,18 @@ SYNOPSIS
 
 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;
 }