This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

h8300-elf: bfd patches checked in


Approved by Jeffery Law.
Final pre-checkin test: h8300-coff gas & gcc build, check-gas.

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.

[Makefile.in, bfd-in2.h, libbfd.h and configure diffs omitted]

Index: Makefile.am
===================================================================
RCS file: /cvs/cvsfiles/devo/bfd/Makefile.am,v
retrieving revision 1.104
diff -p -r1.104 Makefile.am
*** Makefile.am	2001/08/11 21:58:35	1.104
--- Makefile.am	2001/08/28 22:41:52
*************** elf32-fr30.lo: elf32-fr30.c $(INCDIR)/fi
*** 1284,1289 ****
--- 1284,1293 ----
  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: config.bfd
===================================================================
RCS file: /cvs/cvsfiles/devo/bfd/config.bfd,v
retrieving revision 1.292
diff -p -r1.292 config.bfd
*** config.bfd	2001/08/11 21:58:35	1.292
--- config.bfd	2001/08/28 22:41:55
*************** case "${targ}" in
*** 344,349 ****
--- 344,354 ----
      ;;
  
  
+   h8300*-*-elf)
+     targ_defvec=bfd_elf32_h8300_vec
+     targ_underscore=yes
+     ;;
+ 
    h8300*-*-*)
      targ_defvec=h8300coff_vec
      targ_underscore=yes
Index: configure.in
===================================================================
RCS file: /cvs/cvsfiles/devo/bfd/configure.in,v
retrieving revision 1.392
diff -p -r1.392 configure.in
*** configure.in	2001/08/11 21:58:35	1.392
--- configure.in	2001/08/28 22:41:57
*************** do
*** 540,545 ****
--- 540,546 ----
      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: elf.c
===================================================================
RCS file: /cvs/cvsfiles/devo/bfd/elf.c,v
retrieving revision 1.284
diff -p -r1.284 elf.c
*** elf.c	2001/08/11 21:58:35	1.284
--- elf.c	2001/08/28 22:41:59
*************** prep_headers (abfd)
*** 3501,3506 ****
--- 3501,3524 ----
        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;
      }
Index: reloc.c
===================================================================
RCS file: /cvs/cvsfiles/devo/bfd/reloc.c,v
retrieving revision 1.280
diff -p -r1.280 reloc.c
*** reloc.c	2001/08/13 10:10:41	1.280
--- reloc.c	2001/08/28 22:42:01
*************** ENUMX
*** 3568,3573 ****
--- 3568,3586 ----
  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: targets.c
===================================================================
RCS file: /cvs/cvsfiles/devo/bfd/targets.c,v
retrieving revision 1.324
diff -p -r1.324 targets.c
*** targets.c	2001/06/16 15:14:43	1.324
--- targets.c	2001/08/28 22:42:02
*************** extern const bfd_target bfd_elf32_cris_v
*** 524,529 ****
--- 524,530 ----
  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;
*** /dev/null	Thu Aug 24 10:00:32 2000
--- elf32-h8300.c	Sat Aug 18 00:15:06 2001
***************
*** 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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]