/* Renesas RX specific support for 32-bit ELF.
- Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Copyright (C) 2008-2015 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
static reloc_howto_type rx_elf_howto_table [] =
{
- RXREL (NONE, 0, 0, 0, dont, FALSE),
+ RXREL (NONE, 3, 0, 0, dont, FALSE),
RXREL (DIR32, 2, 32, 0, signed, FALSE),
RXREL (DIR24S, 2, 24, 0, signed, FALSE),
RXREL (DIR16, 1, 16, 0, dont, FALSE),
if (code == BFD_RELOC_RX_32_OP)
return rx_elf_howto_table + R_RX_DIR32;
- for (i = ARRAY_SIZE (rx_reloc_map); --i;)
+ for (i = ARRAY_SIZE (rx_reloc_map); i--;)
if (rx_reloc_map [i].bfd_reloc_val == code)
return rx_elf_howto_table + rx_reloc_map[i].rx_reloc_val;
r_type = ELF32_R_TYPE (dst->r_info);
if (r_type >= (unsigned int) R_RX_max)
{
- _bfd_error_handler (_("%A: invalid RX reloc number: %d"), abfd, r_type);
+ _bfd_error_handler (_("%B: invalid RX reloc number: %d"), abfd, r_type);
r_type = 0;
}
cache_ptr->howto = rx_elf_howto_table + r_type;
irel = elf_section_data (sec)->relocs;
irelend = irel + sec->reloc_count;
+ if (irel == NULL && sec->reloc_count > 0)
+ {
+ /* If the relocs have not been kept in the section data
+ structure (because -no-keep-memory was used) then
+ reread them now. */
+ irel = (_bfd_elf_link_read_relocs
+ (abfd, sec, NULL, (Elf_Internal_Rela *) NULL, FALSE));
+ if (irel == NULL)
+ /* FIXME: Return FALSE instead ? */
+ irelend = irel;
+ }
+
/* Actually delete the bytes. */
memmove (contents + addr, contents + addr + count,
(size_t) (toaddr - addr - count));
memset (contents + toaddr - count, 0x03, count);
/* Adjust all the relocs. */
- for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
+ for (; irel < irelend; irel++)
{
/* Get the new reloc address. */
if (irel->r_offset > addr