Update my email address in MAINTAINERS
[deliverable/binutils-gdb.git] / bfd / elf-m10200.c
index 2ee4496422a3ce85af69d25ae5dc24352a157c59..9c1e4eb70fc5d4ddceccf00d71d1c7da3823709f 100644 (file)
@@ -1,5 +1,5 @@
 /* Matsushita 10200 specific support for 32-bit ELF
-   Copyright (C) 1996-2015 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,9 +23,9 @@
 #include "libbfd.h"
 #include "elf-bfd.h"
 
-static bfd_boolean
+static bool
 mn10200_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
-static bfd_boolean
+static bool
 mn10200_elf_symbol_address_p (bfd *, asection *, Elf_Internal_Sym *, bfd_vma);
 
 enum reloc_type
@@ -48,114 +48,114 @@ static reloc_howto_type elf_mn10200_howto_table[] =
         0,
         3,
         0,
-        FALSE,
+        false,
         0,
         complain_overflow_dont,
         bfd_elf_generic_reloc,
         "R_MN10200_NONE",
-        FALSE,
+        false,
         0,
         0,
-        FALSE),
+        false),
   /* Standard 32 bit reloc.  */
   HOWTO (R_MN10200_32,
         0,
         2,
         32,
-        FALSE,
+        false,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_32",
-        FALSE,
+        false,
         0xffffffff,
         0xffffffff,
-        FALSE),
+        false),
   /* Standard 16 bit reloc.  */
   HOWTO (R_MN10200_16,
         0,
         1,
         16,
-        FALSE,
+        false,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_16",
-        FALSE,
+        false,
         0xffff,
         0xffff,
-        FALSE),
+        false),
   /* Standard 8 bit reloc.  */
   HOWTO (R_MN10200_8,
         0,
         0,
         8,
-        FALSE,
+        false,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_8",
-        FALSE,
+        false,
         0xff,
         0xff,
-        FALSE),
+        false),
   /* Standard 24 bit reloc.  */
   HOWTO (R_MN10200_24,
         0,
         2,
         24,
-        FALSE,
+        false,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_24",
-        FALSE,
+        false,
         0xffffff,
         0xffffff,
-        FALSE),
+        false),
   /* Simple 8 pc-relative reloc.  */
   HOWTO (R_MN10200_PCREL8,
         0,
         0,
         8,
-        TRUE,
+        true,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_PCREL8",
-        FALSE,
+        false,
         0xff,
         0xff,
-        TRUE),
+        true),
   /* Simple 16 pc-relative reloc.  */
   HOWTO (R_MN10200_PCREL16,
         0,
         1,
         16,
-        TRUE,
+        true,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_PCREL16",
-        FALSE,
+        false,
         0xffff,
         0xffff,
-        TRUE),
+        true),
   /* Simple 32bit pc-relative reloc with a 1 byte adjustment
      to get the pc-relative offset correct.  */
   HOWTO (R_MN10200_PCREL24,
         0,
         2,
         24,
-        TRUE,
+        true,
         0,
         complain_overflow_bitfield,
         bfd_elf_generic_reloc,
         "R_MN10200_PCREL24",
-        FALSE,
+        false,
         0xffffff,
         0xffffff,
-        TRUE),
+        true),
 };
 
 struct mn10200_reloc_map
@@ -212,16 +212,25 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 
 /* Set the howto pointer for an MN10200 ELF reloc.  */
 
-static void
-mn10200_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+static bool
+mn10200_info_to_howto (bfd *abfd,
                       arelent *cache_ptr,
                       Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
   r_type = ELF32_R_TYPE (dst->r_info);
-  BFD_ASSERT (r_type < (unsigned int) R_MN10200_MAX);
+  if (r_type >= (unsigned int) R_MN10200_MAX)
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
   cache_ptr->howto = &elf_mn10200_howto_table[r_type];
+  return cache_ptr->howto != NULL;
 }
 
 /* Perform a relocation as part of a final link.  */
@@ -326,7 +335,7 @@ mn10200_elf_final_link_relocate (reloc_howto_type *howto,
 }
 \f
 /* Relocate an MN10200 ELF section.  */
-static bfd_boolean
+static int
 mn10200_elf_relocate_section (bfd *output_bfd,
                              struct bfd_link_info *info,
                              bfd *input_bfd,
@@ -371,7 +380,7 @@ mn10200_elf_relocate_section (bfd *output_bfd,
        }
       else
        {
-         bfd_boolean unresolved_reloc, warned, ignored;
+         bool unresolved_reloc, warned, ignored;
 
          RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
                                   r_symndx, symtab_hdr, sym_hashes,
@@ -404,24 +413,21 @@ mn10200_elf_relocate_section (bfd *output_bfd,
              name = (bfd_elf_string_from_elf_section
                      (input_bfd, symtab_hdr->sh_link, sym->st_name));
              if (name == NULL || *name == '\0')
-               name = bfd_section_name (input_bfd, sec);
+               name = bfd_section_name (sec);
            }
 
          switch (r)
            {
            case bfd_reloc_overflow:
-             if (! ((*info->callbacks->reloc_overflow)
-                    (info, (h ? &h->root : NULL), name, howto->name,
-                     (bfd_vma) 0, input_bfd, input_section,
-                     rel->r_offset)))
-               return FALSE;
+             (*info->callbacks->reloc_overflow)
+               (info, (h ? &h->root : NULL), name, howto->name,
+                (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
              break;
 
            case bfd_reloc_undefined:
-             if (! ((*info->callbacks->undefined_symbol)
-                    (info, name, input_bfd, input_section,
-                     rel->r_offset, TRUE)))
-               return FALSE;
+             (*info->callbacks->undefined_symbol) (info, name, input_bfd,
+                                                   input_section,
+                                                   rel->r_offset, true);
              break;
 
            case bfd_reloc_outofrange:
@@ -441,21 +447,19 @@ mn10200_elf_relocate_section (bfd *output_bfd,
              /* fall through */
 
            common_error:
-             if (!((*info->callbacks->warning)
-                   (info, msg, name, input_bfd, input_section,
-                    rel->r_offset)))
-               return FALSE;
+             (*info->callbacks->warning) (info, msg, name, input_bfd,
+                                          input_section, rel->r_offset);
              break;
            }
        }
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
                                bfd_vma addr, int count)
 {
@@ -522,14 +526,14 @@ mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
        }
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for the mn10200.
 
    There are quite a few relaxing opportunities available on the mn10200:
 
-       * jsr:24 -> jsr:16                                         2 bytes
+       * jsr:24 -> jsr:16                                         2 bytes
 
        * jmp:24 -> jmp:16                                         2 bytes
        * jmp:16 -> bra:8                                          1 byte
@@ -554,11 +558,11 @@ mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
        We don't handle imm16->imm8 or d16->d8 as they're very rare
        and somewhat more difficult to support.  */
 
-static bfd_boolean
+static bool
 mn10200_elf_relax_section (bfd *abfd,
                           asection *sec,
                           struct bfd_link_info *link_info,
-                          bfd_boolean *again)
+                          bool *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -567,7 +571,7 @@ mn10200_elf_relax_section (bfd *abfd,
   Elf_Internal_Sym *isymbuf = NULL;
 
   /* Assume nothing changes.  */
-  *again = FALSE;
+  *again = false;
 
   /* We don't have to do anything for a relocatable link, if
      this section does not have relocs, or if this is not a
@@ -576,7 +580,7 @@ mn10200_elf_relax_section (bfd *abfd,
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
 
@@ -659,8 +663,8 @@ mn10200_elf_relax_section (bfd *abfd,
              && h->root.type != bfd_link_hash_defweak)
            {
              /* This appears to be a reference to an undefined
-                 symbol.  Just ignore it--it will be caught by the
-                 regular reloc processing.  */
+                symbol.  Just ignore it--it will be caught by the
+                regular reloc processing.  */
              continue;
            }
 
@@ -726,7 +730,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
              /* That will change things, so, we should relax again.
                 Note that this is not required, and it may be slow.  */
-             *again = TRUE;
+             *again = true;
            }
        }
 
@@ -773,7 +777,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
              /* That will change things, so, we should relax again.
                 Note that this is not required, and it may be slow.  */
-             *again = TRUE;
+             *again = true;
            }
        }
 
@@ -926,7 +930,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
          /* That will change things, so, we should relax again.
             Note that this is not required, and it may be slow.  */
-         *again = TRUE;
+         *again = true;
        }
 
       /* Try to turn a 24bit immediate, displacement or absolute address
@@ -989,7 +993,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
                  /* That will change things, so, we should relax again.
                     Note that this is not required, and it may be slow.  */
-                 *again = TRUE;
+                 *again = true;
                  break;
 
                /* mov imm24,an -> mov imm16,an
@@ -1040,7 +1044,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
                  /* That will change things, so, we should relax again.
                     Note that this is not required, and it may be slow.  */
-                 *again = TRUE;
+                 *again = true;
                  break;
 
                /* cmp imm24,dn -> cmp imm16,dn
@@ -1141,7 +1145,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
                  /* That will change things, so, we should relax again.
                     Note that this is not required, and it may be slow.  */
-                 *again = TRUE;
+                 *again = true;
                  break;
 
                /* movb (abs24),dn ->movbu (abs16),dn extxb bn */
@@ -1172,7 +1176,7 @@ mn10200_elf_relax_section (bfd *abfd,
 
                  /* That will change things, so, we should relax again.
                     Note that this is not required, and it may be slow.  */
-                 *again = TRUE;
+                 *again = true;
                  break;
                }
            }
@@ -1203,29 +1207,25 @@ mn10200_elf_relax_section (bfd *abfd,
        }
     }
 
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (contents != NULL
-      && elf_section_data (sec)->this_hdr.contents != contents)
+  if (elf_section_data (sec)->this_hdr.contents != contents)
     free (contents);
-  if (internal_relocs != NULL
-      && elf_section_data (sec)->relocs != internal_relocs)
+  if (elf_section_data (sec)->relocs != internal_relocs)
     free (internal_relocs);
 
-  return FALSE;
+  return false;
 }
 
 /* Return TRUE if a symbol exists at the given address, else return
    FALSE.  */
-static bfd_boolean
+static bool
 mn10200_elf_symbol_address_p (bfd *abfd,
                              asection *sec,
                              Elf_Internal_Sym *isym,
@@ -1246,7 +1246,7 @@ mn10200_elf_symbol_address_p (bfd *abfd,
     {
       if (isym->st_shndx == sec_shndx
          && isym->st_value == addr)
-       return TRUE;
+       return true;
     }
 
   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
@@ -1260,10 +1260,10 @@ mn10200_elf_symbol_address_p (bfd *abfd,
           || sym_hash->root.type == bfd_link_hash_defweak)
          && sym_hash->root.u.def.section == sec
          && sym_hash->root.u.def.value == addr)
-       return TRUE;
+       return true;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* This is a version of bfd_generic_get_relocated_section_contents
@@ -1274,7 +1274,7 @@ mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
                                            struct bfd_link_info *link_info,
                                            struct bfd_link_order *link_order,
                                            bfd_byte *data,
-                                           bfd_boolean relocatable,
+                                           bool relocatable,
                                            asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
@@ -1308,7 +1308,7 @@ mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
 
       internal_relocs = (_bfd_elf_link_read_relocs
                         (input_bfd, input_section, NULL,
-                         (Elf_Internal_Rela *) NULL, FALSE));
+                         (Elf_Internal_Rela *) NULL, false));
       if (internal_relocs == NULL)
        goto error_return;
 
@@ -1351,10 +1351,8 @@ mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
                                     isymbuf, sections))
        goto error_return;
 
-      if (sections != NULL)
-       free (sections);
-      if (isymbuf != NULL
-         && symtab_hdr->contents != (unsigned char *) isymbuf)
+      free (sections);
+      if (symtab_hdr->contents != (unsigned char *) isymbuf)
        free (isymbuf);
       if (elf_section_data (input_section)->relocs != internal_relocs)
        free (internal_relocs);
@@ -1363,13 +1361,10 @@ mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
   return data;
 
  error_return:
-  if (sections != NULL)
-    free (sections);
-  if (isymbuf != NULL
-      && symtab_hdr->contents != (unsigned char *) isymbuf)
+  free (sections);
+  if (symtab_hdr->contents != (unsigned char *) isymbuf)
     free (isymbuf);
-  if (internal_relocs != NULL
-      && elf_section_data (input_section)->relocs != internal_relocs)
+  if (elf_section_data (input_section)->relocs != internal_relocs)
     free (internal_relocs);
   return NULL;
 }
@@ -1383,7 +1378,7 @@ mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
 
 #define elf_backend_rela_normal 1
 #define elf_info_to_howto      mn10200_info_to_howto
-#define elf_info_to_howto_rel  0
+#define elf_info_to_howto_rel  NULL
 #define elf_backend_relocate_section mn10200_elf_relocate_section
 #define bfd_elf32_bfd_relax_section    mn10200_elf_relax_section
 #define bfd_elf32_bfd_get_relocated_section_contents \
This page took 0.032991 seconds and 4 git commands to generate.