correct ft32 reloc range test
[deliverable/binutils-gdb.git] / bfd / elf32-hppa.c
index f9629e4b119d370f13b2d5e21bbea1663f127d30..3ce38078b8d6f8ebce3b490b375a0108d0d5383d 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for HP PA-RISC ELF files.
-   Copyright (C) 1990-2017 Free Software Foundation, Inc.
+   Copyright (C) 1990-2018 Free Software Foundation, Inc.
 
    Original code by
        Center for Software Science
 /* Variable names follow a coding style.
    Please follow this (Apps Hungarian) style:
 
-   Structure/Variable                  Prefix
+   Structure/Variable                  Prefix
    elf_link_hash_table                 "etab"
    elf_link_hash_entry                 "eh"
 
    bfd_hash_table containing stubs     "bstab"
    elf32_hppa_stub_hash_entry          "hsh"
 
-   elf32_hppa_dyn_reloc_entry          "hdh"
-
    Always remember to use GNU Coding Style. */
 
 #define PLT_ENTRY_SIZE 8
@@ -162,6 +160,7 @@ static const bfd_byte plt_stub[] =
 #ifndef RELATIVE_DYNRELOCS
 #define RELATIVE_DYNRELOCS 0
 #define IS_ABSOLUTE_RELOC(r_type) 1
+#define pc_dynrelocs(hh) 0
 #endif
 
 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
@@ -225,22 +224,7 @@ struct elf32_hppa_link_hash_entry
 
   /* Used to count relocations for delayed sizing of relocation
      sections.  */
-  struct elf32_hppa_dyn_reloc_entry
-  {
-    /* Next relocation in the chain.  */
-    struct elf32_hppa_dyn_reloc_entry *hdh_next;
-
-    /* The input section of the reloc.  */
-    asection *sec;
-
-    /* Number of relocs copied in this section.  */
-    bfd_size_type count;
-
-#if RELATIVE_DYNRELOCS
-  /* Number of relative relocs copied for the input section.  */
-    bfd_size_type relative_count;
-#endif
-  } *dyn_relocs;
+  struct elf_dyn_relocs *dyn_relocs;
 
   ENUM_BITFIELD (_tls_type) tls_type : 8;
 
@@ -590,7 +574,7 @@ hppa_add_stub (const char *stub_name,
   if (hsh == NULL)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: cannot create stub entry %s"),
+      _bfd_error_handler (_("%pB: cannot create stub entry %s"),
                          section->owner, stub_name);
       return NULL;
     }
@@ -842,10 +826,11 @@ hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
        {
          _bfd_error_handler
            /* xgettext:c-format */
-           (_("%B(%A+%#Lx): cannot reach %s, recompile with -ffunction-sections"),
+           (_("%pB(%pA+%#" PRIx64 "): "
+              "cannot reach %s, recompile with -ffunction-sections"),
             hsh->target_section->owner,
             stub_sec,
-            hsh->stub_offset,
+            (uint64_t) hsh->stub_offset,
             hsh->bh_root.string);
          bfd_set_error (bfd_error_bad_value);
          return FALSE;
@@ -858,7 +843,7 @@ hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
        insn = hppa_rebuild_insn ((int) BL22_RP, val, 22);
       bfd_put_32 (stub_bfd, insn, loc);
 
-      bfd_put_32 (stub_bfd, (bfd_vma) NOP,         loc + 4);
+      bfd_put_32 (stub_bfd, (bfd_vma) NOP,        loc + 4);
       bfd_put_32 (stub_bfd, (bfd_vma) LDW_RP,      loc + 8);
       bfd_put_32 (stub_bfd, (bfd_vma) LDSID_RP_R1, loc + 12);
       bfd_put_32 (stub_bfd, (bfd_vma) MTSP_R1,     loc + 16);
@@ -1020,33 +1005,34 @@ elf32_hppa_copy_indirect_symbol (struct bfd_link_info *info,
   hh_dir = hppa_elf_hash_entry (eh_dir);
   hh_ind = hppa_elf_hash_entry (eh_ind);
 
-  if (hh_ind->dyn_relocs != NULL)
+  if (hh_ind->dyn_relocs != NULL
+      && eh_ind->root.type == bfd_link_hash_indirect)
     {
       if (hh_dir->dyn_relocs != NULL)
        {
-         struct elf32_hppa_dyn_reloc_entry **hdh_pp;
-         struct elf32_hppa_dyn_reloc_entry *hdh_p;
+         struct elf_dyn_relocs **hdh_pp;
+         struct elf_dyn_relocs *hdh_p;
 
          /* Add reloc counts against the indirect sym to the direct sym
             list.  Merge any entries against the same section.  */
          for (hdh_pp = &hh_ind->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
            {
-             struct elf32_hppa_dyn_reloc_entry *hdh_q;
+             struct elf_dyn_relocs *hdh_q;
 
              for (hdh_q = hh_dir->dyn_relocs;
                   hdh_q != NULL;
-                  hdh_q = hdh_q->hdh_next)
+                  hdh_q = hdh_q->next)
                if (hdh_q->sec == hdh_p->sec)
                  {
 #if RELATIVE_DYNRELOCS
-                   hdh_q->relative_count += hdh_p->relative_count;
+                   hdh_q->pc_count += hdh_p->pc_count;
 #endif
                    hdh_q->count += hdh_p->count;
-                   *hdh_pp = hdh_p->hdh_next;
+                   *hdh_pp = hdh_p->next;
                    break;
                  }
              if (hdh_q == NULL)
-               hdh_pp = &hdh_p->hdh_next;
+               hdh_pp = &hdh_p->next;
            }
          *hdh_pp = hh_dir->dyn_relocs;
        }
@@ -1055,30 +1041,14 @@ elf32_hppa_copy_indirect_symbol (struct bfd_link_info *info,
       hh_ind->dyn_relocs = NULL;
     }
 
-  if (ELIMINATE_COPY_RELOCS
-      && eh_ind->root.type != bfd_link_hash_indirect
-      && eh_dir->dynamic_adjusted)
+  if (eh_ind->root.type == bfd_link_hash_indirect)
     {
-      /* If called to transfer flags for a weakdef during processing
-        of elf_adjust_dynamic_symbol, don't copy non_got_ref.
-        We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
-      if (eh_dir->versioned != versioned_hidden)
-       eh_dir->ref_dynamic |= eh_ind->ref_dynamic;
-      eh_dir->ref_regular |= eh_ind->ref_regular;
-      eh_dir->ref_regular_nonweak |= eh_ind->ref_regular_nonweak;
-      eh_dir->needs_plt |= eh_ind->needs_plt;
+      hh_dir->plabel |= hh_ind->plabel;
+      hh_dir->tls_type |= hh_ind->tls_type;
+      hh_ind->tls_type = GOT_UNKNOWN;
     }
-  else
-    {
-      if (eh_ind->root.type == bfd_link_hash_indirect)
-       {
-         hh_dir->plabel |= hh_ind->plabel;
-         hh_dir->tls_type |= hh_ind->tls_type;
-         hh_ind->tls_type = GOT_UNKNOWN;
-       }
 
-      _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind);
-    }
+  _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind);
 }
 
 static int
@@ -1173,10 +1143,6 @@ elf32_hppa_check_relocs (bfd *abfd,
          while (hh->eh.root.type == bfd_link_hash_indirect
                 || hh->eh.root.type == bfd_link_hash_warning)
            hh = hppa_elf_hash_entry (hh->eh.root.u.i.link);
-
-         /* PR15323, ref flags aren't set for references in the same
-            object.  */
-         hh->eh.root.non_ir_ref_regular = 1;
        }
 
       r_type = ELF32_R_TYPE (rela->r_info);
@@ -1274,7 +1240,7 @@ elf32_hppa_check_relocs (bfd *abfd,
            {
              _bfd_error_handler
                /* xgettext:c-format */
-               (_("%B: relocation %s can not be used when making a shared object; recompile with -fPIC"),
+               (_("%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"),
                 abfd,
                 elf_hppa_howto_table[r_type].name);
              bfd_set_error (bfd_error_bad_value);
@@ -1318,7 +1284,7 @@ elf32_hppa_check_relocs (bfd *abfd,
        case R_PARISC_TLS_IE21L:
        case R_PARISC_TLS_IE14R:
          if (bfd_link_dll (info))
-            info->flags |= DF_STATIC_TLS;
+           info->flags |= DF_STATIC_TLS;
          need_entry = NEED_GOT;
          break;
 
@@ -1426,7 +1392,7 @@ elf32_hppa_check_relocs (bfd *abfd,
          /* Flag this symbol as having a non-got, non-plt reference
             so that we generate copy relocs if it turns out to be
             dynamic.  */
-         if (hh != NULL && !bfd_link_pic (info))
+         if (hh != NULL)
            hh->eh.non_got_ref = 1;
 
          /* If we are creating a shared library then we need to copy
@@ -1469,8 +1435,8 @@ elf32_hppa_check_relocs (bfd *abfd,
                  && (hh->eh.root.type == bfd_link_hash_defweak
                      || !hh->eh.def_regular)))
            {
-             struct elf32_hppa_dyn_reloc_entry *hdh_p;
-             struct elf32_hppa_dyn_reloc_entry **hdh_head;
+             struct elf_dyn_relocs *hdh_p;
+             struct elf_dyn_relocs **hdh_head;
 
              /* Create a reloc section in dynobj and make room for
                 this reloc.  */
@@ -1511,7 +1477,7 @@ elf32_hppa_check_relocs (bfd *abfd,
                    sr = sec;
 
                  vpp = &elf_section_data (sr)->local_dynrel;
-                 hdh_head = (struct elf32_hppa_dyn_reloc_entry **) vpp;
+                 hdh_head = (struct elf_dyn_relocs **) vpp;
                }
 
              hdh_p = *hdh_head;
@@ -1520,19 +1486,19 @@ elf32_hppa_check_relocs (bfd *abfd,
                  hdh_p = bfd_alloc (htab->etab.dynobj, sizeof *hdh_p);
                  if (hdh_p == NULL)
                    return FALSE;
-                 hdh_p->hdh_next = *hdh_head;
+                 hdh_p->next = *hdh_head;
                  *hdh_head = hdh_p;
                  hdh_p->sec = sec;
                  hdh_p->count = 0;
 #if RELATIVE_DYNRELOCS
-                 hdh_p->relative_count = 0;
+                 hdh_p->pc_count = 0;
 #endif
                }
 
              hdh_p->count += 1;
 #if RELATIVE_DYNRELOCS
              if (!IS_ABSOLUTE_RELOC (rtype))
-               hdh_p->relative_count += 1;
+               hdh_p->pc_count += 1;
 #endif
            }
        }
@@ -1661,10 +1627,10 @@ static asection *
 readonly_dynrelocs (struct elf_link_hash_entry *eh)
 {
   struct elf32_hppa_link_hash_entry *hh;
-  struct elf32_hppa_dyn_reloc_entry *hdh_p;
+  struct elf_dyn_relocs *hdh_p;
 
   hh = hppa_elf_hash_entry (eh);
-  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->hdh_next)
+  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
     {
       asection *sec = hdh_p->sec->output_section;
 
@@ -1674,6 +1640,24 @@ readonly_dynrelocs (struct elf_link_hash_entry *eh)
   return NULL;
 }
 
+/* Return true if we have dynamic relocs against H or any of its weak
+   aliases, that apply to read-only sections.  Cannot be used after
+   size_dynamic_sections.  */
+
+static bfd_boolean
+alias_readonly_dynrelocs (struct elf_link_hash_entry *eh)
+{
+  struct elf32_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
+  do
+    {
+      if (readonly_dynrelocs (&hh->eh))
+       return TRUE;
+      hh = hppa_elf_hash_entry (hh->eh.u.alias);
+    } while (hh != NULL && &hh->eh != eh);
+
+  return FALSE;
+}
+
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
@@ -1692,30 +1676,12 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (eh->type == STT_FUNC
       || eh->needs_plt)
     {
-      /* After adjust_dynamic_symbol, non_got_ref set in the non-pic
-        case means that dyn_relocs for this symbol should be
-        discarded;  We either want the symbol to remain undefined, or
-        we have a local definition of some sort.  The "local
-        definition" for non-function symbols may be due to creating a
-        local definition in .dynbss.
-        Unlike other targets, elf32-hppa.c does not define a function
-        symbol in a non-pic executable on PLT stub code, so we don't
-        have a local definition in that case.  dyn_relocs therefore
-        should not be discarded for function symbols, generally.
-        However we should discard dyn_relocs if we've decided that an
-        undefined function symbol is local, for example due to
-        non-default visibility, or UNDEFWEAK_NO_DYNAMIC_RELOC is
-        true for an undefined weak symbol.  */
       bfd_boolean local = (SYMBOL_CALLS_LOCAL (info, eh)
                           || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh));
-      /* Prior to adjust_dynamic_symbol, non_got_ref set means that
-        check_relocs set up some dyn_relocs for this symbol.
-        The !non_got_ref term here is saying that if we didn't have
-        any dyn_relocs set up by check_relocs, then we don't want
-        relocate_section looking for them.
-        FIXME: Get rid of the inversion, so non_got_ref set after
-        dyn_relocs means we do have dyn_relocs.  */
-      eh->non_got_ref = local || !eh->non_got_ref;
+      /* Discard dyn_relocs when non-pic if we've decided that a
+        function symbol is local.  */
+      if (!bfd_link_pic (info) && local)
+       hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
 
       /* If the symbol is used by a plabel, we must allocate a PLT slot.
         The refcounts are not reliable when it has been hidden since
@@ -1739,24 +1705,33 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
          eh->needs_plt = 0;
        }
 
+      /* Unlike other targets, elf32-hppa.c does not define a function
+        symbol in a non-pic executable on PLT stub code, so we don't
+        have a local definition in that case.  ie. dyn_relocs can't
+        be discarded.  */
+
       /* Function symbols can't have copy relocs.  */
       return TRUE;
     }
   else
     eh->plt.offset = (bfd_vma) -1;
 
+  htab = hppa_link_hash_table (info);
+  if (htab == NULL)
+    return FALSE;
+
   /* If this is a weak symbol, and there is a real definition, the
      processor independent code will have arranged for us to see the
      real definition first, and we can just use the same value.  */
-  if (eh->u.weakdef != NULL)
+  if (eh->is_weakalias)
     {
-      if (eh->u.weakdef->root.type != bfd_link_hash_defined
-         && eh->u.weakdef->root.type != bfd_link_hash_defweak)
-       abort ();
-      eh->root.u.def.section = eh->u.weakdef->root.u.def.section;
-      eh->root.u.def.value = eh->u.weakdef->root.u.def.value;
-      if (ELIMINATE_COPY_RELOCS)
-       eh->non_got_ref = eh->u.weakdef->non_got_ref;
+      struct elf_link_hash_entry *def = weakdef (eh);
+      BFD_ASSERT (def->root.type == bfd_link_hash_defined);
+      eh->root.u.def.section = def->root.u.def.section;
+      eh->root.u.def.value = def->root.u.def.value;
+      if (def->root.u.def.section == htab->etab.sdynbss
+         || def->root.u.def.section == htab->etab.sdynrelro)
+       hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
       return TRUE;
     }
 
@@ -1773,26 +1748,17 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* If there are no references to this symbol that do not use the
      GOT, we don't need to generate a copy reloc.  */
   if (!eh->non_got_ref)
-    {
-      eh->non_got_ref = 1;
-      return TRUE;
-    }
+    return TRUE;
 
   /* If -z nocopyreloc was given, we won't generate them either.  */
   if (info->nocopyreloc)
-    {
-      eh->non_got_ref = 0;
-      return TRUE;
-    }
+    return TRUE;
 
+  /* If we don't find any dynamic relocs in read-only sections, then
+     we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
   if (ELIMINATE_COPY_RELOCS
-      && !readonly_dynrelocs (eh))
-    {
-      /* If we didn't find any dynamic relocs in read-only sections, then
-        we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-      eh->non_got_ref = 0;
-      return TRUE;
-    }
+      && !alias_readonly_dynrelocs (eh))
+    return TRUE;
 
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
@@ -1803,14 +1769,6 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
      determine the address it must put in the global offset table, so
      both the dynamic object and the regular object will refer to the
      same memory location for the variable.  */
-
-  htab = hppa_link_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  /* We must generate a COPY reloc to tell the dynamic linker to
-     copy the initial value out of the dynamic object and into the
-     runtime process image.  */
   if ((eh->root.u.def.section->flags & SEC_READONLY) != 0)
     {
       sec = htab->etab.sdynrelro;
@@ -1823,10 +1781,15 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
     }
   if ((eh->root.u.def.section->flags & SEC_ALLOC) != 0 && eh->size != 0)
     {
+      /* We must generate a COPY reloc to tell the dynamic linker to
+        copy the initial value out of the dynamic object and into the
+        runtime process image.  */
       srel->size += sizeof (Elf32_External_Rela);
       eh->needs_copy = 1;
     }
 
+  /* We no longer want dyn_relocs.  */
+  hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
   return _bfd_elf_adjust_dynamic_copy (info, eh, sec);
 }
 
@@ -1954,7 +1917,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
   struct elf32_hppa_link_hash_table *htab;
   asection *sec;
   struct elf32_hppa_link_hash_entry *hh;
-  struct elf32_hppa_dyn_reloc_entry *hdh_p;
+  struct elf_dyn_relocs *hdh_p;
 
   if (eh->root.type == bfd_link_hash_indirect)
     return TRUE;
@@ -2011,6 +1974,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
   if (!htab->etab.dynamic_sections_created)
     hh->dyn_relocs = NULL;
 
+  /* Discard relocs on undefined syms with non-default visibility.  */
+  else if ((eh->root.type == bfd_link_hash_undefined
+           && ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT)
+          || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
+    hh->dyn_relocs = NULL;
+
   if (hh->dyn_relocs == NULL)
     return TRUE;
 
@@ -2021,25 +1990,19 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
      changes.  */
   if (bfd_link_pic (info))
     {
-      /* Discard relocs on undefined syms with non-default visibility.  */
-      if ((eh->root.type == bfd_link_hash_undefined
-          && ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT)
-         || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
-       hh->dyn_relocs = NULL;
-
 #if RELATIVE_DYNRELOCS
-      else if (SYMBOL_CALLS_LOCAL (info, eh))
+      if (SYMBOL_CALLS_LOCAL (info, eh))
        {
-         struct elf32_hppa_dyn_reloc_entry **hdh_pp;
+         struct elf_dyn_relocs **hdh_pp;
 
          for (hdh_pp = &hh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
            {
-             hdh_p->count -= hdh_p->relative_count;
-             hdh_p->relative_count = 0;
+             hdh_p->count -= hdh_p->pc_count;
+             hdh_p->pc_count = 0;
              if (hdh_p->count == 0)
-               *hdh_pp = hdh_p->hdh_next;
+               *hdh_pp = hdh_p->next;
              else
-               hdh_pp = &hdh_p->hdh_next;
+               hdh_pp = &hdh_p->next;
            }
        }
 #endif
@@ -2056,8 +2019,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
         symbols which turn out to need copy relocs or are not
         dynamic.  */
 
-      if (!eh->non_got_ref
-         && !eh->def_regular)
+      if (eh->dynamic_adjusted
+         && !eh->def_regular
+         && !ELF_COMMON_DEF_P (eh))
        {
          if (!ensure_undef_dynamic (info, eh))
            return FALSE;
@@ -2070,7 +2034,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
     }
 
   /* Finally, allocate space.  */
-  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->hdh_next)
+  for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
     {
       asection *sreloc = elf_section_data (hdh_p->sec)->sreloc;
       sreloc->size += hdh_p->count * sizeof (Elf32_External_Rela);
@@ -2116,8 +2080,8 @@ maybe_set_textrel (struct elf_link_hash_entry *eh, void *inf)
 
       info->flags |= DF_TEXTREL;
       info->callbacks->minfo
-       (_("%B: dynamic relocation in read-only section `%A'\n"),
-        sec->owner, sec);
+       (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
+        sec->owner, eh->root.root.string, sec);
 
       /* Not an error, just cut short the traversal.  */
       return FALSE;
@@ -2181,12 +2145,12 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
        {
-         struct elf32_hppa_dyn_reloc_entry *hdh_p;
+         struct elf_dyn_relocs *hdh_p;
 
-         for (hdh_p = ((struct elf32_hppa_dyn_reloc_entry *)
+         for (hdh_p = ((struct elf_dyn_relocs *)
                    elf_section_data (sec)->local_dynrel);
               hdh_p != NULL;
-              hdh_p = hdh_p->hdh_next)
+              hdh_p = hdh_p->next)
            {
              if (!bfd_is_abs_section (hdh_p->sec)
                  && bfd_is_abs_section (hdh_p->sec->output_section))
@@ -2268,7 +2232,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (htab->tls_ldm_got.refcount > 0)
     {
       /* Allocate 2 got entries and 1 dynamic reloc for
-         R_PARISC_TLS_DTPMOD32 relocs.  */
+        R_PARISC_TLS_DTPMOD32 relocs.  */
       htab->tls_ldm_got.offset = htab->etab.sgot->size;
       htab->etab.sgot->size += (GOT_ENTRY_SIZE * 2);
       htab->etab.srelgot->size += sizeof (Elf32_External_Rela);
@@ -2714,7 +2678,7 @@ get_local_syms (bfd *output_bfd, bfd *input_bfd, struct bfd_link_info *info)
                  else
                    {
                      /* xgettext:c-format */
-                     _bfd_error_handler (_("%B: duplicate export stub %s"),
+                     _bfd_error_handler (_("%pB: duplicate export stub %s"),
                                          input_bfd, stub_name);
                    }
                }
@@ -3069,9 +3033,9 @@ elf32_hppa_set_gp (bfd *abfd, struct bfd_link_info *info)
            {
              if (strcmp (bfd_get_target (abfd), "elf32-hppa-netbsd") != 0)
                {
-                 /* We know we don't have a .plt.  If .got is large,
+                 /* We know we don't have a .plt.  If .got is large,
                     offset our LTP.  */
-                 if (sec->size > 0x2000)
+                 if (sec->size > 0x2000)
                    gp_val = 0x2000;
                }
            }
@@ -3367,10 +3331,11 @@ final_link_relocate (asection *input_section,
                   error.  */
                _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%B(%A+%#Lx): %s fixup for insn %#x is not supported in a non-shared link"),
+                 (_("%pB(%pA+%#" PRIx64 "): %s fixup for insn %#x "
+                    "is not supported in a non-shared link"),
                   input_bfd,
                   input_section,
-                  offset,
+                  (uint64_t) offset,
                   howto->name,
                   insn);
            }
@@ -3533,10 +3498,11 @@ final_link_relocate (asection *input_section,
     {
       _bfd_error_handler
        /* xgettext:c-format */
-       (_("%B(%A+%#Lx): cannot reach %s, recompile with -ffunction-sections"),
+       (_("%pB(%pA+%#" PRIx64 "): cannot reach %s, "
+          "recompile with -ffunction-sections"),
         input_bfd,
         input_section,
-        offset,
+        (uint64_t) offset,
         hsh->bh_root.string);
       bfd_set_error (bfd_error_bad_value);
       return bfd_reloc_notsupported;
@@ -3799,7 +3765,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
                                                         bfd_link_pic (info),
                                                         &hh->eh))
                    {
-                     /* In a non-shared link, adjust_dynamic_symbols
+                     /* In a non-shared link, adjust_dynamic_symbol
                         isn't called for symbols forced local.  We
                         need to write out the plt entry here.  */
                      if ((off & 1) != 0)
@@ -3897,25 +3863,13 @@ elf32_hppa_relocate_section (bfd *output_bfd,
          if ((input_section->flags & SEC_ALLOC) == 0)
            break;
 
-         /* The reloc types handled here and this conditional
-            expression must match the code in ..check_relocs and
-            allocate_dynrelocs.  ie. We need exactly the same condition
-            as in ..check_relocs, with some extra conditions (dynindx
-            test in this case) to cater for relocs removed by
-            allocate_dynrelocs.  */
-         if ((bfd_link_pic (info)
-              && !(hh != NULL
-                   && ((hh->eh.root.type == bfd_link_hash_undefined
-                        && ELF_ST_VISIBILITY (hh->eh.other) != STV_DEFAULT)
-                       || UNDEFWEAK_NO_DYNAMIC_RELOC (info, &hh->eh)))
-              && (IS_ABSOLUTE_RELOC (r_type)
-                  || !SYMBOL_CALLS_LOCAL (info, &hh->eh)))
-             || (ELIMINATE_COPY_RELOCS
-                 && !bfd_link_pic (info)
-                 && hh != NULL
-                 && hh->eh.dynindx != -1
-                 && !hh->eh.non_got_ref
-                 && !hh->eh.def_regular))
+         if (bfd_link_pic (info)
+             ? ((hh == NULL
+                 || hh->dyn_relocs != NULL)
+                && ((hh != NULL && pc_dynrelocs (hh))
+                    || IS_ABSOLUTE_RELOC (r_type)))
+             : (hh != NULL
+                && hh->dyn_relocs != NULL))
            {
              Elf_Internal_Rela outrel;
              bfd_boolean skip;
@@ -4079,9 +4033,9 @@ elf32_hppa_relocate_section (bfd *output_bfd,
                bfd_byte *loc = NULL;
                int cur_off = off;
 
-               /* The GOT entries have not been initialized yet.  Do it
-                  now, and emit any relocations.  If both an IE GOT and a
-                  GD GOT are necessary, we emit the GD first.  */
+               /* The GOT entries have not been initialized yet.  Do it
+                  now, and emit any relocations.  If both an IE GOT and a
+                  GD GOT are necessary, we emit the GD first.  */
 
                if (indx != 0
                    || (bfd_link_pic (info)
@@ -4121,12 +4075,12 @@ elf32_hppa_relocate_section (bfd *output_bfd,
                      }
                    else
                      {
-                       /* If we are not emitting relocations for a
-                          general dynamic reference, then we must be in a
-                          static link or an executable link with the
-                          symbol binding locally.  Mark it as belonging
-                          to module 1, the executable.  */
-                       bfd_put_32 (output_bfd, 1,
+                       /* If we are not emitting relocations for a
+                          general dynamic reference, then we must be in a
+                          static link or an executable link with the
+                          symbol binding locally.  Mark it as belonging
+                          to module 1, the executable.  */
+                       bfd_put_32 (output_bfd, 1,
                                    htab->etab.sgot->contents + cur_off);
                        bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
                                    htab->etab.sgot->contents + cur_off + 4);
@@ -4188,7 +4142,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
                    if (*sym_name == '\0')
                      sym_name = bfd_section_name (input_bfd, sym_sec);
                    _bfd_error_handler
-                     (_("%B:%s has both normal and TLS relocs"),
+                     (_("%pB:%s has both normal and TLS relocs"),
                       input_bfd, sym_name);
                  }
                bfd_set_error (bfd_error_bad_value);
@@ -4196,8 +4150,8 @@ elf32_hppa_relocate_section (bfd *output_bfd,
              }
 
            if ((tls_type & GOT_TLS_GD)
-               && r_type != R_PARISC_TLS_GD21L
-               && r_type != R_PARISC_TLS_GD14R)
+               && r_type != R_PARISC_TLS_GD21L
+               && r_type != R_PARISC_TLS_GD14R)
              off += 2 * GOT_ENTRY_SIZE;
 
            /* Add the base of the GOT to the relocation value.  */
@@ -4247,10 +4201,10 @@ elf32_hppa_relocate_section (bfd *output_bfd,
            {
              _bfd_error_handler
                /* xgettext:c-format */
-               (_("%B(%A+%#Lx): cannot handle %s for %s"),
+               (_("%pB(%pA+%#" PRIx64 "): cannot handle %s for %s"),
                 input_bfd,
                 input_section,
-                rela->r_offset,
+                (uint64_t) rela->r_offset,
                 howto->name,
                 sym_name);
              bfd_set_error (bfd_error_bad_value);
@@ -4431,7 +4385,7 @@ elf32_hppa_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
       case R_PARISC_TLS_DTPMOD32:
       case R_PARISC_TLS_DTPOFF32:
       case R_PARISC_TLS_TPREL32:
-        return reloc_class_normal;
+       return reloc_class_normal;
     }
 
   if (ELF32_R_SYM (rela->r_info) == STN_UNDEF)
This page took 0.033412 seconds and 4 git commands to generate.