diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 2001-08-29 01:33:52 +0000 |
---|---|---|
committer | Joern Rennecke <joern.rennecke@embecosm.com> | 2001-08-29 01:33:52 +0000 |
commit | e01b0e698158c1fae4be62ca44afcb27b0a2dcd2 (patch) | |
tree | 5f7031d378d3a3855d8641d61530156861831459 /bfd | |
parent | e87593493c718263a9874991fd6292e8828beeb8 (diff) | |
download | gdb-e01b0e698158c1fae4be62ca44afcb27b0a2dcd2.zip gdb-e01b0e698158c1fae4be62ca44afcb27b0a2dcd2.tar.gz gdb-e01b0e698158c1fae4be62ca44afcb27b0a2dcd2.tar.bz2 |
* Makefile.am (elf32-h8300.lo): New target.
* config.bfd (h8300*-*-elf): New case.
* configure.in (bfd_elf32_h8300_vec): New case.
* elf.c (prep_headers): Add case for bfd_arch_h8300.
* reloc.c (BFD_RELOC_H8_DIR16A8): New relocation.
(BFD_RELOC_H8_DIR16R8, BFD_RELOC_H8_DIR24A8): Likewise.
(BFD_RELOC_H8_DIR24R8, BFD_RELOC_H8_DIR32A16): Likewise.
* targets.c (bfd_target bfd_elf32_h8300_vec): New extern declaration.
* elf32-h8300.c: New file.
* Makefile.in, bfd-in2.h, libbfd.h, configure: Regenerated.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 13 | ||||
-rw-r--r-- | bfd/Makefile.am | 4 | ||||
-rw-r--r-- | bfd/Makefile.in | 6 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 7 | ||||
-rw-r--r-- | bfd/config.bfd | 5 | ||||
-rwxr-xr-x | bfd/configure | 27 | ||||
-rw-r--r-- | bfd/configure.in | 1 | ||||
-rw-r--r-- | bfd/elf.c | 18 | ||||
-rw-r--r-- | bfd/elf32-h8300.c | 250 | ||||
-rw-r--r-- | bfd/libbfd.h | 5 | ||||
-rw-r--r-- | bfd/reloc.c | 13 | ||||
-rw-r--r-- | bfd/targets.c | 1 |
12 files changed, 336 insertions, 14 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a08ac80..d49e881 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,16 @@ +Wed Aug 29 02:27:36 2001 J"orn Rennecke <amylaar@redhat.com> + + * Makefile.am (elf32-h8300.lo): New target. + * config.bfd (h8300*-*-elf): New case. + * configure.in (bfd_elf32_h8300_vec): New case. + * elf.c (prep_headers): Add case for bfd_arch_h8300. + * reloc.c (BFD_RELOC_H8_DIR16A8): New relocation. + (BFD_RELOC_H8_DIR16R8, BFD_RELOC_H8_DIR24A8): Likewise. + (BFD_RELOC_H8_DIR24R8, BFD_RELOC_H8_DIR32A16): Likewise. + * targets.c (bfd_target bfd_elf32_h8300_vec): New extern declaration. + * elf32-h8300.c: New file. + * Makefile.in, bfd-in2.h, libbfd.h, configure: Regenerated. + 2001-08-28 Nick Clifton <nickc@cambridge.redhat.com> * sparclynx.c: Add missing prototypes. diff --git a/bfd/Makefile.am b/bfd/Makefile.am index cbd5d8b..b224d6d 100644 --- a/bfd/Makefile.am +++ b/bfd/Makefile.am @@ -1011,6 +1011,10 @@ elf32-fr30.lo: elf32-fr30.c $(INCDIR)/filenames.h elf-bfd.h \ elf32-gen.lo: elf32-gen.c $(INCDIR)/filenames.h elf-bfd.h \ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ $(INCDIR)/bfdlink.h elf32-target.h +elf32-h8300.lo: elf32-h8300.c $(INCDIR)/filenames.h elf-bfd.h \ + $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ + $(INCDIR)/bfdlink.h $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h \ + elf32-target.h elf32-hppa.lo: elf32-hppa.c $(INCDIR)/filenames.h elf-bfd.h \ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ $(INCDIR)/bfdlink.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h \ diff --git a/bfd/Makefile.in b/bfd/Makefile.in index 226caff..1320e8c 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -711,7 +711,7 @@ configure.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) OBJECTS = $(libbfd_a_OBJECTS) $(libbfd_la_OBJECTS) @@ -1550,6 +1550,10 @@ elf32-fr30.lo: elf32-fr30.c $(INCDIR)/filenames.h elf-bfd.h \ elf32-gen.lo: elf32-gen.c $(INCDIR)/filenames.h elf-bfd.h \ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ $(INCDIR)/bfdlink.h elf32-target.h +elf32-h8300.lo: elf32-h8300.c $(INCDIR)/filenames.h elf-bfd.h \ + $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ + $(INCDIR)/bfdlink.h $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h \ + elf32-target.h elf32-hppa.lo: elf32-hppa.c $(INCDIR)/filenames.h elf-bfd.h \ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ $(INCDIR)/bfdlink.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h \ diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 63298c3..8a4c334 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -2822,6 +2822,13 @@ This is the 3 bits of a value. */ /* OpenRISC Relocations. */ BFD_RELOC_OPENRISC_ABS_26, BFD_RELOC_OPENRISC_REL_26, + +/* H8 elf Relocations. */ + BFD_RELOC_H8_DIR16A8, + BFD_RELOC_H8_DIR16R8, + BFD_RELOC_H8_DIR24A8, + BFD_RELOC_H8_DIR24R8, + BFD_RELOC_H8_DIR32A16, BFD_RELOC_UNUSED }; typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; reloc_howto_type * diff --git a/bfd/config.bfd b/bfd/config.bfd index b00c06a..fd7fb0b 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -261,6 +261,11 @@ case "${targ}" in ;; + h8300*-*-elf) + targ_defvec=bfd_elf32_h8300_vec + targ_underscore=yes + ;; + h8300*-*-*) targ_defvec=h8300coff_vec targ_underscore=yes diff --git a/bfd/configure b/bfd/configure index b76f700..e39b1b2 100755 --- a/bfd/configure +++ b/bfd/configure @@ -5952,6 +5952,7 @@ do bfd_elf32_d10v_vec) tb="$tb elf32-d10v.lo elf32.lo $elf" ;; bfd_elf32_d30v_vec) tb="$tb elf32-d30v.lo elf32.lo $elf" ;; bfd_elf32_fr30_vec) tb="$tb elf32-fr30.lo elf32.lo $elf" ;; + bfd_elf32_h8300_vec) tb="$tb elf32-h8300.lo elf32.lo $elf" ;; bfd_elf32_hppa_vec | bfd_elf32_hppa_linux_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_i370_vec) tb="$tb elf32-i370.lo elf32.lo $elf" ;; @@ -6196,17 +6197,17 @@ for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:6200: checking for $ac_hdr" >&5 +echo "configure:6201: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6205 "configure" +#line 6206 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6235,12 +6236,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6239: checking for $ac_func" >&5 +echo "configure:6240: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6244 "configure" +#line 6245 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -6263,7 +6264,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:6267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6288,7 +6289,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:6292: checking for working mmap" >&5 +echo "configure:6293: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6296,7 +6297,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <<EOF -#line 6300 "configure" +#line 6301 "configure" #include "confdefs.h" /* Thanks to Mike Haertel and Jim Avera for this test. @@ -6436,7 +6437,7 @@ main() } EOF -if { (eval echo configure:6440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:6441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -6461,12 +6462,12 @@ fi for ac_func in madvise mprotect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6465: checking for $ac_func" >&5 +echo "configure:6466: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6470 "configure" +#line 6471 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -6489,7 +6490,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:6493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6740,7 +6741,7 @@ cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_max_sed_cmds=60 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. diff --git a/bfd/configure.in b/bfd/configure.in index 57f4b41..ca5b184 100644 --- a/bfd/configure.in +++ b/bfd/configure.in @@ -525,6 +525,7 @@ do bfd_elf32_d10v_vec) tb="$tb elf32-d10v.lo elf32.lo $elf" ;; bfd_elf32_d30v_vec) tb="$tb elf32-d30v.lo elf32.lo $elf" ;; bfd_elf32_fr30_vec) tb="$tb elf32-fr30.lo elf32.lo $elf" ;; + bfd_elf32_h8300_vec) tb="$tb elf32-h8300.lo elf32.lo $elf" ;; bfd_elf32_hppa_vec | bfd_elf32_hppa_linux_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_i370_vec) tb="$tb elf32-i370.lo elf32.lo $elf" ;; @@ -3451,6 +3451,24 @@ prep_headers (abfd) i_ehdrp->e_machine = EM_OPENRISC; break; /* Also note that EM_M32, AT&T WE32100 is unknown to bfd. */ + case bfd_arch_h8300: + switch (bfd_get_mach (abfd)) + { + default: + case bfd_mach_h8300: + i_ehdrp->e_machine = EM_H8_300; + break; + case bfd_mach_h8300h: + i_ehdrp->e_machine = EM_H8_300H; + break; + case bfd_mach_h8300s: + i_ehdrp->e_machine = EM_H8S; + break; + } + break; + case bfd_arch_h8500: + i_ehdrp->e_machine = EM_H8_500; + break; default: i_ehdrp->e_machine = EM_NONE; } diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c new file mode 100644 index 0000000..c2474dd --- /dev/null +++ b/bfd/elf32-h8300.c @@ -0,0 +1,250 @@ +/* Generic support for 32-bit ELF + Copyright 1993, 1995, 1998, 1999 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" +#include "elf/h8.h" + +static reloc_howto_type *elf32_h8_reloc_type_lookup + PARAMS ((bfd *abfd, bfd_reloc_code_real_type code)); +static void elf32_h8_info_to_howto + PARAMS ((bfd *, arelent *, Elf_Internal_Rela *)); + +/* This does not include any relocation information, but should be + good enough for GDB or objdump to read the file. */ + +static reloc_howto_type h8_elf_howto_table[] = +{ +#define R_H8_NONE_X 0 + HOWTO (R_H8_NONE, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_NONE", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR32_X (R_H8_NONE_X + 1) + HOWTO (R_H8_DIR32, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR32", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR16_X (R_H8_DIR32_X + 1) + HOWTO (R_H8_DIR16, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR16", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR8_X (R_H8_DIR16_X + 1) + HOWTO (R_H8_DIR8, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR16", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0x000000ff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR16A8_X (R_H8_DIR8_X + 1) + HOWTO (R_H8_DIR16A8, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR16A8", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR16R8_X (R_H8_DIR16A8_X + 1) + HOWTO (R_H8_DIR16R8, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR16R8", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR24A8_X (R_H8_DIR16R8_X + 1) + HOWTO (R_H8_DIR24A8, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 24, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR24A8", /* name */ + true, /* partial_inplace */ + 0xff000000, /* src_mask */ + 0x00ffffff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR24R8_X (R_H8_DIR24A8_X + 1) + HOWTO (R_H8_DIR24R8, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 24, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR24R8", /* name */ + true, /* partial_inplace */ + 0xff000000, /* src_mask */ + 0x00ffffff, /* dst_mask */ + false), /* pcrel_offset */ +#define R_H8_DIR32A16_X (R_H8_DIR24R8_X + 1) + HOWTO (R_H8_DIR32A16, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + NULL, /* special_function */ + "R_H8_DIR32", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ +}; + +/* This structure is used to map BFD reloc codes to H8 ELF relocs. */ + +struct elf_reloc_map +{ + bfd_reloc_code_real_type bfd_reloc_val; + unsigned char howto_index; +}; + +/* An array mapping BFD reloc codes to SH ELF relocs. */ + +static const struct elf_reloc_map h8_reloc_map[] = +{ + { BFD_RELOC_NONE, R_H8_NONE_X }, + { BFD_RELOC_32, R_H8_DIR32_X }, + { BFD_RELOC_16, R_H8_DIR16_X }, + { BFD_RELOC_8, R_H8_DIR8_X }, + { BFD_RELOC_H8_DIR16A8, R_H8_DIR16A8_X }, + { BFD_RELOC_H8_DIR16R8, R_H8_DIR16R8_X }, + { BFD_RELOC_H8_DIR24A8, R_H8_DIR24A8_X }, + { BFD_RELOC_H8_DIR24R8, R_H8_DIR24R8_X }, + { BFD_RELOC_H8_DIR32A16, R_H8_DIR32A16_X }, +}; + +static reloc_howto_type * +elf32_h8_reloc_type_lookup (abfd, code) + bfd *abfd ATTRIBUTE_UNUSED; + bfd_reloc_code_real_type code; +{ + unsigned int i; + + for (i = 0; i < sizeof (h8_reloc_map) / sizeof (struct elf_reloc_map); i++) + { + if (h8_reloc_map[i].bfd_reloc_val == code) + return &h8_elf_howto_table[(int) h8_reloc_map[i].howto_index]; + } + return NULL; +} + +static void +elf32_h8_info_to_howto (abfd, bfd_reloc, elf_reloc) + bfd *abfd ATTRIBUTE_UNUSED; + arelent *bfd_reloc; + Elf32_Internal_Rela *elf_reloc ATTRIBUTE_UNUSED; +{ + unsigned int r; + unsigned int i; + + r = ELF32_R_TYPE (elf_reloc->r_info); + for (i = 0; i < sizeof (h8_elf_howto_table) / sizeof (reloc_howto_type); i++) + if (h8_elf_howto_table[i].type== r) + { + bfd_reloc->howto = &h8_elf_howto_table[i]; + return; + } + abort (); +} + +static void +elf32_h8_info_to_howto_rel (abfd, bfd_reloc, elf_reloc) + bfd *abfd ATTRIBUTE_UNUSED; + arelent *bfd_reloc; + Elf32_Internal_Rel *elf_reloc ATTRIBUTE_UNUSED; +{ + unsigned int r; + + abort (); + r = ELF32_R_TYPE (elf_reloc->r_info); + bfd_reloc->howto = &h8_elf_howto_table[r]; +} + +#define TARGET_BIG_SYM bfd_elf32_h8300_vec +#define TARGET_BIG_NAME "elf32-h8300" +#define ELF_ARCH bfd_arch_h8300 +#define ELF_MACHINE_CODE EM_H8_300 +#define ELF_MAXPAGESIZE 0x1 +#define bfd_elf32_bfd_reloc_type_lookup elf32_h8_reloc_type_lookup +#define elf_info_to_howto elf32_h8_info_to_howto +#define elf_info_to_howto_rel elf32_h8_info_to_howto_rel + +/* ??? when elf_backend_relocate_section is not defined, elf32-target.h + defaults to using _bfd_generic_link_hash_table_create, but + elflink.h:bfd_elf32_size_dynamic_sections uses + dynobj = elf_hash_table (info)->dynobj; + and thus requires an elf hash table. */ +#define bfd_elf32_bfd_link_hash_table_create _bfd_elf_link_hash_table_create + +#include "elf32-target.h" diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 1755ba9..5ddd02c 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1113,6 +1113,11 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_860_HIGOTOFF", "BFD_RELOC_OPENRISC_ABS_26", "BFD_RELOC_OPENRISC_REL_26", + "BFD_RELOC_H8_DIR16A8", + "BFD_RELOC_H8_DIR16R8", + "BFD_RELOC_H8_DIR24A8", + "BFD_RELOC_H8_DIR24R8", + "BFD_RELOC_H8_DIR32A16", "@@overflow: BFD_RELOC_UNUSED@@", }; #endif diff --git a/bfd/reloc.c b/bfd/reloc.c index de3bbf4..ab9f4d1 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -3188,6 +3188,19 @@ ENUMX ENUMDOC OpenRISC Relocations. +ENUM + BFD_RELOC_H8_DIR16A8 +ENUMX + BFD_RELOC_H8_DIR16R8 +ENUMX + BFD_RELOC_H8_DIR24A8 +ENUMX + BFD_RELOC_H8_DIR24R8 +ENUMX + BFD_RELOC_H8_DIR32A16 +ENUMDOC + H8 elf Relocations. + ENDSENUM BFD_RELOC_UNUSED CODE_FRAGMENT diff --git a/bfd/targets.c b/bfd/targets.c index 0105ef6..5201ee9 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -521,6 +521,7 @@ extern const bfd_target bfd_elf32_cris_vec; extern const bfd_target bfd_elf32_d10v_vec; extern const bfd_target bfd_elf32_d30v_vec; extern const bfd_target bfd_elf32_fr30_vec; +extern const bfd_target bfd_elf32_h8300_vec; extern const bfd_target bfd_elf32_hppa_linux_vec; extern const bfd_target bfd_elf32_hppa_vec; extern const bfd_target bfd_elf32_i370_vec; |