mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
* 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.
This commit is contained in:
parent
e87593493c
commit
e01b0e6981
@ -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.
|
||||
|
@ -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 \
|
||||
|
@ -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 \
|
||||
|
@ -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 *
|
||||
|
@ -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
|
||||
|
27
bfd/configure
vendored
27
bfd/configure
vendored
@ -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.
|
||||
|
@ -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" ;;
|
||||
|
18
bfd/elf.c
18
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;
|
||||
}
|
||||
|
250
bfd/elf32-h8300.c
Normal file
250
bfd/elf32-h8300.c
Normal file
@ -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"
|
@ -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
|
||||
|
13
bfd/reloc.c
13
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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user