Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / elf32-hppa.c
index 6b2abb26a14662a883c576ba56e0eafdb1be03bb..a61adbc3c8995b015cbe9a0faeadf93f350f6e58 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-2019 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
@@ -226,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;
 
@@ -520,6 +503,8 @@ hppa_get_stub_entry (const asection *input_section,
      more than one stub used to reach say, printf, and we need to
      distinguish between them.  */
   id_sec = htab->stub_group[input_section->id].link_sec;
+  if (id_sec == NULL)
+    return NULL;
 
   if (hh != NULL && hh->hsh_cache != NULL
       && hh->hsh_cache->hh == hh
@@ -591,7 +576,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;
     }
@@ -629,6 +614,9 @@ hppa_type_of_stub (asection *input_sec,
       return hppa_stub_import;
     }
 
+  if (destination == (bfd_vma) -1)
+    return hppa_stub_none;
+
   /* Determine where the call point is.  */
   location = (input_sec->output_offset
              + input_sec->output_section->vma
@@ -843,10 +831,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;
@@ -859,7 +848,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);
@@ -1026,29 +1015,29 @@ elf32_hppa_copy_indirect_symbol (struct bfd_link_info *info,
     {
       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;
        }
@@ -1057,30 +1046,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
@@ -1272,7 +1245,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);
@@ -1300,9 +1273,7 @@ elf32_hppa_check_relocs (bfd *abfd,
          /* This relocation describes which C++ vtable entries are actually
             used.  Record for later use during GC.  */
        case R_PARISC_GNU_VTENTRY:
-         BFD_ASSERT (hh != NULL);
-         if (hh != NULL
-             && !bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend))
+         if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend))
            return FALSE;
          continue;
 
@@ -1316,7 +1287,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;
 
@@ -1424,7 +1395,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
@@ -1467,8 +1438,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.  */
@@ -1509,7 +1480,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;
@@ -1518,19 +1489,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
            }
        }
@@ -1659,10 +1630,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;
 
@@ -1748,6 +1719,10 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
   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.  */
@@ -1757,8 +1732,9 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
       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 (ELIMINATE_COPY_RELOCS)
-       eh->non_got_ref = def->non_got_ref;
+      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;
     }
 
@@ -1781,13 +1757,11 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (info->nocopyreloc)
     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
       && !alias_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.  */
-      return TRUE;
-    }
+    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
@@ -1798,14 +1772,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;
@@ -1818,6 +1784,9 @@ 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;
     }
@@ -1925,18 +1894,19 @@ got_entries_needed (int tls_type)
 }
 
 /* Calculate size of relocs needed for symbol given its TLS_TYPE and
-   NEEDed GOT entries.  KNOWN says a TPREL offset can be calculated
-   at link time.  */
+   NEEDed GOT entries.  TPREL_KNOWN says a TPREL offset can be
+   calculated at link time.  DTPREL_KNOWN says the same for a DTPREL
+   offset.  */
 
 static inline unsigned int
-got_relocs_needed (int tls_type, unsigned int need, bfd_boolean known)
+got_relocs_needed (int tls_type, unsigned int need,
+                  bfd_boolean dtprel_known, bfd_boolean tprel_known)
 {
   /* All the entries we allocated need relocs.
-     Except IE in executable with a local symbol.  We could also omit
-     the DTPOFF reloc on the second word of a GD entry under the same
-     condition as that for IE, but ld.so might want to differentiate
-     LD and GD entries at some stage.  */
-  if ((tls_type & GOT_TLS_IE) != 0 && known)
+     Except for GD and IE with local symbols.  */
+  if ((tls_type & GOT_TLS_GD) != 0 && dtprel_known)
+    need -= GOT_ENTRY_SIZE;
+  if ((tls_type & GOT_TLS_IE) != 0 && tprel_known)
     need -= GOT_ENTRY_SIZE;
   return need * sizeof (Elf32_External_Rela) / GOT_ENTRY_SIZE;
 }
@@ -1951,7 +1921,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;
@@ -1990,15 +1960,16 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
       need = got_entries_needed (hh->tls_type);
       sec->size += need;
       if (htab->etab.dynamic_sections_created
-         && (bfd_link_pic (info)
+         && (bfd_link_dll (info)
+             || (bfd_link_pic (info) && (hh->tls_type & GOT_NORMAL) != 0)
              || (eh->dynindx != -1
                  && !SYMBOL_REFERENCES_LOCAL (info, eh)))
          && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
        {
-         bfd_boolean tprel_known = (bfd_link_executable (info)
-                                    && SYMBOL_REFERENCES_LOCAL (info, eh));
+         bfd_boolean local = SYMBOL_REFERENCES_LOCAL (info, eh);
          htab->etab.srelgot->size
-           += got_relocs_needed (hh->tls_type, need, tprel_known);
+           += got_relocs_needed (hh->tls_type, need, local,
+                                 local && bfd_link_executable (info));
        }
     }
   else
@@ -2027,16 +1998,16 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
 #if RELATIVE_DYNRELOCS
       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
@@ -2068,7 +2039,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);
@@ -2114,8 +2085,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;
@@ -2179,12 +2150,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))
@@ -2223,12 +2194,12 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
              *local_got = sec->size;
              need = got_entries_needed (*local_tls_type);
              sec->size += need;
-             if (bfd_link_pic (info))
-               {
-                 bfd_boolean tprel_known = bfd_link_executable (info);
-                 htab->etab.srelgot->size
-                   += got_relocs_needed (*local_tls_type, need, tprel_known);
-               }
+             if (bfd_link_dll (info)
+                 || (bfd_link_pic (info)
+                     && (*local_tls_type & GOT_NORMAL) != 0))
+               htab->etab.srelgot->size
+                 += got_relocs_needed (*local_tls_type, need, TRUE,
+                                       bfd_link_executable (info));
            }
          else
            *local_got = (bfd_vma) -1;
@@ -2266,7 +2237,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);
@@ -2712,7 +2683,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);
                    }
                }
@@ -2824,6 +2795,9 @@ elf32_hppa_size_stubs
              /* If there aren't any relocs, then there's nothing more
                 to do.  */
              if ((section->flags & SEC_RELOC) == 0
+                 || (section->flags & SEC_ALLOC) == 0
+                 || (section->flags & SEC_LOAD) == 0
+                 || (section->flags & SEC_CODE) == 0
                  || section->reloc_count == 0)
                continue;
 
@@ -2877,7 +2851,7 @@ elf32_hppa_size_stubs
                     section.  */
                  sym_sec = NULL;
                  sym_value = 0;
-                 destination = 0;
+                 destination = -1;
                  hh = NULL;
                  if (r_indx < symtab_hdr->sh_info)
                    {
@@ -3067,9 +3041,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;
                }
            }
@@ -3307,7 +3281,7 @@ final_link_relocate (asection *input_section,
                  || hh->eh.root.type == bfd_link_hash_defweak)))
        {
          hsh = hppa_get_stub_entry (input_section, sym_sec,
-                                           hh, rela, htab);
+                                    hh, rela, htab);
          if (hsh != NULL)
            {
              value = (hsh->stub_offset
@@ -3365,10 +3339,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);
            }
@@ -3506,7 +3481,7 @@ final_link_relocate (asection *input_section,
       if (value + addend + max_branch_offset >= 2*max_branch_offset)
        {
          hsh = hppa_get_stub_entry (input_section, sym_sec,
-                                           hh, rela, htab);
+                                    hh, rela, htab);
          if (hsh == NULL)
            return bfd_reloc_undefined;
 
@@ -3531,10 +3506,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;
@@ -3797,7 +3773,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)
@@ -4065,12 +4041,12 @@ 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)
+                   || (bfd_link_dll (info)
                        && (hh == NULL
                            || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &hh->eh))))
                  {
@@ -4094,29 +4070,32 @@ elf32_hppa_relocate_section (bfd *output_bfd,
                        bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
                        htab->etab.srelgot->reloc_count++;
                        loc += sizeof (Elf32_External_Rela);
+                       bfd_put_32 (output_bfd, 0,
+                                   htab->etab.sgot->contents + cur_off);
+                     }
+                   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,
+                                 htab->etab.sgot->contents + cur_off);
+
+                   if (indx != 0)
+                     {
                        outrel.r_info
                          = ELF32_R_INFO (indx, R_PARISC_TLS_DTPOFF32);
                        outrel.r_offset += 4;
                        bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
                        htab->etab.srelgot->reloc_count++;
                        loc += sizeof (Elf32_External_Rela);
-                       bfd_put_32 (output_bfd, 0,
-                                   htab->etab.sgot->contents + cur_off);
                        bfd_put_32 (output_bfd, 0,
                                    htab->etab.sgot->contents + cur_off + 4);
                      }
                    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,
-                                   htab->etab.sgot->contents + cur_off);
-                       bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
-                                   htab->etab.sgot->contents + cur_off + 4);
-                     }
+                     bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
+                                 htab->etab.sgot->contents + cur_off + 4);
                    cur_off += 8;
                  }
 
@@ -4174,7 +4153,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);
@@ -4182,8 +4161,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.  */
@@ -4233,10 +4212,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);
@@ -4417,7 +4396,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.040553 seconds and 4 git commands to generate.