]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/emultempl/linux.em
Emit a warning when -z relro is unsupported
[thirdparty/binutils-gdb.git] / ld / emultempl / linux.em
CommitLineData
252b5132
RH
1# This shell script emits a C file. -*- C -*-
2# It does some substitutions.
b34976b6 3if [ -z "$MACHINE" ]; then
86af25fe
L
4 OUTPUT_ARCH=${ARCH}
5else
6 OUTPUT_ARCH=${ARCH}:${MACHINE}
7fi
92b93329 8fragment <<EOF
252b5132
RH
9/* This file is is generated by a shell script. DO NOT EDIT! */
10
11/* Linux a.out emulation code for ${EMULATION_NAME}
b3adc24a 12 Copyright (C) 1991-2020 Free Software Foundation, Inc.
252b5132
RH
13 Written by Steve Chamberlain <sac@cygnus.com>
14 Linux support by Eric Youngdale <ericy@cais.cais.com>
15
f96b4a7b 16 This file is part of the GNU Binutils.
252b5132 17
f96b4a7b
NC
18 This program is free software; you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation; either version 3 of the License, or
21 (at your option) any later version.
252b5132 22
f96b4a7b
NC
23 This program is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 GNU General Public License for more details.
252b5132 27
f96b4a7b
NC
28 You should have received a copy of the GNU General Public License
29 along with this program; if not, write to the Free Software
30 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
31 MA 02110-1301, USA. */
252b5132
RH
32
33#define TARGET_IS_${EMULATION_NAME}
34
252b5132 35#include "sysdep.h"
3db64b00 36#include "bfd.h"
252b5132 37#include "bfdlink.h"
1ff6de03 38#include "ctf-api.h"
252b5132
RH
39
40#include "ld.h"
41#include "ldmain.h"
252b5132
RH
42#include "ldmisc.h"
43#include "ldexp.h"
44#include "ldlang.h"
b71e2778
AM
45#include "ldfile.h"
46#include "ldemul.h"
252b5132 47
252b5132 48static void
0c7a8e5a 49gld${EMULATION_NAME}_before_parse (void)
252b5132 50{
5e2f1575 51 ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
66be1055 52 input_flags.dynamic = TRUE;
b34976b6 53 config.has_shared = TRUE;
5c3261b0 54 link_info.check_relocs_after_open_input = TRUE;
5fd104ad
AM
55EOF
56if test -n "$COMMONPAGESIZE"; then
57fragment <<EOF
576438f0 58 link_info.relro = DEFAULT_LD_Z_RELRO;
5fd104ad
AM
59EOF
60fi
61fragment <<EOF
252b5132
RH
62}
63
64/* Try to open a dynamic archive. This is where we know that Linux
65 dynamic libraries have an extension of .sa. */
66
b34976b6 67static bfd_boolean
0c7a8e5a
AM
68gld${EMULATION_NAME}_open_dynamic_archive
69 (const char *arch, search_dirs_type *search, lang_input_statement_type *entry)
252b5132
RH
70{
71 char *string;
72
d4ae5fb0 73 if (! entry->flags.maybe_archive || entry->flags.full_name_provided)
b34976b6 74 return FALSE;
252b5132
RH
75
76 string = (char *) xmalloc (strlen (search->name)
77 + strlen (entry->filename)
78 + strlen (arch)
79 + sizeof "/lib.sa");
80
81 sprintf (string, "%s/lib%s%s.sa", search->name, entry->filename, arch);
82
83 if (! ldfile_try_open_bfd (string, entry))
84 {
85 free (string);
b34976b6 86 return FALSE;
252b5132
RH
87 }
88
89 entry->filename = string;
90
b34976b6 91 return TRUE;
252b5132
RH
92}
93
94/* This is called by the create_output_section_statements routine via
95 lang_for_each_statement. It locates any address assignment to
96 .text, and modifies it to include the size of the headers. This
97 causes -Ttext to mean the starting address of the header, rather
98 than the starting address of .text, which is compatible with other
99 Linux tools. */
100
101static void
0c7a8e5a 102gld${EMULATION_NAME}_find_address_statement (lang_statement_union_type *s)
252b5132
RH
103{
104 if (s->header.type == lang_address_statement_enum
105 && strcmp (s->address_statement.section_name, ".text") == 0)
106 {
107 ASSERT (s->address_statement.address->type.node_class == etree_value);
108 s->address_statement.address->value.value += 0x20;
109 }
110}
111
112/* This is called before opening the input BFD's. */
113
114static void
0c7a8e5a 115gld${EMULATION_NAME}_create_output_section_statements (void)
252b5132
RH
116{
117 lang_for_each_statement (gld${EMULATION_NAME}_find_address_statement);
118}
119
120/* This is called after the sections have been attached to output
121 sections, but before any sizes or addresses have been set. */
122
123static void
0c7a8e5a 124gld${EMULATION_NAME}_before_allocation (void)
252b5132 125{
0e1862bb 126 if (bfd_link_relocatable (&link_info))
252b5132
RH
127 return;
128
129 /* Let the backend work out the sizes of any sections required by
130 dynamic linking. */
f13a99db
AM
131 if (! bfd_${EMULATION_NAME}_size_dynamic_sections (link_info.output_bfd,
132 &link_info))
df5f2391 133 einfo (_("%F%P: failed to set dynamic section sizes: %E\n"));
8423293d 134
1e035701 135 before_allocation_default ();
252b5132
RH
136}
137
138static char *
0c7a8e5a 139gld${EMULATION_NAME}_get_script (int *isfile)
252b5132
RH
140EOF
141
7225345d 142if test x"$COMPILE_IN" = xyes
252b5132
RH
143then
144# Scripts compiled in.
145
146# sed commands to quote an ld script as a C string.
597e2591 147sc="-f stringify.sed"
252b5132 148
92b93329 149fragment <<EOF
b34976b6 150{
252b5132
RH
151 *isfile = 0;
152
0e1862bb 153 if (bfd_link_relocatable (&link_info) && config.build_constructors)
597e2591 154 return
252b5132 155EOF
b34976b6 156sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
0e1862bb 157echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
b34976b6
AM
158sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
159echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
160sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
161echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
162sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
163echo ' ; else return' >> e${EMULATION_NAME}.c
164sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
165echo '; }' >> e${EMULATION_NAME}.c
252b5132
RH
166
167else
168# Scripts read from the filesystem.
169
92b93329 170fragment <<EOF
b34976b6 171{
252b5132
RH
172 *isfile = 1;
173
0e1862bb 174 if (bfd_link_relocatable (&link_info) && config.build_constructors)
252b5132 175 return "ldscripts/${EMULATION_NAME}.xu";
0e1862bb 176 else if (bfd_link_relocatable (&link_info))
252b5132
RH
177 return "ldscripts/${EMULATION_NAME}.xr";
178 else if (!config.text_read_only)
179 return "ldscripts/${EMULATION_NAME}.xbn";
180 else if (!config.magic_demand_paged)
181 return "ldscripts/${EMULATION_NAME}.xn";
182 else
183 return "ldscripts/${EMULATION_NAME}.x";
184}
185EOF
186
187fi
188
92b93329 189fragment <<EOF
252b5132 190
b34976b6 191struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
252b5132
RH
192{
193 gld${EMULATION_NAME}_before_parse,
194 syslib_default,
195 hll_default,
196 after_parse_default,
197 after_open_default,
5c3261b0 198 after_check_relocs_default,
9b538ba7 199 before_place_orphans_default,
252b5132
RH
200 after_allocation_default,
201 set_output_arch_default,
202 ldemul_default_target,
203 gld${EMULATION_NAME}_before_allocation,
204 gld${EMULATION_NAME}_get_script,
205 "${EMULATION_NAME}",
206 "${OUTPUT_FORMAT}",
1e035701 207 finish_default,
252b5132 208 gld${EMULATION_NAME}_create_output_section_statements,
49bdcdba 209 gld${EMULATION_NAME}_open_dynamic_archive,
e1c47aa4
AM
210 NULL, /* place orphan */
211 NULL, /* set symbols */
212 NULL, /* parse args */
3bcf5557
AM
213 NULL, /* add_options */
214 NULL, /* handle_option */
e1c47aa4
AM
215 NULL, /* unrecognized file */
216 NULL, /* list options */
40d109bf 217 NULL, /* recognized file */
fac1652d 218 NULL, /* find_potential_libraries */
7a2f2d82 219 NULL, /* new_vers_pattern */
1ff6de03
NA
220 NULL, /* extra_map_file_text */
221 ${LDEMUL_EMIT_CTF_EARLY-NULL},
3edf7b9f
DR
222 ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL},
223 ${LDEMUL_PRINT_SYMBOL-NULL}
252b5132
RH
224};
225EOF