aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorSergey Belyashov <sergey.belyashov@gmail.com>2020-02-19 17:46:10 +0000
committerNick Clifton <nickc@redhat.com>2020-02-19 17:46:10 +0000
commitfcaaac0a0d3d46e3c59f87c1445852ac77b6c118 (patch)
tree9d63c6fc90566b5e2110d4e3bef593c1f91f205e /ld/emultempl
parentd3c22fa82e2f9098ad5a0158a73f07db12426fff (diff)
downloadgdb-fcaaac0a0d3d46e3c59f87c1445852ac77b6c118.zip
gdb-fcaaac0a0d3d46e3c59f87c1445852ac77b6c118.tar.gz
gdb-fcaaac0a0d3d46e3c59f87c1445852ac77b6c118.tar.bz2
Various fixes for the Z80 support.
PR 25537 ld * emultempl/z80.em: Remove machine compatability checking. PR 25517 * testsuite/ld-z80/arch_ez80_adl.d: Update command line. * testsuite/ld-z80/arch_ez80_z80.d: Likewise. * testsuite/ld-z80/arch_r800.d: Likewise. * testsuite/ld-z80/arch_z180.d: Likewise. * testsuite/ld-z80/arch_z80n.d: Likewise. * testsuite/ld-z80/comb_arch_ez80_z80.d: Likewise. * testsuite/ld-z80/comb_arch_z180_z80.d: Likewise. * testsuite/ld-z80/comb_arch_z80_ez80.d: Likewise. * testsuite/ld-z80/comb_arch_z80_z180.d: Likewise. * testsuite/ld-z80/comb_arch_z80_z80n.d: Likewise. * testsuite/ld-z80/relocs_b_ez80.d: Likewise. * testsuite/ld-z80/relocs_b_z80.d: Likewise. * testsuite/ld-z80/relocs_f_ez80.d: Likewise. * testsuite/ld-z80/relocs_f_z80.d: Likewise. * testsuite/ld-z80/relocs_f_z80n.d: Likewise. bfd * cpu-z80.c: Add machine type compatibility checking. gas * config/tc-z80.c (md_parse_option): Do not use an underscore prefix for local labels in SDCC compatability mode. (z80_start_line_hook): Remove SDCC dollar label support. * testsuite/gas/z80/sdcc.d: Update expected disassembly. * testsuite/gas/z80/sdcc.s: Likewise. * config/tc-z80.c: Add -march option. * doc/as.texi: Update Z80 documentation. * doc/c-z80.texi: Likewise. * testsuite/gas/z80/ez80_adl_all.d: Update command line. * testsuite/gas/z80/ez80_adl_suf.d: Likewise. * testsuite/gas/z80/ez80_pref_dis.d: Likewise. * testsuite/gas/z80/ez80_z80_all.d: Likewise. * testsuite/gas/z80/ez80_z80_suf.d: Likewise. * testsuite/gas/z80/gbz80_all.d: Likewise. * testsuite/gas/z80/r800_extra.d: Likewise. * testsuite/gas/z80/r800_ii8.d: Likewise. * testsuite/gas/z80/r800_z80_doc.d: Likewise. * testsuite/gas/z80/sdcc.d: Likewise. * testsuite/gas/z80/z180.d: Likewise. * testsuite/gas/z80/z180_z80_doc.d: Likewise. * testsuite/gas/z80/z80_doc.d: Likewise. * testsuite/gas/z80/z80_ii8.d: Likewise. * testsuite/gas/z80/z80_in_f_c.d: Likewise. * testsuite/gas/z80/z80_op_ii_ld.d: Likewise. * testsuite/gas/z80/z80_out_c_0.d: Likewise. * testsuite/gas/z80/z80_sli.d: Likewise. * testsuite/gas/z80/z80n_all.d: Likewise. * testsuite/gas/z80/z80n_reloc.d: Likewise.
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/z80.em122
1 files changed, 16 insertions, 106 deletions
diff --git a/ld/emultempl/z80.em b/ld/emultempl/z80.em
index 81385e7..8894ffe 100644
--- a/ld/emultempl/z80.em
+++ b/ld/emultempl/z80.em
@@ -19,135 +19,45 @@
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
-fragment <<EOF
-/* --- \begin{z80.em} */
-
+if [ x"${EMULATION_NAME}" = x"elf32z80" ]; then
+ fragment <<EOF
#include "elf/z80.h"
-
+EOF
+else
+ fragment <<EOF
static void
-gld${EMULATION_NAME}_after_open (void);
-
-static int result_mach_type;
-
-struct z80_mach_info
-{
- unsigned eflags;
- unsigned bfd_mach;
- const int *compat; /* back compatible machines */
-};
-
-static const int
-back_compat_z80[] = {bfd_mach_z80, -1};
-
-static const int
-back_compat_z180[] = {bfd_mach_z180, bfd_mach_z80, -1};
-
-static const int
-back_compat_ez80[] = {bfd_mach_ez80_z80, bfd_mach_z180, bfd_mach_z80, -1};
-
-static const struct z80_mach_info
-z80_mach_info[] =
-{
- { EF_Z80_MACH_Z80, bfd_mach_z80, NULL },
- { EF_Z80_MACH_Z80, bfd_mach_z80strict, back_compat_z80 },
- { EF_Z80_MACH_Z80, bfd_mach_z80full, back_compat_z80 },
- { EF_Z80_MACH_Z180, bfd_mach_z180, back_compat_z80 },
- { EF_Z80_MACH_EZ80_Z80, bfd_mach_ez80_z80, back_compat_z180 },
- { EF_Z80_MACH_EZ80_ADL, bfd_mach_ez80_adl, back_compat_ez80 },
- { EF_Z80_MACH_Z80N, bfd_mach_z80n, back_compat_z80 },
- { EF_Z80_MACH_GBZ80, bfd_mach_gbz80, NULL },
- { EF_Z80_MACH_R800, bfd_mach_r800, back_compat_z80 }
-};
-/*
-static const struct z80_mach_info *
-z80_mach_info_by_eflags (unsigned int eflags)
-{
- const struct z80_mach_info *p;
- const struct z80_mach_info *e;
-
- eflags &= EF_Z80_MACH_MSK;
- p = &z80_mach_info[0];
- e = &z80_mach_info[sizeof(z80_mach_info)/sizeof(*z80_mach_info)];
- for (; p != e; ++p)
- if (eflags == p->eflags)
- return p;
- return NULL;
-}*/
-
-static const struct z80_mach_info *
-z80_mach_info_by_mach (unsigned int bfd_mach)
+gld${EMULATION_NAME}_after_open (void)
{
- const struct z80_mach_info *p;
- const struct z80_mach_info *e;
-
- p = &z80_mach_info[0];
- e = &z80_mach_info[sizeof(z80_mach_info)/sizeof(*z80_mach_info)];
- for (; p != e; ++p)
- if (bfd_mach == p->bfd_mach)
- return p;
- return NULL;
}
+EOF
+fi
-static const struct z80_mach_info *
-z80_combine_mach (const struct z80_mach_info *m1,
- const struct z80_mach_info *m2)
-{
- int i;
- int mach;
- if (m1->compat != NULL)
- for (i = 0; (mach = m1->compat[i]) >= 0; ++i)
- if ((unsigned)mach == m2->bfd_mach)
- return m1;
- if (m2->compat != NULL)
- for (i = 0; (mach = m2->compat[i]) >= 0; ++i)
- if ((unsigned)mach == m1->bfd_mach)
- return m2;
- /* incompatible mach */
- return NULL;
-}
+fragment <<EOF
+/* --- \begin{z80.em} */
-/* Set the machine type of the output file based on result_mach_type. */
+/* Set the machine type of the output file based on types of inputs. */
static void
z80_after_open (void)
{
- const struct z80_mach_info *mach = NULL;
bfd *abfd;
/* For now, make sure all object files are of the same architecture.
We may try to merge object files with different architecture together. */
for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link.next)
{
- const struct z80_mach_info *new_mach;
- /*new_mach = z80_mach_info_by_eflags (elf_elfheader (abfd)->e_flags);*/
- new_mach = z80_mach_info_by_mach(bfd_get_mach (abfd));
- if (mach == NULL)
- mach = new_mach;
- else if (mach != new_mach)
- mach = z80_combine_mach (mach, new_mach);
- if (mach == NULL)
+ const bfd_arch_info_type *info;
+ info = bfd_arch_get_compatible (link_info.output_bfd, abfd, FALSE);
+ if (info == NULL)
einfo (_("%F%P: %pB: Instruction sets of object files incompatible\n"),
abfd);
+ else
+ bfd_set_arch_info (link_info.output_bfd, info);
}
- if (mach != NULL)
- {
- bfd_set_arch_mach (link_info.output_bfd, bfd_arch_z80, mach->bfd_mach);
- result_mach_type = mach->bfd_mach;
- }
- else
- einfo (_("%F%P: %pB: Unknown machine type\n"),
- abfd);
/* Call the standard elf routine. */
gld${EMULATION_NAME}_after_open ();
}
-#ifndef TARGET_IS_elf32z80
-static void
-gld${EMULATION_NAME}_after_open (void)
-{
-}
-#endif
-
/* --- \end{z80.em} */
EOF