x86: Properly set IBT and SHSTK properties for -z ibt/shstk
[deliverable/binutils-gdb.git] / bfd / elf32-v850.c
index 99c060afc9a713b3d2929e6518b8bcdca3ff5467..0de095d3aa95389c498bf5f6345dc4ae2256436b 100644 (file)
@@ -1,5 +1,5 @@
 /* V850-specific support for 32-bit ELF
-   Copyright (C) 1996-2018 Free Software Foundation, Inc.
+   Copyright (C) 1996-2019 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -61,7 +61,7 @@ v850_elf_check_relocs (bfd *abfd,
     return TRUE;
 
 #ifdef DEBUG
-  _bfd_error_handler ("v850_elf_check_relocs called for section %A in %B",
+  _bfd_error_handler ("v850_elf_check_relocs called for section %pA in %pB",
                      sec, abfd);
 #endif
 
@@ -150,19 +150,19 @@ v850_elf_check_relocs (bfd *abfd,
                  switch (h->other & V850_OTHER_MASK)
                    {
                    default:
-                     msg = _("Variable `%s' cannot occupy in multiple small data regions");
+                     msg = _("variable `%s' cannot occupy in multiple small data regions");
                      break;
                    case V850_OTHER_SDA | V850_OTHER_ZDA | V850_OTHER_TDA:
-                     msg = _("Variable `%s' can only be in one of the small, zero, and tiny data regions");
+                     msg = _("variable `%s' can only be in one of the small, zero, and tiny data regions");
                      break;
                    case V850_OTHER_SDA | V850_OTHER_ZDA:
-                     msg = _("Variable `%s' cannot be in both small and zero data regions simultaneously");
+                     msg = _("variable `%s' cannot be in both small and zero data regions simultaneously");
                      break;
                    case V850_OTHER_SDA | V850_OTHER_TDA:
-                     msg = _("Variable `%s' cannot be in both small and tiny data regions simultaneously");
+                     msg = _("variable `%s' cannot be in both small and tiny data regions simultaneously");
                      break;
                    case V850_OTHER_ZDA | V850_OTHER_TDA:
-                     msg = _("Variable `%s' cannot be in both zero and tiny data regions simultaneously");
+                     msg = _("variable `%s' cannot be in both zero and tiny data regions simultaneously");
                      break;
                    }
 
@@ -460,7 +460,7 @@ v850_elf_perform_lo16_relocation (bfd *abfd, unsigned long *insn,
        }
       else
        {
-         _bfd_error_handler (_("FAILED to find previous HI16 reloc"));
+         _bfd_error_handler (_("failed to find previous HI16 reloc"));
          return FALSE;
        }
     }
@@ -490,7 +490,8 @@ v850_elf_perform_relocation (bfd *abfd,
     {
     default:
 #ifdef DEBUG
-      fprintf (stderr, "%B: reloc number %d not recognised\n", abfd, r_type);
+      _bfd_error_handler ("%pB: unsupported relocation type %#x",
+                         abfd, r_type);
 #endif
       return bfd_reloc_notsupported;
 
@@ -1884,8 +1885,8 @@ v850_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 \f
 /* Set the howto pointer for an V850 ELF reloc.  */
 
-static void
-v850_elf_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+v850_elf_info_to_howto_rel (bfd *abfd,
                            arelent *cache_ptr,
                            Elf_Internal_Rela *dst)
 {
@@ -1895,16 +1896,19 @@ v850_elf_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_V850_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid V850 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 = &v850_elf_howto_table[r_type];
+  return TRUE;
 }
 
 /* Set the howto pointer for a V850 ELF reloc (type RELA).  */
 
-static void
-v850_elf_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+v850_elf_info_to_howto_rela (bfd *abfd,
                             arelent * cache_ptr,
                             Elf_Internal_Rela *dst)
 {
@@ -1914,10 +1918,13 @@ v850_elf_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
   if (r_type >= (unsigned int) R_V850_max)
     {
       /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid V850 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 = &v850_elf_howto_table[r_type];
+  return TRUE;
 }
 \f
 static bfd_boolean
@@ -2145,7 +2152,8 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
 
     default:
 #ifdef DEBUG
-      fprintf (stderr, "%B: reloc number %d not recognised\n", input_bfd, r_type);
+      _bfd_error_handler ("%pB: unsupported relocation type %#x",
+              input_bfd, r_type);
 #endif
       return bfd_reloc_notsupported;
     }
@@ -2521,7 +2529,7 @@ v850_elf_merge_notes (bfd * ibfd, bfd *obfd)
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("error: %B needs 8-byte alignment but %B is set for 4-byte alignment"),
+                   (_("error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment"),
                                      ibfd, obfd);
                  result = FALSE;
                }
@@ -2537,8 +2545,8 @@ v850_elf_merge_notes (bfd * ibfd, bfd *obfd)
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("error: %B uses 64-bit doubles but "
-                      "%B uses 32-bit doubles"), ibfd, obfd);
+                   (_("error: %pB uses 64-bit doubles but "
+                      "%pB uses 32-bit doubles"), ibfd, obfd);
                  result = FALSE;
                }
              else
@@ -2552,7 +2560,7 @@ v850_elf_merge_notes (bfd * ibfd, bfd *obfd)
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("error: %B uses FPU-3.0 but %B only supports FPU-2.0"),
+                   (_("error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"),
                     ibfd, obfd);
                  result = FALSE;
                }
@@ -2809,7 +2817,7 @@ v850_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
       if ((in_flags & EF_V800_850E3) != (out_flags & EF_V800_850E3))
        {
          _bfd_error_handler
-           (_("%B: Architecture mismatch with previous modules"), ibfd);
+           (_("%pB: architecture mismatch with previous modules"), ibfd);
          elf_elfheader (obfd)->e_flags |= EF_V800_850E3;
        }
 
@@ -2865,7 +2873,7 @@ v850_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
        }
 
       _bfd_error_handler
-       (_("%B: Architecture mismatch with previous modules"), ibfd);
+       (_("%pB: architecture mismatch with previous modules"), ibfd);
     }
 
   return result;
@@ -3598,9 +3606,9 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGCALL points to "
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
                       "unrecognized insns"),
-                    abfd, irel->r_offset);
+                    abfd, (uint64_t) irel->r_offset, "R_V850_LONGCALL");
                  continue;
                }
 
@@ -3608,10 +3616,11 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGCALL points to "
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
                       "unrecognized insn %#x"),
                     abfd,
-                    irel->r_offset + no_match,
+                    (uint64_t) (irel->r_offset + no_match),
+                    "R_V850_LONGCALL",
                     insn[no_match]);
                  continue;
                }
@@ -3653,9 +3662,9 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGCALL points to "
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
                       "unrecognized reloc"),
-                    abfd, irel->r_offset);
+                    abfd, (uint64_t) irel->r_offset, "R_V850_LONGCALL");
 
                  continue;
                }
@@ -3693,10 +3702,10 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGCALL points to "
-                      "unrecognized reloc %#Lx"),
-                    abfd, irel->r_offset,
-                    irelcall->r_offset);
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
+                      "unrecognized reloc %#" PRIx64),
+                    abfd, (uint64_t) irel->r_offset, "R_V850_LONGCALL",
+                    (uint64_t) irelcall->r_offset);
                  continue;
                }
 
@@ -3836,9 +3845,9 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGJUMP points to "
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
                       "unrecognized insns"),
-                    abfd, irel->r_offset);
+                    abfd, (uint64_t) irel->r_offset, "R_V850_LONGJUMP");
                  continue;
                }
 
@@ -3846,10 +3855,11 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGJUMP points to "
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
                       "unrecognized insn %#x"),
                     abfd,
-                    irel->r_offset + no_match,
+                    (uint64_t) (irel->r_offset + no_match),
+                    "R_V850_LONGJUMP",
                     insn[no_match]);
                  continue;
                }
@@ -3880,9 +3890,9 @@ v850_elf_relax_section (bfd *abfd,
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%B: %#Lx: warning: R_V850_LONGJUMP points to "
+                   (_("%pB: %#" PRIx64 ": warning: %s points to "
                       "unrecognized reloc"),
-                    abfd, irel->r_offset);
+                    abfd, (uint64_t) irel->r_offset, "R_V850_LONGJUMP");
                  continue;
                }
 
@@ -4241,25 +4251,30 @@ v800_elf_reloc_name_lookup (bfd * abfd, const char * r_name)
 
 /* Set the howto pointer in CACHE_PTR for a V800 ELF reloc.  */
 
-static void
+static bfd_boolean
 v800_elf_info_to_howto (bfd *              abfd,
                        arelent *           cache_ptr,
                        Elf_Internal_Rela * dst)
 {
   unsigned int r_type = ELF32_R_TYPE (dst->r_info);
 
-  BFD_ASSERT (bfd_get_arch (abfd) == bfd_arch_v850_rh850);
-
-  BFD_ASSERT (r_type < (unsigned int) R_V800_max);
-
   if (r_type == R_V800_NONE)
     r_type = R_V810_NONE;
 
-  BFD_ASSERT (r_type >= (unsigned int) R_V810_NONE);
-  r_type -= R_V810_NONE;
-  BFD_ASSERT (r_type < ARRAY_SIZE (v800_elf_howto_table));
+  if (bfd_get_arch (abfd) != bfd_arch_v850_rh850
+      || r_type >= (unsigned int) R_V800_max
+      || r_type < (unsigned int) R_V810_NONE
+      || (r_type - R_V810_NONE) >= ARRAY_SIZE (v800_elf_howto_table))
+    {
+      /* 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 = v800_elf_howto_table + r_type;
+  cache_ptr->howto = v800_elf_howto_table + (r_type - R_V810_NONE);
+  return TRUE;
 }
 \f
 #undef  TARGET_LITTLE_SYM
This page took 0.03237 seconds and 4 git commands to generate.