Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / xcofflink.c
index 75977501a89290f71a48254524a19ac608f314d0..d3653e3ba572922c8205b11c32b69d8d75f2ed9e 100644 (file)
@@ -1,5 +1,5 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright (C) 1995-2015 Free Software Foundation, Inc.
+   Copyright (C) 1995-2016 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.
@@ -997,7 +997,7 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
   n->next = NULL;
 
-  if (abfd->my_archive == NULL)
+  if (abfd->my_archive == NULL || bfd_is_thin_archive (abfd->my_archive))
     {
       if (!bfd_xcoff_split_import_path (abfd, abfd->filename,
                                        &n->path, &n->file))
@@ -1992,9 +1992,10 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
                     sure the XCOFF linker is wholly prepared to
                     handle them, and that would only be a warning,
                     not an error.  */
-                 if (! ((*info->callbacks->multiple_definition)
-                        (info, &(*sym_hash)->root, NULL, NULL, (bfd_vma) 0)))
-                   goto error_return;
+                 (*info->callbacks->multiple_definition) (info,
+                                                          &(*sym_hash)->root,
+                                                          NULL, NULL,
+                                                          (bfd_vma) 0);
                  /* Try not to give this error too many times.  */
                  (*sym_hash)->flags &= ~XCOFF_MULTIPLY_DEFINED;
                }
@@ -2291,7 +2292,7 @@ xcoff_link_check_dynamic_ar_symbols (bfd *abfd,
        {
          if (!(*info->callbacks
                ->add_archive_element) (info, abfd, name, subsbfd))
-           return FALSE;
+           continue;
          *pneeded = TRUE;
          return TRUE;
        }
@@ -2363,7 +2364,7 @@ xcoff_link_check_ar_symbols (bfd *abfd,
            {
              if (!(*info->callbacks
                    ->add_archive_element) (info, abfd, name, subsbfd))
-               return FALSE;
+               continue;
              *pneeded = TRUE;
              return TRUE;
            }
@@ -3117,11 +3118,8 @@ bfd_xcoff_import_symbol (bfd *output_bfd,
       if (h->root.type == bfd_link_hash_defined
          && (! bfd_is_abs_section (h->root.u.def.section)
              || h->root.u.def.value != val))
-       {
-         if (! ((*info->callbacks->multiple_definition)
-                (info, &h->root, output_bfd, bfd_abs_section_ptr, val)))
-           return FALSE;
-       }
+       (*info->callbacks->multiple_definition) (info, &h->root, output_bfd,
+                                                bfd_abs_section_ptr, val);
 
       h->root.type = bfd_link_hash_defined;
       h->root.u.def.section = bfd_abs_section_ptr;
@@ -4145,7 +4143,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
   if (! flinfo->info->keep_memory)
     copy = TRUE;
   hash = TRUE;
-  if ((output_bfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
+  if (flinfo->info->traditional_format)
     hash = FALSE;
 
   if (! _bfd_coff_get_external_symbols (input_bfd))
@@ -4942,10 +4940,9 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
                               if (name == NULL)
                                 return FALSE;
 
-                              if (!(*flinfo->info->callbacks->unattached_reloc)
-                                  (flinfo->info, name, input_bfd, o,
-                                   irel->r_vaddr))
-                                return FALSE;
+                             (*flinfo->info->callbacks->unattached_reloc)
+                               (flinfo->info, name,
+                                input_bfd, o, irel->r_vaddr);
                             }
                        }
                    }
@@ -5118,7 +5115,8 @@ xcoff_find_tc0 (bfd *output_bfd, struct xcoff_final_link_info *flinfo)
   xcoff_data (output_bfd)->sntoc = section_index;
 
   /* Fill out the TC0 symbol.  */
-  if (!bfd_xcoff_put_symbol_name (output_bfd, flinfo->strtab, &irsym, "TOC"))
+  if (!bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, flinfo->strtab,
+                                 &irsym, "TOC"))
     return FALSE;
   irsym.n_value = best_address;
   irsym.n_scnum = section_index;
@@ -5383,7 +5381,8 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
         the reloc.  */
       if (flinfo->info->strip != strip_all)
        {
-         result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->strtab,
+         result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->info,
+                                             flinfo->strtab,
                                              &irsym, h->root.root.string);
          if (!result)
            return FALSE;
@@ -5557,8 +5556,8 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
 
   h->indx = obj_raw_syment_count (output_bfd);
 
-  result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->strtab, &isym,
-                                     h->root.root.string);
+  result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, flinfo->strtab,
+                                     &isym, h->root.root.string);
   if (!result)
     return FALSE;
 
@@ -5710,9 +5709,8 @@ xcoff_reloc_link_order (bfd *output_bfd,
                                     FALSE, FALSE, TRUE));
   if (h == NULL)
     {
-      if (! ((*flinfo->info->callbacks->unattached_reloc)
-            (flinfo->info, link_order->u.reloc.p->u.name, NULL, NULL, (bfd_vma) 0)))
-       return FALSE;
+      (*flinfo->info->callbacks->unattached_reloc)
+       (flinfo->info, link_order->u.reloc.p->u.name, NULL, NULL, (bfd_vma) 0);
       return TRUE;
     }
 
@@ -5750,13 +5748,9 @@ xcoff_reloc_link_order (bfd *output_bfd,
        case bfd_reloc_outofrange:
          abort ();
        case bfd_reloc_overflow:
-         if (! ((*flinfo->info->callbacks->reloc_overflow)
-                (flinfo->info, NULL, link_order->u.reloc.p->u.name,
-                 howto->name, addend, NULL, NULL, (bfd_vma) 0)))
-           {
-             free (buf);
-             return FALSE;
-           }
+         (*flinfo->info->callbacks->reloc_overflow)
+           (flinfo->info, NULL, link_order->u.reloc.p->u.name,
+            howto->name, addend, NULL, NULL, (bfd_vma) 0);
          break;
        }
       ok = bfd_set_section_contents (output_bfd, output_section, (void *) buf,
@@ -6280,10 +6274,9 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
            {
              if ((*rel_hash)->indx < 0)
                {
-                 if (! ((*info->callbacks->unattached_reloc)
-                        (info, (*rel_hash)->root.root.string,
-                         NULL, o, irel->r_vaddr)))
-                   goto error_return;
+                 (*info->callbacks->unattached_reloc)
+                   (info, (*rel_hash)->root.root.string,
+                    NULL, o, irel->r_vaddr);
                  (*rel_hash)->indx = 0;
                }
              irel->r_symndx = (*rel_hash)->indx;
@@ -6296,10 +6289,9 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
        {
          if (toc_rel_hash->h->u.toc_indx < 0)
            {
-             if (! ((*info->callbacks->unattached_reloc)
-                    (info, toc_rel_hash->h->root.root.string,
-                     NULL, o, toc_rel_hash->rel->r_vaddr)))
-               goto error_return;
+             (*info->callbacks->unattached_reloc)
+               (info, toc_rel_hash->h->root.root.string,
+                NULL, o, toc_rel_hash->rel->r_vaddr);
              toc_rel_hash->h->u.toc_indx = 0;
            }
          toc_rel_hash->rel->r_symndx = toc_rel_hash->h->u.toc_indx;
This page took 0.025666 seconds and 4 git commands to generate.