/* V850-specific support for 32-bit ELF
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ Copyright (C) 1996-2019 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
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
/* This relocation describes which C++ vtable entries
are actually used. Record for later use during GC. */
case R_V850_GNU_VTENTRY:
- BFD_ASSERT (h != NULL);
- if (h != NULL
- && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+ if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
return FALSE;
break;
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;
}
}
else
{
- _bfd_error_handler (_("FAILED to find previous HI16 reloc"));
+ _bfd_error_handler (_("failed to find previous HI16 reloc"));
return FALSE;
}
}
{
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;
\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)
{
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)
{
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
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;
}
{
_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;
}
{
_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
{
_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;
}
/* Store the machine number in the flags field. */
-static void
-v850_elf_final_write_processing (bfd *abfd,
- bfd_boolean linker ATTRIBUTE_UNUSED)
+static bfd_boolean
+v850_elf_final_write_processing (bfd *abfd)
{
unsigned long val;
default:
break;
}
+ return _bfd_elf_final_write_processing (abfd);
}
/* Function to keep V850 specific file flags. */
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;
}
}
_bfd_error_handler
- (_("%B: Architecture mismatch with previous modules"), ibfd);
+ (_("%pB: architecture mismatch with previous modules"), ibfd);
}
return result;
{
_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;
}
{
_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;
}
{
_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;
}
{
_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;
}
{
_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;
}
{
_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;
}
{
_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;
}
/* 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