Don't exceed reloc array bounds
[deliverable/binutils-gdb.git] / bfd / elf32-ppc.c
index 32104a12fdf03bb727f73c4aaedc72eee9fa9d75..182dc2a845887ad3e35778f847adc160bddacb8f 100644 (file)
@@ -69,7 +69,7 @@ static bfd_reloc_status_type ppc_elf_unhandled_reloc
 /* For new-style .glink and .plt.  */
 #define GLINK_PLTRESOLVE 16*4
 #define GLINK_ENTRY_SIZE(htab, h)                                      \
-  (((!htab->params->speculate_indirect_jumps ? 6*4 : 4*4)                      \
+  ((4*4                                                                        \
     + (h != NULL                                                       \
        && h == htab->tls_get_addr                                      \
        && !htab->params->no_tls_get_addr_opt ? 8*4 : 0)                        \
@@ -155,8 +155,6 @@ static const bfd_vma ppc_elf_vxworks_pic_plt0_entry
 #define BA             0x48000002
 #define BCL_20_31      0x429f0005
 #define BCTR           0x4e800420
-#define CRSETEQ                0x4c421242
-#define BEQCTRM                0x4dc20420
 #define BEQLR          0x4d820020
 #define CMPWI_11_0     0x2c0b0000
 #define LIS_11         0x3d600000
@@ -2016,7 +2014,7 @@ ppc_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 
 /* Set the howto pointer for a PowerPC ELF reloc.  */
 
-static void
+static bfd_boolean
 ppc_elf_info_to_howto (bfd *abfd,
                       arelent *cache_ptr,
                       Elf_Internal_Rela *dst)
@@ -2031,24 +2029,27 @@ ppc_elf_info_to_howto (bfd *abfd,
   if (r_type >= R_PPC_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: unrecognised PPC reloc number: %d"),
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
                          abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
-      r_type = R_PPC_NONE;
+      return FALSE;
     }
+
   cache_ptr->howto = ppc_elf_howto_table[r_type];
 
   /* Just because the above assert didn't trigger doesn't mean that
      ELF32_R_TYPE (dst->r_info) is necessarily a valid relocation.  */
-  if (!cache_ptr->howto)
+  if (cache_ptr->howto == NULL)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid relocation type %d"),
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
                          abfd, r_type);
       bfd_set_error (bfd_error_bad_value);
 
-      cache_ptr->howto = ppc_elf_howto_table[R_PPC_NONE];
+      return FALSE;
     }
+
+  return TRUE;
 }
 
 /* Handle the R_PPC_ADDR16_HA and R_PPC_REL16_HA relocs.  */
@@ -2736,7 +2737,7 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
        continue;
 
       /* xgettext:c-format */
-      error_message = _("corrupt %s section in %B");
+      error_message = _("corrupt %s section in %pB");
       length = asec->size;
       if (length < 20)
        goto fail;
@@ -2756,7 +2757,7 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
          || (bfd_bread (buffer, length, ibfd) != length))
        {
          /* xgettext:c-format */
-         error_message = _("unable to read in %s section from %B");
+         error_message = _("unable to read in %s section from %pB");
          goto fail;
        }
 
@@ -2798,7 +2799,7 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
        {
          ibfd = abfd;
          /* xgettext:c-format */
-         error_message = _("warning: unable to set size of %s section in %B");
+         error_message = _("warning: unable to set size of %s section in %pB");
        }
     }
 
@@ -2848,7 +2849,7 @@ ppc_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED)
   if (buffer == NULL)
     {
       _bfd_error_handler
-       (_("failed to allocate space for new APUinfo section."));
+       (_("failed to allocate space for new APUinfo section"));
       return;
     }
 
@@ -2867,10 +2868,10 @@ ppc_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED)
     }
 
   if (length != asec->size)
-    _bfd_error_handler (_("failed to compute new APUinfo section."));
+    _bfd_error_handler (_("failed to compute new APUinfo section"));
 
   if (! bfd_set_section_contents (abfd, asec, buffer, (file_ptr) 0, length))
-    _bfd_error_handler (_("failed to install new APUinfo section."));
+    _bfd_error_handler (_("failed to install new APUinfo section"));
 
   free (buffer);
 
@@ -2880,14 +2881,15 @@ ppc_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED)
 static bfd_boolean
 is_nonpic_glink_stub (bfd *abfd, asection *glink, bfd_vma off)
 {
-  bfd_byte buf[3 * 4];
+  bfd_byte buf[4 * 4];
 
   if (!bfd_get_section_contents (abfd, glink, buf, off, sizeof buf))
     return FALSE;
 
   return ((bfd_get_32 (abfd, buf + 0) & 0xffff0000) == LIS_11
          && (bfd_get_32 (abfd, buf + 4) & 0xffff0000) == LWZ_11_11
-         && bfd_get_32 (abfd, buf + 8) == MTCTR_11);
+         && bfd_get_32 (abfd, buf + 8) == MTCTR_11
+         && bfd_get_32 (abfd, buf + 12) == BCTR);
 }
 
 static bfd_boolean
@@ -3366,7 +3368,7 @@ ppc_elf_link_hash_table_create (bfd *abfd)
 {
   struct ppc_elf_link_hash_table *ret;
   static struct ppc_elf_params default_params
-    = { PLT_OLD, 0, 1, 0, 1, 0, 0, 12, 0, 0, 0 };
+    = { PLT_OLD, 0, 0, 1, 0, 0, 12, 0, 0, 0 };
 
   ret = bfd_zmalloc (sizeof (struct ppc_elf_link_hash_table));
   if (ret == NULL)
@@ -3926,7 +3928,7 @@ bad_shared_reloc (bfd *abfd, enum elf_ppc_reloc_type r_type)
 {
   _bfd_error_handler
     /* xgettext:c-format */
-    (_("%B: relocation %s cannot be used when making a shared object"),
+    (_("%pB: relocation %s cannot be used when making a shared object"),
      abfd,
      ppc_elf_howto_table[r_type]->name);
   bfd_set_error (bfd_error_bad_value);
@@ -3963,7 +3965,7 @@ ppc_elf_check_relocs (bfd *abfd,
     return TRUE;
 
 #ifdef DEBUG
-  _bfd_error_handler ("ppc_elf_check_relocs called for section %A in %B",
+  _bfd_error_handler ("ppc_elf_check_relocs called for section %pA in %pB",
                      sec, abfd);
 #endif
 
@@ -4639,21 +4641,21 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *ibfd, struct bfd_link_info *info)
       else if (out_fp != 2 && in_fp == 2)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses hard float, %B uses soft float"), obfd, ibfd);
+         (_("warning: %pB uses hard float, %pB uses soft float"), obfd, ibfd);
       else if (out_fp == 2 && in_fp != 2)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd);
+         (_("warning: %pB uses hard float, %pB uses soft float"), ibfd, obfd);
       else if (out_fp == 1 && in_fp == 3)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses double-precision hard float, "
-            "%B uses single-precision hard float"), obfd, ibfd);
+         (_("warning: %pB uses double-precision hard float, "
+            "%pB uses single-precision hard float"), obfd, ibfd);
       else if (out_fp == 3 && in_fp == 1)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses double-precision hard float, "
-            "%B uses single-precision hard float"), ibfd, obfd);
+         (_("warning: %pB uses double-precision hard float, "
+            "%pB uses single-precision hard float"), ibfd, obfd);
 
       in_fp = in_attr->i & 0xc;
       out_fp = out_attr->i & 0xc;
@@ -4667,23 +4669,23 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *ibfd, struct bfd_link_info *info)
       else if (out_fp != 2 * 4 && in_fp == 2 * 4)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses 64-bit long double, "
-            "%B uses 128-bit long double"), ibfd, obfd);
+         (_("warning: %pB uses 64-bit long double, "
+            "%pB uses 128-bit long double"), ibfd, obfd);
       else if (in_fp != 2 * 4 && out_fp == 2 * 4)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses 64-bit long double, "
-            "%B uses 128-bit long double"), obfd, ibfd);
+         (_("warning: %pB uses 64-bit long double, "
+            "%pB uses 128-bit long double"), obfd, ibfd);
       else if (out_fp == 1 * 4 && in_fp == 3 * 4)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses IBM long double, "
-            "%B uses IEEE long double"), ibfd, obfd);
+         (_("warning: %pB uses IBM long double, "
+            "%pB uses IEEE long double"), ibfd, obfd);
       else if (out_fp == 3 * 4 && in_fp == 1 * 4)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses IBM long double, "
-            "%B uses IEEE long double"), obfd, ibfd);
+         (_("warning: %pB uses IBM long double, "
+            "%pB uses IEEE long double"), obfd, ibfd);
     }
 }
 
@@ -4733,12 +4735,12 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
       else if (out_vec < in_vec)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses AltiVec vector ABI, %B uses SPE vector ABI"),
+         (_("warning: %pB uses AltiVec vector ABI, %pB uses SPE vector ABI"),
           obfd, ibfd);
       else if (out_vec > in_vec)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses AltiVec vector ABI, %B uses SPE vector ABI"),
+         (_("warning: %pB uses AltiVec vector ABI, %pB uses SPE vector ABI"),
           ibfd, obfd);
     }
 
@@ -4761,13 +4763,13 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
       else if (out_struct < in_struct)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses r3/r4 for small structure returns, "
-            "%B uses memory"), obfd, ibfd);
+         (_("warning: %pB uses r3/r4 for small structure returns, "
+            "%pB uses memory"), obfd, ibfd);
       else if (out_struct > in_struct)
        _bfd_error_handler
          /* xgettext:c-format */
-         (_("Warning: %B uses r3/r4 for small structure returns, "
-            "%B uses memory"), ibfd, obfd);
+         (_("warning: %pB uses r3/r4 for small structure returns, "
+            "%pB uses memory"), ibfd, obfd);
     }
 
   /* Merge Tag_compatibility attributes and any common GNU ones.  */
@@ -4821,7 +4823,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
        {
          error = TRUE;
          _bfd_error_handler
-           (_("%B: compiled with -mrelocatable and linked with "
+           (_("%pB: compiled with -mrelocatable and linked with "
               "modules compiled normally"), ibfd);
        }
       else if ((new_flags & (EF_PPC_RELOCATABLE | EF_PPC_RELOCATABLE_LIB)) == 0
@@ -4829,7 +4831,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
        {
          error = TRUE;
          _bfd_error_handler
-           (_("%B: compiled normally and linked with "
+           (_("%pB: compiled normally and linked with "
               "modules compiled with -mrelocatable"), ibfd);
        }
 
@@ -4857,7 +4859,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
          error = TRUE;
          _bfd_error_handler
            /* xgettext:c-format */
-           (_("%B: uses different e_flags (%#x) fields "
+           (_("%pB: uses different e_flags (%#x) fields "
               "than previous modules (%#x)"),
             ibfd, new_flags, old_flags);
        }
@@ -4898,7 +4900,7 @@ ppc_elf_vle_split16 (bfd *input_bfd,
          else
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B(%A+0x%lx): expected 16A style relocation on 0x%08x insn"),
+             (_("%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"),
               input_bfd, input_section, offset, opcode);
        }
     }
@@ -4917,7 +4919,7 @@ ppc_elf_vle_split16 (bfd *input_bfd,
          else
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B(%A+0x%lx): expected 16D style relocation on 0x%08x insn"),
+             (_("%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"),
               input_bfd, input_section, offset, opcode);
        }
     }
@@ -5008,10 +5010,9 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (htab->plt_type == PLT_OLD && htab->params->plt_style == PLT_NEW)
     {
       if (htab->old_bfd != NULL)
-       info->callbacks->einfo (_("%P: bss-plt forced due to %B\n"),
-                               htab->old_bfd);
+       _bfd_error_handler (_("bss-plt forced due to %pB"), htab->old_bfd);
       else
-       info->callbacks->einfo (_("%P: bss-plt forced by profiling\n"));
+       _bfd_error_handler (_("bss-plt forced by profiling"));
     }
 
   BFD_ASSERT (htab->plt_type != PLT_VXWORKS);
@@ -6164,7 +6165,7 @@ maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
 
       info->flags |= DF_TEXTREL;
       info->callbacks->minfo
-       (_("%B: dynamic relocation against `%T' in read-only section `%A'\n"),
+       (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
         sec->owner, h->root.root.string, sec);
 
       /* Not an error, just cut short the traversal.  */
@@ -6272,7 +6273,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
                      == (SEC_READONLY | SEC_ALLOC))
                    {
                      info->flags |= DF_TEXTREL;
-                     info->callbacks->minfo (_("%B: dynamic relocation in read-only section `%A'\n"),
+                     info->callbacks->minfo (_("%pB: dynamic relocation in read-only section `%pA'\n"),
                                              p->sec->owner, p->sec);
                    }
                }
@@ -7171,8 +7172,6 @@ ppc_elf_relax_section (bfd *abfd,
                  size = 4 * ARRAY_SIZE (stub_entry);
                  insn_offset = 0;
                }
-             if (!htab->params->speculate_indirect_jumps)
-               size += 8;
              stub_rtype = R_PPC_RELAX;
              if (tsec == htab->elf.splt
                  || tsec == htab->glink)
@@ -7454,26 +7453,6 @@ elf_finish_pointer_linker_section (bfd *input_bfd,
 #define PPC_HI(v) (((v) >> 16) & 0xffff)
 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
 
-static inline bfd_byte *
-output_bctr (struct ppc_elf_link_hash_table *htab, bfd *obfd, bfd_byte *p)
-{
-  if (!htab->params->speculate_indirect_jumps)
-    {
-      bfd_put_32 (obfd, CRSETEQ, p);
-      p += 4;
-      bfd_put_32 (obfd, BEQCTRM, p);
-      p += 4;
-      bfd_put_32 (obfd, B, p);
-      p += 4;
-    }
-  else
-    {
-      bfd_put_32 (obfd, BCTR, p);
-      p += 4;
-    }
-  return p;
-}
-
 static void
 write_glink_stub (struct elf_link_hash_entry *h, struct plt_entry *ent,
                  asection *plt_sec, unsigned char *p,
@@ -7541,7 +7520,8 @@ write_glink_stub (struct elf_link_hash_entry *h, struct plt_entry *ent,
   p += 4;
   bfd_put_32 (output_bfd, MTCTR_11, p);
   p += 4;
-  p = output_bctr (htab, output_bfd, p);
+  bfd_put_32 (output_bfd, BCTR, p);
+  p += 4;
   while (p < end)
     {
       bfd_put_32 (output_bfd, htab->params->ppc476_workaround ? BA : NOP, p);
@@ -7717,7 +7697,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
   struct ppc_elf_relax_info *relax_info = NULL;
 
 #ifdef DEBUG
-  _bfd_error_handler ("ppc_elf_relocate_section called for %B section %A, "
+  _bfd_error_handler ("ppc_elf_relocate_section called for %pB section %pA, "
                      "%ld relocations%s",
                      input_bfd, input_section,
                      (long) input_section->reloc_count,
@@ -8020,7 +8000,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
          break;
 
        case R_PPC_TLSGD:
-         if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
+         if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
+             && rel + 1 < relend)
            {
              unsigned int insn2;
              bfd_vma offset = rel->r_offset;
@@ -8047,7 +8028,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
          break;
 
        case R_PPC_TLSLD:
-         if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
+         if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
+             && rel + 1 < relend)
            {
              unsigned int insn2;
 
@@ -8183,8 +8165,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
              else
                _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%B(%A+%#Lx): error: %s with unexpected instruction %#x"),
-                  input_bfd, input_section, rel->r_offset,
+                 (_("%pB(%pA+%#" PRIx64 "): error: "
+                    "%s with unexpected instruction %#x"),
+                  input_bfd, input_section, (uint64_t) rel->r_offset,
                   "R_PPC_ADDR16_HA", insn);
            }
          else if (r_type == R_PPC_ADDR16_LO)
@@ -8218,8 +8201,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
              else
                _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%B(%A+%#Lx): error: %s with unexpected instruction %#x"),
-                  input_bfd, input_section, rel->r_offset,
+                 (_("%pB(%pA+%#" PRIx64 "): error: "
+                    "%s with unexpected instruction %#x"),
+                  input_bfd, input_section, (uint64_t) rel->r_offset,
                   "R_PPC_ADDR16_LO", insn);
            }
        }
@@ -8361,10 +8345,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
       switch (r_type)
        {
        default:
-         info->callbacks->einfo
-           /* xgettext:c-format */
-           (_("%P: %B: unknown relocation type %d for symbol %s\n"),
-            input_bfd, (int) r_type, sym_name);
+         /* xgettext:c-format */
+         _bfd_error_handler (_("%pB: %s unsupported"),
+                             input_bfd, howto->name);
 
          bfd_set_error (bfd_error_bad_value);
          ret = FALSE;
@@ -8979,7 +8962,6 @@ ppc_elf_relocate_section (bfd *output_bfd,
                stub = stub_entry;
                size = ARRAY_SIZE (stub_entry);
              }
-           --size;
 
            relocation += addend;
            if (bfd_link_relocatable (info))
@@ -9004,7 +8986,6 @@ ppc_elf_relocate_section (bfd *output_bfd,
                bfd_put_32 (input_bfd, insn, contents + insn_offset);
                insn_offset += 4;
              }
-           output_bctr (htab, input_bfd, contents + insn_offset);
 
            /* Rewrite the reloc and convert one of the trailing nop
               relocs to describe this relocation.  */
@@ -9121,10 +9102,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
            if (!(strcmp (name, ".sdata") == 0
                  || strcmp (name, ".sbss") == 0))
              {
-               info->callbacks->einfo
+               _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%P: %B: the target (%s) of a %s relocation is "
-                    "in the wrong output section (%s)\n"),
+                 (_("%pB: the target (%s) of a %s relocation is "
+                    "in the wrong output section (%s)"),
                   input_bfd,
                   sym_name,
                   howto->name,
@@ -9152,10 +9133,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
            if (!(strcmp (name, ".sdata2") == 0
                  || strcmp (name, ".sbss2") == 0))
              {
-               info->callbacks->einfo
+               _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%P: %B: the target (%s) of a %s relocation is "
-                    "in the wrong output section (%s)\n"),
+                 (_("%pB: the target (%s) of a %s relocation is "
+                    "in the wrong output section (%s)"),
                   input_bfd,
                   sym_name,
                   howto->name,
@@ -9243,10 +9224,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
              }
            else
              {
-               info->callbacks->einfo
+               _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%P: %B: the target (%s) of a %s relocation is "
-                    "in the wrong output section (%s)\n"),
+                 (_("%pB: the target (%s) of a %s relocation is "
+                    "in the wrong output section (%s)"),
                   input_bfd,
                   sym_name,
                   howto->name,
@@ -9333,7 +9314,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
              {
                _bfd_error_handler
                  /* xgettext:c-format */
-                 (_("%B: the target (%s) of a %s relocation is "
+                 (_("%pB: the target (%s) of a %s relocation is "
                     "in the wrong output section (%s)"),
                   input_bfd,
                   sym_name,
@@ -9439,12 +9420,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
        case R_PPC_EMB_RELST_HI:
        case R_PPC_EMB_RELST_HA:
        case R_PPC_EMB_BIT_FLD:
-         info->callbacks->einfo
-           /* xgettext:c-format */
-           (_("%P: %B: relocation %s is not yet supported for symbol %s\n"),
-            input_bfd,
-            howto->name,
-            sym_name);
+         /* xgettext:c-format */
+         _bfd_error_handler (_("%pB: %s unsupported"),
+                             input_bfd, howto->name);
 
          bfd_set_error (bfd_error_invalid_operation);
          ret = FALSE;
@@ -10429,11 +10407,10 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
       else
        {
          /* xgettext:c-format */
-         info->callbacks->einfo (_("%P: %s not defined in linker created %s\n"),
-                                 htab->elf.hgot->root.root.string,
-                                 (htab->elf.sgotplt != NULL
-                                  ? htab->elf.sgotplt->name
-                                  : htab->elf.sgot->name));
+         _bfd_error_handler (_("%s not defined in linker created %pA"),
+                             htab->elf.hgot->root.root.string,
+                             (htab->elf.sgotplt != NULL
+                              ? htab->elf.sgotplt : htab->elf.sgot));
          bfd_set_error (bfd_error_bad_value);
          ret = FALSE;
        }
@@ -10713,7 +10690,8 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
       p += 4;
       bfd_put_32 (output_bfd, ADD_11_0_11, p);
       p += 4;
-      p = output_bctr (htab, output_bfd, p);
+      bfd_put_32 (output_bfd, BCTR, p);
+      p += 4;
       while (p < endp)
        {
          bfd_put_32 (output_bfd,
This page took 0.036896 seconds and 4 git commands to generate.