aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1996-12-12 22:06:51 +0000
committerIan Lance Taylor <ian@airs.com>1996-12-12 22:06:51 +0000
commitd0d5edba84930baf71277350a33839ea42f45eac (patch)
tree4975234eeca1c2ef67aedbaeae86c34191bc1f87 /ld
parent73d257842747877c8fed65f4b2ae7aa34111cc66 (diff)
downloadgdb-d0d5edba84930baf71277350a33839ea42f45eac.zip
gdb-d0d5edba84930baf71277350a33839ea42f45eac.tar.gz
gdb-d0d5edba84930baf71277350a33839ea42f45eac.tar.bz2
* emultempl/gld960c.em: Include <ctype.h>.
(gld960_set_output_arch): Get the machine type from the -A option if there is one, rather than always using core. PR 11255.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/emultempl/gld960c.em191
2 files changed, 201 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index b0c2f64..9be5652 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,13 @@
+Thu Dec 12 17:04:55 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * emultempl/gld960c.em: Include <ctype.h>.
+ (gld960_set_output_arch): Get the machine type from the -A option
+ if there is one, rather than always using core.
+
+Sat Dec 7 10:07:51 1996 Jeffrey A Law (law@cygnus.com)
+
+ * emulparms/mn10300.sh: Handle leading underscores.
+
Thu Dec 5 13:45:58 1996 Ian Lance Taylor <ian@cygnus.com>
* emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Only
diff --git a/ld/emultempl/gld960c.em b/ld/emultempl/gld960c.em
new file mode 100644
index 0000000..662afce
--- /dev/null
+++ b/ld/emultempl/gld960c.em
@@ -0,0 +1,191 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<EOF
+/* Copyright (C) 1991, 1993 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/*
+ * emulate the Intels port of gld
+ */
+
+
+#include <ctype.h>
+#include "bfd.h"
+#include "sysdep.h"
+#include "libiberty.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+
+#ifdef GNU960
+
+static void
+gld960_before_parse()
+{
+ static char *env_variables[] = { "G960LIB", "G960BASE", 0 };
+ char **p;
+ char *env ;
+
+ for ( p = env_variables; *p; p++ ){
+ env = (char *) getenv(*p);
+ if (env) {
+ ldfile_add_library_path (concat (env,
+ "/lib/libcoff",
+ (const char *) NULL),
+ false);
+ }
+ }
+ ldfile_output_architecture = bfd_arch_i960;
+}
+
+#else /* not GNU960 */
+
+static void gld960_before_parse()
+{
+ char *env ;
+ env = getenv("G960LIB");
+ if (env) {
+ ldfile_add_library_path(env, false);
+ }
+ env = getenv("G960BASE");
+ if (env)
+ ldfile_add_library_path (concat (env, "/lib", (const char *) NULL),
+ false);
+ ldfile_output_architecture = bfd_arch_i960;
+}
+
+#endif /* GNU960 */
+
+
+static void
+gld960_set_output_arch()
+{
+ if (ldfile_output_machine_name != NULL
+ && *ldfile_output_machine_name != '\0')
+ {
+ char *s, *s1;
+
+ s = concat ("i960:", ldfile_output_machine_name, (char *) NULL);
+ for (s1 = s; *s1 != '\0'; s1++)
+ if (isupper ((unsigned char) *s1))
+ *s1 = tolower ((unsigned char) *s1);
+ ldfile_set_output_arch (s);
+ free (s);
+ }
+
+ set_output_arch_default ();
+}
+
+static char *
+gld960_choose_target()
+{
+#ifdef GNU960
+
+ output_filename = "b.out";
+ return bfd_make_targ_name(BFD_BOUT_FORMAT, 0);
+
+#else
+
+ char *from_outside = getenv(TARGET_ENVIRON);
+ output_filename = "b.out";
+
+ if (from_outside != (char *)NULL)
+ return from_outside;
+
+ return "coff-Intel-little";
+
+#endif
+}
+
+static char *
+gld960_get_script(isfile)
+ int *isfile;
+EOF
+
+if test -n "$COMPILE_IN"
+then
+# Scripts compiled in.
+
+# sed commands to quote an ld script as a C string.
+sc='s/["\\]/\\&/g
+s/$/\\n\\/
+1s/^/"/
+$s/$/n"/
+'
+
+cat >>e${EMULATION_NAME}.c <<EOF
+{
+ *isfile = 0;
+
+ if (link_info.relocateable == true && config.build_constructors == true)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xu`;
+ else if (link_info.relocateable == true)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xr`;
+ else if (!config.text_read_only)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xbn`;
+ else if (!config.magic_demand_paged)
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.xn`;
+ else
+ return `sed "$sc" ldscripts/${EMULATION_NAME}.x`;
+}
+EOF
+
+else
+# Scripts read from the filesystem.
+
+cat >>e${EMULATION_NAME}.c <<EOF
+{
+ *isfile = 1;
+
+ if (link_info.relocateable == true && config.build_constructors == true)
+ return "ldscripts/${EMULATION_NAME}.xu";
+ else if (link_info.relocateable == true)
+ return "ldscripts/${EMULATION_NAME}.xr";
+ else if (!config.text_read_only)
+ return "ldscripts/${EMULATION_NAME}.xbn";
+ else if (!config.magic_demand_paged)
+ return "ldscripts/${EMULATION_NAME}.xn";
+ else
+ return "ldscripts/${EMULATION_NAME}.x";
+}
+EOF
+
+fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
+
+struct ld_emulation_xfer_struct ld_gld960coff_emulation =
+{
+ gld960_before_parse,
+ syslib_default,
+ hll_default,
+ after_parse_default,
+ after_open_default,
+ after_allocation_default,
+ gld960_set_output_arch,
+ gld960_choose_target,
+ before_allocation_default,
+ gld960_get_script,
+ "960coff",
+ ""
+};
+EOF