From 5518c738a47f0282d6fcc6768e1cde598e9538e0 Mon Sep 17 00:00:00 2001 From: Yoshinori Sato Date: Mon, 23 Feb 2015 17:04:53 +0000 Subject: [PATCH] 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. --- 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(-) create mode 100644 ld/emulparams/h8300elf_linux.sh create mode 100644 ld/emulparams/h8300helf_linux.sh create mode 100644 ld/emulparams/h8300self_linux.sh create mode 100644 ld/emulparams/h8300sxelf_linux.sh diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f4391d7b0c1..efa539cfc69 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2015-02-23 Yoshinori Sato + + * 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 PR 17914 diff --git a/bfd/config.bfd b/bfd/config.bfd index 62f8ee41ef7..b79c7115f30 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 1fc7991c436..20b2e2770bc 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 337a23f186c..cd186893e79 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 367603298a8..3598c3451f6 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 0c7fed5fe8e..9b5458efb8e 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 93dd2dd267e..ab3efea7ea0 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,15 @@ +2015-02-23 Yoshinori Sato + + * 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 PR 17940 diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c index 988bf24f5fd..2c8a0804d66 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= 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 f79d7503a26..dd1d57f0247 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 ee072660bf7..bfff2d7e8ab 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 3a1859b9ebb..5d14775cbd2 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 30f965e8a5d..d9526702859 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2015-01-21 Yoshinori Sato + + * 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 * lexsup.c (parse_args): Produce a more reasonable error message diff --git a/ld/Makefile.am b/ld/Makefile.am index 75a481bb4da..11de1c43f0d 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 6c54fda38d3..9b803d73822 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 f16c845d169..a46fbca4f7f 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 00000000000..97050ddf4e3 --- /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 00000000000..c66ff940f07 --- /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 00000000000..76f3ed79876 --- /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 00000000000..b06dc2e3dfa --- /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) + }" -- 2.30.2