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