diff options
author | Jeff Law <law@redhat.com> | 1996-10-03 16:42:22 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1996-10-03 16:42:22 +0000 |
commit | ae1b99e42dbce238cd7eb5efd38672b8306f1148 (patch) | |
tree | 62cc3acea6d14f13f329d7ea5e4813255f126d27 /bfd/elf32-mn10300.c | |
parent | feede9b69925572e68d3859b2fcb610bddd2e713 (diff) | |
download | binutils-gdb-ae1b99e42dbce238cd7eb5efd38672b8306f1148.tar.gz |
Grrr. The mn10200 and mn10300 are _not_ similar enough to easily support
with a single generic configuration. So break them up into two different
configurations. See the individual ChangeLogs for additional detail.
Diffstat (limited to 'bfd/elf32-mn10300.c')
-rw-r--r-- | bfd/elf32-mn10300.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/bfd/elf32-mn10300.c b/bfd/elf32-mn10300.c new file mode 100644 index 00000000000..309fa40a215 --- /dev/null +++ b/bfd/elf32-mn10300.c @@ -0,0 +1,111 @@ +/* Matsushita 10300 specific support for 32-bit ELF + Copyright (C) 1996 Free Software Foundation, Inc. + +This file is part of BFD, the Binary File Descriptor library. + +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 +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" +#include "elf-bfd.h" + +static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup + PARAMS ((bfd *abfd, bfd_reloc_code_real_type code)); +static void mn10300_info_to_howto_rel + PARAMS ((bfd *, arelent *, Elf32_Internal_Rel *)); + +/* Try to minimize the amount of space occupied by relocation tables + on the ROM (not that the ROM won't be swamped by other ELF overhead). */ +#define USE_REL + +enum reloc_type +{ + R_MN10300_NONE = 0, + R_MN10300_MAX +}; + +static reloc_howto_type elf_mn10300_howto_table[] = +{ + /* */ + HOWTO (R_MN10300_NONE, + 0, + 2, + 16, + false, + 0, + complain_overflow_bitfield, + bfd_elf_generic_reloc, + "R_MN10300_NONE", + false, + 0, + 0, + false), +}; + +struct mn10300_reloc_map +{ + unsigned char bfd_reloc_val; + unsigned char elf_reloc_val; +}; + +static const struct mn10300_reloc_map mn10300_reloc_map[] = +{ + { BFD_RELOC_NONE, R_MN10300_NONE, }, +}; + +static reloc_howto_type * +bfd_elf32_bfd_reloc_type_lookup (abfd, code) + bfd *abfd; + bfd_reloc_code_real_type code; +{ + unsigned int i; + + for (i = 0; + i < sizeof (mn10300_reloc_map) / sizeof (struct mn10300_reloc_map); + i++) + { + if (mn10300_reloc_map[i].bfd_reloc_val == code) + return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val]; + } + + return NULL; +} + +/* Set the howto pointer for an V850 ELF reloc. */ + +static void +mn10300_info_to_howto_rel (abfd, cache_ptr, dst) + bfd *abfd; + arelent *cache_ptr; + Elf32_Internal_Rel *dst; +{ + unsigned int r_type; + + r_type = ELF32_R_TYPE (dst->r_info); + BFD_ASSERT (r_type < (unsigned int) R_MN10300_MAX); + cache_ptr->howto = &elf_mn10300_howto_table[r_type]; +} + +#define TARGET_LITTLE_SYM bfd_elf32_mn10300_vec +#define TARGET_LITTLE_NAME "elf32-mn10300" +#define ELF_ARCH bfd_arch_mn10300 +#define ELF_MACHINE_CODE EM_CYGNUS_MN10300 +#define ELF_MAXPAGESIZE 0x1000 + +#define elf_info_to_howto 0 +#define elf_info_to_howto_rel mn10300_info_to_howto_rel + +#include "elf32-target.h" |