]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/libcoff-in.h
ChangeLog rotatation and copyright year update
[thirdparty/binutils-gdb.git] / bfd / libcoff-in.h
CommitLineData
252b5132 1/* BFD COFF object file private structure.
b90efa5b 2 Copyright (C) 1990-2015 Free Software Foundation, Inc.
252b5132
RH
3 Written by Cygnus Support.
4
7920ce38 5 This file is part of BFD, the Binary File Descriptor library.
252b5132 6
7920ce38
NC
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
cd123cb7 9 the Free Software Foundation; either version 3 of the License, or
7920ce38 10 (at your option) any later version.
252b5132 11
7920ce38
NC
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
252b5132 16
7920ce38
NC
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
cd123cb7
NC
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
252b5132
RH
21
22#include "bfdlink.h"
f4943d82 23#include "coff-bfd.h"
252b5132 24
7920ce38
NC
25/* Object file tdata; access macros. */
26
27#define coff_data(bfd) ((bfd)->tdata.coff_obj_data)
7920ce38
NC
28#define obj_pe(bfd) (coff_data (bfd)->pe)
29#define obj_symbols(bfd) (coff_data (bfd)->symbols)
30#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos)
31#define obj_relocbase(bfd) (coff_data (bfd)->relocbase)
32#define obj_raw_syments(bfd) (coff_data (bfd)->raw_syments)
33#define obj_raw_syment_count(bfd) (coff_data (bfd)->raw_syment_count)
34#define obj_convert(bfd) (coff_data (bfd)->conversion_table)
35#define obj_conv_table_size(bfd) (coff_data (bfd)->conv_table_size)
36#define obj_coff_external_syms(bfd) (coff_data (bfd)->external_syms)
37#define obj_coff_keep_syms(bfd) (coff_data (bfd)->keep_syms)
38#define obj_coff_strings(bfd) (coff_data (bfd)->strings)
5a3f568b 39#define obj_coff_strings_len(bfd) (coff_data (bfd)->strings_len)
7920ce38
NC
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. */
bad1a9f7 58 unsigned long int relocbase;
252b5132
RH
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;
5a3f568b
NC
80 /* The length of the strings table. For error checking. */
81 bfd_size_type strings_len;
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
JT
126
127 /* Build-id info. */
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. */
beb1bf64 173 bfd_vma maxdata;
252b5132
RH
174
175 /* maxstack from optional header. */
beb1bf64 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
252b5132
RH
191/* Tdata for sections in XCOFF files. This is used by the linker. */
192
193struct xcoff_section_tdata
194{
195 /* Used for XCOFF csects created by the linker; points to the real
196 XCOFF section which contains this csect. */
197 asection *enclosing;
198 /* The lineno_count field for the enclosing section, because we are
199 going to clobber it there. */
200 unsigned int lineno_count;
4cc02a02 201 /* The first and last symbol indices for symbols used by this csect. */
252b5132
RH
202 unsigned long first_symndx;
203 unsigned long last_symndx;
204};
205
206/* An accessor macro the xcoff_section_tdata structure. */
207#define xcoff_section_data(abfd, sec) \
208 ((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
209
8d3ad4e1 210/* Tdata for sections in PE files. */
252b5132
RH
211
212struct pei_section_tdata
213{
214 /* The virtual size of the section. */
215 bfd_size_type virt_size;
8d3ad4e1
ILT
216 /* The PE section flags. */
217 long pe_flags;
252b5132
RH
218};
219
220/* An accessor macro for the pei_section_tdata structure. */
221#define pei_section_data(abfd, sec) \
222 ((struct pei_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
223
224/* COFF linker hash table entries. */
225
226struct coff_link_hash_entry
227{
228 struct bfd_link_hash_entry root;
229
230 /* Symbol index in output file. Set to -1 initially. Set to -2 if
231 there is a reloc against this symbol. */
232 long indx;
233
234 /* Symbol type. */
235 unsigned short type;
236
237 /* Symbol class. */
96d56e9f 238 unsigned char symbol_class;
252b5132
RH
239
240 /* Number of auxiliary entries. */
241 char numaux;
242
243 /* BFD to take auxiliary entries from. */
244 bfd *auxbfd;
245
246 /* Pointer to array of auxiliary entries, if any. */
247 union internal_auxent *aux;
7fd9c191
ILT
248
249 /* Flag word; legal values follow. */
250 unsigned short coff_link_hash_flags;
251 /* Symbol is a PE section symbol. */
252#define COFF_LINK_HASH_PE_SECTION_SYMBOL (01)
252b5132
RH
253};
254
255/* COFF linker hash table. */
256
257struct coff_link_hash_table
258{
259 struct bfd_link_hash_table root;
260 /* A pointer to information used to link stabs in sections. */
3722b82f 261 struct stab_info stab_info;
252b5132
RH
262};
263
264/* Look up an entry in a COFF linker hash table. */
265
266#define coff_link_hash_lookup(table, string, create, copy, follow) \
267 ((struct coff_link_hash_entry *) \
268 bfd_link_hash_lookup (&(table)->root, (string), (create), \
269 (copy), (follow)))
270
271/* Traverse a COFF linker hash table. */
272
273#define coff_link_hash_traverse(table, func, info) \
274 (bfd_link_hash_traverse \
275 (&(table)->root, \
7920ce38 276 (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \
252b5132
RH
277 (info)))
278
279/* Get the COFF linker hash table from a link_info structure. */
280
281#define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
282
283/* Functions in coffgen.c. */
dc810e39 284extern const bfd_target *coff_object_p
7920ce38 285 (bfd *);
198beae2 286extern struct bfd_section *coff_section_from_bfd_index
7920ce38 287 (bfd *, int);
dc810e39 288extern long coff_get_symtab_upper_bound
7920ce38 289 (bfd *);
6cee3f79 290extern long coff_canonicalize_symtab
7920ce38 291 (bfd *, asymbol **);
dc810e39 292extern int coff_count_linenumbers
7920ce38 293 (bfd *);
b34976b6 294extern bfd_boolean coff_renumber_symbols
7920ce38 295 (bfd *, int *);
dc810e39 296extern void coff_mangle_symbols
7920ce38 297 (bfd *);
b34976b6 298extern bfd_boolean coff_write_symbols
7920ce38 299 (bfd *);
e7ebb214
JB
300extern bfd_boolean coff_write_alien_symbol
301 (bfd *, asymbol *, struct internal_syment *, bfd_vma *,
302 bfd_size_type *, asection **, bfd_size_type *);
b34976b6 303extern bfd_boolean coff_write_linenumbers
7920ce38 304 (bfd *);
dc810e39 305extern alent *coff_get_lineno
7920ce38 306 (bfd *, asymbol *);
dc810e39 307extern asymbol *coff_section_symbol
7920ce38 308 (bfd *, char *);
b34976b6 309extern bfd_boolean _bfd_coff_get_external_symbols
7920ce38 310 (bfd *);
dc810e39 311extern const char *_bfd_coff_read_string_table
7920ce38 312 (bfd *);
b34976b6 313extern bfd_boolean _bfd_coff_free_symbols
7920ce38 314 (bfd *);
dc810e39 315extern struct coff_ptr_struct *coff_get_normalized_symtab
7920ce38 316 (bfd *);
dc810e39 317extern long coff_get_reloc_upper_bound
7920ce38 318 (bfd *, sec_ptr);
dc810e39 319extern asymbol *coff_make_empty_symbol
7920ce38 320 (bfd *);
dc810e39 321extern void coff_print_symbol
7920ce38 322 (bfd *, void * filep, asymbol *, bfd_print_symbol_type);
dc810e39 323extern void coff_get_symbol_info
7920ce38 324 (bfd *, asymbol *, symbol_info *ret);
60bb06bc
L
325#define coff_get_symbol_version_string \
326 _bfd_nosymbols_get_symbol_version_string
b34976b6 327extern bfd_boolean _bfd_coff_is_local_label_name
7920ce38 328 (bfd *, const char *);
dc810e39 329extern asymbol *coff_bfd_make_debug_symbol
7920ce38 330 (bfd *, void *, unsigned long);
b34976b6 331extern bfd_boolean coff_find_nearest_line
fb167eb2
AM
332 (bfd *, asymbol **, asection *, bfd_vma,
333 const char **, const char **, unsigned int *, unsigned int *);
9c461f7d 334#define coff_find_line _bfd_nosymbols_find_line
fc28f9aa
TG
335struct dwarf_debug_section;
336extern bfd_boolean coff_find_nearest_line_with_names
fb167eb2
AM
337 (bfd *, asymbol **, asection *, bfd_vma, const char **, const char **,
338 unsigned int *, const struct dwarf_debug_section *);
4ab527b0
FF
339extern bfd_boolean coff_find_inliner_info
340 (bfd *, const char **, const char **, unsigned int *);
dc810e39 341extern int coff_sizeof_headers
a6b96beb 342 (bfd *, struct bfd_link_info *);
b34976b6 343extern bfd_boolean bfd_coff_reloc16_relax_section
7920ce38 344 (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
252b5132 345extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
7920ce38
NC
346 (bfd *, struct bfd_link_info *, struct bfd_link_order *,
347 bfd_byte *, bfd_boolean, asymbol **);
dc810e39 348extern bfd_vma bfd_coff_reloc16_get_value
7920ce38 349 (arelent *, struct bfd_link_info *, asection *);
dc810e39 350extern void bfd_perform_slip
7920ce38 351 (bfd *, unsigned int, asection *, bfd_vma);
252b5132
RH
352
353/* Functions and types in cofflink.c. */
354
116c20d2 355#define STRING_SIZE_SIZE 4
252b5132
RH
356
357/* We use a hash table to merge identical enum, struct, and union
358 definitions in the linker. */
359
360/* Information we keep for a single element (an enum value, a
361 structure or union field) in the debug merge hash table. */
362
363struct coff_debug_merge_element
364{
365 /* Next element. */
366 struct coff_debug_merge_element *next;
367
368 /* Name. */
369 const char *name;
370
371 /* Type. */
372 unsigned int type;
373
374 /* Symbol index for complex type. */
375 long tagndx;
376};
377
378/* A linked list of debug merge entries for a given name. */
379
380struct coff_debug_merge_type
381{
382 /* Next type with the same name. */
383 struct coff_debug_merge_type *next;
384
385 /* Class of type. */
96d56e9f 386 int type_class;
252b5132
RH
387
388 /* Symbol index where this type is defined. */
389 long indx;
390
391 /* List of elements. */
392 struct coff_debug_merge_element *elements;
393};
394
395/* Information we store in the debug merge hash table. */
396
397struct coff_debug_merge_hash_entry
398{
399 struct bfd_hash_entry root;
400
401 /* A list of types with this name. */
402 struct coff_debug_merge_type *types;
403};
404
405/* The debug merge hash table. */
406
407struct coff_debug_merge_hash_table
408{
409 struct bfd_hash_table root;
410};
411
412/* Initialize a COFF debug merge hash table. */
413
414#define coff_debug_merge_hash_table_init(table) \
66eb6687
AM
415 (bfd_hash_table_init (&(table)->root, _bfd_coff_debug_merge_hash_newfunc, \
416 sizeof (struct coff_debug_merge_hash_entry)))
252b5132
RH
417
418/* Free a COFF debug merge hash table. */
419
420#define coff_debug_merge_hash_table_free(table) \
421 (bfd_hash_table_free (&(table)->root))
422
423/* Look up an entry in a COFF debug merge hash table. */
424
425#define coff_debug_merge_hash_lookup(table, string, create, copy) \
426 ((struct coff_debug_merge_hash_entry *) \
427 bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
428
429/* Information we keep for each section in the output file when doing
1049f94e 430 a relocatable link. */
252b5132
RH
431
432struct coff_link_section_info
433{
434 /* The relocs to be output. */
435 struct internal_reloc *relocs;
436 /* For each reloc against a global symbol whose index was not known
437 when the reloc was handled, the global hash table entry. */
438 struct coff_link_hash_entry **rel_hashes;
439};
440
441/* Information that we pass around while doing the final link step. */
442
443struct coff_final_link_info
444{
445 /* General link information. */
446 struct bfd_link_info *info;
447 /* Output BFD. */
448 bfd *output_bfd;
449 /* Used to indicate failure in traversal routine. */
b34976b6 450 bfd_boolean failed;
252b5132
RH
451 /* If doing "task linking" set only during the time when we want the
452 global symbol writer to convert the storage class of defined global
453 symbols from global to static. */
b34976b6 454 bfd_boolean global_to_static;
252b5132
RH
455 /* Hash table for long symbol names. */
456 struct bfd_strtab_hash *strtab;
1049f94e 457 /* When doing a relocatable link, an array of information kept for
252b5132
RH
458 each output section, indexed by the target_index field. */
459 struct coff_link_section_info *section_info;
460 /* Symbol index of last C_FILE symbol (-1 if none). */
461 long last_file_index;
462 /* Contents of last C_FILE symbol. */
463 struct internal_syment last_file;
464 /* Symbol index of first aux entry of last .bf symbol with an empty
465 endndx field (-1 if none). */
466 long last_bf_index;
467 /* Contents of last_bf_index aux entry. */
468 union internal_auxent last_bf;
469 /* Hash table used to merge debug information. */
470 struct coff_debug_merge_hash_table debug_merge;
471 /* Buffer large enough to hold swapped symbols of any input file. */
472 struct internal_syment *internal_syms;
473 /* Buffer large enough to hold sections of symbols of any input file. */
474 asection **sec_ptrs;
475 /* Buffer large enough to hold output indices of symbols of any
476 input file. */
477 long *sym_indices;
478 /* Buffer large enough to hold output symbols for any input file. */
479 bfd_byte *outsyms;
480 /* Buffer large enough to hold external line numbers for any input
481 section. */
482 bfd_byte *linenos;
483 /* Buffer large enough to hold any input section. */
484 bfd_byte *contents;
485 /* Buffer large enough to hold external relocs of any input section. */
486 bfd_byte *external_relocs;
487 /* Buffer large enough to hold swapped relocs of any input section. */
488 struct internal_reloc *internal_relocs;
489};
490
5dccc1dd
ILT
491/* Most COFF variants have no way to record the alignment of a
492 section. This struct is used to set a specific alignment based on
493 the name of the section. */
494
495struct coff_section_alignment_entry
496{
497 /* The section name. */
498 const char *name;
499
500 /* This is either (unsigned int) -1, indicating that the section
501 name must match exactly, or it is the number of letters which
502 must match at the start of the name. */
503 unsigned int comparison_length;
504
505 /* These macros may be used to fill in the first two fields in a
506 structure initialization. */
507#define COFF_SECTION_NAME_EXACT_MATCH(name) (name), ((unsigned int) -1)
508#define COFF_SECTION_NAME_PARTIAL_MATCH(name) (name), (sizeof (name) - 1)
509
510 /* Only use this entry if the default section alignment for this
511 target is at least that much (as a power of two). If this field
512 is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
513 unsigned int default_alignment_min;
514
515 /* Only use this entry if the default section alignment for this
516 target is no greater than this (as a power of two). If this
517 field is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
518 unsigned int default_alignment_max;
519
520#define COFF_ALIGNMENT_FIELD_EMPTY ((unsigned int) -1)
521
522 /* The desired alignment for this section (as a power of two). */
523 unsigned int alignment_power;
524};
525
252b5132 526extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
7920ce38 527 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 528extern bfd_boolean _bfd_coff_link_hash_table_init
7920ce38
NC
529 (struct coff_link_hash_table *, bfd *,
530 struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
531 struct bfd_hash_table *,
66eb6687
AM
532 const char *),
533 unsigned int);
252b5132 534extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create
7920ce38 535 (bfd *);
252b5132 536extern const char *_bfd_coff_internal_syment_name
7920ce38 537 (bfd *, const struct internal_syment *, char *);
c77ec726
AM
538extern bfd_boolean _bfd_coff_section_already_linked
539 (bfd *, asection *, struct bfd_link_info *);
b34976b6 540extern bfd_boolean _bfd_coff_link_add_symbols
7920ce38 541 (bfd *, struct bfd_link_info *);
b34976b6 542extern bfd_boolean _bfd_coff_final_link
7920ce38 543 (bfd *, struct bfd_link_info *);
252b5132 544extern struct internal_reloc *_bfd_coff_read_internal_relocs
7920ce38
NC
545 (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
546 struct internal_reloc *);
b34976b6 547extern bfd_boolean _bfd_coff_generic_relocate_section
7920ce38
NC
548 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
549 struct internal_reloc *, struct internal_syment *, asection **);
252b5132 550extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
7920ce38 551 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 552extern bfd_boolean _bfd_coff_write_global_sym
7686d77d 553 (struct bfd_hash_entry *, void *);
b34976b6 554extern bfd_boolean _bfd_coff_write_task_globals
7920ce38 555 (struct coff_link_hash_entry *, void *);
b34976b6 556extern bfd_boolean _bfd_coff_link_input_bfd
7920ce38 557 (struct coff_final_link_info *, bfd *);
b34976b6 558extern bfd_boolean _bfd_coff_reloc_link_order
7920ce38
NC
559 (bfd *, struct coff_final_link_info *, asection *,
560 struct bfd_link_order *);
252b5132
RH
561
562
563#define coff_get_section_contents_in_window \
564 _bfd_generic_get_section_contents_in_window
565
566/* Functions in xcofflink.c. */
567
dc810e39 568extern long _bfd_xcoff_get_dynamic_symtab_upper_bound
7920ce38 569 (bfd *);
252b5132 570extern long _bfd_xcoff_canonicalize_dynamic_symtab
7920ce38 571 (bfd *, asymbol **);
dc810e39 572extern long _bfd_xcoff_get_dynamic_reloc_upper_bound
7920ce38 573 (bfd *);
252b5132 574extern long _bfd_xcoff_canonicalize_dynamic_reloc
7920ce38 575 (bfd *, arelent **, asymbol **);
252b5132 576extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
7920ce38 577 (bfd *);
b34976b6 578extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
7920ce38 579 (bfd *, struct bfd_link_info *);
b34976b6 580extern bfd_boolean _bfd_xcoff_bfd_final_link
7920ce38 581 (bfd *, struct bfd_link_info *);
3023e3f6
RS
582extern bfd_boolean _bfd_xcoff_define_common_symbol
583 (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
b34976b6 584extern bfd_boolean _bfd_ppc_xcoff_relocate_section
7920ce38
NC
585 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
586 struct internal_reloc *, struct internal_syment *, asection **);
252b5132 587
88183869 588/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the
252b5132
RH
589 linker, and so should start with bfd and be declared in bfd.h. */
590
b34976b6 591extern bfd_boolean ppc_allocate_toc_section
7920ce38 592 (struct bfd_link_info *);
b34976b6 593extern bfd_boolean ppc_process_before_allocation
7920ce38 594 (bfd *, struct bfd_link_info *);