Ping [PATCH, h8300] Add h8300-*-linux

Yoshinori Sato ysato@users.sourceforge.jp
Sun Feb 1 06:17:00 GMT 2015


Ping

At Wed, 21 Jan 2015 23:21:48 +0900,
Yoshinori Sato wrote:
> 
> Add h8300-*-linux target for h8300 linux kernel and userland.
> 
> h8300-*-elf is some difference of standard elf.
> h8300-*-linux is compatible of standard elf rules.
> 
> Thanks.
> 
> diff --git a/bfd/ChangeLog b/bfd/ChangeLog
> index 3b15cef..bb6faa0 100644
> --- a/bfd/ChangeLog
> +++ b/bfd/ChangeLog
> @@ -1,3 +1,10 @@
> +2015-01-21  Yoshinori Sato <ysato@users.sourceforge.jp>
> +
> +	* config.bfd: Add h8300-*-linux.
> +	* configure.ac: Add h8300_elf32_linux_vec
> +	* elf32-h8300.c: Likewise.
> +	* targets.c(_bfd_target_vector): Likewise.
> +
>  2015-01-20  Chung-Lin Tang  <cltang@codesourcery.com>
>  
>  	* elf32-nios2.c (elf_backend_default_execstack): Define as 0.
> diff --git a/bfd/config.bfd b/bfd/config.bfd
> index 75f21e3..795bc26 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 f7a9e81..0e1a9de 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 a2743a0..f7b5adc 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 dc1e3ca..8f48ce3 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;
> @@ -1044,6 +1045,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 6da11bb..c6ee79d 100644
> --- a/gas/ChangeLog
> +++ b/gas/ChangeLog
> @@ -1,3 +1,10 @@
> +2015-01-21  Yoshinori Sato  <ysato@users.sourceforge.jp>
> +
> +	* config/tc-h8300.c (line_separater_chars): Add separator
> +	* config/tc-h8300.c (md_longopts): Add '--march' option.
> +	* config/tc-h8300.h: Add elf32-h8300-linux
> +	* configure.tgt: Add h8300-*-linux
> +
>  2015-01-19  Alan Modra  <amodra@gmail.com>
>  
>  	* read.c (s_reloc): Match BFD_RELOC_NONE, BFD_RELOC{8,16,32,64}.
> diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c
> index 988bf24..bb38aaf 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,106 @@ 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[] = {
>    { "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;
>      }
> 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 af90198..c731152 100644
> --- a/gas/configure.tgt
> +++ b/gas/configure.tgt
> @@ -204,6 +204,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/ld/ChangeLog b/ld/ChangeLog
> index 5a97e32..e59379f 100644
> --- a/ld/ChangeLog
> +++ b/ld/ChangeLog
> @@ -1,3 +1,12 @@
> +2015-01-21  Yoshinori Sato <ysato@users.sourceforge.jp>
> +
> +	* Makefile.in: (ALL_EMULATION_SOURCES): Add new emulations.
> +	* 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-01-20  Andrew Burgess  <andrew.burgess@embecosm.com>
>  
>  	* ldlang.c (print_assignment): Only evaluate the expression for a
> diff --git a/ld/Makefile.in b/ld/Makefile.in
> index 311452d..3466f3d 100644
> --- a/ld/Makefile.in
> +++ b/ld/Makefile.in
> @@ -591,16 +591,20 @@ ALL_EMULATION_SOURCES = \
>  	egld960coff.c \
>  	eh8300.c \
>  	eh8300elf.c \
> +	eh8300elf_lnux.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 \
> +	eh8300sxlelf_linux.c \
>  	eh8300sxn.c \
>  	eh8300sxnelf.c \
>  	eh8500.c \
> @@ -1242,16 +1246,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@
> @@ -2742,7 +2750,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}
>  
> @@ -2750,6 +2760,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}
>  
> @@ -2764,6 +2778,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}
>  
> @@ -2778,6 +2796,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 ef876b2..36afc97 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)
> +  }"
> 
> -- 
> Yoshinori Sato
> <ysato@users.sourceforge.jp>



More information about the Binutils mailing list