bfd: use https for bugzilla
[deliverable/binutils-gdb.git] / bfd / elf32-iq2000.c
index 75f50a2688907ef40fd49a2fceb3741b1b3444ac..5291a5469284e115665f0c99e70d1587d6e42489 100644 (file)
@@ -1,5 +1,5 @@
 /* IQ2000-specific support for 32-bit ELF.
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,6 +22,7 @@
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/iq2000.h"
+#include "libiberty.h"
 
 /* Forward declarations.  */
 
@@ -34,54 +35,54 @@ static reloc_howto_type iq2000_elf_howto_table [] =
 
   HOWTO (R_IQ2000_NONE,                     /* type */
         0,                          /* rightshift */
-        2,                          /* size (0 = byte, 1 = short, 2 = long) */
-        32,                         /* bitsize */
-        FALSE,                      /* pc_relative */
+        3,                          /* size (0 = byte, 1 = short, 2 = long) */
+        0,                          /* bitsize */
+        false,                      /* pc_relative */
         0,                          /* bitpos */
-        complain_overflow_bitfield, /* complain_on_overflow */
+        complain_overflow_dont,     /* complain_on_overflow */
         bfd_elf_generic_reloc,      /* special_function */
         "R_IQ2000_NONE",            /* name */
-        FALSE,                      /* partial_inplace */
+        false,                      /* partial_inplace */
         0,                          /* src_mask */
         0,                          /* dst_mask */
-        FALSE),                     /* pcrel_offset */
+        false),                     /* pcrel_offset */
 
   /* A 16 bit absolute relocation.  */
   HOWTO (R_IQ2000_16,               /* type */
         0,                          /* rightshift */
         1,                          /* size (0 = byte, 1 = short, 2 = long) */
         16,                         /* bitsize */
-        FALSE,                      /* pc_relative */
+        false,                      /* pc_relative */
         0,                          /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc,      /* special_function */
         "R_IQ2000_16",              /* name */
-        FALSE,                      /* partial_inplace */
+        false,                      /* partial_inplace */
         0x0000,                     /* src_mask */
         0xffff,                     /* dst_mask */
-        FALSE),                     /* pcrel_offset */
+        false),                     /* pcrel_offset */
 
   /* A 32 bit absolute relocation.  */
   HOWTO (R_IQ2000_32,               /* type */
         0,                          /* rightshift */
         2,                          /* size (0 = byte, 1 = short, 2 = long) */
         31,                         /* bitsize */
-        FALSE,                      /* pc_relative */
+        false,                      /* pc_relative */
         0,                          /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc,      /* special_function */
         "R_IQ2000_32",              /* name */
-        FALSE,                      /* partial_inplace */
+        false,                      /* partial_inplace */
         0x00000000,                 /* src_mask */
         0x7fffffff,                 /* dst_mask */
-        FALSE),                     /* pcrel_offset */
+        false),                     /* pcrel_offset */
 
   /* 26 bit branch address.  */
   HOWTO (R_IQ2000_26,          /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         26,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
                                /* This needs complex overflow
@@ -89,115 +90,115 @@ static reloc_howto_type iq2000_elf_howto_table [] =
                                   bits must match the PC.  */
         bfd_elf_generic_reloc, /* special_function */
         "R_IQ2000_26",         /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x00000000,            /* src_mask */
         0x03ffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* 16 bit PC relative reference.  */
   HOWTO (R_IQ2000_PC16,                /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
-        TRUE,                  /* pc_relative */
+        true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_IQ2000_PC16",       /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x0000,                /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        true),                 /* pcrel_offset */
 
   /* high 16 bits of symbol value.  */
   HOWTO (R_IQ2000_HI16,                /* type */
         16,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         15,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         iq2000_elf_howto_hi16_reloc,   /* special_function */
         "R_IQ2000_HI16",       /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x0000,                /* src_mask */
         0x7fff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* Low 16 bits of symbol value.  */
   HOWTO (R_IQ2000_LO16,                /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_IQ2000_LO16",       /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x0000,                /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* 16-bit jump offset.  */
   HOWTO (R_IQ2000_OFFSET_16,   /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_IQ2000_OFFSET_16",  /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x0000,                /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* 21-bit jump offset.  */
   HOWTO (R_IQ2000_OFFSET_21,   /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         21,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_IQ2000_OFFSET_21",  /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x000000,              /* src_mask */
         0x1fffff,              /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* unsigned high 16 bits of value.  */
   HOWTO (R_IQ2000_OFFSET_21,   /* type */
         16,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_IQ2000_UHI16",      /* name */
-        FALSE,                 /* partial_inplace */
+        false,                 /* partial_inplace */
         0x0000,                /* src_mask */
         0x7fff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        false),                /* pcrel_offset */
 
   /* A 32 bit absolute debug relocation.  */
   HOWTO (R_IQ2000_32_DEBUG,         /* type */
         0,                          /* rightshift */
         2,                          /* size (0 = byte, 1 = short, 2 = long) */
         32,                         /* bitsize */
-        FALSE,                      /* pc_relative */
+        false,                      /* pc_relative */
         0,                          /* bitpos */
         complain_overflow_bitfield, /* complain_on_overflow */
         bfd_elf_generic_reloc,      /* special_function */
         "R_IQ2000_32",              /* name */
-        FALSE,                      /* partial_inplace */
+        false,                      /* partial_inplace */
         0x00000000,                 /* src_mask */
         0xffffffff,                 /* dst_mask */
-        FALSE),                     /* pcrel_offset */
+        false),                     /* pcrel_offset */
 
 };
 
@@ -207,15 +208,15 @@ static reloc_howto_type iq2000_elf_vtinherit_howto =
         0,                        /* rightshift */
         2,                        /* size (0 = byte, 1 = short, 2 = long) */
         0,                        /* bitsize */
-        FALSE,                    /* pc_relative */
+        false,                    /* pc_relative */
         0,                        /* bitpos */
         complain_overflow_dont,   /* complain_on_overflow */
         NULL,                     /* special_function */
         "R_IQ2000_GNU_VTINHERIT",  /* name */
-        FALSE,                    /* partial_inplace */
+        false,                    /* partial_inplace */
         0,                        /* src_mask */
         0,                        /* dst_mask */
-        FALSE);                   /* pcrel_offset */
+        false);                   /* pcrel_offset */
 
 /* GNU extension to record C++ vtable member usage.  */
 static reloc_howto_type iq2000_elf_vtentry_howto =
@@ -223,15 +224,15 @@ static reloc_howto_type iq2000_elf_vtentry_howto =
         0,                        /* rightshift */
         2,                        /* size (0 = byte, 1 = short, 2 = long) */
         0,                        /* bitsize */
-        FALSE,                    /* pc_relative */
+        false,                    /* pc_relative */
         0,                        /* bitpos */
         complain_overflow_dont,   /* complain_on_overflow */
         NULL,                     /* special_function */
         "R_IQ2000_GNU_VTENTRY",    /* name */
-        FALSE,                    /* partial_inplace */
+        false,                    /* partial_inplace */
         0,                        /* src_mask */
         0,                        /* dst_mask */
-        FALSE);                   /* pcrel_offset */
+        false);                   /* pcrel_offset */
 
 \f
 static bfd_reloc_status_type
@@ -416,7 +417,7 @@ iq2000_final_link_relocate (reloc_howto_type *      howto,
 \f
 /* Set the howto pointer for a IQ2000 ELF reloc.  */
 
-static void
+static bool
 iq2000_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
                           arelent * cache_ptr,
                           Elf_Internal_Rela * dst)
@@ -435,21 +436,25 @@ iq2000_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
       break;
 
     default:
-      if (r_type >= (unsigned int) R_IQ2000_max)
+      if (r_type >= ARRAY_SIZE (iq2000_elf_howto_table))
        {
-         _bfd_error_handler (_("%A: invalid IQ2000 reloc number: %d"), abfd, r_type);
-         r_type = 0;
+         /* 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 = & iq2000_elf_howto_table [r_type];
       break;
     }
+  return true;
 }
 
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.         */
 
-static bfd_boolean
+static bool
 iq2000_elf_check_relocs (bfd *abfd,
                         struct bfd_link_info *info,
                         asection *sec,
@@ -459,10 +464,10 @@ iq2000_elf_check_relocs (bfd *abfd,
   struct elf_link_hash_entry **sym_hashes;
   const Elf_Internal_Rela *rel;
   const Elf_Internal_Rela *rel_end;
-  bfd_boolean changed = FALSE;
+  bool changed = false;
 
-  if (info->relocatable)
-    return TRUE;
+  if (bfd_link_relocatable (info))
+    return true;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (abfd);
@@ -482,10 +487,6 @@ iq2000_elf_check_relocs (bfd *abfd,
          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))
@@ -494,27 +495,25 @@ iq2000_elf_check_relocs (bfd *abfd,
             hierarchy.  Reconstruct it for later use during GC.  */
        case R_IQ2000_GNU_VTINHERIT:
          if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-           return FALSE;
+           return false;
          break;
 
          /* This relocation describes which C++ vtable entries
             are actually used.  Record for later use during GC.  */
        case R_IQ2000_GNU_VTENTRY:
-         BFD_ASSERT (h != NULL);
-         if (h != NULL
-             && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-           return FALSE;
+         if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+           return false;
          break;
 
        case R_IQ2000_32:
          /* For debug section, change to special harvard-aware relocations.  */
-         if (CONST_STRNEQ (sec->name, ".debug")
-             || CONST_STRNEQ (sec->name, ".stab")
-             || CONST_STRNEQ (sec->name, ".eh_frame"))
+         if (startswith (sec->name, ".debug")
+             || startswith (sec->name, ".stab")
+             || startswith (sec->name, ".eh_frame"))
            {
              ((Elf_Internal_Rela *) rel)->r_info
                = ELF32_R_INFO (ELF32_R_SYM (rel->r_info), R_IQ2000_32_DEBUG);
-             changed = TRUE;
+             changed = true;
            }
          break;
        }
@@ -525,7 +524,7 @@ iq2000_elf_check_relocs (bfd *abfd,
        we'll free the relocs and lose our changes.  */
     elf_section_data (sec)->relocs = (Elf_Internal_Rela *) relocs;
 
-  return TRUE;
+  return true;
 }
 
 \f
@@ -562,7 +561,7 @@ iq2000_elf_check_relocs (bfd *abfd,
    section, which means that the addend must be adjusted
    accordingly.         */
 
-static bfd_boolean
+static int
 iq2000_elf_relocate_section (bfd *                  output_bfd ATTRIBUTE_UNUSED,
                             struct bfd_link_info *  info,
                             bfd *                   input_bfd,
@@ -626,12 +625,12 @@ iq2000_elf_relocate_section (bfd *                     output_bfd ATTRIBUTE_UNUSED,
 
          name = bfd_elf_string_from_elf_section
            (input_bfd, symtab_hdr->sh_link, sym->st_name);
-         name = (name == NULL) ? bfd_section_name (input_bfd, osec) : name;
+         name = name == NULL ? bfd_section_name (osec) : name;
        }
       else
        {
-         bfd_boolean unresolved_reloc;
-         bfd_boolean warned, ignored;
+         bool unresolved_reloc;
+         bool warned, ignored;
 
          RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
                                   r_symndx, symtab_hdr, sym_hashes,
@@ -645,7 +644,7 @@ iq2000_elf_relocate_section (bfd *               output_bfd ATTRIBUTE_UNUSED,
        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
                                         rel, 1, relend, howto, 0, contents);
 
-      if (info->relocatable)
+      if (bfd_link_relocatable (info))
        continue;
 
       switch (r_type)
@@ -678,14 +677,14 @@ iq2000_elf_relocate_section (bfd *                     output_bfd ATTRIBUTE_UNUSED,
          switch (r)
            {
            case bfd_reloc_overflow:
-             r = info->callbacks->reloc_overflow
+             (*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:
-             r = info->callbacks->undefined_symbol
-               (info, name, input_bfd, input_section, rel->r_offset, TRUE);
+             (*info->callbacks->undefined_symbol)
+               (info, name, input_bfd, input_section, rel->r_offset, true);
              break;
 
            case bfd_reloc_outofrange:
@@ -706,15 +705,12 @@ iq2000_elf_relocate_section (bfd *                     output_bfd ATTRIBUTE_UNUSED,
            }
 
          if (msg)
-           r = info->callbacks->warning
-             (info, msg, name, input_bfd, input_section, rel->r_offset);
-
-         if (! r)
-           return FALSE;
+           (*info->callbacks->warning) (info, msg, name, input_bfd,
+                                        input_section, rel->r_offset);
        }
     }
 
-  return TRUE;
+  return true;
 }
 \f
 
@@ -759,23 +755,24 @@ elf32_iq2000_machine (bfd *abfd)
 \f
 /* Function to set the ELF flag bits.  */
 
-static bfd_boolean
+static bool
 iq2000_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
-  elf_flags_init (abfd) = TRUE;
-  return TRUE;
+  elf_flags_init (abfd) = true;
+  return true;
 }
 
 /* Merge backend specific data from an object
    file to the output object file when linking.  */
 
-static bfd_boolean
-iq2000_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
+static bool
+iq2000_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 {
+  bfd *obfd = info->output_bfd;
   flagword old_flags, old_partial;
   flagword new_flags, new_partial;
-  bfd_boolean error = FALSE;
+  bool error = false;
   char new_opt[80];
   char old_opt[80];
 
@@ -786,7 +783,7 @@ iq2000_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   if (!elf_flags_init (obfd))
     {
       /* First call, no flags set.  */
-      elf_flags_init (obfd) = TRUE;
+      elf_flags_init (obfd) = true;
       elf_elfheader (obfd)->e_flags = new_flags;
     }
 
@@ -827,10 +824,11 @@ iq2000_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
       /* Print out any mismatches from above.  */
       if (new_opt[0])
        {
-         error = TRUE;
+         error = true;
          _bfd_error_handler
-           (_("%s: compiled with %s and linked with modules compiled with %s"),
-            bfd_get_filename (ibfd), new_opt, old_opt);
+           /* xgettext:c-format */
+           (_("%pB: compiled with %s and linked with modules compiled with %s"),
+            ibfd, new_opt, old_opt);
        }
 
       new_flags &= ~ EF_IQ2000_ALL_FLAGS;
@@ -839,11 +837,12 @@ iq2000_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
       /* Warn about any other mismatches.  */
       if (new_flags != old_flags)
        {
-         error = TRUE;
+         error = true;
 
          _bfd_error_handler
-           (_("%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
-            bfd_get_filename (ibfd), (long)new_flags, (long)old_flags);
+           /* xgettext:c-format */
+           (_("%pB: uses different e_flags (%#x) fields than previous modules (%#x)"),
+            ibfd, new_flags, old_flags);
        }
     }
 
@@ -854,7 +853,7 @@ iq2000_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 }
 
 \f
-static bfd_boolean
+static bool
 iq2000_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
@@ -881,16 +880,16 @@ iq2000_elf_print_private_bfd_data (bfd *abfd, void * ptr)
     }
 
   fputc ('\n', file);
-  return TRUE;
+  return true;
 }
 
 static
-bfd_boolean
+bool
 iq2000_elf_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_iq2000,
                             elf32_iq2000_machine (abfd));
-  return TRUE;
+  return true;
 }
 
 \f
This page took 0.033704 seconds and 4 git commands to generate.