aboutsummaryrefslogtreecommitdiff
path: root/ld/ldemul.c
diff options
context:
space:
mode:
Diffstat (limited to 'ld/ldemul.c')
-rw-r--r--ld/ldemul.c147
1 files changed, 147 insertions, 0 deletions
diff --git a/ld/ldemul.c b/ld/ldemul.c
new file mode 100644
index 0000000..eafe26c
--- /dev/null
+++ b/ld/ldemul.c
@@ -0,0 +1,147 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GLD is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GLD; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/*
+ * $Id$
+ */
+
+/*
+ * clearing house for ld emulation states
+ */
+
+#include "bfd.h"
+#include "sysdep.h"
+
+#include "config.h"
+#include "ld.h"
+#include "ldemul.h"
+#include "ldmisc.h"
+
+extern ld_emulation_xfer_type ld_lnk960_emulation;
+extern ld_emulation_xfer_type ld_gldm88kbcs_emulation;
+extern ld_emulation_xfer_type ld_gld_emulation;
+extern ld_emulation_xfer_type ld_vanilla_emulation;
+extern ld_emulation_xfer_type ld_gld68k_emulation;
+extern ld_emulation_xfer_type ld_gld960_emulation;
+extern ld_emulation_xfer_type ld_gld29k_emulation;
+extern ld_emulation_xfer_type ld_gldnews_emulation;
+extern ld_emulation_xfer_type ld_h8300hds_emulation;
+
+
+ld_emulation_xfer_type *ld_emulation;
+
+void
+ldemul_hll(name)
+char *name;
+{
+ ld_emulation->hll(name);
+}
+
+
+void ldemul_syslib(name)
+char *name;
+{
+ ld_emulation->syslib(name);
+}
+
+void
+ldemul_after_parse()
+{
+ ld_emulation->after_parse();
+}
+
+void
+ldemul_before_parse()
+{
+ ld_emulation->before_parse();
+}
+
+void
+ldemul_after_allocation()
+{
+ ld_emulation->after_allocation();
+}
+
+void
+ldemul_before_allocation()
+{
+ if (ld_emulation->before_allocation) {
+ ld_emulation->before_allocation();
+ }
+}
+
+
+void
+ldemul_set_output_arch()
+{
+ ld_emulation->set_output_arch();
+}
+
+char *
+ldemul_choose_target()
+{
+ return ld_emulation->choose_target();
+}
+
+char *
+ldemul_get_script()
+{
+ return ld_emulation->get_script();
+}
+
+void
+ldemul_choose_mode(target)
+char *target;
+{
+ if (strcmp(target,LNK960_EMULATION_NAME)==0) {
+ ld_emulation = &ld_lnk960_emulation;
+ }
+ else if (strcmp(target,GLD960_EMULATION_NAME)==0) {
+ ld_emulation = &ld_gld960_emulation;
+ }
+ else if (strcmp(target,GLDM88KBCS_EMULATION_NAME)==0) {
+ ld_emulation = &ld_gldm88kbcs_emulation;
+ }
+#ifndef GNU960
+ else if (strcmp(target,GLD_EMULATION_NAME)==0) {
+ ld_emulation = &ld_gld_emulation;
+ }
+ else if (strcmp(target,VANILLA_EMULATION_NAME)==0) {
+ ld_emulation = &ld_vanilla_emulation;
+ }
+ else if (strcmp(target,H8300HDS_EMULATION_NAME)==0) {
+ ld_emulation = &ld_h8300hds_emulation;
+ }
+
+ else if (strcmp(target,GLD68K_EMULATION_NAME)==0) {
+ ld_emulation = &ld_gld68k_emulation;
+ }
+ else if (strcmp(target,GLD29K_EMULATION_NAME)==0) {
+ ld_emulation = &ld_gld29k_emulation;
+ }
+ else if (strcmp(target,GLDNEWS_EMULATION_NAME)==0) {
+ ld_emulation = &ld_gldnews_emulation;
+ }
+#endif
+ else {
+ info("%P%F unrecognised emulation mode: %s\n",target);
+ }
+}
+
+
+