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