Pass link_info to _bfd_merge_private_bfd_data
[deliverable/binutils-gdb.git] / bfd / elf32-nds32.c
index ed4383db5a341dda1b604648668b5a6fa49c4e5d..81195a45ec91dff31fbfedb13fc406dbdd136b5a 100644 (file)
@@ -1,5 +1,5 @@
 /* NDS32-specific support for 32-bit ELF.
-   Copyright (C) 2012-2015 Free Software Foundation, Inc.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
    Contributed by Andes Technology Corporation.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -77,7 +77,8 @@ static bfd_boolean nds32_elf_relocate_section
 static bfd_boolean nds32_elf_object_p (bfd *);
 static void nds32_elf_final_write_processing (bfd *, bfd_boolean);
 static bfd_boolean nds32_elf_set_private_flags (bfd *, flagword);
-static bfd_boolean nds32_elf_merge_private_bfd_data (bfd *, bfd *);
+static bfd_boolean nds32_elf_merge_private_bfd_data
+  (bfd *, struct bfd_link_info *);
 static bfd_boolean nds32_elf_print_private_bfd_data (bfd *, void *);
 static bfd_boolean nds32_elf_gc_sweep_hook
   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
@@ -2300,7 +2301,7 @@ nds32_insertion_sort (void *base, size_t nmemb, size_t size,
 {
   char *ptr = (char *) base;
   int i, j;
-  char *tmp = alloca (size);
+  char *tmp = xmalloc (size);
 
   /* If i is less than j, i is inserted before j.
 
@@ -2324,6 +2325,7 @@ nds32_insertion_sort (void *base, size_t nmemb, size_t size,
       memmove (ptr + (j + 1) * size, ptr + j * size, (i - j) * size);
       memcpy (ptr + j * size, tmp, size);
     }
+  free (tmp);
 }
 
 /* Sort relocation by r_offset.
@@ -3045,6 +3047,7 @@ nds32_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
        _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
       elf_tdata (abfd)->core->command =
        _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
+      break;
 
     default:
       return FALSE;
@@ -3302,7 +3305,7 @@ nds32_elf_final_sda_base (bfd *output_bfd, struct bfd_link_info *info,
        }
       else
        {
-         (*_bfd_error_handler) (_("error: Can't find symbol: _SDA_BASE_."));
+         _bfd_error_handler (_("error: Can't find symbol: _SDA_BASE_."));
          return bfd_reloc_dangerous;
        }
     }
@@ -3472,7 +3475,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       h->def_regular = 1;
       h->type = STT_OBJECT;
 
-      if (info->shared && !bfd_elf_link_record_dynamic_symbol (info, h))
+      if (bfd_link_pic (info) && !bfd_elf_link_record_dynamic_symbol (info, h))
        return FALSE;
     }
 
@@ -3537,7 +3540,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
         be needed, we can discard it later.  We will never need this
         section when generating a shared object, since they do not use
         copy relocs.  */
-      if (!info->shared)
+      if (!bfd_link_pic (info))
        {
          s = bfd_make_section (abfd, (bed->default_use_rela_p
                                       ? ".rela.bss" : ".rel.bss"));
@@ -3632,7 +3635,7 @@ nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      when we know the address of the .got section.  */
   if (h->type == STT_FUNC || h->needs_plt)
     {
-      if (!info->shared
+      if (!bfd_link_pic (info)
          && !h->def_dynamic
          && !h->ref_dynamic
          && h->root.type != bfd_link_hash_undefweak
@@ -3671,7 +3674,7 @@ nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      only references to the symbol are via the global offset table.
      For such cases we need not do anything here; the relocations will
      be handled correctly by relocate_section.  */
-  if (info->shared)
+  if (bfd_link_pic (info))
     return TRUE;
 
   /* If there are no references to this symbol that do not use the
@@ -3790,7 +3793,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
            return FALSE;
        }
 
-      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
+      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
        {
          asection *s = htab->splt;
 
@@ -3806,7 +3809,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
             location in the .plt.  This is required to make function
             pointers compare as equal between the normal executable and
             the shared library.  */
-         if (!info->shared && !h->def_regular)
+         if (!bfd_link_pic (info) && !h->def_regular)
            {
              h->root.u.def.section = s;
              h->root.u.def.value = h->plt.offset;
@@ -3859,7 +3862,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
        s->size += 4;
 
       dyn = htab->root.dynamic_sections_created;
-      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h))
+      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h))
        htab->srelgot->size += sizeof (Elf32_External_Rela);
     }
   else
@@ -3874,7 +3877,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
      space for pc-relative relocs that have become local due to symbol
      visibility changes.  */
 
-  if (info->shared)
+  if (bfd_link_pic (info))
     {
       if (h->def_regular && (h->forced_local || info->symbolic))
        {
@@ -3980,7 +3983,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (htab->root.dynamic_sections_created)
     {
       /* Set the contents of the .interp section to the interpreter.  */
-      if (!info->shared)
+      if (!bfd_link_pic (info) && !info->nointerp)
        {
          s = bfd_get_section_by_name (dynobj, ".interp");
          BFD_ASSERT (s != NULL);
@@ -4043,7 +4046,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
            {
              *local_got = s->size;
              s->size += 4;
-             if (info->shared)
+             if (bfd_link_pic (info))
                srel->size += sizeof (Elf32_External_Rela);
            }
          else
@@ -4127,7 +4130,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (!info->shared)
+      if (!bfd_link_pic (info))
        {
          if (!add_dynamic_entry (DT_DEBUG, 0))
            return FALSE;
@@ -4505,7 +4508,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
   table = nds32_elf_hash_table (info);
   eliminate_gc_relocs = table->eliminate_gc_relocs;
   /* By this time, we can adjust the value of _SDA_BASE_.  */
-  if ((!info->relocatable))
+  if ((!bfd_link_relocatable (info)))
     {
       is_SDA_BASE_set = 1;
       r = nds32_elf_final_sda_base (output_bfd, info, &gp, TRUE);
@@ -4518,15 +4521,15 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
       /* Set the _ITB_BASE_.  */
       if (!nds32_elf_ex9_itb_base (info))
        {
-         (*_bfd_error_handler) (_("%B: error: Cannot set _ITB_BASE_"),
-                                output_bfd);
+         _bfd_error_handler (_("%B: error: Cannot set _ITB_BASE_"),
+                             output_bfd);
          bfd_set_error (bfd_error_bad_value);
        }
     }
 
   if (table->target_optimize & NDS32_RELAX_JUMP_IFC_ON)
     if (!nds32_elf_ifc_reloc ())
-      (*_bfd_error_handler) (_("error: IFC relocation error."));
+      _bfd_error_handler (_("error: IFC relocation error."));
 
  /* Relocation for .ex9.itable.  */
   if (table->target_optimize & NDS32_RELAX_EX9_ON
@@ -4559,8 +4562,8 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type >= R_NDS32_max)
        {
-         (*_bfd_error_handler) (_("%B: error: unknown relocation type %d."),
-                                input_bfd, r_type);
+         _bfd_error_handler (_("%B: error: unknown relocation type %d."),
+                             input_bfd, r_type);
          bfd_set_error (bfd_error_bad_value);
          ret = FALSE;
          continue;
@@ -4597,7 +4600,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
 
       if (((r_type >= R_NDS32_DWARF2_OP1_RELA
            && r_type <= R_NDS32_DWARF2_LEB_RELA)
-          || r_type >= R_NDS32_RELAX_ENTRY) && !info->relocatable)
+          || r_type >= R_NDS32_RELAX_ENTRY) && !bfd_link_relocatable (info))
        continue;
 
       howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
@@ -4645,7 +4648,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
 
        }
 
-      if (info->relocatable)
+      if (bfd_link_relocatable (info))
        {
          /* This is a relocatable link.  We don't have to change
             anything, unless the reloc is against a section symbol,
@@ -4805,8 +4808,10 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
              off = h->got.offset;
              BFD_ASSERT (off != (bfd_vma) - 1);
              dyn = htab->root.dynamic_sections_created;
-             if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
-                 || (info->shared
+             if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
+                                                   bfd_link_pic (info),
+                                                   h)
+                 || (bfd_link_pic (info)
                      && (info->symbolic
                          || h->dynindx == -1
                          || h->forced_local) && h->def_regular))
@@ -4853,7 +4858,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
                {
                  bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
-                 if (info->shared)
+                 if (bfd_link_pic (info))
                    {
                      asection *srelgot;
                      Elf_Internal_Rela outrel;
@@ -4899,7 +4904,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
        case R_NDS32_LO12S1_RELA:
        case R_NDS32_LO12S0_RELA:
        case R_NDS32_LO12S0_ORI_RELA:
-         if (info->shared && r_symndx != 0
+         if (bfd_link_pic (info) && r_symndx != 0
              && (input_section->flags & SEC_ALLOC) != 0
              && (eliminate_gc_relocs == 0
                  || (sec && (sec->flags & SEC_EXCLUDE) == 0))
@@ -5000,9 +5005,9 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
          break;
 
        case R_NDS32_25_ABS_RELA:
-         if (info->shared)
+         if (bfd_link_pic (info))
            {
-             (*_bfd_error_handler)
+             _bfd_error_handler
                (_("%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared "
                   "mode."), bfd_get_filename (input_bfd));
              return FALSE;
@@ -5060,11 +5065,12 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
 
                  dyn = htab->root.dynamic_sections_created;
                  if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL
-                     (dyn, info->shared, h) || (info->shared
-                                                && (info->symbolic
-                                                    || h->dynindx == -1
-                                                    || h->forced_local)
-                                                && h->def_regular))
+                     (dyn, bfd_link_pic (info), h)
+                     || (bfd_link_pic (info)
+                         && (info->symbolic
+                             || h->dynindx == -1
+                             || h->forced_local)
+                         && h->def_regular))
                    {
                      /* This is actually a static link, or it is a
                         -Bsymbolic link and the symbol is defined
@@ -5106,7 +5112,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
                    {
                      bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
-                     if (info->shared)
+                     if (bfd_link_pic (info))
                        {
                          asection *srelgot;
                          Elf_Internal_Rela outrel;
@@ -5135,7 +5141,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
          if (relocation & align)
            {
              /* Incorrect alignment.  */
-             (*_bfd_error_handler)
+             _bfd_error_handler
                (_("%B: warning: unaligned access to GOT entry."), input_bfd);
              ret = FALSE;
              r = bfd_reloc_dangerous;
@@ -5177,7 +5183,7 @@ handle_sda:
              r = nds32_elf_final_sda_base (output_bfd, info, &gp, FALSE);
              if (r != bfd_reloc_ok)
                {
-                 (*_bfd_error_handler)
+                 _bfd_error_handler
                    (_("%B: warning: relocate SDA_BASE failed."), input_bfd);
                  ret = FALSE;
                  goto check_reloc;
@@ -5198,7 +5204,7 @@ handle_sda:
              if (relocation & align)
                {
                  /* Incorrect alignment.  */
-                 (*_bfd_error_handler)
+                 _bfd_error_handler
                    (_("%B(%A): warning: unaligned small data access of type %d."),
                     input_bfd, input_section, r_type);
                  ret = FALSE;
@@ -5242,8 +5248,8 @@ handle_sda:
                BFD_ASSERT (off != (bfd_vma) - 1);
                dyn = htab->root.dynamic_sections_created;
                tls_type = ((struct elf_nds32_link_hash_entry *) h)->tls_type;
-               if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
-                   && (!info->shared
+               if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
+                   && (!bfd_link_pic (info)
                        || !SYMBOL_REFERENCES_LOCAL (info, h)))
                  indx = h->dynindx;
              }
@@ -5271,7 +5277,7 @@ handle_sda:
              {
                bfd_boolean need_relocs = FALSE;
                srelgot = htab->srelgot;
-               if ((info->shared || indx != 0)
+               if ((bfd_link_pic (info) || indx != 0)
                    && (h == NULL
                        || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
                        || h->root.type != bfd_link_hash_undefweak))
@@ -5420,16 +5426,14 @@ check_reloc:
          switch (r)
            {
            case bfd_reloc_overflow:
-             if (!((*info->callbacks->reloc_overflow)
-                   (info, (h ? &h->root : NULL), name, howto->name,
-                    (bfd_vma) 0, input_bfd, input_section, offset)))
-               return FALSE;
+             (*info->callbacks->reloc_overflow)
+               (info, (h ? &h->root : NULL), name, howto->name,
+                (bfd_vma) 0, input_bfd, input_section, offset);
              break;
 
            case bfd_reloc_undefined:
-             if (!((*info->callbacks->undefined_symbol)
-                   (info, name, input_bfd, input_section, offset, TRUE)))
-               return FALSE;
+             (*info->callbacks->undefined_symbol)
+               (info, name, input_bfd, input_section, offset, TRUE);
              break;
 
            case bfd_reloc_outofrange:
@@ -5448,10 +5452,9 @@ check_reloc:
              errmsg = _("internal error: unknown error");
              /* Fall through.  */
 
-common_error:
-             if (!((*info->callbacks->warning)
-                   (info, errmsg, name, input_bfd, input_section, offset)))
-               return FALSE;
+           common_error:
+             (*info->callbacks->warning) (info, errmsg, name, input_bfd,
+                                          input_section, offset);
              break;
            }
        }
@@ -5505,7 +5508,7 @@ nds32_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
       got_offset = (plt_index + 3) * 4;
 
       /* Fill in the entry in the procedure linkage table.  */
-      if (!info->shared)
+      if (!bfd_link_pic (info))
        {
          unsigned long insn;
 
@@ -5609,7 +5612,7 @@ nds32_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
         the symbol was forced to be local because of a version file.
         The entry in the global offset table will already have been
         initialized in the relocate_section function.  */
-      if (info->shared
+      if (bfd_link_pic (info)
          && (info->symbolic
              || h->dynindx == -1 || h->forced_local) && h->def_regular)
        {
@@ -5706,20 +5709,17 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
              break;
 
            case DT_PLTGOT:
-             /* name = ".got"; */
-             s = htab->sgot->output_section;
+             s = htab->sgotplt;
              goto get_vma;
            case DT_JMPREL:
-             s = htab->srelplt->output_section;
+             s = htab->srelplt;
            get_vma:
-             BFD_ASSERT (s != NULL);
-             dyn.d_un.d_ptr = s->vma;
+             dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
              bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
              break;
 
            case DT_PLTRELSZ:
-             s = htab->srelplt->output_section;
-             BFD_ASSERT (s != NULL);
+             s = htab->srelplt;
              dyn.d_un.d_val = s->size;
              bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
              break;
@@ -5736,7 +5736,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
                 about changing the DT_RELA entry.  */
              if (htab->srelplt != NULL)
                {
-                 s = htab->srelplt->output_section;
+                 s = htab->srelplt;
                  dyn.d_un.d_val -= s->size;
                }
              bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
@@ -5748,7 +5748,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       splt = htab->splt;
       if (splt && splt->size > 0)
        {
-         if (info->shared)
+         if (bfd_link_pic (info))
            {
              unsigned long insn;
              long offset;
@@ -5969,11 +5969,12 @@ nds32_check_vec_size (bfd *ibfd)
        nds32_vec_size = (flag_t & 0x3);
       else if (nds32_vec_size != (flag_t & 0x3))
        {
-         (*_bfd_error_handler) (_("%B: ISR vector size mismatch"
-                                  " with previous modules, previous %u-byte, current %u-byte"),
-                                ibfd,
-                                nds32_vec_size == 1 ? 4 : nds32_vec_size == 2 ? 16 : 0xffffffff,
-                                (flag_t & 0x3) == 1 ? 4 : (flag_t & 0x3) == 2 ? 16 : 0xffffffff);
+         _bfd_error_handler
+           (_("%B: ISR vector size mismatch"
+              " with previous modules, previous %u-byte, current %u-byte"),
+            ibfd,
+            nds32_vec_size == 1 ? 4 : nds32_vec_size == 2 ? 16 : 0xffffffff,
+            (flag_t & 0x3) == 1 ? 4 : (flag_t & 0x3) == 2 ? 16 : 0xffffffff);
          return FALSE;
        }
       else
@@ -5988,8 +5989,9 @@ nds32_check_vec_size (bfd *ibfd)
    object file when linking.  */
 
 static bfd_boolean
-nds32_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
+nds32_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
+  bfd *obfd = info->output_bfd;
   flagword out_flags;
   flagword in_flags;
   flagword out_16regs;
@@ -6011,7 +6013,7 @@ nds32_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 
   if (bfd_little_endian (ibfd) != bfd_little_endian (obfd))
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("%B: warning: Endian mismatch with previous modules."), ibfd);
 
       bfd_set_error (bfd_error_bad_value);
@@ -6021,7 +6023,7 @@ nds32_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   in_version = elf_elfheader (ibfd)->e_flags & EF_NDS32_ELF_VERSION;
   if (in_version == E_NDS32_ELF_VER_1_2)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("%B: warning: Older version of object file encountered, "
           "Please recompile with current tool chain."), ibfd);
     }
@@ -6099,7 +6101,7 @@ nds32_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   /* Check flag compatibility.  */
   if ((in_flags & EF_NDS_ABI) != (out_flags & EF_NDS_ABI))
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("%B: error: ABI mismatch with previous modules."), ibfd);
 
       bfd_set_error (bfd_error_bad_value);
@@ -6110,7 +6112,7 @@ nds32_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
     {
       if (((in_flags & EF_NDS_ARCH) != E_N1_ARCH))
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            (_("%B: error: Instruction set mismatch with previous modules."), ibfd);
 
          bfd_set_error (bfd_error_bad_value);
@@ -6135,9 +6137,10 @@ nds32_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   else
     {
       if (in_version != out_version)
-       (*_bfd_error_handler) (_("%B: warning: Incompatible elf-versions %s and  %s."),
-                                ibfd, nds32_elfver_strtab[out_version],
-                                nds32_elfver_strtab[in_version]);
+       _bfd_error_handler
+         (_("%B: warning: Incompatible elf-versions %s and  %s."),
+          ibfd, nds32_elfver_strtab[out_version],
+          nds32_elfver_strtab[in_version]);
 
       elf_elfheader (obfd)->e_flags = in_flags | out_flags
        | (in_16regs & out_16regs) | (in_no_mac & out_no_mac)
@@ -6299,7 +6302,7 @@ nds32_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, asection *sec,
              struct elf_nds32_dyn_relocs **pp;
              struct elf_nds32_dyn_relocs *p;
 
-             if (!info->shared && h->plt.refcount > 0)
+             if (!bfd_link_pic (info) && h->plt.refcount > 0)
                h->plt.refcount -= 1;
 
              eh = (struct elf_nds32_link_hash_entry *) h;
@@ -6352,7 +6355,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
   bfd *dynobj;
   asection *sreloc = NULL;
 
-  if (info->relocatable)
+  if (bfd_link_relocatable (info))
     return TRUE;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -6537,7 +6540,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        case R_NDS32_17_PCREL_RELA:
        case R_NDS32_25_PCREL_RELA:
 
-         if (h != NULL && !info->shared)
+         if (h != NULL && !bfd_link_pic (info))
            {
              h->non_got_ref = 1;
              h->plt.refcount += 1;
@@ -6559,7 +6562,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
             If on the other hand, we are creating an executable, we may need
             to keep relocations for symbols satisfied by a dynamic library
             if we manage to avoid copy relocs for the symbol.  */
-         if ((info->shared
+         if ((bfd_link_pic (info)
               && (sec->flags & SEC_ALLOC) != 0
               && ((r_type != R_NDS32_25_PCREL_RELA
                    && r_type != R_NDS32_15_PCREL_RELA
@@ -6570,7 +6573,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
                       && (!info->symbolic
                           || h->root.type == bfd_link_hash_defweak
                           || !h->def_regular))))
-             || (!info->shared
+             || (!bfd_link_pic (info)
                  && (sec->flags & SEC_ALLOC) != 0
                  && h != NULL
                  && (h->root.type == bfd_link_hash_defweak
@@ -6865,7 +6868,7 @@ nds32_convert_32_to_16_alu1 (bfd *abfd, uint32_t insn, uint16_t *pinsn16,
                             int *pinsn_type)
 {
   uint16_t insn16 = 0;
-  int insn_type;
+  int insn_type = 0;
   unsigned long mach = bfd_get_mach (abfd);
 
   if (N32_SH5 (insn) != 0)
@@ -8328,7 +8331,7 @@ static Elf_Internal_Rela *
 find_relocs_at_address_addr (Elf_Internal_Rela *reloc,
                             Elf_Internal_Rela *relocs,
                             Elf_Internal_Rela *irelend,
-                            unsigned char reloc_type,
+                            enum elf_nds32_reloc_type reloc_type,
                             bfd_vma offset_p)
 {
   Elf_Internal_Rela *rel_t = NULL;
@@ -8679,7 +8682,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd, asection *sec,
              unsigned long val = 0;
              unsigned long mask;
              long before, between;
-             long offset;
+             long offset = 0;
 
              switch (ELF32_R_TYPE (irel->r_info))
                {
@@ -8774,7 +8777,7 @@ done_adjust_diff:
              if (blank_t2 && blank_t2->next
                  && (blank_t2->offset > raddr
                      || blank_t2->next->offset <= raddr))
-               (*_bfd_error_handler)
+               _bfd_error_handler
                  (_("%B: %s\n"), abfd,
                   "Error: search_nds32_elf_blank reports wrong node");
 
@@ -9083,7 +9086,7 @@ nds32_elf_relax_longcall1 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (hi_irelfn == irelend || lo_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL1 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -9165,7 +9168,7 @@ nds32_elf_relax_longcall2 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (i1_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL2 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -9272,7 +9275,7 @@ nds32_elf_relax_longcall3 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (hi_irelfn == irelend || lo_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL3 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -9407,7 +9410,7 @@ nds32_elf_relax_longjump1 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
                                 R_NDS32_LO12S0_ORI_RELA, laddr + 4);
   if (hi_irelfn == irelend || lo_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP1 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -9614,7 +9617,7 @@ nds32_elf_relax_longjump2 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (i2_irelfn == irelend || cond_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP2 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -9807,7 +9810,7 @@ nds32_elf_relax_longjump3 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (hi_irelfn == irelend || lo_irelfn == irelend || cond_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP3 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -9988,7 +9991,7 @@ nds32_elf_relax_longcall4 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (hi_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL4 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10019,7 +10022,7 @@ nds32_elf_relax_longcall4 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (ptr_irel == irelend || em_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL4 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10091,7 +10094,7 @@ nds32_elf_relax_longcall5 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
                                 R_NDS32_25_PCREL_RELA, irel->r_addend);
   if (cond_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL5 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10170,7 +10173,7 @@ nds32_elf_relax_longcall6 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (em_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGCALL6 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10209,7 +10212,7 @@ nds32_elf_relax_longcall6 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
                                     R_NDS32_PTR_RESOLVED, irel->r_addend);
       if (cond_irel == irelend)
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            ("%B: warning: R_NDS32_LONGCALL6 points to unrecognized"
             "reloc at 0x%lx.", abfd, (long) irel->r_offset);
          return FALSE;
@@ -10259,7 +10262,7 @@ nds32_elf_relax_longcall6 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
                                     R_NDS32_PTR_RESOLVED, irel->r_addend);
       if (cond_irel == irelend)
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            ("%B: warning: R_NDS32_LONGCALL6 points to unrecognized"
             "reloc at 0x%lx.", abfd, (long) irel->r_offset);
          return FALSE;
@@ -10310,7 +10313,7 @@ nds32_elf_relax_longjump4 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (hi_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP4 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10333,7 +10336,7 @@ nds32_elf_relax_longjump4 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (ptr_irel == irelend || em_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP4 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10408,7 +10411,7 @@ nds32_elf_relax_longjump5 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
                                 R_NDS32_25_PCREL_RELA, irel->r_addend);
   if (cond_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP5 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10538,7 +10541,7 @@ nds32_elf_relax_longjump6 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (em_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP6 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10709,7 +10712,7 @@ nds32_elf_relax_longjump7 (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
                                 R_NDS32_15_PCREL_RELA, irel->r_addend);
   if (cond_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LONGJUMP7 points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
       return FALSE;
@@ -10784,7 +10787,8 @@ nds32_elf_relax_loadstore (struct bfd_link_info *link_info, bfd *abfd,
                           bfd_byte *contents, Elf_Internal_Sym *isymbuf,
                           Elf_Internal_Shdr *symtab_hdr, int load_store_relax)
 {
-  int eliminate_sethi = 0, range_type, i;
+  int eliminate_sethi = 0, range_type;
+  unsigned int i;
   bfd_vma local_sda, laddr;
   int seq_len; /* Original length of instruction sequence.  */
   uint32_t insn;
@@ -10804,7 +10808,7 @@ nds32_elf_relax_loadstore (struct bfd_link_info *link_info, bfd *abfd,
   *insn_len = seq_len;
 
   /* Get the high part relocation.  */
-  for (i = 0; (unsigned) i < sizeof (checked_types); i++)
+  for (i = 0; i < ARRAY_SIZE (checked_types); i++)
     {
       hi_irelfn = find_relocs_at_address_addr (irel, internal_relocs, irelend,
                                               checked_types[i], laddr);
@@ -10814,7 +10818,7 @@ nds32_elf_relax_loadstore (struct bfd_link_info *link_info, bfd *abfd,
 
   if (hi_irelfn == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_LOADSTORE points to unrecognized"
         "reloc at 0x%lx.", abfd, (long) irel->r_offset);
        return FALSE;
@@ -11227,6 +11231,7 @@ nds32_elf_relax_letlsls (struct bfd_link_info *link_info, bfd *abfd,
          success = 1;
          break;
        }
+      /* Fall through.  */
     case (N32_OP6_MEM << 8) | N32_MEM_LH:
     case (N32_OP6_MEM << 8) | N32_MEM_SH:
     case (N32_OP6_MEM << 8) | N32_MEM_LHS:
@@ -11241,6 +11246,7 @@ nds32_elf_relax_letlsls (struct bfd_link_info *link_info, bfd *abfd,
          success = 1;
          break;
        }
+      /* Fall through.  */
     case (N32_OP6_MEM << 8) | N32_MEM_LW:
     case (N32_OP6_MEM << 8) | N32_MEM_SW:
       /* The range is +/-64k.  */
@@ -11254,6 +11260,7 @@ nds32_elf_relax_letlsls (struct bfd_link_info *link_info, bfd *abfd,
          success = 1;
          break;
        }
+      /* Fall through.  */
     default:
       break;
     }
@@ -11286,7 +11293,7 @@ nds32_elf_relax_ptr (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 
   if (re_irel == irelend)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("%B: warning: R_NDS32_PTR points to unrecognized reloc at 0x%lx.",
         abfd, (long) irel->r_offset);
       return FALSE;
@@ -11907,7 +11914,7 @@ nds32_elf_pick_relax (bfd_boolean init, asection *sec, bfd_boolean *again,
          break;
        case NDS32_RELAX_JUMP_IFC_ROUND:
          if (!nds32_elf_ifc_finish (link_info))
-           (*_bfd_error_handler) (_("error: Jump IFC Fail."));
+           _bfd_error_handler (_("error: Jump IFC Fail."));
          if (table->target_optimize & NDS32_RELAX_EX9_ON)
            {
              pass++;
@@ -11924,7 +11931,7 @@ nds32_elf_pick_relax (bfd_boolean init, asection *sec, bfd_boolean *again,
            {
              /* Do jump IFC optimization again.  */
              if (!nds32_elf_ifc_finish (link_info))
-               (*_bfd_error_handler) (_("error: Jump IFC Fail."));
+               _bfd_error_handler (_("error: Jump IFC Fail."));
            }
          break;
        default:
@@ -11967,7 +11974,7 @@ nds32_elf_relax_section (bfd *abfd, asection *sec,
    * non-code section or
    * empty content or
    * no reloc entry.  */
-  if (link_info->relocatable
+  if (bfd_link_relocatable (link_info)
       || (sec->flags & SEC_RELOC) == 0
       || (sec->flags & SEC_EXCLUDE) == 1
       || (sec->flags & SEC_CODE) == 0
@@ -12035,7 +12042,7 @@ nds32_elf_relax_section (bfd *abfd, asection *sec,
       /* Set the _ITB_BASE_.  */
       if (!nds32_elf_ex9_itb_base (link_info))
        {
-         (*_bfd_error_handler) (_("%B: error: Cannot set _ITB_BASE_"), abfd);
+         _bfd_error_handler (_("%B: error: Cannot set _ITB_BASE_"), abfd);
          bfd_set_error (bfd_error_bad_value);
        }
     }
@@ -12340,8 +12347,8 @@ nds32_elf_relax_section (bfd *abfd, asection *sec,
       Elf_Internal_Rela *tmp_rel;
 
       /* Pad to alignment boundary.  Only handle current section alignment.  */
-      sec_size_align = (sec->size + (~((-1) << sec->alignment_power)))
-                      & ((-1) << sec->alignment_power);
+      sec_size_align = (sec->size + (~((-1U) << sec->alignment_power)))
+                      & ((-1U) << sec->alignment_power);
       if ((sec_size_align - sec->size) & 0x2)
        {
          insn16 = NDS32_NOP16;
@@ -12780,7 +12787,7 @@ nds32_relax_fp_as_gp (struct bfd_link_info *link_info,
        {
          /* Begin of the region.  */
          if (begin_rel)
-           (*_bfd_error_handler) (_("%B: Nested OMIT_FP in %A."), abfd, sec);
+           _bfd_error_handler (_("%B: Nested OMIT_FP in %A."), abfd, sec);
 
          begin_rel = irel;
          nds32_fag_init (&fag_head);
@@ -12798,7 +12805,7 @@ nds32_relax_fp_as_gp (struct bfd_link_info *link_info,
 
          if (begin_rel == NULL)
            {
-             (*_bfd_error_handler) (_("%B: Unmatched OMIT_FP in %A."), abfd, sec);
+             _bfd_error_handler (_("%B: Unmatched OMIT_FP in %A."), abfd, sec);
              continue;
            }
 
@@ -13057,25 +13064,22 @@ nds32_elf_get_relocated_section_contents (bfd *abfd,
              switch (r)
                {
                case bfd_reloc_undefined:
-                 if (!((*link_info->callbacks->undefined_symbol)
-                       (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
-                        input_bfd, input_section, (*parent)->address, TRUE)))
-                   goto error_return;
+                 (*link_info->callbacks->undefined_symbol)
+                   (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
+                    input_bfd, input_section, (*parent)->address, TRUE);
                  break;
                case bfd_reloc_dangerous:
                  BFD_ASSERT (error_message != NULL);
-                 if (!((*link_info->callbacks->reloc_dangerous)
-                       (link_info, error_message, input_bfd, input_section,
-                        (*parent)->address)))
-                   goto error_return;
+                 (*link_info->callbacks->reloc_dangerous)
+                   (link_info, error_message,
+                    input_bfd, input_section, (*parent)->address);
                  break;
                case bfd_reloc_overflow:
-                 if (!((*link_info->callbacks->reloc_overflow)
-                       (link_info, NULL,
-                        bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
-                        (*parent)->howto->name, (*parent)->addend,
-                        input_bfd, input_section, (*parent)->address)))
-                   goto error_return;
+                 (*link_info->callbacks->reloc_overflow)
+                   (link_info, NULL,
+                    bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
+                    (*parent)->howto->name, (*parent)->addend,
+                    input_bfd, input_section, (*parent)->address);
                  break;
                case bfd_reloc_outofrange:
                  /* PR ld/13730:
@@ -14859,7 +14863,7 @@ nds32_elf_ex9_init (void)
                              sizeof (struct elf_nds32_code_hash_entry),
                              1023))
     {
-      (*_bfd_error_handler) (_("Linker: cannot init ex9 hash table error \n"));
+      _bfd_error_handler (_("Linker: cannot init ex9 hash table error \n"));
       return FALSE;
     }
   return TRUE;
@@ -15267,7 +15271,7 @@ nds32_elf_ex9_reloc_jmp (struct bfd_link_info *link_info)
                                  if (!nds32_get_section_contents
                                         (fix_ptr->sec->owner, fix_ptr->sec,
                                          &source_contents, TRUE))
-                                   (*_bfd_error_handler)
+                                   _bfd_error_handler
                                      (_("Linker: error cannot fixed ex9 relocation \n"));
                                  if (temp_ptr->order < 32)
                                    insn_ex9 = INSN_EX9_IT_2;
@@ -15281,7 +15285,7 @@ nds32_elf_ex9_reloc_jmp (struct bfd_link_info *link_info)
                          else
                            {
                              if (!temp_ptr->next || temp_ptr->m_list != temp_ptr->next->m_list)
-                               (*_bfd_error_handler)
+                               _bfd_error_handler
                                  (_("Linker: error cannot fixed ex9 relocation \n"));
                              else
                                temp_ptr = temp_ptr->next;
@@ -15491,7 +15495,7 @@ nds32_elf_ex9_build_hash_table (bfd *abfd, asection *sec,
                      if (relocation & align)
                        {
                          /* Incorrect alignment.  */
-                         (*_bfd_error_handler)
+                         _bfd_error_handler
                            (_("%s: warning: unaligned small data access. "
                               "For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x."),
                             bfd_get_filename (abfd), irel->r_offset,
@@ -15524,7 +15528,7 @@ nds32_elf_ex9_build_hash_table (bfd *abfd, asection *sec,
            bfd_hash_lookup (&ex9_code_table, code, TRUE, TRUE);
          if (entry == NULL)
            {
-             (*_bfd_error_handler)
+             _bfd_error_handler
                (_("%P%F: failed creating ex9.it %s hash table: %E\n"), code);
              return FALSE;
            }
This page took 0.040066 seconds and 4 git commands to generate.