OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [ld/] [ldlang.h] - Blame information for rev 163

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.