]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/emultempl/gld960c.em
ELF: Call check_relocs after opening all inputs
[thirdparty/binutils-gdb.git] / ld / emultempl / gld960c.em
CommitLineData
252b5132
RH
1# This shell script emits a C file. -*- C -*-
2# It does some substitutions.
92b93329 3fragment <<EOF
2571583a 4/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
252b5132 5
f96b4a7b 6 This file is part of the GNU Binutils.
252b5132 7
f96b4a7b
NC
8 This program 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 3 of the License, or
11 (at your option) any later version.
252b5132 12
f96b4a7b
NC
13 This program 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.
252b5132 17
f96b4a7b
NC
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
252b5132 22
252b5132 23
f96b4a7b 24/* Emulate the Intel's port of gld. */
252b5132 25
252b5132 26#include "sysdep.h"
3db64b00 27#include "bfd.h"
252b5132 28#include "libiberty.h"
3882b010 29#include "safe-ctype.h"
252b5132
RH
30#include "bfdlink.h"
31
32#include "ld.h"
252b5132
RH
33#include "ldmisc.h"
34#include "ldmain.h"
35
b71e2778
AM
36#include "ldexp.h"
37#include "ldlang.h"
38#include "ldfile.h"
39#include "ldemul.h"
40
0c7a8e5a 41static void gld960_before_parse (void)
252b5132
RH
42{
43 char *env ;
44 env = getenv("G960LIB");
45 if (env) {
b34976b6 46 ldfile_add_library_path(env, FALSE);
252b5132
RH
47 }
48 env = getenv("G960BASE");
49 if (env)
50 ldfile_add_library_path (concat (env, "/lib", (const char *) NULL),
b34976b6 51 FALSE);
252b5132
RH
52 ldfile_output_architecture = bfd_arch_i960;
53}
54
252b5132 55static void
0c7a8e5a 56gld960_set_output_arch (void)
252b5132
RH
57{
58 if (ldfile_output_machine_name != NULL
59 && *ldfile_output_machine_name != '\0')
60 {
61 char *s, *s1;
62
63 s = concat ("i960:", ldfile_output_machine_name, (char *) NULL);
64 for (s1 = s; *s1 != '\0'; s1++)
3882b010 65 *s1 = TOLOWER (*s1);
5e2f1575 66 ldfile_set_output_arch (s, bfd_arch_unknown);
252b5132
RH
67 free (s);
68 }
69
70 set_output_arch_default ();
71}
72
73static char *
0c7a8e5a 74gld960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
252b5132 75{
252b5132
RH
76 char *from_outside = getenv(TARGET_ENVIRON);
77 output_filename = "b.out";
78
79 if (from_outside != (char *)NULL)
80 return from_outside;
81
82 return "coff-Intel-little";
252b5132
RH
83}
84
85static char *
0c7a8e5a 86gld960_get_script (int *isfile)
252b5132
RH
87EOF
88
7225345d 89if test x"$COMPILE_IN" = xyes
252b5132
RH
90then
91# Scripts compiled in.
92
93# sed commands to quote an ld script as a C string.
597e2591 94sc="-f stringify.sed"
252b5132 95
92b93329 96fragment <<EOF
5e2f1575 97{
252b5132
RH
98 *isfile = 0;
99
0e1862bb 100 if (bfd_link_relocatable (&link_info) && config.build_constructors)
597e2591 101 return
252b5132 102EOF
b34976b6 103sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
0e1862bb 104echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
b34976b6
AM
105sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
106echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
107sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
108echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
109sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
110echo ' ; else return' >> e${EMULATION_NAME}.c
111sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
112echo '; }' >> e${EMULATION_NAME}.c
252b5132
RH
113
114else
115# Scripts read from the filesystem.
116
92b93329 117fragment <<EOF
5e2f1575 118{
252b5132
RH
119 *isfile = 1;
120
0e1862bb 121 if (bfd_link_relocatable (&link_info) && config.build_constructors)
252b5132 122 return "ldscripts/${EMULATION_NAME}.xu";
0e1862bb 123 else if (bfd_link_relocatable (&link_info))
252b5132
RH
124 return "ldscripts/${EMULATION_NAME}.xr";
125 else if (!config.text_read_only)
126 return "ldscripts/${EMULATION_NAME}.xbn";
127 else if (!config.magic_demand_paged)
128 return "ldscripts/${EMULATION_NAME}.xn";
129 else
130 return "ldscripts/${EMULATION_NAME}.x";
131}
132EOF
133
134fi
135
92b93329 136fragment <<EOF
252b5132 137
5e2f1575 138struct ld_emulation_xfer_struct ld_gld960coff_emulation =
252b5132
RH
139{
140 gld960_before_parse,
141 syslib_default,
142 hll_default,
143 after_parse_default,
144 after_open_default,
5c3261b0 145 after_check_relocs_default,
252b5132
RH
146 after_allocation_default,
147 gld960_set_output_arch,
148 gld960_choose_target,
149 before_allocation_default,
150 gld960_get_script,
151 "960coff",
e1c47aa4 152 "",
1e035701 153 finish_default,
e1c47aa4
AM
154 NULL, /* create output section statements */
155 NULL, /* open dynamic archive */
156 NULL, /* place orphan */
157 NULL, /* set symbols */
158 NULL, /* parse args */
3bcf5557
AM
159 NULL, /* add_options */
160 NULL, /* handle_option */
e1c47aa4
AM
161 NULL, /* unrecognized file */
162 NULL, /* list options */
40d109bf 163 NULL, /* recognized file */
fac1652d 164 NULL, /* find_potential_libraries */
7a2f2d82
DD
165 NULL, /* new_vers_pattern */
166 NULL /* extra_map_file_text */
252b5132
RH
167};
168EOF