]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - ld/emultempl/gld960.em
19990502 sourceware import
[thirdparty/binutils-gdb.git] / ld / emultempl / gld960.em
1 # This shell script emits a C file. -*- C -*-
2 # It does some substitutions.
3 cat >e${EMULATION_NAME}.c <<EOF
4 /* Copyright (C) 1991, 1993 Free Software Foundation, Inc.
5
6 This file is part of GLD, the Gnu Linker.
7
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 1, or (at your option)
11 any later version.
12
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
22 /*
23 * emulate the Intels port of gld
24 */
25
26
27 #include "bfd.h"
28 #include "sysdep.h"
29 #include "libiberty.h"
30 #include "bfdlink.h"
31
32 #include "ld.h"
33 #include "ldemul.h"
34 #include "ldfile.h"
35 #include "ldmisc.h"
36 #include "ldmain.h"
37
38 #ifdef GNU960
39
40 static void
41 gld960_before_parse()
42 {
43 static char *env_variables[] = { "G960LIB", "G960BASE", 0 };
44 char **p;
45 char *env ;
46
47 for ( p = env_variables; *p; p++ ){
48 env = (char *) getenv(*p);
49 if (env) {
50 ldfile_add_library_path (concat (env,
51 "/lib/libbout",
52 (const char *) NULL),
53 false);
54 }
55 }
56 ldfile_output_architecture = bfd_arch_i960;
57 }
58
59 #else /* not GNU960 */
60
61 static void gld960_before_parse()
62 {
63 char *env ;
64 env = getenv("G960LIB");
65 if (env) {
66 ldfile_add_library_path(env, false);
67 }
68 env = getenv("G960BASE");
69 if (env)
70 ldfile_add_library_path (concat (env, "/lib", (const char *) NULL), false);
71 ldfile_output_architecture = bfd_arch_i960;
72 }
73
74 #endif /* GNU960 */
75
76
77 static void
78 gld960_set_output_arch()
79 {
80 bfd_set_arch_mach(output_bfd, ldfile_output_architecture, bfd_mach_i960_core);
81 }
82
83 static char *
84 gld960_choose_target()
85 {
86 #ifdef GNU960
87
88 output_filename = "b.out";
89 return bfd_make_targ_name(BFD_BOUT_FORMAT, 0);
90
91 #else
92
93 char *from_outside = getenv(TARGET_ENVIRON);
94 output_filename = "b.out";
95
96 if (from_outside != (char *)NULL)
97 return from_outside;
98
99 return "b.out.little";
100
101 #endif
102 }
103
104 static char *
105 gld960_get_script(isfile)
106 int *isfile;
107 EOF
108
109 if test -n "$COMPILE_IN"
110 then
111 # Scripts compiled in.
112
113 # sed commands to quote an ld script as a C string.
114 sc='s/["\\]/\\&/g
115 s/$/\\n\\/
116 1s/^/"/
117 $s/$/n"/
118 '
119
120 cat >>e${EMULATION_NAME}.c <<EOF
121 {
122 *isfile = 0;
123
124 if (link_info.relocateable == true && config.build_constructors == true)
125 return `sed "$sc" ldscripts/${EMULATION_NAME}.xu`;
126 else if (link_info.relocateable == true)
127 return `sed "$sc" ldscripts/${EMULATION_NAME}.xr`;
128 else if (!config.text_read_only)
129 return `sed "$sc" ldscripts/${EMULATION_NAME}.xbn`;
130 else if (!config.magic_demand_paged)
131 return `sed "$sc" ldscripts/${EMULATION_NAME}.xn`;
132 else
133 return `sed "$sc" ldscripts/${EMULATION_NAME}.x`;
134 }
135 EOF
136
137 else
138 # Scripts read from the filesystem.
139
140 cat >>e${EMULATION_NAME}.c <<EOF
141 {
142 *isfile = 1;
143
144 if (link_info.relocateable == true && config.build_constructors == true)
145 return "ldscripts/${EMULATION_NAME}.xu";
146 else if (link_info.relocateable == true)
147 return "ldscripts/${EMULATION_NAME}.xr";
148 else if (!config.text_read_only)
149 return "ldscripts/${EMULATION_NAME}.xbn";
150 else if (!config.magic_demand_paged)
151 return "ldscripts/${EMULATION_NAME}.xn";
152 else
153 return "ldscripts/${EMULATION_NAME}.x";
154 }
155 EOF
156
157 fi
158
159 cat >>e${EMULATION_NAME}.c <<EOF
160
161 struct ld_emulation_xfer_struct ld_gld960_emulation =
162 {
163 gld960_before_parse,
164 syslib_default,
165 hll_default,
166 after_parse_default,
167 after_open_default,
168 after_allocation_default,
169 gld960_set_output_arch,
170 gld960_choose_target,
171 before_allocation_default,
172 gld960_get_script,
173 "960",
174 ""
175 };
176 EOF