ChangeLog rotatation and copyright year update
[deliverable/binutils-gdb.git] / bfd / elf32-frv.c
index 2acc9173ce7b4b601da05d8ce08a37845f13ea7f..ca0f78d008e8807fc456f62a1c90adab633e736c 100644 (file)
@@ -1,6 +1,5 @@
 /* FRV-specific support for 32-bit ELF.
-   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
 #include "hashtab.h"
 
 /* Forward declarations.  */
-static bfd_reloc_status_type elf32_frv_relocate_lo16
-  PARAMS ((bfd *,  Elf_Internal_Rela *, bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_hi16
-  PARAMS ((bfd *,  Elf_Internal_Rela *, bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_label24
-  PARAMS ((bfd *, asection *, Elf_Internal_Rela *, bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprel12
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-          bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprelu12
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-          bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprello
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-          bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprelhi
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-          bfd_byte *, bfd_vma));
-static reloc_howto_type *frv_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static void frv_info_to_howto_rela
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-static bfd_boolean elf32_frv_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-          Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static bfd_boolean elf32_frv_add_symbol_hook
-  PARAMS (( bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
-           const char **, flagword *, asection **, bfd_vma *));
-static bfd_reloc_status_type frv_final_link_relocate
-  PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
-          Elf_Internal_Rela *, bfd_vma));
-static bfd_boolean elf32_frv_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-          const Elf_Internal_Rela *));
-static int elf32_frv_machine
-  PARAMS ((bfd *));
-static bfd_boolean elf32_frv_object_p
-  PARAMS ((bfd *));
-static bfd_boolean frv_elf_set_private_flags
-  PARAMS ((bfd *, flagword));
-static bfd_boolean frv_elf_copy_private_bfd_data
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean frv_elf_merge_private_bfd_data
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean frv_elf_print_private_bfd_data
-  PARAMS ((bfd *, PTR));
-static bfd_boolean elf32_frv_grok_prstatus (bfd * abfd,
-                                           Elf_Internal_Note * note);
-static bfd_boolean elf32_frv_grok_psinfo (bfd * abfd,
-                                         Elf_Internal_Note * note);
+
 
 static reloc_howto_type elf32_frv_howto_table [] =
 {
@@ -846,8 +796,8 @@ static reloc_howto_type elf32_frv_rel_tlsoff_howto =
 
 
 \f
-extern const bfd_target bfd_elf32_frvfdpic_vec;
-#define IS_FDPIC(bfd) ((bfd)->xvec == &bfd_elf32_frvfdpic_vec)
+extern const bfd_target frv_elf32_fdpic_vec;
+#define IS_FDPIC(bfd) ((bfd)->xvec == &frv_elf32_fdpic_vec)
 
 /* An extension of the elf hash table data structure, containing some
    additional FRV-specific data.  */
@@ -1001,7 +951,7 @@ frvfdpic_elf_link_hash_table_create (bfd *abfd)
   struct frvfdpic_elf_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct frvfdpic_elf_link_hash_table);
 
-  ret = bfd_zalloc (abfd, amt);
+  ret = bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
@@ -2176,14 +2126,12 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry,
 /* Handle an FRV small data reloc.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprel12 (info, input_bfd, input_section, relocation,
-                           contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprel12 (struct bfd_link_info *info,
+                           bfd *input_bfd,
+                           asection *input_section,
+                           Elf_Internal_Rela *relocation,
+                           bfd_byte *contents,
+                           bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2215,14 +2163,12 @@ elf32_frv_relocate_gprel12 (info, input_bfd, input_section, relocation,
 /* Handle an FRV small data reloc. for the u12 field.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprelu12 (info, input_bfd, input_section, relocation,
-                            contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprelu12 (struct bfd_link_info *info,
+                            bfd *input_bfd,
+                            asection *input_section,
+                            Elf_Internal_Rela *relocation,
+                            bfd_byte *contents,
+                            bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2257,11 +2203,10 @@ elf32_frv_relocate_gprelu12 (info, input_bfd, input_section, relocation,
 /* Handle an FRV ELF HI16 reloc.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_hi16 (input_bfd, relhi, contents, value)
-     bfd *input_bfd;
-     Elf_Internal_Rela *relhi;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_hi16 (bfd *input_bfd,
+                        Elf_Internal_Rela *relhi,
+                        bfd_byte *contents,
+                        bfd_vma value)
 {
   bfd_vma insn;
 
@@ -2280,11 +2225,10 @@ elf32_frv_relocate_hi16 (input_bfd, relhi, contents, value)
 
 }
 static bfd_reloc_status_type
-elf32_frv_relocate_lo16 (input_bfd, rello, contents, value)
-     bfd *input_bfd;
-     Elf_Internal_Rela *rello;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_lo16 (bfd *input_bfd,
+                        Elf_Internal_Rela *rello,
+                        bfd_byte *contents,
+                        bfd_vma value)
 {
   bfd_vma insn;
 
@@ -2305,12 +2249,11 @@ elf32_frv_relocate_lo16 (input_bfd, rello, contents, value)
 /* Perform the relocation for the CALL label24 instruction.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_label24 (input_bfd, input_section, rello, contents, value)
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *rello;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_label24 (bfd *input_bfd,
+                           asection *input_section,
+                           Elf_Internal_Rela *rello,
+                           bfd_byte *contents,
+                           bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma label6;
@@ -2348,14 +2291,12 @@ elf32_frv_relocate_label24 (input_bfd, input_section, rello, contents, value)
 }
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprelhi (info, input_bfd, input_section, relocation,
-                           contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprelhi (struct bfd_link_info *info,
+                           bfd *input_bfd,
+                           asection *input_section,
+                           Elf_Internal_Rela *relocation,
+                           bfd_byte *contents,
+                           bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2383,14 +2324,12 @@ elf32_frv_relocate_gprelhi (info, input_bfd, input_section, relocation,
 }
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprello (info, input_bfd, input_section, relocation,
-                           contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprello (struct bfd_link_info *info,
+                           bfd *input_bfd,
+                           asection *input_section,
+                           Elf_Internal_Rela *relocation,
+                           bfd_byte *contents,
+                           bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2419,9 +2358,8 @@ elf32_frv_relocate_gprello (info, input_bfd, input_section, relocation,
 }
 
 static reloc_howto_type *
-frv_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+frv_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+                      bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -2601,10 +2539,9 @@ frv_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
 /* Set the howto pointer for an FRV ELF reloc.  */
 
 static void
-frv_info_to_howto_rela (abfd, cache_ptr, dst)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *cache_ptr;
-     Elf_Internal_Rela *dst;
+frv_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+                       arelent *cache_ptr,
+                       Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
@@ -2620,6 +2557,11 @@ frv_info_to_howto_rela (abfd, cache_ptr, dst)
       break;
 
     default:
+      if (r_type >= (unsigned int) R_FRV_max)
+       {
+         _bfd_error_handler (_("%A: invalid FRV reloc number: %d"), abfd, r_type);
+         r_type = 0;
+       }
       cache_ptr->howto = & elf32_frv_howto_table [r_type];
       break;
     }
@@ -2665,14 +2607,12 @@ frvfdpic_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
    routines, but a few relocs, we have to do them ourselves.  */
 
 static bfd_reloc_status_type
-frv_final_link_relocate (howto, input_bfd, input_section, contents, rel,
-                        relocation)
-     reloc_howto_type *howto;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     Elf_Internal_Rela *rel;
-     bfd_vma relocation;
+frv_final_link_relocate (reloc_howto_type *howto,
+                        bfd *input_bfd,
+                        asection *input_section,
+                        bfd_byte *contents,
+                        Elf_Internal_Rela *rel,
+                        bfd_vma relocation)
 {
   return _bfd_final_link_relocate (howto, input_bfd, input_section,
                                   contents, rel->r_offset, relocation,
@@ -2711,16 +2651,14 @@ frv_final_link_relocate (howto, input_bfd, input_section, contents, rel,
    accordingly.  */
 
 static bfd_boolean
-elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
-                           contents, relocs, local_syms, local_sections)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     Elf_Internal_Rela *relocs;
-     Elf_Internal_Sym *local_syms;
-     asection **local_sections;
+elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+                           struct bfd_link_info *info,
+                           bfd *input_bfd,
+                           asection *input_section,
+                           bfd_byte *contents,
+                           Elf_Internal_Rela *relocs,
+                           Elf_Internal_Sym *local_syms,
+                           asection **local_sections)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -2770,7 +2708,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
       struct elf_link_hash_entry *h;
       bfd_vma relocation;
       bfd_reloc_status_type r;
-      const char * name = NULL;
+      const char *name;
       int r_type;
       asection *osec;
       struct frvfdpic_relocs_info *picrel;
@@ -2796,30 +2734,25 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
 
          name = bfd_elf_string_from_elf_section
            (input_bfd, symtab_hdr->sh_link, sym->st_name);
-         name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+         if (name == NULL || name[0] == 0)
+           name = bfd_section_name (input_bfd, sec);
        }
       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;
+         name = h->root.root.string;
        }
 
-      if (sec != NULL && elf_discarded_section (sec))
-       {
-         /* For relocs against symbols from removed linkonce sections,
-            or sections discarded by a linker script, we just want the
-            section contents zeroed.  Avoid any special processing.  */
-         _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
-         rel->r_info = 0;
-         rel->r_addend = 0;
-         continue;
-       }
+      if (sec != NULL && discarded_section (sec))
+       RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+                                        rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
        continue;
@@ -2889,8 +2822,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                      osec, sym,
                                                      rel->r_addend))
            {
-             (*_bfd_error_handler)
-               (_("%B(%A+0x%x): relocation to `%s+%x' may have caused the error above"),
+             info->callbacks->einfo
+               (_("%H: relocation to `%s+%v'"
+                  " may have caused the error above\n"),
                 input_bfd, input_section, rel->r_offset, name, rel->r_addend);
              return FALSE;
            }
@@ -2900,11 +2834,15 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
        default:
        non_fdpic:
          picrel = NULL;
-         if (h && ! FRVFDPIC_SYM_LOCAL (info, h))
+         if (h
+             && ! FRVFDPIC_SYM_LOCAL (info, h)
+             && _bfd_elf_section_offset (output_bfd, info, input_section,
+                                         rel->r_offset) != (bfd_vma) -1)
            {
-             info->callbacks->warning
-               (info, _("relocation references symbol not defined in the module"),
-                name, input_bfd, input_section, rel->r_offset);
+             info->callbacks->einfo
+               (_("%H: relocation references symbol"
+                  " not defined in the module\n"),
+                input_bfd, input_section, rel->r_offset);
              return FALSE;
            }
          break;
@@ -2977,10 +2915,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a call instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x003c0000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GETTLSOFF not applied to a call instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GETTLSOFF not applied to a call instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3019,10 +2956,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an lddi instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x00cc0000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSDESC12 not applied to an lddi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSDESC12"
+                    " not applied to an lddi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3090,10 +3027,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSDESCHI not applied to a sethi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSDESCHI"
+                    " not applied to a sethi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3127,11 +3064,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSDESCLO"
-                    " not applied to a setlo or setlos instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSDESCLO"
+                    " not applied to a setlo or setlos instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3175,10 +3111,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an ldd instruction?  */
            if ((insn & (unsigned long)0x01fc0fc0) != 0x00080140)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSDESC_RELAX not applied to an ldd instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_TLSDESC_RELAX"
+                    " not applied to an ldd instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3259,11 +3195,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a calll or callil instruction?  */
            if ((insn & (unsigned long)0x7ff80fc0) != 0x02300000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GETTLSOFF_RELAX"
-                    " not applied to a calll instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GETTLSOFF_RELAX"
+                    " not applied to a calll instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3314,10 +3249,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an ldi instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x00c80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSOFF12 not applied to an ldi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSOFF12"
+                    " not applied to an ldi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3344,10 +3279,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSOFFHI not applied to a sethi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSOFFHI"
+                    " not applied to a sethi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3373,11 +3308,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSOFFLO"
-                    " not applied to a setlo or setlos instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSOFFLO"
+                    " not applied to a setlo or setlos instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3404,10 +3338,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an ld instruction?  */
            if ((insn & (unsigned long)0x01fc0fc0) != 0x00080100)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSOFF_RELAX not applied to an ld instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_TLSOFF_RELAX"
+                    " not applied to an ld instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3433,7 +3367,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                   with ldi @(grB, #gottlsoff12(symbol+offset), grC.
                   Preserve the packing bit.  */
                insn = (insn & (unsigned long)0xfe03f000)
-                 | (unsigned long)0x00c80000;;
+                 | (unsigned long)0x00c80000;
                bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
 
                r_type = R_FRV_GOTTLSOFF12;
@@ -3449,10 +3383,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSMOFFHI not applied to a sethi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_TLSMOFFHI"
+                    " not applied to a sethi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3476,11 +3410,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSMOFFLO"
-                    " not applied to a setlo or setlos instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("R_FRV_TLSMOFFLO"
+                    " not applied to a setlo or setlos instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
@@ -3598,9 +3531,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                  {
                    if (addend)
                      {
-                       info->callbacks->warning
-                         (info, _("R_FRV_FUNCDESC references dynamic symbol with nonzero addend"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: R_FRV_FUNCDESC references dynamic symbol"
+                            " with nonzero addend\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
                    dynindx = h->dynindx;
@@ -3638,10 +3572,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                       input_section
                                                       ->output_section))
                          {
-                           info->callbacks->warning
-                             (info,
-                              _("cannot emit fixups in read-only section"),
-                              name, input_bfd, input_section, rel->r_offset);
+                           info->callbacks->einfo
+                             (_("%H: cannot emit fixups"
+                                " in read-only section\n"),
+                              input_bfd, input_section, rel->r_offset);
                            return FALSE;
                          }
 
@@ -3669,10 +3603,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                   input_section
                                                   ->output_section))
                      {
-                       info->callbacks->warning
-                         (info,
-                          _("cannot emit dynamic relocations in read-only section"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: cannot emit dynamic relocations"
+                            " in read-only section\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
 
@@ -3718,9 +3652,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
              {
                if (addend && r_type == R_FRV_FUNCDESC_VALUE)
                  {
-                   info->callbacks->warning
-                     (info, _("R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend"),
-                      name, input_bfd, input_section, rel->r_offset);
+                   info->callbacks->einfo
+                     (_("%H: R_FRV_FUNCDESC_VALUE"
+                        " references dynamic symbol with nonzero addend\n"),
+                      input_bfd, input_section, rel->r_offset);
                    return FALSE;
                  }
                dynindx = h->dynindx;
@@ -3759,10 +3694,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                   input_section
                                                   ->output_section))
                      {
-                       info->callbacks->warning
-                         (info,
-                          _("cannot emit fixups in read-only section"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: cannot emit fixups in read-only section\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
                    if (!h || h->root.type != bfd_link_hash_undefweak)
@@ -3803,10 +3737,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                   input_section
                                                   ->output_section))
                      {
-                       info->callbacks->warning
-                         (info,
-                          _("cannot emit dynamic relocations in read-only section"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: cannot emit dynamic relocations"
+                            " in read-only section\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
 
@@ -3962,10 +3896,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
          if (silence_segment_error == 1)
            silence_segment_error =
              (strlen (input_bfd->filename) == 6
-              && strcmp (input_bfd->filename, "crt0.o") == 0)
+              && filename_cmp (input_bfd->filename, "crt0.o") == 0)
              || (strlen (input_bfd->filename) > 6
-                 && strcmp (input_bfd->filename
-                            + strlen (input_bfd->filename) - 7,
+                 && filename_cmp (input_bfd->filename
+                                  + strlen (input_bfd->filename) - 7,
                             "/crt0.o") == 0)
              ? -1 : 0;
          if (!silence_segment_error
@@ -3974,16 +3908,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
              && !(picrel && picrel->symndx == -1
                   && picrel->d.h->root.type == bfd_link_hash_undefined))
            {
-             if (info->shared || info->pie)
-               (*_bfd_error_handler)
-                 (_("%B(%A+0x%lx): reloc against `%s': %s"),
-                  input_bfd, input_section, (long)rel->r_offset, name,
-                  _("relocation references a different segment"));
-             else
-               info->callbacks->warning
-                 (info,
-                  _("relocation references a different segment"),
-                  name, input_bfd, input_section, rel->r_offset);
+             info->callbacks->einfo
+               (_("%H: reloc against `%s' references a different segment\n"),
+                input_bfd, input_section, rel->r_offset, name);
            }
          if (!silence_segment_error && (info->shared || info->pie))
            return FALSE;
@@ -4131,9 +4058,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
 
          if (msg)
            {
-             (*_bfd_error_handler)
-               (_("%B(%A+0x%lx): reloc against `%s': %s"),
-                input_bfd, input_section, (long)rel->r_offset, name, msg);
+             info->callbacks->einfo
+               (_("%H: reloc against `%s': %s\n"),
+                input_bfd, input_section, rel->r_offset, name, msg);
              return FALSE;
            }
 
@@ -4170,14 +4097,13 @@ elf32_frv_gc_mark_hook (asection *sec,
    file.  We use it to put .comm items in .scomm, and not .comm.  */
 
 static bfd_boolean
-elf32_frv_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     Elf_Internal_Sym *sym;
-     const char **namep ATTRIBUTE_UNUSED;
-     flagword *flagsp ATTRIBUTE_UNUSED;
-     asection **secp;
-     bfd_vma *valp;
+elf32_frv_add_symbol_hook (bfd *abfd,
+                          struct bfd_link_info *info,
+                          Elf_Internal_Sym *sym,
+                          const char **namep ATTRIBUTE_UNUSED,
+                          flagword *flagsp ATTRIBUTE_UNUSED,
+                          asection **secp,
+                          bfd_vma *valp)
 {
   if (sym->st_shndx == SHN_COMMON
       && !info->relocatable
@@ -4245,8 +4171,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
   int offset;
 
   /* 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
@@ -4259,14 +4185,14 @@ _frv_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;
@@ -4304,8 +4230,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
       if (! frvfdpic_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;
@@ -4313,8 +4239,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
       frvfdpic_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;
@@ -4362,7 +4288,7 @@ _frv_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;
@@ -4381,8 +4307,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
     }
 
   /* FRV-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;
@@ -4429,8 +4355,8 @@ elf32_frvfdpic_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;
 
@@ -4447,10 +4373,10 @@ elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
      copy relocs.  */
       if (! info->shared)
        {
-         s = bfd_make_section_with_flags (abfd,
-                                          (bed->default_use_rela_p
-                                           ? ".rela.bss" : ".rel.bss"),
-                                          flags | SEC_READONLY);
+         s = bfd_make_section_anyway_with_flags (abfd,
+                                                 (bed->default_use_rela_p
+                                                  ? ".rela.bss" : ".rel.bss"),
+                                                 flags | SEC_READONLY);
          if (s == NULL
              || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
            return FALSE;
@@ -5515,7 +5441,7 @@ elf32_frvfdpic_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
        {
-         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;
@@ -5572,36 +5498,10 @@ static bfd_boolean
 elf32_frvfdpic_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;
-         /* This one must NOT be hidden.  */
-       }
-    }
+  if (!info->relocatable
+      && !bfd_elf_stack_segment_size (output_bfd, info,
+                                     "__stacksize", DEFAULT_STACK_SIZE))
+    return FALSE;
 
   return TRUE;
 }
@@ -5611,7 +5511,7 @@ elf32_frvfdpic_always_size_sections (bfd *output_bfd,
 static bfd_boolean
 _frvfdpic_check_discarded_relocs (bfd *abfd, asection *sec,
                                  struct bfd_link_info *info,
-                                 
+
                                  bfd_boolean *changed)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -5692,7 +5592,7 @@ frvfdpic_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 (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
          return FALSE;
@@ -5798,51 +5698,6 @@ elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec,
   return TRUE;
 }
 
-static bfd_boolean
-elf32_frvfdpic_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_frvfdpic_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;
-}
-
 /* Fill in code and data in dynamic sections.  */
 
 static bfd_boolean
@@ -5887,8 +5742,8 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
              != (frvfdpic_gotfixup_section (info)->reloc_count * 4))
            {
            error:
-             (*_bfd_error_handler)
-               ("LINKER BUG: .rofixup section size mismatch");
+             info->callbacks->einfo
+               ("LINKER BUG: .rofixup section size mismatch\n");
              return FALSE;
            }
 
@@ -5896,7 +5751,8 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
                                       FALSE, FALSE, TRUE);
          if (hend
              && (hend->type == bfd_link_hash_defined
-                 || hend->type == bfd_link_hash_defweak))
+                 || hend->type == bfd_link_hash_defweak)
+             && hend->u.def.section->output_section != NULL)
            {
              bfd_vma value =
                frvfdpic_gotfixup_section (info)->output_section->vma
@@ -5923,7 +5779,7 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
       Elf32_External_Dyn * dyncon;
       Elf32_External_Dyn * dynconend;
 
-      sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+      sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
       BFD_ASSERT (sdyn != NULL);
 
@@ -6160,11 +6016,10 @@ frvfdpic_elf_encode_eh_address (bfd *abfd,
    Given infinite time and money... :-)  */
 
 static bfd_boolean
-elf32_frv_check_relocs (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+elf32_frv_check_relocs (bfd *abfd,
+                       struct bfd_link_info *info,
+                       asection *sec,
+                       const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -6195,6 +6050,10 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
          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;
+
+         /* 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))
@@ -6406,8 +6265,8 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
 
        default:
        bad_reloc:
-         (*_bfd_error_handler)
-           (_("%B: unsupported relocation type %i"),
+         info->callbacks->einfo
+           (_("%B: unsupported relocation type %i\n"),
             abfd, ELF32_R_TYPE (rel->r_info));
          return FALSE;
         }
@@ -6420,8 +6279,7 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
 /* Return the machine subcode from the ELF e_flags header.  */
 
 static int
-elf32_frv_machine (abfd)
-     bfd *abfd;
+elf32_frv_machine (bfd *abfd)
 {
   switch (elf_elfheader (abfd)->e_flags & EF_FRV_CPU_MASK)
     {
@@ -6442,8 +6300,7 @@ elf32_frv_machine (abfd)
 /* Set the right machine number for a FRV ELF file.  */
 
 static bfd_boolean
-elf32_frv_object_p (abfd)
-     bfd *abfd;
+elf32_frv_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_frv, elf32_frv_machine (abfd));
   return (((elf_elfheader (abfd)->e_flags & EF_FRV_FDPIC) != 0)
@@ -6453,38 +6310,13 @@ elf32_frv_object_p (abfd)
 /* Function to set the ELF flag bits.  */
 
 static bfd_boolean
-frv_elf_set_private_flags (abfd, flags)
-     bfd *abfd;
-     flagword flags;
+frv_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
   elf_flags_init (abfd) = TRUE;
   return TRUE;
 }
 
-/* Copy backend specific data from one object module to another.  */
-
-static bfd_boolean
-frv_elf_copy_private_bfd_data (ibfd, obfd)
-     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;
-}
-
 /* Return true if the architecture described by elf header flag
    EXTENSION is an extension of the architecture described by BASE.  */
 
@@ -6512,57 +6344,11 @@ frv_elf_arch_extension_p (flagword base, flagword extension)
   return FALSE;
 }
 
-static bfd_boolean
-elf32_frvfdpic_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 (! frv_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;
-}
-
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
 static bfd_boolean
-frv_elf_merge_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+frv_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   flagword old_flags, old_partial;
   flagword new_flags, new_partial;
@@ -6830,10 +6616,8 @@ frv_elf_merge_private_bfd_data (ibfd, obfd)
 }
 
 \f
-bfd_boolean
-frv_elf_print_private_bfd_data (abfd, ptr)
-     bfd *abfd;
-     PTR ptr;
+static bfd_boolean
+frv_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
   flagword flags;
@@ -6930,12 +6714,12 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
          hardcoded offsets and sizes listed below (and contained within
         this lexical block) refer to fields in the target's elf_prstatus
         struct.  */
-      case 268:        
+      case 268:
        /* `pr_cursig' is at offset 12.  */
-       elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
+       elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
 
        /* `pr_pid' is at offset 24.  */
-       elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24);
+       elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24);
 
        /* `pr_reg' is at offset 72.  */
        offset = 72;
@@ -6946,7 +6730,7 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
           and `pr_interp_fdpic_loadmap', both of which (by design)
           immediately follow `pr_reg'.  This will allow these fields to
           be viewed by GDB as registers.
-          
+
           `pr_reg' is 184 bytes long.  `pr_exec_fdpic_loadmap' and
           `pr_interp_fdpic_loadmap' are 4 bytes each.  */
        raw_size = 184 + 4 + 4;
@@ -6971,11 +6755,11 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
       case 124:
 
        /* `pr_fname' is found at offset 28 and is 16 bytes long.  */
-       elf_tdata (abfd)->core_program
+       elf_tdata (abfd)->core->program
          = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
 
        /* `pr_psargs' is found at offset 44 and is 80 bytes long.  */
-       elf_tdata (abfd)->core_command
+       elf_tdata (abfd)->core->command
          = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
     }
 
@@ -6984,7 +6768,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
      implementations, so strip it off if it exists.  */
 
   {
-    char *command = elf_tdata (abfd)->core_command;
+    char *command = elf_tdata (abfd)->core->command;
     int n = strlen (command);
 
     if (0 < n && command[n - 1] == ' ')
@@ -6998,7 +6782,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 #define ELF_MACHINE_CODE       EM_CYGNUS_FRV
 #define ELF_MAXPAGESIZE                0x1000
 
-#define TARGET_BIG_SYM          bfd_elf32_frv_vec
+#define TARGET_BIG_SYM          frv_elf32_vec
 #define TARGET_BIG_NAME                "elf32-frv"
 
 #define elf_info_to_howto                      frv_info_to_howto_rela
@@ -7008,13 +6792,13 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 #define elf_backend_object_p                   elf32_frv_object_p
 #define elf_backend_add_symbol_hook             elf32_frv_add_symbol_hook
 
+#define elf_backend_stack_align                        8
 #define elf_backend_can_gc_sections            1
 #define elf_backend_rela_normal                        1
 
 #define bfd_elf32_bfd_reloc_type_lookup                frv_reloc_type_lookup
 #define bfd_elf32_bfd_reloc_name_lookup        frv_reloc_name_lookup
 #define bfd_elf32_bfd_set_private_flags                frv_elf_set_private_flags
-#define bfd_elf32_bfd_copy_private_bfd_data    frv_elf_copy_private_bfd_data
 #define bfd_elf32_bfd_merge_private_bfd_data   frv_elf_merge_private_bfd_data
 #define bfd_elf32_bfd_print_private_bfd_data   frv_elf_print_private_bfd_data
 
@@ -7037,7 +6821,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 #define ELF_MAXPAGESIZE                0x4000
 
 #undef TARGET_BIG_SYM
-#define TARGET_BIG_SYM          bfd_elf32_frvfdpic_vec
+#define TARGET_BIG_SYM          frv_elf32_fdpic_vec
 #undef TARGET_BIG_NAME
 #define TARGET_BIG_NAME                "elf32-frvfdpic"
 #undef elf32_bed
@@ -7052,12 +6836,6 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 #undef elf_backend_always_size_sections
 #define elf_backend_always_size_sections \
                elf32_frvfdpic_always_size_sections
-#undef elf_backend_modify_program_headers
-#define elf_backend_modify_program_headers \
-               elf32_frvfdpic_modify_program_headers
-#undef bfd_elf32_bfd_copy_private_bfd_data
-#define bfd_elf32_bfd_copy_private_bfd_data \
-               elf32_frvfdpic_copy_private_bfd_data
 
 #undef elf_backend_create_dynamic_sections
 #define elf_backend_create_dynamic_sections \
This page took 0.041792 seconds and 4 git commands to generate.