Update ARC instruction data-base.
[deliverable/binutils-gdb.git] / bfd / elf32-bfin.c
index f88e5d49919367fbe22b4a74e62611c58dbaa665..b2fcf38b470e75ae0597cdd11f7b7c9cf7992de3 100644 (file)
@@ -1,6 +1,5 @@
 /* ADI Blackfin BFD support for 32-bit ELF.
-   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,7 +33,7 @@ bfin_pltpc_reloc (
      bfd *abfd ATTRIBUTE_UNUSED,
      arelent *reloc_entry ATTRIBUTE_UNUSED,
      asymbol *symbol ATTRIBUTE_UNUSED,
-     PTR data ATTRIBUTE_UNUSED,
+     void * data ATTRIBUTE_UNUSED,
      asection *input_section ATTRIBUTE_UNUSED,
      bfd *output_bfd ATTRIBUTE_UNUSED,
      char **error_message ATTRIBUTE_UNUSED)
@@ -48,7 +47,7 @@ static bfd_reloc_status_type
 bfin_pcrel24_reloc (bfd *abfd,
                     arelent *reloc_entry,
                     asymbol *symbol,
-                    PTR data,
+                    void * data,
                     asection *input_section,
                     bfd *output_bfd,
                     char **error_message ATTRIBUTE_UNUSED)
@@ -145,7 +144,7 @@ static bfd_reloc_status_type
 bfin_imm16_reloc (bfd *abfd,
                  arelent *reloc_entry,
                  asymbol *symbol,
-                 PTR data,
+                 void * data,
                  asection *input_section,
                  bfd *output_bfd,
                  char **error_message ATTRIBUTE_UNUSED)
@@ -217,7 +216,7 @@ static bfd_reloc_status_type
 bfin_byte4_reloc (bfd *abfd,
                   arelent *reloc_entry,
                   asymbol *symbol,
-                  PTR data,
+                  void * data,
                   asection *input_section,
                   bfd *output_bfd,
                   char **error_message ATTRIBUTE_UNUSED)
@@ -283,7 +282,7 @@ static bfd_reloc_status_type
 bfin_bfd_reloc (bfd *abfd,
                arelent *reloc_entry,
                asymbol *symbol,
-               PTR data,
+               void * data,
                asection *input_section,
                bfd *output_bfd,
                char **error_message ATTRIBUTE_UNUSED)
@@ -424,11 +423,11 @@ static reloc_howto_type bfin_howto_table [] =
   /* This reloc does nothing. .  */
   HOWTO (R_BFIN_UNUSED0,       /* 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_BFIN_UNUSED0",      /* name.  */
         FALSE,                 /* partial_inplace.  */
@@ -452,11 +451,11 @@ static reloc_howto_type bfin_howto_table [] =
 
   HOWTO (R_BFIN_UNUSED1,       /* 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_BFIN_UNUSED1",      /* name.  */
         FALSE,                 /* partial_inplace.  */
@@ -582,8 +581,8 @@ static reloc_howto_type bfin_howto_table [] =
 
   HOWTO (R_BFIN_UNUSEDB,       /* 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_dont, /* complain_on_overflow.  */
@@ -596,8 +595,8 @@ static reloc_howto_type bfin_howto_table [] =
 
   HOWTO (R_BFIN_UNUSEDC,       /* 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_dont, /* complain_on_overflow.  */
@@ -1066,13 +1065,13 @@ bfin_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
                            bfd_reloc_code_real_type code)
 {
   unsigned int i;
-  unsigned int r_type = BFIN_RELOC_MIN;
+  unsigned int r_type = (unsigned int) -1;
 
-  for (i = sizeof (bfin_reloc_map) / sizeof (bfin_reloc_map[0]); --i;)
+  for (i = sizeof (bfin_reloc_map) / sizeof (bfin_reloc_map[0]); i--;)
     if (bfin_reloc_map[i].bfd_reloc_val == code)
       r_type = bfin_reloc_map[i].bfin_reloc_val;
 
-  if (r_type <= BFIN_RELOC_MAX && r_type > BFIN_RELOC_MIN)
+  if (r_type <= BFIN_RELOC_MAX)
     return &bfin_howto_table [r_type];
 
   else if (r_type >= BFIN_GNUEXT_RELOC_MIN && r_type <= BFIN_GNUEXT_RELOC_MAX)
@@ -1109,7 +1108,7 @@ bfin_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 /* Given a bfin relocation type, return the howto.  */
 static reloc_howto_type *
 bfin_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
-                           unsigned int r_type)
+                       unsigned int r_type)
 {
   if (r_type <= BFIN_RELOC_MAX)
     return &bfin_howto_table [r_type];
@@ -1139,9 +1138,7 @@ elf32_bfin_final_write_processing (bfd *abfd,
 /* Return TRUE if the name is a local label.
    bfin local labels begin with L$.  */
 static bfd_boolean
-bfin_is_local_label_name (
-     bfd *abfd,
-     const char *label)
+bfin_is_local_label_name (bfd *abfd, const char *label)
 {
   if (label[0] == 'L' && label[1] == '$' )
     return TRUE;
@@ -1167,7 +1164,8 @@ bfin_check_relocs (bfd * abfd,
   const Elf_Internal_Rela *rel_end;
   asection *sgot;
   asection *srelgot;
-  if (info->relocatable)
+
+  if (bfd_link_relocatable (info))
     return TRUE;
 
   dynobj = elf_hash_table (info)->dynobj;
@@ -1188,7 +1186,13 @@ bfin_check_relocs (bfd * abfd,
       if (r_symndx < symtab_hdr->sh_info)
        h = NULL;
       else
-       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+       {
+         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
+       }
 
       switch (ELF32_R_TYPE (rel->r_info))
        {
@@ -1224,20 +1228,21 @@ bfin_check_relocs (bfd * abfd,
 
          if (sgot == NULL)
            {
-             sgot = bfd_get_section_by_name (dynobj, ".got");
+             sgot = bfd_get_linker_section (dynobj, ".got");
              BFD_ASSERT (sgot != NULL);
            }
 
-         if (srelgot == NULL && (h != NULL || info->shared))
+         if (srelgot == NULL && (h != NULL || bfd_link_pic (info)))
            {
-             srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+             srelgot = bfd_get_linker_section (dynobj, ".rela.got");
              if (srelgot == NULL)
                {
                  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
                                    | SEC_IN_MEMORY | SEC_LINKER_CREATED
                                    | SEC_READONLY);
-                 srelgot = bfd_make_section_with_flags (dynobj, ".rela.got",
-                                                        flags);
+                 srelgot = bfd_make_section_anyway_with_flags (dynobj,
+                                                               ".rela.got",
+                                                               flags);
                  if (srelgot == NULL
                      || !bfd_set_section_alignment (dynobj, srelgot, 2))
                    return FALSE;
@@ -1280,7 +1285,7 @@ bfin_check_relocs (bfd * abfd,
              if (local_got_refcounts[r_symndx] == 0)
                {
                  sgot->size += 4;
-                 if (info->shared)
+                 if (bfd_link_pic (info))
                    {
                      /* If we are generating a shared object, we need to
                         output a R_68K_RELATIVE reloc so that the dynamic
@@ -1301,7 +1306,9 @@ bfin_check_relocs (bfd * abfd,
 }
 
 static enum elf_reloc_type_class
-elf32_bfin_reloc_type_class (const Elf_Internal_Rela * rela)
+elf32_bfin_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
+                            const asection *rel_sec ATTRIBUTE_UNUSED,
+                            const Elf_Internal_Rela * rela)
 {
   switch ((int) ELF32_R_TYPE (rela->r_info))
     {
@@ -1436,19 +1443,19 @@ bfin_relocate_section (bfd * output_bfd,
        }
       else
        {
-         bfd_boolean warned;
+         bfd_boolean warned, ignored;
 
          RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
                                   r_symndx, symtab_hdr, sym_hashes,
                                   h, sec, relocation,
-                                  unresolved_reloc, warned);
+                                  unresolved_reloc, warned, ignored);
        }
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-                                        rel, relend, howto, contents);
+                                        rel, 1, relend, howto, 0, contents);
 
-      if (info->relocatable)
+      if (bfd_link_relocatable (info))
        continue;
 
       address = rel->r_offset;
@@ -1483,7 +1490,7 @@ bfin_relocate_section (bfd * output_bfd,
 
            if (sgot == NULL)
              {
-               sgot = bfd_get_section_by_name (dynobj, ".got");
+               sgot = bfd_get_linker_section (dynobj, ".got");
                BFD_ASSERT (sgot != NULL);
              }
 
@@ -1495,8 +1502,10 @@ bfin_relocate_section (bfd * output_bfd,
                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)
                        && (info->symbolic
                            || h->dynindx == -1
                            || h->forced_local)
@@ -1541,13 +1550,13 @@ bfin_relocate_section (bfd * output_bfd,
                  {
                    bfd_put_32 (output_bfd, relocation, sgot->contents + off);
 
-                   if (info->shared)
+                   if (bfd_link_pic (info))
                      {
                        asection *s;
                        Elf_Internal_Rela outrel;
                        bfd_byte *loc;
 
-                       s = bfd_get_section_by_name (dynobj, ".rela.got");
+                       s = bfd_get_linker_section (dynobj, ".rela.got");
                        BFD_ASSERT (s != NULL);
 
                        outrel.r_offset = (sgot->output_section->vma
@@ -1676,8 +1685,8 @@ bfin_gc_sweep_hook (bfd * abfd,
   sym_hashes = elf_sym_hashes (abfd);
   local_got_refcounts = elf_local_got_refcounts (abfd);
 
-  sgot = bfd_get_section_by_name (dynobj, ".got");
-  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  sgot = bfd_get_linker_section (dynobj, ".got");
+  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
   relend = relocs + sec->reloc_count;
   for (rel = relocs; rel < relend; rel++)
@@ -1712,7 +1721,7 @@ bfin_gc_sweep_hook (bfd * abfd,
                    {
                      /* We don't need the .got entry any more.  */
                      sgot->size -= 4;
-                     if (info->shared)
+                     if (bfd_link_pic (info))
                        srelgot->size -= sizeof (Elf32_External_Rela);
                    }
                }
@@ -1725,8 +1734,8 @@ bfin_gc_sweep_hook (bfd * abfd,
   return TRUE;
 }
 \f
-extern const bfd_target bfd_elf32_bfinfdpic_vec;
-#define IS_FDPIC(bfd) ((bfd)->xvec == &bfd_elf32_bfinfdpic_vec)
+extern const bfd_target bfin_elf32_fdpic_vec;
+#define IS_FDPIC(bfd) ((bfd)->xvec == &bfin_elf32_fdpic_vec)
 
 /* An extension of the elf hash table data structure,
    containing some additional Blackfin-specific data.  */
@@ -1821,7 +1830,7 @@ bfinfdpic_elf_link_hash_table_create (bfd *abfd)
   struct bfinfdpic_elf_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table);
 
-  ret = bfd_zalloc (abfd, amt);
+  ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
@@ -1996,10 +2005,10 @@ bfinfdpic_relocs_info_find (struct htab *ht,
    for memory allocation purposes.  */
 inline static struct bfinfdpic_relocs_info *
 bfinfdpic_relocs_info_for_global (struct htab *ht,
-                                bfd *abfd,
-                                struct elf_link_hash_entry *h,
-                                bfd_vma addend,
-                                enum insert_option insert)
+                                 bfd *abfd,
+                                 struct elf_link_hash_entry *h,
+                                 bfd_vma addend,
+                                 enum insert_option insert)
 {
   struct bfinfdpic_relocs_info entry;
 
@@ -2034,7 +2043,7 @@ bfinfdpic_relocs_info_for_local (struct htab *ht,
 
 inline static void
 bfinfdpic_pic_merge_early_relocs_info (struct bfinfdpic_relocs_info *e2,
-                                     struct bfinfdpic_relocs_info const *e1)
+                                      struct bfinfdpic_relocs_info const *e1)
 {
   e2->got17m4 |= e1->got17m4;
   e2->gothilo |= e1->gothilo;
@@ -2100,7 +2109,7 @@ _bfinfdpic_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset,
 
 static bfd_vma
 _bfinfdpic_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset,
-                      struct bfinfdpic_relocs_info *entry)
+                       struct bfinfdpic_relocs_info *entry)
 {
   bfd_vma fixup_offset;
 
@@ -2155,9 +2164,8 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
                                        asection *sec,
                                        Elf_Internal_Sym *sym,
                                        bfd_vma addend)
-
 {
-  bfd_vma fd_lazy_rel_offset = (bfd_vma)-1;
+  bfd_vma fd_lazy_rel_offset = (bfd_vma) -1;
   int dynindx = -1;
 
   if (entry->done)
@@ -2207,7 +2215,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
       /* If we're linking an executable at a fixed address, we can
         omit the dynamic relocation as long as the symbol is local to
         this module.  */
-      if (info->executable && !info->pie
+      if (bfd_link_pde (info)
          && (entry->symndx != -1
              || BFINFDPIC_SYM_LOCAL (info, entry->d.h)))
        {
@@ -2262,7 +2270,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
          if (entry->symndx == -1
              && ! BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h)
              && BFINFDPIC_SYM_LOCAL (info, entry->d.h)
-             && !(info->executable && !info->pie))
+             && !bfd_link_pde (info))
            {
              reloc = R_BFIN_FUNCDESC;
              idx = elf_section_data (entry->d.h->root.u.def.section
@@ -2298,7 +2306,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
             dynamic symbol entry for the got section, so idx will be
             zero, which means we can and should compute the address
             of the private descriptor ourselves.  */
-         if (info->executable && !info->pie
+         if (bfd_link_pde (info)
              && (entry->symndx != -1
                  || BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h)))
            {
@@ -2361,7 +2369,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
       /* If we're linking an executable at a fixed address, we can
         omit the dynamic relocation as long as the symbol is local to
         this module.  */
-      if (info->executable && !info->pie
+      if (bfd_link_pde (info)
          && (entry->symndx != -1 || BFINFDPIC_SYM_LOCAL (info, entry->d.h)))
        {
          if (sec)
@@ -2409,7 +2417,9 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
 
       /* If we've omitted the dynamic relocation, just emit the fixed
         addresses of the symbol and of the local GOT base offset.  */
-      if (info->executable && !info->pie && sec && sec->output_section)
+      if (bfd_link_pde (info)
+         && sec
+         && sec->output_section)
        {
          lowword = ad;
          highword = bfinfdpic_got_section (info)->output_section->vma
@@ -2589,7 +2599,7 @@ bfinfdpic_relocate_section (bfd * output_bfd,
   Elf_Internal_Rela *relend;
   unsigned isec_segment, got_segment, plt_segment,
     check_segment[2];
-  int silence_segment_error = !(info->shared || info->pie);
+  int silence_segment_error = !bfd_link_pic (info);
 
   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -2655,21 +2665,21 @@ bfinfdpic_relocate_section (bfd * output_bfd,
        }
       else
        {
-         bfd_boolean warned;
+         bfd_boolean warned, ignored;
          bfd_boolean unresolved_reloc;
 
          RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
                                   r_symndx, symtab_hdr, sym_hashes,
                                   h, sec, relocation,
-                                  unresolved_reloc, warned);
+                                  unresolved_reloc, warned, ignored);
          osec = sec;
        }
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-                                        rel, relend, howto, contents);
+                                        rel, 1, relend, howto, 0, contents);
 
-      if (info->relocatable)
+      if (bfd_link_relocatable (info))
        continue;
 
       if (h != NULL
@@ -2823,7 +2833,7 @@ bfinfdpic_relocate_section (bfd * output_bfd,
                   section+offset.  */
                if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h)
                    && BFINFDPIC_SYM_LOCAL (info, h)
-                   && !(info->executable && !info->pie))
+                   && !bfd_link_pde (info))
                  {
                    dynindx = elf_section_data (h->root.u.def.section
                                                ->output_section)->dynindx;
@@ -2860,7 +2870,7 @@ bfinfdpic_relocate_section (bfd * output_bfd,
                   dynamic symbol entry for the got section, so idx will
                   be zero, which means we can and should compute the
                   address of the private descriptor ourselves.  */
-               if (info->executable && !info->pie
+               if (bfd_link_pde (info)
                    && (!h || BFINFDPIC_FUNCDESC_LOCAL (info, h)))
                  {
                    bfd_vma offset;
@@ -2983,7 +2993,7 @@ bfinfdpic_relocate_section (bfd * output_bfd,
               can omit the dynamic relocation as long as the symbol
               is defined in the current link unit (which is implied
               by its output section not being NULL).  */
-           if (info->executable && !info->pie
+           if (bfd_link_pde (info)
                && (!h || BFINFDPIC_SYM_LOCAL (info, h)))
              {
                if (osec)
@@ -3063,7 +3073,7 @@ bfinfdpic_relocate_section (bfd * output_bfd,
                /* If we've omitted the dynamic relocation, just emit
                   the fixed addresses of the symbol and of the local
                   GOT base offset.  */
-               if (info->executable && !info->pie
+               if (bfd_link_pde (info)
                    && (!h || BFINFDPIC_SYM_LOCAL (info, h)))
                  bfd_put_32 (output_bfd,
                              bfinfdpic_got_section (info)->output_section->vma
@@ -3121,11 +3131,11 @@ bfinfdpic_relocate_section (bfd * output_bfd,
                   && picrel->d.h->root.type == bfd_link_hash_undefined))
            info->callbacks->warning
              (info,
-              (info->shared || info->pie)
+              bfd_link_pic (info)
               ? _("relocations between different segments are not supported")
               : _("warning: relocation references a different segment"),
               name, input_bfd, input_section, rel->r_offset);
-         if (!silence_segment_error && (info->shared || info->pie))
+         if (!silence_segment_error && bfd_link_pic (info))
            return FALSE;
          elf_elfheader (output_bfd)->e_flags |= EF_BFIN_PIC;
        }
@@ -3387,8 +3397,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
   int ptralign;
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (abfd, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
     return TRUE;
 
   /* Machine specific: although pointers are 32-bits wide, we want the
@@ -3401,14 +3411,14 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
           | SEC_LINKER_CREATED);
   pltflags = flags;
 
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
 
   if (bed->want_got_plt)
     {
-      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
          || !bfd_set_section_alignment (abfd, s, ptralign))
        return FALSE;
@@ -3446,8 +3456,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
       if (! bfinfdpic_relocs_info (info))
        return FALSE;
 
-      s = bfd_make_section_with_flags (abfd, ".rel.got",
-                                      (flags | SEC_READONLY));
+      s = bfd_make_section_anyway_with_flags (abfd, ".rel.got",
+                                             (flags | SEC_READONLY));
       if (s == NULL
          || ! bfd_set_section_alignment (abfd, s, 2))
        return FALSE;
@@ -3455,8 +3465,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
       bfinfdpic_gotrel_section (info) = s;
 
       /* Machine-specific.  */
-      s = bfd_make_section_with_flags (abfd, ".rofixup",
-                                      (flags | SEC_READONLY));
+      s = bfd_make_section_anyway_with_flags (abfd, ".rofixup",
+                                             (flags | SEC_READONLY));
       if (s == NULL
          || ! bfd_set_section_alignment (abfd, s, 2))
        return FALSE;
@@ -3470,7 +3480,7 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
     return FALSE;
@@ -3491,13 +3501,14 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
       h->def_regular = 1;
       h->type = STT_OBJECT;
 
-      if (! info->executable
+      if (! bfd_link_executable (info)
          && ! bfd_elf_link_record_dynamic_symbol (info, h))
        return FALSE;
     }
 
   /* Blackfin-specific: we want rel relocations for the plt.  */
-  s = bfd_make_section_with_flags (abfd, ".rel.plt", flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd, ".rel.plt",
+                                         flags | SEC_READONLY);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
     return FALSE;
@@ -3543,27 +3554,27 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
         image and use a R_*_COPY reloc to tell the dynamic linker to
         initialize them at run time.  The linker script puts the .dynbss
         section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-                                      SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+                                             SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
        return FALSE;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
-     normally needed.  We need to create it here, though, so that the
-     linker will map it to an output section.  We can't just create it
-     only if we need it, because we will not know whether we need it
-     until we have seen all the input files, and the first time the
-     main linker code calls BFD after examining all the input files
-     (size_dynamic_sections) the input sections have already been
-     mapped to the output sections.  If the section turns out not to
-     be needed, we can discard it later.  We will never need this
-     section when generating a shared object, since they do not use
-     copy relocs.  */
-      if (! info->shared)
+        normally needed.  We need to create it here, though, so that the
+        linker will map it to an output section.  We can't just create it
+        only if we need it, because we will not know whether we need it
+        until we have seen all the input files, and the first time the
+        main linker code calls BFD after examining all the input files
+        (size_dynamic_sections) the input sections have already been
+        mapped to the output sections.  If the section turns out not to
+        be needed, we can discard it later.  We will never need this
+        section when generating a shared object, since they do not use
+        copy relocs.  */
+      if (! bfd_link_pic (info))
        {
-         s = bfd_make_section_with_flags (abfd,
-                                          ".rela.bss",
-                                          flags | SEC_READONLY);
+         s = bfd_make_section_anyway_with_flags (abfd,
+                                                 ".rela.bss",
+                                                 flags | SEC_READONLY);
          if (s == NULL
              || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
            return FALSE;
@@ -3642,7 +3653,7 @@ _bfinfdpic_count_relocs_fixups (struct bfinfdpic_relocs_info *entry,
 {
   bfd_vma relocs = 0, fixups = 0;
 
-  if (!dinfo->info->executable || dinfo->info->pie)
+  if (!bfd_link_pde (dinfo->info))
     relocs = entry->relocs32 + entry->relocsfd + entry->relocsfdv;
   else
     {
@@ -4244,9 +4255,9 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd,
   if (htab->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_section_by_name (dynobj, ".interp");
+         s = bfd_get_linker_section (dynobj, ".interp");
          BFD_ASSERT (s != NULL);
          s->size = sizeof ELF_DYNAMIC_INTERPRETER;
          s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
@@ -4296,11 +4307,11 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd,
          return FALSE;
     }
 
-  s = bfd_get_section_by_name (dynobj, ".dynbss");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   if (s && s->size == 0)
     s->flags |= SEC_EXCLUDE;
 
-  s = bfd_get_section_by_name (dynobj, ".rela.bss");
+  s = bfd_get_linker_section (dynobj, ".rela.bss");
   if (s && s->size == 0)
     s->flags |= SEC_EXCLUDE;
 
@@ -4311,35 +4322,10 @@ static bfd_boolean
 elf32_bfinfdpic_always_size_sections (bfd *output_bfd,
                                     struct bfd_link_info *info)
 {
-  if (!info->relocatable)
-    {
-      struct elf_link_hash_entry *h;
-
-      /* Force a PT_GNU_STACK segment to be created.  */
-      if (! elf_tdata (output_bfd)->stack_flags)
-       elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
-
-      /* Define __stacksize if it's not defined yet.  */
-      h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
-                               FALSE, FALSE, FALSE);
-      if (! h || h->root.type != bfd_link_hash_defined
-         || h->type != STT_OBJECT
-         || !h->def_regular)
-       {
-         struct bfd_link_hash_entry *bh = NULL;
-
-         if (!(_bfd_generic_link_add_one_symbol
-               (info, output_bfd, "__stacksize",
-                BSF_GLOBAL, bfd_abs_section_ptr, DEFAULT_STACK_SIZE,
-                (const char *) NULL, FALSE,
-                get_elf_backend_data (output_bfd)->collect, &bh)))
-           return FALSE;
-
-         h = (struct elf_link_hash_entry *) bh;
-         h->def_regular = 1;
-         h->type = STT_OBJECT;
-       }
-    }
+  if (!bfd_link_relocatable (info)
+      && !bfd_elf_stack_segment_size (output_bfd, info,
+                                     "__stacksize", DEFAULT_STACK_SIZE))
+    return FALSE;
 
   return TRUE;
 }
@@ -4348,9 +4334,8 @@ elf32_bfinfdpic_always_size_sections (bfd *output_bfd,
    subtract it from the relocation or fixup count.  */
 static bfd_boolean
 _bfinfdpic_check_discarded_relocs (bfd *abfd, asection *sec,
-                                 struct bfd_link_info *info,
-                                 
-                                 bfd_boolean *changed)
+                                  struct bfd_link_info *info,
+                                  bfd_boolean *changed)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
@@ -4433,7 +4418,7 @@ bfinfdpic_elf_discard_info (bfd *ibfd,
 
   /* Account for relaxation of .eh_frame section.  */
   for (s = ibfd->sections; s; s = s->next)
-    if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
+    if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
       {
        if (!_bfinfdpic_check_discarded_relocs (ibfd, s, info, &changed))
          return FALSE;
@@ -4460,51 +4445,6 @@ bfinfdpic_elf_discard_info (bfd *ibfd,
   return TRUE;
 }
 
-static bfd_boolean
-elf32_bfinfdpic_modify_program_headers (bfd *output_bfd,
-                                       struct bfd_link_info *info)
-{
-  struct elf_obj_tdata *tdata = elf_tdata (output_bfd);
-  struct elf_segment_map *m;
-  Elf_Internal_Phdr *p;
-
-  /* objcopy and strip preserve what's already there using
-     elf32_bfinfdpic_copy_private_bfd_data ().  */
-  if (! info)
-    return TRUE;
-
-  for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++)
-    if (m->p_type == PT_GNU_STACK)
-      break;
-
-  if (m)
-    {
-      struct elf_link_hash_entry *h;
-
-      /* Obtain the pointer to the __stacksize symbol.  */
-      h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
-                               FALSE, FALSE, FALSE);
-      if (h)
-       {
-         while (h->root.type == bfd_link_hash_indirect
-                || h->root.type == bfd_link_hash_warning)
-           h = (struct elf_link_hash_entry *) h->root.u.i.link;
-         BFD_ASSERT (h->root.type == bfd_link_hash_defined);
-       }
-
-      /* Set the header p_memsz from the symbol value.  We
-        intentionally ignore the symbol section.  */
-      if (h && h->root.type == bfd_link_hash_defined)
-       p->p_memsz = h->root.u.def.value;
-      else
-       p->p_memsz = DEFAULT_STACK_SIZE;
-
-      p->p_align = 8;
-    }
-
-  return TRUE;
-}
-
 static bfd_boolean
 elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
                                        struct bfd_link_info *info)
@@ -4517,7 +4457,13 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
   if (bfinfdpic_got_section (info))
     {
       BFD_ASSERT (bfinfdpic_gotrel_section (info)->size
-                 == (bfinfdpic_gotrel_section (info)->reloc_count
+                 /* PR 17334: It appears that the GOT section can end up
+                    being bigger than the number of relocs.  Presumably
+                    because some relocs have been deleted.  A test case has
+                    yet to be generated for verify this, but in the meantime
+                    the test below has been changed from == to >= so that
+                    applications can continue to be built.  */
+                 >= (bfinfdpic_gotrel_section (info)->reloc_count
                      * sizeof (Elf32_External_Rel)));
 
       if (bfinfdpic_gotfixup_section (info))
@@ -4546,7 +4492,7 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
                      * sizeof (Elf32_External_Rel)));
     }
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -4598,9 +4544,8 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
    regular object.  */
 
 static bfd_boolean
-elf32_bfinfdpic_adjust_dynamic_symbol
-(struct bfd_link_info *info,
- struct elf_link_hash_entry *h)
+elf32_bfinfdpic_adjust_dynamic_symbol (struct bfd_link_info *info,
+                                      struct elf_link_hash_entry *h)
 {
   bfd * dynobj;
 
@@ -4800,7 +4745,7 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info,
   bfd *dynobj;
   struct bfinfdpic_relocs_info *picrel;
 
-  if (info->relocatable)
+  if (bfd_link_relocatable (info))
     return TRUE;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -4995,75 +4940,9 @@ elf32_bfin_set_private_flags (bfd * abfd, flagword flags)
   return TRUE;
 }
 
-/* Copy backend specific data from one object module to another.  */
-
-static bfd_boolean
-bfin_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
-{
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
-
-  BFD_ASSERT (!elf_flags_init (obfd)
-             || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags);
-
-  elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
-  elf_flags_init (obfd) = TRUE;
-
-  /* Copy object attributes.  */
-  _bfd_elf_copy_obj_attributes (ibfd, obfd);
-
-  return TRUE;
-}
-
-static bfd_boolean
-elf32_bfinfdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
-{
-  unsigned i;
-
-  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
-      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
-    return TRUE;
-
-  if (! bfin_elf_copy_private_bfd_data (ibfd, obfd))
-    return FALSE;
-
-  if (! elf_tdata (ibfd) || ! elf_tdata (ibfd)->phdr
-      || ! elf_tdata (obfd) || ! elf_tdata (obfd)->phdr)
-    return TRUE;
-
-  /* Copy the stack size.  */
-  for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++)
-    if (elf_tdata (ibfd)->phdr[i].p_type == PT_GNU_STACK)
-      {
-       Elf_Internal_Phdr *iphdr = &elf_tdata (ibfd)->phdr[i];
-
-       for (i = 0; i < elf_elfheader (obfd)->e_phnum; i++)
-         if (elf_tdata (obfd)->phdr[i].p_type == PT_GNU_STACK)
-           {
-             memcpy (&elf_tdata (obfd)->phdr[i], iphdr, sizeof (*iphdr));
-
-             /* Rewrite the phdrs, since we're only called after they
-                were first written.  */
-             if (bfd_seek (obfd, (bfd_signed_vma) get_elf_backend_data (obfd)
-                           ->s->sizeof_ehdr, SEEK_SET) != 0
-                 || get_elf_backend_data (obfd)->s
-                 ->write_out_phdrs (obfd, elf_tdata (obfd)->phdr,
-                                    elf_elfheader (obfd)->e_phnum) != 0)
-               return FALSE;
-             break;
-           }
-
-       break;
-      }
-
-  return TRUE;
-}
-
-
 /* Display the flags field.  */
 static bfd_boolean
-elf32_bfin_print_private_bfd_data (bfd * abfd, PTR ptr)
+elf32_bfin_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
   flagword flags;
@@ -5187,7 +5066,7 @@ bfin_link_hash_table_create (bfd * abfd)
   struct bfin_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct bfin_link_hash_table);
 
-  ret = bfd_zalloc (abfd, amt);
+  ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
@@ -5211,14 +5090,14 @@ bfin_link_hash_table_create (bfd * abfd)
 
 static bfd_boolean
 bfin_finish_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
-                                 struct bfd_link_info *info)
+                             struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *sdyn;
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -5245,9 +5124,9 @@ bfin_finish_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 
 static bfd_boolean
 bfin_finish_dynamic_symbol (bfd * output_bfd,
-                               struct bfd_link_info *info,
-                               struct elf_link_hash_entry *h,
-                               Elf_Internal_Sym * sym)
+                           struct bfd_link_info *info,
+                           struct elf_link_hash_entry *h,
+                           Elf_Internal_Sym * sym)
 {
   bfd *dynobj;
 
@@ -5263,8 +5142,8 @@ bfin_finish_dynamic_symbol (bfd * output_bfd,
       /* This symbol has an entry in the global offset table.
          Set it up.  */
 
-      sgot = bfd_get_section_by_name (dynobj, ".got");
-      srela = bfd_get_section_by_name (dynobj, ".rela.got");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srela = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       rela.r_offset = (sgot->output_section->vma
@@ -5276,7 +5155,7 @@ bfin_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->forced_local) && h->def_regular)
        {
@@ -5322,7 +5201,7 @@ bfin_finish_dynamic_symbol (bfd * output_bfd,
 
 static bfd_boolean
 bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
-                               struct elf_link_hash_entry *h)
+                           struct elf_link_hash_entry *h)
 {
   bfd *dynobj;
   asection *s;
@@ -5363,7 +5242,7 @@ bfin_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;
 
   /* We must allocate the symbol in our .dynbss section, which will
@@ -5376,7 +5255,7 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
      both the dynamic object and the regular object will refer to the
      same memory location for the variable.  */
 
-  s = bfd_get_section_by_name (dynobj, ".dynbss");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_68K_COPY reloc to tell the dynamic linker to
@@ -5387,7 +5266,7 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -5450,7 +5329,7 @@ struct bfin_pcrel_relocs_copied
    case.  */
 
 static bfd_boolean
-bfin_discard_copies (struct elf_link_hash_entry *h, PTR inf)
+bfin_discard_copies (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
   struct bfin_pcrel_relocs_copied *s;
@@ -5481,7 +5360,7 @@ bfin_discard_copies (struct elf_link_hash_entry *h, PTR inf)
 
 static bfd_boolean
 bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
-                               struct bfd_link_info *info)
+                           struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
@@ -5493,9 +5372,9 @@ bfin_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))
        {
-         s = bfd_get_section_by_name (dynobj, ".interp");
+         s = bfd_get_linker_section (dynobj, ".interp");
          BFD_ASSERT (s != NULL);
          s->size = sizeof ELF_DYNAMIC_INTERPRETER;
          s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -5508,7 +5387,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
          not actually use these entries.  Reset the size of .rela.got,
          which will cause it to get stripped from the output file
          below.  */
-      s = bfd_get_section_by_name (dynobj, ".rela.got");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
        s->size = 0;
     }
@@ -5519,9 +5398,9 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
      against symbols that have become local due to visibility changes.
      We allocated space for them in the check_relocs routine, but we
      will not fill them in in the relocate_section routine.  */
-  if (info->shared)
+  if (bfd_link_pic (info))
     elf_link_hash_traverse (elf_hash_table (info),
-                           bfin_discard_copies, (PTR) info);
+                           bfin_discard_copies, info);
 
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
@@ -5598,7 +5477,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 #define add_dynamic_entry(TAG, VAL) \
   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
 
-      if (!info->shared)
+      if (!bfd_link_pic (info))
        {
          if (!add_dynamic_entry (DT_DEBUG, 0))
            return FALSE;
@@ -5632,16 +5511,12 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
    after the add_symbols entry point has been called for all the
    objects, and before the final_link entry point is called.  */
 
-bfd_boolean bfd_bfin_elf32_create_embedded_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *, asection *, char **));
-
 bfd_boolean
-bfd_bfin_elf32_create_embedded_relocs (
-     bfd *abfd,
-     struct bfd_link_info *info,
-     asection *datasec,
-     asection *relsec,
-     char **errmsg)
+bfd_bfin_elf32_create_embedded_relocs (bfd *abfd,
+                                      struct bfd_link_info *info,
+                                      asection *datasec,
+                                      asection *relsec,
+                                      char **errmsg)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Sym *isymbuf = NULL;
@@ -5650,7 +5525,7 @@ bfd_bfin_elf32_create_embedded_relocs (
   bfd_byte *p;
   bfd_size_type amt;
 
-  BFD_ASSERT (! info->relocatable);
+  BFD_ASSERT (! bfd_link_relocatable (info));
 
   *errmsg = NULL;
 
@@ -5661,7 +5536,7 @@ bfd_bfin_elf32_create_embedded_relocs (
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-                    (abfd, datasec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+                    (abfd, datasec, NULL, (Elf_Internal_Rela *) NULL,
                      info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -5759,7 +5634,7 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] =
 };
 
 \f
-#define TARGET_LITTLE_SYM              bfd_elf32_bfin_vec
+#define TARGET_LITTLE_SYM              bfin_elf32_vec
 #define TARGET_LITTLE_NAME             "elf32-bfin"
 #define ELF_ARCH                       bfd_arch_bfin
 #define ELF_TARGET_ID                  BFIN_ELF_DATA
@@ -5808,6 +5683,7 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] =
 #define elf_backend_final_write_processing \
                                         elf32_bfin_final_write_processing
 #define elf_backend_reloc_type_class    elf32_bfin_reloc_type_class
+#define elf_backend_stack_align                8
 #define elf_backend_can_gc_sections 1
 #define elf_backend_special_sections   elf32_bfin_special_sections
 #define elf_backend_can_refcount 1
@@ -5820,7 +5696,7 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] =
 #include "elf32-target.h"
 
 #undef TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM          bfd_elf32_bfinfdpic_vec
+#define TARGET_LITTLE_SYM          bfin_elf32_fdpic_vec
 #undef TARGET_LITTLE_NAME
 #define TARGET_LITTLE_NAME             "elf32-bfinfdpic"
 #undef elf32_bed
@@ -5843,12 +5719,6 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] =
 #undef elf_backend_always_size_sections
 #define elf_backend_always_size_sections \
                elf32_bfinfdpic_always_size_sections
-#undef elf_backend_modify_program_headers
-#define elf_backend_modify_program_headers \
-               elf32_bfinfdpic_modify_program_headers
-#undef bfd_elf32_bfd_copy_private_bfd_data
-#define bfd_elf32_bfd_copy_private_bfd_data \
-               elf32_bfinfdpic_copy_private_bfd_data
 
 #undef elf_backend_create_dynamic_sections
 #define elf_backend_create_dynamic_sections \
This page took 0.043249 seconds and 4 git commands to generate.