OSDN Git Service

bfd/
authorH.J. Lu <hjl@lucon.org>
Wed, 16 Mar 2005 21:52:41 +0000 (21:52 +0000)
committerH.J. Lu <hjl@lucon.org>
Wed, 16 Mar 2005 21:52:41 +0000 (21:52 +0000)
2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>

* elflink.c (elf_mark_used_section): New.
(bfd_elf_gc_sections): Call elf_gc_mark_section for
non-relocatable link if we don't do GC.

include/

2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>

* bfdlink.h (bfd_link_info): Add gc_sections.

ld/

2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>

* emultempl/elf32.em (gld${EMULATION_NAME}_finish): Remove
unused empty output sections for non-relocatable link.

* ld.h (args_type): Remove gc_sections.

* ldlang.c (lang_mark_used_section): New.
(lang_gc_sections): Use link_info.gc_sections instead of
command_line.gc_sections.
* ldmain.c (main): Likewise.
* lexsup.c (parse_args): Likewise.
* ldlang.c (lang_process): Call lang_mark_used_section.

* ldmain.c (main): Initialize link_info.gc_sections to FALSE.

ld/testsuite/

2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>

* ld-alpha/tlsbin.rd: Updated for empty section removal.
* ld-alpha/tlsbinr.rd: Likewise.
* ld-alpha/tlspic.rd: Likewise.
* ld-arm/mixed-lib.sym: Likewise.
* ld-i386/tlsbin.rd: Likewise.
* ld-i386/tlsnopic.rd: Likewise.
* ld-i386/tlspic.rd: Likewise.
* ld-ia64/tlsbin.rd: Likewise.
* ld-ia64/tlspic.rd: Likewise.
* ld-powerpc/apuinfo.rd: Likewise.
* ld-powerpc/powerpc.exp: Likewise.
* ld-powerpc/tlsexe32.r: Likewise.
* ld-s390/tlsbin.rd: Likewise.
* ld-s390/tlsbin_64.rd: Likewise.
* ld-s390/tlspic.rd: Likewise.
* ld-s390/tlspic_64.rd: Likewise.
* ld-sh/tlsbin-2.d: Likewise.
* ld-sh/tlspic-2.d: Likewise.
* ld-sparc/tlssunbin32.rd: Likewise.
* ld-sparc/tlssunnopic32.rd: Likewise.
* ld-sparc/tlssunpic32.rd: Likewise.
* ld-x86-64/tlsbin.rd: Likewise.
* ld-x86-64/tlspic.rd: Likewise.

bfd/ChangeLog
bfd/elflink.c
include/ChangeLog
include/bfdlink.h

index 9aa67e9..606bb59 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elflink.c (elf_mark_used_section): New.
+       (bfd_elf_gc_sections): Call elf_gc_mark_section for
+       non-relocatable link if we don't do GC.
+
 2005-03-16  Nick Clifton  <nickc@redhat.com>
            Ben Elliston  <bje@au.ibm.com>
 
index 1721f3f..9f1be5f 100644 (file)
@@ -8996,7 +8996,28 @@ 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 *global 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->output_section;
+      if (s)
+       s->flags |= SEC_KEEP;
+    }
+
+  return TRUE;
+}
 /* Do mark and sweep of unused sections.  */
 
 bfd_boolean
@@ -9008,6 +9029,17 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
     (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
      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-relocable
+        link.  */
+      if (!info->relocatable)
+       elf_link_hash_traverse (elf_hash_table (info),
+                               elf_mark_used_section, NULL);
+      return TRUE;
+    }
+
   if (!get_elf_backend_data (abfd)->can_gc_sections
       || info->relocatable
       || info->emitrelocations
index 9dee8dd..92c170e 100644 (file)
@@ -1,3 +1,7 @@
+2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * bfdlink.h (bfd_link_info): Add gc_sections.
+
 2005-03-12  Zack Weinberg  <zack@codesourcery.com>
 
        * opcode/arm.h: Adjust comments for ARM_EXT_V4T and ARM_EXT_V5T.
index 9d93154..ad32906 100644 (file)
@@ -324,6 +324,9 @@ struct bfd_link_info
   /* TRUE if we should warn when adding a DT_TEXTREL to a shared object.  */
   unsigned int warn_shared_textrel: 1;
 
+  /* TRUE if unreferenced sections should be removed.  */
+  unsigned int gc_sections: 1;
+
   /* What to do with unresolved symbols in an object file.
      When producing executables the default is GENERATE_ERROR.
      When producing shared libraries the default is IGNORE.  The