This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH, h8300] Add h8300-*-linux
- From: Yoshinori Sato <ysato at users dot sourceforge dot jp>
- To: binutils at sourceware dot org
- Date: Wed, 21 Jan 2015 23:21:48 +0900
- Subject: [PATCH, h8300] Add h8300-*-linux
- Authentication-results: sourceware.org; auth=none
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>