gas: detect DCTI couples in sparc
[deliverable/binutils-gdb.git] / bfd / elf32-nds32.c
index 081b9976f1be433e399d962fa8b673b450aeae4b..09d26aed10b30475bc06ec6d10611e10aefb5469 100644 (file)
@@ -1,5 +1,5 @@
 /* NDS32-specific support for 32-bit ELF.
 /* 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.
    Contributed by Andes Technology Corporation.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -2300,7 +2300,7 @@ nds32_insertion_sort (void *base, size_t nmemb, size_t size,
 {
   char *ptr = (char *) base;
   int i, j;
 {
   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.
 
 
   /* If i is less than j, i is inserted before j.
 
@@ -2324,6 +2324,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);
     }
       memmove (ptr + (j + 1) * size, ptr + j * size, (i - j) * size);
       memcpy (ptr + j * size, tmp, size);
     }
+  free (tmp);
 }
 
 /* Sort relocation by r_offset.
 }
 
 /* Sort relocation by r_offset.
@@ -2968,7 +2969,7 @@ nds32_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
   r_type = ELF32_R_TYPE (dst->r_info);
   if (r_type > R_NDS32_GNU_VTENTRY)
     {
   r_type = ELF32_R_TYPE (dst->r_info);
   if (r_type > R_NDS32_GNU_VTENTRY)
     {
-      _bfd_error_handler (_("%A: invalid NDS32 reloc number: %d"), abfd, r_type);
+      _bfd_error_handler (_("%B: invalid NDS32 reloc number: %d"), abfd, r_type);
       r_type = 0;
     }
   cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
       r_type = 0;
     }
   cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
@@ -3472,7 +3473,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       h->def_regular = 1;
       h->type = STT_OBJECT;
 
       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;
     }
 
        return FALSE;
     }
 
@@ -3537,7 +3538,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.  */
         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"));
        {
          s = bfd_make_section (abfd, (bed->default_use_rela_p
                                       ? ".rela.bss" : ".rel.bss"));
@@ -3632,7 +3633,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)
     {
      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
          && !h->def_dynamic
          && !h->ref_dynamic
          && h->root.type != bfd_link_hash_undefweak
@@ -3671,7 +3672,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.  */
      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
     return TRUE;
 
   /* If there are no references to this symbol that do not use the
@@ -3790,7 +3791,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
            return FALSE;
        }
 
            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;
 
        {
          asection *s = htab->splt;
 
@@ -3806,7 +3807,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.  */
             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;
            {
              h->root.u.def.section = s;
              h->root.u.def.value = h->plt.offset;
@@ -3859,7 +3860,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
        s->size += 4;
 
       dyn = htab->root.dynamic_sections_created;
        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
        htab->srelgot->size += sizeof (Elf32_External_Rela);
     }
   else
@@ -3874,7 +3875,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.  */
 
      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))
        {
     {
       if (h->def_regular && (h->forced_local || info->symbolic))
        {
@@ -3980,7 +3981,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 (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);
        {
          s = bfd_get_section_by_name (dynobj, ".interp");
          BFD_ASSERT (s != NULL);
@@ -4043,7 +4044,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
            {
              *local_got = s->size;
              s->size += 4;
            {
              *local_got = s->size;
              s->size += 4;
-             if (info->shared)
+             if (bfd_link_pic (info))
                srel->size += sizeof (Elf32_External_Rela);
            }
          else
                srel->size += sizeof (Elf32_External_Rela);
            }
          else
@@ -4127,7 +4128,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)
 
 #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;
        {
          if (!add_dynamic_entry (DT_DEBUG, 0))
            return FALSE;
@@ -4505,7 +4506,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_.  */
   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);
     {
       is_SDA_BASE_set = 1;
       r = nds32_elf_final_sda_base (output_bfd, info, &gp, TRUE);
@@ -4597,7 +4598,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)
 
       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);
        continue;
 
       howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type);
@@ -4645,7 +4646,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,
        {
          /* This is a relocatable link.  We don't have to change
             anything, unless the reloc is against a section symbol,
@@ -4805,8 +4806,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;
              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))
                      && (info->symbolic
                          || h->dynindx == -1
                          || h->forced_local) && h->def_regular))
@@ -4853,7 +4856,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
                {
                  bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
                {
                  bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
-                 if (info->shared)
+                 if (bfd_link_pic (info))
                    {
                      asection *srelgot;
                      Elf_Internal_Rela outrel;
                    {
                      asection *srelgot;
                      Elf_Internal_Rela outrel;
@@ -4899,7 +4902,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:
        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))
              && (input_section->flags & SEC_ALLOC) != 0
              && (eliminate_gc_relocs == 0
                  || (sec && (sec->flags & SEC_EXCLUDE) == 0))
@@ -5000,7 +5003,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
          break;
 
        case R_NDS32_25_ABS_RELA:
          break;
 
        case R_NDS32_25_ABS_RELA:
-         if (info->shared)
+         if (bfd_link_pic (info))
            {
              (*_bfd_error_handler)
                (_("%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared "
            {
              (*_bfd_error_handler)
                (_("%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared "
@@ -5060,11 +5063,12 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
 
                  dyn = htab->root.dynamic_sections_created;
                  if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL
 
                  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
                    {
                      /* This is actually a static link, or it is a
                         -Bsymbolic link and the symbol is defined
@@ -5106,7 +5110,7 @@ nds32_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
                    {
                      bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
                    {
                      bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
-                     if (info->shared)
+                     if (bfd_link_pic (info))
                        {
                          asection *srelgot;
                          Elf_Internal_Rela outrel;
                        {
                          asection *srelgot;
                          Elf_Internal_Rela outrel;
@@ -5242,8 +5246,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;
                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;
              }
                        || !SYMBOL_REFERENCES_LOCAL (info, h)))
                  indx = h->dynindx;
              }
@@ -5271,7 +5275,7 @@ handle_sda:
              {
                bfd_boolean need_relocs = FALSE;
                srelgot = htab->srelgot;
              {
                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))
                    && (h == NULL
                        || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
                        || h->root.type != bfd_link_hash_undefweak))
@@ -5420,16 +5424,14 @@ check_reloc:
          switch (r)
            {
            case bfd_reloc_overflow:
          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:
              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:
              break;
 
            case bfd_reloc_outofrange:
@@ -5448,10 +5450,9 @@ check_reloc:
              errmsg = _("internal error: unknown error");
              /* Fall through.  */
 
              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;
            }
        }
              break;
            }
        }
@@ -5505,7 +5506,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.  */
       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;
 
        {
          unsigned long insn;
 
@@ -5609,7 +5610,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.  */
         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)
        {
          && (info->symbolic
              || h->dynindx == -1 || h->forced_local) && h->def_regular)
        {
@@ -5706,20 +5707,17 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
              break;
 
            case DT_PLTGOT:
              break;
 
            case DT_PLTGOT:
-             /* name = ".got"; */
-             s = htab->sgot->output_section;
+             s = htab->sgotplt;
              goto get_vma;
            case DT_JMPREL:
              goto get_vma;
            case DT_JMPREL:
-             s = htab->srelplt->output_section;
+             s = htab->srelplt;
            get_vma:
            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:
              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;
              dyn.d_un.d_val = s->size;
              bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
              break;
@@ -5736,7 +5734,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
                 about changing the DT_RELA entry.  */
              if (htab->srelplt != NULL)
                {
                 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);
                  dyn.d_un.d_val -= s->size;
                }
              bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
@@ -5748,7 +5746,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       splt = htab->splt;
       if (splt && splt->size > 0)
        {
       splt = htab->splt;
       if (splt && splt->size > 0)
        {
-         if (info->shared)
+         if (bfd_link_pic (info))
            {
              unsigned long insn;
              long offset;
            {
              unsigned long insn;
              long offset;
@@ -6299,7 +6297,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;
 
              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;
                h->plt.refcount -= 1;
 
              eh = (struct elf_nds32_link_hash_entry *) h;
@@ -6352,7 +6350,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
   bfd *dynobj;
   asection *sreloc = NULL;
 
   bfd *dynobj;
   asection *sreloc = NULL;
 
-  if (info->relocatable)
+  if (bfd_link_relocatable (info))
     return TRUE;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
     return TRUE;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -6537,7 +6535,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        case R_NDS32_17_PCREL_RELA:
        case R_NDS32_25_PCREL_RELA:
 
        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;
            {
              h->non_got_ref = 1;
              h->plt.refcount += 1;
@@ -6559,7 +6557,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 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
               && (sec->flags & SEC_ALLOC) != 0
               && ((r_type != R_NDS32_25_PCREL_RELA
                    && r_type != R_NDS32_15_PCREL_RELA
@@ -6570,7 +6568,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->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
                  && (sec->flags & SEC_ALLOC) != 0
                  && h != NULL
                  && (h->root.type == bfd_link_hash_defweak
@@ -6865,7 +6863,7 @@ nds32_convert_32_to_16_alu1 (bfd *abfd, uint32_t insn, uint16_t *pinsn16,
                             int *pinsn_type)
 {
   uint16_t insn16 = 0;
                             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)
   unsigned long mach = bfd_get_mach (abfd);
 
   if (N32_SH5 (insn) != 0)
@@ -8328,7 +8326,7 @@ static Elf_Internal_Rela *
 find_relocs_at_address_addr (Elf_Internal_Rela *reloc,
                             Elf_Internal_Rela *relocs,
                             Elf_Internal_Rela *irelend,
 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;
                             bfd_vma offset_p)
 {
   Elf_Internal_Rela *rel_t = NULL;
@@ -8679,7 +8677,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd, asection *sec,
              unsigned long val = 0;
              unsigned long mask;
              long before, between;
              unsigned long val = 0;
              unsigned long mask;
              long before, between;
-             long offset;
+             long offset = 0;
 
              switch (ELF32_R_TYPE (irel->r_info))
                {
 
              switch (ELF32_R_TYPE (irel->r_info))
                {
@@ -10784,7 +10782,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)
 {
                           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;
   bfd_vma local_sda, laddr;
   int seq_len; /* Original length of instruction sequence.  */
   uint32_t insn;
@@ -10804,7 +10803,7 @@ nds32_elf_relax_loadstore (struct bfd_link_info *link_info, bfd *abfd,
   *insn_len = seq_len;
 
   /* Get the high part relocation.  */
   *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);
     {
       hi_irelfn = find_relocs_at_address_addr (irel, internal_relocs, irelend,
                                               checked_types[i], laddr);
@@ -11967,7 +11966,7 @@ nds32_elf_relax_section (bfd *abfd, asection *sec,
    * non-code section or
    * empty content or
    * no reloc entry.  */
    * 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
       || (sec->flags & SEC_RELOC) == 0
       || (sec->flags & SEC_EXCLUDE) == 1
       || (sec->flags & SEC_CODE) == 0
@@ -12340,8 +12339,8 @@ nds32_elf_relax_section (bfd *abfd, asection *sec,
       Elf_Internal_Rela *tmp_rel;
 
       /* Pad to alignment boundary.  Only handle current section alignment.  */
       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;
       if ((sec_size_align - sec->size) & 0x2)
        {
          insn16 = NDS32_NOP16;
@@ -13057,25 +13056,22 @@ nds32_elf_get_relocated_section_contents (bfd *abfd,
              switch (r)
                {
                case bfd_reloc_undefined:
              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);
                  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:
                  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:
                  break;
                case bfd_reloc_outofrange:
                  /* PR ld/13730:
This page took 0.033184 seconds and 4 git commands to generate.