* Makefile.am (elf32-h8300.lo): New target.
authorJoern Rennecke <joern.rennecke@embecosm.com>
Wed, 29 Aug 2001 01:33:52 +0000 (01:33 +0000)
committerJoern Rennecke <joern.rennecke@embecosm.com>
Wed, 29 Aug 2001 01:33:52 +0000 (01:33 +0000)
* 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.

12 files changed:
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/bfd-in2.h
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/elf.c
bfd/elf32-h8300.c [new file with mode: 0644]
bfd/libbfd.h
bfd/reloc.c
bfd/targets.c

index a08ac80a94c074103fae67af78b28b2ac3e98fa7..d49e881f811d7c9bfe8029b49bfc5cbe1051dbd5 100644 (file)
@@ -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.
index cbd5d8bf2ff2514b9cb2d2a7dc2c626725ec8520..b224d6dd0201a774ae63b54732a4fbc1f75e0592 100644 (file)
@@ -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 \
index 226caffe8fa6f377208450542a0ad2b4470658e7..1320e8c5772be8f8834591ef5961573753065702 100644 (file)
@@ -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 \
index 63298c37ecd8e9a39ab2896b183069aefabea251..8a4c33432e927b0af71ef2a5da0ad522731ea281 100644 (file)
@@ -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 *
index b00c06a2e48940402f943c187404e9275635366e..fd7fb0b4ea628334d25971d386cbd5d22b905db9 100644 (file)
@@ -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
index b76f700a0384899ef98b2b07005f732a3f0b8f5a..e39b1b29f054bb76a6bc88b995da233181be16e1 100755 (executable)
@@ -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.
index 57f4b41f343d130ff596d61d6b32d0dc9679c03f..ca5b184318122d6c36c582dfdf68c5a0a06417d7 100644 (file)
@@ -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" ;;
index 4e6d6ef0299fb750220df1e3ae0117eb901e8626..f03e3a1e73cbad9faf9f43d6549f849c5cf261e5 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -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 (file)
index 0000000..c2474dd
--- /dev/null
@@ -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"
index 1755ba9da8888f8ca919fe2baea772f644b6507a..5ddd02c78ea50d6ad71639356596efe74200830c 100644 (file)
@@ -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
index de3bbf4ae4879164dda70acfad18b75f214851a9..ab9f4d18e5ad6029717cfd342f9891bbf87e1d36 100644 (file)
@@ -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
index 0105ef64bf64a44462e18244cb36269a95a8866a..5201ee993d355d146dce1454c5c0edd6968ee2ee 100644 (file)
@@ -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;