This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
-#include "bfd.h"
#include "sysdep.h"
+#include "bfd.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REL4", /* name */
FALSE, /* partial_inplace */
- 0xf, /* src_mask */
+ 0x0, /* src_mask */
0xf, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REL8", /* name */
FALSE, /* partial_inplace */
- 0xff, /* src_mask */
+ 0x0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REL8_CMP", /* name */
FALSE, /* partial_inplace */
- 0xff, /* src_mask */
+ 0x0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REL16", /* name */
FALSE, /* partial_inplace */
- 0xffff, /* src_mask */
+ 0x0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REL24", /* name */
FALSE, /* partial_inplace */
- 0xffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REL32", /* name */
FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REGREL12", /* name */
FALSE, /* partial_inplace */
- 0xfff, /* src_mask */
+ 0x0, /* src_mask */
0xfff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REGREL22", /* name */
FALSE, /* partial_inplace */
- 0x3fffff, /* src_mask */
+ 0x0, /* src_mask */
0x3fffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REGREL28", /* name */
FALSE, /* partial_inplace */
- 0xfffffff, /* src_mask */
+ 0x0, /* src_mask */
0xfffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_REGREL32", /* name */
FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_ABS16", /* name */
FALSE, /* partial_inplace */
- 0xffff, /* src_mask */
+ 0x0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_ABS32", /* name */
FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_NUM8", /* name */
FALSE, /* partial_inplace */
- 0xff, /* src_mask */
+ 0x0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_NUM16", /* name */
FALSE, /* partial_inplace */
- 0xffff, /* src_mask */
+ 0x0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_NUM32", /* name */
FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_IMM16", /* name */
FALSE, /* partial_inplace */
- 0xffff, /* src_mask */
+ 0x0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_IMM32", /* name */
FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_SWITCH8", /* name */
FALSE, /* partial_inplace */
- 0xff, /* src_mask */
+ 0x0, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_SWITCH16", /* name */
FALSE, /* partial_inplace */
- 0xffff, /* src_mask */
+ 0x0, /* src_mask */
0xffff, /* dst_mask */
TRUE), /* pcrel_offset */
bfd_elf_generic_reloc, /* special_function */
"R_CRX_SWITCH32", /* name */
FALSE, /* partial_inplace */
- 0xffffffff, /* src_mask */
+ 0x0, /* src_mask */
0xffffffff, /* dst_mask */
TRUE) /* pcrel_offset */
};
return 0;
}
+static reloc_howto_type *
+elf_crx_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+ const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < sizeof (crx_elf_howto_table) / sizeof (crx_elf_howto_table[0]);
+ i++)
+ if (crx_elf_howto_table[i].name != NULL
+ && strcasecmp (crx_elf_howto_table[i].name, r_name) == 0)
+ return &crx_elf_howto_table[i];
+
+ return NULL;
+}
+
/* Retrieve a howto ptr using an internal relocation entry. */
static void
#define elf_symbol_leading_char '_'
#define bfd_elf32_bfd_reloc_type_lookup elf_crx_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+ elf_crx_reloc_name_lookup
#define elf_info_to_howto elf_crx_info_to_howto
#define elf_info_to_howto_rel 0
#define elf_backend_relocate_section elf32_crx_relocate_section