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