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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.18.50/] [ld/] [ldlang.h] - Blame information for rev 307

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

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

powered by: WebSVN 2.1.0

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