Add support for debuginfod to the binutils (disable by default, enabled via a configu...
[deliverable/binutils-gdb.git] / bfd / elf32-metag.c
index 1f760846ef530bd1792161c5551f4235ed0b9976..08eb70bdedc4012678f80b07ecc604b42819e0f6 100644 (file)
@@ -1,5 +1,5 @@
 /* Meta support for 32-bit ELF
 /* Meta support for 32-bit ELF
-   Copyright (C) 2013-2017 Free Software Foundation, Inc.
+   Copyright (C) 2013-2020 Free Software Foundation, Inc.
    Contributed by Imagination Technologies Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
    Contributed by Imagination Technologies Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -73,18 +73,18 @@ static const unsigned int plt_pic_entry[] =
 /* Variable names follow a coding style.
    Please follow this (Apps Hungarian) style:
 
 /* Variable names follow a coding style.
    Please follow this (Apps Hungarian) style:
 
-   Structure/Variable              Prefix
-   elf_link_hash_table             "etab"
-   elf_link_hash_entry             "eh"
+   Structure/Variable             Prefix
+   elf_link_hash_table            "etab"
+   elf_link_hash_entry            "eh"
 
 
-   elf_metag_link_hash_table       "htab"
-   elf_metag_link_hash_entry       "hh"
+   elf_metag_link_hash_table      "htab"
+   elf_metag_link_hash_entry      "hh"
 
 
-   bfd_link_hash_table             "btab"
-   bfd_link_hash_entry             "bh"
+   bfd_link_hash_table            "btab"
+   bfd_link_hash_entry            "bh"
 
    bfd_hash_table containing stubs "bstab"
 
    bfd_hash_table containing stubs "bstab"
-   elf_metag_stub_hash_entry       "hsh"
+   elf_metag_stub_hash_entry      "hsh"
 
    Always remember to use GNU Coding Style.  */
 
 
    Always remember to use GNU Coding Style.  */
 
@@ -699,44 +699,44 @@ struct metag_reloc_map
 
 static const struct metag_reloc_map metag_reloc_map [] =
   {
 
 static const struct metag_reloc_map metag_reloc_map [] =
   {
-    { BFD_RELOC_NONE,                R_METAG_NONE },
-    { BFD_RELOC_32,                  R_METAG_ADDR32 },
-    { BFD_RELOC_METAG_HIADDR16,      R_METAG_HIADDR16 },
-    { BFD_RELOC_METAG_LOADDR16,      R_METAG_LOADDR16 },
+    { BFD_RELOC_NONE,               R_METAG_NONE },
+    { BFD_RELOC_32,                 R_METAG_ADDR32 },
+    { BFD_RELOC_METAG_HIADDR16,             R_METAG_HIADDR16 },
+    { BFD_RELOC_METAG_LOADDR16,             R_METAG_LOADDR16 },
     { BFD_RELOC_METAG_RELBRANCH,     R_METAG_RELBRANCH },
     { BFD_RELOC_METAG_GETSETOFF,     R_METAG_GETSETOFF },
     { BFD_RELOC_METAG_RELBRANCH,     R_METAG_RELBRANCH },
     { BFD_RELOC_METAG_GETSETOFF,     R_METAG_GETSETOFF },
-    { BFD_RELOC_VTABLE_INHERIT,      R_METAG_GNU_VTINHERIT },
-    { BFD_RELOC_VTABLE_ENTRY,        R_METAG_GNU_VTENTRY },
-    { BFD_RELOC_METAG_REL8,          R_METAG_REL8 },
-    { BFD_RELOC_METAG_REL16,         R_METAG_REL16 },
+    { BFD_RELOC_VTABLE_INHERIT,             R_METAG_GNU_VTINHERIT },
+    { BFD_RELOC_VTABLE_ENTRY,       R_METAG_GNU_VTENTRY },
+    { BFD_RELOC_METAG_REL8,         R_METAG_REL8 },
+    { BFD_RELOC_METAG_REL16,        R_METAG_REL16 },
     { BFD_RELOC_METAG_HI16_GOTOFF,   R_METAG_HI16_GOTOFF },
     { BFD_RELOC_METAG_LO16_GOTOFF,   R_METAG_LO16_GOTOFF },
     { BFD_RELOC_METAG_GETSET_GOTOFF, R_METAG_GETSET_GOTOFF },
     { BFD_RELOC_METAG_GETSET_GOT,    R_METAG_GETSET_GOT },
     { BFD_RELOC_METAG_HI16_GOTPC,    R_METAG_HI16_GOTPC },
     { BFD_RELOC_METAG_LO16_GOTPC,    R_METAG_LO16_GOTPC },
     { BFD_RELOC_METAG_HI16_GOTOFF,   R_METAG_HI16_GOTOFF },
     { BFD_RELOC_METAG_LO16_GOTOFF,   R_METAG_LO16_GOTOFF },
     { BFD_RELOC_METAG_GETSET_GOTOFF, R_METAG_GETSET_GOTOFF },
     { BFD_RELOC_METAG_GETSET_GOT,    R_METAG_GETSET_GOT },
     { BFD_RELOC_METAG_HI16_GOTPC,    R_METAG_HI16_GOTPC },
     { BFD_RELOC_METAG_LO16_GOTPC,    R_METAG_LO16_GOTPC },
-    { BFD_RELOC_METAG_HI16_PLT,      R_METAG_HI16_PLT },
-    { BFD_RELOC_METAG_LO16_PLT,      R_METAG_LO16_PLT },
+    { BFD_RELOC_METAG_HI16_PLT,             R_METAG_HI16_PLT },
+    { BFD_RELOC_METAG_LO16_PLT,             R_METAG_LO16_PLT },
     { BFD_RELOC_METAG_RELBRANCH_PLT, R_METAG_RELBRANCH_PLT },
     { BFD_RELOC_METAG_RELBRANCH_PLT, R_METAG_RELBRANCH_PLT },
-    { BFD_RELOC_METAG_GOTOFF,        R_METAG_GOTOFF },
-    { BFD_RELOC_METAG_PLT,           R_METAG_PLT },
-    { BFD_RELOC_METAG_COPY,          R_METAG_COPY },
-    { BFD_RELOC_METAG_JMP_SLOT,      R_METAG_JMP_SLOT },
-    { BFD_RELOC_METAG_RELATIVE,      R_METAG_RELATIVE },
-    { BFD_RELOC_METAG_GLOB_DAT,      R_METAG_GLOB_DAT },
-    { BFD_RELOC_METAG_TLS_GD,        R_METAG_TLS_GD },
-    { BFD_RELOC_METAG_TLS_LDM,       R_METAG_TLS_LDM },
+    { BFD_RELOC_METAG_GOTOFF,       R_METAG_GOTOFF },
+    { BFD_RELOC_METAG_PLT,          R_METAG_PLT },
+    { BFD_RELOC_METAG_COPY,         R_METAG_COPY },
+    { BFD_RELOC_METAG_JMP_SLOT,             R_METAG_JMP_SLOT },
+    { BFD_RELOC_METAG_RELATIVE,             R_METAG_RELATIVE },
+    { BFD_RELOC_METAG_GLOB_DAT,             R_METAG_GLOB_DAT },
+    { BFD_RELOC_METAG_TLS_GD,       R_METAG_TLS_GD },
+    { BFD_RELOC_METAG_TLS_LDM,      R_METAG_TLS_LDM },
     { BFD_RELOC_METAG_TLS_LDO_HI16,  R_METAG_TLS_LDO_HI16 },
     { BFD_RELOC_METAG_TLS_LDO_LO16,  R_METAG_TLS_LDO_LO16 },
     { BFD_RELOC_METAG_TLS_LDO_HI16,  R_METAG_TLS_LDO_HI16 },
     { BFD_RELOC_METAG_TLS_LDO_LO16,  R_METAG_TLS_LDO_LO16 },
-    { BFD_RELOC_METAG_TLS_LDO,       R_METAG_TLS_LDO },
-    { BFD_RELOC_METAG_TLS_IE,        R_METAG_TLS_IE },
+    { BFD_RELOC_METAG_TLS_LDO,      R_METAG_TLS_LDO },
+    { BFD_RELOC_METAG_TLS_IE,       R_METAG_TLS_IE },
     { BFD_RELOC_METAG_TLS_IENONPIC,  R_METAG_TLS_IENONPIC },
     { BFD_RELOC_METAG_TLS_IENONPIC_HI16, R_METAG_TLS_IENONPIC_HI16 },
     { BFD_RELOC_METAG_TLS_IENONPIC_LO16, R_METAG_TLS_IENONPIC_LO16 },
     { BFD_RELOC_METAG_TLS_TPOFF,     R_METAG_TLS_TPOFF },
     { BFD_RELOC_METAG_TLS_DTPMOD,    R_METAG_TLS_DTPMOD },
     { BFD_RELOC_METAG_TLS_DTPOFF,    R_METAG_TLS_DTPOFF },
     { BFD_RELOC_METAG_TLS_IENONPIC,  R_METAG_TLS_IENONPIC },
     { BFD_RELOC_METAG_TLS_IENONPIC_HI16, R_METAG_TLS_IENONPIC_HI16 },
     { BFD_RELOC_METAG_TLS_IENONPIC_LO16, R_METAG_TLS_IENONPIC_LO16 },
     { BFD_RELOC_METAG_TLS_TPOFF,     R_METAG_TLS_TPOFF },
     { BFD_RELOC_METAG_TLS_DTPMOD,    R_METAG_TLS_DTPMOD },
     { BFD_RELOC_METAG_TLS_DTPOFF,    R_METAG_TLS_DTPOFF },
-    { BFD_RELOC_METAG_TLS_LE,        R_METAG_TLS_LE },
+    { BFD_RELOC_METAG_TLS_LE,       R_METAG_TLS_LE },
     { BFD_RELOC_METAG_TLS_LE_HI16,   R_METAG_TLS_LE_HI16 },
     { BFD_RELOC_METAG_TLS_LE_LO16,   R_METAG_TLS_LE_LO16 },
   };
     { BFD_RELOC_METAG_TLS_LE_HI16,   R_METAG_TLS_LE_HI16 },
     { BFD_RELOC_METAG_TLS_LE_LO16,   R_METAG_TLS_LE_LO16 },
   };
@@ -864,8 +864,8 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
                         elf_hash_table (info)->tls_sec->alignment_power));
 }
 
                         elf_hash_table (info)->tls_sec->alignment_power));
 }
 
-static void
-metag_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+metag_info_to_howto_rela (bfd *abfd,
                          arelent *cache_ptr,
                          Elf_Internal_Rela *dst)
 {
                          arelent *cache_ptr,
                          Elf_Internal_Rela *dst)
 {
@@ -875,10 +875,13 @@ metag_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_METAG_MAX)
     {
       /* xgettext:c-format */
   if (r_type >= (unsigned int) R_METAG_MAX)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid METAG 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_metag_howto_table [r_type];
     }
   cache_ptr->howto = & elf_metag_howto_table [r_type];
+  return TRUE;
 }
 
 static reloc_howto_type *
 }
 
 static reloc_howto_type *
@@ -1180,7 +1183,7 @@ metag_add_stub (const char *stub_name,
   if (hsh == NULL)
     {
       /* xgettext:c-format */
   if (hsh == NULL)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: cannot create stub entry %s"),
+      _bfd_error_handler (_("%pB: cannot create stub entry %s"),
                          section->owner, stub_name);
       return NULL;
     }
                          section->owner, stub_name);
       return NULL;
     }
@@ -1393,7 +1396,7 @@ metag_final_link_relocate (reloc_howto_type *howto,
                                              rel, relend, howto, contents) \
   {                                                                    \
     _bfd_clear_contents (howto, input_bfd, input_section,              \
                                              rel, relend, howto, contents) \
   {                                                                    \
     _bfd_clear_contents (howto, input_bfd, input_section,              \
-                        contents + rel->r_offset);                     \
+                        contents, rel->r_offset);                      \
                                                                        \
     if (bfd_link_relocatable (info)                                    \
        && (input_section->flags & SEC_DEBUGGING))                      \
                                                                        \
     if (bfd_link_relocatable (info)                                    \
        && (input_section->flags & SEC_DEBUGGING))                      \
@@ -1516,7 +1519,7 @@ elf_metag_relocate_section (bfd *output_bfd,
 
          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 = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+         name = name == NULL ? bfd_section_name (sec) : name;
        }
       else
        {
        }
       else
        {
@@ -1857,10 +1860,10 @@ elf_metag_relocate_section (bfd *output_bfd,
                        /* We don't support changing the TLS model.  */
                        /* PR 20675 */
                        if (bfd_link_pic (info))
                        /* We don't support changing the TLS model.  */
                        /* PR 20675 */
                        if (bfd_link_pic (info))
-                         _bfd_error_handler (_("%B(%A): multiple TLS models are not supported"),
+                         _bfd_error_handler (_("%pB(%pA): multiple TLS models are not supported"),
                                              input_bfd, input_section);
                        else
                                              input_bfd, input_section);
                        else
-                         _bfd_error_handler (_("%B(%A): shared library symbol %s encountered whilst performing a static link"),
+                         _bfd_error_handler (_("%pB(%pA): shared library symbol %s encountered whilst performing a static link"),
                                              input_bfd, input_section, name);
                        return FALSE;
                      }
                                              input_bfd, input_section, name);
                        return FALSE;
                      }
@@ -1913,8 +1916,10 @@ elf_metag_relocate_section (bfd *output_bfd,
            {
              _bfd_error_handler
                /* xgettext:c-format */
            {
              _bfd_error_handler
                /* xgettext:c-format */
-               (_("%B(%A+%#Lx): %s relocation not permitted in shared object"),
-                input_bfd, input_section, rel->r_offset, howto->name);
+               (_("%pB(%pA+%#" PRIx64 "): "
+                  "%s relocation not permitted in shared object"),
+                input_bfd, input_section, (uint64_t) rel->r_offset,
+                howto->name);
              return FALSE;
            }
          else
              return FALSE;
            }
          else
@@ -2249,7 +2254,7 @@ elf_metag_check_relocs (bfd *abfd,
                name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
              _bfd_error_handler
                /* xgettext:c-format */
                name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
              _bfd_error_handler
                /* xgettext:c-format */
-               (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
+               (_("%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
                 abfd, elf_metag_howto_table[r_type].name, name);
              bfd_set_error (bfd_error_bad_value);
              return FALSE;
                 abfd, elf_metag_howto_table[r_type].name, name);
              bfd_set_error (bfd_error_bad_value);
              return FALSE;
@@ -2369,9 +2374,7 @@ elf_metag_check_relocs (bfd *abfd,
          /* This relocation describes which C++ vtable entries are actually
             used.  Record for later use during GC.  */
        case R_METAG_GNU_VTENTRY:
          /* This relocation describes which C++ vtable entries are actually
             used.  Record for later use during GC.  */
        case R_METAG_GNU_VTENTRY:
-         BFD_ASSERT (hh != NULL);
-         if (hh != NULL
-             && !bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rel->r_addend))
+         if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rel->r_addend))
            return FALSE;
          break;
        }
            return FALSE;
          break;
        }
@@ -2789,7 +2792,7 @@ maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
 
       info->flags |= DF_TEXTREL;
       info->callbacks->minfo
 
       info->flags |= DF_TEXTREL;
       info->callbacks->minfo
-       (_("%B: dynamic relocation against `%T' in read-only section `%A'\n"),
+       (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
         sec->owner, h->root.root.string, sec);
 
       /* Not an error, just cut short the traversal.  */
         sec->owner, h->root.root.string, sec);
 
       /* Not an error, just cut short the traversal.  */
@@ -2931,7 +2934,7 @@ elf_metag_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
          /* Strip this section if we don't need it; see the
             comment below.  */
        }
          /* Strip this section if we don't need it; see the
             comment below.  */
        }
-      else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
+      else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
        {
          if (s->size != 0 && s != htab->etab.srelplt)
            relocs = TRUE;
        {
          if (s->size != 0 && s != htab->etab.srelplt)
            relocs = TRUE;
@@ -3234,14 +3237,17 @@ elf_metag_finish_dynamic_symbol (bfd *output_bfd,
 
 /* Set the Meta ELF ABI version.  */
 
 
 /* Set the Meta ELF ABI version.  */
 
-static void
-elf_metag_post_process_headers (bfd * abfd, struct bfd_link_info * link_info)
+static bfd_boolean
+elf_metag_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
 {
   Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form.  */
 
 {
   Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form.  */
 
-  _bfd_elf_post_process_headers (abfd, link_info);
+  if (!_bfd_elf_init_file_header (abfd, link_info))
+    return FALSE;
+
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_ABIVERSION] = METAG_ELF_ABI_VERSION;
   i_ehdrp = elf_elfheader (abfd);
   i_ehdrp->e_ident[EI_ABIVERSION] = METAG_ELF_ABI_VERSION;
+  return TRUE;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -4141,8 +4147,8 @@ elf_metag_plt_sym_val (bfd_vma i, const asection *plt,
 #define elf_backend_finish_dynamic_sections    elf_metag_finish_dynamic_sections
 #define elf_backend_size_dynamic_sections      elf_metag_size_dynamic_sections
 #define elf_backend_omit_section_dynsym \
 #define elf_backend_finish_dynamic_sections    elf_metag_finish_dynamic_sections
 #define elf_backend_size_dynamic_sections      elf_metag_size_dynamic_sections
 #define elf_backend_omit_section_dynsym \
-  ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
-#define elf_backend_post_process_headers       elf_metag_post_process_headers
+       _bfd_elf_omit_section_dynsym_all
+#define elf_backend_init_file_header           elf_metag_init_file_header
 #define elf_backend_reloc_type_class           elf_metag_reloc_type_class
 #define elf_backend_copy_indirect_symbol       elf_metag_copy_indirect_symbol
 #define elf_backend_plt_sym_val                elf_metag_plt_sym_val
 #define elf_backend_reloc_type_class           elf_metag_reloc_type_class
 #define elf_backend_copy_indirect_symbol       elf_metag_copy_indirect_symbol
 #define elf_backend_plt_sym_val                elf_metag_plt_sym_val
This page took 0.030691 seconds and 4 git commands to generate.