blob: f68ae27b409aee839a7bf1887bb46f728f36cdd3 [file] [log] [blame]
Richard Henderson252b5131999-05-03 07:29:11 +00001/* ldlang.h - linker command language support
Alan Modra250d07d2021-01-01 09:28:58 +10302 Copyright (C) 1991-2021 Free Software Foundation, Inc.
Kazu Hirata5cc18312000-09-29 13:21:41 +00003
Nick Cliftonf96b4a72007-07-06 14:09:45 +00004 This file is part of the GNU Binutils.
Kazu Hirata5cc18312000-09-29 13:21:41 +00005
Nick Cliftonf96b4a72007-07-06 14:09:45 +00006 This program is free software; you can redistribute it and/or modify
Richard Henderson252b5131999-05-03 07:29:11 +00007 it under the terms of the GNU General Public License as published by
Nick Cliftonf96b4a72007-07-06 14:09:45 +00008 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
Kazu Hirata5cc18312000-09-29 13:21:41 +000010
Nick Cliftonf96b4a72007-07-06 14:09:45 +000011 This program is distributed in the hope that it will be useful,
Richard Henderson252b5131999-05-03 07:29:11 +000012 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
Kazu Hirata5cc18312000-09-29 13:21:41 +000015
Richard Henderson252b5131999-05-03 07:29:11 +000016 You should have received a copy of the GNU General Public License
Nick Cliftonf96b4a72007-07-06 14:09:45 +000017 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
Richard Henderson252b5131999-05-03 07:29:11 +000020
21#ifndef LDLANG_H
22#define LDLANG_H
23
Nick Cliftona747ee42003-10-21 15:33:47 +000024#define DEFAULT_MEMORY_REGION "*default*"
25
Douglas B Rupp3edf7b92020-05-18 21:29:53 +093026#define SECTION_NAME_MAP_LENGTH (16)
27
Nick Clifton6bdafbe2004-01-13 11:10:53 +000028typedef enum
29{
Richard Henderson252b5131999-05-03 07:29:11 +000030 lang_input_file_is_l_enum,
31 lang_input_file_is_symbols_only_enum,
32 lang_input_file_is_marker_enum,
33 lang_input_file_is_fake_enum,
34 lang_input_file_is_search_file_enum,
35 lang_input_file_is_file_enum
36} lang_input_file_enum_type;
37
Nick Clifton6bdafbe2004-01-13 11:10:53 +000038struct _fill_type
39{
Alan Modra2c382fb2002-02-15 02:11:05 +000040 size_t size;
41 unsigned char data[1];
42};
Kazu Hirata89cdebb2000-10-09 15:09:17 +000043
Nick Clifton6bdafbe2004-01-13 11:10:53 +000044typedef struct statement_list
45{
Nick Clifton4a93e182009-03-02 17:27:36 +000046 union lang_statement_union * head;
47 union lang_statement_union ** tail;
Richard Henderson252b5131999-05-03 07:29:11 +000048} lang_statement_list_type;
49
Nick Clifton4a93e182009-03-02 17:27:36 +000050typedef struct memory_region_name_struct
51{
52 const char * name;
53 struct memory_region_name_struct * next;
54} lang_memory_region_name;
55
Nick Clifton6bdafbe2004-01-13 11:10:53 +000056typedef struct memory_region_struct
57{
Nick Clifton4a93e182009-03-02 17:27:36 +000058 lang_memory_region_name name_list;
Richard Henderson252b5131999-05-03 07:29:11 +000059 struct memory_region_struct *next;
Senthil Kumar Selvarajcc9ad332015-01-28 15:01:50 +103060 union etree_union *origin_exp;
Richard Henderson252b5131999-05-03 07:29:11 +000061 bfd_vma origin;
62 bfd_size_type length;
Senthil Kumar Selvarajcc9ad332015-01-28 15:01:50 +103063 union etree_union *length_exp;
Richard Henderson252b5131999-05-03 07:29:11 +000064 bfd_vma current;
Alan Modra66e28d62006-07-26 05:05:52 +000065 union lang_statement_union *last_os;
Richard Henderson252b5131999-05-03 07:29:11 +000066 flagword flags;
67 flagword not_flags;
Alan Modraf38a2682021-03-31 10:39:51 +103068 bool had_full_message;
Kazu Hirata89cdebb2000-10-09 15:09:17 +000069} lang_memory_region_type;
Richard Henderson252b5131999-05-03 07:29:11 +000070
Nick Clifton1e9cc1c2009-09-11 15:27:38 +000071enum statement_enum
72{
Nick Clifton1e9cc1c2009-09-11 15:27:38 +000073 lang_address_statement_enum,
Alan Modradc028482019-08-10 13:02:49 +093074 lang_assignment_statement_enum,
Nick Clifton1e9cc1c2009-09-11 15:27:38 +000075 lang_data_statement_enum,
Alan Modradc028482019-08-10 13:02:49 +093076 lang_fill_statement_enum,
77 lang_group_statement_enum,
78 lang_input_section_enum,
79 lang_input_statement_enum,
80 lang_insert_statement_enum,
81 lang_output_section_statement_enum,
Nick Clifton1e9cc1c2009-09-11 15:27:38 +000082 lang_output_statement_enum,
83 lang_padding_statement_enum,
Alan Modradc028482019-08-10 13:02:49 +093084 lang_reloc_statement_enum,
85 lang_target_statement_enum,
86 lang_wild_statement_enum,
87 lang_constructors_statement_enum,
88 lang_object_symbols_statement_enum
Nick Clifton1e9cc1c2009-09-11 15:27:38 +000089};
90
Nick Clifton6bdafbe2004-01-13 11:10:53 +000091typedef struct lang_statement_header_struct
92{
Thomas Preud'hommee368bf52018-11-29 13:42:49 +000093 /* Next pointer for statement_list statement list. */
Kazu Hirata89cdebb2000-10-09 15:09:17 +000094 union lang_statement_union *next;
Nick Clifton1e9cc1c2009-09-11 15:27:38 +000095 enum statement_enum type;
Richard Henderson252b5131999-05-03 07:29:11 +000096} lang_statement_header_type;
97
Nick Clifton6bdafbe2004-01-13 11:10:53 +000098typedef struct
99{
Richard Henderson252b5131999-05-03 07:29:11 +0000100 lang_statement_header_type header;
101 union etree_union *exp;
102} lang_assignment_statement_type;
103
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000104typedef struct lang_target_statement_struct
105{
Richard Henderson252b5131999-05-03 07:29:11 +0000106 lang_statement_header_type header;
107 const char *target;
108} lang_target_statement_type;
109
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000110typedef struct lang_output_statement_struct
111{
Richard Henderson252b5131999-05-03 07:29:11 +0000112 lang_statement_header_type header;
113 const char *name;
114} lang_output_statement_type;
115
116/* Section types specified in a linker script. */
117
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000118enum section_type
119{
Richard Henderson252b5131999-05-03 07:29:11 +0000120 normal_section,
Alan Modra7b243802019-07-10 23:35:18 +0930121 first_overlay_section,
Alan Modra152d7922007-04-18 03:55:10 +0000122 overlay_section,
Richard Henderson252b5131999-05-03 07:29:11 +0000123 noload_section,
Luca Boccassi6b86da52021-07-21 14:32:03 +0100124 noalloc_section,
125 readonly_section
Richard Henderson252b5131999-05-03 07:29:11 +0000126};
127
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000128/* This structure holds a list of program headers describing
129 segments in which this section should be placed. */
Richard Henderson252b5131999-05-03 07:29:11 +0000130
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000131typedef struct lang_output_section_phdr_list
132{
Richard Henderson252b5131999-05-03 07:29:11 +0000133 struct lang_output_section_phdr_list *next;
134 const char *name;
Alan Modraf38a2682021-03-31 10:39:51 +1030135 bool used;
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000136} lang_output_section_phdr_list;
Richard Henderson252b5131999-05-03 07:29:11 +0000137
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000138typedef struct lang_output_section_statement_struct
139{
Richard Henderson252b5131999-05-03 07:29:11 +0000140 lang_statement_header_type header;
Richard Henderson252b5131999-05-03 07:29:11 +0000141 lang_statement_list_type children;
Alan Modraafd7a012004-10-14 12:54:47 +0000142 struct lang_output_section_statement_struct *next;
Alan Modra218868b2005-12-24 07:48:30 +0000143 struct lang_output_section_statement_struct *prev;
Richard Henderson252b5131999-05-03 07:29:11 +0000144 const char *name;
Richard Henderson252b5131999-05-03 07:29:11 +0000145 asection *bfd_section;
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000146 lang_memory_region_type *region;
147 lang_memory_region_type *lma_region;
Alan Modra2c382fb2002-02-15 02:11:05 +0000148 fill_type *fill;
Alan Modra7fabd022005-11-03 02:54:10 +0000149 union etree_union *addr_tree;
Richard Henderson252b5131999-05-03 07:29:11 +0000150 union etree_union *load_base;
Alan Modra3d9c8f62018-08-26 14:23:38 +0930151 union etree_union *section_alignment;
152 union etree_union *subsection_alignment;
Richard Henderson252b5131999-05-03 07:29:11 +0000153
Richard Sandiford9f88b412002-05-07 11:04:54 +0000154 /* If non-null, an expression to evaluate after setting the section's
155 size. The expression is evaluated inside REGION (above) with '.'
156 set to the end of the section. Used in the last overlay section
157 to move '.' past all the overlaid sections. */
158 union etree_union *update_dot_tree;
159
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000160 lang_output_section_phdr_list *phdrs;
Alan Modra7fabd022005-11-03 02:54:10 +0000161
Alan Modrab209b5a2021-01-13 13:33:34 +1030162 /* Used by ELF SHF_LINK_ORDER sorting. */
163 void *data;
164
Alan Modra7fabd022005-11-03 02:54:10 +0000165 unsigned int block_value;
Alan Modra7fabd022005-11-03 02:54:10 +0000166 int constraint;
167 flagword flags;
168 enum section_type sectype;
Alan Modracde9e0b2006-08-16 08:31:45 +0000169 unsigned int processed_vma : 1;
170 unsigned int processed_lma : 1;
Alan Modra7fabd022005-11-03 02:54:10 +0000171 unsigned int all_input_readonly : 1;
H.J. Lu49c13ad2006-09-27 04:18:16 +0000172 /* If this section should be ignored. */
H.J. Lue4492aa2013-01-10 20:08:03 +0000173 unsigned int ignored : 1;
Alan Modra6d8bf252012-05-30 04:19:11 +0000174 /* If this section should update "dot". Prevents section being ignored. */
H.J. Lue4492aa2013-01-10 20:08:03 +0000175 unsigned int update_dot : 1;
Alan Modrad2667022012-06-15 15:13:41 +0000176 /* If this section is after assignment to _end. */
177 unsigned int after_end : 1;
Nick Clifton1eec3462013-07-19 10:39:51 +0000178 /* If this section uses the alignment of its input sections. */
179 unsigned int align_lma_with_input : 1;
Alan Modrade34d422020-12-24 15:56:23 +1030180 /* If script has duplicate output section statements of the same name
181 create duplicate output sections. */
182 unsigned int dup_output : 1;
Richard Henderson252b5131999-05-03 07:29:11 +0000183} lang_output_section_statement_type;
184
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000185typedef struct
186{
Richard Henderson252b5131999-05-03 07:29:11 +0000187 lang_statement_header_type header;
Alan Modra2c382fb2002-02-15 02:11:05 +0000188 fill_type *fill;
Richard Henderson252b5131999-05-03 07:29:11 +0000189 int size;
190 asection *output_section;
191} lang_fill_statement_type;
192
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000193typedef struct
194{
Richard Henderson252b5131999-05-03 07:29:11 +0000195 lang_statement_header_type header;
196 unsigned int type;
Kazu Hirata89cdebb2000-10-09 15:09:17 +0000197 union etree_union *exp;
Richard Henderson252b5131999-05-03 07:29:11 +0000198 bfd_vma value;
199 asection *output_section;
Alan Modra7fabd022005-11-03 02:54:10 +0000200 bfd_vma output_offset;
Richard Henderson252b5131999-05-03 07:29:11 +0000201} lang_data_statement_type;
202
203/* Generate a reloc in the output file. */
204
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000205typedef struct
206{
Richard Henderson252b5131999-05-03 07:29:11 +0000207 lang_statement_header_type header;
208
209 /* Reloc to generate. */
210 bfd_reloc_code_real_type reloc;
211
212 /* Reloc howto structure. */
213 reloc_howto_type *howto;
214
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000215 /* Section to generate reloc against.
216 Exactly one of section and name must be NULL. */
Richard Henderson252b5131999-05-03 07:29:11 +0000217 asection *section;
218
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000219 /* Name of symbol to generate reloc against.
220 Exactly one of section and name must be NULL. */
Richard Henderson252b5131999-05-03 07:29:11 +0000221 const char *name;
222
223 /* Expression for addend. */
224 union etree_union *addend_exp;
225
226 /* Resolved addend. */
227 bfd_vma addend_value;
228
229 /* Output section where reloc should be performed. */
230 asection *output_section;
231
Alan Modra7fabd022005-11-03 02:54:10 +0000232 /* Offset within output section. */
233 bfd_vma output_offset;
Richard Henderson252b5131999-05-03 07:29:11 +0000234} lang_reloc_statement_type;
235
Alan Modra66be1052012-03-05 22:43:40 +0000236struct lang_input_statement_flags
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000237{
Alan Modra66be1052012-03-05 22:43:40 +0000238 /* 1 means this file was specified in a -l option. */
H.J. Lub7f95642010-12-06 00:07:06 +0000239 unsigned int maybe_archive : 1;
Kazu Hirata5cc18312000-09-29 13:21:41 +0000240
Alan Modrad4ae5fb2014-03-14 11:25:59 +1030241 /* 1 means this file was specified in a -l:namespec option. */
242 unsigned int full_name_provided : 1;
243
Richard Henderson252b5131999-05-03 07:29:11 +0000244 /* 1 means search a set of directories for this file. */
Alan Modra66be1052012-03-05 22:43:40 +0000245 unsigned int search_dirs : 1;
Kazu Hirata5cc18312000-09-29 13:21:41 +0000246
Alan Modraf4a23d42012-03-08 05:29:33 +0000247 /* 1 means this was found when processing a script in the sysroot. */
Alan Modra409d7242006-06-09 01:13:39 +0000248 unsigned int sysrooted : 1;
Alexandre Olivae3f2db72003-03-03 20:00:35 +0000249
Richard Henderson252b5131999-05-03 07:29:11 +0000250 /* 1 means this is base file of incremental load.
251 Do not load this file's text or data.
Kazu Hirata5cc18312000-09-29 13:21:41 +0000252 Also default text_start to after this file's bss. */
Alan Modra66be1052012-03-05 22:43:40 +0000253 unsigned int just_syms : 1;
Richard Henderson252b5131999-05-03 07:29:11 +0000254
255 /* Whether to search for this entry as a dynamic archive. */
Alan Modra409d7242006-06-09 01:13:39 +0000256 unsigned int dynamic : 1;
Richard Henderson252b5131999-05-03 07:29:11 +0000257
Alan Modra15fc2e12011-09-20 04:58:56 +0000258 /* Set if a DT_NEEDED tag should be added not just for the dynamic library
259 explicitly given by this entry but also for any dynamic libraries in
260 this entry's needed list. */
Nick Cliftonddbb8a32009-11-05 15:35:50 +0000261 unsigned int add_DT_NEEDED_for_dynamic : 1;
H.J. Lue56f61b2004-07-19 16:40:52 +0000262
Alan Modra15fc2e12011-09-20 04:58:56 +0000263 /* Set if this entry should cause a DT_NEEDED tag only when some
264 regular file references its symbols (ie. --as-needed is in effect). */
Nick Cliftonddbb8a32009-11-05 15:35:50 +0000265 unsigned int add_DT_NEEDED_for_regular : 1;
Alan Modra4a43e762004-03-18 12:50:20 +0000266
Richard Henderson252b5131999-05-03 07:29:11 +0000267 /* Whether to include the entire contents of an archive. */
Alan Modra409d7242006-06-09 01:13:39 +0000268 unsigned int whole_archive : 1;
Richard Henderson252b5131999-05-03 07:29:11 +0000269
Nick Cliftonc4b78192010-01-21 10:31:32 +0000270 /* Set when bfd opening is successful. */
Alan Modra409d7242006-06-09 01:13:39 +0000271 unsigned int loaded : 1;
Kazu Hirata5cc18312000-09-29 13:21:41 +0000272
Alan Modra409d7242006-06-09 01:13:39 +0000273 unsigned int real : 1;
Nick Cliftonc4b78192010-01-21 10:31:32 +0000274
275 /* Set if the file does not exist. */
276 unsigned int missing_file : 1;
Dave Korn5d3236e2010-10-14 01:31:33 +0000277
Alan Modrae77620a2014-08-12 19:29:33 +0930278 /* Set if reloading an archive or --as-needed lib. */
279 unsigned int reload : 1;
280
Alan Modra03819012020-06-21 14:23:46 +0930281#if BFD_SUPPORTS_PLUGINS
Dave Korn5d3236e2010-10-14 01:31:33 +0000282 /* Set if the file was claimed by a plugin. */
283 unsigned int claimed : 1;
284
Dave Korn8543fde2011-03-10 10:25:02 +0000285 /* Set if the file was claimed from an archive. */
286 unsigned int claim_archive : 1;
Alan Modrace875072015-02-14 18:38:32 +1030287
288 /* Set if added by the lto plugin add_input_file callback. */
289 unsigned int lto_output : 1;
Alan Modra03819012020-06-21 14:23:46 +0930290#endif /* BFD_SUPPORTS_PLUGINS */
Ulrich Drepper26278bb2014-08-08 20:26:41 -0400291
292 /* Head of list of pushed flags. */
293 struct lang_input_statement_flags *pushed;
Alan Modra66be1052012-03-05 22:43:40 +0000294};
Dave Korn8543fde2011-03-10 10:25:02 +0000295
Alan Modra66be1052012-03-05 22:43:40 +0000296typedef struct lang_input_statement_struct
297{
298 lang_statement_header_type header;
299 /* Name of this file. */
300 const char *filename;
301 /* Name to use for the symbol giving address of text start.
302 Usually the same as filename, but for a file spec'd with
303 -l this is the -l switch itself rather than the filename. */
304 const char *local_sym_name;
Fangrui Song16171942020-04-22 16:20:02 +0100305 /* Extra search path. Used to find a file relative to the
306 directory of the current linker script. */
307 const char *extra_search_path;
Alan Modra66be1052012-03-05 22:43:40 +0000308
309 bfd *the_bfd;
310
Nick Alcock1ff6de02019-07-13 22:38:00 +0100311 ctf_archive_t *the_ctf;
312
Alan Modra66be1052012-03-05 22:43:40 +0000313 struct flag_info *section_flag_list;
314
Thomas Preud'hommee368bf52018-11-29 13:42:49 +0000315 /* Next pointer for file_chain statement list. */
Alan Modra36983a92019-08-10 10:30:19 +0930316 struct lang_input_statement_struct *next;
Alan Modra66be1052012-03-05 22:43:40 +0000317
Thomas Preud'hommee368bf52018-11-29 13:42:49 +0000318 /* Next pointer for input_file_chain statement list. */
Alan Modra36983a92019-08-10 10:30:19 +0930319 struct lang_input_statement_struct *next_real_file;
Alan Modra66be1052012-03-05 22:43:40 +0000320
321 const char *target;
322
323 struct lang_input_statement_flags flags;
Richard Henderson252b5131999-05-03 07:29:11 +0000324} lang_input_statement_type;
325
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000326typedef struct
327{
Richard Henderson252b5131999-05-03 07:29:11 +0000328 lang_statement_header_type header;
329 asection *section;
Alan Modrab209b5a2021-01-13 13:33:34 +1030330 void *pattern;
Kazu Hirata5cc18312000-09-29 13:21:41 +0000331} lang_input_section_type;
Richard Henderson252b5131999-05-03 07:29:11 +0000332
Alan Modra7dd9c6e2014-01-22 12:51:19 +1030333struct map_symbol_def {
334 struct bfd_link_hash_entry *entry;
335 struct map_symbol_def *next;
336};
337
Alan Modra6fcc66a2014-01-16 11:47:25 +1030338/* For input sections, when writing a map file: head / tail of a linked
339 list of hash table entries for symbols defined in this section. */
340typedef struct input_section_userdata_struct
341{
342 struct map_symbol_def *map_symbol_def_head;
343 struct map_symbol_def **map_symbol_def_tail;
344 unsigned long map_symbol_def_count;
345} input_section_userdata_type;
346
Alan Modraf38a2682021-03-31 10:39:51 +1030347static inline bool
Alan Modra00f93c42019-09-19 11:51:04 +0930348bfd_input_just_syms (const bfd *abfd)
349{
350 lang_input_statement_type *is = bfd_usrdata (abfd);
351 return is != NULL && is->flags.just_syms;
352}
Alan Modra6fcc66a2014-01-16 11:47:25 +1030353
Jakub Jelinek72223182005-04-06 15:33:03 +0000354typedef struct lang_wild_statement_struct lang_wild_statement_type;
355
356typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *,
Alan Modra8c4645b2021-01-13 15:17:56 +1030357 asection *, lang_input_statement_type *, void *);
Jakub Jelinek72223182005-04-06 15:33:03 +0000358
359typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
360 lang_input_statement_type *,
361 callback_t callback,
362 void *data);
363
Alan Modraf38a2682021-03-31 10:39:51 +1030364typedef bool (*lang_match_sec_type_func) (bfd *, const asection *,
365 bfd *, const asection *);
Alan Modra390fbbf2005-11-24 06:02:08 +0000366
H.J. Lue6f2cbf2006-08-08 16:08:47 +0000367/* Binary search tree structure to efficiently sort sections by
368 name. */
369typedef struct lang_section_bst
370{
371 asection *section;
Alan Modrab209b5a2021-01-13 13:33:34 +1030372 void *pattern;
H.J. Lue6f2cbf2006-08-08 16:08:47 +0000373 struct lang_section_bst *left;
374 struct lang_section_bst *right;
375} lang_section_bst_type;
376
Jakub Jelinek72223182005-04-06 15:33:03 +0000377struct lang_wild_statement_struct
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000378{
Richard Henderson252b5131999-05-03 07:29:11 +0000379 lang_statement_header_type header;
Richard Henderson252b5131999-05-03 07:29:11 +0000380 const char *filename;
Alan Modraf38a2682021-03-31 10:39:51 +1030381 bool filenames_sorted;
Alan Modrab6bf44b2001-08-03 01:11:21 +0000382 struct wildcard_list *section_list;
Alan Modraf38a2682021-03-31 10:39:51 +1030383 bool keep_sections;
Richard Henderson252b5131999-05-03 07:29:11 +0000384 lang_statement_list_type children;
Andrew Burgess8f1732f2016-09-20 14:21:05 +0100385 struct name_list *exclude_name_list;
Jakub Jelinek72223182005-04-06 15:33:03 +0000386
387 walk_wild_section_handler_t walk_wild_section_handler;
388 struct wildcard_list *handler_data[4];
H.J. Lue6f2cbf2006-08-08 16:08:47 +0000389 lang_section_bst_type *tree;
Catherine Mooreae17ab42011-07-11 15:03:09 +0000390 struct flag_info *section_flag_list;
Jakub Jelinek72223182005-04-06 15:33:03 +0000391};
Richard Henderson252b5131999-05-03 07:29:11 +0000392
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000393typedef struct lang_address_statement_struct
394{
Richard Henderson252b5131999-05-03 07:29:11 +0000395 lang_statement_header_type header;
Kazu Hirata89cdebb2000-10-09 15:09:17 +0000396 const char *section_name;
397 union etree_union *address;
Mark Mitchellba916c82004-10-26 18:41:52 +0000398 const segment_type *segment;
Richard Henderson252b5131999-05-03 07:29:11 +0000399} lang_address_statement_type;
400
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000401typedef struct
402{
Richard Henderson252b5131999-05-03 07:29:11 +0000403 lang_statement_header_type header;
404 bfd_vma output_offset;
Andreas Schwab1a69ff92011-11-15 18:22:27 +0000405 bfd_size_type size;
Richard Henderson252b5131999-05-03 07:29:11 +0000406 asection *output_section;
Alan Modra2c382fb2002-02-15 02:11:05 +0000407 fill_type *fill;
Richard Henderson252b5131999-05-03 07:29:11 +0000408} lang_padding_statement_type;
409
410/* A group statement collects a set of libraries together. The
411 libraries are searched multiple times, until no new undefined
412 symbols are found. The effect is to search a group of libraries as
413 though they were a single library. */
414
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000415typedef struct
416{
Richard Henderson252b5131999-05-03 07:29:11 +0000417 lang_statement_header_type header;
418 lang_statement_list_type children;
419} lang_group_statement_type;
420
Alan Modra53d25da2008-01-25 12:03:37 +0000421typedef struct
422{
423 lang_statement_header_type header;
424 const char *where;
Alan Modraf38a2682021-03-31 10:39:51 +1030425 bool is_before;
Alan Modra53d25da2008-01-25 12:03:37 +0000426} lang_insert_statement_type;
427
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000428typedef union lang_statement_union
429{
Richard Henderson252b5131999-05-03 07:29:11 +0000430 lang_statement_header_type header;
Richard Henderson252b5131999-05-03 07:29:11 +0000431 lang_address_statement_type address_statement;
Richard Henderson252b5131999-05-03 07:29:11 +0000432 lang_assignment_statement_type assignment_statement;
Alan Modradc028482019-08-10 13:02:49 +0930433 lang_data_statement_type data_statement;
Richard Henderson252b5131999-05-03 07:29:11 +0000434 lang_fill_statement_type fill_statement;
Richard Henderson252b5131999-05-03 07:29:11 +0000435 lang_group_statement_type group_statement;
Alan Modradc028482019-08-10 13:02:49 +0930436 lang_input_section_type input_section;
437 lang_input_statement_type input_statement;
Alan Modra53d25da2008-01-25 12:03:37 +0000438 lang_insert_statement_type insert_statement;
Alan Modradc028482019-08-10 13:02:49 +0930439 lang_output_section_statement_type output_section_statement;
440 lang_output_statement_type output_statement;
441 lang_padding_statement_type padding_statement;
442 lang_reloc_statement_type reloc_statement;
443 lang_target_statement_type target_statement;
444 lang_wild_statement_type wild_statement;
Richard Henderson252b5131999-05-03 07:29:11 +0000445} lang_statement_union_type;
446
447/* This structure holds information about a program header, from the
448 PHDRS command in the linker script. */
449
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000450struct lang_phdr
451{
Richard Henderson252b5131999-05-03 07:29:11 +0000452 struct lang_phdr *next;
453 const char *name;
454 unsigned long type;
Alan Modraf38a2682021-03-31 10:39:51 +1030455 bool filehdr;
456 bool phdrs;
Richard Henderson252b5131999-05-03 07:29:11 +0000457 etree_type *at;
458 etree_type *flags;
459};
460
461/* This structure is used to hold a list of sections which may not
462 cross reference each other. */
463
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000464typedef struct lang_nocrossref
465{
Richard Henderson252b5131999-05-03 07:29:11 +0000466 struct lang_nocrossref *next;
467 const char *name;
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000468} lang_nocrossref_type;
Richard Henderson252b5131999-05-03 07:29:11 +0000469
470/* The list of nocrossref lists. */
471
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000472struct lang_nocrossrefs
473{
Richard Henderson252b5131999-05-03 07:29:11 +0000474 struct lang_nocrossrefs *next;
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000475 lang_nocrossref_type *list;
Alan Modraf38a2682021-03-31 10:39:51 +1030476 bool onlyfirst;
Richard Henderson252b5131999-05-03 07:29:11 +0000477};
478
Alan Modra577a0622001-01-14 04:36:35 +0000479/* This structure is used to hold a list of input section names which
480 will not match an output section in the linker script. */
481
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000482struct unique_sections
483{
Alan Modra577a0622001-01-14 04:36:35 +0000484 struct unique_sections *next;
485 const char *name;
486};
487
Alan Modraafd7a012004-10-14 12:54:47 +0000488/* Used by place_orphan to keep track of orphan sections and statements. */
489
Nick Clifton4a93e182009-03-02 17:27:36 +0000490struct orphan_save
491{
Alan Modraafd7a012004-10-14 12:54:47 +0000492 const char *name;
493 flagword flags;
494 lang_output_section_statement_type *os;
495 asection **section;
496 lang_statement_union_type **stmt;
497 lang_output_section_statement_type **os_tail;
498};
499
Alan Modra16e4ecc2014-01-22 16:05:12 +1030500struct asneeded_minfo
501{
502 struct asneeded_minfo *next;
503 const char *soname;
504 bfd *ref;
505 const char *name;
506};
507
Alan Modra66be1052012-03-05 22:43:40 +0000508extern struct lang_phdr *lang_phdr_list;
509extern struct lang_nocrossrefs *nocrossref_list;
Alan Modra8be573a2009-08-30 05:47:43 +0000510extern const char *output_target;
Richard Henderson252b5131999-05-03 07:29:11 +0000511extern lang_output_section_statement_type *abs_output_section;
Alan Modra5c1e6d52019-07-31 16:45:14 +0930512extern lang_statement_list_type lang_os_list;
Alan Modra66be1052012-03-05 22:43:40 +0000513extern struct lang_input_statement_flags input_flags;
Alan Modraf38a2682021-03-31 10:39:51 +1030514extern bool lang_has_input_file;
Alan Modrab209b5a2021-01-13 13:33:34 +1030515extern lang_statement_list_type statement_list;
Richard Henderson252b5131999-05-03 07:29:11 +0000516extern lang_statement_list_type *stat_ptr;
Alan Modraf38a2682021-03-31 10:39:51 +1030517extern bool delete_output_file_on_failure;
Richard Henderson252b5131999-05-03 07:29:11 +0000518
Alan Modrae3e942e2002-07-01 08:07:31 +0000519extern struct bfd_sym_chain entry_symbol;
Alan Modra1e281512002-02-10 10:55:23 +0000520extern const char *entry_section;
Alan Modraf38a2682021-03-31 10:39:51 +1030521extern bool entry_from_cmdline;
Alan Modrab71e2772000-07-11 03:42:41 +0000522extern lang_statement_list_type file_chain;
Alan Modradc27aea2007-03-26 11:10:44 +0000523extern lang_statement_list_type input_file_chain;
Richard Henderson252b5131999-05-03 07:29:11 +0000524
Fangrui Song37a141b2020-06-03 06:37:39 -0700525extern struct bfd_elf_dynamic_list **current_dynamic_list_p;
526
Hans-Peter Nilsson420e5792003-10-11 09:16:20 +0000527extern int lang_statement_iteration;
Alan Modra16e4ecc2014-01-22 16:05:12 +1030528extern struct asneeded_minfo **asneeded_list_tail;
Hans-Peter Nilsson420e5792003-10-11 09:16:20 +0000529
Hans-Peter Nilssoneae25ec2014-05-10 02:50:01 +0200530extern void (*output_bfd_hash_table_free_fn) (struct bfd_link_hash_table *);
531
Alan Modraf53154d2002-12-08 03:56:04 +0000532extern void lang_init
Alan Modra1579bae2003-06-28 05:28:54 +0000533 (void);
H.J. Lu750877b2005-09-30 17:45:54 +0000534extern void lang_finish
535 (void);
Nick Clifton4a93e182009-03-02 17:27:36 +0000536extern lang_memory_region_type * lang_memory_region_lookup
Alan Modraf38a2682021-03-31 10:39:51 +1030537 (const char * const, bool);
Nick Clifton4a93e182009-03-02 17:27:36 +0000538extern void lang_memory_region_alias
539 (const char *, const char *);
Alan Modraf53154d2002-12-08 03:56:04 +0000540extern void lang_map
Alan Modra1579bae2003-06-28 05:28:54 +0000541 (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000542extern void lang_set_flags
Alan Modra1579bae2003-06-28 05:28:54 +0000543 (lang_memory_region_type *, const char *, int);
Alan Modraf53154d2002-12-08 03:56:04 +0000544extern void lang_add_output
Alan Modra1579bae2003-06-28 05:28:54 +0000545 (const char *, int from_script);
Alan Modraaea4bd92000-04-25 05:14:16 +0000546extern lang_output_section_statement_type *lang_enter_output_section_statement
Nick Clifton1eec3462013-07-19 10:39:51 +0000547 (const char *, etree_type *, enum section_type, etree_type *, etree_type *,
548 etree_type *, int, int);
Alan Modraf53154d2002-12-08 03:56:04 +0000549extern void lang_final
Alan Modra1579bae2003-06-28 05:28:54 +0000550 (void);
Alan Modraeaeb0a92009-08-10 07:50:56 +0000551extern void lang_relax_sections
Alan Modraf38a2682021-03-31 10:39:51 +1030552 (bool);
Alan Modraf53154d2002-12-08 03:56:04 +0000553extern void lang_process
Alan Modra1579bae2003-06-28 05:28:54 +0000554 (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000555extern void lang_section_start
Mark Mitchellba916c82004-10-26 18:41:52 +0000556 (const char *, union etree_union *, const segment_type *);
Alan Modraf53154d2002-12-08 03:56:04 +0000557extern void lang_add_entry
Alan Modraf38a2682021-03-31 10:39:51 +1030558 (const char *, bool);
Zack Weinberga3595092005-06-01 04:04:19 +0000559extern void lang_default_entry
560 (const char *);
Alan Modraf53154d2002-12-08 03:56:04 +0000561extern void lang_add_target
Alan Modra1579bae2003-06-28 05:28:54 +0000562 (const char *);
Richard Henderson252b5131999-05-03 07:29:11 +0000563extern void lang_add_wild
Alan Modraf38a2682021-03-31 10:39:51 +1030564 (struct wildcard_spec *, struct wildcard_list *, bool);
Alan Modraf53154d2002-12-08 03:56:04 +0000565extern void lang_add_map
Alan Modra1579bae2003-06-28 05:28:54 +0000566 (const char *);
Alan Modraf53154d2002-12-08 03:56:04 +0000567extern void lang_add_fill
Alan Modra1579bae2003-06-28 05:28:54 +0000568 (fill_type *);
569extern lang_assignment_statement_type *lang_add_assignment
570 (union etree_union *);
Alan Modraf53154d2002-12-08 03:56:04 +0000571extern void lang_add_attribute
Alan Modra1579bae2003-06-28 05:28:54 +0000572 (enum statement_enum);
Alan Modraf53154d2002-12-08 03:56:04 +0000573extern void lang_startup
Alan Modra1579bae2003-06-28 05:28:54 +0000574 (const char *);
Alan Modraf53154d2002-12-08 03:56:04 +0000575extern void lang_float
Alan Modraf38a2682021-03-31 10:39:51 +1030576 (bool);
Richard Henderson252b5131999-05-03 07:29:11 +0000577extern void lang_leave_output_section_statement
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000578 (fill_type *, const char *, lang_output_section_phdr_list *,
Alan Modra1579bae2003-06-28 05:28:54 +0000579 const char *);
Richard Henderson252b5131999-05-03 07:29:11 +0000580extern void lang_for_each_input_file
Alan Modra1579bae2003-06-28 05:28:54 +0000581 (void (*dothis) (lang_input_statement_type *));
Richard Henderson252b5131999-05-03 07:29:11 +0000582extern void lang_for_each_file
Alan Modra1579bae2003-06-28 05:28:54 +0000583 (void (*dothis) (lang_input_statement_type *));
Alan Modraf53154d2002-12-08 03:56:04 +0000584extern void lang_reset_memory_regions
Alan Modra1579bae2003-06-28 05:28:54 +0000585 (void);
Alan Modraf2241122003-12-04 12:09:25 +0000586extern void lang_do_assignments
Alan Modra2f65ac72011-05-03 14:56:14 +0000587 (lang_phase_type);
Alan Modrad2667022012-06-15 15:13:41 +0000588extern asection *section_for_dot
589 (void);
Richard Henderson252b5131999-05-03 07:29:11 +0000590
Alan Modraf53154d2002-12-08 03:56:04 +0000591#define LANG_FOR_EACH_INPUT_STATEMENT(statement) \
592 lang_input_statement_type *statement; \
Nick Cliftonb72636d2019-11-22 13:12:01 +0000593 for (statement = (lang_input_statement_type *) file_chain.head; \
Alan Modra1fa4ec62017-09-02 11:08:05 +0930594 statement != NULL; \
Alan Modra36983a92019-08-10 10:30:19 +0930595 statement = statement->next)
Kazu Hirata5cc18312000-09-29 13:21:41 +0000596
Alan Modra66c103b2008-09-07 04:02:31 +0000597#define lang_output_section_find(NAME) \
Alan Modra21401fc2020-11-24 23:41:31 +1030598 lang_output_section_statement_lookup (NAME, 0, 0)
Alan Modra66c103b2008-09-07 04:02:31 +0000599
Alan Modraf53154d2002-12-08 03:56:04 +0000600extern void lang_process
Alan Modra1579bae2003-06-28 05:28:54 +0000601 (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000602extern void ldlang_add_file
Alan Modra1579bae2003-06-28 05:28:54 +0000603 (lang_input_statement_type *);
Alan Modraafd7a012004-10-14 12:54:47 +0000604extern lang_output_section_statement_type *lang_output_section_find_by_flags
Alan Modra93638472015-10-29 16:16:22 +1030605 (const asection *, flagword, lang_output_section_statement_type **,
Alan Modra390fbbf2005-11-24 06:02:08 +0000606 lang_match_sec_type_func);
Alan Modraafd7a012004-10-14 12:54:47 +0000607extern lang_output_section_statement_type *lang_insert_orphan
Alan Modra8a99a382008-10-04 06:08:59 +0000608 (asection *, const char *, int, lang_output_section_statement_type *,
Alan Modra7b986e92005-11-17 00:10:05 +0000609 struct orphan_save *, etree_type *, lang_statement_list_type *);
Richard Henderson252b5131999-05-03 07:29:11 +0000610extern lang_input_statement_type *lang_add_input_file
Alan Modra1579bae2003-06-28 05:28:54 +0000611 (const char *, lang_input_file_enum_type, const char *);
Alan Modraf53154d2002-12-08 03:56:04 +0000612extern void lang_add_keepsyms_file
Alan Modra1579bae2003-06-28 05:28:54 +0000613 (const char *);
Guy Martin24ef1aa2014-01-20 14:16:16 +1030614extern lang_output_section_statement_type *lang_output_section_get
615 (const asection *);
Alan Modra66c103b2008-09-07 04:02:31 +0000616extern lang_output_section_statement_type *lang_output_section_statement_lookup
Alan Modra21401fc2020-11-24 23:41:31 +1030617 (const char *, int, int);
Alan Modrad127ecc2009-05-15 14:22:36 +0000618extern lang_output_section_statement_type *next_matching_output_section_statement
619 (lang_output_section_statement_type *, int);
Alan Modraf53154d2002-12-08 03:56:04 +0000620extern void ldlang_add_undef
Alan Modraf38a2682021-03-31 10:39:51 +1030621 (const char *const, bool);
Andrew Burgess0a618242015-07-15 18:37:30 +0100622extern void ldlang_add_require_defined
623 (const char *const);
Alan Modraf53154d2002-12-08 03:56:04 +0000624extern void lang_add_output_format
Alan Modra1579bae2003-06-28 05:28:54 +0000625 (const char *, const char *, const char *, int);
Alan Modraf53154d2002-12-08 03:56:04 +0000626extern void lang_list_init
Alan Modra1579bae2003-06-28 05:28:54 +0000627 (lang_statement_list_type *);
Alan Modrabde18da2009-02-16 07:25:52 +0000628extern void push_stat_ptr
629 (lang_statement_list_type *);
630extern void pop_stat_ptr
631 (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000632extern void lang_add_data
Alan Modra1579bae2003-06-28 05:28:54 +0000633 (int type, union etree_union *);
Richard Henderson252b5131999-05-03 07:29:11 +0000634extern void lang_add_reloc
Alan Modra1579bae2003-06-28 05:28:54 +0000635 (bfd_reloc_code_real_type, reloc_howto_type *, asection *, const char *,
636 union etree_union *);
Richard Henderson252b5131999-05-03 07:29:11 +0000637extern void lang_for_each_statement
Alan Modra1579bae2003-06-28 05:28:54 +0000638 (void (*) (lang_statement_union_type *));
Alan Modra8658f982010-09-10 01:23:12 +0000639extern void lang_for_each_statement_worker
640 (void (*) (lang_statement_union_type *), lang_statement_union_type *);
Alan Modra1579bae2003-06-28 05:28:54 +0000641extern void *stat_alloc
642 (size_t);
Alan Modra84232932005-05-04 11:00:28 +0000643extern void strip_excluded_output_sections
644 (void);
Alan Modra18cd5bc2014-08-14 13:49:31 +0930645extern void lang_clear_os_map
646 (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000647extern void dprint_statement
Alan Modra1579bae2003-06-28 05:28:54 +0000648 (lang_statement_union_type *, int);
Alan Modrae9ee4692005-06-09 02:05:47 +0000649extern void lang_size_sections
Alan Modraf38a2682021-03-31 10:39:51 +1030650 (bool *, bool);
Alan Modrae9ee4692005-06-09 02:05:47 +0000651extern void one_lang_size_sections_pass
Alan Modraf38a2682021-03-31 10:39:51 +1030652 (bool *, bool);
Alan Modra53d25da2008-01-25 12:03:37 +0000653extern void lang_add_insert
654 (const char *, int);
Alan Modraf53154d2002-12-08 03:56:04 +0000655extern void lang_enter_group
Alan Modra1579bae2003-06-28 05:28:54 +0000656 (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000657extern void lang_leave_group
Alan Modra1579bae2003-06-28 05:28:54 +0000658 (void);
Alan Modra39dcfe12001-08-14 02:01:31 +0000659extern void lang_add_section
Alan Modrab209b5a2021-01-13 13:33:34 +1030660 (lang_statement_list_type *, asection *, struct wildcard_list *,
James Lemkeb9c361e2012-05-14 19:45:30 +0000661 struct flag_info *, lang_output_section_statement_type *);
Richard Henderson252b5131999-05-03 07:29:11 +0000662extern void lang_new_phdr
Alan Modraf38a2682021-03-31 10:39:51 +1030663 (const char *, etree_type *, bool, bool, etree_type *,
Alan Modra1579bae2003-06-28 05:28:54 +0000664 etree_type *);
Alan Modraf53154d2002-12-08 03:56:04 +0000665extern void lang_add_nocrossref
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000666 (lang_nocrossref_type *);
Matthew Fortunecdf96952016-04-14 11:49:53 +0100667extern void lang_add_nocrossref_to
668 (lang_nocrossref_type *);
Alan Modraf53154d2002-12-08 03:56:04 +0000669extern void lang_enter_overlay
Alan Modra7e7d5762003-07-27 11:58:28 +0000670 (etree_type *, etree_type *);
Alan Modraf53154d2002-12-08 03:56:04 +0000671extern void lang_enter_overlay_section
Alan Modra1579bae2003-06-28 05:28:54 +0000672 (const char *);
Richard Henderson252b5131999-05-03 07:29:11 +0000673extern void lang_leave_overlay_section
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000674 (fill_type *, lang_output_section_phdr_list *);
Richard Henderson252b5131999-05-03 07:29:11 +0000675extern void lang_leave_overlay
Alan Modra1579bae2003-06-28 05:28:54 +0000676 (etree_type *, int, fill_type *, const char *,
Nick Clifton6bdafbe2004-01-13 11:10:53 +0000677 lang_output_section_phdr_list *, const char *);
Richard Henderson252b5131999-05-03 07:29:11 +0000678
Alan Modra313e35e2002-02-14 04:24:33 +0000679extern struct bfd_elf_version_expr *lang_new_vers_pattern
Alan Modraf38a2682021-03-31 10:39:51 +1030680 (struct bfd_elf_version_expr *, const char *, const char *, bool);
Richard Henderson252b5131999-05-03 07:29:11 +0000681extern struct bfd_elf_version_tree *lang_new_vers_node
Alan Modra1579bae2003-06-28 05:28:54 +0000682 (struct bfd_elf_version_expr *, struct bfd_elf_version_expr *);
Richard Henderson252b5131999-05-03 07:29:11 +0000683extern struct bfd_elf_version_deps *lang_add_vers_depend
Alan Modra1579bae2003-06-28 05:28:54 +0000684 (struct bfd_elf_version_deps *, const char *);
Richard Henderson252b5131999-05-03 07:29:11 +0000685extern void lang_register_vers_node
Alan Modra1579bae2003-06-28 05:28:54 +0000686 (const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
Fangrui Song37a141b2020-06-03 06:37:39 -0700687extern void lang_append_dynamic_list (struct bfd_elf_dynamic_list **,
688 struct bfd_elf_version_expr *);
H.J. Lu55255da2006-09-07 17:16:34 +0000689extern void lang_append_dynamic_list_cpp_typeinfo (void);
H.J. Lu40b36302007-01-16 14:56:32 +0000690extern void lang_append_dynamic_list_cpp_new (void);
Alan Modraf53154d2002-12-08 03:56:04 +0000691extern void lang_add_unique
Alan Modra1579bae2003-06-28 05:28:54 +0000692 (const char *);
Alan Modraf53154d2002-12-08 03:56:04 +0000693extern const char *lang_get_output_target
Alan Modra1579bae2003-06-28 05:28:54 +0000694 (void);
Daniel Jacobowitzb58f81a2004-10-16 18:13:54 +0000695extern void add_excluded_libs (const char *);
Alan Modraf38a2682021-03-31 10:39:51 +1030696extern bool load_symbols
Alan Modrae9f53122006-10-25 06:49:21 +0000697 (lang_input_statement_type *, lang_statement_list_type *);
Daniel Jacobowitzb58f81a2004-10-16 18:13:54 +0000698
Nick Alcock1ff6de02019-07-13 22:38:00 +0100699struct elf_sym_strtab;
700struct elf_strtab_hash;
Nick Alcock3d16b642020-11-20 13:34:04 +0000701extern void ldlang_ctf_acquire_strings
702 (struct elf_strtab_hash *);
703extern void ldlang_ctf_new_dynsym
704 (int symidx, struct elf_internal_sym *);
Nick Alcock1ff6de02019-07-13 22:38:00 +0100705extern void ldlang_write_ctf_late
706 (void);
Alan Modraf38a2682021-03-31 10:39:51 +1030707extern bool
Nick Clifton2889e752007-02-21 16:43:50 +0000708ldlang_override_segment_assignment
Alan Modraf38a2682021-03-31 10:39:51 +1030709 (struct bfd_link_info *, bfd *, asection *, asection *, bool);
Nick Clifton2889e752007-02-21 16:43:50 +0000710
Alan Modra01554a72011-01-13 13:29:55 +0000711extern void
712lang_ld_feature (char *);
713
Tristan Gingold3604cb12015-06-05 15:09:31 +0200714extern void
715lang_print_memory_usage (void);
716
Nick Clifton4153b6d2016-03-22 12:25:08 +0000717extern void
718lang_add_gc_name (const char *);
719
Alan Modraf38a2682021-03-31 10:39:51 +1030720extern bool
Douglas B Rupp3edf7b92020-05-18 21:29:53 +0930721print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr);
722
Richard Henderson252b5131999-05-03 07:29:11 +0000723#endif