LoongArch: Correct comments.
[binutils-gdb.git] / bfd / elf32-d10v.c
index c45bd0d717e392c3c291cf34c898baaa96502f3b..0677d73f21cda4eb1a1500a27fe22b570b66a301 100644 (file)
@@ -1,5 +1,5 @@
 /* D10V-specific support for 32-bit ELF
-   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   Copyright (C) 1996-2023 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,137 +33,137 @@ static reloc_howto_type elf_d10v_howto_table[] =
   /* This reloc does nothing.  */
   HOWTO (R_D10V_NONE,          /* Type.  */
         0,                     /* Rightshift.  */
-        3,                     /* Size (0 = byte, 1 = short, 2 = long).  */
+        0,                     /* Size.  */
         0,                     /* Bitsize.  */
-        FALSE,                 /* PC_relative.  */
+        false,                 /* PC_relative.  */
         0,                     /* Bitpos.  */
         complain_overflow_dont,/* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_NONE",         /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0,                     /* Src_mask.  */
         0,                     /* Dst_mask.  */
-        FALSE),                /* PCrel_offset.  */
+        false),                /* PCrel_offset.  */
 
   /* An PC Relative 10-bit relocation, shifted by 2, right container.  */
   HOWTO (R_D10V_10_PCREL_R,    /* Type.  */
-        2,                     /* Rightshift.  */
-        2,                     /* Size (0 = byte, 1 = short, 2 = long).  */
-        8,                     /* Bitsize.  */
-        TRUE,                  /* PC_relative.  */
-        0,                     /* Bitpos.  */
+        2,                     /* Rightshift.  */
+        4,                     /* Size.  */
+        8,                     /* Bitsize.  */
+        true,                  /* PC_relative.  */
+        0,                     /* Bitpos.  */
         complain_overflow_signed, /* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_10_PCREL_R",   /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0xff,                  /* Src_mask.  */
-        0xff,                  /* Dst_mask.  */
-        TRUE),                 /* PCrel_offset.  */
+        0xff,                  /* Dst_mask.  */
+        true),                 /* PCrel_offset.  */
 
   /* An PC Relative 10-bit relocation, shifted by 2, left container.  */
   HOWTO (R_D10V_10_PCREL_L,    /* Type.  */
-        2,                     /* Rightshift.  */
-        2,                     /* Size (0 = byte, 1 = short, 2 = long).  */
-        8,                     /* Bitsize.  */
-        TRUE,                  /* PC_relative.  */
-        15,                    /* Bitpos.  */
+        2,                     /* Rightshift.  */
+        4,                     /* Size.  */
+        8,                     /* Bitsize.  */
+        true,                  /* PC_relative.  */
+        15,                    /* Bitpos.  */
         complain_overflow_signed, /* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_10_PCREL_L",   /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0x07f8000,             /* Src_mask.  */
-        0x07f8000,             /* Dst_mask.  */
-        TRUE),                 /* PCrel_offset.  */
+        0x07f8000,             /* Dst_mask.  */
+        true),                 /* PCrel_offset.  */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_D10V_16,            /* Type.  */
         0,                     /* Rightshift.  */
-        1,                     /* Size (0 = byte, 1 = short, 2 = long).  */
+        2,                     /* Size.  */
         16,                    /* Bitsize.  */
-        FALSE,                 /* PC_relative.  */
+        false,                 /* PC_relative.  */
         0,                     /* Bitpos.  */
         complain_overflow_dont,/* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_16",           /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0xffff,                /* Src_mask.  */
         0xffff,                /* Dst_mask.  */
-        FALSE),                /* PCrel_offset.  */
+        false),                /* PCrel_offset.  */
 
   /* An 18 bit absolute relocation, right shifted 2.  */
   HOWTO (R_D10V_18,            /* Type.  */
         2,                     /* Rightshift.  */
-        1,                     /* Size (0 = byte, 1 = short, 2 = long).  */
+        2,                     /* Size.  */
         16,                    /* Bitsize.  */
-        FALSE,                 /* PC_relative.  */
+        false,                 /* PC_relative.  */
         0,                     /* Bitpos.  */
         complain_overflow_dont, /* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_18",           /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0xffff,                /* Src_mask.  */
         0xffff,                /* Dst_mask.  */
-        FALSE),                /* PCrel_offset.  */
+        false),                /* PCrel_offset.  */
 
   /* A relative 18 bit relocation, right shifted by 2.  */
   HOWTO (R_D10V_18_PCREL,      /* Type.  */
         2,                     /* Rightshift.  */
-        2,                     /* Size (0 = byte, 1 = short, 2 = long).  */
+        4,                     /* Size.  */
         16,                    /* Bitsize.  */
-        TRUE,                  /* PC_relative.  */
+        true,                  /* PC_relative.  */
         0,                     /* Bitpos.  */
         complain_overflow_signed, /* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_18_PCREL",     /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0xffff,                /* Src_mask.  */
         0xffff,                /* Dst_mask.  */
-        TRUE),                 /* PCrel_offset.  */
+        true),                 /* PCrel_offset.  */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_D10V_32,            /* Type.  */
         0,                     /* Rightshift.  */
-        2,                     /* Size (0 = byte, 1 = short, 2 = long).  */
+        4,                     /* Size.  */
         32,                    /* Bitsize.  */
-        FALSE,                 /* PC_relative.  */
+        false,                 /* PC_relative.  */
         0,                     /* Bitpos.  */
         complain_overflow_dont,/* Complain_on_overflow.  */
         bfd_elf_generic_reloc, /* Special_function.  */
         "R_D10V_32",           /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
+        false,                 /* Partial_inplace.  */
         0xffffffff,            /* Src_mask.  */
         0xffffffff,            /* Dst_mask.  */
-        FALSE),                /* PCrel_offset.  */
+        false),                /* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_D10V_GNU_VTINHERIT, /* Type.  */
-        0,                     /* Rightshift.  */
-        2,                     /* Size (0 = byte, 1 = short, 2 = long).  */
-        0,                     /* Bitsize.  */
-        FALSE,                 /* PC_relative.  */
-        0,                     /* Bitpos.  */
+        0,                     /* Rightshift.  */
+        4,                     /* Size.  */
+        0,                     /* Bitsize.  */
+        false,                 /* PC_relative.  */
+        0,                     /* Bitpos.  */
         complain_overflow_dont,/* Complain_on_overflow.  */
-        NULL,                  /* Special_function.  */
+        NULL,                  /* Special_function.  */
         "R_D10V_GNU_VTINHERIT",/* Name.  */
-        FALSE,                 /* Partial_inplace.  */
-        0,                     /* Src_mask.  */
-        0,                     /* Dst_mask.  */
-        FALSE),                /* PCrel_offset.  */
+        false,                 /* Partial_inplace.  */
+        0,                     /* Src_mask.  */
+        0,                     /* Dst_mask.  */
+        false),                /* PCrel_offset.  */
 
   /* GNU extension to record C++ vtable member usage.  */
-  HOWTO (R_D10V_GNU_VTENTRY,    /* Type.  */
-        0,                     /* Rightshift.  */
-        2,                     /* Size (0 = byte, 1 = short, 2 = long).  */
-        0,                     /* Bitsize.  */
-        FALSE,                 /* PC_relative.  */
-        0,                     /* Bitpos.  */
+  HOWTO (R_D10V_GNU_VTENTRY,   /* Type.  */
+        0,                     /* Rightshift.  */
+        4,                     /* Size.  */
+        0,                     /* Bitsize.  */
+        false,                 /* PC_relative.  */
+        0,                     /* Bitpos.  */
         complain_overflow_dont,/* Complain_on_overflow.  */
         _bfd_elf_rel_vtable_reloc_fn,  /* Special_function.  */
-        "R_D10V_GNU_VTENTRY",  /* Name.  */
-        FALSE,                 /* Partial_inplace.  */
-        0,                     /* Src_mask.  */
-        0,                     /* Dst_mask.  */
-        FALSE),                /* PCrel_offset.  */
+        "R_D10V_GNU_VTENTRY",  /* Name.  */
+        false,                 /* Partial_inplace.  */
+        0,                     /* Src_mask.  */
+        0,                     /* Dst_mask.  */
+        false),                /* PCrel_offset.  */
 };
 
 /* Map BFD reloc types to D10V ELF reloc types.  */
@@ -220,8 +220,8 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 
 /* Set the howto pointer for an D10V ELF reloc.  */
 
-static void
-d10v_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
+static bool
+d10v_info_to_howto_rel (bfd *abfd,
                        arelent *cache_ptr,
                        Elf_Internal_Rela *dst)
 {
@@ -231,10 +231,13 @@ d10v_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_D10V_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid D10V 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 = &elf_d10v_howto_table[r_type];
+  return true;
 }
 
 static asection *
@@ -259,7 +262,7 @@ elf32_d10v_gc_mark_hook (asection *sec,
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
 
-static bfd_boolean
+static bool
 elf32_d10v_check_relocs (bfd *abfd,
                         struct bfd_link_info *info,
                         asection *sec,
@@ -271,7 +274,7 @@ elf32_d10v_check_relocs (bfd *abfd,
   const Elf_Internal_Rela *rel_end;
 
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -284,40 +287,34 @@ elf32_d10v_check_relocs (bfd *abfd,
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       if (r_symndx < symtab_hdr->sh_info)
-        h = NULL;
+       h = NULL;
       else
        {
          h = sym_hashes[r_symndx - symtab_hdr->sh_info];
          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))
-        {
-        /* This relocation describes the C++ object vtable hierarchy.
-           Reconstruct it for later use during GC.  */
-        case R_D10V_GNU_VTINHERIT:
-          if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-            return FALSE;
-          break;
-
-        /* This relocation describes which C++ vtable entries are actually
-           used.  Record for later use during GC.  */
-        case R_D10V_GNU_VTENTRY:
-          BFD_ASSERT (h != NULL);
-          if (h != NULL
-              && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
-            return FALSE;
-          break;
-        }
+       {
+       /* This relocation describes the C++ object vtable hierarchy.
+          Reconstruct it for later use during GC.  */
+       case R_D10V_GNU_VTINHERIT:
+         if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+           return false;
+         break;
+
+       /* This relocation describes which C++ vtable entries are actually
+          used.  Record for later use during GC.  */
+       case R_D10V_GNU_VTENTRY:
+         if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
+           return false;
+         break;
+       }
     }
 
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -327,15 +324,15 @@ extract_rel_addend (bfd *abfd,
 {
   bfd_vma insn, val;
 
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-    case 0:
+    case 1:
       insn = bfd_get_8 (abfd, where);
       break;
-    case 1:
+    case 2:
       insn = bfd_get_16 (abfd, where);
       break;
-    case 2:
+    case 4:
       insn = bfd_get_32 (abfd, where);
       break;
     default:
@@ -365,19 +362,19 @@ insert_rel_addend (bfd *abfd,
 
   addend = (addend >> howto->rightshift << howto->bitpos) & howto->dst_mask;
   insn = ~howto->dst_mask;
-  switch (howto->size)
+  switch (bfd_get_reloc_size (howto))
     {
-    case 0:
+    case 1:
       insn &= bfd_get_8 (abfd, where);
       insn |= addend;
       bfd_put_8 (abfd, insn, where);
       break;
-    case 1:
+    case 2:
       insn &= bfd_get_16 (abfd, where);
       insn |= addend;
       bfd_put_16 (abfd, insn, where);
       break;
-    case 2:
+    case 4:
       insn &= bfd_get_32 (abfd, where);
       insn |= addend;
       bfd_put_32 (abfd, insn, where);
@@ -389,7 +386,7 @@ insert_rel_addend (bfd *abfd,
 
 /* Relocate a D10V ELF section.  */
 
-static bfd_boolean
+static int
 elf32_d10v_relocate_section (bfd *output_bfd,
                             struct bfd_link_info *info,
                             bfd *input_bfd,
@@ -424,8 +421,8 @@ elf32_d10v_relocate_section (bfd *output_bfd,
       r_type = ELF32_R_TYPE (rel->r_info);
 
       if (r_type == R_D10V_GNU_VTENTRY
-          || r_type == R_D10V_GNU_VTINHERIT)
-        continue;
+         || r_type == R_D10V_GNU_VTINHERIT)
+       continue;
 
       howto = elf_d10v_howto_table + r_type;
       h = NULL;
@@ -463,7 +460,7 @@ elf32_d10v_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,
@@ -485,12 +482,12 @@ elf32_d10v_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);
        }
 
       r = _bfd_final_link_relocate (howto, input_bfd, input_section,
-                                    contents, rel->r_offset,
-                                    relocation, (bfd_vma) 0);
+                                   contents, rel->r_offset,
+                                   relocation, (bfd_vma) 0);
 
       if (r != bfd_reloc_ok)
        {
@@ -506,7 +503,7 @@ elf32_d10v_relocate_section (bfd *output_bfd,
 
            case bfd_reloc_undefined:
              (*info->callbacks->undefined_symbol)
-               (info, name, input_bfd, input_section, rel->r_offset, TRUE);
+               (info, name, input_bfd, input_section, rel->r_offset, true);
              break;
 
            case bfd_reloc_outofrange:
@@ -533,23 +530,22 @@ elf32_d10v_relocate_section (bfd *output_bfd,
        }
     }
 
-  return TRUE;
+  return true;
 }
 #define ELF_ARCH               bfd_arch_d10v
 #define ELF_MACHINE_CODE       EM_D10V
 #define ELF_MACHINE_ALT1       EM_CYGNUS_D10V
 #define ELF_MAXPAGESIZE                0x1000
 
-#define TARGET_BIG_SYM          d10v_elf32_vec
+#define TARGET_BIG_SYM         d10v_elf32_vec
 #define TARGET_BIG_NAME                "elf32-d10v"
 
-#define elf_info_to_howto                   0
-#define elf_info_to_howto_rel               d10v_info_to_howto_rel
-#define elf_backend_object_p                0
-#define elf_backend_final_write_processing   0
-#define elf_backend_gc_mark_hook             elf32_d10v_gc_mark_hook
-#define elf_backend_check_relocs             elf32_d10v_check_relocs
-#define elf_backend_relocate_section         elf32_d10v_relocate_section
-#define elf_backend_can_gc_sections          1
+#define elf_info_to_howto                   NULL
+#define elf_info_to_howto_rel               d10v_info_to_howto_rel
+#define elf_backend_object_p                0
+#define elf_backend_gc_mark_hook            elf32_d10v_gc_mark_hook
+#define elf_backend_check_relocs            elf32_d10v_check_relocs
+#define elf_backend_relocate_section        elf32_d10v_relocate_section
+#define elf_backend_can_gc_sections         1
 
 #include "elf32-target.h"