1 # This shell script emits a C file. -*- C -*-
2 # It does some substitutions.
3 cat >e${EMULATION_NAME}.c <<EOF
4 /* This file is is generated by a shell script. DO NOT EDIT! */
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
10 This file is part of GLD, the Gnu Linker.
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
26 #define TARGET_IS_${EMULATION_NAME}
42 static void gld${EMULATION_NAME}_before_parse PARAMS ((void));
43 static void gld${EMULATION_NAME}_before_allocation PARAMS ((void));
44 static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));
45 static int gld${EMULATION_NAME}_parse_args PARAMS((int, char **));
46 static void gld_${EMULATION_NAME}_list_options PARAMS ((FILE *));
48 /* If true, then interworking stubs which support calls to old, non-interworking
49 aware ARM code should be generated. */
51 static int support_old_code = 0;
53 #define OPTION_SUPPORT_OLD_CODE 300
55 static struct option longopts[] =
57 {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
58 {NULL, no_argument, NULL, 0}
62 gld${EMULATION_NAME}_list_options (file)
65 fprintf (file, _(" --support-old-code Support interworking with old code\n"));
69 gld${EMULATION_NAME}_parse_args (argc, argv)
75 int prevoptind = optind;
76 int prevopterr = opterr;
78 static int lastoptind = -1;
80 if (lastoptind != optind)
86 optc = getopt_long_only (argc, argv, "-", longopts, & longind);
97 case OPTION_SUPPORT_OLD_CODE:
106 gld${EMULATION_NAME}_before_parse ()
108 #ifndef TARGET_ /* I.e., if not generic. */
109 ldfile_set_output_arch ("`echo ${ARCH}`");
110 #endif /* not TARGET_ */
113 /* This is called after the sections have been attached to output
114 sections, but before any sizes or addresses have been set. */
117 gld${EMULATION_NAME}_before_allocation ()
119 /* we should be able to set the size of the interworking stub section */
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 */
124 LANG_FOR_EACH_INPUT_STATEMENT (is)
126 if (! bfd_arm_process_before_allocation
127 (is->the_bfd, & link_info, support_old_code))
129 /* xgettext:c-format */
130 einfo (_("Errors encountered processing file %s"), is->filename);
135 /* We have seen it all. Allocate it, and carry on */
136 bfd_arm_allocate_interworking_sections (& link_info);
140 gld${EMULATION_NAME}_after_open ()
142 LANG_FOR_EACH_INPUT_STATEMENT (is)
144 if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
150 gld${EMULATION_NAME}_get_script (isfile)
154 if test -n "$COMPILE_IN"
156 # Scripts compiled in.
158 # sed commands to quote an ld script as a C string.
159 sc="-f ${srcdir}/emultempl/stringify.sed"
161 cat >>e${EMULATION_NAME}.c <<EOF
165 if (link_info.relocateable == true && config.build_constructors == true)
168 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
169 echo ' ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c
170 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
171 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
172 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
173 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
174 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
175 echo ' ; else return' >> e${EMULATION_NAME}.c
176 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
177 echo '; }' >> e${EMULATION_NAME}.c
180 # Scripts read from the filesystem.
182 cat >>e${EMULATION_NAME}.c <<EOF
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";
195 return "ldscripts/${EMULATION_NAME}.x";
201 cat >>e${EMULATION_NAME}.c <<EOF
203 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
205 gld${EMULATION_NAME}_before_parse,
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,
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