Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / binutils / ld / ldlang.h
1 /* ldlang.h - linker command language support
2    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002
4    Free Software Foundation, Inc.
5
6    This file is part of GLD, the Gnu Linker.
7
8    GLD 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 2, or (at your option)
11    any later version.
12
13    GLD 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.
17
18    You should have received a copy of the GNU General Public License
19    along with GLD; see the file COPYING.  If not, write to the Free
20    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21    02111-1307, USA.  */
22
23 #ifndef LDLANG_H
24 #define LDLANG_H
25
26 typedef enum {
27   lang_input_file_is_l_enum,
28   lang_input_file_is_symbols_only_enum,
29   lang_input_file_is_marker_enum,
30   lang_input_file_is_fake_enum,
31   lang_input_file_is_search_file_enum,
32   lang_input_file_is_file_enum
33 } lang_input_file_enum_type;
34
35 typedef unsigned int fill_type;
36
37 typedef struct statement_list {
38   union lang_statement_union *head;
39   union lang_statement_union **tail;
40 } lang_statement_list_type;
41
42 typedef struct memory_region_struct {
43   char *name;
44   struct memory_region_struct *next;
45   bfd_vma origin;
46   bfd_size_type length;
47   bfd_vma current;
48   bfd_size_type old_length;
49   flagword flags;
50   flagword not_flags;
51   boolean had_full_message;
52 } lang_memory_region_type;
53
54 typedef struct lang_statement_header_struct {
55   union lang_statement_union *next;
56   enum statement_enum {
57     lang_output_section_statement_enum,
58     lang_assignment_statement_enum,
59     lang_input_statement_enum,
60     lang_address_statement_enum,
61     lang_wild_statement_enum,
62     lang_input_section_enum,
63     lang_object_symbols_statement_enum,
64     lang_fill_statement_enum,
65     lang_data_statement_enum,
66     lang_reloc_statement_enum,
67     lang_target_statement_enum,
68     lang_output_statement_enum,
69     lang_padding_statement_enum,
70     lang_group_statement_enum,
71
72     lang_afile_asection_pair_statement_enum,
73     lang_constructors_statement_enum
74   } type;
75 } lang_statement_header_type;
76
77 typedef struct {
78   lang_statement_header_type header;
79   union etree_union *exp;
80 } lang_assignment_statement_type;
81
82 typedef struct lang_target_statement_struct {
83   lang_statement_header_type header;
84   const char *target;
85 } lang_target_statement_type;
86
87 typedef struct lang_output_statement_struct {
88   lang_statement_header_type header;
89   const char *name;
90 } lang_output_statement_type;
91
92 /* Section types specified in a linker script.  */
93
94 enum section_type {
95   normal_section,
96   dsect_section,
97   copy_section,
98   noload_section,
99   info_section,
100   overlay_section
101 };
102
103 /* This structure holds a list of program headers describing segments
104    in which this section should be placed.  */
105
106 struct lang_output_section_phdr_list {
107   struct lang_output_section_phdr_list *next;
108   const char *name;
109   boolean used;
110 };
111
112 typedef struct lang_output_section_statement_struct {
113   lang_statement_header_type header;
114   union etree_union *addr_tree;
115   lang_statement_list_type children;
116   const char *memspec;
117   union lang_statement_union *next;
118   const char *name;
119
120   boolean processed;
121
122   asection *bfd_section;
123   flagword flags;               /* Or together of all input sections */
124   enum section_type sectype;
125   struct memory_region_struct *region;
126   struct memory_region_struct *lma_region;
127   size_t block_value;
128   fill_type fill;
129
130   int subsection_alignment;     /* alignment of components */
131   int section_alignment;        /* alignment of start of section */
132
133   union etree_union *load_base;
134
135   struct lang_output_section_phdr_list *phdrs;
136 } lang_output_section_statement_type;
137
138 typedef struct {
139   lang_statement_header_type header;
140 } lang_common_statement_type;
141
142 typedef struct {
143   lang_statement_header_type header;
144 } lang_object_symbols_statement_type;
145
146 typedef struct {
147   lang_statement_header_type header;
148   fill_type fill;
149   int size;
150   asection *output_section;
151 } lang_fill_statement_type;
152
153 typedef struct {
154   lang_statement_header_type header;
155   unsigned int type;
156   union etree_union *exp;
157   bfd_vma value;
158   asection *output_section;
159   bfd_vma output_vma;
160 } lang_data_statement_type;
161
162 /* Generate a reloc in the output file.  */
163
164 typedef struct {
165   lang_statement_header_type header;
166
167   /* Reloc to generate.  */
168   bfd_reloc_code_real_type reloc;
169
170   /* Reloc howto structure.  */
171   reloc_howto_type *howto;
172
173   /* Section to generate reloc against.  Exactly one of section and
174      name must be NULL.  */
175   asection *section;
176
177   /* Name of symbol to generate reloc against.  Exactly one of section
178      and name must be NULL.  */
179   const char *name;
180
181   /* Expression for addend.  */
182   union etree_union *addend_exp;
183
184   /* Resolved addend.  */
185   bfd_vma addend_value;
186
187   /* Output section where reloc should be performed.  */
188   asection *output_section;
189
190   /* VMA within output section.  */
191   bfd_vma output_vma;
192 } lang_reloc_statement_type;
193
194 typedef struct lang_input_statement_struct {
195   lang_statement_header_type header;
196   /* Name of this file.  */
197   const char *filename;
198   /* Name to use for the symbol giving address of text start */
199   /* Usually the same as filename, but for a file spec'd with -l
200      this is the -l switch itself rather than the filename.  */
201   const char *local_sym_name;
202
203   bfd *the_bfd;
204
205   boolean closed;
206   file_ptr passive_position;
207
208   /* Symbol table of the file.  */
209   asymbol **asymbols;
210   unsigned int symbol_count;
211
212   /* Point to the next file - whatever it is, wanders up and down
213      archives */
214
215   union lang_statement_union *next;
216   /* Point to the next file, but skips archive contents */
217   union lang_statement_union *next_real_file;
218
219   boolean is_archive;
220
221   /* 1 means search a set of directories for this file.  */
222   boolean search_dirs_flag;
223
224   /* 1 means this is base file of incremental load.
225      Do not load this file's text or data.
226      Also default text_start to after this file's bss.  */
227
228   boolean just_syms_flag;
229
230   /* Whether to search for this entry as a dynamic archive.  */
231   boolean dynamic;
232
233   /* Whether to include the entire contents of an archive.  */
234   boolean whole_archive;
235
236   boolean loaded;
237
238 #if 0
239   unsigned int globals_in_this_file;
240 #endif
241   const char *target;
242   boolean real;
243 } lang_input_statement_type;
244
245 typedef struct {
246   lang_statement_header_type header;
247   asection *section;
248   lang_input_statement_type *ifile;
249
250 } lang_input_section_type;
251
252 typedef struct {
253   lang_statement_header_type header;
254   asection *section;
255   union lang_statement_union *file;
256 } lang_afile_asection_pair_statement_type;
257
258 typedef struct lang_wild_statement_struct {
259   lang_statement_header_type header;
260   const char *filename;
261   boolean filenames_sorted;
262   struct wildcard_list *section_list;
263   boolean keep_sections;
264   lang_statement_list_type children;
265 } lang_wild_statement_type;
266
267 typedef struct lang_address_statement_struct {
268   lang_statement_header_type header;
269   const char *section_name;
270   union etree_union *address;
271 } lang_address_statement_type;
272
273 typedef struct {
274   lang_statement_header_type header;
275   bfd_vma output_offset;
276   size_t size;
277   asection *output_section;
278   fill_type fill;
279 } lang_padding_statement_type;
280
281 /* A group statement collects a set of libraries together.  The
282    libraries are searched multiple times, until no new undefined
283    symbols are found.  The effect is to search a group of libraries as
284    though they were a single library.  */
285
286 typedef struct {
287   lang_statement_header_type header;
288   lang_statement_list_type children;
289 } lang_group_statement_type;
290
291 typedef union lang_statement_union {
292   lang_statement_header_type header;
293   lang_wild_statement_type wild_statement;
294   lang_data_statement_type data_statement;
295   lang_reloc_statement_type reloc_statement;
296   lang_address_statement_type address_statement;
297   lang_output_section_statement_type output_section_statement;
298   lang_afile_asection_pair_statement_type afile_asection_pair_statement;
299   lang_assignment_statement_type assignment_statement;
300   lang_input_statement_type input_statement;
301   lang_target_statement_type target_statement;
302   lang_output_statement_type output_statement;
303   lang_input_section_type input_section;
304   lang_common_statement_type common_statement;
305   lang_object_symbols_statement_type object_symbols_statement;
306   lang_fill_statement_type fill_statement;
307   lang_padding_statement_type padding_statement;
308   lang_group_statement_type group_statement;
309 } lang_statement_union_type;
310
311 /* This structure holds information about a program header, from the
312    PHDRS command in the linker script.  */
313
314 struct lang_phdr {
315   struct lang_phdr *next;
316   const char *name;
317   unsigned long type;
318   boolean filehdr;
319   boolean phdrs;
320   etree_type *at;
321   etree_type *flags;
322 };
323
324 /* This structure is used to hold a list of sections which may not
325    cross reference each other.  */
326
327 struct lang_nocrossref {
328   struct lang_nocrossref *next;
329   const char *name;
330 };
331
332 /* The list of nocrossref lists.  */
333
334 struct lang_nocrossrefs {
335   struct lang_nocrossrefs *next;
336   struct lang_nocrossref *list;
337 };
338
339 extern struct lang_nocrossrefs *nocrossref_list;
340
341 /* This structure is used to hold a list of input section names which
342    will not match an output section in the linker script.  */
343
344 struct unique_sections {
345   struct unique_sections *next;
346   const char *name;
347 };
348
349 extern struct unique_sections *unique_section_list;
350
351 extern lang_output_section_statement_type *abs_output_section;
352 extern lang_statement_list_type lang_output_section_statement;
353 extern boolean lang_has_input_file;
354 extern etree_type *base;
355 extern lang_statement_list_type *stat_ptr;
356 extern boolean delete_output_file_on_failure;
357
358 extern const char *entry_symbol;
359 extern const char *entry_section;
360 extern boolean entry_from_cmdline;
361 extern lang_statement_list_type file_chain;
362
363 extern void lang_init PARAMS ((void));
364 extern struct memory_region_struct *lang_memory_region_lookup
365   PARAMS ((const char *const));
366 extern struct memory_region_struct *lang_memory_region_default
367   PARAMS ((asection *));
368 extern void lang_map PARAMS ((void));
369 extern void lang_set_flags PARAMS ((lang_memory_region_type *, const char *,
370                                     int));
371 extern void lang_add_output PARAMS ((const char *, int from_script));
372 extern lang_output_section_statement_type *lang_enter_output_section_statement
373   PARAMS ((const char *output_section_statement_name,
374            etree_type * address_exp,
375            enum section_type sectype,
376            bfd_vma block_value,
377            etree_type *align,
378            etree_type *subalign,
379            etree_type *));
380 extern void lang_final PARAMS ((void));
381 extern void lang_process PARAMS ((void));
382 extern void lang_section_start PARAMS ((const char *, union etree_union *));
383 extern void lang_add_entry PARAMS ((const char *, boolean));
384 extern void lang_add_target PARAMS ((const char *));
385 extern void lang_add_wild
386   PARAMS ((struct wildcard_spec *, struct wildcard_list *, boolean));
387 extern void lang_add_map PARAMS ((const char *));
388 extern void lang_add_fill PARAMS ((int));
389 extern lang_assignment_statement_type * lang_add_assignment PARAMS ((union etree_union *));
390 extern void lang_add_attribute PARAMS ((enum statement_enum));
391 extern void lang_startup PARAMS ((const char *));
392 extern void lang_float PARAMS ((enum bfd_boolean));
393 extern void lang_leave_output_section_statement
394   PARAMS ((bfd_vma, const char *, struct lang_output_section_phdr_list *,
395            const char *));
396 extern void lang_abs_symbol_at_end_of PARAMS ((const char *, const char *));
397 extern void lang_abs_symbol_at_beginning_of PARAMS ((const char *,
398                                                      const char *));
399 extern void lang_statement_append PARAMS ((struct statement_list *,
400                                            union lang_statement_union *,
401                                            union lang_statement_union **));
402 extern void lang_for_each_input_file
403   PARAMS ((void (*dothis) (lang_input_statement_type *)));
404 extern void lang_for_each_file
405   PARAMS ((void (*dothis) (lang_input_statement_type *)));
406 extern void lang_reset_memory_regions PARAMS ((void));
407 extern bfd_vma lang_do_assignments
408   PARAMS ((lang_statement_union_type * s,
409            lang_output_section_statement_type *output_section_statement,
410            fill_type fill,
411            bfd_vma dot));
412
413 #define LANG_FOR_EACH_INPUT_STATEMENT(statement)                \
414   lang_input_statement_type *statement;                         \
415   for (statement = (lang_input_statement_type *)file_chain.head;\
416        statement != (lang_input_statement_type *)NULL;          \
417        statement = (lang_input_statement_type *)statement->next)\
418
419 extern void lang_process PARAMS ((void));
420 extern void ldlang_add_file PARAMS ((lang_input_statement_type *));
421 extern lang_output_section_statement_type *lang_output_section_find
422   PARAMS ((const char * const));
423 extern lang_input_statement_type *lang_add_input_file
424   PARAMS ((const char *name, lang_input_file_enum_type file_type,
425            const char *target));
426 extern void lang_add_keepsyms_file PARAMS ((const char *filename));
427 extern lang_output_section_statement_type *
428   lang_output_section_statement_lookup PARAMS ((const char * const name));
429 extern void ldlang_add_undef PARAMS ((const char *const name));
430 extern void lang_add_output_format PARAMS ((const char *, const char *,
431                                             const char *, int from_script));
432 extern void lang_list_init PARAMS ((lang_statement_list_type*));
433 extern void lang_add_data PARAMS ((int type, union etree_union *));
434 extern void lang_add_reloc
435   PARAMS ((bfd_reloc_code_real_type reloc, reloc_howto_type *howto,
436            asection *section, const char *name, union etree_union *addend));
437 extern void lang_for_each_statement
438   PARAMS ((void (*func) (lang_statement_union_type *)));
439 extern PTR stat_alloc PARAMS ((size_t size));
440 extern void dprint_statement PARAMS ((lang_statement_union_type *, int));
441 extern bfd_vma lang_size_sections
442   PARAMS ((lang_statement_union_type *s,
443            lang_output_section_statement_type *output_section_statement,
444            lang_statement_union_type **prev, fill_type fill,
445            bfd_vma dot, boolean *relax));
446 extern void lang_enter_group PARAMS ((void));
447 extern void lang_leave_group PARAMS ((void));
448 extern void lang_add_section
449   PARAMS ((lang_statement_list_type *ptr, asection *section,
450            lang_output_section_statement_type *output,
451            lang_input_statement_type *file));
452 extern void lang_new_phdr
453   PARAMS ((const char *, etree_type *, boolean, boolean, etree_type *,
454            etree_type *));
455 extern void lang_add_nocrossref PARAMS ((struct lang_nocrossref *));
456 extern void lang_enter_overlay PARAMS ((etree_type *, etree_type *, int));
457 extern void lang_enter_overlay_section PARAMS ((const char *));
458 extern void lang_leave_overlay_section
459   PARAMS ((bfd_vma, struct lang_output_section_phdr_list *));
460 extern void lang_leave_overlay
461   PARAMS ((bfd_vma, const char *, struct lang_output_section_phdr_list *,
462            const char *));
463
464 extern struct bfd_elf_version_tree *lang_elf_version_info;
465
466 extern struct bfd_elf_version_expr *lang_new_vers_pattern
467   PARAMS ((struct bfd_elf_version_expr *, const char *, const char *));
468 extern struct bfd_elf_version_tree *lang_new_vers_node
469   PARAMS ((struct bfd_elf_version_expr *, struct bfd_elf_version_expr *));
470 extern struct bfd_elf_version_deps *lang_add_vers_depend
471   PARAMS ((struct bfd_elf_version_deps *, const char *));
472 extern void lang_register_vers_node
473   PARAMS ((const char *, struct bfd_elf_version_tree *,
474            struct bfd_elf_version_deps *));
475 boolean unique_section_p PARAMS ((const char *));
476 extern void lang_add_unique PARAMS ((const char *));
477
478 #endif