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 157

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
  /* Whether DT_NEEDED tags should be added for dynamic libraries in
274
     DT_NEEDED tags from this entry.  */
275
  unsigned int add_DT_NEEDED_for_dynamic : 1;
276
 
277
  /* Whether this entry should cause a DT_NEEDED tag only when
278
     satisfying references from regular files, or always.  */
279
  unsigned int add_DT_NEEDED_for_regular : 1;
280
 
281
  /* Whether to include the entire contents of an archive.  */
282
  unsigned int whole_archive : 1;
283
 
284
  /* Set when bfd opening is successful.  */
285
  unsigned int loaded : 1;
286
 
287
  unsigned int real : 1;
288
 
289
  /* Set if the file does not exist.  */
290
  unsigned int missing_file : 1;
291
 
292
#ifdef ENABLE_PLUGINS
293
  /* Set if the file was claimed by a plugin.  */
294
  unsigned int claimed : 1;
295
 
296
  /* Set if the file was claimed from an archive.  */
297
  unsigned int claim_archive : 1;
298
#endif /* ENABLE_PLUGINS */
299
 
300
} lang_input_statement_type;
301
 
302
typedef struct
303
{
304
  lang_statement_header_type header;
305
  asection *section;
306
} lang_input_section_type;
307
 
308
typedef struct lang_wild_statement_struct lang_wild_statement_type;
309
 
310
typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *,
311
                            asection *, lang_input_statement_type *, void *);
312
 
313
typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
314
                                             lang_input_statement_type *,
315
                                             callback_t callback,
316
                                             void *data);
317
 
318
typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *,
319
                                                 bfd *, const asection *);
320
 
321
/* Binary search tree structure to efficiently sort sections by
322
   name.  */
323
typedef struct lang_section_bst
324
{
325
  asection *section;
326
  struct lang_section_bst *left;
327
  struct lang_section_bst *right;
328
} lang_section_bst_type;
329
 
330
struct lang_wild_statement_struct
331
{
332
  lang_statement_header_type header;
333
  const char *filename;
334
  bfd_boolean filenames_sorted;
335
  struct wildcard_list *section_list;
336
  bfd_boolean keep_sections;
337
  lang_statement_list_type children;
338
 
339
  walk_wild_section_handler_t walk_wild_section_handler;
340
  struct wildcard_list *handler_data[4];
341
  lang_section_bst_type *tree;
342 157 khays
  struct flag_info *section_flag_list;
343 145 khays
};
344
 
345
typedef struct lang_address_statement_struct
346
{
347
  lang_statement_header_type header;
348
  const char *section_name;
349
  union etree_union *address;
350
  const segment_type *segment;
351
} lang_address_statement_type;
352
 
353
typedef struct
354
{
355
  lang_statement_header_type header;
356
  bfd_vma output_offset;
357
  size_t size;
358
  asection *output_section;
359
  fill_type *fill;
360
} lang_padding_statement_type;
361
 
362
/* A group statement collects a set of libraries together.  The
363
   libraries are searched multiple times, until no new undefined
364
   symbols are found.  The effect is to search a group of libraries as
365
   though they were a single library.  */
366
 
367
typedef struct
368
{
369
  lang_statement_header_type header;
370
  lang_statement_list_type children;
371
} lang_group_statement_type;
372
 
373
typedef struct
374
{
375
  lang_statement_header_type header;
376
  const char *where;
377
  bfd_boolean is_before;
378
} lang_insert_statement_type;
379
 
380
typedef union lang_statement_union
381
{
382
  lang_statement_header_type header;
383
  lang_wild_statement_type wild_statement;
384
  lang_data_statement_type data_statement;
385
  lang_reloc_statement_type reloc_statement;
386
  lang_address_statement_type address_statement;
387
  lang_output_section_statement_type output_section_statement;
388
  lang_assignment_statement_type assignment_statement;
389
  lang_input_statement_type input_statement;
390
  lang_target_statement_type target_statement;
391
  lang_output_statement_type output_statement;
392
  lang_input_section_type input_section;
393
  lang_common_statement_type common_statement;
394
  lang_object_symbols_statement_type object_symbols_statement;
395
  lang_fill_statement_type fill_statement;
396
  lang_padding_statement_type padding_statement;
397
  lang_group_statement_type group_statement;
398
  lang_insert_statement_type insert_statement;
399
} lang_statement_union_type;
400
 
401
/* This structure holds information about a program header, from the
402
   PHDRS command in the linker script.  */
403
 
404
struct lang_phdr
405
{
406
  struct lang_phdr *next;
407
  const char *name;
408
  unsigned long type;
409
  bfd_boolean filehdr;
410
  bfd_boolean phdrs;
411
  etree_type *at;
412
  etree_type *flags;
413
};
414
 
415
extern struct lang_phdr *lang_phdr_list;
416
 
417
/* This structure is used to hold a list of sections which may not
418
   cross reference each other.  */
419
 
420
typedef struct lang_nocrossref
421
{
422
  struct lang_nocrossref *next;
423
  const char *name;
424
} lang_nocrossref_type;
425
 
426
/* The list of nocrossref lists.  */
427
 
428
struct lang_nocrossrefs
429
{
430
  struct lang_nocrossrefs *next;
431
  lang_nocrossref_type *list;
432
};
433
 
434
extern struct lang_nocrossrefs *nocrossref_list;
435
 
436
/* This structure is used to hold a list of input section names which
437
   will not match an output section in the linker script.  */
438
 
439
struct unique_sections
440
{
441
  struct unique_sections *next;
442
  const char *name;
443
};
444
 
445
/* This structure records symbols for which we need to keep track of
446
   definedness for use in the DEFINED () test.  */
447
 
448
struct lang_definedness_hash_entry
449
{
450
  struct bfd_hash_entry root;
451
  int iteration;
452
};
453
 
454
/* Used by place_orphan to keep track of orphan sections and statements.  */
455
 
456
struct orphan_save
457
{
458
  const char *name;
459
  flagword flags;
460
  lang_output_section_statement_type *os;
461
  asection **section;
462
  lang_statement_union_type **stmt;
463
  lang_output_section_statement_type **os_tail;
464
};
465
 
466
extern const char *output_target;
467
extern lang_output_section_statement_type *abs_output_section;
468
extern lang_statement_list_type lang_output_section_statement;
469
extern bfd_boolean lang_has_input_file;
470
extern etree_type *base;
471
extern lang_statement_list_type *stat_ptr;
472
extern bfd_boolean delete_output_file_on_failure;
473
 
474
extern struct bfd_sym_chain entry_symbol;
475
extern const char *entry_section;
476
extern bfd_boolean entry_from_cmdline;
477
extern lang_statement_list_type file_chain;
478
extern lang_statement_list_type input_file_chain;
479
 
480
extern int lang_statement_iteration;
481
extern bfd_boolean missing_file;
482
 
483
extern void lang_init
484
  (void);
485
extern void lang_finish
486
  (void);
487
extern lang_memory_region_type * lang_memory_region_lookup
488
  (const char * const, bfd_boolean);
489
extern void lang_memory_region_alias
490
  (const char *, const char *);
491
extern void lang_map
492
  (void);
493
extern void lang_set_flags
494
  (lang_memory_region_type *, const char *, int);
495
extern void lang_add_output
496
  (const char *, int from_script);
497
extern lang_output_section_statement_type *lang_enter_output_section_statement
498
  (const char *output_section_statement_name,
499
   etree_type *address_exp,
500
   enum section_type sectype,
501
   etree_type *align,
502
   etree_type *subalign,
503
   etree_type *, int);
504
extern void lang_final
505
  (void);
506
extern void lang_relax_sections
507
  (bfd_boolean);
508
extern void lang_process
509
  (void);
510
extern void lang_section_start
511
  (const char *, union etree_union *, const segment_type *);
512
extern void lang_add_entry
513
  (const char *, bfd_boolean);
514
extern void lang_default_entry
515
  (const char *);
516
extern void lang_add_target
517
  (const char *);
518
extern void lang_add_wild
519
  (struct wildcard_spec *, struct wildcard_list *, bfd_boolean);
520
extern void lang_add_map
521
  (const char *);
522
extern void lang_add_fill
523
  (fill_type *);
524
extern lang_assignment_statement_type *lang_add_assignment
525
  (union etree_union *);
526
extern void lang_add_attribute
527
  (enum statement_enum);
528
extern void lang_startup
529
  (const char *);
530
extern void lang_float
531
  (bfd_boolean);
532
extern void lang_leave_output_section_statement
533
  (fill_type *, const char *, lang_output_section_phdr_list *,
534
   const char *);
535
extern void lang_abs_symbol_at_end_of
536
  (const char *, const char *);
537
extern void lang_abs_symbol_at_beginning_of
538
  (const char *, const char *);
539
extern void lang_statement_append
540
  (lang_statement_list_type *, lang_statement_union_type *,
541
   lang_statement_union_type **);
542
extern void lang_for_each_input_file
543
  (void (*dothis) (lang_input_statement_type *));
544
extern void lang_for_each_file
545
  (void (*dothis) (lang_input_statement_type *));
546
extern void lang_reset_memory_regions
547
  (void);
548
extern void lang_do_assignments
549
  (lang_phase_type);
550
 
551
#define LANG_FOR_EACH_INPUT_STATEMENT(statement)                        \
552
  lang_input_statement_type *statement;                                 \
553
  for (statement = (lang_input_statement_type *) file_chain.head;       \
554
       statement != (lang_input_statement_type *) NULL;                 \
555
       statement = (lang_input_statement_type *) statement->next)       \
556
 
557
#define lang_output_section_find(NAME) \
558
  lang_output_section_statement_lookup (NAME, 0, FALSE)
559
 
560
extern void lang_process
561
  (void);
562
extern void ldlang_add_file
563
  (lang_input_statement_type *);
564
extern lang_output_section_statement_type *lang_output_section_find_by_flags
565
  (const asection *, lang_output_section_statement_type **,
566
   lang_match_sec_type_func);
567
extern lang_output_section_statement_type *lang_insert_orphan
568
  (asection *, const char *, int, lang_output_section_statement_type *,
569
   struct orphan_save *, etree_type *, lang_statement_list_type *);
570
extern lang_input_statement_type *lang_add_input_file
571
  (const char *, lang_input_file_enum_type, const char *);
572
extern void lang_add_keepsyms_file
573
  (const char *);
574
extern lang_output_section_statement_type *lang_output_section_statement_lookup
575
  (const char *, int, bfd_boolean);
576
extern lang_output_section_statement_type *next_matching_output_section_statement
577
  (lang_output_section_statement_type *, int);
578
extern void ldlang_add_undef
579
  (const char *const, bfd_boolean);
580
extern void lang_add_output_format
581
  (const char *, const char *, const char *, int);
582
extern void lang_list_init
583
  (lang_statement_list_type *);
584
extern void push_stat_ptr
585
  (lang_statement_list_type *);
586
extern void pop_stat_ptr
587
  (void);
588
extern void lang_add_data
589
  (int type, union etree_union *);
590
extern void lang_add_reloc
591
  (bfd_reloc_code_real_type, reloc_howto_type *, asection *, const char *,
592
   union etree_union *);
593
extern void lang_for_each_statement
594
  (void (*) (lang_statement_union_type *));
595
extern void lang_for_each_statement_worker
596
  (void (*) (lang_statement_union_type *), lang_statement_union_type *);
597
extern void *stat_alloc
598
  (size_t);
599
extern void strip_excluded_output_sections
600
  (void);
601
extern void dprint_statement
602
  (lang_statement_union_type *, int);
603
extern void lang_size_sections
604
  (bfd_boolean *, bfd_boolean);
605
extern void one_lang_size_sections_pass
606
  (bfd_boolean *, bfd_boolean);
607
extern void lang_add_insert
608
  (const char *, int);
609
extern void lang_enter_group
610
  (void);
611
extern void lang_leave_group
612
  (void);
613
extern void lang_add_section
614
  (lang_statement_list_type *, asection *,
615
   lang_output_section_statement_type *);
616
extern void lang_new_phdr
617
  (const char *, etree_type *, bfd_boolean, bfd_boolean, etree_type *,
618
   etree_type *);
619
extern void lang_add_nocrossref
620
  (lang_nocrossref_type *);
621
extern void lang_enter_overlay
622
  (etree_type *, etree_type *);
623
extern void lang_enter_overlay_section
624
  (const char *);
625
extern void lang_leave_overlay_section
626
  (fill_type *, lang_output_section_phdr_list *);
627
extern void lang_leave_overlay
628
  (etree_type *, int, fill_type *, const char *,
629
   lang_output_section_phdr_list *, const char *);
630
 
631
extern struct bfd_elf_version_tree *lang_elf_version_info;
632
 
633
extern struct bfd_elf_version_expr *lang_new_vers_pattern
634
  (struct bfd_elf_version_expr *, const char *, const char *, bfd_boolean);
635
extern struct bfd_elf_version_tree *lang_new_vers_node
636
  (struct bfd_elf_version_expr *, struct bfd_elf_version_expr *);
637
extern struct bfd_elf_version_deps *lang_add_vers_depend
638
  (struct bfd_elf_version_deps *, const char *);
639
extern void lang_register_vers_node
640
  (const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
641
extern void lang_append_dynamic_list (struct bfd_elf_version_expr *);
642
extern void lang_append_dynamic_list_cpp_typeinfo (void);
643
extern void lang_append_dynamic_list_cpp_new (void);
644
extern void lang_add_unique
645
  (const char *);
646
extern const char *lang_get_output_target
647
  (void);
648
extern void lang_track_definedness (const char *);
649
extern int lang_symbol_definition_iteration (const char *);
650
extern void lang_update_definedness
651
  (const char *, struct bfd_link_hash_entry *);
652
 
653
extern void add_excluded_libs (const char *);
654
extern bfd_boolean load_symbols
655
  (lang_input_statement_type *, lang_statement_list_type *);
656
 
657
extern bfd_boolean
658
ldlang_override_segment_assignment
659
  (struct bfd_link_info *, bfd *, asection *, asection *, bfd_boolean);
660
 
661
extern void
662
lang_ld_feature (char *);
663
 
664
#endif

powered by: WebSVN 2.1.0

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