Add support for reading Aarch64 core dumps.
[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
7920ce38
NC
362 (bfd *, asection *, asymbol **, bfd_vma, const char **,
363 const char **, unsigned int *);
a29a8af8
KT
364extern bfd_boolean coff_find_nearest_line_discriminator
365 (bfd *, asection *, asymbol **, bfd_vma, const char **,
366 const char **, unsigned int *, unsigned int *);
fc28f9aa
TG
367struct dwarf_debug_section;
368extern bfd_boolean coff_find_nearest_line_with_names
369 (bfd *, const struct dwarf_debug_section *, asection *, asymbol **,
370 bfd_vma, const char **, const char **, unsigned int *);
4ab527b0
FF
371extern bfd_boolean coff_find_inliner_info
372 (bfd *, const char **, const char **, unsigned int *);
dc810e39 373extern int coff_sizeof_headers
a6b96beb 374 (bfd *, struct bfd_link_info *);
b34976b6 375extern bfd_boolean bfd_coff_reloc16_relax_section
7920ce38 376 (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
252b5132 377extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
7920ce38
NC
378 (bfd *, struct bfd_link_info *, struct bfd_link_order *,
379 bfd_byte *, bfd_boolean, asymbol **);
dc810e39 380extern bfd_vma bfd_coff_reloc16_get_value
7920ce38 381 (arelent *, struct bfd_link_info *, asection *);
dc810e39 382extern void bfd_perform_slip
7920ce38 383 (bfd *, unsigned int, asection *, bfd_vma);
252b5132
RH
384
385/* Functions and types in cofflink.c. */
386
ceae3e33 387#define STRING_SIZE_SIZE 4
252b5132
RH
388
389/* We use a hash table to merge identical enum, struct, and union
390 definitions in the linker. */
391
392/* Information we keep for a single element (an enum value, a
393 structure or union field) in the debug merge hash table. */
394
395struct coff_debug_merge_element
396{
397 /* Next element. */
398 struct coff_debug_merge_element *next;
399
400 /* Name. */
401 const char *name;
402
403 /* Type. */
404 unsigned int type;
405
406 /* Symbol index for complex type. */
407 long tagndx;
408};
409
410/* A linked list of debug merge entries for a given name. */
411
412struct coff_debug_merge_type
413{
414 /* Next type with the same name. */
415 struct coff_debug_merge_type *next;
416
417 /* Class of type. */
96d56e9f 418 int type_class;
252b5132
RH
419
420 /* Symbol index where this type is defined. */
421 long indx;
422
423 /* List of elements. */
424 struct coff_debug_merge_element *elements;
425};
426
427/* Information we store in the debug merge hash table. */
428
429struct coff_debug_merge_hash_entry
430{
431 struct bfd_hash_entry root;
432
433 /* A list of types with this name. */
434 struct coff_debug_merge_type *types;
435};
436
437/* The debug merge hash table. */
438
439struct coff_debug_merge_hash_table
440{
441 struct bfd_hash_table root;
442};
443
444/* Initialize a COFF debug merge hash table. */
445
446#define coff_debug_merge_hash_table_init(table) \
66eb6687
AM
447 (bfd_hash_table_init (&(table)->root, _bfd_coff_debug_merge_hash_newfunc, \
448 sizeof (struct coff_debug_merge_hash_entry)))
252b5132
RH
449
450/* Free a COFF debug merge hash table. */
451
452#define coff_debug_merge_hash_table_free(table) \
453 (bfd_hash_table_free (&(table)->root))
454
455/* Look up an entry in a COFF debug merge hash table. */
456
457#define coff_debug_merge_hash_lookup(table, string, create, copy) \
458 ((struct coff_debug_merge_hash_entry *) \
459 bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
460
461/* Information we keep for each section in the output file when doing
1049f94e 462 a relocatable link. */
252b5132
RH
463
464struct coff_link_section_info
465{
466 /* The relocs to be output. */
467 struct internal_reloc *relocs;
468 /* For each reloc against a global symbol whose index was not known
469 when the reloc was handled, the global hash table entry. */
470 struct coff_link_hash_entry **rel_hashes;
471};
472
473/* Information that we pass around while doing the final link step. */
474
475struct coff_final_link_info
476{
477 /* General link information. */
478 struct bfd_link_info *info;
479 /* Output BFD. */
480 bfd *output_bfd;
481 /* Used to indicate failure in traversal routine. */
b34976b6 482 bfd_boolean failed;
252b5132
RH
483 /* If doing "task linking" set only during the time when we want the
484 global symbol writer to convert the storage class of defined global
485 symbols from global to static. */
b34976b6 486 bfd_boolean global_to_static;
252b5132
RH
487 /* Hash table for long symbol names. */
488 struct bfd_strtab_hash *strtab;
1049f94e 489 /* When doing a relocatable link, an array of information kept for
252b5132
RH
490 each output section, indexed by the target_index field. */
491 struct coff_link_section_info *section_info;
492 /* Symbol index of last C_FILE symbol (-1 if none). */
493 long last_file_index;
494 /* Contents of last C_FILE symbol. */
495 struct internal_syment last_file;
496 /* Symbol index of first aux entry of last .bf symbol with an empty
497 endndx field (-1 if none). */
498 long last_bf_index;
499 /* Contents of last_bf_index aux entry. */
500 union internal_auxent last_bf;
501 /* Hash table used to merge debug information. */
502 struct coff_debug_merge_hash_table debug_merge;
503 /* Buffer large enough to hold swapped symbols of any input file. */
504 struct internal_syment *internal_syms;
505 /* Buffer large enough to hold sections of symbols of any input file. */
506 asection **sec_ptrs;
507 /* Buffer large enough to hold output indices of symbols of any
508 input file. */
509 long *sym_indices;
510 /* Buffer large enough to hold output symbols for any input file. */
511 bfd_byte *outsyms;
512 /* Buffer large enough to hold external line numbers for any input
513 section. */
514 bfd_byte *linenos;
515 /* Buffer large enough to hold any input section. */
516 bfd_byte *contents;
517 /* Buffer large enough to hold external relocs of any input section. */
518 bfd_byte *external_relocs;
519 /* Buffer large enough to hold swapped relocs of any input section. */
520 struct internal_reloc *internal_relocs;
521};
522
5dccc1dd
ILT
523/* Most COFF variants have no way to record the alignment of a
524 section. This struct is used to set a specific alignment based on
525 the name of the section. */
526
527struct coff_section_alignment_entry
528{
529 /* The section name. */
530 const char *name;
531
532 /* This is either (unsigned int) -1, indicating that the section
533 name must match exactly, or it is the number of letters which
534 must match at the start of the name. */
535 unsigned int comparison_length;
536
537 /* These macros may be used to fill in the first two fields in a
538 structure initialization. */
539#define COFF_SECTION_NAME_EXACT_MATCH(name) (name), ((unsigned int) -1)
540#define COFF_SECTION_NAME_PARTIAL_MATCH(name) (name), (sizeof (name) - 1)
541
542 /* Only use this entry if the default section alignment for this
543 target is at least that much (as a power of two). If this field
544 is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
545 unsigned int default_alignment_min;
546
547 /* Only use this entry if the default section alignment for this
548 target is no greater than this (as a power of two). If this
549 field is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */
550 unsigned int default_alignment_max;
551
552#define COFF_ALIGNMENT_FIELD_EMPTY ((unsigned int) -1)
553
554 /* The desired alignment for this section (as a power of two). */
555 unsigned int alignment_power;
556};
557
252b5132 558extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc
7920ce38 559 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 560extern bfd_boolean _bfd_coff_link_hash_table_init
7920ce38
NC
561 (struct coff_link_hash_table *, bfd *,
562 struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
563 struct bfd_hash_table *,
66eb6687
AM
564 const char *),
565 unsigned int);
252b5132 566extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create
7920ce38 567 (bfd *);
252b5132 568extern const char *_bfd_coff_internal_syment_name
7920ce38 569 (bfd *, const struct internal_syment *, char *);
c77ec726
AM
570extern bfd_boolean _bfd_coff_section_already_linked
571 (bfd *, asection *, struct bfd_link_info *);
b34976b6 572extern bfd_boolean _bfd_coff_link_add_symbols
7920ce38 573 (bfd *, struct bfd_link_info *);
b34976b6 574extern bfd_boolean _bfd_coff_final_link
7920ce38 575 (bfd *, struct bfd_link_info *);
252b5132 576extern struct internal_reloc *_bfd_coff_read_internal_relocs
7920ce38
NC
577 (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean,
578 struct internal_reloc *);
b34976b6 579extern bfd_boolean _bfd_coff_generic_relocate_section
7920ce38
NC
580 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
581 struct internal_reloc *, struct internal_syment *, asection **);
252b5132 582extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc
7920ce38 583 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
b34976b6 584extern bfd_boolean _bfd_coff_write_global_sym
7686d77d 585 (struct bfd_hash_entry *, void *);
b34976b6 586extern bfd_boolean _bfd_coff_write_task_globals
7920ce38 587 (struct coff_link_hash_entry *, void *);
b34976b6 588extern bfd_boolean _bfd_coff_link_input_bfd
7920ce38 589 (struct coff_final_link_info *, bfd *);
b34976b6 590extern bfd_boolean _bfd_coff_reloc_link_order
7920ce38
NC
591 (bfd *, struct coff_final_link_info *, asection *,
592 struct bfd_link_order *);
252b5132
RH
593
594
595#define coff_get_section_contents_in_window \
596 _bfd_generic_get_section_contents_in_window
597
f34d8777
L
598/* Functions in xcofflink.c. */
599
dc810e39 600extern long _bfd_xcoff_get_dynamic_symtab_upper_bound
7920ce38 601 (bfd *);
f34d8777 602extern long _bfd_xcoff_canonicalize_dynamic_symtab
7920ce38 603 (bfd *, asymbol **);
dc810e39 604extern long _bfd_xcoff_get_dynamic_reloc_upper_bound
7920ce38 605 (bfd *);
f34d8777 606extern long _bfd_xcoff_canonicalize_dynamic_reloc
7920ce38 607 (bfd *, arelent **, asymbol **);
f34d8777 608extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create
7920ce38 609 (bfd *);
b34976b6 610extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols
7920ce38 611 (bfd *, struct bfd_link_info *);
b34976b6 612extern bfd_boolean _bfd_xcoff_bfd_final_link
7920ce38 613 (bfd *, struct bfd_link_info *);
3023e3f6
RS
614extern bfd_boolean _bfd_xcoff_define_common_symbol
615 (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
b34976b6 616extern bfd_boolean _bfd_ppc_xcoff_relocate_section
7920ce38
NC
617 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
618 struct internal_reloc *, struct internal_syment *, asection **);
f34d8777 619
88183869 620/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the
252b5132
RH
621 linker, and so should start with bfd and be declared in bfd.h. */
622
b34976b6 623extern bfd_boolean ppc_allocate_toc_section
7920ce38 624 (struct bfd_link_info *);
b34976b6 625extern bfd_boolean ppc_process_before_allocation
7920ce38 626 (bfd *, struct bfd_link_info *);
e61463e1 627/* Extracted from coffcode.h. */
252b5132
RH
628typedef struct coff_ptr_struct
629{
dc810e39
AM
630 /* Remembers the offset from the first symbol in the file for
631 this symbol. Generated by coff_renumber_symbols. */
632 unsigned int offset;
633
634 /* Should the value of this symbol be renumbered. Used for
635 XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */
636 unsigned int fix_value : 1;
637
638 /* Should the tag field of this symbol be renumbered.
639 Created by coff_pointerize_aux. */
640 unsigned int fix_tag : 1;
641
642 /* Should the endidx field of this symbol be renumbered.
643 Created by coff_pointerize_aux. */
644 unsigned int fix_end : 1;
645
646 /* Should the x_csect.x_scnlen field be renumbered.
647 Created by coff_pointerize_aux. */
648 unsigned int fix_scnlen : 1;
649
650 /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the
651 index into the line number entries. Set by coff_slurp_symbol_table. */
652 unsigned int fix_line : 1;
653
654 /* The container for the symbol structure as read and translated
655 from the file. */
656 union
657 {
658 union internal_auxent auxent;
659 struct internal_syment syment;
660 } u;
252b5132
RH
661} combined_entry_type;
662
663
52b219b5 664/* Each canonical asymbol really looks like this: */
252b5132
RH
665
666typedef struct coff_symbol_struct
667{
dc810e39
AM
668 /* The actual symbol which the rest of BFD works with */
669 asymbol symbol;
252b5132 670
dc810e39
AM
671 /* A pointer to the hidden information for this symbol */
672 combined_entry_type *native;
252b5132 673
dc810e39
AM
674 /* A pointer to the linenumber information for this symbol */
675 struct lineno_cache_entry *lineno;
252b5132 676
dc810e39 677 /* Have the line numbers been relocated yet ? */
b34976b6 678 bfd_boolean done_lineno;
252b5132 679} coff_symbol_type;
52b219b5 680/* COFF symbol classifications. */
5d54c628
ILT
681
682enum coff_symbol_classification
683{
52b219b5 684 /* Global symbol. */
5d54c628 685 COFF_SYMBOL_GLOBAL,
52b219b5 686 /* Common symbol. */
5d54c628 687 COFF_SYMBOL_COMMON,
52b219b5 688 /* Undefined symbol. */
5d54c628 689 COFF_SYMBOL_UNDEFINED,
52b219b5 690 /* Local symbol. */
5d54c628 691 COFF_SYMBOL_LOCAL,
52b219b5 692 /* PE section symbol. */
5d54c628
ILT
693 COFF_SYMBOL_PE_SECTION
694};
695
252b5132
RH
696typedef struct
697{
dc810e39 698 void (*_bfd_coff_swap_aux_in)
7920ce38 699 (bfd *, void *, int, int, int, int, void *);
dc810e39
AM
700
701 void (*_bfd_coff_swap_sym_in)
7920ce38 702 (bfd *, void *, void *);
dc810e39
AM
703
704 void (*_bfd_coff_swap_lineno_in)
7920ce38 705 (bfd *, void *, void *);
dc810e39
AM
706
707 unsigned int (*_bfd_coff_swap_aux_out)
7920ce38 708 (bfd *, void *, int, int, int, int, void *);
dc810e39
AM
709
710 unsigned int (*_bfd_coff_swap_sym_out)
7920ce38 711 (bfd *, void *, void *);
dc810e39
AM
712
713 unsigned int (*_bfd_coff_swap_lineno_out)
7920ce38 714 (bfd *, void *, void *);
dc810e39
AM
715
716 unsigned int (*_bfd_coff_swap_reloc_out)
7920ce38 717 (bfd *, void *, void *);
dc810e39
AM
718
719 unsigned int (*_bfd_coff_swap_filehdr_out)
7920ce38 720 (bfd *, void *, void *);
dc810e39
AM
721
722 unsigned int (*_bfd_coff_swap_aouthdr_out)
7920ce38 723 (bfd *, void *, void *);
dc810e39
AM
724
725 unsigned int (*_bfd_coff_swap_scnhdr_out)
7920ce38 726 (bfd *, void *, void *);
dc810e39
AM
727
728 unsigned int _bfd_filhsz;
729 unsigned int _bfd_aoutsz;
730 unsigned int _bfd_scnhsz;
731 unsigned int _bfd_symesz;
732 unsigned int _bfd_auxesz;
733 unsigned int _bfd_relsz;
734 unsigned int _bfd_linesz;
735 unsigned int _bfd_filnmlen;
b34976b6 736 bfd_boolean _bfd_coff_long_filenames;
88183869 737
b34976b6 738 bfd_boolean _bfd_coff_long_section_names;
88183869
DK
739 bfd_boolean (*_bfd_coff_set_long_section_names)
740 (bfd *, int);
68ffbac6 741
dc810e39 742 unsigned int _bfd_coff_default_section_alignment_power;
b34976b6 743 bfd_boolean _bfd_coff_force_symnames_in_strings;
dc810e39 744 unsigned int _bfd_coff_debug_string_prefix_length;
167ad85b 745 unsigned int _bfd_coff_max_nscns;
dc810e39
AM
746
747 void (*_bfd_coff_swap_filehdr_in)
7920ce38 748 (bfd *, void *, void *);
dc810e39
AM
749
750 void (*_bfd_coff_swap_aouthdr_in)
7920ce38 751 (bfd *, void *, void *);
dc810e39
AM
752
753 void (*_bfd_coff_swap_scnhdr_in)
7920ce38 754 (bfd *, void *, void *);
dc810e39
AM
755
756 void (*_bfd_coff_swap_reloc_in)
7920ce38 757 (bfd *abfd, void *, void *);
dc810e39 758
b34976b6 759 bfd_boolean (*_bfd_coff_bad_format_hook)
7920ce38 760 (bfd *, void *);
dc810e39 761
b34976b6 762 bfd_boolean (*_bfd_coff_set_arch_mach_hook)
7920ce38 763 (bfd *, void *);
dc810e39 764
7920ce38
NC
765 void * (*_bfd_coff_mkobject_hook)
766 (bfd *, void *, void *);
dc810e39 767
b34976b6 768 bfd_boolean (*_bfd_styp_to_sec_flags_hook)
7920ce38 769 (bfd *, void *, const char *, asection *, flagword *);
dc810e39
AM
770
771 void (*_bfd_set_alignment_hook)
7920ce38 772 (bfd *, asection *, void *);
dc810e39 773
b34976b6 774 bfd_boolean (*_bfd_coff_slurp_symbol_table)
7920ce38 775 (bfd *);
dc810e39 776
b34976b6 777 bfd_boolean (*_bfd_coff_symname_in_debug)
7920ce38 778 (bfd *, struct internal_syment *);
dc810e39 779
b34976b6 780 bfd_boolean (*_bfd_coff_pointerize_aux_hook)
7920ce38
NC
781 (bfd *, combined_entry_type *, combined_entry_type *,
782 unsigned int, combined_entry_type *);
dc810e39 783
b34976b6 784 bfd_boolean (*_bfd_coff_print_aux)
7920ce38
NC
785 (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
786 combined_entry_type *, unsigned int);
dc810e39
AM
787
788 void (*_bfd_coff_reloc16_extra_cases)
7920ce38
NC
789 (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
790 bfd_byte *, unsigned int *, unsigned int *);
dc810e39
AM
791
792 int (*_bfd_coff_reloc16_estimate)
7920ce38
NC
793 (bfd *, asection *, arelent *, unsigned int,
794 struct bfd_link_info *);
dc810e39
AM
795
796 enum coff_symbol_classification (*_bfd_coff_classify_symbol)
7920ce38 797 (bfd *, struct internal_syment *);
dc810e39 798
b34976b6 799 bfd_boolean (*_bfd_coff_compute_section_file_positions)
7920ce38 800 (bfd *);
dc810e39 801
b34976b6 802 bfd_boolean (*_bfd_coff_start_final_link)
7920ce38 803 (bfd *, struct bfd_link_info *);
dc810e39 804
b34976b6 805 bfd_boolean (*_bfd_coff_relocate_section)
7920ce38
NC
806 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
807 struct internal_reloc *, struct internal_syment *, asection **);
dc810e39
AM
808
809 reloc_howto_type *(*_bfd_coff_rtype_to_howto)
7920ce38 810 (bfd *, asection *, struct internal_reloc *,
dc810e39 811 struct coff_link_hash_entry *, struct internal_syment *,
7920ce38 812 bfd_vma *);
dc810e39 813
b34976b6 814 bfd_boolean (*_bfd_coff_adjust_symndx)
7920ce38
NC
815 (bfd *, struct bfd_link_info *, bfd *, asection *,
816 struct internal_reloc *, bfd_boolean *);
dc810e39 817
b34976b6 818 bfd_boolean (*_bfd_coff_link_add_one_symbol)
7920ce38 819 (struct bfd_link_info *, bfd *, const char *, flagword,
b34976b6 820 asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
7920ce38 821 struct bfd_link_hash_entry **);
dc810e39 822
b34976b6 823 bfd_boolean (*_bfd_coff_link_output_has_begun)
7920ce38 824 (bfd *, struct coff_final_link_info *);
dc810e39 825
b34976b6 826 bfd_boolean (*_bfd_coff_final_link_postscript)
7920ce38 827 (bfd *, struct coff_final_link_info *);
252b5132 828
2b5c217d
NC
829 bfd_boolean (*_bfd_coff_print_pdata)
830 (bfd *, void *);
831
252b5132
RH
832} bfd_coff_backend_data;
833
dc810e39
AM
834#define coff_backend_info(abfd) \
835 ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
252b5132
RH
836
837#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
dc810e39 838 ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
252b5132
RH
839
840#define bfd_coff_swap_sym_in(a,e,i) \
dc810e39 841 ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
252b5132
RH
842
843#define bfd_coff_swap_lineno_in(a,e,i) \
dc810e39 844 ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
252b5132
RH
845
846#define bfd_coff_swap_reloc_out(abfd, i, o) \
dc810e39 847 ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
252b5132
RH
848
849#define bfd_coff_swap_lineno_out(abfd, i, o) \
dc810e39 850 ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
252b5132
RH
851
852#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
dc810e39 853 ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
252b5132
RH
854
855#define bfd_coff_swap_sym_out(abfd, i,o) \
dc810e39 856 ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
252b5132
RH
857
858#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
dc810e39 859 ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
252b5132
RH
860
861#define bfd_coff_swap_filehdr_out(abfd, i,o) \
dc810e39 862 ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
252b5132
RH
863
864#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
dc810e39 865 ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
252b5132
RH
866
867#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
868#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
869#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
870#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
871#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
872#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz)
873#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
692b7d62 874#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
dc810e39
AM
875#define bfd_coff_long_filenames(abfd) \
876 (coff_backend_info (abfd)->_bfd_coff_long_filenames)
252b5132 877#define bfd_coff_long_section_names(abfd) \
dc810e39 878 (coff_backend_info (abfd)->_bfd_coff_long_section_names)
88183869
DK
879#define bfd_coff_set_long_section_names(abfd, enable) \
880 ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
252b5132 881#define bfd_coff_default_section_alignment_power(abfd) \
dc810e39 882 (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
167ad85b
TG
883#define bfd_coff_max_nscns(abfd) \
884 (coff_backend_info (abfd)->_bfd_coff_max_nscns)
885
252b5132 886#define bfd_coff_swap_filehdr_in(abfd, i,o) \
dc810e39 887 ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
252b5132
RH
888
889#define bfd_coff_swap_aouthdr_in(abfd, i,o) \
dc810e39 890 ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
252b5132
RH
891
892#define bfd_coff_swap_scnhdr_in(abfd, i,o) \
dc810e39 893 ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
252b5132
RH
894
895#define bfd_coff_swap_reloc_in(abfd, i, o) \
dc810e39 896 ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
252b5132
RH
897
898#define bfd_coff_bad_format_hook(abfd, filehdr) \
dc810e39 899 ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
252b5132
RH
900
901#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
dc810e39 902 ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
252b5132 903#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
ed781d5d
NC
904 ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
905 (abfd, filehdr, aouthdr))
252b5132 906
7c8ca0e4 907#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
dc810e39
AM
908 ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
909 (abfd, scnhdr, name, section, flags_ptr))
252b5132
RH
910
911#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
dc810e39 912 ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
252b5132
RH
913
914#define bfd_coff_slurp_symbol_table(abfd)\
dc810e39 915 ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
252b5132
RH
916
917#define bfd_coff_symname_in_debug(abfd, sym)\
dc810e39 918 ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
252b5132 919
7f6d05e8 920#define bfd_coff_force_symnames_in_strings(abfd)\
dc810e39 921 (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
7f6d05e8
CP
922
923#define bfd_coff_debug_string_prefix_length(abfd)\
dc810e39 924 (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
7f6d05e8 925
252b5132 926#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
dc810e39
AM
927 ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
928 (abfd, file, base, symbol, aux, indaux))
252b5132 929
ed781d5d
NC
930#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
931 reloc, data, src_ptr, dst_ptr)\
dc810e39
AM
932 ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
933 (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
252b5132
RH
934
935#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
dc810e39
AM
936 ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
937 (abfd, section, reloc, shrink, link_info))
252b5132 938
5d54c628 939#define bfd_coff_classify_symbol(abfd, sym)\
dc810e39
AM
940 ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
941 (abfd, sym))
252b5132
RH
942
943#define bfd_coff_compute_section_file_positions(abfd)\
dc810e39
AM
944 ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
945 (abfd))
252b5132
RH
946
947#define bfd_coff_start_final_link(obfd, info)\
dc810e39
AM
948 ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
949 (obfd, info))
252b5132 950#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
dc810e39
AM
951 ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
952 (obfd, info, ibfd, o, con, rel, isyms, secs))
252b5132 953#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
dc810e39
AM
954 ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
955 (abfd, sec, rel, h, sym, addendp))
252b5132 956#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
dc810e39
AM
957 ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
958 (obfd, info, ibfd, sec, rel, adjustedp))
ed781d5d
NC
959#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
960 value, string, cp, coll, hashp)\
dc810e39
AM
961 ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
962 (info, abfd, name, flags, section, value, string, cp, coll, hashp))
252b5132
RH
963
964#define bfd_coff_link_output_has_begun(a,p) \
7920ce38 965 ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
252b5132 966#define bfd_coff_final_link_postscript(a,p) \
7920ce38 967 ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
252b5132 968
2b5c217d
NC
969#define bfd_coff_have_print_pdata(a) \
970 (coff_backend_info (a)->_bfd_coff_print_pdata)
971#define bfd_coff_print_pdata(a,p) \
972 ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))
973
92dd4511
L
974/* Macro: Returns true if the bfd is a PE executable as opposed to a
975 PE object file. */
976#define bfd_pei_p(abfd) \
977 (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
This page took 0.785949 seconds and 4 git commands to generate.