]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - bfd/elf64-mmix.c
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / bfd / elf64-mmix.c
index c057d34904c3f3a8b9243299dcf4640be392da80..d332151a36552ec961be328e9aae3d0d8ac0996d 100644 (file)
@@ -1,5 +1,5 @@
 /* MMIX-specific support for 64-bit ELF.
-   Copyright (C) 2001-2017 Free Software Foundation, Inc.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
    Contributed by Hans-Peter Nilsson <hp@bitrange.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -460,7 +460,7 @@ static reloc_howto_type elf_mmix_howto_table[] =
         FALSE,                 /* partial_inplace */
         ~0x0100ffff,           /* src_mask */
         0x0100ffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
   HOWTO (R_MMIX_CBRANCH_J,     /* type */
         2,                     /* rightshift */
@@ -982,10 +982,10 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
                     a verbose message.  */
                  *error_message
                    = _("invalid input relocation when producing"
-                       " non-ELF, non-mmo format output."
-                       "\n Please use the objcopy program to convert from"
+                       " non-ELF, non-mmo format output;"
+                       " please use the objcopy program to convert from"
                        " ELF or mmo,"
-                       "\n or assemble using"
+                       " or assemble using"
                        " \"-no-expand\" (for gcc, \"-Wa,-no-expand\"");
                  mmix_elf_section_data (isec)->has_warned_pushj = TRUE;
                  return bfd_reloc_dangerous;
@@ -1166,10 +1166,10 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
                   a verbose message.  */
                *error_message
                  = _("invalid input relocation when producing"
-                     " non-ELF, non-mmo format output."
-                     "\n Please use the objcopy program to convert from"
+                     " non-ELF, non-mmo format output;"
+                     " please use the objcopy program to convert from"
                      " ELF or mmo,"
-                     "\n or compile using the gcc-option"
+                     " or compile using the gcc-option"
                      " \"-mno-base-addresses\".");
                mmix_elf_section_data (isec)->has_warned_bpo = TRUE;
                return bfd_reloc_dangerous;
@@ -1192,11 +1192,11 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
          {
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: Internal inconsistency error for value for\n\
- linker-allocated global register: linked: %#Lx != relaxed: %#Lx"),
+             (_("%pB: Internal inconsistency error for value for\n\
+ linker-allocated global register: linked: %#" PRIx64 " != relaxed: %#" PRIx64 ""),
               isec->owner,
-              value,
-              gregdata->reloc_request[bpo_index].value);
+              (uint64_t) value,
+              (uint64_t) gregdata->reloc_request[bpo_index].value);
            bfd_set_error (bfd_error_bad_value);
            return bfd_reloc_overflow;
          }
@@ -1250,8 +1250,8 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
 
 /* Set the howto pointer for an MMIX ELF reloc (type RELA).  */
 
-static void
-mmix_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+mmix_info_to_howto_rela (bfd *abfd,
                         arelent *cache_ptr,
                         Elf_Internal_Rela *dst)
 {
@@ -1261,10 +1261,13 @@ mmix_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_MMIX_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid MMIX 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_mmix_howto_table[r_type];
+  return TRUE;
 }
 
 /* Any MMIX-specific relocation gets here at assembly time or when linking
@@ -1613,14 +1616,14 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
          if (symname == NULL || *symname == 0)
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: base-plus-offset relocation against register symbol:"
-                " (unknown) in %A"),
+             (_("%pB: base-plus-offset relocation against register symbol:"
+                " (unknown) in %pA"),
               input_section->owner, symsec);
          else
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: base-plus-offset relocation against register symbol:"
-                " %s in %A"),
+             (_("%pB: base-plus-offset relocation against register symbol:"
+                " %s in %pA"),
               input_section->owner, symname, symsec);
          return bfd_reloc_overflow;
        }
@@ -1664,14 +1667,14 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
          if (symname == NULL || *symname == 0)
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: register relocation against non-register symbol:"
-                " (unknown) in %A"),
+             (_("%pB: register relocation against non-register symbol:"
+                " (unknown) in %pA"),
               input_section->owner, symsec);
          else
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: register relocation against non-register symbol:"
-                " %s in %A"),
+             (_("%pB: register relocation against non-register symbol:"
+                " %s in %pA"),
               input_section->owner, symname, symsec);
 
          /* The bfd_reloc_outofrange return value, though intuitively a
@@ -1707,7 +1710,7 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
                       MMIX_REG_SECTION_NAME) != 0)
        {
          _bfd_error_handler
-           (_("%B: directive LOCAL valid only with a register or absolute value"),
+           (_("%pB: directive LOCAL valid only with a register or absolute value"),
             input_section->owner);
 
          return bfd_reloc_overflow;
@@ -1738,9 +1741,10 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
            /* FIXME: Better error message.  */
            _bfd_error_handler
              /* xgettext:c-format */
-             (_("%B: LOCAL directive: Register $%Ld is not a local register."
-                "  First global register is $%Ld."),
-              input_section->owner, srel, first_global);
+             (_("%pB: LOCAL directive: "
+                "register $%" PRId64 " is not a local register;"
+                " first global register is $%" PRId64),
+              input_section->owner, (int64_t) srel, (int64_t) first_global);
 
            return bfd_reloc_overflow;
          }
@@ -1836,7 +1840,7 @@ mmix_elf_check_common_relocs  (bfd *abfd,
   for (rel = relocs; rel < rel_end; rel++)
     {
       switch (ELF64_R_TYPE (rel->r_info))
-        {
+       {
          /* This relocation causes a GREG allocation.  We need to count
             them, and we need to create a section for them, so we need an
             object to fake as the owner of that section.  We can't use
@@ -1979,36 +1983,32 @@ mmix_elf_check_relocs (bfd *abfd,
 
       r_symndx = ELF64_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_regular = 1;
        }
 
       switch (ELF64_R_TYPE (rel->r_info))
        {
-        /* This relocation describes the C++ object vtable hierarchy.
-           Reconstruct it for later use during GC.  */
-        case R_MMIX_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_MMIX_GNU_VTENTRY:
-          BFD_ASSERT (h != NULL);
-          if (h != NULL
-              && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-            return FALSE;
-          break;
+       /* This relocation describes the C++ object vtable hierarchy.
+          Reconstruct it for later use during GC.  */
+       case R_MMIX_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_MMIX_GNU_VTENTRY:
+         BFD_ASSERT (h != NULL);
+         if (h != NULL
+             && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+           return FALSE;
+         break;
        }
     }
 
@@ -2170,8 +2170,8 @@ mmix_elf_add_symbol_hook (bfd *abfd,
             h->u.def.section->owner is NULL.  */
          _bfd_error_handler
            /* xgettext:c-format */
-           (_("%B: Error: multiple definition of `%s'; start of %s "
-              "is set in a earlier linked file\n"),
+           (_("%pB: error: multiple definition of `%s'; start of %s "
+              "is set in a earlier linked file"),
             abfd, *namep,
             *namep + strlen (MMIX_LOC_SECTION_START_SYMBOL_PREFIX));
           bfd_set_error (bfd_error_bad_value);
@@ -2225,7 +2225,7 @@ mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
     {
       /* FIXME: Pass error state gracefully.  */
       if (bfd_get_section_flags (abfd, reg_section) & SEC_HAS_CONTENTS)
-       _bfd_abort (__FILE__, __LINE__, _("Register section has contents\n"));
+       _bfd_abort (__FILE__, __LINE__, _("register section has contents\n"));
 
       /* Really remove the section, if it hasn't already been done.  */
       if (!bfd_section_removed_from_list (abfd, reg_section))
@@ -2415,8 +2415,8 @@ _bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
     {
       _bfd_error_handler
        /* xgettext:c-format */
-       (_("Internal inconsistency: remaining %lu != max %lu.\n\
-  Please report this bug."),
+       (_("internal inconsistency: remaining %lu != max %lu;"
+          " please report this bug"),
         (unsigned long) gregdata->n_remaining_bpo_relocs_this_relaxation_round,
         (unsigned long) gregdata->n_bpo_relocs);
       return FALSE;
@@ -2559,7 +2559,7 @@ mmix_elf_relax_section (bfd *abfd,
       || (sec->flags & SEC_CODE) == 0
       || (sec->flags & SEC_LINKER_CREATED) != 0
       /* If no R_MMIX_BASE_PLUS_OFFSET relocs and no PUSHJ-stub relocs,
-         then nothing to do.  */
+        then nothing to do.  */
       || (bpodata == NULL
          && mmix_elf_section_data (sec)->pjs.n_pushj_relocs == 0))
     return TRUE;
@@ -2875,7 +2875,7 @@ mmix_elf_relax_section (bfd *abfd,
 }
 \f
 #define ELF_ARCH               bfd_arch_mmix
-#define ELF_MACHINE_CODE       EM_MMIX
+#define ELF_MACHINE_CODE       EM_MMIX
 
 /* According to mmix-doc page 36 (paragraph 45), this should be (1LL << 48LL).
    However, that's too much for something somewhere in the linker part of
@@ -2905,8 +2905,10 @@ mmix_elf_relax_section (bfd *abfd,
 
 #define elf_backend_check_relocs       mmix_elf_check_relocs
 #define elf_backend_symbol_processing  mmix_elf_symbol_processing
-#define elf_backend_omit_section_dynsym \
-  ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
+#define elf_backend_omit_section_dynsym _bfd_elf_omit_section_dynsym_all
+
+#define bfd_elf64_bfd_copy_link_hash_symbol_type \
+  _bfd_generic_copy_link_hash_symbol_type
 
 #define bfd_elf64_bfd_is_local_label_name \
        mmix_elf_is_local_label_name