Import updated translations supplied by the Translation Project.
[deliverable/binutils-gdb.git] / bfd / libcoff.h
CommitLineData
4eef72c7 1/* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically
59bc061d 2 generated from "libcoff-in.h" and "coffcode.h".
4eef72c7
AM
3 Run "make headers" in your build bfd/ to regenerate. */
4
252b5132 5/* BFD COFF object file private structure.
4b95cf5c 6 Copyright (C) 1990-2014 Free Software Foundation, Inc.
252b5132
RH
7 Written by Cygnus Support.
8
7920ce38 9 This file is part of BFD, the Binary File Descriptor library.
252b5132 10
7920ce38
NC
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
cd123cb7 13 the Free Software Foundation; either version 3 of the License, or
7920ce38 14 (at your option) any later version.
252b5132 15
7920ce38
NC
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
252b5132 20
7920ce38
NC
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
cd123cb7
NC
23 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
24 MA 02110-1301, USA. */
252b5132
RH
25
26#include "bfdlink.h"
27
7920ce38
NC
28/* Object file tdata; access macros. */
29
30#define coff_data(bfd) ((bfd)->tdata.coff_obj_data)
7920ce38
NC
31#define obj_pe(bfd) (coff_data (bfd)->pe)
32#define obj_symbols(bfd) (coff_data (bfd)->symbols)
33#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos)
34#define obj_relocbase(bfd) (coff_data (bfd)->relocbase)
35#define obj_raw_syments(bfd) (coff_data (bfd)->raw_syments)
36#define obj_raw_syment_count(bfd) (coff_data (bfd)->raw_syment_count)
37#define obj_convert(bfd) (coff_data (bfd)->conversion_table)
38#define obj_conv_table_size(bfd) (coff_data (bfd)->conv_table_size)
39#define obj_coff_external_syms(bfd) (coff_data (bfd)->external_syms)
40#define obj_coff_keep_syms(bfd) (coff_data (bfd)->keep_syms)
41#define obj_coff_strings(bfd) (coff_data (bfd)->strings)
42#define obj_coff_keep_strings(bfd) (coff_data (bfd)->keep_strings)
43#define obj_coff_sym_hashes(bfd) (coff_data (bfd)->sym_hashes)
d71f672e 44#define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written)
7920ce38 45#define obj_coff_local_toc_table(bfd) (coff_data (bfd)->local_toc_sym_map)
252b5132
RH
46
47/* `Tdata' information kept for COFF files. */
48
49typedef struct coff_tdata
50{
7920ce38 51 struct coff_symbol_struct *symbols; /* Symtab for input bfd. */
252b5132
RH
52 unsigned int *conversion_table;
53 int conv_table_size;
54 file_ptr sym_filepos;
55
56 struct coff_ptr_struct *raw_syments;
00692651 57 unsigned long raw_syment_count;
252b5132 58
7920ce38 59 /* These are only valid once writing has begun. */
bad1a9f7 60 unsigned long int relocbase;
252b5132
RH
61
62 /* These members communicate important constants about the symbol table
63 to GDB's symbol-reading code. These `constants' unfortunately vary
64 from coff implementation to implementation... */
65 unsigned local_n_btmask;
66 unsigned local_n_btshft;
67 unsigned local_n_tmask;
68 unsigned local_n_tshift;
69 unsigned local_symesz;
70 unsigned local_auxesz;
71 unsigned local_linesz;
72
73 /* The unswapped external symbols. May be NULL. Read by
74 _bfd_coff_get_external_symbols. */
7920ce38 75 void * external_syms;
b34976b6
AM
76 /* If this is TRUE, the external_syms may not be freed. */
77 bfd_boolean keep_syms;
252b5132
RH
78
79 /* The string table. May be NULL. Read by
80 _bfd_coff_read_string_table. */
81 char *strings;
b34976b6
AM
82 /* If this is TRUE, the strings may not be freed. */
83 bfd_boolean keep_strings;
84 /* If this is TRUE, the strings have been written out already. */
85 bfd_boolean strings_written;
252b5132 86
7920ce38 87 /* Is this a PE format coff file? */
252b5132
RH
88 int pe;
89 /* Used by the COFF backend linker. */
90 struct coff_link_hash_entry **sym_hashes;
91
7920ce38 92 /* Used by the pe linker for PowerPC. */
252b5132
RH
93 int *local_toc_sym_map;
94
95 struct bfd_link_info *link_info;
96
97 /* Used by coff_find_nearest_line. */
7920ce38 98 void * line_info;
252b5132 99
7920ce38
NC
100 /* A place to stash dwarf2 info for this bfd. */
101 void * dwarf2_find_line_info;
51db3708 102
00692651
ILT
103 /* The timestamp from the COFF file header. */
104 long timestamp;
105
252b5132
RH
106 /* Copy of some of the f_flags bits in the COFF filehdr structure,
107 used by ARM code. */
108 flagword flags;
109
9bf609ec
JK
110 /* coff-stgo32 EXE stub header after BFD tdata has been allocated. Its data
111 is kept in internal_filehdr.go32stub beforehand. */
112 char *go32stub;
252b5132
RH
113} coff_data_type;
114
7920ce38 115/* Tdata for pe image files. */
252b5132
RH
116typedef struct pe_tdata
117{
118 coff_data_type coff;
119 struct internal_extra_pe_aouthdr pe_opthdr;
120 int dll;
121 int has_reloc_section;
441f34fa 122 int dont_strip_reloc;
0cb112f7 123 bfd_boolean insert_timestamp;
7920ce38 124 bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
252b5132 125 flagword real_flags;
61e2488c 126
e30d16e9 127 /* Build-id info. */
61e2488c
JT
128 struct
129 {
130 bfd_boolean (*after_write_object_contents) (bfd *);
131 const char *style;
132 asection *sec;
133 } build_id;
252b5132
RH
134} pe_data_type;
135
136#define pe_data(bfd) ((bfd)->tdata.pe_obj_data)
137
138/* Tdata for XCOFF files. */
139
140struct xcoff_tdata
141{
142 /* Basic COFF information. */
143 coff_data_type coff;
144
b34976b6
AM
145 /* TRUE if this is an XCOFF64 file. */
146 bfd_boolean xcoff64;
a2fdf270 147
b34976b6
AM
148 /* TRUE if a large a.out header should be generated. */
149 bfd_boolean full_aouthdr;
252b5132
RH
150
151 /* TOC value. */
152 bfd_vma toc;
153
154 /* Index of section holding TOC. */
155 int sntoc;
156
157 /* Index of section holding entry point. */
158 int snentry;
159
160 /* .text alignment from optional header. */
161 int text_align_power;
162
163 /* .data alignment from optional header. */
164 int data_align_power;
165
166 /* modtype from optional header. */
167 short modtype;
168
169 /* cputype from optional header. */
170 short cputype;
171
172 /* maxdata from optional header. */
f34d8777 173 bfd_vma maxdata;
252b5132
RH
174
175 /* maxstack from optional header. */
f34d8777 176 bfd_vma maxstack;
252b5132
RH
177
178 /* Used by the XCOFF backend linker. */
179 asection **csects;
e450936a 180 long *debug_indices;
3df13c4a 181 unsigned int *lineno_counts;
252b5132
RH
182 unsigned int import_file_id;
183};
184
185#define xcoff_data(abfd) ((abfd)->tdata.xcoff_obj_data)
186
08da05b0 187/* We take the address of the first element of an asymbol to ensure that the
7920ce38 188 macro is only ever applied to an asymbol. */
252b5132
RH
189#define coffsymbol(asymbol) ((coff_symbol_type *)(&((asymbol)->the_bfd)))
190
191/* The used_by_bfd field of a section may be set to a pointer to this
192 structure. */
193
194struct coff_section_tdata
195{
196 /* The relocs, swapped into COFF internal form. This may be NULL. */
197 struct internal_reloc *relocs;
b34976b6
AM
198 /* If this is TRUE, the relocs entry may not be freed. */
199 bfd_boolean keep_relocs;
252b5132
RH
200 /* The section contents. This may be NULL. */
201 bfd_byte *contents;
b34976b6
AM
202 /* If this is TRUE, the contents entry may not be freed. */
203 bfd_boolean keep_contents;
252b5132
RH
204 /* Information cached by coff_find_nearest_line. */
205 bfd_vma offset;
206 unsigned int i;
207 const char *function;
082b7297
L
208 /* Optional information about a COMDAT entry; NULL if not COMDAT. */
209 struct coff_comdat_info *comdat;
252b5132
RH
210 int line_base;
211 /* A pointer used for .stab linking optimizations. */
7920ce38 212 void * stab_info;
252b5132 213 /* Available for individual backends. */
7920ce38 214 void * tdata;
252b5132
RH
215};
216
217/* An accessor macro for the coff_section_tdata structure. */
218#define coff_section_data(abfd, sec) \
219 ((struct coff_section_tdata *) (sec)->used_by_bfd)
220
221/* Tdata for sections in XCOFF files. This is used by the linker. */
222
223struct xcoff_section_tdata
224{
225 /* Used for XCOFF csects created by the linker; points to the real
226 XCOFF section which contains this csect. */
227 asection *enclosing;
228 /* The lineno_count field for the enclosing section, because we are
229 going to clobber it there. */
230 unsigned int lineno_count;
4cc02a02 231 /* The first and last symbol indices for symbols used by this csect. */
252b5132
RH
232 unsigned long first_symndx;
233 unsigned long last_symndx;
234};
235
236/* An accessor macro the xcoff_section_tdata structure. */
237#define xcoff_section_data(abfd, sec) \
238 ((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
239
8d3ad4e1 240/* Tdata for sections in PE files. */
252b5132
RH
241
242struct pei_section_tdata
243{
244 /* The virtual size of the section. */
245 bfd_size_type virt_size;
8d3ad4e1
ILT
246 /* The PE section flags. */
247 long pe_flags;
252b5132
RH
248};
249
250/* An accessor macro for the pei_section_tdata structure. */
251#define pei_section_data(abfd, sec) \
252 ((struct pei_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
253
254/* COFF linker hash table entries. */
255
256struct coff_link_hash_entry
257{
258 struct bfd_link_hash_entry root;
259
260 /* Symbol index in output file. Set to -1 initially. Set to -2 if
261 there is a reloc against this symbol. */
262 long indx;
263
264 /* Symbol type. */
265 unsigned short type;
266
267 /* Symbol class. */
96d56e9f 268 unsigned char symbol_class;
252b5132
RH
269
270 /* Number of auxiliary entries. */
271 char numaux;
272
273 /* BFD to take auxiliary entries from. */
274 bfd *auxbfd;
275
276 /* Pointer to array of auxiliary entries, if any. */
277 union internal_auxent *aux;
7fd9c191
ILT
278
279 /* Flag word; legal values follow. */
280 unsigned short coff_link_hash_flags;
281 /* Symbol is a PE section symbol. */
282#define COFF_LINK_HASH_PE_SECTION_SYMBOL (01)
252b5132
RH
283};
284
285/* COFF linker hash table. */
286
287struct coff_link_hash_table
288{
289 struct bfd_link_hash_table root;
290 /* A pointer to information used to link stabs in sections. */
3722b82f 291 struct stab_info stab_info;
252b5132
RH
292};
293
294/* Look up an entry in a COFF linker hash table. */
295
296#define coff_link_hash_lookup(table, string, create, copy, follow) \
297 ((struct coff_link_hash_entry *) \
298 bfd_link_hash_lookup (&(table)->root, (string), (create), \
299 (copy), (follow)))
300
301/* Traverse a COFF linker hash table. */
302
303#define coff_link_hash_traverse(table, func, info) \
304 (bfd_link_hash_traverse \
305 (&(table)->root, \
7920ce38 306 (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \
252b5132
RH
307 (info)))
308
309/* Get the COFF linker hash table from a link_info structure. */
310
311#define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
312
313/* Functions in coffgen.c. */
dc810e39 314extern const bfd_target *coff_object_p
7920ce38 315 (bfd *);
198beae2 316extern struct bfd_section *coff_section_from_bfd_index
7920ce38 317 (bfd *, int);
dc810e39 318extern long coff_get_symtab_upper_bound
7920ce38 319 (bfd *);
6cee3f79 320extern long coff_canonicalize_symtab
7920ce38 321 (bfd *, asymbol **);
dc810e39 322extern int coff_count_linenumbers
7920ce38 323 (bfd *);
dc810e39 324extern struct coff_symbol_struct *coff_symbol_from
7920ce38 325 (bfd *, asymbol *);
b34976b6 326extern bfd_boolean coff_renumber_symbols
7920ce38 327 (bfd *, int *);
dc810e39 328extern void coff_mangle_symbols
7920ce38 329 (bfd *);
b34976b6 330extern bfd_boolean coff_write_symbols
7920ce38 331 (bfd *);
e7ebb214
JB
332extern bfd_boolean coff_write_alien_symbol
333 (bfd *, asymbol *, struct internal_syment *, bfd_vma *,
334 bfd_size_type *, asection **, bfd_size_type *);
b34976b6 335extern bfd_boolean coff_write_linenumbers
7920ce38 336 (bfd *);
dc810e39 337extern alent *coff_get_lineno
7920ce38 338 (bfd *, asymbol *);
dc810e39 339extern asymbol *coff_section_symbol
7920ce38 340 (bfd *, char *);
b34976b6 341extern bfd_boolean _bfd_coff_get_external_symbols
7920ce38 342 (bfd *);
dc810e39 343extern const char *_bfd_coff_read_string_table
7920ce38 344 (bfd *);
b34976b6 345extern bfd_boolean _bfd_coff_free_symbols
7920ce38 346 (bfd *);
dc810e39 347extern struct coff_ptr_struct *coff_get_normalized_symtab
7920ce38 348 (bfd *);
dc810e39 349extern long coff_get_reloc_upper_bound
7920ce38 350 (bfd *, sec_ptr);
dc810e39 351extern asymbol *coff_make_empty_symbol
7920ce38 352 (bfd *);
dc810e39 353extern void coff_print_symbol
7920ce38 354 (bfd *, void * filep, asymbol *, bfd_print_symbol_type);
dc810e39 355extern void coff_get_symbol_info
7920ce38 356 (bfd *, asymbol *, symbol_info *ret);
b34976b6 357extern bfd_boolean _bfd_coff_is_local_label_name
7920ce38 358 (bfd *, const char *);
dc810e39 359extern asymbol *coff_bfd_make_debug_symbol
7920ce38 360 (bfd *, void *, unsigned long);
b34976b6 361extern bfd_boolean coff_find_nearest_line
fb167eb2
AM
362 (bfd *, asymbol **, asection *, bfd_vma,
363 const char **, const char **, unsigned int *, unsigned int *);
9c461f7d 364#define coff_find_line _bfd_nosymbols_find_line
fc28f9aa
TG
365struct dwarf_debug_section;
366extern bfd_boolean coff_find_nearest_line_with_names
fb167eb2
AM
367 (bfd *, asymbol **, asection *, bfd_vma, const char **, const char **,
368 unsigned int *, const struct dwarf_debug_section *);
4ab527b0
FF
369extern bfd_boolean coff_find_inliner_info
370 (bfd *, const char **, const char **, unsigned int *);
dc810e39 371extern int coff_sizeof_headers
a6b96beb 372 (bfd *, struct bfd_link_info *);
b34976b6 373extern bfd_boolean bfd_coff_reloc16_relax_section
7920ce38 374 (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
252b5132 375extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
7920ce38
NC
376 (bfd *, struct bfd_link_info *, struct bfd_link_order *,
377 bfd_byte *, bfd_boolean, asymbol **);
dc810e39 378extern bfd_vma bfd_coff_reloc16_get_value
7920ce38 379 (arelent *, struct bfd_link_info *, asection *);
dc810e39 380extern void bfd_perform_slip
7920ce38 381 (bfd *, unsigned int, asection *, bfd_vma);
252b5132
RH
382
383/* Functions and types in cofflink.c. */
384
ceae3e33 385#define STRING_SIZE_SIZE 4
252b5132
RH
386
387/* We use a hash table to merge identical enum, struct, and union
388 definitions in the linker. */
389
390/* Information we keep for a single element (an enum value, a
391 structure or union field) in the debug merge hash table. */
392
393struct coff_debug_merge_element
394{
395 /* Next element. */
396 struct coff_debug_merge_element *next;
397
398 /* Name. */
399 const char *name;
400
401 /* Type. */
402 unsigned int type;
403
404 /* Symbol index for complex type. */
405 long tagndx;
406};
407
408/* A linked list of debug merge entries for a given name. */
409
410struct coff_debug_merge_type
411{
412 /* Next type with the same name. */
413 struct coff_debug_merge_type *next;
414
415 /* Class of type. */
96d56e9f 416 int type_class;
252b5132
RH
417
418 /* Symbol index where this type is defined. */
419 long indx;
420
421 /* List of elements. */
422 struct coff_debug_merge_element *elements;
423};
424
425/* Information we store in the debug merge hash table. */
426
427struct coff_debug_merge_hash_entry
428{
429 struct bfd_hash_entry root;
430
431 /* A list of types with this name. */
432 struct coff_debug_merge_type *types;
433};
434
435/* The debug merge hash table. */
436
437struct coff_debug_merge_hash_table
438{
439 struct bfd_hash_table root;
440};
441
442/* Initialize a COFF debug merge hash table. */
443
444#define coff_debug_merge_hash_table_init(table) \
66eb6687
AM
445 (bfd_hash_table_init (&(table)->root, _bfd_coff_debug_merge_hash_newfunc, \
446 sizeof (struct coff_debug_merge_hash_entry)))
252b5132
RH
447
448/* Free a COFF debug merge hash table. */
449
450#define coff_debug_merge_hash_table_free(table) \
451 (bfd_hash_table_free (&(table)->root))
452
453/* Look up an entry in a COFF debug merge hash table. */
454
455#define coff_debug_merge_hash_lookup(table, string, create, copy) \
456 ((struct coff_debug_merge_hash_entry *) \
457 bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
458
459/* Information we keep for each section in the output file when doing
1049f94e 460 a relocatable link. */
252b5132
RH
461
462struct coff_link_section_info
463{
464 /* The relocs to be output. */
465 struct internal_reloc *relocs;
466 /* For each reloc against a global symbol whose index was not known
467 when the reloc was handled, the global hash table entry. */
468 struct coff_link_hash_entry **rel_hashes;
469};
470
471/* Information that we pass around while doing the final link step. */
472
473struct coff_final_link_info
474{
475 /* General link information. */
476 struct bfd_link_info *info;
477 /* Output BFD. */
478 bfd *output_bfd;
479 /* Used to indicate failure in traversal routine. */
b34976b6 480 bfd_boolean failed;
252b5132
RH
481 /* If doing "task linking" set only during the time when we want the
482 global symbol writer to convert the storage class of defined global
483 symbols from global to static. */
b34976b6 484 bfd_boolean global_to_static;
252b5132
RH
485 /* Hash table for long symbol names. */
486 struct bfd_strtab_hash *strtab;
1049f94e 487 /* When doing a relocatable link, an array of information kept for
252b5132
RH
488 each output section, indexed by the target_index field. */
489 struct coff_link_section_info *section_info;
490 /* Symbol index of last C_FILE symbol (-1 if none). */
491 long last_file_index;
492 /* Contents of last C_FILE symbol. */
493 struct internal_syment last_file;
494 /* Symbol index of first aux entry of last .bf symbol with an empty
495 endndx field (-1 if none). */
496 long last_bf_index;
497 /* Contents of last_bf_index aux entry. */
498 union internal_auxent last_bf;
499 /* Hash table used to merge debug information. */
500 struct coff_debug_merge_hash_table debug_merge;
501 /* Buffer large enough to hold swapped symbols of any input file. */
502 struct internal_syment *internal_syms;
503 /* Buffer large enough to hold sections of symbols of any input file. */
504 asection **sec_ptrs;
505 /* Buffer large enough to hold output indices of symbols of any
506 input file. */
507 long *sym_indices;
508 /* Buffer large enough to hold output symbols for any input file. */
509 bfd_byte *outsyms;
510 /* Buffer large enough to hold external line numbers for any input
511 section. */
512 bfd_byte *linenos;
513 /* Buffer large enough to hold any input section. */
514 bfd_byte *contents;
515 /* Buffer large enough to hold external relocs of any input section. */
516 bfd_byte *external_relocs;
517 /* Buffer large enough to hold swapped relocs of any input section. */
518 struct internal_reloc *internal_relocs;
519};
520
5dccc1dd
ILT
521/* Most COFF variants have no way to record the alignment of a
522 section. This struct is used to set a specific alignment based on
523 the name of the section. */
524
525struct coff_section_alignment_entry
526{
527 /* The section name. */
528 const char *name;
529
530 /* This is either (unsigned int) -1, indicating that the section
531 name must match exactly, or it is the number of letters which
532 must match at the start of the name. */
533 unsigned int comparison_length;
534
535 /* These macros may be used to fill in the first two fields in a
536 structure initialization. */
537#define COFF_SECTION_NAME_EXACT_MATCH(name) (name), ((unsigned int) -1)
538#define COFF_SECTION_NAME_PARTIAL_MATCH(name) (name), (sizeof (name) - 1)
539
540 /* Only use this entry if the default section alignment for this
541 target is at least that much (as a power of two). If this field
542 is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
543 unsigned int default_alignment_min;
544
545 /* Only use this entry if the default section alignment for this
546 target is no greater than this (as a power of two). If this
547 field is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
548 unsigned int default_alignment_max;
549
550#define COFF_ALIGNMENT_FIELD_EMPTY ((unsigned int) -1)
551
552 /* The desired alignment for this section (as a power of two). */
553 unsigned int alignment_power;
554};
555
252b5132 556extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
7920ce38 557 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 558extern bfd_boolean _bfd_coff_link_hash_table_init
7920ce38
NC
559 (struct coff_link_hash_table *, bfd *,
560 struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
561 struct bfd_hash_table *,
66eb6687
AM
562 const char *),
563 unsigned int);
252b5132 564extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create
7920ce38 565 (bfd *);
252b5132 566extern const char *_bfd_coff_internal_syment_name
7920ce38 567 (bfd *, const struct internal_syment *, char *);
c77ec726
AM
568extern bfd_boolean _bfd_coff_section_already_linked
569 (bfd *, asection *, struct bfd_link_info *);
b34976b6 570extern bfd_boolean _bfd_coff_link_add_symbols
7920ce38 571 (bfd *, struct bfd_link_info *);
b34976b6 572extern bfd_boolean _bfd_coff_final_link
7920ce38 573 (bfd *, struct bfd_link_info *);
252b5132 574extern struct internal_reloc *_bfd_coff_read_internal_relocs
7920ce38
NC
575 (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
576 struct internal_reloc *);
b34976b6 577extern bfd_boolean _bfd_coff_generic_relocate_section
7920ce38
NC
578 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
579 struct internal_reloc *, struct internal_syment *, asection **);
252b5132 580extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
7920ce38 581 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 582extern bfd_boolean _bfd_coff_write_global_sym
7686d77d 583 (struct bfd_hash_entry *, void *);
b34976b6 584extern bfd_boolean _bfd_coff_write_task_globals
7920ce38 585 (struct coff_link_hash_entry *, void *);
b34976b6 586extern bfd_boolean _bfd_coff_link_input_bfd
7920ce38 587 (struct coff_final_link_info *, bfd *);
b34976b6 588extern bfd_boolean _bfd_coff_reloc_link_order
7920ce38
NC
589 (bfd *, struct coff_final_link_info *, asection *,
590 struct bfd_link_order *);
252b5132
RH
591
592
593#define coff_get_section_contents_in_window \
594 _bfd_generic_get_section_contents_in_window
595
f34d8777
L
596/* Functions in xcofflink.c. */
597
dc810e39 598extern long _bfd_xcoff_get_dynamic_symtab_upper_bound
7920ce38 599 (bfd *);
f34d8777 600extern long _bfd_xcoff_canonicalize_dynamic_symtab
7920ce38 601 (bfd *, asymbol **);
dc810e39 602extern long _bfd_xcoff_get_dynamic_reloc_upper_bound
7920ce38 603 (bfd *);
f34d8777 604extern long _bfd_xcoff_canonicalize_dynamic_reloc
7920ce38 605 (bfd *, arelent **, asymbol **);
f34d8777 606extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
7920ce38 607 (bfd *);
b34976b6 608extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
7920ce38 609 (bfd *, struct bfd_link_info *);
b34976b6 610extern bfd_boolean _bfd_xcoff_bfd_final_link
7920ce38 611 (bfd *, struct bfd_link_info *);
3023e3f6
RS
612extern bfd_boolean _bfd_xcoff_define_common_symbol
613 (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
b34976b6 614extern bfd_boolean _bfd_ppc_xcoff_relocate_section
7920ce38
NC
615 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
616 struct internal_reloc *, struct internal_syment *, asection **);
f34d8777 617
88183869 618/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the
252b5132
RH
619 linker, and so should start with bfd and be declared in bfd.h. */
620
b34976b6 621extern bfd_boolean ppc_allocate_toc_section
7920ce38 622 (struct bfd_link_info *);
b34976b6 623extern bfd_boolean ppc_process_before_allocation
7920ce38 624 (bfd *, struct bfd_link_info *);
e61463e1 625/* Extracted from coffcode.h. */
aaffae57 626
252b5132
RH
627typedef struct coff_ptr_struct
628{
dc810e39
AM
629 /* Remembers the offset from the first symbol in the file for
630 this symbol. Generated by coff_renumber_symbols. */
631 unsigned int offset;
632
633 /* Should the value of this symbol be renumbered. Used for
634 XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */
635 unsigned int fix_value : 1;
636
637 /* Should the tag field of this symbol be renumbered.
638 Created by coff_pointerize_aux. */
639 unsigned int fix_tag : 1;
640
641 /* Should the endidx field of this symbol be renumbered.
642 Created by coff_pointerize_aux. */
643 unsigned int fix_end : 1;
644
645 /* Should the x_csect.x_scnlen field be renumbered.
646 Created by coff_pointerize_aux. */
647 unsigned int fix_scnlen : 1;
648
649 /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the
650 index into the line number entries. Set by coff_slurp_symbol_table. */
651 unsigned int fix_line : 1;
652
653 /* The container for the symbol structure as read and translated
654 from the file. */
655 union
656 {
657 union internal_auxent auxent;
658 struct internal_syment syment;
659 } u;
252b5132
RH
660} combined_entry_type;
661
662
52b219b5 663/* Each canonical asymbol really looks like this: */
252b5132
RH
664
665typedef struct coff_symbol_struct
666{
dc810e39
AM
667 /* The actual symbol which the rest of BFD works with */
668 asymbol symbol;
252b5132 669
dc810e39
AM
670 /* A pointer to the hidden information for this symbol */
671 combined_entry_type *native;
252b5132 672
dc810e39
AM
673 /* A pointer to the linenumber information for this symbol */
674 struct lineno_cache_entry *lineno;
252b5132 675
dc810e39 676 /* Have the line numbers been relocated yet ? */
b34976b6 677 bfd_boolean done_lineno;
252b5132 678} coff_symbol_type;
52b219b5 679/* COFF symbol classifications. */
5d54c628
ILT
680
681enum coff_symbol_classification
682{
52b219b5 683 /* Global symbol. */
5d54c628 684 COFF_SYMBOL_GLOBAL,
52b219b5 685 /* Common symbol. */
5d54c628 686 COFF_SYMBOL_COMMON,
52b219b5 687 /* Undefined symbol. */
5d54c628 688 COFF_SYMBOL_UNDEFINED,
52b219b5 689 /* Local symbol. */
5d54c628 690 COFF_SYMBOL_LOCAL,
52b219b5 691 /* PE section symbol. */
5d54c628
ILT
692 COFF_SYMBOL_PE_SECTION
693};
694
252b5132
RH
695typedef struct
696{
dc810e39 697 void (*_bfd_coff_swap_aux_in)
7920ce38 698 (bfd *, void *, int, int, int, int, void *);
dc810e39
AM
699
700 void (*_bfd_coff_swap_sym_in)
7920ce38 701 (bfd *, void *, void *);
dc810e39
AM
702
703 void (*_bfd_coff_swap_lineno_in)
7920ce38 704 (bfd *, void *, void *);
dc810e39
AM
705
706 unsigned int (*_bfd_coff_swap_aux_out)
7920ce38 707 (bfd *, void *, int, int, int, int, void *);
dc810e39
AM
708
709 unsigned int (*_bfd_coff_swap_sym_out)
7920ce38 710 (bfd *, void *, void *);
dc810e39
AM
711
712 unsigned int (*_bfd_coff_swap_lineno_out)
7920ce38 713 (bfd *, void *, void *);
dc810e39
AM
714
715 unsigned int (*_bfd_coff_swap_reloc_out)
7920ce38 716 (bfd *, void *, void *);
dc810e39
AM
717
718 unsigned int (*_bfd_coff_swap_filehdr_out)
7920ce38 719 (bfd *, void *, void *);
dc810e39
AM
720
721 unsigned int (*_bfd_coff_swap_aouthdr_out)
7920ce38 722 (bfd *, void *, void *);
dc810e39
AM
723
724 unsigned int (*_bfd_coff_swap_scnhdr_out)
7920ce38 725 (bfd *, void *, void *);
dc810e39
AM
726
727 unsigned int _bfd_filhsz;
728 unsigned int _bfd_aoutsz;
729 unsigned int _bfd_scnhsz;
730 unsigned int _bfd_symesz;
731 unsigned int _bfd_auxesz;
732 unsigned int _bfd_relsz;
733 unsigned int _bfd_linesz;
734 unsigned int _bfd_filnmlen;
b34976b6 735 bfd_boolean _bfd_coff_long_filenames;
88183869 736
b34976b6 737 bfd_boolean _bfd_coff_long_section_names;
88183869
DK
738 bfd_boolean (*_bfd_coff_set_long_section_names)
739 (bfd *, int);
68ffbac6 740
dc810e39 741 unsigned int _bfd_coff_default_section_alignment_power;
b34976b6 742 bfd_boolean _bfd_coff_force_symnames_in_strings;
dc810e39 743 unsigned int _bfd_coff_debug_string_prefix_length;
167ad85b 744 unsigned int _bfd_coff_max_nscns;
dc810e39
AM
745
746 void (*_bfd_coff_swap_filehdr_in)
7920ce38 747 (bfd *, void *, void *);
dc810e39
AM
748
749 void (*_bfd_coff_swap_aouthdr_in)
7920ce38 750 (bfd *, void *, void *);
dc810e39
AM
751
752 void (*_bfd_coff_swap_scnhdr_in)
7920ce38 753 (bfd *, void *, void *);
dc810e39
AM
754
755 void (*_bfd_coff_swap_reloc_in)
7920ce38 756 (bfd *abfd, void *, void *);
dc810e39 757
b34976b6 758 bfd_boolean (*_bfd_coff_bad_format_hook)
7920ce38 759 (bfd *, void *);
dc810e39 760
b34976b6 761 bfd_boolean (*_bfd_coff_set_arch_mach_hook)
7920ce38 762 (bfd *, void *);
dc810e39 763
7920ce38
NC
764 void * (*_bfd_coff_mkobject_hook)
765 (bfd *, void *, void *);
dc810e39 766
b34976b6 767 bfd_boolean (*_bfd_styp_to_sec_flags_hook)
7920ce38 768 (bfd *, void *, const char *, asection *, flagword *);
dc810e39
AM
769
770 void (*_bfd_set_alignment_hook)
7920ce38 771 (bfd *, asection *, void *);
dc810e39 772
b34976b6 773 bfd_boolean (*_bfd_coff_slurp_symbol_table)
7920ce38 774 (bfd *);
dc810e39 775
b34976b6 776 bfd_boolean (*_bfd_coff_symname_in_debug)
7920ce38 777 (bfd *, struct internal_syment *);
dc810e39 778
b34976b6 779 bfd_boolean (*_bfd_coff_pointerize_aux_hook)
7920ce38
NC
780 (bfd *, combined_entry_type *, combined_entry_type *,
781 unsigned int, combined_entry_type *);
dc810e39 782
b34976b6 783 bfd_boolean (*_bfd_coff_print_aux)
7920ce38
NC
784 (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
785 combined_entry_type *, unsigned int);
dc810e39
AM
786
787 void (*_bfd_coff_reloc16_extra_cases)
7920ce38
NC
788 (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
789 bfd_byte *, unsigned int *, unsigned int *);
dc810e39
AM
790
791 int (*_bfd_coff_reloc16_estimate)
7920ce38
NC
792 (bfd *, asection *, arelent *, unsigned int,
793 struct bfd_link_info *);
dc810e39
AM
794
795 enum coff_symbol_classification (*_bfd_coff_classify_symbol)
7920ce38 796 (bfd *, struct internal_syment *);
dc810e39 797
b34976b6 798 bfd_boolean (*_bfd_coff_compute_section_file_positions)
7920ce38 799 (bfd *);
dc810e39 800
b34976b6 801 bfd_boolean (*_bfd_coff_start_final_link)
7920ce38 802 (bfd *, struct bfd_link_info *);
dc810e39 803
b34976b6 804 bfd_boolean (*_bfd_coff_relocate_section)
7920ce38
NC
805 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
806 struct internal_reloc *, struct internal_syment *, asection **);
dc810e39
AM
807
808 reloc_howto_type *(*_bfd_coff_rtype_to_howto)
7920ce38 809 (bfd *, asection *, struct internal_reloc *,
dc810e39 810 struct coff_link_hash_entry *, struct internal_syment *,
7920ce38 811 bfd_vma *);
dc810e39 812
b34976b6 813 bfd_boolean (*_bfd_coff_adjust_symndx)
7920ce38
NC
814 (bfd *, struct bfd_link_info *, bfd *, asection *,
815 struct internal_reloc *, bfd_boolean *);
dc810e39 816
b34976b6 817 bfd_boolean (*_bfd_coff_link_add_one_symbol)
7920ce38 818 (struct bfd_link_info *, bfd *, const char *, flagword,
b34976b6 819 asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
7920ce38 820 struct bfd_link_hash_entry **);
dc810e39 821
b34976b6 822 bfd_boolean (*_bfd_coff_link_output_has_begun)
7920ce38 823 (bfd *, struct coff_final_link_info *);
dc810e39 824
b34976b6 825 bfd_boolean (*_bfd_coff_final_link_postscript)
7920ce38 826 (bfd *, struct coff_final_link_info *);
252b5132 827
2b5c217d
NC
828 bfd_boolean (*_bfd_coff_print_pdata)
829 (bfd *, void *);
830
252b5132
RH
831} bfd_coff_backend_data;
832
dc810e39
AM
833#define coff_backend_info(abfd) \
834 ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
252b5132
RH
835
836#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
dc810e39 837 ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
252b5132
RH
838
839#define bfd_coff_swap_sym_in(a,e,i) \
dc810e39 840 ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
252b5132
RH
841
842#define bfd_coff_swap_lineno_in(a,e,i) \
dc810e39 843 ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
252b5132
RH
844
845#define bfd_coff_swap_reloc_out(abfd, i, o) \
dc810e39 846 ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
252b5132
RH
847
848#define bfd_coff_swap_lineno_out(abfd, i, o) \
dc810e39 849 ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
252b5132
RH
850
851#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
dc810e39 852 ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
252b5132
RH
853
854#define bfd_coff_swap_sym_out(abfd, i,o) \
dc810e39 855 ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
252b5132
RH
856
857#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
dc810e39 858 ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
252b5132
RH
859
860#define bfd_coff_swap_filehdr_out(abfd, i,o) \
dc810e39 861 ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
252b5132
RH
862
863#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
dc810e39 864 ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
252b5132
RH
865
866#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
867#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
868#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
869#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
870#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
871#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz)
872#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
692b7d62 873#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
dc810e39
AM
874#define bfd_coff_long_filenames(abfd) \
875 (coff_backend_info (abfd)->_bfd_coff_long_filenames)
252b5132 876#define bfd_coff_long_section_names(abfd) \
dc810e39 877 (coff_backend_info (abfd)->_bfd_coff_long_section_names)
88183869
DK
878#define bfd_coff_set_long_section_names(abfd, enable) \
879 ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
252b5132 880#define bfd_coff_default_section_alignment_power(abfd) \
dc810e39 881 (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
167ad85b
TG
882#define bfd_coff_max_nscns(abfd) \
883 (coff_backend_info (abfd)->_bfd_coff_max_nscns)
884
252b5132 885#define bfd_coff_swap_filehdr_in(abfd, i,o) \
dc810e39 886 ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
252b5132
RH
887
888#define bfd_coff_swap_aouthdr_in(abfd, i,o) \
dc810e39 889 ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
252b5132
RH
890
891#define bfd_coff_swap_scnhdr_in(abfd, i,o) \
dc810e39 892 ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
252b5132
RH
893
894#define bfd_coff_swap_reloc_in(abfd, i, o) \
dc810e39 895 ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
252b5132
RH
896
897#define bfd_coff_bad_format_hook(abfd, filehdr) \
dc810e39 898 ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
252b5132
RH
899
900#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
dc810e39 901 ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
252b5132 902#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
ed781d5d
NC
903 ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
904 (abfd, filehdr, aouthdr))
252b5132 905
7c8ca0e4 906#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
dc810e39
AM
907 ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
908 (abfd, scnhdr, name, section, flags_ptr))
252b5132
RH
909
910#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
dc810e39 911 ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
252b5132
RH
912
913#define bfd_coff_slurp_symbol_table(abfd)\
dc810e39 914 ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
252b5132
RH
915
916#define bfd_coff_symname_in_debug(abfd, sym)\
dc810e39 917 ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
252b5132 918
7f6d05e8 919#define bfd_coff_force_symnames_in_strings(abfd)\
dc810e39 920 (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
7f6d05e8
CP
921
922#define bfd_coff_debug_string_prefix_length(abfd)\
dc810e39 923 (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
7f6d05e8 924
252b5132 925#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
dc810e39
AM
926 ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
927 (abfd, file, base, symbol, aux, indaux))
252b5132 928
ed781d5d
NC
929#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
930 reloc, data, src_ptr, dst_ptr)\
dc810e39
AM
931 ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
932 (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
252b5132
RH
933
934#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
dc810e39
AM
935 ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
936 (abfd, section, reloc, shrink, link_info))
252b5132 937
5d54c628 938#define bfd_coff_classify_symbol(abfd, sym)\
dc810e39
AM
939 ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
940 (abfd, sym))
252b5132
RH
941
942#define bfd_coff_compute_section_file_positions(abfd)\
dc810e39
AM
943 ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
944 (abfd))
252b5132
RH
945
946#define bfd_coff_start_final_link(obfd, info)\
dc810e39
AM
947 ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
948 (obfd, info))
252b5132 949#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
dc810e39
AM
950 ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
951 (obfd, info, ibfd, o, con, rel, isyms, secs))
252b5132 952#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
dc810e39
AM
953 ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
954 (abfd, sec, rel, h, sym, addendp))
252b5132 955#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
dc810e39
AM
956 ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
957 (obfd, info, ibfd, sec, rel, adjustedp))
ed781d5d
NC
958#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
959 value, string, cp, coll, hashp)\
dc810e39
AM
960 ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
961 (info, abfd, name, flags, section, value, string, cp, coll, hashp))
252b5132
RH
962
963#define bfd_coff_link_output_has_begun(a,p) \
7920ce38 964 ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
252b5132 965#define bfd_coff_final_link_postscript(a,p) \
7920ce38 966 ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
252b5132 967
2b5c217d
NC
968#define bfd_coff_have_print_pdata(a) \
969 (coff_backend_info (a)->_bfd_coff_print_pdata)
970#define bfd_coff_print_pdata(a,p) \
971 ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))
972
92dd4511
L
973/* Macro: Returns true if the bfd is a PE executable as opposed to a
974 PE object file. */
975#define bfd_pei_p(abfd) \
976 (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
This page took 1.030915 seconds and 4 git commands to generate.