Implement new command line option for new ABI: -p which prevents the ARM code
[deliverable/binutils-gdb.git] / ld / emultempl / armcoff.em
CommitLineData
252b5132
RH
1# This shell script emits a C file. -*- C -*-
2# It does some substitutions.
3cat >e${EMULATION_NAME}.c <<EOF
4/* This file is is generated by a shell script. DO NOT EDIT! */
5
6/* emulate the original gld for the given ${EMULATION_NAME}
7 Copyright (C) 1991, 93, 96, 97, 1998 Free Software Foundation, Inc.
8 Written by Steve Chamberlain steve@cygnus.com
9
10This file is part of GLD, the Gnu Linker.
11
12This program is free software; you can redistribute it and/or modify
13it under the terms of the GNU General Public License as published by
14the Free Software Foundation; either version 2 of the License, or
15(at your option) any later version.
16
17This program is distributed in the hope that it will be useful,
18but WITHOUT ANY WARRANTY; without even the implied warranty of
19MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20GNU General Public License for more details.
21
22You should have received a copy of the GNU General Public License
23along with this program; if not, write to the Free Software
24Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25
26#define TARGET_IS_${EMULATION_NAME}
27
28#include "bfd.h"
29#include "sysdep.h"
30#include "bfdlink.h"
31#include "getopt.h"
32
33#include "ld.h"
34#include "ldmain.h"
35#include "ldemul.h"
36#include "ldfile.h"
37#include "ldmisc.h"
38
39#include "ldexp.h"
40#include "ldlang.h"
41
42static void gld${EMULATION_NAME}_before_parse PARAMS ((void));
43static void gld${EMULATION_NAME}_before_allocation PARAMS ((void));
44static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));
45static int gld${EMULATION_NAME}_parse_args PARAMS((int, char **));
229cf42b 46static void gld${EMULATION_NAME}_list_options PARAMS ((FILE *));
252b5132
RH
47
48/* If true, then interworking stubs which support calls to old, non-interworking
49 aware ARM code should be generated. */
50
51static int support_old_code = 0;
52
53#define OPTION_SUPPORT_OLD_CODE 300
54
55static struct option longopts[] =
56{
57 {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
58 {NULL, no_argument, NULL, 0}
59};
60
61static void
62gld${EMULATION_NAME}_list_options (file)
63 FILE * file;
64{
65 fprintf (file, _(" --support-old-code Support interworking with old code\n"));
66}
67
68static int
69gld${EMULATION_NAME}_parse_args (argc, argv)
70 int argc;
71 char ** argv;
72{
73 int longind;
74 int optc;
75 int prevoptind = optind;
76 int prevopterr = opterr;
77 int wanterror;
78 static int lastoptind = -1;
79
80 if (lastoptind != optind)
81 opterr = 0;
82
83 wanterror = opterr;
84 lastoptind = optind;
85
86 optc = getopt_long_only (argc, argv, "-", longopts, & longind);
87 opterr = prevopterr;
88
89 switch (optc)
90 {
91 default:
92 if (wanterror)
93 xexit (1);
94 optind = prevoptind;
95 return 0;
96
97 case OPTION_SUPPORT_OLD_CODE:
98 support_old_code = 1;
99 break;
100 }
101
102 return 1;
103}
104\f
105static void
106gld${EMULATION_NAME}_before_parse ()
107{
108#ifndef TARGET_ /* I.e., if not generic. */
109 ldfile_set_output_arch ("`echo ${ARCH}`");
110#endif /* not TARGET_ */
111}
112
113/* This is called after the sections have been attached to output
114 sections, but before any sizes or addresses have been set. */
115
116static void
117gld${EMULATION_NAME}_before_allocation ()
118{
119 /* we should be able to set the size of the interworking stub section */
120
121 /* Here we rummage through the found bfds to collect glue information */
122 /* FIXME: should this be based on a command line option? krk@cygnus.com */
123 {
124 LANG_FOR_EACH_INPUT_STATEMENT (is)
125 {
126 if (! bfd_arm_process_before_allocation
127 (is->the_bfd, & link_info, support_old_code))
128 {
129 /* xgettext:c-format */
130 einfo (_("Errors encountered processing file %s"), is->filename);
131 }
132 }
133 }
134
135 /* We have seen it all. Allocate it, and carry on */
136 bfd_arm_allocate_interworking_sections (& link_info);
137}
138
139static void
140gld${EMULATION_NAME}_after_open ()
141{
142 LANG_FOR_EACH_INPUT_STATEMENT (is)
143 {
144 if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
145 break;
146 }
147}
148
149static char *
150gld${EMULATION_NAME}_get_script (isfile)
151 int *isfile;
152EOF
153
154if test -n "$COMPILE_IN"
155then
156# Scripts compiled in.
157
158# sed commands to quote an ld script as a C string.
159sc="-f ${srcdir}/emultempl/stringify.sed"
160
161cat >>e${EMULATION_NAME}.c <<EOF
162{
163 *isfile = 0;
164
165 if (link_info.relocateable == true && config.build_constructors == true)
166 return
167EOF
168sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
169echo ' ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c
170sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
171echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
172sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
173echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
174sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
175echo ' ; else return' >> e${EMULATION_NAME}.c
176sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
177echo '; }' >> e${EMULATION_NAME}.c
178
179else
180# Scripts read from the filesystem.
181
182cat >>e${EMULATION_NAME}.c <<EOF
183{
184 *isfile = 1;
185
186 if (link_info.relocateable == true && config.build_constructors == true)
187 return "ldscripts/${EMULATION_NAME}.xu";
188 else if (link_info.relocateable == true)
189 return "ldscripts/${EMULATION_NAME}.xr";
190 else if (!config.text_read_only)
191 return "ldscripts/${EMULATION_NAME}.xbn";
192 else if (!config.magic_demand_paged)
193 return "ldscripts/${EMULATION_NAME}.xn";
194 else
195 return "ldscripts/${EMULATION_NAME}.x";
196}
197EOF
198
199fi
200
201cat >>e${EMULATION_NAME}.c <<EOF
202
203struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
204{
205 gld${EMULATION_NAME}_before_parse,
206 syslib_default,
207 hll_default,
208 after_parse_default,
209 gld${EMULATION_NAME}_after_open,
210 after_allocation_default,
211 set_output_arch_default,
212 ldemul_default_target,
213 gld${EMULATION_NAME}_before_allocation,
214 gld${EMULATION_NAME}_get_script,
215 "${EMULATION_NAME}",
216 "${OUTPUT_FORMAT}",
217 NULL, /* finish */
218 NULL, /* create output section statements */
219 NULL, /* open dynamic archive */
220 NULL, /* place orphan */
221 NULL, /* set_symbols */
222 gld${EMULATION_NAME}_parse_args,
223 NULL, /* unrecognised file */
224 gld${EMULATION_NAME}_list_options
225};
226EOF
This page took 0.032446 seconds and 4 git commands to generate.