Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / elf32-rl78.c
index 9aa6c6ed3f44d855ddebd36b4f0ada170e53edaa..633350faec42d7a07f3972d5f971aba6cbf7ebf9 100644 (file)
@@ -1,5 +1,5 @@
 /* Renesas RL78 specific support for 32-bit ELF.
 /* Renesas RL78 specific support for 32-bit ELF.
-   Copyright (C) 2011-2017 Free Software Foundation, Inc.
+   Copyright (C) 2011-2020 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
 
    This file is part of BFD, the Binary File Descriptor library.
 
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 #include "sysdep.h"
 #include "bfd.h"
 
 #include "sysdep.h"
 #include "bfd.h"
-#include "bfd_stdint.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/rl78.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/rl78.h"
@@ -277,8 +277,8 @@ rl78_reloc_name_lookup (bfd * abfd ATTRIBUTE_UNUSED, const char * r_name)
 
 /* Set the howto pointer for an RL78 ELF reloc.  */
 
 
 /* Set the howto pointer for an RL78 ELF reloc.  */
 
-static void
-rl78_info_to_howto_rela (bfd *              abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+rl78_info_to_howto_rela (bfd *              abfd,
                         arelent *           cache_ptr,
                         Elf_Internal_Rela * dst)
 {
                         arelent *           cache_ptr,
                         Elf_Internal_Rela * dst)
 {
@@ -288,10 +288,13 @@ rl78_info_to_howto_rela (bfd *                 abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_RL78_max)
     {
       /* xgettext:c-format */
   if (r_type >= (unsigned int) R_RL78_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid RL78 reloc number: %d"), abfd, r_type);
-      r_type = 0;
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return FALSE;
     }
   cache_ptr->howto = rl78_elf_howto_table + r_type;
     }
   cache_ptr->howto = rl78_elf_howto_table + r_type;
+  return TRUE;
 }
 \f
 static bfd_vma
 }
 \f
 static bfd_vma
@@ -366,7 +369,7 @@ static unsigned int rl78_stack_top;
       if (rl78_stack_top < NUM_STACK_ENTRIES)  \
        rl78_stack [rl78_stack_top ++] = (val); \
       else                                     \
       if (rl78_stack_top < NUM_STACK_ENTRIES)  \
        rl78_stack [rl78_stack_top ++] = (val); \
       else                                     \
-       _bfd_error_handler (_("Internal Error: RL78 reloc stack overflow")); \
+       _bfd_error_handler (_("internal error: RL78 reloc stack overflow")); \
     }                                          \
   while (0)
 
     }                                          \
   while (0)
 
@@ -377,7 +380,7 @@ static unsigned int rl78_stack_top;
        (dest) = rl78_stack [-- rl78_stack_top];\
       else                                     \
        {                                       \
        (dest) = rl78_stack [-- rl78_stack_top];\
       else                                     \
        {                                       \
-         _bfd_error_handler (_("Internal Error: RL78 reloc stack underflow")); \
+         _bfd_error_handler (_("internal error: RL78 reloc stack underflow")); \
          (dest) = 0;                           \
        }                                       \
     }                                          \
          (dest) = 0;                           \
        }                                       \
     }                                          \
@@ -723,7 +726,7 @@ rl78_elf_relocate_section
 
          name = bfd_elf_string_from_elf_section
            (input_bfd, symtab_hdr->sh_link, sym->st_name);
 
          name = bfd_elf_string_from_elf_section
            (input_bfd, symtab_hdr->sh_link, sym->st_name);
-         name = (sym->st_name == 0) ? bfd_section_name (input_bfd, sec) : name;
+         name = sym->st_name == 0 ? bfd_section_name (sec) : name;
        }
       else
        {
        }
       else
        {
@@ -1046,7 +1049,8 @@ rl78_elf_relocate_section
            {
              relocation = 0;
              if (h->root.type != bfd_link_hash_undefweak)
            {
              relocation = 0;
              if (h->root.type != bfd_link_hash_undefweak)
-               _bfd_error_handler (_("Warning: RL78_SYM reloc with an unknown symbol"));
+               _bfd_error_handler
+                 (_("warning: RL78_SYM reloc with an unknown symbol"));
            }
          (void) rl78_compute_complex_reloc (r_type, relocation, input_section);
          break;
            }
          (void) rl78_compute_complex_reloc (r_type, relocation, input_section);
          break;
@@ -1077,7 +1081,7 @@ rl78_elf_relocate_section
                 and emit a more helpful error message.  */
              if (r_type == R_RL78_DIR24S_PCREL)
                /* xgettext:c-format */
                 and emit a more helpful error message.  */
              if (r_type == R_RL78_DIR24S_PCREL)
                /* xgettext:c-format */
-               msg = _("%B(%A): error: call to undefined function '%s'");
+               msg = _("%pB(%pA): error: call to undefined function '%s'");
              else
                (*info->callbacks->reloc_overflow)
                  (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
              else
                (*info->callbacks->reloc_overflow)
                  (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
@@ -1091,27 +1095,27 @@ rl78_elf_relocate_section
 
            case bfd_reloc_other:
              /* xgettext:c-format */
 
            case bfd_reloc_other:
              /* xgettext:c-format */
-             msg = _("%B(%A): warning: unaligned access to symbol '%s' in the small data area");
+             msg = _("%pB(%pA): warning: unaligned access to symbol '%s' in the small data area");
              break;
 
            case bfd_reloc_outofrange:
              /* xgettext:c-format */
              break;
 
            case bfd_reloc_outofrange:
              /* xgettext:c-format */
-             msg = _("%B(%A): internal error: out of range error");
+             msg = _("%pB(%pA): internal error: out of range error");
              break;
 
            case bfd_reloc_notsupported:
              /* xgettext:c-format */
              break;
 
            case bfd_reloc_notsupported:
              /* xgettext:c-format */
-             msg = _("%B(%A): internal error: unsupported relocation error");
+             msg = _("%pB(%pA): internal error: unsupported relocation error");
              break;
 
            case bfd_reloc_dangerous:
              /* xgettext:c-format */
              break;
 
            case bfd_reloc_dangerous:
              /* xgettext:c-format */
-             msg = _("%B(%A): internal error: dangerous relocation");
+             msg = _("%pB(%pA): internal error: dangerous relocation");
              break;
 
            default:
              /* xgettext:c-format */
              break;
 
            default:
              /* xgettext:c-format */
-             msg = _("%B(%A): internal error: unknown error");
+             msg = _("%pB(%pA): internal error: unknown error");
              break;
            }
 
              break;
            }
 
@@ -1198,8 +1202,8 @@ rl78_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 
                  _bfd_error_handler
                    /* xgettext:c-format */
 
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("RL78 ABI conflict: G10 file %B cannot be linked"
-                      " with %s file %B"),
+                   (_("RL78 ABI conflict: G10 file %pB cannot be linked"
+                      " with %s file %pB"),
                     ibfd, rl78_cpu_name (out_cpu), obfd);
                }
              else
                     ibfd, rl78_cpu_name (out_cpu), obfd);
                }
              else
@@ -1215,7 +1219,7 @@ rl78_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 
              _bfd_error_handler
                /* xgettext:c-format */
 
              _bfd_error_handler
                /* xgettext:c-format */
-               (_("RL78 ABI conflict: cannot link %s file %B with %s file %B"),
+               (_("RL78 ABI conflict: cannot link %s file %pB with %s file %pB"),
                 rl78_cpu_name (in_cpu),  ibfd,
                 rl78_cpu_name (out_cpu), obfd);
            }
                 rl78_cpu_name (in_cpu),  ibfd,
                 rl78_cpu_name (out_cpu), obfd);
            }
@@ -1228,11 +1232,11 @@ rl78_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 
          if (old_flags & E_FLAG_RL78_64BIT_DOUBLES)
            /* xgettext:c-format */
 
          if (old_flags & E_FLAG_RL78_64BIT_DOUBLES)
            /* xgettext:c-format */
-           _bfd_error_handler (_("- %B is 64-bit, %B is not"),
+           _bfd_error_handler (_("- %pB is 64-bit, %pB is not"),
                                obfd, ibfd);
          else
            /* xgettext:c-format */
                                obfd, ibfd);
          else
            /* xgettext:c-format */
-           _bfd_error_handler (_("- %B is 64-bit, %B is not"),
+           _bfd_error_handler (_("- %pB is 64-bit, %pB is not"),
                                ibfd, obfd);
          error = TRUE;
        }
                                ibfd, obfd);
          error = TRUE;
        }
@@ -1345,7 +1349,7 @@ rl78_elf_check_relocs
                                                         flags);
              elf_hash_table (info)->splt = splt;
              if (splt == NULL
                                                         flags);
              elf_hash_table (info)->splt = splt;
              if (splt == NULL
-                 || ! bfd_set_section_alignment (dynobj, splt, 1))
+                 || !bfd_set_section_alignment (splt, 1))
                return FALSE;
            }
 
                return FALSE;
            }
 
@@ -1818,7 +1822,7 @@ static bfd_vma
 rl78_offset_for_reloc (bfd *                   abfd,
                       Elf_Internal_Rela *      rel,
                       Elf_Internal_Shdr *      symtab_hdr,
 rl78_offset_for_reloc (bfd *                   abfd,
                       Elf_Internal_Rela *      rel,
                       Elf_Internal_Shdr *      symtab_hdr,
-                      Elf_External_Sym_Shndx * shndx_buf ATTRIBUTE_UNUSED,
+                      bfd_byte *               shndx_buf ATTRIBUTE_UNUSED,
                       Elf_Internal_Sym *       intsyms,
                       Elf_Internal_Rela **     lrel,
                       bfd *                    input_bfd,
                       Elf_Internal_Sym *       intsyms,
                       Elf_Internal_Rela **     lrel,
                       bfd *                    input_bfd,
@@ -2064,7 +2068,7 @@ rl78_elf_relax_section
   bfd_byte *         free_contents = NULL;
   Elf_Internal_Sym *  intsyms = NULL;
   Elf_Internal_Sym *  free_intsyms = NULL;
   bfd_byte *         free_contents = NULL;
   Elf_Internal_Sym *  intsyms = NULL;
   Elf_Internal_Sym *  free_intsyms = NULL;
-  Elf_External_Sym_Shndx * shndx_buf = NULL;
+  bfd_byte *         shndx_buf = NULL;
   bfd_vma pc;
   bfd_vma symval ATTRIBUTE_UNUSED = 0;
   int pcrel ATTRIBUTE_UNUSED = 0;
   bfd_vma pc;
   bfd_vma symval ATTRIBUTE_UNUSED = 0;
   int pcrel ATTRIBUTE_UNUSED = 0;
@@ -2117,17 +2121,20 @@ rl78_elf_relax_section
 
   if (shndx_hdr && shndx_hdr->sh_size != 0)
     {
 
   if (shndx_hdr && shndx_hdr->sh_size != 0)
     {
-      bfd_size_type amt;
+      size_t amt;
 
 
-      amt = symtab_hdr->sh_info;
-      amt *= sizeof (Elf_External_Sym_Shndx);
-      shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
-      if (shndx_buf == NULL)
+      if (_bfd_mul_overflow (symtab_hdr->sh_info,
+                            sizeof (Elf_External_Sym_Shndx), &amt))
+       {
+         bfd_set_error (bfd_error_no_memory);
+         goto error_return;
+       }
+      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0)
        goto error_return;
        goto error_return;
-      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
-         || bfd_bread (shndx_buf, amt, abfd) != amt)
+      shndx_buf = _bfd_malloc_and_read (abfd, amt, amt);
+      if (shndx_buf == NULL)
        goto error_return;
        goto error_return;
-      shndx_hdr->contents = (bfd_byte *) shndx_buf;
+      shndx_hdr->contents = shndx_buf;
     }
 
   /* Get a copy of the native relocations.  */
     }
 
   /* Get a copy of the native relocations.  */
This page took 0.026899 seconds and 4 git commands to generate.