Return void from linker callbacks
[deliverable/binutils-gdb.git] / bfd / elfxx-tilegx.c
index 90f4395d7ca5711cd7beb55633e9f0484698412e..db266c11c68604b96a27c94f754b302d327ccb58 100644 (file)
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for ELF.
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -72,11 +72,11 @@ static reloc_howto_type tilegx_elf_howto_table [] =
   /* This reloc does nothing.  */
   HOWTO (R_TILEGX_NONE,        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
-        32,                    /* bitsize */
+        3,                     /* size (0 = byte, 1 = short, 2 = long) */
+        0,                     /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
-        complain_overflow_bitfield, /* complain_on_overflow */
+        complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_TILEGX_NONE",       /* name */
         FALSE,                 /* partial_inplace */
@@ -921,7 +921,7 @@ tilegx_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
 {
   unsigned int i;
 
-  for (i = ARRAY_SIZE (tilegx_reloc_map); --i;)
+  for (i = ARRAY_SIZE (tilegx_reloc_map); i--;)
     {
       const reloc_map * entry;
 
@@ -1513,11 +1513,11 @@ tilegx_elf_create_dynamic_sections (bfd *dynobj,
     return FALSE;
 
   htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
-  if (!info->shared)
+  if (!bfd_link_pic (info))
     htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss
-      || (!info->shared && !htab->srelbss))
+      || (!bfd_link_pic (info) && !htab->srelbss))
     abort ();
 
   return TRUE;
@@ -1643,7 +1643,7 @@ static int
 tilegx_elf_tls_transition (struct bfd_link_info *info, int r_type,
                           int is_local, bfd_boolean disable_le_transition)
 {
-  if (info->shared)
+  if (bfd_link_pic (info))
     return r_type;
 
   if (is_local && !disable_le_transition)
@@ -1669,7 +1669,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
   int num_relocs;
   bfd_boolean has_tls_gd_or_ie = FALSE, has_tls_add = FALSE;
 
-  if (info->relocatable)
+  if (bfd_link_relocatable (info))
     return TRUE;
 
   htab = tilegx_elf_hash_table (info);
@@ -1754,7 +1754,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
-         if (info->shared)
+         if (bfd_link_pic (info))
            goto r_tilegx_plt32;
          break;
 
@@ -1764,7 +1764,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-         BFD_ASSERT (info->shared);
+         BFD_ASSERT (bfd_link_pic (info));
          tls_type = GOT_TLS_GD;
           goto have_got_reference;
 
@@ -1775,7 +1775,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
           tls_type = GOT_TLS_IE;
-          if (info->shared)
+          if (bfd_link_pic (info))
             info->flags |= DF_STATIC_TLS;
           goto have_got_reference;
 
@@ -1856,7 +1856,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
          break;
 
        case R_TILEGX_TLS_GD_CALL:
-         if (info->shared)
+         if (bfd_link_pic (info))
            {
              /* These are basically R_TILEGX_JUMPOFF_X1_PLT relocs
                 against __tls_get_addr.  */
@@ -1975,7 +1975,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            h->non_got_ref = 1;
 
        r_tilegx_plt32:
-         if (h != NULL && !info->shared)
+         if (h != NULL && !bfd_link_pic (info))
            {
              /* We may need a .plt entry if the function this reloc
                 refers to is in a shared lib.  */
@@ -2003,14 +2003,14 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
             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
               && (! tilegx_elf_howto_table[r_type].pc_relative
                   || (h != NULL
                       && (! 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
@@ -2119,8 +2119,8 @@ tilegx_elf_gc_mark_hook (asection *sec,
     }
 
   /* FIXME: The test here, in check_relocs and in relocate_section
-     dealing with TLS optimization, ought to be !info->executable.  */
-  if (info->shared)
+     dealing with TLS optimization, ought to be !bfd_link_executable (info).  */
+  if (bfd_link_pic (info))
     {
       switch (TILEGX_ELF_R_TYPE (rel->r_info))
        {
@@ -2154,7 +2154,7 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
   bfd_signed_vma *local_got_refcounts;
   const Elf_Internal_Rela *rel, *relend;
 
-  if (info->relocatable)
+  if (bfd_link_relocatable (info))
     return TRUE;
 
   BFD_ASSERT (is_tilegx_elf (abfd) || sec->reloc_count == 0);
@@ -2298,7 +2298,7 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
        case R_TILEGX_IMM16_X1_HW1_LAST:
        case R_TILEGX_IMM16_X0_HW2_LAST:
        case R_TILEGX_IMM16_X1_HW2_LAST:
-         if (info->shared)
+         if (bfd_link_pic (info))
            break;
          /* Fall through.  */
 
@@ -2405,7 +2405,7 @@ tilegx_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
@@ -2489,7 +2489,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->elf.splt;
 
@@ -2506,7 +2506,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
+         if (! bfd_link_pic (info)
              && !h->def_regular)
            {
              h->root.u.def.section = s;
@@ -2538,7 +2538,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
      requiring no TLS entry.  */
   if (h->got.refcount > 0
       && !htab->disable_le_transition
-      && !info->shared
+      && !bfd_link_pic (info)
       && h->dynindx == -1
       && tilegx_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
     h->got.offset = (bfd_vma) -1;
@@ -2568,7 +2568,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
          TLS_GD needs two if local symbol and two if global.  */
       if (tls_type == GOT_TLS_GD || tls_type == GOT_TLS_IE)
        htab->elf.srelgot->size += 2 * TILEGX_ELF_RELA_BYTES (htab);
-      else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h))
+      else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
+                                               bfd_link_pic (info),
+                                               h))
        htab->elf.srelgot->size += TILEGX_ELF_RELA_BYTES (htab);
     }
   else
@@ -2584,7 +2586,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 (SYMBOL_CALLS_LOCAL (info, h))
        {
@@ -2722,7 +2724,7 @@ tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       /* Set the contents of the .interp section to the interpreter.  */
-      if (info->executable)
+      if (bfd_link_executable (info) && !info->nointerp)
        {
          s = bfd_get_linker_section (dynobj, ".interp");
          BFD_ASSERT (s != NULL);
@@ -2787,7 +2789,7 @@ tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
              s->size += TILEGX_ELF_WORD_BYTES (htab);
               if (*local_tls_type == GOT_TLS_GD)
                 s->size += TILEGX_ELF_WORD_BYTES (htab);
-              if (info->shared
+              if (bfd_link_pic (info)
                   || *local_tls_type == GOT_TLS_GD
                   || *local_tls_type == GOT_TLS_IE)
                srel->size += TILEGX_ELF_RELA_BYTES (htab);
@@ -2899,7 +2901,7 @@ tilegx_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->executable)
+      if (bfd_link_executable (info))
        {
          if (!add_dynamic_entry (DT_DEBUG, 0))
            return FALSE;
@@ -3214,7 +3216,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
                                         rel, 1, relend, howto, 0, contents);
 
-      if (info->relocatable)
+      if (bfd_link_relocatable (info))
        continue;
 
       if (h != NULL)
@@ -3245,9 +3247,9 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
          else if (h != NULL)
            tls_type = tilegx_elf_hash_entry(h)->tls_type;
 
-         is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
+         is_tls_iele = (! bfd_link_pic (info) || tls_type == GOT_TLS_IE);
          is_tls_le = is_tls_iele && (!input_section->sec_flg0
-                                     && !info->shared
+                                     && !bfd_link_pic (info)
                                      && (h == NULL || h->dynindx == -1));
 
          if (r_type == R_TILEGX_TLS_GD_CALL)
@@ -3392,7 +3394,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
          break;
        case R_TILEGX_TLS_IE_LOAD:
          if (!input_section->sec_flg0
-             && !info->shared
+             && !bfd_link_pic (info)
              && (h == NULL || h->dynindx == -1))
            {
              /* IE -> LE */
@@ -3439,8 +3441,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
              BFD_ASSERT (off != (bfd_vma) -1);
              dyn = elf_hash_table (info)->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)
                      && SYMBOL_REFERENCES_LOCAL (info, h)))
                {
                  /* This is actually a static link, or it is a
@@ -3481,7 +3485,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
                off &= ~1;
              else
                {
-                 if (info->shared)
+                 if (bfd_link_pic (info))
                    {
                      asection *s;
                      Elf_Internal_Rela outrel;
@@ -3611,13 +3615,13 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
          if ((input_section->flags & SEC_ALLOC) == 0)
            break;
 
-         if ((info->shared
+         if ((bfd_link_pic (info)
               && (h == NULL
                   || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
                   || h->root.type != bfd_link_hash_undefweak)
               && (! howto->pc_relative
                   || !SYMBOL_CALLS_LOCAL (info, h)))
-             || (!info->shared
+             || (!bfd_link_pic (info)
                  && h != NULL
                  && h->dynindx != -1
                  && !h->non_got_ref
@@ -3670,7 +3674,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
              else if (h != NULL &&
                       h->dynindx != -1
                       && (! is_plt
-                          || !info->shared
+                          || !bfd_link_pic (info)
                           || !SYMBOLIC_BIND (info, h)
                           || !h->def_regular))
                {
@@ -3753,7 +3757,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
         case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
         case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
         case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
-         if (info->shared)
+         if (bfd_link_pic (info))
            {
              Elf_Internal_Rela outrel;
              bfd_boolean skip;
@@ -3805,7 +3809,9 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
          else if (h != NULL)
            {
              tls_type = tilegx_elf_hash_entry(h)->tls_type;
-             if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
+             if (!bfd_link_pic (info)
+                 && h->dynindx == -1
+                 && tls_type == GOT_TLS_IE)
                r_type = (!input_section->sec_flg0
                          ? tilegx_tls_translate_to_le (r_type)
                          : tilegx_tls_translate_to_ie (r_type));
@@ -3856,8 +3862,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
                bfd_boolean dyn;
                dyn = htab->elf.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)
                        || !SYMBOL_REFERENCES_LOCAL (info, h)))
                  {
                    indx = h->dynindx;
@@ -3866,7 +3874,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
              /* The GOT entries have not been initialized yet.  Do it
                 now, and emit any relocations. */
-             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))
@@ -4036,15 +4044,14 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
          switch (r)
            {
            case bfd_reloc_overflow:
-             r = info->callbacks->reloc_overflow
+             (*info->callbacks->reloc_overflow)
                (info, (h ? &h->root : NULL), name, howto->name,
                 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
              break;
 
            case bfd_reloc_undefined:
-             r = info->callbacks->undefined_symbol
-               (info, name, input_bfd, input_section, rel->r_offset,
-                TRUE);
+             (*info->callbacks->undefined_symbol)
+               (info, name, input_bfd, input_section, rel->r_offset, TRUE);
              break;
 
            case bfd_reloc_outofrange:
@@ -4065,11 +4072,8 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
            }
 
          if (msg)
-           r = info->callbacks->warning
-             (info, msg, name, input_bfd, input_section, rel->r_offset);
-
-         if (! r)
-           return FALSE;
+           (*info->callbacks->warning) (info, msg, name, input_bfd,
+                                        input_section, rel->r_offset);
        }
     }
 
@@ -4171,7 +4175,7 @@ tilegx_elf_finish_dynamic_symbol (bfd *output_bfd,
         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->def_regular)
        {
This page took 0.030216 seconds and 4 git commands to generate.