]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - bfd/xcofflink.c
Automatic date update in version.in
[thirdparty/binutils-gdb.git] / bfd / xcofflink.c
index d3653e3ba572922c8205b11c32b69d8d75f2ed9e..e7f50d169069477278e9316b561f875a9ff356bb 100644 (file)
@@ -1,5 +1,5 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   Copyright (C) 1995-2019 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.
@@ -828,9 +828,9 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
      output file.  */
    if (info->output_bfd->xvec != abfd->xvec)
     {
-      (*_bfd_error_handler)
-       (_("%s: XCOFF shared object when not producing XCOFF output"),
-        bfd_get_filename (abfd));
+      _bfd_error_handler
+       (_("%pB: XCOFF shared object when not producing XCOFF output"),
+        abfd);
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
     }
@@ -849,9 +849,9 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
   lsec = bfd_get_section_by_name (abfd, ".loader");
   if (lsec == NULL)
     {
-      (*_bfd_error_handler)
-       (_("%s: dynamic object with no .loader section"),
-        bfd_get_filename (abfd));
+      _bfd_error_handler
+       (_("%pB: dynamic object with no .loader section"),
+        abfd);
       bfd_set_error (bfd_error_no_symbols);
       return FALSE;
     }
@@ -1366,7 +1366,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
          if (csect != NULL)
            *csect_cache = csect;
          else if (first_csect == NULL
-                   || sym.n_sclass == C_FILE || sym.n_sclass == C_DWARF)
+                  || sym.n_sclass == C_FILE || sym.n_sclass == C_DWARF)
            *csect_cache = coff_section_from_bfd_index (abfd, sym.n_scnum);
          else
            *csect_cache = NULL;
@@ -1408,8 +1408,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
              enclosing = xcoff_section_data (abfd, csect)->enclosing;
              if (enclosing == NULL)
                {
-                 (*_bfd_error_handler)
-                   (_("%B: `%s' has line numbers but no enclosing section"),
+                 _bfd_error_handler
+                   /* xgettext:c-format */
+                   (_("%pB: `%s' has line numbers but no enclosing section"),
                     abfd, name);
                  bfd_set_error (bfd_error_bad_value);
                  goto error_return;
@@ -1460,8 +1461,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
       /* Pick up the csect auxiliary information.  */
       if (sym.n_numaux == 0)
        {
-         (*_bfd_error_handler)
-           (_("%B: class %d symbol `%s' has no aux entries"),
+         _bfd_error_handler
+           /* xgettext:c-format */
+           (_("%pB: class %d symbol `%s' has no aux entries"),
             abfd, sym.n_sclass, name);
          bfd_set_error (bfd_error_bad_value);
          goto error_return;
@@ -1482,8 +1484,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
       switch (smtyp)
        {
        default:
-         (*_bfd_error_handler)
-           (_("%B: symbol `%s' has unrecognized csect type %d"),
+         _bfd_error_handler
+           /* xgettext:c-format */
+           (_("%pB: symbol `%s' has unrecognized csect type %d"),
             abfd, name, smtyp);
          bfd_set_error (bfd_error_bad_value);
          goto error_return;
@@ -1494,10 +1497,12 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
              || sym.n_scnum != N_UNDEF
              || aux.x_csect.x_scnlen.l != 0)
            {
-             (*_bfd_error_handler)
-               (_("%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d"),
+             _bfd_error_handler
+               /* xgettext:c-format */
+               (_("%pB: bad XTY_ER symbol `%s': class %d scnum %d "
+                  "scnlen %" PRId64),
                 abfd, name, sym.n_sclass, sym.n_scnum,
-                aux.x_csect.x_scnlen.l);
+                (int64_t) aux.x_csect.x_scnlen.l);
              bfd_set_error (bfd_error_bad_value);
              goto error_return;
            }
@@ -1523,9 +1528,10 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
              if (sym.n_sclass != C_HIDEXT
                  || aux.x_csect.x_scnlen.l != 0)
                {
-                 (*_bfd_error_handler)
-                   (_("%B: XMC_TC0 symbol `%s' is class %d scnlen %d"),
-                    abfd, name, sym.n_sclass, aux.x_csect.x_scnlen.l);
+                 _bfd_error_handler
+                   /* xgettext:c-format */
+                   (_("%pB: XMC_TC0 symbol `%s' is class %d scnlen %" PRId64),
+                    abfd, name, sym.n_sclass, (int64_t) aux.x_csect.x_scnlen.l);
                  bfd_set_error (bfd_error_bad_value);
                  goto error_return;
                }
@@ -1669,8 +1675,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
                    || ((bfd_vma) sym.n_value + aux.x_csect.x_scnlen.l
                        > enclosing->vma + enclosing->size)))
              {
-               (*_bfd_error_handler)
-                 (_("%B: csect `%s' not in enclosing section"),
+               _bfd_error_handler
+                 /* xgettext:c-format */
+                 (_("%pB: csect `%s' not in enclosing section"),
                   abfd, name);
                bfd_set_error (bfd_error_bad_value);
                goto error_return;
@@ -1776,13 +1783,14 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
              }
            if (bad)
              {
-               (*_bfd_error_handler)
-                 (_("%B: misplaced XTY_LD `%s'"),
+               _bfd_error_handler
+                 /* xgettext:c-format */
+                 (_("%pB: misplaced XTY_LD `%s'"),
                   abfd, name);
                bfd_set_error (bfd_error_bad_value);
                goto error_return;
              }
-           csect = section;
+           csect = section;
            value = sym.n_value - csect->vma;
          }
          break;
@@ -1919,7 +1927,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
             We also have to handle the case of statically linking a
             shared object, which will cause symbol redefinitions,
             although this is an easier case to detect.  */
-         else if (info->output_bfd->xvec == abfd->xvec)
+         else if (info->output_bfd->xvec == abfd->xvec)
            {
              if (! bfd_is_und_section (section))
                *sym_hash = xcoff_link_hash_lookup (xcoff_hash_table (info),
@@ -2032,7 +2040,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
                  = csect->alignment_power;
            }
 
-         if (info->output_bfd->xvec == abfd->xvec)
+         if (info->output_bfd->xvec == abfd->xvec)
            {
              int flag;
 
@@ -2073,7 +2081,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
     {
       /* Debugging sections have no csects.  */
       if (bfd_get_section_flags (abfd, o) & SEC_DEBUGGING)
-        continue;
+       continue;
 
       /* Reset the section size and the line number count, since the
         data is now attached to the csects.  Don't reset the size of
@@ -2096,9 +2104,10 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
            {
              if (*rel_csect == NULL)
                {
-                 (*_bfd_error_handler)
-                   (_("%B: reloc %s:%d not in csect"),
-                    abfd, o->name, i);
+                 _bfd_error_handler
+                   /* xgettext:c-format */
+                   (_("%pB: reloc %s:%" PRId64 " not in csect"),
+                    abfd, o->name, (int64_t) i);
                  bfd_set_error (bfd_error_bad_value);
                  goto error_return;
                }
@@ -2106,7 +2115,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
              /* We identify all function symbols that are the target
                 of a relocation, so that we can create glue code for
                 functions imported from dynamic objects.  */
-             if (info->output_bfd->xvec == abfd->xvec
+             if (info->output_bfd->xvec == abfd->xvec
                  && *rel_csect != bfd_und_section_ptr
                  && obj_xcoff_sym_hashes (abfd)[rel->r_symndx] != NULL)
                {
@@ -2358,7 +2367,7 @@ xcoff_link_check_ar_symbols (bfd *abfd,
             undefined references in shared objects.  */
          if (h != NULL
              && h->type == bfd_link_hash_undefined
-             && (info->output_bfd->xvec != abfd->xvec
+             && (info->output_bfd->xvec != abfd->xvec
                  || (((struct xcoff_link_hash_entry *) h)->flags
                      & XCOFF_DEF_DYNAMIC) == 0))
            {
@@ -2678,10 +2687,7 @@ xcoff_need_ldrel_p (struct bfd_link_info *info, struct internal_reloc *rel,
     case R_RLA:
       /* Absolute relocations against absolute symbols can be
         resolved statically.  */
-      if (h != NULL
-         && (h->root.type == bfd_link_hash_defined
-             || h->root.type == bfd_link_hash_defweak)
-         && bfd_is_abs_section (h->root.u.def.section))
+      if (h != NULL && bfd_is_abs_symbol (&h->root))
        return FALSE;
 
       return TRUE;
@@ -3013,7 +3019,7 @@ xcoff_sweep (struct bfd_link_info *info)
                  || o == xcoff_hash_table (info)->loader_section
                  || o == xcoff_hash_table (info)->linkage_section
                  || o == xcoff_hash_table (info)->descriptor_section
-                  || (bfd_get_section_flags (sub, o) & SEC_DEBUGGING)
+                 || (bfd_get_section_flags (sub, o) & SEC_DEBUGGING)
                  || strcmp (o->name, ".debug") == 0)
                o->flags |= SEC_MARK;
              else
@@ -3116,7 +3122,7 @@ bfd_xcoff_import_symbol (bfd *output_bfd,
   if (val != (bfd_vma) -1)
     {
       if (h->root.type == bfd_link_hash_defined
-         && (! bfd_is_abs_section (h->root.u.def.section)
+         && (!bfd_is_abs_symbol (&h->root)
              || h->root.u.def.value != val))
        (*info->callbacks->multiple_definition) (info, &h->root, output_bfd,
                                                 bfd_abs_section_ptr, val);
@@ -3187,7 +3193,7 @@ bfd_xcoff_link_count_reloc (bfd *output_bfd,
                                     FALSE));
   if (h == NULL)
     {
-      (*_bfd_error_handler) (_("%s: no such symbol"), name);
+      _bfd_error_handler (_("%s: no such symbol"), name);
       bfd_set_error (bfd_error_no_symbols);
       return FALSE;
     }
@@ -3291,7 +3297,7 @@ xcoff_build_ldsym (struct xcoff_loader_info *ldinfo,
   if ((h->flags & XCOFF_EXPORT) != 0
       && (h->flags & XCOFF_WAS_UNDEFINED) != 0)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("warning: attempt to export undefined symbol `%s'"),
         h->root.root.string);
       return TRUE;
@@ -3670,7 +3676,7 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd,
                                     "__rtinit", FALSE, FALSE, TRUE);
       if (hsym == NULL)
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            (_("error: undefined symbol __rtinit"));
          return FALSE;
        }
@@ -4049,8 +4055,9 @@ xcoff_create_ldrel (bfd *output_bfd, struct xcoff_final_link_info *flinfo,
        ldrel.l_symndx = 2;
       else
        {
-         (*_bfd_error_handler)
-           (_("%B: loader reloc in unrecognized section `%s'"),
+         _bfd_error_handler
+           /* xgettext:c-format */
+           (_("%pB: loader reloc in unrecognized section `%s'"),
             reference_bfd, secname);
          bfd_set_error (bfd_error_nonrepresentable_section);
          return FALSE;
@@ -4060,8 +4067,9 @@ xcoff_create_ldrel (bfd *output_bfd, struct xcoff_final_link_info *flinfo,
     {
       if (h->ldindx < 0)
        {
-         (*_bfd_error_handler)
-           (_("%B: `%s' in loader reloc but not loader sym"),
+         _bfd_error_handler
+           /* xgettext:c-format */
+           (_("%pB: `%s' in loader reloc but not loader sym"),
             reference_bfd, h->root.root.string);
          bfd_set_error (bfd_error_bad_value);
          return FALSE;
@@ -4076,8 +4084,9 @@ xcoff_create_ldrel (bfd *output_bfd, struct xcoff_final_link_info *flinfo,
   if (xcoff_hash_table (flinfo->info)->textro
       && strcmp (output_section->name, ".text") == 0)
     {
-      (*_bfd_error_handler)
-       (_("%B: loader reloc in read-only section %A"),
+      _bfd_error_handler
+       /* xgettext:c-format */
+       (_("%pB: loader reloc in read-only section %pA"),
         reference_bfd, output_section);
       bfd_set_error (bfd_error_invalid_operation);
       return FALSE;
@@ -4725,8 +4734,8 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
       flinfo->last_file.n_value = output_index;
       bfd_coff_swap_sym_out (output_bfd, (void *) &flinfo->last_file,
                             (void *) (flinfo->outsyms
-                                   + ((flinfo->last_file_index - syment_base)
-                                      * osymesz)));
+                                   + ((flinfo->last_file_index - syment_base)
+                                      * osymesz)));
     }
 
   /* Write the modified symbols to the output file.  */
@@ -4932,24 +4941,24 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
                             this case, but I don't think it's worth it.  */
                          is = flinfo->internal_syms + r_symndx;
 
-                          if (is->n_sclass != C_DWARF)
-                            {
-                              name = (_bfd_coff_internal_syment_name
-                                      (input_bfd, is, buf));
+                         if (is->n_sclass != C_DWARF)
+                           {
+                             name = (_bfd_coff_internal_syment_name
+                                     (input_bfd, is, buf));
 
-                              if (name == NULL)
-                                return FALSE;
+                             if (name == NULL)
+                               return FALSE;
 
                              (*flinfo->info->callbacks->unattached_reloc)
                                (flinfo->info, name,
                                 input_bfd, o, irel->r_vaddr);
-                            }
+                           }
                        }
                    }
                }
 
              if ((o->flags & SEC_DEBUGGING) == 0
-                  && xcoff_need_ldrel_p (flinfo->info, irel, h))
+                 && xcoff_need_ldrel_p (flinfo->info, irel, h))
                {
                  asection *sec;
 
@@ -5100,10 +5109,10 @@ xcoff_find_tc0 (bfd *output_bfd, struct xcoff_final_link_info *flinfo)
       /* Make sure that the start of the TOC is also within range.  */
       if (best_address > toc_start + 0x8000)
        {
-         (*_bfd_error_handler)
-           (_("TOC overflow: 0x%lx > 0x10000; try -mminimal-toc "
+         _bfd_error_handler
+           (_("TOC overflow: %#" PRIx64 " > 0x10000; try -mminimal-toc "
               "when compiling"),
-            (unsigned long) (toc_end - toc_start));
+            (uint64_t) (toc_end - toc_start));
          bfd_set_error (bfd_error_file_too_big);
          return FALSE;
        }
@@ -5299,7 +5308,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
        tocoff += h->descriptor->u.toc_offset;
 
       /* The first instruction in the glink code needs to be
-        cooked to to hold the correct offset in the toc.  The
+        cooked to hold the correct offset in the toc.  The
         rest are just output raw.  */
       bfd_put_32 (output_bfd,
                  bfd_xcoff_glink_code(output_bfd, 0) | (tocoff & 0xffff), p);
@@ -5577,10 +5586,10 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
            || h->root.type == bfd_link_hash_defweak)
           && h->smclas == XMC_XO)
     {
-      BFD_ASSERT (bfd_is_abs_section (h->root.u.def.section));
+      BFD_ASSERT (bfd_is_abs_symbol (&h->root));
       isym.n_value = h->root.u.def.value;
       isym.n_scnum = N_UNDEF;
-      if (h->root.type == bfd_link_hash_undefweak
+      if (h->root.type == bfd_link_hash_defweak
          && C_WEAKEXT == C_AIX_WEAKEXT)
        isym.n_sclass = C_WEAKEXT;
       else
@@ -5646,7 +5655,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf)
       /* We just output an SD symbol.  Now output an LD symbol.  */
       h->indx += 2;
 
-      if (h->root.type == bfd_link_hash_undefweak
+      if (h->root.type == bfd_link_hash_defweak
          && C_WEAKEXT == C_AIX_WEAKEXT)
        isym.n_sclass = C_WEAKEXT;
       else