* elf.c (bfd_section_from_shdr): Remove extraneous breaks.
[deliverable/binutils-gdb.git] / bfd / xcofflink.c
index d4028f0c46d7e0edf5a4979edc489a9a673ecd3d..e76b95cdd51687f727ab2e69f663a1f95c927b58 100644 (file)
@@ -1,6 +1,6 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+   2005, 2006 Free Software Foundation, Inc.
    Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -17,7 +17,7 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02110-1301, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
@@ -444,7 +444,8 @@ _bfd_xcoff_bfd_link_hash_table_create (bfd *abfd)
   ret = bfd_malloc (amt);
   if (ret == NULL)
     return NULL;
-  if (! _bfd_link_hash_table_init (&ret->root, abfd, xcoff_link_hash_newfunc))
+  if (!_bfd_link_hash_table_init (&ret->root, abfd, xcoff_link_hash_newfunc,
+                                 sizeof (struct xcoff_link_hash_entry)))
     {
       free (ret);
       return NULL;
@@ -793,27 +794,27 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
       if (xcoff_hash_table (info)->loader_section == NULL)
        {
          asection *lsec;
+         flagword flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
 
-         lsec = bfd_make_section_anyway (abfd, ".loader");
+         lsec = bfd_make_section_anyway_with_flags (abfd, ".loader", flags);
          if (lsec == NULL)
            goto end_return;
 
          xcoff_hash_table (info)->loader_section = lsec;
-         lsec->flags |= SEC_HAS_CONTENTS | SEC_IN_MEMORY;
        }
 
       /* Likewise for the linkage section.  */
       if (xcoff_hash_table (info)->linkage_section == NULL)
        {
          asection *lsec;
+         flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+                           | SEC_IN_MEMORY);
 
-         lsec = bfd_make_section_anyway (abfd, ".gl");
+         lsec = bfd_make_section_anyway_with_flags (abfd, ".gl", flags);
          if (lsec == NULL)
            goto end_return;
 
          xcoff_hash_table (info)->linkage_section = lsec;
-         lsec->flags |= (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
-                         | SEC_IN_MEMORY);
          lsec->alignment_power = 2;
        }
 
@@ -821,14 +822,14 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
       if (xcoff_hash_table (info)->toc_section == NULL)
        {
          asection *tsec;
+         flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+                           | SEC_IN_MEMORY);
 
-         tsec = bfd_make_section_anyway (abfd, ".tc");
+         tsec = bfd_make_section_anyway_with_flags (abfd, ".tc", flags);
          if (tsec == NULL)
            goto end_return;
 
          xcoff_hash_table (info)->toc_section = tsec;
-         tsec->flags |= (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
-                         | SEC_IN_MEMORY);
          tsec->alignment_power = 2;
        }
 
@@ -836,14 +837,14 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
       if (xcoff_hash_table (info)->descriptor_section == NULL)
        {
          asection *dsec;
+         flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+                           | SEC_IN_MEMORY);
 
-         dsec = bfd_make_section_anyway (abfd, ".ds");
+         dsec = bfd_make_section_anyway_with_flags (abfd, ".ds", flags);
          if (dsec == NULL)
            goto end_return;
 
          xcoff_hash_table (info)->descriptor_section = dsec;
-         dsec->flags |= (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
-                         | SEC_IN_MEMORY);
          dsec->alignment_power = 2;
        }
 
@@ -852,13 +853,13 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info)
          && info->strip != strip_all)
        {
          asection *dsec;
+         flagword flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY;
 
-         dsec = bfd_make_section_anyway (abfd, ".debug");
+         dsec = bfd_make_section_anyway_with_flags (abfd, ".debug", flags);
          if (dsec == NULL)
            goto end_return;
 
          xcoff_hash_table (info)->debug_section = dsec;
-         dsec->flags |= SEC_HAS_CONTENTS | SEC_IN_MEMORY;
        }
     }
 
@@ -1551,16 +1552,17 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
            {
              /* The linker script puts the .td section in the data
                 section after the .tc section.  */
-             csect = bfd_make_section_anyway (abfd, ".td");
+             csect = bfd_make_section_anyway_with_flags (abfd, ".td",
+                                                         SEC_ALLOC);
            }
          else
-           csect = bfd_make_section_anyway (abfd, ".bss");
+           csect = bfd_make_section_anyway_with_flags (abfd, ".bss",
+                                                       SEC_ALLOC);
 
          if (csect == NULL)
            goto error_return;
          csect->vma = sym.n_value;
          csect->size = aux.x_csect.x_scnlen.l;
-         csect->flags |= SEC_ALLOC;
          csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp);
          /* There are a number of other fields and section flags
             which we do not bother to set.  */
@@ -5380,7 +5382,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
     {
       o->reloc_count = 0;
       o->lineno_count = 0;
-      for (p = o->link_order_head; p != NULL; p = p->next)
+      for (p = o->map_head.link_order; p != NULL; p = p->next)
        {
          if (p->type == bfd_indirect_link_order)
            {
@@ -5459,8 +5461,8 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
                         that needs padding.  This requires unlinking and
                         relinking the bfd's section list.  */
 
-                     n = bfd_make_section_anyway (abfd, ".pad");
-                     n->flags = SEC_HAS_CONTENTS;
+                     n = bfd_make_section_anyway_with_flags (abfd, ".pad",
+                                                             SEC_HAS_CONTENTS);
                      n->alignment_power = 0;
 
                      bfd_section_list_remove (abfd, n);
@@ -5669,7 +5671,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
      for a single input file at once.  */
   for (o = abfd->sections; o != NULL; o = o->next)
     {
-      for (p = o->link_order_head; p != NULL; p = p->next)
+      for (p = o->map_head.link_order; p != NULL; p = p->next)
        {
          if (p->type == bfd_indirect_link_order
              && p->u.indirect.section->owner->xvec == abfd->xvec)
This page took 0.025398 seconds and 4 git commands to generate.