This is the mail archive of the binutils-cvs@sourceware.org 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]
Other format: [Raw text]

[binutils-gdb] Add support for the h8300-linux target.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5518c738a47f0282d6fcc6768e1cde598e9538e0

commit 5518c738a47f0282d6fcc6768e1cde598e9538e0
Author: Yoshinori Sato <ysato@users.sourceforge.jp>
Date:   Mon Feb 23 17:04:53 2015 +0000

    Add support for the h8300-linux target.
    
    ld	* Makefile.am: (ALL_EMULATION_SOURCES): Add new emulations.
    	* Makefile.in: Regenerate.
    	* configure.tgt: Add h8300-*-linux
    	* emulparams/h8300elf_linux.sh: Add new emulation.
    	* emulparams/h8300helf_linux.sh: Likewise.
    	* emulparams/h8300self_linux.sh: Likewise.
    	* emulparams/h8300sxelf_linux.sh: Likewise.
    
    bfd	* config.bfd: Add h8300-*-linux.
    	* configure.ac: Add h8300_elf32_linux_vec.
    	* configure: Regenerate.
    	* elf32-h8300.c: Likewise.
    	* targets.c(_bfd_target_vector): Likewise.
    
    gas	* config/tc-h8300.c (line_separater_chars): Add a version for
    	h8300-linux that includes a separator.
    	(default_mach): New variable.
    	(md_main): Use it.
    	(md_longopts): Add '--march' option.
    	(md_parse_option): Parse the new option.
    	* config/tc-h8300.h (TARGET_FORMAT): Add elf32-h8300-linux.
    	* configure.tgt: Add h8300-*-linux
    	* doc/c-h8300.texi: Document --march.

Diff:
---
 bfd/ChangeLog                     |   8 +++
 bfd/config.bfd                    |   4 ++
 bfd/configure                     |   1 +
 bfd/configure.ac                  |   1 +
 bfd/elf32-h8300.c                 |   9 ++++
 bfd/targets.c                     |   2 +
 gas/ChangeLog                     |  12 +++++
 gas/config/tc-h8300.c             | 111 ++++++++++++++++++++++++++++++++++++--
 gas/config/tc-h8300.h             |   4 ++
 gas/configure.tgt                 |   1 +
 gas/doc/c-h8300.texi              |  10 ++++
 ld/ChangeLog                      |  10 ++++
 ld/Makefile.am                    |  23 ++++++++
 ld/Makefile.in                    |  24 ++++++++-
 ld/configure.tgt                  |   3 ++
 ld/emulparams/h8300elf_linux.sh   |  26 +++++++++
 ld/emulparams/h8300helf_linux.sh  |   3 ++
 ld/emulparams/h8300self_linux.sh  |   3 ++
 ld/emulparams/h8300sxelf_linux.sh |  16 ++++++
 19 files changed, 266 insertions(+), 5 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f4391d7..efa539c 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2015-02-23  Yoshinori Sato <ysato@users.sourceforge.jp>
+
+	* config.bfd: Add h8300-*-linux.
+	* configure.ac: Add h8300_elf32_linux_vec.
+	* configure: Regenerate.
+	* elf32-h8300.c: Likewise.
+	* targets.c(_bfd_target_vector): Likewise.
+
 2015-02-23  Nick Clifton  <nickc@redhat.com>
 
 	PR 17914
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 62f8ee4..b79c711 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -461,6 +461,10 @@ case "${targ}" in
     targ_underscore=yes
     ;;
 
+  h8300*-*-linux*)
+    targ_defvec=h8300_elf32_linux_vec
+    ;;
+
   h8300*-*-*)
     targ_defvec=h8300_coff_vec
     targ_underscore=yes
diff --git a/bfd/configure b/bfd/configure
index 1fc7991..20b2e27 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -15356,6 +15356,7 @@ do
     frv_elf32_fdpic_vec)	 tb="$tb elf32-frv.lo elf32.lo $elf" ;;
     h8300_coff_vec)		 tb="$tb coff-h8300.lo reloc16.lo $coffgen" ;;
     h8300_elf32_vec)		 tb="$tb elf32-h8300.lo elf32.lo $elf" ;;
+    h8300_elf32_linux_vec)	 tb="$tb elf32-h8300.lo elf32.lo $elf" ;;
     h8500_coff_vec)		 tb="$tb coff-h8500.lo reloc16.lo $coffgen" ;;
     hppa_elf32_vec)		 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     hppa_elf32_linux_vec)	 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
diff --git a/bfd/configure.ac b/bfd/configure.ac
index 337a23f..cd18689 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -757,6 +757,7 @@ do
     frv_elf32_fdpic_vec)	 tb="$tb elf32-frv.lo elf32.lo $elf" ;;
     h8300_coff_vec)		 tb="$tb coff-h8300.lo reloc16.lo $coffgen" ;;
     h8300_elf32_vec)		 tb="$tb elf32-h8300.lo elf32.lo $elf" ;;
+    h8300_elf32_linux_vec)	 tb="$tb elf32-h8300.lo elf32.lo $elf" ;;
     h8500_coff_vec)		 tb="$tb coff-h8500.lo reloc16.lo $coffgen" ;;
     hppa_elf32_vec)		 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     hppa_elf32_linux_vec)	 tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c
index 3676032..3598c34 100644
--- a/bfd/elf32-h8300.c
+++ b/bfd/elf32-h8300.c
@@ -1744,3 +1744,12 @@ elf32_h8_get_relocated_section_contents (bfd *output_bfd,
 #define elf_symbol_leading_char '_'
 
 #include "elf32-target.h"
+
+#undef  TARGET_BIG_SYM
+#define TARGET_BIG_SYM			h8300_elf32_linux_vec
+#undef  TARGET_BIG_NAME
+#define TARGET_BIG_NAME			"elf32-h8300-linux"
+#undef  elf_symbol_leading_char
+#define elf32_bed			elf32_h8300_linux_bed
+
+#include "elf32-target.h"
diff --git a/bfd/targets.c b/bfd/targets.c
index 0c7fed5..9b5458e 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -631,6 +631,7 @@ extern const bfd_target frv_elf32_vec;
 extern const bfd_target frv_elf32_fdpic_vec;
 extern const bfd_target h8300_coff_vec;
 extern const bfd_target h8300_elf32_vec;
+extern const bfd_target h8300_elf32_linux_vec;
 extern const bfd_target h8500_coff_vec;
 extern const bfd_target hppa_elf32_vec;
 extern const bfd_target hppa_elf32_linux_vec;
@@ -1045,6 +1046,7 @@ static const bfd_target * const _bfd_target_vector[] =
 
 	&h8300_coff_vec,
 	&h8300_elf32_vec,
+	&h8300_elf32_linux_vec,
 	&h8500_coff_vec,
 
 	&hppa_elf32_vec,
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 93dd2dd..ab3efea 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,15 @@
+2015-02-23  Yoshinori Sato  <ysato@users.sourceforge.jp>
+
+	* config/tc-h8300.c (line_separater_chars): Add a version for
+	h8300-linux that includes a separator.
+	(default_mach): New variable.
+	(md_main): Use it.
+	(md_longopts): Add '--march' option.
+	(md_parse_option): Parse the new option.
+	* config/tc-h8300.h (TARGET_FORMAT): Add elf32-h8300-linux.
+	* configure.tgt: Add h8300-*-linux
+	* doc/c-h8300.texi: Document --march.
+
 2015-02-23  Nick Clifton  <nickc@redhat.com>
 
 	PR 17940
diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c
index 988bf24..2c8a080 100644
--- a/gas/config/tc-h8300.c
+++ b/gas/config/tc-h8300.c
@@ -35,7 +35,11 @@
 
 const char comment_chars[] = ";";
 const char line_comment_chars[] = "#";
+#ifdef TE_LINUX
+const char line_separator_chars[] = "!";
+#else
 const char line_separator_chars[] = "";
+#endif
 
 static void sbranch (int);
 static void h8300hmode (int);
@@ -51,6 +55,8 @@ int Smode;
 int Nmode;
 int SXmode;
 
+static int default_mach = bfd_mach_h8300;
+
 #define PSIZE (Hmode && !Nmode ? L_32 : L_16)
 
 static int bsize = L_8;		/* Default branch displacement.  */
@@ -238,7 +244,7 @@ md_begin (void)
   char prev_buffer[100];
   int idx = 0;
 
-  if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, bfd_mach_h8300))
+  if (!bfd_set_arch_mach (stdoutput, bfd_arch_h8300, default_mach))
     as_warn (_("could not set architecture and machine"));
 
   opcode_hash_control = hash_new ();
@@ -2102,24 +2108,115 @@ md_atof (int type, char *litP, int *sizeP)
 }
 
 #define OPTION_H_TICK_HEX      (OPTION_MD_BASE)
+#define OPTION_MACH            (OPTION_MD_BASE+1)
 
 const char *md_shortopts = "";
-struct option md_longopts[] = {
+struct option md_longopts[] =
+{
   { "h-tick-hex", no_argument,	      NULL, OPTION_H_TICK_HEX  },
+  { "mach", required_argument, NULL, OPTION_MACH },
   {NULL, no_argument, NULL, 0}
 };
 
 size_t md_longopts_size = sizeof (md_longopts);
 
+struct mach_func
+{
+  const char *name;
+  void (*func) (void);
+};
+
+static void
+mach_h8300h (void)
+{
+  Hmode = 1;
+  Smode = 0;
+  Nmode = 0;
+  SXmode = 0;
+  default_mach = bfd_mach_h8300h;
+}
+
+static void
+mach_h8300hn (void)
+{
+  Hmode = 1;
+  Smode = 0;
+  Nmode = 1;
+  SXmode = 0;
+  default_mach = bfd_mach_h8300hn;
+}
+
+static void
+mach_h8300s (void)
+{
+  Hmode = 1;
+  Smode = 1;
+  Nmode = 0;
+  SXmode = 0;
+  default_mach = bfd_mach_h8300s;
+}
+
+static void
+mach_h8300sn (void)
+{
+  Hmode = 1;
+  Smode = 1;
+  Nmode = 1;
+  SXmode = 0;
+  default_mach = bfd_mach_h8300sn;
+}
+
+static void
+mach_h8300sx (void)
+{
+  Hmode = 1;
+  Smode = 1;
+  Nmode = 0;
+  SXmode = 1;
+  default_mach = bfd_mach_h8300sx;
+}
+
+static void
+mach_h8300sxn (void)
+{
+  Hmode = 1;
+  Smode = 1;
+  Nmode = 1;
+  SXmode = 1;
+  default_mach = bfd_mach_h8300sxn;
+}
+
+const struct mach_func mach_table[] =
+{
+  {"h8300h",  mach_h8300h},
+  {"h8300hn", mach_h8300hn},
+  {"h8300s",  mach_h8300s},
+  {"h8300sn", mach_h8300sn},
+  {"h8300sx", mach_h8300sx},
+  {"h8300sxn", mach_h8300sxn}
+};
+
 int
 md_parse_option (int c ATTRIBUTE_UNUSED, char *arg ATTRIBUTE_UNUSED)
 {
+  unsigned int i;
   switch (c)
     {
     case OPTION_H_TICK_HEX:
       enable_h_tick_hex = 1;
       break;
-
+    case OPTION_MACH:
+      for (i = 0; i < sizeof(mach_table) / sizeof(struct mach_func); i++)
+	{
+	  if (strcasecmp (arg, mach_table[i].name) == 0)
+	    {
+	      mach_table[i].func();
+	      break;
+	    }
+	}
+      if (i >= sizeof(mach_table) / sizeof(struct mach_func))
+	as_bad (_("Invalid argument to --mach option: %s"), arg);
+      break;
     default:
       return 0;
     }
@@ -2127,8 +2224,14 @@ md_parse_option (int c ATTRIBUTE_UNUSED, char *arg ATTRIBUTE_UNUSED)
 }
 
 void
-md_show_usage (FILE *stream ATTRIBUTE_UNUSED)
+md_show_usage (FILE *stream)
 {
+  fprintf (stream, _(" H8300-specific assembler options:\n"));
+  fprintf (stream, _("\
+  -mach=<name>             Set the H8300 machine type to one of:\n\
+                           h8300h, h8300hn, h8300s, h8300sn, h8300sx, h8300sxn\n"));
+  fprintf (stream, _("\
+  -h-tick-hex              Support H'00 style hex constants\n"));
 }
 
 void tc_aout_fix_to_chars (void);
diff --git a/gas/config/tc-h8300.h b/gas/config/tc-h8300.h
index f79d750..dd1d57f 100644
--- a/gas/config/tc-h8300.h
+++ b/gas/config/tc-h8300.h
@@ -27,7 +27,11 @@
 /* Fixup debug sections since we will never relax them.  */
 #define TC_LINKRELAX_FIXUP(seg) (seg->flags & SEC_ALLOC)
 #ifdef OBJ_ELF
+#ifndef TE_LINUX
 #define TARGET_FORMAT "elf32-h8300"
+#else
+#define TARGET_FORMAT "elf32-h8300-linux"
+#endif
 #define LOCAL_LABEL_PREFIX '.'
 #define LOCAL_LABEL(NAME) (NAME[0] == '.' && NAME[1] == 'L')
 #define FAKE_LABEL_NAME ".L0\001"
diff --git a/gas/configure.tgt b/gas/configure.tgt
index ee07266..bfff2d7 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -206,6 +206,7 @@ case ${generic_target} in
   hppa-*-hiux*)				fmt=som em=hppa ;;
 
   h8300-*-elf | h8300-*-rtems*)		fmt=elf ;;
+  h8300-*-linux*)			fmt=elf em=linux ;;
 
   i370-*-elf* | i370-*-linux*)		fmt=elf ;;
 
diff --git a/gas/doc/c-h8300.texi b/gas/doc/c-h8300.texi
index 3a1859b..5d14775 100644
--- a/gas/doc/c-h8300.texi
+++ b/gas/doc/c-h8300.texi
@@ -29,6 +29,16 @@ machine-dependent option:
 @item -h-tick-hex
 Support H'00 style hex constants in addition to 0x00 style.
 
+@item -mach=@var{name}
+Sets the H8300 machine variant.  The following machine names
+are recognised:
+@code{h8300h},
+@code{h8300hn},
+@code{h8300s},
+@code{h8300sn},
+@code{h8300sx} and 
+@code{h8300sxn}.
+
 @end table
 @c man end
 
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 30f965e..d952670 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,13 @@
+2015-01-21  Yoshinori Sato <ysato@users.sourceforge.jp>
+
+	* Makefile.am: (ALL_EMULATION_SOURCES): Add new emulations.
+	* Makefile.in: Regenerate.
+	* configure.tgt: Add h8300-*-linux
+	* emulparams/h8300elf_linux.sh: Add new emulation.
+	* emulparams/h8300helf_linux.sh: Likewise.
+	* emulparams/h8300self_linux.sh: Likewise.
+	* emulparams/h8300sxelf_linux.sh: Likewise.
+
 2015-02-23  Nick Clifton  <nickc@redhat.com>
 
 	* lexsup.c (parse_args): Produce a more reasonable error message
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 75a481b..11de1c4 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -286,16 +286,20 @@ ALL_EMULATION_SOURCES = \
 	eh8300elf.c \
 	eh8300h.c \
 	eh8300helf.c \
+	eh8300elf_linux.c \
 	eh8300hn.c \
 	eh8300hnelf.c \
+	eh8300helf_linux.c \
 	eh8300s.c \
 	eh8300self.c \
+	eh8300self_linux.c \
 	eh8300sn.c \
 	eh8300snelf.c \
 	eh8300sx.c \
 	eh8300sxelf.c \
 	eh8300sxn.c \
 	eh8300sxnelf.c \
+	eh8300sxelf_linux.c \
 	eh8500.c \
 	eh8500b.c \
 	eh8500c.c \
@@ -1305,6 +1309,10 @@ eh8300.c: $(srcdir)/emulparams/h8300.sh \
 eh8300elf.c: $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300elf_linux.c: $(srcdir)/emulparams/h8300elf_linux.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300elf_linux "$(tdir_h8300elf)"
+
 eh8300h.c: $(srcdir)/emulparams/h8300h.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300h.sc ${GEN_DEPENDS}
 
@@ -1312,6 +1320,11 @@ eh8300helf.c: $(srcdir)/emulparams/h8300helf.sh \
   $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300helf_linux.c: $(srcdir)/emulparams/h8300helf_linux.sh \
+  $(srcdir)/emulparams/h8300elf_linux.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300helf_linux "$(tdir_h8300helf)"
+
 eh8300hn.c: $(srcdir)/emulparams/h8300hn.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300hn.sc ${GEN_DEPENDS}
 
@@ -1326,6 +1339,11 @@ eh8300self.c: $(srcdir)/emulparams/h8300self.sh \
   $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300self_linux.c: $(srcdir)/emulparams/h8300self_linux.sh \
+  $(srcdir)/emulparams/h8300elf.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300self_linux "$(tdir_h8300self)"
+
 eh8300sn.c: $(srcdir)/emulparams/h8300sn.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sn.sc ${GEN_DEPENDS}
 
@@ -1340,6 +1358,11 @@ eh8300sxelf.c: $(srcdir)/emulparams/h8300sxelf.sh \
   $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300sxelf_linux.c: $(srcdir)/emulparams/h8300sxelf_linux.sh \
+  $(srcdir)/emulparams/h8300elf.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300sxelf_linux "$(tdir_h8300sxelf)"
+
 eh8300sxn.c: $(srcdir)/emulparams/h8300sxn.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sxn.sc ${GEN_DEPENDS}
 
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 6c54fda..9b803d7 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -611,16 +611,20 @@ ALL_EMULATION_SOURCES = \
 	egld960coff.c \
 	eh8300.c \
 	eh8300elf.c \
+	eh8300elf_linux.c \
 	eh8300h.c \
 	eh8300helf.c \
+	eh8300helf_linux.c \
 	eh8300hn.c \
 	eh8300hnelf.c \
 	eh8300s.c \
 	eh8300self.c \
+	eh8300self_linux.c \
 	eh8300sn.c \
 	eh8300snelf.c \
 	eh8300sx.c \
 	eh8300sxelf.c \
+	eh8300sxelf_linux.c \
 	eh8300sxn.c \
 	eh8300sxnelf.c \
 	eh8500.c \
@@ -1273,16 +1277,20 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/egld960coff.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300elf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300elf_linux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300h.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300helf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300helf_linux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300hn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300hnelf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300s.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300self.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300self_linux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300snelf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sx.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxelf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxelf_linux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8300sxnelf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eh8500.Po@am__quote@
@@ -2792,7 +2800,9 @@ eh8300.c: $(srcdir)/emulparams/h8300.sh \
 
 eh8300elf.c: $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
-
+eh8300elf_linux.c: $(srcdir)/emulparams/h8300elf_linux.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300elf_linux "$(tdir_h8300elf)"
 eh8300h.c: $(srcdir)/emulparams/h8300h.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300h.sc ${GEN_DEPENDS}
 
@@ -2800,6 +2810,10 @@ eh8300helf.c: $(srcdir)/emulparams/h8300helf.sh \
   $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300helf_linux.c: $(srcdir)/emulparams/h8300helf_linux.sh \
+  $(srcdir)/emulparams/h8300elf_linux.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300helf_linux "$(tdir_h8300helf)"
 eh8300hn.c: $(srcdir)/emulparams/h8300hn.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300hn.sc ${GEN_DEPENDS}
 
@@ -2814,6 +2828,10 @@ eh8300self.c: $(srcdir)/emulparams/h8300self.sh \
   $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300self_linux.c: $(srcdir)/emulparams/h8300self_linux.sh \
+  $(srcdir)/emulparams/h8300elf.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300self_linux "$(tdir_h8300self)"
 eh8300sn.c: $(srcdir)/emulparams/h8300sn.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sn.sc ${GEN_DEPENDS}
 
@@ -2828,6 +2846,10 @@ eh8300sxelf.c: $(srcdir)/emulparams/h8300sxelf.sh \
   $(srcdir)/emulparams/h8300elf.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 
+eh8300sxelf_linux.c: $(srcdir)/emulparams/h8300sxelf_linux.sh \
+  $(srcdir)/emulparams/h8300elf.sh \
+  $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} h8300sxelf_linux "$(tdir_h8300sxelf)"
 eh8300sxn.c: $(srcdir)/emulparams/h8300sxn.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/h8300sxn.sc ${GEN_DEPENDS}
 
diff --git a/ld/configure.tgt b/ld/configure.tgt
index f16c845..a46fbca 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -198,6 +198,9 @@ h8300-*-hms* | h8300-*-coff* | h8300-*-rtemscoff*)
 h8300-*-elf* | h8300-*-rtems*)
 			targ_emul=h8300elf;
 			targ_extra_emuls="h8300helf h8300self h8300hnelf h8300snelf h8300sxelf h8300sxnelf" ;;
+h8300-*-linux*)
+			targ_emul=h8300elf_linux;
+			targ_extra_emuls="h8300helf_linux h8300self_linux h8300sxelf_linux" ;;
 h8500-*-hms* | h8500-*-coff* | h8500-*-rtems*)
 			targ_emul=h8500
 			targ_extra_emuls="h8500s h8500b h8500m h8500c"
diff --git a/ld/emulparams/h8300elf_linux.sh b/ld/emulparams/h8300elf_linux.sh
new file mode 100644
index 0000000..97050dd
--- /dev/null
+++ b/ld/emulparams/h8300elf_linux.sh
@@ -0,0 +1,26 @@
+# If you change this file, please also look at files which source this one:
+# h8300helf.sh h8300self.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-h8300-linux"
+NO_REL_RELOCS=yes
+TEXT_START_ADDR=0x100
+MAXPAGESIZE=2
+TARGET_PAGE_SIZE=128
+ARCH=h8300
+TEMPLATE_NAME=elf32
+EMBEDDED=yes
+STACK_ADDR=0xfefc
+TINY_READONLY_SECTION=".tinyrodata :
+  {
+	*(.tinyrodata)
+  } =0"
+TINY_DATA_SECTION=".tinydata	${RELOCATING+0xff8000} :
+  {
+	*(.tinydata)
+        ${RELOCATING+ _tinydata = .; }
+  }"
+TINY_BSS_SECTION=".tinybss	: ${RELOCATING+AT (_tinydata)}
+  {
+	*(.tinybss)
+  }"
diff --git a/ld/emulparams/h8300helf_linux.sh b/ld/emulparams/h8300helf_linux.sh
new file mode 100644
index 0000000..c66ff94
--- /dev/null
+++ b/ld/emulparams/h8300helf_linux.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/h8300elf_linux.sh
+ARCH="h8300:h8300h"
+STACK_ADDR=0x2fefc
diff --git a/ld/emulparams/h8300self_linux.sh b/ld/emulparams/h8300self_linux.sh
new file mode 100644
index 0000000..76f3ed7
--- /dev/null
+++ b/ld/emulparams/h8300self_linux.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/h8300elf_linux.sh
+ARCH="h8300:h8300s"
+STACK_ADDR=0x2fefc
diff --git a/ld/emulparams/h8300sxelf_linux.sh b/ld/emulparams/h8300sxelf_linux.sh
new file mode 100644
index 0000000..b06dc2e
--- /dev/null
+++ b/ld/emulparams/h8300sxelf_linux.sh
@@ -0,0 +1,16 @@
+. ${srcdir}/emulparams/h8300elf_linux.sh
+ARCH="h8300:h8300sx"
+STACK_ADDR=0x2fefc
+TINY_READONLY_SECTION=".tinyrodata :
+  {
+	*(.tinyrodata)
+  } =0"
+TINY_DATA_SECTION=".tinydata	0xff8000 :
+  {
+	*(.tinydata)
+	${RELOCATING+ _tinydata = .; }
+  }"
+TINY_BSS_SECTION=".tinybss	: AT (_tinydata)
+  {
+	*(.tinybss)
+  }"


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