1/* ldlang.h - linker command language support
2   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3   2001, 2002, 2003, 2004, 2005, 2006
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, 51 Franklin Street - Fifth Floor, Boston, MA
21   02110-1301, USA.  */
22
23#ifndef LDLANG_H
24#define LDLANG_H
25
26#define DEFAULT_MEMORY_REGION   "*default*"
27
28typedef enum
29{
30  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
38struct _fill_type
39{
40  size_t size;
41  unsigned char data[1];
42};
43
44typedef struct statement_list
45{
46  union lang_statement_union *head;
47  union lang_statement_union **tail;
48} lang_statement_list_type;
49
50typedef struct memory_region_struct
51{
52  char *name;
53  struct memory_region_struct *next;
54  bfd_vma origin;
55  bfd_size_type length;
56  bfd_vma current;
57  union lang_statement_union *last_os;
58  flagword flags;
59  flagword not_flags;
60  bfd_boolean had_full_message;
61} lang_memory_region_type;
62
63typedef struct lang_statement_header_struct
64{
65  union lang_statement_union *next;
66  enum statement_enum
67  {
68    lang_output_section_statement_enum,
69    lang_assignment_statement_enum,
70    lang_input_statement_enum,
71    lang_address_statement_enum,
72    lang_wild_statement_enum,
73    lang_input_section_enum,
74    lang_object_symbols_statement_enum,
75    lang_fill_statement_enum,
76    lang_data_statement_enum,
77    lang_reloc_statement_enum,
78    lang_target_statement_enum,
79    lang_output_statement_enum,
80    lang_padding_statement_enum,
81    lang_group_statement_enum,
82
83    lang_afile_asection_pair_statement_enum,
84    lang_constructors_statement_enum
85  } type;
86} lang_statement_header_type;
87
88typedef struct
89{
90  lang_statement_header_type header;
91  union etree_union *exp;
92} lang_assignment_statement_type;
93
94typedef struct lang_target_statement_struct
95{
96  lang_statement_header_type header;
97  const char *target;
98} lang_target_statement_type;
99
100typedef struct lang_output_statement_struct
101{
102  lang_statement_header_type header;
103  const char *name;
104} lang_output_statement_type;
105
106/* Section types specified in a linker script.  */
107
108enum section_type
109{
110  normal_section,
111  overlay_section,
112  noload_section,
113  noalloc_section
114};
115
116/* This structure holds a list of program headers describing
117   segments in which this section should be placed.  */
118
119typedef struct lang_output_section_phdr_list
120{
121  struct lang_output_section_phdr_list *next;
122  const char *name;
123  bfd_boolean used;
124} lang_output_section_phdr_list;
125
126typedef struct lang_output_section_statement_struct
127{
128  lang_statement_header_type header;
129  lang_statement_list_type children;
130  struct lang_output_section_statement_struct *next;
131  struct lang_output_section_statement_struct *prev;
132  const char *name;
133  asection *bfd_section;
134  lang_memory_region_type *region;
135  lang_memory_region_type *lma_region;
136  fill_type *fill;
137  union etree_union *addr_tree;
138  union etree_union *load_base;
139
140  /* If non-null, an expression to evaluate after setting the section's
141     size.  The expression is evaluated inside REGION (above) with '.'
142     set to the end of the section.  Used in the last overlay section
143     to move '.' past all the overlaid sections.  */
144  union etree_union *update_dot_tree;
145
146  lang_output_section_phdr_list *phdrs;
147
148  unsigned int block_value;
149  int subsection_alignment;	/* Alignment of components.  */
150  int section_alignment;	/* Alignment of start of section.  */
151  int constraint;
152  flagword flags;
153  enum section_type sectype;
154  unsigned int processed_vma : 1;
155  unsigned int processed_lma : 1;
156  unsigned int all_input_readonly : 1;
157  /* If this section should be ignored.  */
158  unsigned int ignored : 1;
159  /* If there is a symbol relative to this section.  */
160  unsigned int section_relative_symbol : 1;
161} lang_output_section_statement_type;
162
163typedef struct
164{
165  lang_statement_header_type header;
166} lang_common_statement_type;
167
168typedef struct
169{
170  lang_statement_header_type header;
171} lang_object_symbols_statement_type;
172
173typedef struct
174{
175  lang_statement_header_type header;
176  fill_type *fill;
177  int size;
178  asection *output_section;
179} lang_fill_statement_type;
180
181typedef struct
182{
183  lang_statement_header_type header;
184  unsigned int type;
185  union etree_union *exp;
186  bfd_vma value;
187  asection *output_section;
188  bfd_vma output_offset;
189} lang_data_statement_type;
190
191/* Generate a reloc in the output file.  */
192
193typedef struct
194{
195  lang_statement_header_type header;
196
197  /* Reloc to generate.  */
198  bfd_reloc_code_real_type reloc;
199
200  /* Reloc howto structure.  */
201  reloc_howto_type *howto;
202
203  /* Section to generate reloc against.
204     Exactly one of section and name must be NULL.  */
205  asection *section;
206
207  /* Name of symbol to generate reloc against.
208     Exactly one of section and name must be NULL.  */
209  const char *name;
210
211  /* Expression for addend.  */
212  union etree_union *addend_exp;
213
214  /* Resolved addend.  */
215  bfd_vma addend_value;
216
217  /* Output section where reloc should be performed.  */
218  asection *output_section;
219
220  /* Offset within output section.  */
221  bfd_vma output_offset;
222} lang_reloc_statement_type;
223
224typedef struct lang_input_statement_struct
225{
226  lang_statement_header_type header;
227  /* Name of this file.  */
228  const char *filename;
229  /* Name to use for the symbol giving address of text start.
230     Usually the same as filename, but for a file spec'd with
231     -l this is the -l switch itself rather than the filename.  */
232  const char *local_sym_name;
233
234  bfd *the_bfd;
235
236  file_ptr passive_position;
237
238  /* Symbol table of the file.  */
239  asymbol **asymbols;
240  unsigned int symbol_count;
241
242  /* Point to the next file - whatever it is, wanders up and down
243     archives */
244  union lang_statement_union *next;
245
246  /* Point to the next file, but skips archive contents.  */
247  union lang_statement_union *next_real_file;
248
249  const char *target;
250
251  unsigned int closed : 1;
252  unsigned int is_archive : 1;
253
254  /* 1 means search a set of directories for this file.  */
255  unsigned int search_dirs_flag : 1;
256
257  /* 1 means this was found in a search directory marked as sysrooted,
258     if search_dirs_flag is false, otherwise, that it should be
259     searched in ld_sysroot before any other location, as long as it
260     starts with a slash.  */
261  unsigned int sysrooted : 1;
262
263  /* 1 means this is base file of incremental load.
264     Do not load this file's text or data.
265     Also default text_start to after this file's bss.  */
266  unsigned int just_syms_flag : 1;
267
268  /* Whether to search for this entry as a dynamic archive.  */
269  unsigned int dynamic : 1;
270
271  /* Whether DT_NEEDED tags should be added for dynamic libraries in
272     DT_NEEDED tags from this entry.  */
273  unsigned int add_needed : 1;
274
275  /* Whether this entry should cause a DT_NEEDED tag only when
276     satisfying references from regular files, or always.  */
277  unsigned int as_needed : 1;
278
279  /* Whether to include the entire contents of an archive.  */
280  unsigned int whole_archive : 1;
281
282  unsigned int loaded : 1;
283
284  unsigned int real : 1;
285} lang_input_statement_type;
286
287typedef struct
288{
289  lang_statement_header_type header;
290  asection *section;
291} lang_input_section_type;
292
293typedef struct
294{
295  lang_statement_header_type header;
296  asection *section;
297  union lang_statement_union *file;
298} lang_afile_asection_pair_statement_type;
299
300typedef struct lang_wild_statement_struct lang_wild_statement_type;
301
302typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *,
303			    asection *, lang_input_statement_type *, void *);
304
305typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
306					     lang_input_statement_type *,
307					     callback_t callback,
308					     void *data);
309
310typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *,
311						 bfd *, const asection *);
312
313/* Binary search tree structure to efficiently sort sections by
314   name.  */
315typedef struct lang_section_bst
316{
317  asection *section;
318  struct lang_section_bst *left;
319  struct lang_section_bst *right;
320} lang_section_bst_type;
321
322struct lang_wild_statement_struct
323{
324  lang_statement_header_type header;
325  const char *filename;
326  bfd_boolean filenames_sorted;
327  struct wildcard_list *section_list;
328  bfd_boolean keep_sections;
329  lang_statement_list_type children;
330
331  walk_wild_section_handler_t walk_wild_section_handler;
332  struct wildcard_list *handler_data[4];
333  lang_section_bst_type *tree;
334};
335
336typedef struct lang_address_statement_struct
337{
338  lang_statement_header_type header;
339  const char *section_name;
340  union etree_union *address;
341  const segment_type *segment;
342} lang_address_statement_type;
343
344typedef struct
345{
346  lang_statement_header_type header;
347  bfd_vma output_offset;
348  size_t size;
349  asection *output_section;
350  fill_type *fill;
351} lang_padding_statement_type;
352
353/* A group statement collects a set of libraries together.  The
354   libraries are searched multiple times, until no new undefined
355   symbols are found.  The effect is to search a group of libraries as
356   though they were a single library.  */
357
358typedef struct
359{
360  lang_statement_header_type header;
361  lang_statement_list_type children;
362} lang_group_statement_type;
363
364typedef union lang_statement_union
365{
366  lang_statement_header_type header;
367  lang_wild_statement_type wild_statement;
368  lang_data_statement_type data_statement;
369  lang_reloc_statement_type reloc_statement;
370  lang_address_statement_type address_statement;
371  lang_output_section_statement_type output_section_statement;
372  lang_afile_asection_pair_statement_type afile_asection_pair_statement;
373  lang_assignment_statement_type assignment_statement;
374  lang_input_statement_type input_statement;
375  lang_target_statement_type target_statement;
376  lang_output_statement_type output_statement;
377  lang_input_section_type input_section;
378  lang_common_statement_type common_statement;
379  lang_object_symbols_statement_type object_symbols_statement;
380  lang_fill_statement_type fill_statement;
381  lang_padding_statement_type padding_statement;
382  lang_group_statement_type group_statement;
383} lang_statement_union_type;
384
385/* This structure holds information about a program header, from the
386   PHDRS command in the linker script.  */
387
388struct lang_phdr
389{
390  struct lang_phdr *next;
391  const char *name;
392  unsigned long type;
393  bfd_boolean filehdr;
394  bfd_boolean phdrs;
395  etree_type *at;
396  etree_type *flags;
397};
398
399extern struct lang_phdr *lang_phdr_list;
400
401/* This structure is used to hold a list of sections which may not
402   cross reference each other.  */
403
404typedef struct lang_nocrossref
405{
406  struct lang_nocrossref *next;
407  const char *name;
408} lang_nocrossref_type;
409
410/* The list of nocrossref lists.  */
411
412struct lang_nocrossrefs
413{
414  struct lang_nocrossrefs *next;
415  lang_nocrossref_type *list;
416};
417
418extern struct lang_nocrossrefs *nocrossref_list;
419
420/* This structure is used to hold a list of input section names which
421   will not match an output section in the linker script.  */
422
423struct unique_sections
424{
425  struct unique_sections *next;
426  const char *name;
427};
428
429/* This structure records symbols for which we need to keep track of
430   definedness for use in the DEFINED () test.  */
431
432struct lang_definedness_hash_entry
433{
434  struct bfd_hash_entry root;
435  int iteration;
436};
437
438/* Used by place_orphan to keep track of orphan sections and statements.  */
439
440struct orphan_save {
441  const char *name;
442  flagword flags;
443  lang_output_section_statement_type *os;
444  asection **section;
445  lang_statement_union_type **stmt;
446  lang_output_section_statement_type **os_tail;
447};
448
449extern lang_output_section_statement_type *abs_output_section;
450extern lang_statement_list_type lang_output_section_statement;
451extern bfd_boolean lang_has_input_file;
452extern etree_type *base;
453extern lang_statement_list_type *stat_ptr;
454extern bfd_boolean delete_output_file_on_failure;
455
456extern struct bfd_sym_chain entry_symbol;
457extern const char *entry_section;
458extern bfd_boolean entry_from_cmdline;
459extern lang_statement_list_type file_chain;
460extern lang_statement_list_type input_file_chain;
461
462extern int lang_statement_iteration;
463
464extern void lang_init
465  (void);
466extern void lang_finish
467  (void);
468extern lang_memory_region_type *lang_memory_region_lookup
469  (const char *const, bfd_boolean);
470extern lang_memory_region_type *lang_memory_region_default
471  (asection *);
472extern void lang_map
473  (void);
474extern void lang_set_flags
475  (lang_memory_region_type *, const char *, int);
476extern void lang_add_output
477  (const char *, int from_script);
478extern lang_output_section_statement_type *lang_enter_output_section_statement
479  (const char *output_section_statement_name,
480   etree_type *address_exp,
481   enum section_type sectype,
482   etree_type *align,
483   etree_type *subalign,
484   etree_type *, int);
485extern void lang_final
486  (void);
487extern void lang_process
488  (void);
489extern void lang_section_start
490  (const char *, union etree_union *, const segment_type *);
491extern void lang_add_entry
492  (const char *, bfd_boolean);
493extern void lang_default_entry
494  (const char *);
495extern void lang_add_target
496  (const char *);
497extern void lang_add_wild
498  (struct wildcard_spec *, struct wildcard_list *, bfd_boolean);
499extern void lang_add_map
500  (const char *);
501extern void lang_add_fill
502  (fill_type *);
503extern lang_assignment_statement_type *lang_add_assignment
504  (union etree_union *);
505extern void lang_add_attribute
506  (enum statement_enum);
507extern void lang_startup
508  (const char *);
509extern void lang_float
510  (bfd_boolean);
511extern void lang_leave_output_section_statement
512  (fill_type *, const char *, lang_output_section_phdr_list *,
513   const char *);
514extern void lang_abs_symbol_at_end_of
515  (const char *, const char *);
516extern void lang_abs_symbol_at_beginning_of
517  (const char *, const char *);
518extern void lang_statement_append
519  (lang_statement_list_type *, lang_statement_union_type *,
520   lang_statement_union_type **);
521extern void lang_for_each_input_file
522  (void (*dothis) (lang_input_statement_type *));
523extern void lang_for_each_file
524  (void (*dothis) (lang_input_statement_type *));
525extern void lang_reset_memory_regions
526  (void);
527extern void lang_do_assignments
528  (void);
529
530#define LANG_FOR_EACH_INPUT_STATEMENT(statement)			\
531  lang_input_statement_type *statement;					\
532  for (statement = (lang_input_statement_type *) file_chain.head;	\
533       statement != (lang_input_statement_type *) NULL;			\
534       statement = (lang_input_statement_type *) statement->next)	\
535
536extern void lang_process
537  (void);
538extern void ldlang_add_file
539  (lang_input_statement_type *);
540extern lang_output_section_statement_type *lang_output_section_find
541  (const char * const);
542extern lang_output_section_statement_type *lang_output_section_find_by_flags
543  (const asection *, lang_output_section_statement_type **,
544   lang_match_sec_type_func);
545extern lang_output_section_statement_type *lang_insert_orphan
546  (asection *, const char *, lang_output_section_statement_type *,
547   struct orphan_save *, etree_type *, lang_statement_list_type *);
548extern lang_input_statement_type *lang_add_input_file
549  (const char *, lang_input_file_enum_type, const char *);
550extern void lang_add_keepsyms_file
551  (const char *);
552extern lang_output_section_statement_type *
553  lang_output_section_statement_lookup
554  (const char *const);
555extern void ldlang_add_undef
556  (const char *const);
557extern void lang_add_output_format
558  (const char *, const char *, const char *, int);
559extern void lang_list_init
560  (lang_statement_list_type *);
561extern void lang_add_data
562  (int type, union etree_union *);
563extern void lang_add_reloc
564  (bfd_reloc_code_real_type, reloc_howto_type *, asection *, const char *,
565   union etree_union *);
566extern void lang_for_each_statement
567  (void (*) (lang_statement_union_type *));
568extern void *stat_alloc
569  (size_t);
570extern void strip_excluded_output_sections
571  (void);
572extern void dprint_statement
573  (lang_statement_union_type *, int);
574extern void lang_size_sections
575  (bfd_boolean *, bfd_boolean);
576extern void one_lang_size_sections_pass
577  (bfd_boolean *, bfd_boolean);
578extern void lang_enter_group
579  (void);
580extern void lang_leave_group
581  (void);
582extern void lang_add_section
583  (lang_statement_list_type *, asection *,
584   lang_output_section_statement_type *);
585extern void lang_new_phdr
586  (const char *, etree_type *, bfd_boolean, bfd_boolean, etree_type *,
587   etree_type *);
588extern void lang_add_nocrossref
589  (lang_nocrossref_type *);
590extern void lang_enter_overlay
591  (etree_type *, etree_type *);
592extern void lang_enter_overlay_section
593  (const char *);
594extern void lang_leave_overlay_section
595  (fill_type *, lang_output_section_phdr_list *);
596extern void lang_leave_overlay
597  (etree_type *, int, fill_type *, const char *,
598   lang_output_section_phdr_list *, const char *);
599
600extern struct bfd_elf_version_tree *lang_elf_version_info;
601
602extern struct bfd_elf_version_expr *lang_new_vers_pattern
603  (struct bfd_elf_version_expr *, const char *, const char *, bfd_boolean);
604extern struct bfd_elf_version_tree *lang_new_vers_node
605  (struct bfd_elf_version_expr *, struct bfd_elf_version_expr *);
606extern struct bfd_elf_version_deps *lang_add_vers_depend
607  (struct bfd_elf_version_deps *, const char *);
608extern void lang_register_vers_node
609  (const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
610extern void lang_append_dynamic_list (struct bfd_elf_version_expr *);
611extern void lang_append_dynamic_list_cpp_typeinfo (void);
612extern void lang_append_dynamic_list_cpp_new (void);
613bfd_boolean unique_section_p
614  (const asection *);
615extern void lang_add_unique
616  (const char *);
617extern const char *lang_get_output_target
618  (void);
619extern void lang_track_definedness (const char *);
620extern int lang_symbol_definition_iteration (const char *);
621extern void lang_update_definedness
622  (const char *, struct bfd_link_hash_entry *);
623
624extern void add_excluded_libs (const char *);
625extern bfd_boolean load_symbols
626  (lang_input_statement_type *, lang_statement_list_type *);
627
628extern bfd_boolean
629ldlang_override_segment_assignment
630  (struct bfd_link_info *, bfd *, asection *, asection *, bfd_boolean);
631
632#endif
633