]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/libcoff-in.h
* ld-cris/libdso-13.d: Adjust for --enable-new-dtags now
[thirdparty/binutils-gdb.git] / bfd / libcoff-in.h
CommitLineData
252b5132 1/* BFD COFF object file private structure.
7898deda 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
7686d77d 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
252b5132
RH
4 Free Software Foundation, Inc.
5 Written by Cygnus Support.
6
7920ce38 7 This file is part of BFD, the Binary File Descriptor library.
252b5132 8
7920ce38
NC
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
cd123cb7 11 the Free Software Foundation; either version 3 of the License, or
7920ce38 12 (at your option) any later version.
252b5132 13
7920ce38
NC
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
252b5132 18
7920ce38
NC
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
cd123cb7
NC
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132
RH
23
24#include "bfdlink.h"
25
7920ce38
NC
26/* Object file tdata; access macros. */
27
28#define coff_data(bfd) ((bfd)->tdata.coff_obj_data)
7920ce38
NC
29#define obj_pe(bfd) (coff_data (bfd)->pe)
30#define obj_symbols(bfd) (coff_data (bfd)->symbols)
31#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos)
32#define obj_relocbase(bfd) (coff_data (bfd)->relocbase)
33#define obj_raw_syments(bfd) (coff_data (bfd)->raw_syments)
34#define obj_raw_syment_count(bfd) (coff_data (bfd)->raw_syment_count)
35#define obj_convert(bfd) (coff_data (bfd)->conversion_table)
36#define obj_conv_table_size(bfd) (coff_data (bfd)->conv_table_size)
37#define obj_coff_external_syms(bfd) (coff_data (bfd)->external_syms)
38#define obj_coff_keep_syms(bfd) (coff_data (bfd)->keep_syms)
39#define obj_coff_strings(bfd) (coff_data (bfd)->strings)
40#define obj_coff_keep_strings(bfd) (coff_data (bfd)->keep_strings)
41#define obj_coff_sym_hashes(bfd) (coff_data (bfd)->sym_hashes)
d71f672e 42#define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written)
7920ce38 43#define obj_coff_local_toc_table(bfd) (coff_data (bfd)->local_toc_sym_map)
252b5132
RH
44
45/* `Tdata' information kept for COFF files. */
46
47typedef struct coff_tdata
48{
7920ce38 49 struct coff_symbol_struct *symbols; /* Symtab for input bfd. */
252b5132
RH
50 unsigned int *conversion_table;
51 int conv_table_size;
52 file_ptr sym_filepos;
53
54 struct coff_ptr_struct *raw_syments;
00692651 55 unsigned long raw_syment_count;
252b5132 56
7920ce38 57 /* These are only valid once writing has begun. */
252b5132
RH
58 long int relocbase;
59
60 /* These members communicate important constants about the symbol table
61 to GDB's symbol-reading code. These `constants' unfortunately vary
62 from coff implementation to implementation... */
63 unsigned local_n_btmask;
64 unsigned local_n_btshft;
65 unsigned local_n_tmask;
66 unsigned local_n_tshift;
67 unsigned local_symesz;
68 unsigned local_auxesz;
69 unsigned local_linesz;
70
71 /* The unswapped external symbols. May be NULL. Read by
72 _bfd_coff_get_external_symbols. */
7920ce38 73 void * external_syms;
b34976b6
AM
74 /* If this is TRUE, the external_syms may not be freed. */
75 bfd_boolean keep_syms;
252b5132
RH
76
77 /* The string table. May be NULL. Read by
78 _bfd_coff_read_string_table. */
79 char *strings;
b34976b6
AM
80 /* If this is TRUE, the strings may not be freed. */
81 bfd_boolean keep_strings;
82 /* If this is TRUE, the strings have been written out already. */
83 bfd_boolean strings_written;
252b5132 84
7920ce38 85 /* Is this a PE format coff file? */
252b5132
RH
86 int pe;
87 /* Used by the COFF backend linker. */
88 struct coff_link_hash_entry **sym_hashes;
89
7920ce38 90 /* Used by the pe linker for PowerPC. */
252b5132
RH
91 int *local_toc_sym_map;
92
93 struct bfd_link_info *link_info;
94
95 /* Used by coff_find_nearest_line. */
7920ce38 96 void * line_info;
252b5132 97
7920ce38
NC
98 /* A place to stash dwarf2 info for this bfd. */
99 void * dwarf2_find_line_info;
51db3708 100
00692651
ILT
101 /* The timestamp from the COFF file header. */
102 long timestamp;
103
252b5132
RH
104 /* Copy of some of the f_flags bits in the COFF filehdr structure,
105 used by ARM code. */
106 flagword flags;
107
9bf609ec
JK
108 /* coff-stgo32 EXE stub header after BFD tdata has been allocated. Its data
109 is kept in internal_filehdr.go32stub beforehand. */
110 char *go32stub;
252b5132
RH
111} coff_data_type;
112
7920ce38 113/* Tdata for pe image files. */
252b5132
RH
114typedef struct pe_tdata
115{
116 coff_data_type coff;
117 struct internal_extra_pe_aouthdr pe_opthdr;
118 int dll;
119 int has_reloc_section;
441f34fa 120 int dont_strip_reloc;
7920ce38 121 bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
252b5132
RH
122 flagword real_flags;
123} pe_data_type;
124
125#define pe_data(bfd) ((bfd)->tdata.pe_obj_data)
126
127/* Tdata for XCOFF files. */
128
129struct xcoff_tdata
130{
131 /* Basic COFF information. */
132 coff_data_type coff;
133
b34976b6
AM
134 /* TRUE if this is an XCOFF64 file. */
135 bfd_boolean xcoff64;
a2fdf270 136
b34976b6
AM
137 /* TRUE if a large a.out header should be generated. */
138 bfd_boolean full_aouthdr;
252b5132
RH
139
140 /* TOC value. */
141 bfd_vma toc;
142
143 /* Index of section holding TOC. */
144 int sntoc;
145
146 /* Index of section holding entry point. */
147 int snentry;
148
149 /* .text alignment from optional header. */
150 int text_align_power;
151
152 /* .data alignment from optional header. */
153 int data_align_power;
154
155 /* modtype from optional header. */
156 short modtype;
157
158 /* cputype from optional header. */
159 short cputype;
160
161 /* maxdata from optional header. */
beb1bf64 162 bfd_vma maxdata;
252b5132
RH
163
164 /* maxstack from optional header. */
beb1bf64 165 bfd_vma maxstack;
252b5132
RH
166
167 /* Used by the XCOFF backend linker. */
168 asection **csects;
e450936a 169 long *debug_indices;
3df13c4a 170 unsigned int *lineno_counts;
252b5132
RH
171 unsigned int import_file_id;
172};
173
174#define xcoff_data(abfd) ((abfd)->tdata.xcoff_obj_data)
175
08da05b0 176/* We take the address of the first element of an asymbol to ensure that the
7920ce38 177 macro is only ever applied to an asymbol. */
252b5132
RH
178#define coffsymbol(asymbol) ((coff_symbol_type *)(&((asymbol)->the_bfd)))
179
180/* The used_by_bfd field of a section may be set to a pointer to this
181 structure. */
182
183struct coff_section_tdata
184{
185 /* The relocs, swapped into COFF internal form. This may be NULL. */
186 struct internal_reloc *relocs;
b34976b6
AM
187 /* If this is TRUE, the relocs entry may not be freed. */
188 bfd_boolean keep_relocs;
252b5132
RH
189 /* The section contents. This may be NULL. */
190 bfd_byte *contents;
b34976b6
AM
191 /* If this is TRUE, the contents entry may not be freed. */
192 bfd_boolean keep_contents;
252b5132
RH
193 /* Information cached by coff_find_nearest_line. */
194 bfd_vma offset;
195 unsigned int i;
196 const char *function;
082b7297
L
197 /* Optional information about a COMDAT entry; NULL if not COMDAT. */
198 struct coff_comdat_info *comdat;
252b5132
RH
199 int line_base;
200 /* A pointer used for .stab linking optimizations. */
7920ce38 201 void * stab_info;
252b5132 202 /* Available for individual backends. */
7920ce38 203 void * tdata;
252b5132
RH
204};
205
206/* An accessor macro for the coff_section_tdata structure. */
207#define coff_section_data(abfd, sec) \
208 ((struct coff_section_tdata *) (sec)->used_by_bfd)
209
210/* Tdata for sections in XCOFF files. This is used by the linker. */
211
212struct xcoff_section_tdata
213{
214 /* Used for XCOFF csects created by the linker; points to the real
215 XCOFF section which contains this csect. */
216 asection *enclosing;
217 /* The lineno_count field for the enclosing section, because we are
218 going to clobber it there. */
219 unsigned int lineno_count;
4cc02a02 220 /* The first and last symbol indices for symbols used by this csect. */
252b5132
RH
221 unsigned long first_symndx;
222 unsigned long last_symndx;
223};
224
225/* An accessor macro the xcoff_section_tdata structure. */
226#define xcoff_section_data(abfd, sec) \
227 ((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
228
8d3ad4e1 229/* Tdata for sections in PE files. */
252b5132
RH
230
231struct pei_section_tdata
232{
233 /* The virtual size of the section. */
234 bfd_size_type virt_size;
8d3ad4e1
ILT
235 /* The PE section flags. */
236 long pe_flags;
252b5132
RH
237};
238
239/* An accessor macro for the pei_section_tdata structure. */
240#define pei_section_data(abfd, sec) \
241 ((struct pei_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
242
243/* COFF linker hash table entries. */
244
245struct coff_link_hash_entry
246{
247 struct bfd_link_hash_entry root;
248
249 /* Symbol index in output file. Set to -1 initially. Set to -2 if
250 there is a reloc against this symbol. */
251 long indx;
252
253 /* Symbol type. */
254 unsigned short type;
255
256 /* Symbol class. */
96d56e9f 257 unsigned char symbol_class;
252b5132
RH
258
259 /* Number of auxiliary entries. */
260 char numaux;
261
262 /* BFD to take auxiliary entries from. */
263 bfd *auxbfd;
264
265 /* Pointer to array of auxiliary entries, if any. */
266 union internal_auxent *aux;
7fd9c191
ILT
267
268 /* Flag word; legal values follow. */
269 unsigned short coff_link_hash_flags;
270 /* Symbol is a PE section symbol. */
271#define COFF_LINK_HASH_PE_SECTION_SYMBOL (01)
252b5132
RH
272};
273
274/* COFF linker hash table. */
275
276struct coff_link_hash_table
277{
278 struct bfd_link_hash_table root;
279 /* A pointer to information used to link stabs in sections. */
3722b82f 280 struct stab_info stab_info;
252b5132
RH
281};
282
283/* Look up an entry in a COFF linker hash table. */
284
285#define coff_link_hash_lookup(table, string, create, copy, follow) \
286 ((struct coff_link_hash_entry *) \
287 bfd_link_hash_lookup (&(table)->root, (string), (create), \
288 (copy), (follow)))
289
290/* Traverse a COFF linker hash table. */
291
292#define coff_link_hash_traverse(table, func, info) \
293 (bfd_link_hash_traverse \
294 (&(table)->root, \
7920ce38 295 (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \
252b5132
RH
296 (info)))
297
298/* Get the COFF linker hash table from a link_info structure. */
299
300#define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
301
302/* Functions in coffgen.c. */
dc810e39 303extern const bfd_target *coff_object_p
7920ce38 304 (bfd *);
198beae2 305extern struct bfd_section *coff_section_from_bfd_index
7920ce38 306 (bfd *, int);
dc810e39 307extern long coff_get_symtab_upper_bound
7920ce38 308 (bfd *);
6cee3f79 309extern long coff_canonicalize_symtab
7920ce38 310 (bfd *, asymbol **);
dc810e39 311extern int coff_count_linenumbers
7920ce38 312 (bfd *);
dc810e39 313extern struct coff_symbol_struct *coff_symbol_from
7920ce38 314 (bfd *, asymbol *);
b34976b6 315extern bfd_boolean coff_renumber_symbols
7920ce38 316 (bfd *, int *);
dc810e39 317extern void coff_mangle_symbols
7920ce38 318 (bfd *);
b34976b6 319extern bfd_boolean coff_write_symbols
7920ce38 320 (bfd *);
e7ebb214
JB
321extern bfd_boolean coff_write_alien_symbol
322 (bfd *, asymbol *, struct internal_syment *, bfd_vma *,
323 bfd_size_type *, asection **, bfd_size_type *);
b34976b6 324extern bfd_boolean coff_write_linenumbers
7920ce38 325 (bfd *);
dc810e39 326extern alent *coff_get_lineno
7920ce38 327 (bfd *, asymbol *);
dc810e39 328extern asymbol *coff_section_symbol
7920ce38 329 (bfd *, char *);
b34976b6 330extern bfd_boolean _bfd_coff_get_external_symbols
7920ce38 331 (bfd *);
dc810e39 332extern const char *_bfd_coff_read_string_table
7920ce38 333 (bfd *);
b34976b6 334extern bfd_boolean _bfd_coff_free_symbols
7920ce38 335 (bfd *);
dc810e39 336extern struct coff_ptr_struct *coff_get_normalized_symtab
7920ce38 337 (bfd *);
dc810e39 338extern long coff_get_reloc_upper_bound
7920ce38 339 (bfd *, sec_ptr);
dc810e39 340extern asymbol *coff_make_empty_symbol
7920ce38 341 (bfd *);
dc810e39 342extern void coff_print_symbol
7920ce38 343 (bfd *, void * filep, asymbol *, bfd_print_symbol_type);
dc810e39 344extern void coff_get_symbol_info
7920ce38 345 (bfd *, asymbol *, symbol_info *ret);
b34976b6 346extern bfd_boolean _bfd_coff_is_local_label_name
7920ce38 347 (bfd *, const char *);
dc810e39 348extern asymbol *coff_bfd_make_debug_symbol
7920ce38 349 (bfd *, void *, unsigned long);
b34976b6 350extern bfd_boolean coff_find_nearest_line
7920ce38
NC
351 (bfd *, asection *, asymbol **, bfd_vma, const char **,
352 const char **, unsigned int *);
a29a8af8
KT
353extern bfd_boolean coff_find_nearest_line_discriminator
354 (bfd *, asection *, asymbol **, bfd_vma, const char **,
355 const char **, unsigned int *, unsigned int *);
fc28f9aa
TG
356struct dwarf_debug_section;
357extern bfd_boolean coff_find_nearest_line_with_names
358 (bfd *, const struct dwarf_debug_section *, asection *, asymbol **,
359 bfd_vma, const char **, const char **, unsigned int *);
4ab527b0
FF
360extern bfd_boolean coff_find_inliner_info
361 (bfd *, const char **, const char **, unsigned int *);
dc810e39 362extern int coff_sizeof_headers
a6b96beb 363 (bfd *, struct bfd_link_info *);
b34976b6 364extern bfd_boolean bfd_coff_reloc16_relax_section
7920ce38 365 (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
252b5132 366extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
7920ce38
NC
367 (bfd *, struct bfd_link_info *, struct bfd_link_order *,
368 bfd_byte *, bfd_boolean, asymbol **);
dc810e39 369extern bfd_vma bfd_coff_reloc16_get_value
7920ce38 370 (arelent *, struct bfd_link_info *, asection *);
dc810e39 371extern void bfd_perform_slip
7920ce38 372 (bfd *, unsigned int, asection *, bfd_vma);
252b5132
RH
373
374/* Functions and types in cofflink.c. */
375
116c20d2 376#define STRING_SIZE_SIZE 4
252b5132
RH
377
378/* We use a hash table to merge identical enum, struct, and union
379 definitions in the linker. */
380
381/* Information we keep for a single element (an enum value, a
382 structure or union field) in the debug merge hash table. */
383
384struct coff_debug_merge_element
385{
386 /* Next element. */
387 struct coff_debug_merge_element *next;
388
389 /* Name. */
390 const char *name;
391
392 /* Type. */
393 unsigned int type;
394
395 /* Symbol index for complex type. */
396 long tagndx;
397};
398
399/* A linked list of debug merge entries for a given name. */
400
401struct coff_debug_merge_type
402{
403 /* Next type with the same name. */
404 struct coff_debug_merge_type *next;
405
406 /* Class of type. */
96d56e9f 407 int type_class;
252b5132
RH
408
409 /* Symbol index where this type is defined. */
410 long indx;
411
412 /* List of elements. */
413 struct coff_debug_merge_element *elements;
414};
415
416/* Information we store in the debug merge hash table. */
417
418struct coff_debug_merge_hash_entry
419{
420 struct bfd_hash_entry root;
421
422 /* A list of types with this name. */
423 struct coff_debug_merge_type *types;
424};
425
426/* The debug merge hash table. */
427
428struct coff_debug_merge_hash_table
429{
430 struct bfd_hash_table root;
431};
432
433/* Initialize a COFF debug merge hash table. */
434
435#define coff_debug_merge_hash_table_init(table) \
66eb6687
AM
436 (bfd_hash_table_init (&(table)->root, _bfd_coff_debug_merge_hash_newfunc, \
437 sizeof (struct coff_debug_merge_hash_entry)))
252b5132
RH
438
439/* Free a COFF debug merge hash table. */
440
441#define coff_debug_merge_hash_table_free(table) \
442 (bfd_hash_table_free (&(table)->root))
443
444/* Look up an entry in a COFF debug merge hash table. */
445
446#define coff_debug_merge_hash_lookup(table, string, create, copy) \
447 ((struct coff_debug_merge_hash_entry *) \
448 bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
449
450/* Information we keep for each section in the output file when doing
1049f94e 451 a relocatable link. */
252b5132
RH
452
453struct coff_link_section_info
454{
455 /* The relocs to be output. */
456 struct internal_reloc *relocs;
457 /* For each reloc against a global symbol whose index was not known
458 when the reloc was handled, the global hash table entry. */
459 struct coff_link_hash_entry **rel_hashes;
460};
461
462/* Information that we pass around while doing the final link step. */
463
464struct coff_final_link_info
465{
466 /* General link information. */
467 struct bfd_link_info *info;
468 /* Output BFD. */
469 bfd *output_bfd;
470 /* Used to indicate failure in traversal routine. */
b34976b6 471 bfd_boolean failed;
252b5132
RH
472 /* If doing "task linking" set only during the time when we want the
473 global symbol writer to convert the storage class of defined global
474 symbols from global to static. */
b34976b6 475 bfd_boolean global_to_static;
252b5132
RH
476 /* Hash table for long symbol names. */
477 struct bfd_strtab_hash *strtab;
1049f94e 478 /* When doing a relocatable link, an array of information kept for
252b5132
RH
479 each output section, indexed by the target_index field. */
480 struct coff_link_section_info *section_info;
481 /* Symbol index of last C_FILE symbol (-1 if none). */
482 long last_file_index;
483 /* Contents of last C_FILE symbol. */
484 struct internal_syment last_file;
485 /* Symbol index of first aux entry of last .bf symbol with an empty
486 endndx field (-1 if none). */
487 long last_bf_index;
488 /* Contents of last_bf_index aux entry. */
489 union internal_auxent last_bf;
490 /* Hash table used to merge debug information. */
491 struct coff_debug_merge_hash_table debug_merge;
492 /* Buffer large enough to hold swapped symbols of any input file. */
493 struct internal_syment *internal_syms;
494 /* Buffer large enough to hold sections of symbols of any input file. */
495 asection **sec_ptrs;
496 /* Buffer large enough to hold output indices of symbols of any
497 input file. */
498 long *sym_indices;
499 /* Buffer large enough to hold output symbols for any input file. */
500 bfd_byte *outsyms;
501 /* Buffer large enough to hold external line numbers for any input
502 section. */
503 bfd_byte *linenos;
504 /* Buffer large enough to hold any input section. */
505 bfd_byte *contents;
506 /* Buffer large enough to hold external relocs of any input section. */
507 bfd_byte *external_relocs;
508 /* Buffer large enough to hold swapped relocs of any input section. */
509 struct internal_reloc *internal_relocs;
510};
511
5dccc1dd
ILT
512/* Most COFF variants have no way to record the alignment of a
513 section. This struct is used to set a specific alignment based on
514 the name of the section. */
515
516struct coff_section_alignment_entry
517{
518 /* The section name. */
519 const char *name;
520
521 /* This is either (unsigned int) -1, indicating that the section
522 name must match exactly, or it is the number of letters which
523 must match at the start of the name. */
524 unsigned int comparison_length;
525
526 /* These macros may be used to fill in the first two fields in a
527 structure initialization. */
528#define COFF_SECTION_NAME_EXACT_MATCH(name) (name), ((unsigned int) -1)
529#define COFF_SECTION_NAME_PARTIAL_MATCH(name) (name), (sizeof (name) - 1)
530
531 /* Only use this entry if the default section alignment for this
532 target is at least that much (as a power of two). If this field
533 is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
534 unsigned int default_alignment_min;
535
536 /* Only use this entry if the default section alignment for this
537 target is no greater than this (as a power of two). If this
538 field is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
539 unsigned int default_alignment_max;
540
541#define COFF_ALIGNMENT_FIELD_EMPTY ((unsigned int) -1)
542
543 /* The desired alignment for this section (as a power of two). */
544 unsigned int alignment_power;
545};
546
252b5132 547extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
7920ce38 548 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 549extern bfd_boolean _bfd_coff_link_hash_table_init
7920ce38
NC
550 (struct coff_link_hash_table *, bfd *,
551 struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
552 struct bfd_hash_table *,
66eb6687
AM
553 const char *),
554 unsigned int);
252b5132 555extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create
7920ce38 556 (bfd *);
252b5132 557extern const char *_bfd_coff_internal_syment_name
7920ce38 558 (bfd *, const struct internal_syment *, char *);
c77ec726
AM
559extern bfd_boolean _bfd_coff_section_already_linked
560 (bfd *, asection *, struct bfd_link_info *);
b34976b6 561extern bfd_boolean _bfd_coff_link_add_symbols
7920ce38 562 (bfd *, struct bfd_link_info *);
b34976b6 563extern bfd_boolean _bfd_coff_final_link
7920ce38 564 (bfd *, struct bfd_link_info *);
252b5132 565extern struct internal_reloc *_bfd_coff_read_internal_relocs
7920ce38
NC
566 (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
567 struct internal_reloc *);
b34976b6 568extern bfd_boolean _bfd_coff_generic_relocate_section
7920ce38
NC
569 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
570 struct internal_reloc *, struct internal_syment *, asection **);
252b5132 571extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
7920ce38 572 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 573extern bfd_boolean _bfd_coff_write_global_sym
7686d77d 574 (struct bfd_hash_entry *, void *);
b34976b6 575extern bfd_boolean _bfd_coff_write_task_globals
7920ce38 576 (struct coff_link_hash_entry *, void *);
b34976b6 577extern bfd_boolean _bfd_coff_link_input_bfd
7920ce38 578 (struct coff_final_link_info *, bfd *);
b34976b6 579extern bfd_boolean _bfd_coff_reloc_link_order
7920ce38
NC
580 (bfd *, struct coff_final_link_info *, asection *,
581 struct bfd_link_order *);
252b5132
RH
582
583
584#define coff_get_section_contents_in_window \
585 _bfd_generic_get_section_contents_in_window
586
587/* Functions in xcofflink.c. */
588
dc810e39 589extern long _bfd_xcoff_get_dynamic_symtab_upper_bound
7920ce38 590 (bfd *);
252b5132 591extern long _bfd_xcoff_canonicalize_dynamic_symtab
7920ce38 592 (bfd *, asymbol **);
dc810e39 593extern long _bfd_xcoff_get_dynamic_reloc_upper_bound
7920ce38 594 (bfd *);
252b5132 595extern long _bfd_xcoff_canonicalize_dynamic_reloc
7920ce38 596 (bfd *, arelent **, asymbol **);
252b5132 597extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
7920ce38 598 (bfd *);
e2d34d7d 599extern void _bfd_xcoff_bfd_link_hash_table_free
7920ce38 600 (struct bfd_link_hash_table *);
b34976b6 601extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
7920ce38 602 (bfd *, struct bfd_link_info *);
b34976b6 603extern bfd_boolean _bfd_xcoff_bfd_final_link
7920ce38 604 (bfd *, struct bfd_link_info *);
3023e3f6
RS
605extern bfd_boolean _bfd_xcoff_define_common_symbol
606 (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
b34976b6 607extern bfd_boolean _bfd_ppc_xcoff_relocate_section
7920ce38
NC
608 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
609 struct internal_reloc *, struct internal_syment *, asection **);
252b5132 610
88183869 611/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the
252b5132
RH
612 linker, and so should start with bfd and be declared in bfd.h. */
613
b34976b6 614extern bfd_boolean ppc_allocate_toc_section
7920ce38 615 (struct bfd_link_info *);
b34976b6 616extern bfd_boolean ppc_process_before_allocation
7920ce38 617 (bfd *, struct bfd_link_info *);