1 /* ELF linking support for BFD. 2 Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3 2005, 2006 Free Software Foundation, Inc. 4 5 This file is part of BFD, the Binary File Descriptor library. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 20 21 #include "bfd.h" 22 #include "sysdep.h" 23 #include "bfdlink.h" 24 #include "libbfd.h" 25 #define ARCH_SIZE 0 26 #include "elf-bfd.h" 27 #include "safe-ctype.h" 28 #include "libiberty.h" 29 #include "objalloc.h" 30 31 /* Define a symbol in a dynamic linkage section. */ 32 33 struct elf_link_hash_entry * 34 _bfd_elf_define_linkage_sym (bfd *abfd, 35 struct bfd_link_info *info, 36 asection *sec, 37 const char *name) 38 { 39 struct elf_link_hash_entry *h; 40 struct bfd_link_hash_entry *bh; 41 const struct elf_backend_data *bed; 42 43 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE); 44 if (h != NULL) 45 { 46 /* Zap symbol defined in an as-needed lib that wasn't linked. 47 This is a symptom of a larger problem: Absolute symbols 48 defined in shared libraries can't be overridden, because we 49 lose the link to the bfd which is via the symbol section. */ 50 h->root.type = bfd_link_hash_new; 51 } 52 53 bh = &h->root; 54 if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL, 55 sec, 0, NULL, FALSE, 56 get_elf_backend_data (abfd)->collect, 57 &bh)) 58 return NULL; 59 h = (struct elf_link_hash_entry *) bh; 60 h->def_regular = 1; 61 h->type = STT_OBJECT; 62 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; 63 64 bed = get_elf_backend_data (abfd); 65 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 66 return h; 67 } 68 69 bfd_boolean 70 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) 71 { 72 flagword flags; 73 asection *s; 74 struct elf_link_hash_entry *h; 75 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 76 int ptralign; 77 78 /* This function may be called more than once. */ 79 s = bfd_get_section_by_name (abfd, ".got"); 80 if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0) 81 return TRUE; 82 83 switch (bed->s->arch_size) 84 { 85 case 32: 86 ptralign = 2; 87 break; 88 89 case 64: 90 ptralign = 3; 91 break; 92 93 default: 94 bfd_set_error (bfd_error_bad_value); 95 return FALSE; 96 } 97 98 flags = bed->dynamic_sec_flags; 99 100 s = bfd_make_section_with_flags (abfd, ".got", flags); 101 if (s == NULL 102 || !bfd_set_section_alignment (abfd, s, ptralign)) 103 return FALSE; 104 105 if (bed->want_got_plt) 106 { 107 s = bfd_make_section_with_flags (abfd, ".got.plt", flags); 108 if (s == NULL 109 || !bfd_set_section_alignment (abfd, s, ptralign)) 110 return FALSE; 111 } 112 113 if (bed->want_got_sym) 114 { 115 /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got 116 (or .got.plt) section. We don't do this in the linker script 117 because we don't want to define the symbol if we are not creating 118 a global offset table. */ 119 h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_"); 120 elf_hash_table (info)->hgot = h; 121 if (h == NULL) 122 return FALSE; 123 } 124 125 /* The first bit of the global offset table is the header. */ 126 s->size += bed->got_header_size; 127 128 return TRUE; 129 } 130 131 /* Create a strtab to hold the dynamic symbol names. */ 132 static bfd_boolean 133 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info) 134 { 135 struct elf_link_hash_table *hash_table; 136 137 hash_table = elf_hash_table (info); 138 if (hash_table->dynobj == NULL) 139 hash_table->dynobj = abfd; 140 141 if (hash_table->dynstr == NULL) 142 { 143 hash_table->dynstr = _bfd_elf_strtab_init (); 144 if (hash_table->dynstr == NULL) 145 return FALSE; 146 } 147 return TRUE; 148 } 149 150 /* Create some sections which will be filled in with dynamic linking 151 information. ABFD is an input file which requires dynamic sections 152 to be created. The dynamic sections take up virtual memory space 153 when the final executable is run, so we need to create them before 154 addresses are assigned to the output sections. We work out the 155 actual contents and size of these sections later. */ 156 157 bfd_boolean 158 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 159 { 160 flagword flags; 161 register asection *s; 162 const struct elf_backend_data *bed; 163 164 if (! is_elf_hash_table (info->hash)) 165 return FALSE; 166 167 if (elf_hash_table (info)->dynamic_sections_created) 168 return TRUE; 169 170 if (!_bfd_elf_link_create_dynstrtab (abfd, info)) 171 return FALSE; 172 173 abfd = elf_hash_table (info)->dynobj; 174 bed = get_elf_backend_data (abfd); 175 176 flags = bed->dynamic_sec_flags; 177 178 /* A dynamically linked executable has a .interp section, but a 179 shared library does not. */ 180 if (info->executable) 181 { 182 s = bfd_make_section_with_flags (abfd, ".interp", 183 flags | SEC_READONLY); 184 if (s == NULL) 185 return FALSE; 186 } 187 188 if (! info->traditional_format) 189 { 190 s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr", 191 flags | SEC_READONLY); 192 if (s == NULL 193 || ! bfd_set_section_alignment (abfd, s, 2)) 194 return FALSE; 195 elf_hash_table (info)->eh_info.hdr_sec = s; 196 } 197 198 /* Create sections to hold version informations. These are removed 199 if they are not needed. */ 200 s = bfd_make_section_with_flags (abfd, ".gnu.version_d", 201 flags | SEC_READONLY); 202 if (s == NULL 203 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 204 return FALSE; 205 206 s = bfd_make_section_with_flags (abfd, ".gnu.version", 207 flags | SEC_READONLY); 208 if (s == NULL 209 || ! bfd_set_section_alignment (abfd, s, 1)) 210 return FALSE; 211 212 s = bfd_make_section_with_flags (abfd, ".gnu.version_r", 213 flags | SEC_READONLY); 214 if (s == NULL 215 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 216 return FALSE; 217 218 s = bfd_make_section_with_flags (abfd, ".dynsym", 219 flags | SEC_READONLY); 220 if (s == NULL 221 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 222 return FALSE; 223 224 s = bfd_make_section_with_flags (abfd, ".dynstr", 225 flags | SEC_READONLY); 226 if (s == NULL) 227 return FALSE; 228 229 s = bfd_make_section_with_flags (abfd, ".dynamic", flags); 230 if (s == NULL 231 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 232 return FALSE; 233 234 /* The special symbol _DYNAMIC is always set to the start of the 235 .dynamic section. We could set _DYNAMIC in a linker script, but we 236 only want to define it if we are, in fact, creating a .dynamic 237 section. We don't want to define it if there is no .dynamic 238 section, since on some ELF platforms the start up code examines it 239 to decide how to initialize the process. */ 240 if (!_bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC")) 241 return FALSE; 242 243 s = bfd_make_section_with_flags (abfd, ".hash", 244 flags | SEC_READONLY); 245 if (s == NULL 246 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 247 return FALSE; 248 elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry; 249 250 /* Let the backend create the rest of the sections. This lets the 251 backend set the right flags. The backend will normally create 252 the .got and .plt sections. */ 253 if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info)) 254 return FALSE; 255 256 elf_hash_table (info)->dynamic_sections_created = TRUE; 257 258 return TRUE; 259 } 260 261 /* Create dynamic sections when linking against a dynamic object. */ 262 263 bfd_boolean 264 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 265 { 266 flagword flags, pltflags; 267 struct elf_link_hash_entry *h; 268 asection *s; 269 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 270 271 /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and 272 .rel[a].bss sections. */ 273 flags = bed->dynamic_sec_flags; 274 275 pltflags = flags; 276 if (bed->plt_not_loaded) 277 /* We do not clear SEC_ALLOC here because we still want the OS to 278 allocate space for the section; it's just that there's nothing 279 to read in from the object file. */ 280 pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS); 281 else 282 pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD; 283 if (bed->plt_readonly) 284 pltflags |= SEC_READONLY; 285 286 s = bfd_make_section_with_flags (abfd, ".plt", pltflags); 287 if (s == NULL 288 || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment)) 289 return FALSE; 290 291 /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the 292 .plt section. */ 293 if (bed->want_plt_sym) 294 { 295 h = _bfd_elf_define_linkage_sym (abfd, info, s, 296 "_PROCEDURE_LINKAGE_TABLE_"); 297 elf_hash_table (info)->hplt = h; 298 if (h == NULL) 299 return FALSE; 300 } 301 302 s = bfd_make_section_with_flags (abfd, 303 (bed->default_use_rela_p 304 ? ".rela.plt" : ".rel.plt"), 305 flags | SEC_READONLY); 306 if (s == NULL 307 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 308 return FALSE; 309 310 if (! _bfd_elf_create_got_section (abfd, info)) 311 return FALSE; 312 313 if (bed->want_dynbss) 314 { 315 /* The .dynbss section is a place to put symbols which are defined 316 by dynamic objects, are referenced by regular objects, and are 317 not functions. We must allocate space for them in the process 318 image and use a R_*_COPY reloc to tell the dynamic linker to 319 initialize them at run time. The linker script puts the .dynbss 320 section into the .bss section of the final image. */ 321 s = bfd_make_section_with_flags (abfd, ".dynbss", 322 (SEC_ALLOC 323 | SEC_LINKER_CREATED)); 324 if (s == NULL) 325 return FALSE; 326 327 /* The .rel[a].bss section holds copy relocs. This section is not 328 normally needed. We need to create it here, though, so that the 329 linker will map it to an output section. We can't just create it 330 only if we need it, because we will not know whether we need it 331 until we have seen all the input files, and the first time the 332 main linker code calls BFD after examining all the input files 333 (size_dynamic_sections) the input sections have already been 334 mapped to the output sections. If the section turns out not to 335 be needed, we can discard it later. We will never need this 336 section when generating a shared object, since they do not use 337 copy relocs. */ 338 if (! info->shared) 339 { 340 s = bfd_make_section_with_flags (abfd, 341 (bed->default_use_rela_p 342 ? ".rela.bss" : ".rel.bss"), 343 flags | SEC_READONLY); 344 if (s == NULL 345 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 346 return FALSE; 347 } 348 } 349 350 return TRUE; 351 } 352 353 /* Record a new dynamic symbol. We record the dynamic symbols as we 354 read the input files, since we need to have a list of all of them 355 before we can determine the final sizes of the output sections. 356 Note that we may actually call this function even though we are not 357 going to output any dynamic symbols; in some cases we know that a 358 symbol should be in the dynamic symbol table, but only if there is 359 one. */ 360 361 bfd_boolean 362 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info, 363 struct elf_link_hash_entry *h) 364 { 365 if (h->dynindx == -1) 366 { 367 struct elf_strtab_hash *dynstr; 368 char *p; 369 const char *name; 370 bfd_size_type indx; 371 372 /* XXX: The ABI draft says the linker must turn hidden and 373 internal symbols into STB_LOCAL symbols when producing the 374 DSO. However, if ld.so honors st_other in the dynamic table, 375 this would not be necessary. */ 376 switch (ELF_ST_VISIBILITY (h->other)) 377 { 378 case STV_INTERNAL: 379 case STV_HIDDEN: 380 if (h->root.type != bfd_link_hash_undefined 381 && h->root.type != bfd_link_hash_undefweak) 382 { 383 h->forced_local = 1; 384 if (!elf_hash_table (info)->is_relocatable_executable) 385 return TRUE; 386 } 387 388 default: 389 break; 390 } 391 392 h->dynindx = elf_hash_table (info)->dynsymcount; 393 ++elf_hash_table (info)->dynsymcount; 394 395 dynstr = elf_hash_table (info)->dynstr; 396 if (dynstr == NULL) 397 { 398 /* Create a strtab to hold the dynamic symbol names. */ 399 elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init (); 400 if (dynstr == NULL) 401 return FALSE; 402 } 403 404 /* We don't put any version information in the dynamic string 405 table. */ 406 name = h->root.root.string; 407 p = strchr (name, ELF_VER_CHR); 408 if (p != NULL) 409 /* We know that the p points into writable memory. In fact, 410 there are only a few symbols that have read-only names, being 411 those like _GLOBAL_OFFSET_TABLE_ that are created specially 412 by the backends. Most symbols will have names pointing into 413 an ELF string table read from a file, or to objalloc memory. */ 414 *p = 0; 415 416 indx = _bfd_elf_strtab_add (dynstr, name, p != NULL); 417 418 if (p != NULL) 419 *p = ELF_VER_CHR; 420 421 if (indx == (bfd_size_type) -1) 422 return FALSE; 423 h->dynstr_index = indx; 424 } 425 426 return TRUE; 427 } 428 429 /* Record an assignment to a symbol made by a linker script. We need 430 this in case some dynamic object refers to this symbol. */ 431 432 bfd_boolean 433 bfd_elf_record_link_assignment (bfd *output_bfd, 434 struct bfd_link_info *info, 435 const char *name, 436 bfd_boolean provide, 437 bfd_boolean hidden) 438 { 439 struct elf_link_hash_entry *h; 440 struct elf_link_hash_table *htab; 441 442 if (!is_elf_hash_table (info->hash)) 443 return TRUE; 444 445 htab = elf_hash_table (info); 446 h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE); 447 if (h == NULL) 448 return provide; 449 450 /* Since we're defining the symbol, don't let it seem to have not 451 been defined. record_dynamic_symbol and size_dynamic_sections 452 may depend on this. */ 453 if (h->root.type == bfd_link_hash_undefweak 454 || h->root.type == bfd_link_hash_undefined) 455 { 456 h->root.type = bfd_link_hash_new; 457 if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root) 458 bfd_link_repair_undef_list (&htab->root); 459 } 460 461 if (h->root.type == bfd_link_hash_new) 462 h->non_elf = 0; 463 464 /* If this symbol is being provided by the linker script, and it is 465 currently defined by a dynamic object, but not by a regular 466 object, then mark it as undefined so that the generic linker will 467 force the correct value. */ 468 if (provide 469 && h->def_dynamic 470 && !h->def_regular) 471 h->root.type = bfd_link_hash_undefined; 472 473 /* If this symbol is not being provided by the linker script, and it is 474 currently defined by a dynamic object, but not by a regular object, 475 then clear out any version information because the symbol will not be 476 associated with the dynamic object any more. */ 477 if (!provide 478 && h->def_dynamic 479 && !h->def_regular) 480 h->verinfo.verdef = NULL; 481 482 h->def_regular = 1; 483 484 if (provide && hidden) 485 { 486 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 487 488 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; 489 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 490 } 491 492 /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects 493 and executables. */ 494 if (!info->relocatable 495 && h->dynindx != -1 496 && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN 497 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)) 498 h->forced_local = 1; 499 500 if ((h->def_dynamic 501 || h->ref_dynamic 502 || info->shared 503 || (info->executable && elf_hash_table (info)->is_relocatable_executable)) 504 && h->dynindx == -1) 505 { 506 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 507 return FALSE; 508 509 /* If this is a weak defined symbol, and we know a corresponding 510 real symbol from the same dynamic object, make sure the real 511 symbol is also made into a dynamic symbol. */ 512 if (h->u.weakdef != NULL 513 && h->u.weakdef->dynindx == -1) 514 { 515 if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef)) 516 return FALSE; 517 } 518 } 519 520 return TRUE; 521 } 522 523 /* Record a new local dynamic symbol. Returns 0 on failure, 1 on 524 success, and 2 on a failure caused by attempting to record a symbol 525 in a discarded section, eg. a discarded link-once section symbol. */ 526 527 int 528 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info, 529 bfd *input_bfd, 530 long input_indx) 531 { 532 bfd_size_type amt; 533 struct elf_link_local_dynamic_entry *entry; 534 struct elf_link_hash_table *eht; 535 struct elf_strtab_hash *dynstr; 536 unsigned long dynstr_index; 537 char *name; 538 Elf_External_Sym_Shndx eshndx; 539 char esym[sizeof (Elf64_External_Sym)]; 540 541 if (! is_elf_hash_table (info->hash)) 542 return 0; 543 544 /* See if the entry exists already. */ 545 for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next) 546 if (entry->input_bfd == input_bfd && entry->input_indx == input_indx) 547 return 1; 548 549 amt = sizeof (*entry); 550 entry = bfd_alloc (input_bfd, amt); 551 if (entry == NULL) 552 return 0; 553 554 /* Go find the symbol, so that we can find it's name. */ 555 if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr, 556 1, input_indx, &entry->isym, esym, &eshndx)) 557 { 558 bfd_release (input_bfd, entry); 559 return 0; 560 } 561 562 if (entry->isym.st_shndx != SHN_UNDEF 563 && (entry->isym.st_shndx < SHN_LORESERVE 564 || entry->isym.st_shndx > SHN_HIRESERVE)) 565 { 566 asection *s; 567 568 s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx); 569 if (s == NULL || bfd_is_abs_section (s->output_section)) 570 { 571 /* We can still bfd_release here as nothing has done another 572 bfd_alloc. We can't do this later in this function. */ 573 bfd_release (input_bfd, entry); 574 return 2; 575 } 576 } 577 578 name = (bfd_elf_string_from_elf_section 579 (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link, 580 entry->isym.st_name)); 581 582 dynstr = elf_hash_table (info)->dynstr; 583 if (dynstr == NULL) 584 { 585 /* Create a strtab to hold the dynamic symbol names. */ 586 elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init (); 587 if (dynstr == NULL) 588 return 0; 589 } 590 591 dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE); 592 if (dynstr_index == (unsigned long) -1) 593 return 0; 594 entry->isym.st_name = dynstr_index; 595 596 eht = elf_hash_table (info); 597 598 entry->next = eht->dynlocal; 599 eht->dynlocal = entry; 600 entry->input_bfd = input_bfd; 601 entry->input_indx = input_indx; 602 eht->dynsymcount++; 603 604 /* Whatever binding the symbol had before, it's now local. */ 605 entry->isym.st_info 606 = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info)); 607 608 /* The dynindx will be set at the end of size_dynamic_sections. */ 609 610 return 1; 611 } 612 613 /* Return the dynindex of a local dynamic symbol. */ 614 615 long 616 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info, 617 bfd *input_bfd, 618 long input_indx) 619 { 620 struct elf_link_local_dynamic_entry *e; 621 622 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next) 623 if (e->input_bfd == input_bfd && e->input_indx == input_indx) 624 return e->dynindx; 625 return -1; 626 } 627 628 /* This function is used to renumber the dynamic symbols, if some of 629 them are removed because they are marked as local. This is called 630 via elf_link_hash_traverse. */ 631 632 static bfd_boolean 633 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h, 634 void *data) 635 { 636 size_t *count = data; 637 638 if (h->root.type == bfd_link_hash_warning) 639 h = (struct elf_link_hash_entry *) h->root.u.i.link; 640 641 if (h->forced_local) 642 return TRUE; 643 644 if (h->dynindx != -1) 645 h->dynindx = ++(*count); 646 647 return TRUE; 648 } 649 650 651 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with 652 STB_LOCAL binding. */ 653 654 static bfd_boolean 655 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h, 656 void *data) 657 { 658 size_t *count = data; 659 660 if (h->root.type == bfd_link_hash_warning) 661 h = (struct elf_link_hash_entry *) h->root.u.i.link; 662 663 if (!h->forced_local) 664 return TRUE; 665 666 if (h->dynindx != -1) 667 h->dynindx = ++(*count); 668 669 return TRUE; 670 } 671 672 /* Return true if the dynamic symbol for a given section should be 673 omitted when creating a shared library. */ 674 bfd_boolean 675 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED, 676 struct bfd_link_info *info, 677 asection *p) 678 { 679 switch (elf_section_data (p)->this_hdr.sh_type) 680 { 681 case SHT_PROGBITS: 682 case SHT_NOBITS: 683 /* If sh_type is yet undecided, assume it could be 684 SHT_PROGBITS/SHT_NOBITS. */ 685 case SHT_NULL: 686 if (strcmp (p->name, ".got") == 0 687 || strcmp (p->name, ".got.plt") == 0 688 || strcmp (p->name, ".plt") == 0) 689 { 690 asection *ip; 691 bfd *dynobj = elf_hash_table (info)->dynobj; 692 693 if (dynobj != NULL 694 && (ip = bfd_get_section_by_name (dynobj, p->name)) != NULL 695 && (ip->flags & SEC_LINKER_CREATED) 696 && ip->output_section == p) 697 return TRUE; 698 } 699 return FALSE; 700 701 /* There shouldn't be section relative relocations 702 against any other section. */ 703 default: 704 return TRUE; 705 } 706 } 707 708 /* Assign dynsym indices. In a shared library we generate a section 709 symbol for each output section, which come first. Next come symbols 710 which have been forced to local binding. Then all of the back-end 711 allocated local dynamic syms, followed by the rest of the global 712 symbols. */ 713 714 static unsigned long 715 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd, 716 struct bfd_link_info *info, 717 unsigned long *section_sym_count) 718 { 719 unsigned long dynsymcount = 0; 720 721 if (info->shared || elf_hash_table (info)->is_relocatable_executable) 722 { 723 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 724 asection *p; 725 for (p = output_bfd->sections; p ; p = p->next) 726 if ((p->flags & SEC_EXCLUDE) == 0 727 && (p->flags & SEC_ALLOC) != 0 728 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p)) 729 elf_section_data (p)->dynindx = ++dynsymcount; 730 } 731 *section_sym_count = dynsymcount; 732 733 elf_link_hash_traverse (elf_hash_table (info), 734 elf_link_renumber_local_hash_table_dynsyms, 735 &dynsymcount); 736 737 if (elf_hash_table (info)->dynlocal) 738 { 739 struct elf_link_local_dynamic_entry *p; 740 for (p = elf_hash_table (info)->dynlocal; p ; p = p->next) 741 p->dynindx = ++dynsymcount; 742 } 743 744 elf_link_hash_traverse (elf_hash_table (info), 745 elf_link_renumber_hash_table_dynsyms, 746 &dynsymcount); 747 748 /* There is an unused NULL entry at the head of the table which 749 we must account for in our count. Unless there weren't any 750 symbols, which means we'll have no table at all. */ 751 if (dynsymcount != 0) 752 ++dynsymcount; 753 754 elf_hash_table (info)->dynsymcount = dynsymcount; 755 return dynsymcount; 756 } 757 758 /* This function is called when we want to define a new symbol. It 759 handles the various cases which arise when we find a definition in 760 a dynamic object, or when there is already a definition in a 761 dynamic object. The new symbol is described by NAME, SYM, PSEC, 762 and PVALUE. We set SYM_HASH to the hash table entry. We set 763 OVERRIDE if the old symbol is overriding a new definition. We set 764 TYPE_CHANGE_OK if it is OK for the type to change. We set 765 SIZE_CHANGE_OK if it is OK for the size to change. By OK to 766 change, we mean that we shouldn't warn if the type or size does 767 change. We set POLD_ALIGNMENT if an old common symbol in a dynamic 768 object is overridden by a regular object. */ 769 770 bfd_boolean 771 _bfd_elf_merge_symbol (bfd *abfd, 772 struct bfd_link_info *info, 773 const char *name, 774 Elf_Internal_Sym *sym, 775 asection **psec, 776 bfd_vma *pvalue, 777 unsigned int *pold_alignment, 778 struct elf_link_hash_entry **sym_hash, 779 bfd_boolean *skip, 780 bfd_boolean *override, 781 bfd_boolean *type_change_ok, 782 bfd_boolean *size_change_ok) 783 { 784 asection *sec, *oldsec; 785 struct elf_link_hash_entry *h; 786 struct elf_link_hash_entry *flip; 787 int bind; 788 bfd *oldbfd; 789 bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon; 790 bfd_boolean newweak, oldweak; 791 const struct elf_backend_data *bed; 792 793 *skip = FALSE; 794 *override = FALSE; 795 796 sec = *psec; 797 bind = ELF_ST_BIND (sym->st_info); 798 799 if (! bfd_is_und_section (sec)) 800 h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE); 801 else 802 h = ((struct elf_link_hash_entry *) 803 bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE)); 804 if (h == NULL) 805 return FALSE; 806 *sym_hash = h; 807 808 /* This code is for coping with dynamic objects, and is only useful 809 if we are doing an ELF link. */ 810 if (info->hash->creator != abfd->xvec) 811 return TRUE; 812 813 /* For merging, we only care about real symbols. */ 814 815 while (h->root.type == bfd_link_hash_indirect 816 || h->root.type == bfd_link_hash_warning) 817 h = (struct elf_link_hash_entry *) h->root.u.i.link; 818 819 /* If we just created the symbol, mark it as being an ELF symbol. 820 Other than that, there is nothing to do--there is no merge issue 821 with a newly defined symbol--so we just return. */ 822 823 if (h->root.type == bfd_link_hash_new) 824 { 825 h->non_elf = 0; 826 return TRUE; 827 } 828 829 /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the 830 existing symbol. */ 831 832 switch (h->root.type) 833 { 834 default: 835 oldbfd = NULL; 836 oldsec = NULL; 837 break; 838 839 case bfd_link_hash_undefined: 840 case bfd_link_hash_undefweak: 841 oldbfd = h->root.u.undef.abfd; 842 oldsec = NULL; 843 break; 844 845 case bfd_link_hash_defined: 846 case bfd_link_hash_defweak: 847 oldbfd = h->root.u.def.section->owner; 848 oldsec = h->root.u.def.section; 849 break; 850 851 case bfd_link_hash_common: 852 oldbfd = h->root.u.c.p->section->owner; 853 oldsec = h->root.u.c.p->section; 854 break; 855 } 856 857 /* In cases involving weak versioned symbols, we may wind up trying 858 to merge a symbol with itself. Catch that here, to avoid the 859 confusion that results if we try to override a symbol with 860 itself. The additional tests catch cases like 861 _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a 862 dynamic object, which we do want to handle here. */ 863 if (abfd == oldbfd 864 && ((abfd->flags & DYNAMIC) == 0 865 || !h->def_regular)) 866 return TRUE; 867 868 /* NEWDYN and OLDDYN indicate whether the new or old symbol, 869 respectively, is from a dynamic object. */ 870 871 newdyn = (abfd->flags & DYNAMIC) != 0; 872 873 olddyn = FALSE; 874 if (oldbfd != NULL) 875 olddyn = (oldbfd->flags & DYNAMIC) != 0; 876 else if (oldsec != NULL) 877 { 878 /* This handles the special SHN_MIPS_{TEXT,DATA} section 879 indices used by MIPS ELF. */ 880 olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0; 881 } 882 883 /* NEWDEF and OLDDEF indicate whether the new or old symbol, 884 respectively, appear to be a definition rather than reference. */ 885 886 newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec); 887 888 olddef = (h->root.type != bfd_link_hash_undefined 889 && h->root.type != bfd_link_hash_undefweak 890 && h->root.type != bfd_link_hash_common); 891 892 /* When we try to create a default indirect symbol from the dynamic 893 definition with the default version, we skip it if its type and 894 the type of existing regular definition mismatch. We only do it 895 if the existing regular definition won't be dynamic. */ 896 if (pold_alignment == NULL 897 && !info->shared 898 && !info->export_dynamic 899 && !h->ref_dynamic 900 && newdyn 901 && newdef 902 && !olddyn 903 && (olddef || h->root.type == bfd_link_hash_common) 904 && ELF_ST_TYPE (sym->st_info) != h->type 905 && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE 906 && h->type != STT_NOTYPE) 907 { 908 *skip = TRUE; 909 return TRUE; 910 } 911 912 /* Check TLS symbol. We don't check undefined symbol introduced by 913 "ld -u". */ 914 if ((ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS) 915 && ELF_ST_TYPE (sym->st_info) != h->type 916 && oldbfd != NULL) 917 { 918 bfd *ntbfd, *tbfd; 919 bfd_boolean ntdef, tdef; 920 asection *ntsec, *tsec; 921 922 if (h->type == STT_TLS) 923 { 924 ntbfd = abfd; 925 ntsec = sec; 926 ntdef = newdef; 927 tbfd = oldbfd; 928 tsec = oldsec; 929 tdef = olddef; 930 } 931 else 932 { 933 ntbfd = oldbfd; 934 ntsec = oldsec; 935 ntdef = olddef; 936 tbfd = abfd; 937 tsec = sec; 938 tdef = newdef; 939 } 940 941 if (tdef && ntdef) 942 (*_bfd_error_handler) 943 (_("%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"), 944 tbfd, tsec, ntbfd, ntsec, h->root.root.string); 945 else if (!tdef && !ntdef) 946 (*_bfd_error_handler) 947 (_("%s: TLS reference in %B mismatches non-TLS reference in %B"), 948 tbfd, ntbfd, h->root.root.string); 949 else if (tdef) 950 (*_bfd_error_handler) 951 (_("%s: TLS definition in %B section %A mismatches non-TLS reference in %B"), 952 tbfd, tsec, ntbfd, h->root.root.string); 953 else 954 (*_bfd_error_handler) 955 (_("%s: TLS reference in %B mismatches non-TLS definition in %B section %A"), 956 tbfd, ntbfd, ntsec, h->root.root.string); 957 958 bfd_set_error (bfd_error_bad_value); 959 return FALSE; 960 } 961 962 /* We need to remember if a symbol has a definition in a dynamic 963 object or is weak in all dynamic objects. Internal and hidden 964 visibility will make it unavailable to dynamic objects. */ 965 if (newdyn && !h->dynamic_def) 966 { 967 if (!bfd_is_und_section (sec)) 968 h->dynamic_def = 1; 969 else 970 { 971 /* Check if this symbol is weak in all dynamic objects. If it 972 is the first time we see it in a dynamic object, we mark 973 if it is weak. Otherwise, we clear it. */ 974 if (!h->ref_dynamic) 975 { 976 if (bind == STB_WEAK) 977 h->dynamic_weak = 1; 978 } 979 else if (bind != STB_WEAK) 980 h->dynamic_weak = 0; 981 } 982 } 983 984 /* If the old symbol has non-default visibility, we ignore the new 985 definition from a dynamic object. */ 986 if (newdyn 987 && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 988 && !bfd_is_und_section (sec)) 989 { 990 *skip = TRUE; 991 /* Make sure this symbol is dynamic. */ 992 h->ref_dynamic = 1; 993 /* A protected symbol has external availability. Make sure it is 994 recorded as dynamic. 995 996 FIXME: Should we check type and size for protected symbol? */ 997 if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) 998 return bfd_elf_link_record_dynamic_symbol (info, h); 999 else 1000 return TRUE; 1001 } 1002 else if (!newdyn 1003 && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT 1004 && h->def_dynamic) 1005 { 1006 /* If the new symbol with non-default visibility comes from a 1007 relocatable file and the old definition comes from a dynamic 1008 object, we remove the old definition. */ 1009 if ((*sym_hash)->root.type == bfd_link_hash_indirect) 1010 h = *sym_hash; 1011 1012 if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root) 1013 && bfd_is_und_section (sec)) 1014 { 1015 /* If the new symbol is undefined and the old symbol was 1016 also undefined before, we need to make sure 1017 _bfd_generic_link_add_one_symbol doesn't mess 1018 up the linker hash table undefs list. Since the old 1019 definition came from a dynamic object, it is still on the 1020 undefs list. */ 1021 h->root.type = bfd_link_hash_undefined; 1022 h->root.u.undef.abfd = abfd; 1023 } 1024 else 1025 { 1026 h->root.type = bfd_link_hash_new; 1027 h->root.u.undef.abfd = NULL; 1028 } 1029 1030 if (h->def_dynamic) 1031 { 1032 h->def_dynamic = 0; 1033 h->ref_dynamic = 1; 1034 h->dynamic_def = 1; 1035 } 1036 /* FIXME: Should we check type and size for protected symbol? */ 1037 h->size = 0; 1038 h->type = 0; 1039 return TRUE; 1040 } 1041 1042 /* Differentiate strong and weak symbols. */ 1043 newweak = bind == STB_WEAK; 1044 oldweak = (h->root.type == bfd_link_hash_defweak 1045 || h->root.type == bfd_link_hash_undefweak); 1046 1047 /* If a new weak symbol definition comes from a regular file and the 1048 old symbol comes from a dynamic library, we treat the new one as 1049 strong. Similarly, an old weak symbol definition from a regular 1050 file is treated as strong when the new symbol comes from a dynamic 1051 library. Further, an old weak symbol from a dynamic library is 1052 treated as strong if the new symbol is from a dynamic library. 1053 This reflects the way glibc's ld.so works. 1054 1055 Do this before setting *type_change_ok or *size_change_ok so that 1056 we warn properly when dynamic library symbols are overridden. */ 1057 1058 if (newdef && !newdyn && olddyn) 1059 newweak = FALSE; 1060 if (olddef && newdyn) 1061 oldweak = FALSE; 1062 1063 /* It's OK to change the type if either the existing symbol or the 1064 new symbol is weak. A type change is also OK if the old symbol 1065 is undefined and the new symbol is defined. */ 1066 1067 if (oldweak 1068 || newweak 1069 || (newdef 1070 && h->root.type == bfd_link_hash_undefined)) 1071 *type_change_ok = TRUE; 1072 1073 /* It's OK to change the size if either the existing symbol or the 1074 new symbol is weak, or if the old symbol is undefined. */ 1075 1076 if (*type_change_ok 1077 || h->root.type == bfd_link_hash_undefined) 1078 *size_change_ok = TRUE; 1079 1080 /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old 1081 symbol, respectively, appears to be a common symbol in a dynamic 1082 object. If a symbol appears in an uninitialized section, and is 1083 not weak, and is not a function, then it may be a common symbol 1084 which was resolved when the dynamic object was created. We want 1085 to treat such symbols specially, because they raise special 1086 considerations when setting the symbol size: if the symbol 1087 appears as a common symbol in a regular object, and the size in 1088 the regular object is larger, we must make sure that we use the 1089 larger size. This problematic case can always be avoided in C, 1090 but it must be handled correctly when using Fortran shared 1091 libraries. 1092 1093 Note that if NEWDYNCOMMON is set, NEWDEF will be set, and 1094 likewise for OLDDYNCOMMON and OLDDEF. 1095 1096 Note that this test is just a heuristic, and that it is quite 1097 possible to have an uninitialized symbol in a shared object which 1098 is really a definition, rather than a common symbol. This could 1099 lead to some minor confusion when the symbol really is a common 1100 symbol in some regular object. However, I think it will be 1101 harmless. */ 1102 1103 if (newdyn 1104 && newdef 1105 && !newweak 1106 && (sec->flags & SEC_ALLOC) != 0 1107 && (sec->flags & SEC_LOAD) == 0 1108 && sym->st_size > 0 1109 && ELF_ST_TYPE (sym->st_info) != STT_FUNC) 1110 newdyncommon = TRUE; 1111 else 1112 newdyncommon = FALSE; 1113 1114 if (olddyn 1115 && olddef 1116 && h->root.type == bfd_link_hash_defined 1117 && h->def_dynamic 1118 && (h->root.u.def.section->flags & SEC_ALLOC) != 0 1119 && (h->root.u.def.section->flags & SEC_LOAD) == 0 1120 && h->size > 0 1121 && h->type != STT_FUNC) 1122 olddyncommon = TRUE; 1123 else 1124 olddyncommon = FALSE; 1125 1126 /* We now know everything about the old and new symbols. We ask the 1127 backend to check if we can merge them. */ 1128 bed = get_elf_backend_data (abfd); 1129 if (bed->merge_symbol 1130 && !bed->merge_symbol (info, sym_hash, h, sym, psec, pvalue, 1131 pold_alignment, skip, override, 1132 type_change_ok, size_change_ok, 1133 &newdyn, &newdef, &newdyncommon, &newweak, 1134 abfd, &sec, 1135 &olddyn, &olddef, &olddyncommon, &oldweak, 1136 oldbfd, &oldsec)) 1137 return FALSE; 1138 1139 /* If both the old and the new symbols look like common symbols in a 1140 dynamic object, set the size of the symbol to the larger of the 1141 two. */ 1142 1143 if (olddyncommon 1144 && newdyncommon 1145 && sym->st_size != h->size) 1146 { 1147 /* Since we think we have two common symbols, issue a multiple 1148 common warning if desired. Note that we only warn if the 1149 size is different. If the size is the same, we simply let 1150 the old symbol override the new one as normally happens with 1151 symbols defined in dynamic objects. */ 1152 1153 if (! ((*info->callbacks->multiple_common) 1154 (info, h->root.root.string, oldbfd, bfd_link_hash_common, 1155 h->size, abfd, bfd_link_hash_common, sym->st_size))) 1156 return FALSE; 1157 1158 if (sym->st_size > h->size) 1159 h->size = sym->st_size; 1160 1161 *size_change_ok = TRUE; 1162 } 1163 1164 /* If we are looking at a dynamic object, and we have found a 1165 definition, we need to see if the symbol was already defined by 1166 some other object. If so, we want to use the existing 1167 definition, and we do not want to report a multiple symbol 1168 definition error; we do this by clobbering *PSEC to be 1169 bfd_und_section_ptr. 1170 1171 We treat a common symbol as a definition if the symbol in the 1172 shared library is a function, since common symbols always 1173 represent variables; this can cause confusion in principle, but 1174 any such confusion would seem to indicate an erroneous program or 1175 shared library. We also permit a common symbol in a regular 1176 object to override a weak symbol in a shared object. */ 1177 1178 if (newdyn 1179 && newdef 1180 && (olddef 1181 || (h->root.type == bfd_link_hash_common 1182 && (newweak 1183 || ELF_ST_TYPE (sym->st_info) == STT_FUNC)))) 1184 { 1185 *override = TRUE; 1186 newdef = FALSE; 1187 newdyncommon = FALSE; 1188 1189 *psec = sec = bfd_und_section_ptr; 1190 *size_change_ok = TRUE; 1191 1192 /* If we get here when the old symbol is a common symbol, then 1193 we are explicitly letting it override a weak symbol or 1194 function in a dynamic object, and we don't want to warn about 1195 a type change. If the old symbol is a defined symbol, a type 1196 change warning may still be appropriate. */ 1197 1198 if (h->root.type == bfd_link_hash_common) 1199 *type_change_ok = TRUE; 1200 } 1201 1202 /* Handle the special case of an old common symbol merging with a 1203 new symbol which looks like a common symbol in a shared object. 1204 We change *PSEC and *PVALUE to make the new symbol look like a 1205 common symbol, and let _bfd_generic_link_add_one_symbol do the 1206 right thing. */ 1207 1208 if (newdyncommon 1209 && h->root.type == bfd_link_hash_common) 1210 { 1211 *override = TRUE; 1212 newdef = FALSE; 1213 newdyncommon = FALSE; 1214 *pvalue = sym->st_size; 1215 *psec = sec = bed->common_section (oldsec); 1216 *size_change_ok = TRUE; 1217 } 1218 1219 /* Skip weak definitions of symbols that are already defined. */ 1220 if (newdef && olddef && newweak) 1221 *skip = TRUE; 1222 1223 /* If the old symbol is from a dynamic object, and the new symbol is 1224 a definition which is not from a dynamic object, then the new 1225 symbol overrides the old symbol. Symbols from regular files 1226 always take precedence over symbols from dynamic objects, even if 1227 they are defined after the dynamic object in the link. 1228 1229 As above, we again permit a common symbol in a regular object to 1230 override a definition in a shared object if the shared object 1231 symbol is a function or is weak. */ 1232 1233 flip = NULL; 1234 if (!newdyn 1235 && (newdef 1236 || (bfd_is_com_section (sec) 1237 && (oldweak 1238 || h->type == STT_FUNC))) 1239 && olddyn 1240 && olddef 1241 && h->def_dynamic) 1242 { 1243 /* Change the hash table entry to undefined, and let 1244 _bfd_generic_link_add_one_symbol do the right thing with the 1245 new definition. */ 1246 1247 h->root.type = bfd_link_hash_undefined; 1248 h->root.u.undef.abfd = h->root.u.def.section->owner; 1249 *size_change_ok = TRUE; 1250 1251 olddef = FALSE; 1252 olddyncommon = FALSE; 1253 1254 /* We again permit a type change when a common symbol may be 1255 overriding a function. */ 1256 1257 if (bfd_is_com_section (sec)) 1258 *type_change_ok = TRUE; 1259 1260 if ((*sym_hash)->root.type == bfd_link_hash_indirect) 1261 flip = *sym_hash; 1262 else 1263 /* This union may have been set to be non-NULL when this symbol 1264 was seen in a dynamic object. We must force the union to be 1265 NULL, so that it is correct for a regular symbol. */ 1266 h->verinfo.vertree = NULL; 1267 } 1268 1269 /* Handle the special case of a new common symbol merging with an 1270 old symbol that looks like it might be a common symbol defined in 1271 a shared object. Note that we have already handled the case in 1272 which a new common symbol should simply override the definition 1273 in the shared library. */ 1274 1275 if (! newdyn 1276 && bfd_is_com_section (sec) 1277 && olddyncommon) 1278 { 1279 /* It would be best if we could set the hash table entry to a 1280 common symbol, but we don't know what to use for the section 1281 or the alignment. */ 1282 if (! ((*info->callbacks->multiple_common) 1283 (info, h->root.root.string, oldbfd, bfd_link_hash_common, 1284 h->size, abfd, bfd_link_hash_common, sym->st_size))) 1285 return FALSE; 1286 1287 /* If the presumed common symbol in the dynamic object is 1288 larger, pretend that the new symbol has its size. */ 1289 1290 if (h->size > *pvalue) 1291 *pvalue = h->size; 1292 1293 /* We need to remember the alignment required by the symbol 1294 in the dynamic object. */ 1295 BFD_ASSERT (pold_alignment); 1296 *pold_alignment = h->root.u.def.section->alignment_power; 1297 1298 olddef = FALSE; 1299 olddyncommon = FALSE; 1300 1301 h->root.type = bfd_link_hash_undefined; 1302 h->root.u.undef.abfd = h->root.u.def.section->owner; 1303 1304 *size_change_ok = TRUE; 1305 *type_change_ok = TRUE; 1306 1307 if ((*sym_hash)->root.type == bfd_link_hash_indirect) 1308 flip = *sym_hash; 1309 else 1310 h->verinfo.vertree = NULL; 1311 } 1312 1313 if (flip != NULL) 1314 { 1315 /* Handle the case where we had a versioned symbol in a dynamic 1316 library and now find a definition in a normal object. In this 1317 case, we make the versioned symbol point to the normal one. */ 1318 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 1319 flip->root.type = h->root.type; 1320 h->root.type = bfd_link_hash_indirect; 1321 h->root.u.i.link = (struct bfd_link_hash_entry *) flip; 1322 (*bed->elf_backend_copy_indirect_symbol) (info, flip, h); 1323 flip->root.u.undef.abfd = h->root.u.undef.abfd; 1324 if (h->def_dynamic) 1325 { 1326 h->def_dynamic = 0; 1327 flip->ref_dynamic = 1; 1328 } 1329 } 1330 1331 return TRUE; 1332 } 1333 1334 /* This function is called to create an indirect symbol from the 1335 default for the symbol with the default version if needed. The 1336 symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE. We 1337 set DYNSYM if the new indirect symbol is dynamic. */ 1338 1339 bfd_boolean 1340 _bfd_elf_add_default_symbol (bfd *abfd, 1341 struct bfd_link_info *info, 1342 struct elf_link_hash_entry *h, 1343 const char *name, 1344 Elf_Internal_Sym *sym, 1345 asection **psec, 1346 bfd_vma *value, 1347 bfd_boolean *dynsym, 1348 bfd_boolean override) 1349 { 1350 bfd_boolean type_change_ok; 1351 bfd_boolean size_change_ok; 1352 bfd_boolean skip; 1353 char *shortname; 1354 struct elf_link_hash_entry *hi; 1355 struct bfd_link_hash_entry *bh; 1356 const struct elf_backend_data *bed; 1357 bfd_boolean collect; 1358 bfd_boolean dynamic; 1359 char *p; 1360 size_t len, shortlen; 1361 asection *sec; 1362 1363 /* If this symbol has a version, and it is the default version, we 1364 create an indirect symbol from the default name to the fully 1365 decorated name. This will cause external references which do not 1366 specify a version to be bound to this version of the symbol. */ 1367 p = strchr (name, ELF_VER_CHR); 1368 if (p == NULL || p[1] != ELF_VER_CHR) 1369 return TRUE; 1370 1371 if (override) 1372 { 1373 /* We are overridden by an old definition. We need to check if we 1374 need to create the indirect symbol from the default name. */ 1375 hi = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, 1376 FALSE, FALSE); 1377 BFD_ASSERT (hi != NULL); 1378 if (hi == h) 1379 return TRUE; 1380 while (hi->root.type == bfd_link_hash_indirect 1381 || hi->root.type == bfd_link_hash_warning) 1382 { 1383 hi = (struct elf_link_hash_entry *) hi->root.u.i.link; 1384 if (hi == h) 1385 return TRUE; 1386 } 1387 } 1388 1389 bed = get_elf_backend_data (abfd); 1390 collect = bed->collect; 1391 dynamic = (abfd->flags & DYNAMIC) != 0; 1392 1393 shortlen = p - name; 1394 shortname = bfd_hash_allocate (&info->hash->table, shortlen + 1); 1395 if (shortname == NULL) 1396 return FALSE; 1397 memcpy (shortname, name, shortlen); 1398 shortname[shortlen] = '\0'; 1399 1400 /* We are going to create a new symbol. Merge it with any existing 1401 symbol with this name. For the purposes of the merge, act as 1402 though we were defining the symbol we just defined, although we 1403 actually going to define an indirect symbol. */ 1404 type_change_ok = FALSE; 1405 size_change_ok = FALSE; 1406 sec = *psec; 1407 if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value, 1408 NULL, &hi, &skip, &override, 1409 &type_change_ok, &size_change_ok)) 1410 return FALSE; 1411 1412 if (skip) 1413 goto nondefault; 1414 1415 if (! override) 1416 { 1417 bh = &hi->root; 1418 if (! (_bfd_generic_link_add_one_symbol 1419 (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr, 1420 0, name, FALSE, collect, &bh))) 1421 return FALSE; 1422 hi = (struct elf_link_hash_entry *) bh; 1423 } 1424 else 1425 { 1426 /* In this case the symbol named SHORTNAME is overriding the 1427 indirect symbol we want to add. We were planning on making 1428 SHORTNAME an indirect symbol referring to NAME. SHORTNAME 1429 is the name without a version. NAME is the fully versioned 1430 name, and it is the default version. 1431 1432 Overriding means that we already saw a definition for the 1433 symbol SHORTNAME in a regular object, and it is overriding 1434 the symbol defined in the dynamic object. 1435 1436 When this happens, we actually want to change NAME, the 1437 symbol we just added, to refer to SHORTNAME. This will cause 1438 references to NAME in the shared object to become references 1439 to SHORTNAME in the regular object. This is what we expect 1440 when we override a function in a shared object: that the 1441 references in the shared object will be mapped to the 1442 definition in the regular object. */ 1443 1444 while (hi->root.type == bfd_link_hash_indirect 1445 || hi->root.type == bfd_link_hash_warning) 1446 hi = (struct elf_link_hash_entry *) hi->root.u.i.link; 1447 1448 h->root.type = bfd_link_hash_indirect; 1449 h->root.u.i.link = (struct bfd_link_hash_entry *) hi; 1450 if (h->def_dynamic) 1451 { 1452 h->def_dynamic = 0; 1453 hi->ref_dynamic = 1; 1454 if (hi->ref_regular 1455 || hi->def_regular) 1456 { 1457 if (! bfd_elf_link_record_dynamic_symbol (info, hi)) 1458 return FALSE; 1459 } 1460 } 1461 1462 /* Now set HI to H, so that the following code will set the 1463 other fields correctly. */ 1464 hi = h; 1465 } 1466 1467 /* If there is a duplicate definition somewhere, then HI may not 1468 point to an indirect symbol. We will have reported an error to 1469 the user in that case. */ 1470 1471 if (hi->root.type == bfd_link_hash_indirect) 1472 { 1473 struct elf_link_hash_entry *ht; 1474 1475 ht = (struct elf_link_hash_entry *) hi->root.u.i.link; 1476 (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi); 1477 1478 /* See if the new flags lead us to realize that the symbol must 1479 be dynamic. */ 1480 if (! *dynsym) 1481 { 1482 if (! dynamic) 1483 { 1484 if (info->shared 1485 || hi->ref_dynamic) 1486 *dynsym = TRUE; 1487 } 1488 else 1489 { 1490 if (hi->ref_regular) 1491 *dynsym = TRUE; 1492 } 1493 } 1494 } 1495 1496 /* We also need to define an indirection from the nondefault version 1497 of the symbol. */ 1498 1499 nondefault: 1500 len = strlen (name); 1501 shortname = bfd_hash_allocate (&info->hash->table, len); 1502 if (shortname == NULL) 1503 return FALSE; 1504 memcpy (shortname, name, shortlen); 1505 memcpy (shortname + shortlen, p + 1, len - shortlen); 1506 1507 /* Once again, merge with any existing symbol. */ 1508 type_change_ok = FALSE; 1509 size_change_ok = FALSE; 1510 sec = *psec; 1511 if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value, 1512 NULL, &hi, &skip, &override, 1513 &type_change_ok, &size_change_ok)) 1514 return FALSE; 1515 1516 if (skip) 1517 return TRUE; 1518 1519 if (override) 1520 { 1521 /* Here SHORTNAME is a versioned name, so we don't expect to see 1522 the type of override we do in the case above unless it is 1523 overridden by a versioned definition. */ 1524 if (hi->root.type != bfd_link_hash_defined 1525 && hi->root.type != bfd_link_hash_defweak) 1526 (*_bfd_error_handler) 1527 (_("%B: unexpected redefinition of indirect versioned symbol `%s'"), 1528 abfd, shortname); 1529 } 1530 else 1531 { 1532 bh = &hi->root; 1533 if (! (_bfd_generic_link_add_one_symbol 1534 (info, abfd, shortname, BSF_INDIRECT, 1535 bfd_ind_section_ptr, 0, name, FALSE, collect, &bh))) 1536 return FALSE; 1537 hi = (struct elf_link_hash_entry *) bh; 1538 1539 /* If there is a duplicate definition somewhere, then HI may not 1540 point to an indirect symbol. We will have reported an error 1541 to the user in that case. */ 1542 1543 if (hi->root.type == bfd_link_hash_indirect) 1544 { 1545 (*bed->elf_backend_copy_indirect_symbol) (info, h, hi); 1546 1547 /* See if the new flags lead us to realize that the symbol 1548 must be dynamic. */ 1549 if (! *dynsym) 1550 { 1551 if (! dynamic) 1552 { 1553 if (info->shared 1554 || hi->ref_dynamic) 1555 *dynsym = TRUE; 1556 } 1557 else 1558 { 1559 if (hi->ref_regular) 1560 *dynsym = TRUE; 1561 } 1562 } 1563 } 1564 } 1565 1566 return TRUE; 1567 } 1568 1569 /* This routine is used to export all defined symbols into the dynamic 1570 symbol table. It is called via elf_link_hash_traverse. */ 1571 1572 bfd_boolean 1573 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data) 1574 { 1575 struct elf_info_failed *eif = data; 1576 1577 /* Ignore indirect symbols. These are added by the versioning code. */ 1578 if (h->root.type == bfd_link_hash_indirect) 1579 return TRUE; 1580 1581 if (h->root.type == bfd_link_hash_warning) 1582 h = (struct elf_link_hash_entry *) h->root.u.i.link; 1583 1584 if (h->dynindx == -1 1585 && (h->def_regular 1586 || h->ref_regular)) 1587 { 1588 struct bfd_elf_version_tree *t; 1589 struct bfd_elf_version_expr *d; 1590 1591 for (t = eif->verdefs; t != NULL; t = t->next) 1592 { 1593 if (t->globals.list != NULL) 1594 { 1595 d = (*t->match) (&t->globals, NULL, h->root.root.string); 1596 if (d != NULL) 1597 goto doit; 1598 } 1599 1600 if (t->locals.list != NULL) 1601 { 1602 d = (*t->match) (&t->locals, NULL, h->root.root.string); 1603 if (d != NULL) 1604 return TRUE; 1605 } 1606 } 1607 1608 if (!eif->verdefs) 1609 { 1610 doit: 1611 if (! bfd_elf_link_record_dynamic_symbol (eif->info, h)) 1612 { 1613 eif->failed = TRUE; 1614 return FALSE; 1615 } 1616 } 1617 } 1618 1619 return TRUE; 1620 } 1621 1622 /* Look through the symbols which are defined in other shared 1623 libraries and referenced here. Update the list of version 1624 dependencies. This will be put into the .gnu.version_r section. 1625 This function is called via elf_link_hash_traverse. */ 1626 1627 bfd_boolean 1628 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, 1629 void *data) 1630 { 1631 struct elf_find_verdep_info *rinfo = data; 1632 Elf_Internal_Verneed *t; 1633 Elf_Internal_Vernaux *a; 1634 bfd_size_type amt; 1635 1636 if (h->root.type == bfd_link_hash_warning) 1637 h = (struct elf_link_hash_entry *) h->root.u.i.link; 1638 1639 /* We only care about symbols defined in shared objects with version 1640 information. */ 1641 if (!h->def_dynamic 1642 || h->def_regular 1643 || h->dynindx == -1 1644 || h->verinfo.verdef == NULL) 1645 return TRUE; 1646 1647 /* See if we already know about this version. */ 1648 for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref) 1649 { 1650 if (t->vn_bfd != h->verinfo.verdef->vd_bfd) 1651 continue; 1652 1653 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 1654 if (a->vna_nodename == h->verinfo.verdef->vd_nodename) 1655 return TRUE; 1656 1657 break; 1658 } 1659 1660 /* This is a new version. Add it to tree we are building. */ 1661 1662 if (t == NULL) 1663 { 1664 amt = sizeof *t; 1665 t = bfd_zalloc (rinfo->output_bfd, amt); 1666 if (t == NULL) 1667 { 1668 rinfo->failed = TRUE; 1669 return FALSE; 1670 } 1671 1672 t->vn_bfd = h->verinfo.verdef->vd_bfd; 1673 t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref; 1674 elf_tdata (rinfo->output_bfd)->verref = t; 1675 } 1676 1677 amt = sizeof *a; 1678 a = bfd_zalloc (rinfo->output_bfd, amt); 1679 1680 /* Note that we are copying a string pointer here, and testing it 1681 above. If bfd_elf_string_from_elf_section is ever changed to 1682 discard the string data when low in memory, this will have to be 1683 fixed. */ 1684 a->vna_nodename = h->verinfo.verdef->vd_nodename; 1685 1686 a->vna_flags = h->verinfo.verdef->vd_flags; 1687 a->vna_nextptr = t->vn_auxptr; 1688 1689 h->verinfo.verdef->vd_exp_refno = rinfo->vers; 1690 ++rinfo->vers; 1691 1692 a->vna_other = h->verinfo.verdef->vd_exp_refno + 1; 1693 1694 t->vn_auxptr = a; 1695 1696 return TRUE; 1697 } 1698 1699 /* Figure out appropriate versions for all the symbols. We may not 1700 have the version number script until we have read all of the input 1701 files, so until that point we don't know which symbols should be 1702 local. This function is called via elf_link_hash_traverse. */ 1703 1704 bfd_boolean 1705 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) 1706 { 1707 struct elf_assign_sym_version_info *sinfo; 1708 struct bfd_link_info *info; 1709 const struct elf_backend_data *bed; 1710 struct elf_info_failed eif; 1711 char *p; 1712 bfd_size_type amt; 1713 1714 sinfo = data; 1715 info = sinfo->info; 1716 1717 if (h->root.type == bfd_link_hash_warning) 1718 h = (struct elf_link_hash_entry *) h->root.u.i.link; 1719 1720 /* Fix the symbol flags. */ 1721 eif.failed = FALSE; 1722 eif.info = info; 1723 if (! _bfd_elf_fix_symbol_flags (h, &eif)) 1724 { 1725 if (eif.failed) 1726 sinfo->failed = TRUE; 1727 return FALSE; 1728 } 1729 1730 /* We only need version numbers for symbols defined in regular 1731 objects. */ 1732 if (!h->def_regular) 1733 return TRUE; 1734 1735 bed = get_elf_backend_data (sinfo->output_bfd); 1736 p = strchr (h->root.root.string, ELF_VER_CHR); 1737 if (p != NULL && h->verinfo.vertree == NULL) 1738 { 1739 struct bfd_elf_version_tree *t; 1740 bfd_boolean hidden; 1741 1742 hidden = TRUE; 1743 1744 /* There are two consecutive ELF_VER_CHR characters if this is 1745 not a hidden symbol. */ 1746 ++p; 1747 if (*p == ELF_VER_CHR) 1748 { 1749 hidden = FALSE; 1750 ++p; 1751 } 1752 1753 /* If there is no version string, we can just return out. */ 1754 if (*p == '\0') 1755 { 1756 if (hidden) 1757 h->hidden = 1; 1758 return TRUE; 1759 } 1760 1761 /* Look for the version. If we find it, it is no longer weak. */ 1762 for (t = sinfo->verdefs; t != NULL; t = t->next) 1763 { 1764 if (strcmp (t->name, p) == 0) 1765 { 1766 size_t len; 1767 char *alc; 1768 struct bfd_elf_version_expr *d; 1769 1770 len = p - h->root.root.string; 1771 alc = bfd_malloc (len); 1772 if (alc == NULL) 1773 return FALSE; 1774 memcpy (alc, h->root.root.string, len - 1); 1775 alc[len - 1] = '\0'; 1776 if (alc[len - 2] == ELF_VER_CHR) 1777 alc[len - 2] = '\0'; 1778 1779 h->verinfo.vertree = t; 1780 t->used = TRUE; 1781 d = NULL; 1782 1783 if (t->globals.list != NULL) 1784 d = (*t->match) (&t->globals, NULL, alc); 1785 1786 /* See if there is anything to force this symbol to 1787 local scope. */ 1788 if (d == NULL && t->locals.list != NULL) 1789 { 1790 d = (*t->match) (&t->locals, NULL, alc); 1791 if (d != NULL 1792 && h->dynindx != -1 1793 && ! info->export_dynamic) 1794 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 1795 } 1796 1797 free (alc); 1798 break; 1799 } 1800 } 1801 1802 /* If we are building an application, we need to create a 1803 version node for this version. */ 1804 if (t == NULL && info->executable) 1805 { 1806 struct bfd_elf_version_tree **pp; 1807 int version_index; 1808 1809 /* If we aren't going to export this symbol, we don't need 1810 to worry about it. */ 1811 if (h->dynindx == -1) 1812 return TRUE; 1813 1814 amt = sizeof *t; 1815 t = bfd_zalloc (sinfo->output_bfd, amt); 1816 if (t == NULL) 1817 { 1818 sinfo->failed = TRUE; 1819 return FALSE; 1820 } 1821 1822 t->name = p; 1823 t->name_indx = (unsigned int) -1; 1824 t->used = TRUE; 1825 1826 version_index = 1; 1827 /* Don't count anonymous version tag. */ 1828 if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0) 1829 version_index = 0; 1830 for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next) 1831 ++version_index; 1832 t->vernum = version_index; 1833 1834 *pp = t; 1835 1836 h->verinfo.vertree = t; 1837 } 1838 else if (t == NULL) 1839 { 1840 /* We could not find the version for a symbol when 1841 generating a shared archive. Return an error. */ 1842 (*_bfd_error_handler) 1843 (_("%B: undefined versioned symbol name %s"), 1844 sinfo->output_bfd, h->root.root.string); 1845 bfd_set_error (bfd_error_bad_value); 1846 sinfo->failed = TRUE; 1847 return FALSE; 1848 } 1849 1850 if (hidden) 1851 h->hidden = 1; 1852 } 1853 1854 /* If we don't have a version for this symbol, see if we can find 1855 something. */ 1856 if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL) 1857 { 1858 struct bfd_elf_version_tree *t; 1859 struct bfd_elf_version_tree *local_ver; 1860 struct bfd_elf_version_expr *d; 1861 1862 /* See if can find what version this symbol is in. If the 1863 symbol is supposed to be local, then don't actually register 1864 it. */ 1865 local_ver = NULL; 1866 for (t = sinfo->verdefs; t != NULL; t = t->next) 1867 { 1868 if (t->globals.list != NULL) 1869 { 1870 bfd_boolean matched; 1871 1872 matched = FALSE; 1873 d = NULL; 1874 while ((d = (*t->match) (&t->globals, d, 1875 h->root.root.string)) != NULL) 1876 if (d->symver) 1877 matched = TRUE; 1878 else 1879 { 1880 /* There is a version without definition. Make 1881 the symbol the default definition for this 1882 version. */ 1883 h->verinfo.vertree = t; 1884 local_ver = NULL; 1885 d->script = 1; 1886 break; 1887 } 1888 if (d != NULL) 1889 break; 1890 else if (matched) 1891 /* There is no undefined version for this symbol. Hide the 1892 default one. */ 1893 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 1894 } 1895 1896 if (t->locals.list != NULL) 1897 { 1898 d = NULL; 1899 while ((d = (*t->match) (&t->locals, d, 1900 h->root.root.string)) != NULL) 1901 { 1902 local_ver = t; 1903 /* If the match is "*", keep looking for a more 1904 explicit, perhaps even global, match. 1905 XXX: Shouldn't this be !d->wildcard instead? */ 1906 if (d->pattern[0] != '*' || d->pattern[1] != '\0') 1907 break; 1908 } 1909 1910 if (d != NULL) 1911 break; 1912 } 1913 } 1914 1915 if (local_ver != NULL) 1916 { 1917 h->verinfo.vertree = local_ver; 1918 if (h->dynindx != -1 1919 && ! info->export_dynamic) 1920 { 1921 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 1922 } 1923 } 1924 } 1925 1926 return TRUE; 1927 } 1928 1929 /* Read and swap the relocs from the section indicated by SHDR. This 1930 may be either a REL or a RELA section. The relocations are 1931 translated into RELA relocations and stored in INTERNAL_RELOCS, 1932 which should have already been allocated to contain enough space. 1933 The EXTERNAL_RELOCS are a buffer where the external form of the 1934 relocations should be stored. 1935 1936 Returns FALSE if something goes wrong. */ 1937 1938 static bfd_boolean 1939 elf_link_read_relocs_from_section (bfd *abfd, 1940 asection *sec, 1941 Elf_Internal_Shdr *shdr, 1942 void *external_relocs, 1943 Elf_Internal_Rela *internal_relocs) 1944 { 1945 const struct elf_backend_data *bed; 1946 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); 1947 const bfd_byte *erela; 1948 const bfd_byte *erelaend; 1949 Elf_Internal_Rela *irela; 1950 Elf_Internal_Shdr *symtab_hdr; 1951 size_t nsyms; 1952 1953 /* Position ourselves at the start of the section. */ 1954 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0) 1955 return FALSE; 1956 1957 /* Read the relocations. */ 1958 if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size) 1959 return FALSE; 1960 1961 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 1962 nsyms = symtab_hdr->sh_size / symtab_hdr->sh_entsize; 1963 1964 bed = get_elf_backend_data (abfd); 1965 1966 /* Convert the external relocations to the internal format. */ 1967 if (shdr->sh_entsize == bed->s->sizeof_rel) 1968 swap_in = bed->s->swap_reloc_in; 1969 else if (shdr->sh_entsize == bed->s->sizeof_rela) 1970 swap_in = bed->s->swap_reloca_in; 1971 else 1972 { 1973 bfd_set_error (bfd_error_wrong_format); 1974 return FALSE; 1975 } 1976 1977 erela = external_relocs; 1978 erelaend = erela + shdr->sh_size; 1979 irela = internal_relocs; 1980 while (erela < erelaend) 1981 { 1982 bfd_vma r_symndx; 1983 1984 (*swap_in) (abfd, erela, irela); 1985 r_symndx = ELF32_R_SYM (irela->r_info); 1986 if (bed->s->arch_size == 64) 1987 r_symndx >>= 24; 1988 if ((size_t) r_symndx >= nsyms) 1989 { 1990 (*_bfd_error_handler) 1991 (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)" 1992 " for offset 0x%lx in section `%A'"), 1993 abfd, sec, 1994 (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); 1995 bfd_set_error (bfd_error_bad_value); 1996 return FALSE; 1997 } 1998 irela += bed->s->int_rels_per_ext_rel; 1999 erela += shdr->sh_entsize; 2000 } 2001 2002 return TRUE; 2003 } 2004 2005 /* Read and swap the relocs for a section O. They may have been 2006 cached. If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are 2007 not NULL, they are used as buffers to read into. They are known to 2008 be large enough. If the INTERNAL_RELOCS relocs argument is NULL, 2009 the return value is allocated using either malloc or bfd_alloc, 2010 according to the KEEP_MEMORY argument. If O has two relocation 2011 sections (both REL and RELA relocations), then the REL_HDR 2012 relocations will appear first in INTERNAL_RELOCS, followed by the 2013 REL_HDR2 relocations. */ 2014 2015 Elf_Internal_Rela * 2016 _bfd_elf_link_read_relocs (bfd *abfd, 2017 asection *o, 2018 void *external_relocs, 2019 Elf_Internal_Rela *internal_relocs, 2020 bfd_boolean keep_memory) 2021 { 2022 Elf_Internal_Shdr *rel_hdr; 2023 void *alloc1 = NULL; 2024 Elf_Internal_Rela *alloc2 = NULL; 2025 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 2026 2027 if (elf_section_data (o)->relocs != NULL) 2028 return elf_section_data (o)->relocs; 2029 2030 if (o->reloc_count == 0) 2031 return NULL; 2032 2033 rel_hdr = &elf_section_data (o)->rel_hdr; 2034 2035 if (internal_relocs == NULL) 2036 { 2037 bfd_size_type size; 2038 2039 size = o->reloc_count; 2040 size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela); 2041 if (keep_memory) 2042 internal_relocs = bfd_alloc (abfd, size); 2043 else 2044 internal_relocs = alloc2 = bfd_malloc (size); 2045 if (internal_relocs == NULL) 2046 goto error_return; 2047 } 2048 2049 if (external_relocs == NULL) 2050 { 2051 bfd_size_type size = rel_hdr->sh_size; 2052 2053 if (elf_section_data (o)->rel_hdr2) 2054 size += elf_section_data (o)->rel_hdr2->sh_size; 2055 alloc1 = bfd_malloc (size); 2056 if (alloc1 == NULL) 2057 goto error_return; 2058 external_relocs = alloc1; 2059 } 2060 2061 if (!elf_link_read_relocs_from_section (abfd, o, rel_hdr, 2062 external_relocs, 2063 internal_relocs)) 2064 goto error_return; 2065 if (elf_section_data (o)->rel_hdr2 2066 && (!elf_link_read_relocs_from_section 2067 (abfd, o, 2068 elf_section_data (o)->rel_hdr2, 2069 ((bfd_byte *) external_relocs) + rel_hdr->sh_size, 2070 internal_relocs + (NUM_SHDR_ENTRIES (rel_hdr) 2071 * bed->s->int_rels_per_ext_rel)))) 2072 goto error_return; 2073 2074 /* Cache the results for next time, if we can. */ 2075 if (keep_memory) 2076 elf_section_data (o)->relocs = internal_relocs; 2077 2078 if (alloc1 != NULL) 2079 free (alloc1); 2080 2081 /* Don't free alloc2, since if it was allocated we are passing it 2082 back (under the name of internal_relocs). */ 2083 2084 return internal_relocs; 2085 2086 error_return: 2087 if (alloc1 != NULL) 2088 free (alloc1); 2089 if (alloc2 != NULL) 2090 free (alloc2); 2091 return NULL; 2092 } 2093 2094 /* Compute the size of, and allocate space for, REL_HDR which is the 2095 section header for a section containing relocations for O. */ 2096 2097 bfd_boolean 2098 _bfd_elf_link_size_reloc_section (bfd *abfd, 2099 Elf_Internal_Shdr *rel_hdr, 2100 asection *o) 2101 { 2102 bfd_size_type reloc_count; 2103 bfd_size_type num_rel_hashes; 2104 2105 /* Figure out how many relocations there will be. */ 2106 if (rel_hdr == &elf_section_data (o)->rel_hdr) 2107 reloc_count = elf_section_data (o)->rel_count; 2108 else 2109 reloc_count = elf_section_data (o)->rel_count2; 2110 2111 num_rel_hashes = o->reloc_count; 2112 if (num_rel_hashes < reloc_count) 2113 num_rel_hashes = reloc_count; 2114 2115 /* That allows us to calculate the size of the section. */ 2116 rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count; 2117 2118 /* The contents field must last into write_object_contents, so we 2119 allocate it with bfd_alloc rather than malloc. Also since we 2120 cannot be sure that the contents will actually be filled in, 2121 we zero the allocated space. */ 2122 rel_hdr->contents = bfd_zalloc (abfd, rel_hdr->sh_size); 2123 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0) 2124 return FALSE; 2125 2126 /* We only allocate one set of hash entries, so we only do it the 2127 first time we are called. */ 2128 if (elf_section_data (o)->rel_hashes == NULL 2129 && num_rel_hashes) 2130 { 2131 struct elf_link_hash_entry **p; 2132 2133 p = bfd_zmalloc (num_rel_hashes * sizeof (struct elf_link_hash_entry *)); 2134 if (p == NULL) 2135 return FALSE; 2136 2137 elf_section_data (o)->rel_hashes = p; 2138 } 2139 2140 return TRUE; 2141 } 2142 2143 /* Copy the relocations indicated by the INTERNAL_RELOCS (which 2144 originated from the section given by INPUT_REL_HDR) to the 2145 OUTPUT_BFD. */ 2146 2147 bfd_boolean 2148 _bfd_elf_link_output_relocs (bfd *output_bfd, 2149 asection *input_section, 2150 Elf_Internal_Shdr *input_rel_hdr, 2151 Elf_Internal_Rela *internal_relocs, 2152 struct elf_link_hash_entry **rel_hash 2153 ATTRIBUTE_UNUSED) 2154 { 2155 Elf_Internal_Rela *irela; 2156 Elf_Internal_Rela *irelaend; 2157 bfd_byte *erel; 2158 Elf_Internal_Shdr *output_rel_hdr; 2159 asection *output_section; 2160 unsigned int *rel_countp = NULL; 2161 const struct elf_backend_data *bed; 2162 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 2163 2164 output_section = input_section->output_section; 2165 output_rel_hdr = NULL; 2166 2167 if (elf_section_data (output_section)->rel_hdr.sh_entsize 2168 == input_rel_hdr->sh_entsize) 2169 { 2170 output_rel_hdr = &elf_section_data (output_section)->rel_hdr; 2171 rel_countp = &elf_section_data (output_section)->rel_count; 2172 } 2173 else if (elf_section_data (output_section)->rel_hdr2 2174 && (elf_section_data (output_section)->rel_hdr2->sh_entsize 2175 == input_rel_hdr->sh_entsize)) 2176 { 2177 output_rel_hdr = elf_section_data (output_section)->rel_hdr2; 2178 rel_countp = &elf_section_data (output_section)->rel_count2; 2179 } 2180 else 2181 { 2182 (*_bfd_error_handler) 2183 (_("%B: relocation size mismatch in %B section %A"), 2184 output_bfd, input_section->owner, input_section); 2185 bfd_set_error (bfd_error_wrong_object_format); 2186 return FALSE; 2187 } 2188 2189 bed = get_elf_backend_data (output_bfd); 2190 if (input_rel_hdr->sh_entsize == bed->s->sizeof_rel) 2191 swap_out = bed->s->swap_reloc_out; 2192 else if (input_rel_hdr->sh_entsize == bed->s->sizeof_rela) 2193 swap_out = bed->s->swap_reloca_out; 2194 else 2195 abort (); 2196 2197 erel = output_rel_hdr->contents; 2198 erel += *rel_countp * input_rel_hdr->sh_entsize; 2199 irela = internal_relocs; 2200 irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr) 2201 * bed->s->int_rels_per_ext_rel); 2202 while (irela < irelaend) 2203 { 2204 (*swap_out) (output_bfd, irela, erel); 2205 irela += bed->s->int_rels_per_ext_rel; 2206 erel += input_rel_hdr->sh_entsize; 2207 } 2208 2209 /* Bump the counter, so that we know where to add the next set of 2210 relocations. */ 2211 *rel_countp += NUM_SHDR_ENTRIES (input_rel_hdr); 2212 2213 return TRUE; 2214 } 2215 2216 /* Make weak undefined symbols in PIE dynamic. */ 2217 2218 bfd_boolean 2219 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info, 2220 struct elf_link_hash_entry *h) 2221 { 2222 if (info->pie 2223 && h->dynindx == -1 2224 && h->root.type == bfd_link_hash_undefweak) 2225 return bfd_elf_link_record_dynamic_symbol (info, h); 2226 2227 return TRUE; 2228 } 2229 2230 /* Fix up the flags for a symbol. This handles various cases which 2231 can only be fixed after all the input files are seen. This is 2232 currently called by both adjust_dynamic_symbol and 2233 assign_sym_version, which is unnecessary but perhaps more robust in 2234 the face of future changes. */ 2235 2236 bfd_boolean 2237 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h, 2238 struct elf_info_failed *eif) 2239 { 2240 const struct elf_backend_data *bed = NULL; 2241 2242 /* If this symbol was mentioned in a non-ELF file, try to set 2243 DEF_REGULAR and REF_REGULAR correctly. This is the only way to 2244 permit a non-ELF file to correctly refer to a symbol defined in 2245 an ELF dynamic object. */ 2246 if (h->non_elf) 2247 { 2248 while (h->root.type == bfd_link_hash_indirect) 2249 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2250 2251 if (h->root.type != bfd_link_hash_defined 2252 && h->root.type != bfd_link_hash_defweak) 2253 { 2254 h->ref_regular = 1; 2255 h->ref_regular_nonweak = 1; 2256 } 2257 else 2258 { 2259 if (h->root.u.def.section->owner != NULL 2260 && (bfd_get_flavour (h->root.u.def.section->owner) 2261 == bfd_target_elf_flavour)) 2262 { 2263 h->ref_regular = 1; 2264 h->ref_regular_nonweak = 1; 2265 } 2266 else 2267 h->def_regular = 1; 2268 } 2269 2270 if (h->dynindx == -1 2271 && (h->def_dynamic 2272 || h->ref_dynamic)) 2273 { 2274 if (! bfd_elf_link_record_dynamic_symbol (eif->info, h)) 2275 { 2276 eif->failed = TRUE; 2277 return FALSE; 2278 } 2279 } 2280 } 2281 else 2282 { 2283 /* Unfortunately, NON_ELF is only correct if the symbol 2284 was first seen in a non-ELF file. Fortunately, if the symbol 2285 was first seen in an ELF file, we're probably OK unless the 2286 symbol was defined in a non-ELF file. Catch that case here. 2287 FIXME: We're still in trouble if the symbol was first seen in 2288 a dynamic object, and then later in a non-ELF regular object. */ 2289 if ((h->root.type == bfd_link_hash_defined 2290 || h->root.type == bfd_link_hash_defweak) 2291 && !h->def_regular 2292 && (h->root.u.def.section->owner != NULL 2293 ? (bfd_get_flavour (h->root.u.def.section->owner) 2294 != bfd_target_elf_flavour) 2295 : (bfd_is_abs_section (h->root.u.def.section) 2296 && !h->def_dynamic))) 2297 h->def_regular = 1; 2298 } 2299 2300 /* Backend specific symbol fixup. */ 2301 if (elf_hash_table (eif->info)->dynobj) 2302 { 2303 bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj); 2304 if (bed->elf_backend_fixup_symbol 2305 && !(*bed->elf_backend_fixup_symbol) (eif->info, h)) 2306 return FALSE; 2307 } 2308 2309 /* If this is a final link, and the symbol was defined as a common 2310 symbol in a regular object file, and there was no definition in 2311 any dynamic object, then the linker will have allocated space for 2312 the symbol in a common section but the DEF_REGULAR 2313 flag will not have been set. */ 2314 if (h->root.type == bfd_link_hash_defined 2315 && !h->def_regular 2316 && h->ref_regular 2317 && !h->def_dynamic 2318 && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) 2319 h->def_regular = 1; 2320 2321 /* If -Bsymbolic was used (which means to bind references to global 2322 symbols to the definition within the shared object), and this 2323 symbol was defined in a regular object, then it actually doesn't 2324 need a PLT entry. Likewise, if the symbol has non-default 2325 visibility. If the symbol has hidden or internal visibility, we 2326 will force it local. */ 2327 if (h->needs_plt 2328 && eif->info->shared 2329 && is_elf_hash_table (eif->info->hash) 2330 && (eif->info->symbolic 2331 || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) 2332 && h->def_regular) 2333 { 2334 bfd_boolean force_local; 2335 2336 force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL 2337 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN); 2338 (*bed->elf_backend_hide_symbol) (eif->info, h, force_local); 2339 } 2340 2341 /* If a weak undefined symbol has non-default visibility, we also 2342 hide it from the dynamic linker. */ 2343 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 2344 && h->root.type == bfd_link_hash_undefweak) 2345 { 2346 const struct elf_backend_data *bed; 2347 bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj); 2348 (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE); 2349 } 2350 2351 /* If this is a weak defined symbol in a dynamic object, and we know 2352 the real definition in the dynamic object, copy interesting flags 2353 over to the real definition. */ 2354 if (h->u.weakdef != NULL) 2355 { 2356 struct elf_link_hash_entry *weakdef; 2357 2358 weakdef = h->u.weakdef; 2359 if (h->root.type == bfd_link_hash_indirect) 2360 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2361 2362 BFD_ASSERT (h->root.type == bfd_link_hash_defined 2363 || h->root.type == bfd_link_hash_defweak); 2364 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined 2365 || weakdef->root.type == bfd_link_hash_defweak); 2366 BFD_ASSERT (weakdef->def_dynamic); 2367 2368 /* If the real definition is defined by a regular object file, 2369 don't do anything special. See the longer description in 2370 _bfd_elf_adjust_dynamic_symbol, below. */ 2371 if (weakdef->def_regular) 2372 h->u.weakdef = NULL; 2373 else 2374 (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, 2375 h); 2376 } 2377 2378 return TRUE; 2379 } 2380 2381 /* Make the backend pick a good value for a dynamic symbol. This is 2382 called via elf_link_hash_traverse, and also calls itself 2383 recursively. */ 2384 2385 bfd_boolean 2386 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data) 2387 { 2388 struct elf_info_failed *eif = data; 2389 bfd *dynobj; 2390 const struct elf_backend_data *bed; 2391 2392 if (! is_elf_hash_table (eif->info->hash)) 2393 return FALSE; 2394 2395 if (h->root.type == bfd_link_hash_warning) 2396 { 2397 h->got = elf_hash_table (eif->info)->init_got_offset; 2398 h->plt = elf_hash_table (eif->info)->init_plt_offset; 2399 2400 /* When warning symbols are created, they **replace** the "real" 2401 entry in the hash table, thus we never get to see the real 2402 symbol in a hash traversal. So look at it now. */ 2403 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2404 } 2405 2406 /* Ignore indirect symbols. These are added by the versioning code. */ 2407 if (h->root.type == bfd_link_hash_indirect) 2408 return TRUE; 2409 2410 /* Fix the symbol flags. */ 2411 if (! _bfd_elf_fix_symbol_flags (h, eif)) 2412 return FALSE; 2413 2414 /* If this symbol does not require a PLT entry, and it is not 2415 defined by a dynamic object, or is not referenced by a regular 2416 object, ignore it. We do have to handle a weak defined symbol, 2417 even if no regular object refers to it, if we decided to add it 2418 to the dynamic symbol table. FIXME: Do we normally need to worry 2419 about symbols which are defined by one dynamic object and 2420 referenced by another one? */ 2421 if (!h->needs_plt 2422 && (h->def_regular 2423 || !h->def_dynamic 2424 || (!h->ref_regular 2425 && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1)))) 2426 { 2427 h->plt = elf_hash_table (eif->info)->init_plt_offset; 2428 return TRUE; 2429 } 2430 2431 /* If we've already adjusted this symbol, don't do it again. This 2432 can happen via a recursive call. */ 2433 if (h->dynamic_adjusted) 2434 return TRUE; 2435 2436 /* Don't look at this symbol again. Note that we must set this 2437 after checking the above conditions, because we may look at a 2438 symbol once, decide not to do anything, and then get called 2439 recursively later after REF_REGULAR is set below. */ 2440 h->dynamic_adjusted = 1; 2441 2442 /* If this is a weak definition, and we know a real definition, and 2443 the real symbol is not itself defined by a regular object file, 2444 then get a good value for the real definition. We handle the 2445 real symbol first, for the convenience of the backend routine. 2446 2447 Note that there is a confusing case here. If the real definition 2448 is defined by a regular object file, we don't get the real symbol 2449 from the dynamic object, but we do get the weak symbol. If the 2450 processor backend uses a COPY reloc, then if some routine in the 2451 dynamic object changes the real symbol, we will not see that 2452 change in the corresponding weak symbol. This is the way other 2453 ELF linkers work as well, and seems to be a result of the shared 2454 library model. 2455 2456 I will clarify this issue. Most SVR4 shared libraries define the 2457 variable _timezone and define timezone as a weak synonym. The 2458 tzset call changes _timezone. If you write 2459 extern int timezone; 2460 int _timezone = 5; 2461 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); } 2462 you might expect that, since timezone is a synonym for _timezone, 2463 the same number will print both times. However, if the processor 2464 backend uses a COPY reloc, then actually timezone will be copied 2465 into your process image, and, since you define _timezone 2466 yourself, _timezone will not. Thus timezone and _timezone will 2467 wind up at different memory locations. The tzset call will set 2468 _timezone, leaving timezone unchanged. */ 2469 2470 if (h->u.weakdef != NULL) 2471 { 2472 /* If we get to this point, we know there is an implicit 2473 reference by a regular object file via the weak symbol H. 2474 FIXME: Is this really true? What if the traversal finds 2475 H->U.WEAKDEF before it finds H? */ 2476 h->u.weakdef->ref_regular = 1; 2477 2478 if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif)) 2479 return FALSE; 2480 } 2481 2482 /* If a symbol has no type and no size and does not require a PLT 2483 entry, then we are probably about to do the wrong thing here: we 2484 are probably going to create a COPY reloc for an empty object. 2485 This case can arise when a shared object is built with assembly 2486 code, and the assembly code fails to set the symbol type. */ 2487 if (h->size == 0 2488 && h->type == STT_NOTYPE 2489 && !h->needs_plt) 2490 (*_bfd_error_handler) 2491 (_("warning: type and size of dynamic symbol `%s' are not defined"), 2492 h->root.root.string); 2493 2494 dynobj = elf_hash_table (eif->info)->dynobj; 2495 bed = get_elf_backend_data (dynobj); 2496 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h)) 2497 { 2498 eif->failed = TRUE; 2499 return FALSE; 2500 } 2501 2502 return TRUE; 2503 } 2504 2505 /* Adjust all external symbols pointing into SEC_MERGE sections 2506 to reflect the object merging within the sections. */ 2507 2508 bfd_boolean 2509 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data) 2510 { 2511 asection *sec; 2512 2513 if (h->root.type == bfd_link_hash_warning) 2514 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2515 2516 if ((h->root.type == bfd_link_hash_defined 2517 || h->root.type == bfd_link_hash_defweak) 2518 && ((sec = h->root.u.def.section)->flags & SEC_MERGE) 2519 && sec->sec_info_type == ELF_INFO_TYPE_MERGE) 2520 { 2521 bfd *output_bfd = data; 2522 2523 h->root.u.def.value = 2524 _bfd_merged_section_offset (output_bfd, 2525 &h->root.u.def.section, 2526 elf_section_data (sec)->sec_info, 2527 h->root.u.def.value); 2528 } 2529 2530 return TRUE; 2531 } 2532 2533 /* Returns false if the symbol referred to by H should be considered 2534 to resolve local to the current module, and true if it should be 2535 considered to bind dynamically. */ 2536 2537 bfd_boolean 2538 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h, 2539 struct bfd_link_info *info, 2540 bfd_boolean ignore_protected) 2541 { 2542 bfd_boolean binding_stays_local_p; 2543 2544 if (h == NULL) 2545 return FALSE; 2546 2547 while (h->root.type == bfd_link_hash_indirect 2548 || h->root.type == bfd_link_hash_warning) 2549 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2550 2551 /* If it was forced local, then clearly it's not dynamic. */ 2552 if (h->dynindx == -1) 2553 return FALSE; 2554 if (h->forced_local) 2555 return FALSE; 2556 2557 /* Identify the cases where name binding rules say that a 2558 visible symbol resolves locally. */ 2559 binding_stays_local_p = info->executable || info->symbolic; 2560 2561 switch (ELF_ST_VISIBILITY (h->other)) 2562 { 2563 case STV_INTERNAL: 2564 case STV_HIDDEN: 2565 return FALSE; 2566 2567 case STV_PROTECTED: 2568 /* Proper resolution for function pointer equality may require 2569 that these symbols perhaps be resolved dynamically, even though 2570 we should be resolving them to the current module. */ 2571 if (!ignore_protected || h->type != STT_FUNC) 2572 binding_stays_local_p = TRUE; 2573 break; 2574 2575 default: 2576 break; 2577 } 2578 2579 /* If it isn't defined locally, then clearly it's dynamic. */ 2580 if (!h->def_regular) 2581 return TRUE; 2582 2583 /* Otherwise, the symbol is dynamic if binding rules don't tell 2584 us that it remains local. */ 2585 return !binding_stays_local_p; 2586 } 2587 2588 /* Return true if the symbol referred to by H should be considered 2589 to resolve local to the current module, and false otherwise. Differs 2590 from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of 2591 undefined symbols and weak symbols. */ 2592 2593 bfd_boolean 2594 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, 2595 struct bfd_link_info *info, 2596 bfd_boolean local_protected) 2597 { 2598 /* If it's a local sym, of course we resolve locally. */ 2599 if (h == NULL) 2600 return TRUE; 2601 2602 /* Common symbols that become definitions don't get the DEF_REGULAR 2603 flag set, so test it first, and don't bail out. */ 2604 if (ELF_COMMON_DEF_P (h)) 2605 /* Do nothing. */; 2606 /* If we don't have a definition in a regular file, then we can't 2607 resolve locally. The sym is either undefined or dynamic. */ 2608 else if (!h->def_regular) 2609 return FALSE; 2610 2611 /* Forced local symbols resolve locally. */ 2612 if (h->forced_local) 2613 return TRUE; 2614 2615 /* As do non-dynamic symbols. */ 2616 if (h->dynindx == -1) 2617 return TRUE; 2618 2619 /* At this point, we know the symbol is defined and dynamic. In an 2620 executable it must resolve locally, likewise when building symbolic 2621 shared libraries. */ 2622 if (info->executable || info->symbolic) 2623 return TRUE; 2624 2625 /* Now deal with defined dynamic symbols in shared libraries. Ones 2626 with default visibility might not resolve locally. */ 2627 if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) 2628 return FALSE; 2629 2630 /* However, STV_HIDDEN or STV_INTERNAL ones must be local. */ 2631 if (ELF_ST_VISIBILITY (h->other) != STV_PROTECTED) 2632 return TRUE; 2633 2634 /* STV_PROTECTED non-function symbols are local. */ 2635 if (h->type != STT_FUNC) 2636 return TRUE; 2637 2638 /* Function pointer equality tests may require that STV_PROTECTED 2639 symbols be treated as dynamic symbols, even when we know that the 2640 dynamic linker will resolve them locally. */ 2641 return local_protected; 2642 } 2643 2644 /* Caches some TLS segment info, and ensures that the TLS segment vma is 2645 aligned. Returns the first TLS output section. */ 2646 2647 struct bfd_section * 2648 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info) 2649 { 2650 struct bfd_section *sec, *tls; 2651 unsigned int align = 0; 2652 2653 for (sec = obfd->sections; sec != NULL; sec = sec->next) 2654 if ((sec->flags & SEC_THREAD_LOCAL) != 0) 2655 break; 2656 tls = sec; 2657 2658 for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next) 2659 if (sec->alignment_power > align) 2660 align = sec->alignment_power; 2661 2662 elf_hash_table (info)->tls_sec = tls; 2663 2664 /* Ensure the alignment of the first section is the largest alignment, 2665 so that the tls segment starts aligned. */ 2666 if (tls != NULL) 2667 tls->alignment_power = align; 2668 2669 return tls; 2670 } 2671 2672 /* Return TRUE iff this is a non-common, definition of a non-function symbol. */ 2673 static bfd_boolean 2674 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED, 2675 Elf_Internal_Sym *sym) 2676 { 2677 const struct elf_backend_data *bed; 2678 2679 /* Local symbols do not count, but target specific ones might. */ 2680 if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL 2681 && ELF_ST_BIND (sym->st_info) < STB_LOOS) 2682 return FALSE; 2683 2684 /* Function symbols do not count. */ 2685 if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) 2686 return FALSE; 2687 2688 /* If the section is undefined, then so is the symbol. */ 2689 if (sym->st_shndx == SHN_UNDEF) 2690 return FALSE; 2691 2692 /* If the symbol is defined in the common section, then 2693 it is a common definition and so does not count. */ 2694 bed = get_elf_backend_data (abfd); 2695 if (bed->common_definition (sym)) 2696 return FALSE; 2697 2698 /* If the symbol is in a target specific section then we 2699 must rely upon the backend to tell us what it is. */ 2700 if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS) 2701 /* FIXME - this function is not coded yet: 2702 2703 return _bfd_is_global_symbol_definition (abfd, sym); 2704 2705 Instead for now assume that the definition is not global, 2706 Even if this is wrong, at least the linker will behave 2707 in the same way that it used to do. */ 2708 return FALSE; 2709 2710 return TRUE; 2711 } 2712 2713 /* Search the symbol table of the archive element of the archive ABFD 2714 whose archive map contains a mention of SYMDEF, and determine if 2715 the symbol is defined in this element. */ 2716 static bfd_boolean 2717 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef) 2718 { 2719 Elf_Internal_Shdr * hdr; 2720 bfd_size_type symcount; 2721 bfd_size_type extsymcount; 2722 bfd_size_type extsymoff; 2723 Elf_Internal_Sym *isymbuf; 2724 Elf_Internal_Sym *isym; 2725 Elf_Internal_Sym *isymend; 2726 bfd_boolean result; 2727 2728 abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset); 2729 if (abfd == NULL) 2730 return FALSE; 2731 2732 if (! bfd_check_format (abfd, bfd_object)) 2733 return FALSE; 2734 2735 /* If we have already included the element containing this symbol in the 2736 link then we do not need to include it again. Just claim that any symbol 2737 it contains is not a definition, so that our caller will not decide to 2738 (re)include this element. */ 2739 if (abfd->archive_pass) 2740 return FALSE; 2741 2742 /* Select the appropriate symbol table. */ 2743 if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0) 2744 hdr = &elf_tdata (abfd)->symtab_hdr; 2745 else 2746 hdr = &elf_tdata (abfd)->dynsymtab_hdr; 2747 2748 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; 2749 2750 /* The sh_info field of the symtab header tells us where the 2751 external symbols start. We don't care about the local symbols. */ 2752 if (elf_bad_symtab (abfd)) 2753 { 2754 extsymcount = symcount; 2755 extsymoff = 0; 2756 } 2757 else 2758 { 2759 extsymcount = symcount - hdr->sh_info; 2760 extsymoff = hdr->sh_info; 2761 } 2762 2763 if (extsymcount == 0) 2764 return FALSE; 2765 2766 /* Read in the symbol table. */ 2767 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff, 2768 NULL, NULL, NULL); 2769 if (isymbuf == NULL) 2770 return FALSE; 2771 2772 /* Scan the symbol table looking for SYMDEF. */ 2773 result = FALSE; 2774 for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++) 2775 { 2776 const char *name; 2777 2778 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 2779 isym->st_name); 2780 if (name == NULL) 2781 break; 2782 2783 if (strcmp (name, symdef->name) == 0) 2784 { 2785 result = is_global_data_symbol_definition (abfd, isym); 2786 break; 2787 } 2788 } 2789 2790 free (isymbuf); 2791 2792 return result; 2793 } 2794 2795 /* Add an entry to the .dynamic table. */ 2796 2797 bfd_boolean 2798 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info, 2799 bfd_vma tag, 2800 bfd_vma val) 2801 { 2802 struct elf_link_hash_table *hash_table; 2803 const struct elf_backend_data *bed; 2804 asection *s; 2805 bfd_size_type newsize; 2806 bfd_byte *newcontents; 2807 Elf_Internal_Dyn dyn; 2808 2809 hash_table = elf_hash_table (info); 2810 if (! is_elf_hash_table (hash_table)) 2811 return FALSE; 2812 2813 bed = get_elf_backend_data (hash_table->dynobj); 2814 s = bfd_get_section_by_name (hash_table->dynobj, ".dynamic"); 2815 BFD_ASSERT (s != NULL); 2816 2817 newsize = s->size + bed->s->sizeof_dyn; 2818 newcontents = bfd_realloc (s->contents, newsize); 2819 if (newcontents == NULL) 2820 return FALSE; 2821 2822 dyn.d_tag = tag; 2823 dyn.d_un.d_val = val; 2824 bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size); 2825 2826 s->size = newsize; 2827 s->contents = newcontents; 2828 2829 return TRUE; 2830 } 2831 2832 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true, 2833 otherwise just check whether one already exists. Returns -1 on error, 2834 1 if a DT_NEEDED tag already exists, and 0 on success. */ 2835 2836 static int 2837 elf_add_dt_needed_tag (bfd *abfd, 2838 struct bfd_link_info *info, 2839 const char *soname, 2840 bfd_boolean do_it) 2841 { 2842 struct elf_link_hash_table *hash_table; 2843 bfd_size_type oldsize; 2844 bfd_size_type strindex; 2845 2846 if (!_bfd_elf_link_create_dynstrtab (abfd, info)) 2847 return -1; 2848 2849 hash_table = elf_hash_table (info); 2850 oldsize = _bfd_elf_strtab_size (hash_table->dynstr); 2851 strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE); 2852 if (strindex == (bfd_size_type) -1) 2853 return -1; 2854 2855 if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr)) 2856 { 2857 asection *sdyn; 2858 const struct elf_backend_data *bed; 2859 bfd_byte *extdyn; 2860 2861 bed = get_elf_backend_data (hash_table->dynobj); 2862 sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic"); 2863 if (sdyn != NULL) 2864 for (extdyn = sdyn->contents; 2865 extdyn < sdyn->contents + sdyn->size; 2866 extdyn += bed->s->sizeof_dyn) 2867 { 2868 Elf_Internal_Dyn dyn; 2869 2870 bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn); 2871 if (dyn.d_tag == DT_NEEDED 2872 && dyn.d_un.d_val == strindex) 2873 { 2874 _bfd_elf_strtab_delref (hash_table->dynstr, strindex); 2875 return 1; 2876 } 2877 } 2878 } 2879 2880 if (do_it) 2881 { 2882 if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info)) 2883 return -1; 2884 2885 if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex)) 2886 return -1; 2887 } 2888 else 2889 /* We were just checking for existence of the tag. */ 2890 _bfd_elf_strtab_delref (hash_table->dynstr, strindex); 2891 2892 return 0; 2893 } 2894 2895 /* Sort symbol by value and section. */ 2896 static int 2897 elf_sort_symbol (const void *arg1, const void *arg2) 2898 { 2899 const struct elf_link_hash_entry *h1; 2900 const struct elf_link_hash_entry *h2; 2901 bfd_signed_vma vdiff; 2902 2903 h1 = *(const struct elf_link_hash_entry **) arg1; 2904 h2 = *(const struct elf_link_hash_entry **) arg2; 2905 vdiff = h1->root.u.def.value - h2->root.u.def.value; 2906 if (vdiff != 0) 2907 return vdiff > 0 ? 1 : -1; 2908 else 2909 { 2910 long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id; 2911 if (sdiff != 0) 2912 return sdiff > 0 ? 1 : -1; 2913 } 2914 return 0; 2915 } 2916 2917 /* This function is used to adjust offsets into .dynstr for 2918 dynamic symbols. This is called via elf_link_hash_traverse. */ 2919 2920 static bfd_boolean 2921 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data) 2922 { 2923 struct elf_strtab_hash *dynstr = data; 2924 2925 if (h->root.type == bfd_link_hash_warning) 2926 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2927 2928 if (h->dynindx != -1) 2929 h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index); 2930 return TRUE; 2931 } 2932 2933 /* Assign string offsets in .dynstr, update all structures referencing 2934 them. */ 2935 2936 static bfd_boolean 2937 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info) 2938 { 2939 struct elf_link_hash_table *hash_table = elf_hash_table (info); 2940 struct elf_link_local_dynamic_entry *entry; 2941 struct elf_strtab_hash *dynstr = hash_table->dynstr; 2942 bfd *dynobj = hash_table->dynobj; 2943 asection *sdyn; 2944 bfd_size_type size; 2945 const struct elf_backend_data *bed; 2946 bfd_byte *extdyn; 2947 2948 _bfd_elf_strtab_finalize (dynstr); 2949 size = _bfd_elf_strtab_size (dynstr); 2950 2951 bed = get_elf_backend_data (dynobj); 2952 sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); 2953 BFD_ASSERT (sdyn != NULL); 2954 2955 /* Update all .dynamic entries referencing .dynstr strings. */ 2956 for (extdyn = sdyn->contents; 2957 extdyn < sdyn->contents + sdyn->size; 2958 extdyn += bed->s->sizeof_dyn) 2959 { 2960 Elf_Internal_Dyn dyn; 2961 2962 bed->s->swap_dyn_in (dynobj, extdyn, &dyn); 2963 switch (dyn.d_tag) 2964 { 2965 case DT_STRSZ: 2966 dyn.d_un.d_val = size; 2967 break; 2968 case DT_NEEDED: 2969 case DT_SONAME: 2970 case DT_RPATH: 2971 case DT_RUNPATH: 2972 case DT_FILTER: 2973 case DT_AUXILIARY: 2974 dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val); 2975 break; 2976 default: 2977 continue; 2978 } 2979 bed->s->swap_dyn_out (dynobj, &dyn, extdyn); 2980 } 2981 2982 /* Now update local dynamic symbols. */ 2983 for (entry = hash_table->dynlocal; entry ; entry = entry->next) 2984 entry->isym.st_name = _bfd_elf_strtab_offset (dynstr, 2985 entry->isym.st_name); 2986 2987 /* And the rest of dynamic symbols. */ 2988 elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr); 2989 2990 /* Adjust version definitions. */ 2991 if (elf_tdata (output_bfd)->cverdefs) 2992 { 2993 asection *s; 2994 bfd_byte *p; 2995 bfd_size_type i; 2996 Elf_Internal_Verdef def; 2997 Elf_Internal_Verdaux defaux; 2998 2999 s = bfd_get_section_by_name (dynobj, ".gnu.version_d"); 3000 p = s->contents; 3001 do 3002 { 3003 _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p, 3004 &def); 3005 p += sizeof (Elf_External_Verdef); 3006 if (def.vd_aux != sizeof (Elf_External_Verdef)) 3007 continue; 3008 for (i = 0; i < def.vd_cnt; ++i) 3009 { 3010 _bfd_elf_swap_verdaux_in (output_bfd, 3011 (Elf_External_Verdaux *) p, &defaux); 3012 defaux.vda_name = _bfd_elf_strtab_offset (dynstr, 3013 defaux.vda_name); 3014 _bfd_elf_swap_verdaux_out (output_bfd, 3015 &defaux, (Elf_External_Verdaux *) p); 3016 p += sizeof (Elf_External_Verdaux); 3017 } 3018 } 3019 while (def.vd_next); 3020 } 3021 3022 /* Adjust version references. */ 3023 if (elf_tdata (output_bfd)->verref) 3024 { 3025 asection *s; 3026 bfd_byte *p; 3027 bfd_size_type i; 3028 Elf_Internal_Verneed need; 3029 Elf_Internal_Vernaux needaux; 3030 3031 s = bfd_get_section_by_name (dynobj, ".gnu.version_r"); 3032 p = s->contents; 3033 do 3034 { 3035 _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p, 3036 &need); 3037 need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file); 3038 _bfd_elf_swap_verneed_out (output_bfd, &need, 3039 (Elf_External_Verneed *) p); 3040 p += sizeof (Elf_External_Verneed); 3041 for (i = 0; i < need.vn_cnt; ++i) 3042 { 3043 _bfd_elf_swap_vernaux_in (output_bfd, 3044 (Elf_External_Vernaux *) p, &needaux); 3045 needaux.vna_name = _bfd_elf_strtab_offset (dynstr, 3046 needaux.vna_name); 3047 _bfd_elf_swap_vernaux_out (output_bfd, 3048 &needaux, 3049 (Elf_External_Vernaux *) p); 3050 p += sizeof (Elf_External_Vernaux); 3051 } 3052 } 3053 while (need.vn_next); 3054 } 3055 3056 return TRUE; 3057 } 3058 3059 /* Add symbols from an ELF object file to the linker hash table. */ 3060 3061 static bfd_boolean 3062 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) 3063 { 3064 Elf_Internal_Shdr *hdr; 3065 bfd_size_type symcount; 3066 bfd_size_type extsymcount; 3067 bfd_size_type extsymoff; 3068 struct elf_link_hash_entry **sym_hash; 3069 bfd_boolean dynamic; 3070 Elf_External_Versym *extversym = NULL; 3071 Elf_External_Versym *ever; 3072 struct elf_link_hash_entry *weaks; 3073 struct elf_link_hash_entry **nondeflt_vers = NULL; 3074 bfd_size_type nondeflt_vers_cnt = 0; 3075 Elf_Internal_Sym *isymbuf = NULL; 3076 Elf_Internal_Sym *isym; 3077 Elf_Internal_Sym *isymend; 3078 const struct elf_backend_data *bed; 3079 bfd_boolean add_needed; 3080 struct elf_link_hash_table *htab; 3081 bfd_size_type amt; 3082 #if 0 3083 void *alloc_mark = NULL; 3084 #endif 3085 void *old_tab = NULL; 3086 #if 0 3087 void *old_hash; 3088 void *old_ent; 3089 struct bfd_link_hash_entry *old_undefs = NULL; 3090 struct bfd_link_hash_entry *old_undefs_tail = NULL; 3091 long old_dynsymcount = 0; 3092 size_t tabsize = 0; 3093 size_t hashsize = 0; 3094 #endif 3095 3096 htab = elf_hash_table (info); 3097 bed = get_elf_backend_data (abfd); 3098 3099 if ((abfd->flags & DYNAMIC) == 0) 3100 dynamic = FALSE; 3101 else 3102 { 3103 dynamic = TRUE; 3104 3105 /* You can't use -r against a dynamic object. Also, there's no 3106 hope of using a dynamic object which does not exactly match 3107 the format of the output file. */ 3108 if (info->relocatable 3109 || !is_elf_hash_table (htab) 3110 || htab->root.creator != abfd->xvec) 3111 { 3112 if (info->relocatable) 3113 bfd_set_error (bfd_error_invalid_operation); 3114 else 3115 bfd_set_error (bfd_error_wrong_format); 3116 goto error_return; 3117 } 3118 } 3119 3120 /* As a GNU extension, any input sections which are named 3121 .gnu.warning.SYMBOL are treated as warning symbols for the given 3122 symbol. This differs from .gnu.warning sections, which generate 3123 warnings when they are included in an output file. */ 3124 if (info->executable) 3125 { 3126 asection *s; 3127 3128 for (s = abfd->sections; s != NULL; s = s->next) 3129 { 3130 const char *name; 3131 3132 name = bfd_get_section_name (abfd, s); 3133 if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0) 3134 { 3135 char *msg; 3136 bfd_size_type sz; 3137 3138 name += sizeof ".gnu.warning." - 1; 3139 3140 /* If this is a shared object, then look up the symbol 3141 in the hash table. If it is there, and it is already 3142 been defined, then we will not be using the entry 3143 from this shared object, so we don't need to warn. 3144 FIXME: If we see the definition in a regular object 3145 later on, we will warn, but we shouldn't. The only 3146 fix is to keep track of what warnings we are supposed 3147 to emit, and then handle them all at the end of the 3148 link. */ 3149 if (dynamic) 3150 { 3151 struct elf_link_hash_entry *h; 3152 3153 h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE); 3154 3155 /* FIXME: What about bfd_link_hash_common? */ 3156 if (h != NULL 3157 && (h->root.type == bfd_link_hash_defined 3158 || h->root.type == bfd_link_hash_defweak)) 3159 { 3160 /* We don't want to issue this warning. Clobber 3161 the section size so that the warning does not 3162 get copied into the output file. */ 3163 s->size = 0; 3164 continue; 3165 } 3166 } 3167 3168 sz = s->size; 3169 msg = bfd_alloc (abfd, sz + 1); 3170 if (msg == NULL) 3171 goto error_return; 3172 3173 if (! bfd_get_section_contents (abfd, s, msg, 0, sz)) 3174 goto error_return; 3175 3176 msg[sz] = '\0'; 3177 3178 if (! (_bfd_generic_link_add_one_symbol 3179 (info, abfd, name, BSF_WARNING, s, 0, msg, 3180 FALSE, bed->collect, NULL))) 3181 goto error_return; 3182 3183 if (! info->relocatable) 3184 { 3185 /* Clobber the section size so that the warning does 3186 not get copied into the output file. */ 3187 s->size = 0; 3188 3189 /* Also set SEC_EXCLUDE, so that symbols defined in 3190 the warning section don't get copied to the output. */ 3191 s->flags |= SEC_EXCLUDE; 3192 } 3193 } 3194 } 3195 } 3196 3197 add_needed = TRUE; 3198 if (! dynamic) 3199 { 3200 /* If we are creating a shared library, create all the dynamic 3201 sections immediately. We need to attach them to something, 3202 so we attach them to this BFD, provided it is the right 3203 format. FIXME: If there are no input BFD's of the same 3204 format as the output, we can't make a shared library. */ 3205 if (info->shared 3206 && is_elf_hash_table (htab) 3207 && htab->root.creator == abfd->xvec 3208 && !htab->dynamic_sections_created) 3209 { 3210 if (! _bfd_elf_link_create_dynamic_sections (abfd, info)) 3211 goto error_return; 3212 } 3213 } 3214 else if (!is_elf_hash_table (htab)) 3215 goto error_return; 3216 else 3217 { 3218 asection *s; 3219 const char *soname = NULL; 3220 struct bfd_link_needed_list *rpath = NULL, *runpath = NULL; 3221 int ret; 3222 3223 /* ld --just-symbols and dynamic objects don't mix very well. 3224 ld shouldn't allow it. */ 3225 if ((s = abfd->sections) != NULL 3226 && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS) 3227 abort (); 3228 3229 /* If this dynamic lib was specified on the command line with 3230 --as-needed in effect, then we don't want to add a DT_NEEDED 3231 tag unless the lib is actually used. Similary for libs brought 3232 in by another lib's DT_NEEDED. When --no-add-needed is used 3233 on a dynamic lib, we don't want to add a DT_NEEDED entry for 3234 any dynamic library in DT_NEEDED tags in the dynamic lib at 3235 all. */ 3236 add_needed = (elf_dyn_lib_class (abfd) 3237 & (DYN_AS_NEEDED | DYN_DT_NEEDED 3238 | DYN_NO_NEEDED)) == 0; 3239 3240 s = bfd_get_section_by_name (abfd, ".dynamic"); 3241 if (s != NULL) 3242 { 3243 bfd_byte *dynbuf; 3244 bfd_byte *extdyn; 3245 int elfsec; 3246 unsigned long shlink; 3247 3248 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) 3249 goto error_free_dyn; 3250 3251 elfsec = _bfd_elf_section_from_bfd_section (abfd, s); 3252 if (elfsec == -1) 3253 goto error_free_dyn; 3254 shlink = elf_elfsections (abfd)[elfsec]->sh_link; 3255 3256 for (extdyn = dynbuf; 3257 extdyn < dynbuf + s->size; 3258 extdyn += bed->s->sizeof_dyn) 3259 { 3260 Elf_Internal_Dyn dyn; 3261 3262 bed->s->swap_dyn_in (abfd, extdyn, &dyn); 3263 if (dyn.d_tag == DT_SONAME) 3264 { 3265 unsigned int tagv = dyn.d_un.d_val; 3266 soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3267 if (soname == NULL) 3268 goto error_free_dyn; 3269 } 3270 if (dyn.d_tag == DT_NEEDED) 3271 { 3272 struct bfd_link_needed_list *n, **pn; 3273 char *fnm, *anm; 3274 unsigned int tagv = dyn.d_un.d_val; 3275 3276 amt = sizeof (struct bfd_link_needed_list); 3277 n = bfd_alloc (abfd, amt); 3278 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3279 if (n == NULL || fnm == NULL) 3280 goto error_free_dyn; 3281 amt = strlen (fnm) + 1; 3282 anm = bfd_alloc (abfd, amt); 3283 if (anm == NULL) 3284 goto error_free_dyn; 3285 memcpy (anm, fnm, amt); 3286 n->name = anm; 3287 n->by = abfd; 3288 n->next = NULL; 3289 for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next) 3290 ; 3291 *pn = n; 3292 } 3293 if (dyn.d_tag == DT_RUNPATH) 3294 { 3295 struct bfd_link_needed_list *n, **pn; 3296 char *fnm, *anm; 3297 unsigned int tagv = dyn.d_un.d_val; 3298 3299 amt = sizeof (struct bfd_link_needed_list); 3300 n = bfd_alloc (abfd, amt); 3301 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3302 if (n == NULL || fnm == NULL) 3303 goto error_free_dyn; 3304 amt = strlen (fnm) + 1; 3305 anm = bfd_alloc (abfd, amt); 3306 if (anm == NULL) 3307 goto error_free_dyn; 3308 memcpy (anm, fnm, amt); 3309 n->name = anm; 3310 n->by = abfd; 3311 n->next = NULL; 3312 for (pn = & runpath; 3313 *pn != NULL; 3314 pn = &(*pn)->next) 3315 ; 3316 *pn = n; 3317 } 3318 /* Ignore DT_RPATH if we have seen DT_RUNPATH. */ 3319 if (!runpath && dyn.d_tag == DT_RPATH) 3320 { 3321 struct bfd_link_needed_list *n, **pn; 3322 char *fnm, *anm; 3323 unsigned int tagv = dyn.d_un.d_val; 3324 3325 amt = sizeof (struct bfd_link_needed_list); 3326 n = bfd_alloc (abfd, amt); 3327 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3328 if (n == NULL || fnm == NULL) 3329 goto error_free_dyn; 3330 amt = strlen (fnm) + 1; 3331 anm = bfd_alloc (abfd, amt); 3332 if (anm == NULL) 3333 { 3334 error_free_dyn: 3335 free (dynbuf); 3336 goto error_return; 3337 } 3338 memcpy (anm, fnm, amt); 3339 n->name = anm; 3340 n->by = abfd; 3341 n->next = NULL; 3342 for (pn = & rpath; 3343 *pn != NULL; 3344 pn = &(*pn)->next) 3345 ; 3346 *pn = n; 3347 } 3348 } 3349 3350 free (dynbuf); 3351 } 3352 3353 /* DT_RUNPATH overrides DT_RPATH. Do _NOT_ bfd_release, as that 3354 frees all more recently bfd_alloc'd blocks as well. */ 3355 if (runpath) 3356 rpath = runpath; 3357 3358 if (rpath) 3359 { 3360 struct bfd_link_needed_list **pn; 3361 for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next) 3362 ; 3363 *pn = rpath; 3364 } 3365 3366 /* We do not want to include any of the sections in a dynamic 3367 object in the output file. We hack by simply clobbering the 3368 list of sections in the BFD. This could be handled more 3369 cleanly by, say, a new section flag; the existing 3370 SEC_NEVER_LOAD flag is not the one we want, because that one 3371 still implies that the section takes up space in the output 3372 file. */ 3373 bfd_section_list_clear (abfd); 3374 3375 /* Find the name to use in a DT_NEEDED entry that refers to this 3376 object. If the object has a DT_SONAME entry, we use it. 3377 Otherwise, if the generic linker stuck something in 3378 elf_dt_name, we use that. Otherwise, we just use the file 3379 name. */ 3380 if (soname == NULL || *soname == '\0') 3381 { 3382 soname = elf_dt_name (abfd); 3383 if (soname == NULL || *soname == '\0') 3384 soname = bfd_get_filename (abfd); 3385 } 3386 3387 /* Save the SONAME because sometimes the linker emulation code 3388 will need to know it. */ 3389 elf_dt_name (abfd) = soname; 3390 3391 ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); 3392 if (ret < 0) 3393 goto error_return; 3394 3395 /* If we have already included this dynamic object in the 3396 link, just ignore it. There is no reason to include a 3397 particular dynamic object more than once. */ 3398 if (ret > 0) 3399 return TRUE; 3400 } 3401 3402 /* If this is a dynamic object, we always link against the .dynsym 3403 symbol table, not the .symtab symbol table. The dynamic linker 3404 will only see the .dynsym symbol table, so there is no reason to 3405 look at .symtab for a dynamic object. */ 3406 3407 if (! dynamic || elf_dynsymtab (abfd) == 0) 3408 hdr = &elf_tdata (abfd)->symtab_hdr; 3409 else 3410 hdr = &elf_tdata (abfd)->dynsymtab_hdr; 3411 3412 symcount = hdr->sh_size / bed->s->sizeof_sym; 3413 3414 /* The sh_info field of the symtab header tells us where the 3415 external symbols start. We don't care about the local symbols at 3416 this point. */ 3417 if (elf_bad_symtab (abfd)) 3418 { 3419 extsymcount = symcount; 3420 extsymoff = 0; 3421 } 3422 else 3423 { 3424 extsymcount = symcount - hdr->sh_info; 3425 extsymoff = hdr->sh_info; 3426 } 3427 3428 sym_hash = NULL; 3429 if (extsymcount != 0) 3430 { 3431 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff, 3432 NULL, NULL, NULL); 3433 if (isymbuf == NULL) 3434 goto error_return; 3435 3436 /* We store a pointer to the hash table entry for each external 3437 symbol. */ 3438 amt = extsymcount * sizeof (struct elf_link_hash_entry *); 3439 sym_hash = bfd_alloc (abfd, amt); 3440 if (sym_hash == NULL) 3441 goto error_free_sym; 3442 elf_sym_hashes (abfd) = sym_hash; 3443 } 3444 3445 if (dynamic) 3446 { 3447 /* Read in any version definitions. */ 3448 if (!_bfd_elf_slurp_version_tables (abfd, 3449 info->default_imported_symver)) 3450 goto error_free_sym; 3451 3452 /* Read in the symbol versions, but don't bother to convert them 3453 to internal format. */ 3454 if (elf_dynversym (abfd) != 0) 3455 { 3456 Elf_Internal_Shdr *versymhdr; 3457 3458 versymhdr = &elf_tdata (abfd)->dynversym_hdr; 3459 extversym = bfd_malloc (versymhdr->sh_size); 3460 if (extversym == NULL) 3461 goto error_free_sym; 3462 amt = versymhdr->sh_size; 3463 if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0 3464 || bfd_bread (extversym, amt, abfd) != amt) 3465 goto error_free_vers; 3466 } 3467 } 3468 3469 #if 0 3470 /* If we are loading an as-needed shared lib, save the symbol table 3471 state before we start adding symbols. If the lib turns out 3472 to be unneeded, restore the state. */ 3473 if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0) 3474 { 3475 unsigned int i; 3476 size_t entsize; 3477 3478 for (entsize = 0, i = 0; i < htab->root.table.size; i++) 3479 { 3480 struct bfd_hash_entry *p; 3481 struct elf_link_hash_entry *h; 3482 3483 for (p = htab->root.table.table[i]; p != NULL; p = p->next) 3484 { 3485 h = (struct elf_link_hash_entry *) p; 3486 entsize += htab->root.table.entsize; 3487 if (h->root.type == bfd_link_hash_warning) 3488 entsize += htab->root.table.entsize; 3489 } 3490 } 3491 3492 tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *); 3493 hashsize = extsymcount * sizeof (struct elf_link_hash_entry *); 3494 old_tab = bfd_malloc (tabsize + entsize + hashsize); 3495 if (old_tab == NULL) 3496 goto error_free_vers; 3497 3498 /* Remember the current objalloc pointer, so that all mem for 3499 symbols added can later be reclaimed. */ 3500 alloc_mark = bfd_hash_allocate (&htab->root.table, 1); 3501 if (alloc_mark == NULL) 3502 goto error_free_vers; 3503 3504 /* Clone the symbol table and sym hashes. Remember some 3505 pointers into the symbol table, and dynamic symbol count. */ 3506 old_hash = (char *) old_tab + tabsize; 3507 old_ent = (char *) old_hash + hashsize; 3508 memcpy (old_tab, htab->root.table.table, tabsize); 3509 memcpy (old_hash, sym_hash, hashsize); 3510 old_undefs = htab->root.undefs; 3511 old_undefs_tail = htab->root.undefs_tail; 3512 old_dynsymcount = htab->dynsymcount; 3513 3514 for (i = 0; i < htab->root.table.size; i++) 3515 { 3516 struct bfd_hash_entry *p; 3517 struct elf_link_hash_entry *h; 3518 3519 for (p = htab->root.table.table[i]; p != NULL; p = p->next) 3520 { 3521 memcpy (old_ent, p, htab->root.table.entsize); 3522 old_ent = (char *) old_ent + htab->root.table.entsize; 3523 h = (struct elf_link_hash_entry *) p; 3524 if (h->root.type == bfd_link_hash_warning) 3525 { 3526 memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize); 3527 old_ent = (char *) old_ent + htab->root.table.entsize; 3528 } 3529 } 3530 } 3531 } 3532 #endif 3533 3534 weaks = NULL; 3535 ever = extversym != NULL ? extversym + extsymoff : NULL; 3536 for (isym = isymbuf, isymend = isymbuf + extsymcount; 3537 isym < isymend; 3538 isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL)) 3539 { 3540 int bind; 3541 bfd_vma value; 3542 asection *sec, *new_sec; 3543 flagword flags; 3544 const char *name; 3545 struct elf_link_hash_entry *h; 3546 bfd_boolean definition; 3547 bfd_boolean size_change_ok; 3548 bfd_boolean type_change_ok; 3549 bfd_boolean new_weakdef; 3550 bfd_boolean override; 3551 bfd_boolean common; 3552 unsigned int old_alignment; 3553 bfd *old_bfd; 3554 3555 override = FALSE; 3556 3557 flags = BSF_NO_FLAGS; 3558 sec = NULL; 3559 value = isym->st_value; 3560 *sym_hash = NULL; 3561 common = bed->common_definition (isym); 3562 3563 bind = ELF_ST_BIND (isym->st_info); 3564 if (bind == STB_LOCAL) 3565 { 3566 /* This should be impossible, since ELF requires that all 3567 global symbols follow all local symbols, and that sh_info 3568 point to the first global symbol. Unfortunately, Irix 5 3569 screws this up. */ 3570 continue; 3571 } 3572 else if (bind == STB_GLOBAL) 3573 { 3574 if (isym->st_shndx != SHN_UNDEF && !common) 3575 flags = BSF_GLOBAL; 3576 } 3577 else if (bind == STB_WEAK) 3578 flags = BSF_WEAK; 3579 else 3580 { 3581 /* Leave it up to the processor backend. */ 3582 } 3583 3584 if (isym->st_shndx == SHN_UNDEF) 3585 sec = bfd_und_section_ptr; 3586 else if (isym->st_shndx < SHN_LORESERVE 3587 || isym->st_shndx > SHN_HIRESERVE) 3588 { 3589 sec = bfd_section_from_elf_index (abfd, isym->st_shndx); 3590 if (sec == NULL) 3591 sec = bfd_abs_section_ptr; 3592 else if (sec->kept_section) 3593 { 3594 /* Symbols from discarded section are undefined, and have 3595 default visibility. */ 3596 sec = bfd_und_section_ptr; 3597 isym->st_shndx = SHN_UNDEF; 3598 isym->st_other = (STV_DEFAULT 3599 | (isym->st_other & ~ ELF_ST_VISIBILITY (-1))); 3600 } 3601 else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) 3602 value -= sec->vma; 3603 } 3604 else if (isym->st_shndx == SHN_ABS) 3605 sec = bfd_abs_section_ptr; 3606 else if (isym->st_shndx == SHN_COMMON) 3607 { 3608 sec = bfd_com_section_ptr; 3609 /* What ELF calls the size we call the value. What ELF 3610 calls the value we call the alignment. */ 3611 value = isym->st_size; 3612 } 3613 else 3614 { 3615 /* Leave it up to the processor backend. */ 3616 } 3617 3618 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 3619 isym->st_name); 3620 if (name == NULL) 3621 goto error_free_vers; 3622 3623 if (isym->st_shndx == SHN_COMMON 3624 && ELF_ST_TYPE (isym->st_info) == STT_TLS) 3625 { 3626 asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon"); 3627 3628 if (tcomm == NULL) 3629 { 3630 tcomm = bfd_make_section_with_flags (abfd, ".tcommon", 3631 (SEC_ALLOC 3632 | SEC_IS_COMMON 3633 | SEC_LINKER_CREATED 3634 | SEC_THREAD_LOCAL)); 3635 if (tcomm == NULL) 3636 goto error_free_vers; 3637 } 3638 sec = tcomm; 3639 } 3640 else if (bed->elf_add_symbol_hook) 3641 { 3642 if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags, 3643 &sec, &value)) 3644 goto error_free_vers; 3645 3646 /* The hook function sets the name to NULL if this symbol 3647 should be skipped for some reason. */ 3648 if (name == NULL) 3649 continue; 3650 } 3651 3652 /* Sanity check that all possibilities were handled. */ 3653 if (sec == NULL) 3654 { 3655 bfd_set_error (bfd_error_bad_value); 3656 goto error_free_vers; 3657 } 3658 3659 if (bfd_is_und_section (sec) 3660 || bfd_is_com_section (sec)) 3661 definition = FALSE; 3662 else 3663 definition = TRUE; 3664 3665 size_change_ok = FALSE; 3666 type_change_ok = bed->type_change_ok; 3667 old_alignment = 0; 3668 old_bfd = NULL; 3669 new_sec = sec; 3670 3671 if (is_elf_hash_table (htab)) 3672 { 3673 Elf_Internal_Versym iver; 3674 unsigned int vernum = 0; 3675 bfd_boolean skip; 3676 3677 if (ever == NULL) 3678 { 3679 if (info->default_imported_symver) 3680 /* Use the default symbol version created earlier. */ 3681 iver.vs_vers = elf_tdata (abfd)->cverdefs; 3682 else 3683 iver.vs_vers = 0; 3684 } 3685 else 3686 _bfd_elf_swap_versym_in (abfd, ever, &iver); 3687 3688 vernum = iver.vs_vers & VERSYM_VERSION; 3689 3690 /* If this is a hidden symbol, or if it is not version 3691 1, we append the version name to the symbol name. 3692 However, we do not modify a non-hidden absolute symbol 3693 if it is not a function, because it might be the version 3694 symbol itself. FIXME: What if it isn't? */ 3695 if ((iver.vs_vers & VERSYM_HIDDEN) != 0 3696 || (vernum > 1 && (! bfd_is_abs_section (sec) 3697 || ELF_ST_TYPE (isym->st_info) == STT_FUNC))) 3698 { 3699 const char *verstr; 3700 size_t namelen, verlen, newlen; 3701 char *newname, *p; 3702 3703 if (isym->st_shndx != SHN_UNDEF) 3704 { 3705 if (vernum > elf_tdata (abfd)->cverdefs) 3706 verstr = NULL; 3707 else if (vernum > 1) 3708 verstr = 3709 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; 3710 else 3711 verstr = ""; 3712 3713 if (verstr == NULL) 3714 { 3715 (*_bfd_error_handler) 3716 (_("%B: %s: invalid version %u (max %d)"), 3717 abfd, name, vernum, 3718 elf_tdata (abfd)->cverdefs); 3719 bfd_set_error (bfd_error_bad_value); 3720 goto error_free_vers; 3721 } 3722 } 3723 else 3724 { 3725 /* We cannot simply test for the number of 3726 entries in the VERNEED section since the 3727 numbers for the needed versions do not start 3728 at 0. */ 3729 Elf_Internal_Verneed *t; 3730 3731 verstr = NULL; 3732 for (t = elf_tdata (abfd)->verref; 3733 t != NULL; 3734 t = t->vn_nextref) 3735 { 3736 Elf_Internal_Vernaux *a; 3737 3738 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 3739 { 3740 if (a->vna_other == vernum) 3741 { 3742 verstr = a->vna_nodename; 3743 break; 3744 } 3745 } 3746 if (a != NULL) 3747 break; 3748 } 3749 if (verstr == NULL) 3750 { 3751 (*_bfd_error_handler) 3752 (_("%B: %s: invalid needed version %d"), 3753 abfd, name, vernum); 3754 bfd_set_error (bfd_error_bad_value); 3755 goto error_free_vers; 3756 } 3757 } 3758 3759 namelen = strlen (name); 3760 verlen = strlen (verstr); 3761 newlen = namelen + verlen + 2; 3762 if ((iver.vs_vers & VERSYM_HIDDEN) == 0 3763 && isym->st_shndx != SHN_UNDEF) 3764 ++newlen; 3765 3766 newname = bfd_hash_allocate (&htab->root.table, newlen); 3767 if (newname == NULL) 3768 goto error_free_vers; 3769 memcpy (newname, name, namelen); 3770 p = newname + namelen; 3771 *p++ = ELF_VER_CHR; 3772 /* If this is a defined non-hidden version symbol, 3773 we add another @ to the name. This indicates the 3774 default version of the symbol. */ 3775 if ((iver.vs_vers & VERSYM_HIDDEN) == 0 3776 && isym->st_shndx != SHN_UNDEF) 3777 *p++ = ELF_VER_CHR; 3778 memcpy (p, verstr, verlen + 1); 3779 3780 name = newname; 3781 } 3782 3783 if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, 3784 &value, &old_alignment, 3785 sym_hash, &skip, &override, 3786 &type_change_ok, &size_change_ok)) 3787 goto error_free_vers; 3788 3789 if (skip) 3790 continue; 3791 3792 if (override) 3793 definition = FALSE; 3794 3795 h = *sym_hash; 3796 while (h->root.type == bfd_link_hash_indirect 3797 || h->root.type == bfd_link_hash_warning) 3798 h = (struct elf_link_hash_entry *) h->root.u.i.link; 3799 3800 /* Remember the old alignment if this is a common symbol, so 3801 that we don't reduce the alignment later on. We can't 3802 check later, because _bfd_generic_link_add_one_symbol 3803 will set a default for the alignment which we want to 3804 override. We also remember the old bfd where the existing 3805 definition comes from. */ 3806 switch (h->root.type) 3807 { 3808 default: 3809 break; 3810 3811 case bfd_link_hash_defined: 3812 case bfd_link_hash_defweak: 3813 old_bfd = h->root.u.def.section->owner; 3814 break; 3815 3816 case bfd_link_hash_common: 3817 old_bfd = h->root.u.c.p->section->owner; 3818 old_alignment = h->root.u.c.p->alignment_power; 3819 break; 3820 } 3821 3822 if (elf_tdata (abfd)->verdef != NULL 3823 && ! override 3824 && vernum > 1 3825 && definition) 3826 h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1]; 3827 } 3828 3829 if (! (_bfd_generic_link_add_one_symbol 3830 (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect, 3831 (struct bfd_link_hash_entry **) sym_hash))) 3832 goto error_free_vers; 3833 3834 h = *sym_hash; 3835 while (h->root.type == bfd_link_hash_indirect 3836 || h->root.type == bfd_link_hash_warning) 3837 h = (struct elf_link_hash_entry *) h->root.u.i.link; 3838 *sym_hash = h; 3839 3840 new_weakdef = FALSE; 3841 if (dynamic 3842 && definition 3843 && (flags & BSF_WEAK) != 0 3844 && ELF_ST_TYPE (isym->st_info) != STT_FUNC 3845 && is_elf_hash_table (htab) 3846 && h->u.weakdef == NULL) 3847 { 3848 /* Keep a list of all weak defined non function symbols from 3849 a dynamic object, using the weakdef field. Later in this 3850 function we will set the weakdef field to the correct 3851 value. We only put non-function symbols from dynamic 3852 objects on this list, because that happens to be the only 3853 time we need to know the normal symbol corresponding to a 3854 weak symbol, and the information is time consuming to 3855 figure out. If the weakdef field is not already NULL, 3856 then this symbol was already defined by some previous 3857 dynamic object, and we will be using that previous 3858 definition anyhow. */ 3859 3860 h->u.weakdef = weaks; 3861 weaks = h; 3862 new_weakdef = TRUE; 3863 } 3864 3865 /* Set the alignment of a common symbol. */ 3866 if ((common || bfd_is_com_section (sec)) 3867 && h->root.type == bfd_link_hash_common) 3868 { 3869 unsigned int align; 3870 3871 if (common) 3872 align = bfd_log2 (isym->st_value); 3873 else 3874 { 3875 /* The new symbol is a common symbol in a shared object. 3876 We need to get the alignment from the section. */ 3877 align = new_sec->alignment_power; 3878 } 3879 if (align > old_alignment 3880 /* Permit an alignment power of zero if an alignment of one 3881 is specified and no other alignments have been specified. */ 3882 || (isym->st_value == 1 && old_alignment == 0)) 3883 h->root.u.c.p->alignment_power = align; 3884 else 3885 h->root.u.c.p->alignment_power = old_alignment; 3886 } 3887 3888 if (is_elf_hash_table (htab)) 3889 { 3890 bfd_boolean dynsym; 3891 3892 /* Check the alignment when a common symbol is involved. This 3893 can change when a common symbol is overridden by a normal 3894 definition or a common symbol is ignored due to the old 3895 normal definition. We need to make sure the maximum 3896 alignment is maintained. */ 3897 if ((old_alignment || common) 3898 && h->root.type != bfd_link_hash_common) 3899 { 3900 unsigned int common_align; 3901 unsigned int normal_align; 3902 unsigned int symbol_align; 3903 bfd *normal_bfd; 3904 bfd *common_bfd; 3905 3906 symbol_align = ffs (h->root.u.def.value) - 1; 3907 if (h->root.u.def.section->owner != NULL 3908 && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) 3909 { 3910 normal_align = h->root.u.def.section->alignment_power; 3911 if (normal_align > symbol_align) 3912 normal_align = symbol_align; 3913 } 3914 else 3915 normal_align = symbol_align; 3916 3917 if (old_alignment) 3918 { 3919 common_align = old_alignment; 3920 common_bfd = old_bfd; 3921 normal_bfd = abfd; 3922 } 3923 else 3924 { 3925 common_align = bfd_log2 (isym->st_value); 3926 common_bfd = abfd; 3927 normal_bfd = old_bfd; 3928 } 3929 3930 if (normal_align < common_align) 3931 (*_bfd_error_handler) 3932 (_("Warning: alignment %u of symbol `%s' in %B" 3933 " is smaller than %u in %B"), 3934 normal_bfd, common_bfd, 3935 1 << normal_align, name, 1 << common_align); 3936 } 3937 3938 /* Remember the symbol size and type. */ 3939 if (isym->st_size != 0 3940 && (definition || h->size == 0)) 3941 { 3942 if (h->size != 0 && h->size != isym->st_size && ! size_change_ok) 3943 (*_bfd_error_handler) 3944 (_("Warning: size of symbol `%s' changed" 3945 " from %lu in %B to %lu in %B"), 3946 old_bfd, abfd, 3947 name, (unsigned long) h->size, 3948 (unsigned long) isym->st_size); 3949 3950 h->size = isym->st_size; 3951 } 3952 3953 /* If this is a common symbol, then we always want H->SIZE 3954 to be the size of the common symbol. The code just above 3955 won't fix the size if a common symbol becomes larger. We 3956 don't warn about a size change here, because that is 3957 covered by --warn-common. */ 3958 if (h->root.type == bfd_link_hash_common) 3959 h->size = h->root.u.c.size; 3960 3961 if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE 3962 && (definition || h->type == STT_NOTYPE)) 3963 { 3964 if (h->type != STT_NOTYPE 3965 && h->type != ELF_ST_TYPE (isym->st_info) 3966 && ! type_change_ok) 3967 (*_bfd_error_handler) 3968 (_("Warning: type of symbol `%s' changed" 3969 " from %d to %d in %B"), 3970 abfd, name, h->type, ELF_ST_TYPE (isym->st_info)); 3971 3972 h->type = ELF_ST_TYPE (isym->st_info); 3973 } 3974 3975 /* If st_other has a processor-specific meaning, specific 3976 code might be needed here. We never merge the visibility 3977 attribute with the one from a dynamic object. */ 3978 if (bed->elf_backend_merge_symbol_attribute) 3979 (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition, 3980 dynamic); 3981 3982 /* If this symbol has default visibility and the user has requested 3983 we not re-export it, then mark it as hidden. */ 3984 if (definition && !dynamic 3985 && (abfd->no_export 3986 || (abfd->my_archive && abfd->my_archive->no_export)) 3987 && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL) 3988 isym->st_other = (STV_HIDDEN 3989 | (isym->st_other & ~ELF_ST_VISIBILITY (-1))); 3990 3991 if (isym->st_other != 0 && !dynamic) 3992 { 3993 unsigned char hvis, symvis, other, nvis; 3994 3995 /* Take the balance of OTHER from the definition. */ 3996 other = (definition ? isym->st_other : h->other); 3997 other &= ~ ELF_ST_VISIBILITY (-1); 3998 3999 /* Combine visibilities, using the most constraining one. */ 4000 hvis = ELF_ST_VISIBILITY (h->other); 4001 symvis = ELF_ST_VISIBILITY (isym->st_other); 4002 if (! hvis) 4003 nvis = symvis; 4004 else if (! symvis) 4005 nvis = hvis; 4006 else 4007 nvis = hvis < symvis ? hvis : symvis; 4008 4009 h->other = other | nvis; 4010 } 4011 4012 /* Set a flag in the hash table entry indicating the type of 4013 reference or definition we just found. Keep a count of 4014 the number of dynamic symbols we find. A dynamic symbol 4015 is one which is referenced or defined by both a regular 4016 object and a shared object. */ 4017 dynsym = FALSE; 4018 if (! dynamic) 4019 { 4020 if (! definition) 4021 { 4022 h->ref_regular = 1; 4023 if (bind != STB_WEAK) 4024 h->ref_regular_nonweak = 1; 4025 } 4026 else 4027 h->def_regular = 1; 4028 if (! info->executable 4029 || h->def_dynamic 4030 || h->ref_dynamic) 4031 dynsym = TRUE; 4032 } 4033 else 4034 { 4035 if (! definition) 4036 h->ref_dynamic = 1; 4037 else 4038 h->def_dynamic = 1; 4039 if (h->def_regular 4040 || h->ref_regular 4041 || (h->u.weakdef != NULL 4042 && ! new_weakdef 4043 && h->u.weakdef->dynindx != -1)) 4044 dynsym = TRUE; 4045 } 4046 4047 /* Check to see if we need to add an indirect symbol for 4048 the default name. */ 4049 if (definition || h->root.type == bfd_link_hash_common) 4050 if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym, 4051 &sec, &value, &dynsym, 4052 override)) 4053 goto error_free_vers; 4054 4055 if (definition && !dynamic) 4056 { 4057 char *p = strchr (name, ELF_VER_CHR); 4058 if (p != NULL && p[1] != ELF_VER_CHR) 4059 { 4060 /* Queue non-default versions so that .symver x, x@FOO 4061 aliases can be checked. */ 4062 if (!nondeflt_vers) 4063 { 4064 amt = ((isymend - isym + 1) 4065 * sizeof (struct elf_link_hash_entry *)); 4066 nondeflt_vers = bfd_malloc (amt); 4067 } 4068 nondeflt_vers[nondeflt_vers_cnt++] = h; 4069 } 4070 } 4071 4072 if (dynsym && h->dynindx == -1) 4073 { 4074 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 4075 goto error_free_vers; 4076 if (h->u.weakdef != NULL 4077 && ! new_weakdef 4078 && h->u.weakdef->dynindx == -1) 4079 { 4080 if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef)) 4081 goto error_free_vers; 4082 } 4083 } 4084 else if (dynsym && h->dynindx != -1) 4085 /* If the symbol already has a dynamic index, but 4086 visibility says it should not be visible, turn it into 4087 a local symbol. */ 4088 switch (ELF_ST_VISIBILITY (h->other)) 4089 { 4090 case STV_INTERNAL: 4091 case STV_HIDDEN: 4092 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 4093 dynsym = FALSE; 4094 break; 4095 } 4096 4097 if (!add_needed 4098 && definition 4099 && dynsym 4100 && h->ref_regular) 4101 { 4102 int ret; 4103 const char *soname = elf_dt_name (abfd); 4104 4105 /* A symbol from a library loaded via DT_NEEDED of some 4106 other library is referenced by a regular object. 4107 Add a DT_NEEDED entry for it. Issue an error if 4108 --no-add-needed is used. */ 4109 if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0) 4110 { 4111 (*_bfd_error_handler) 4112 (_("%s: invalid DSO for symbol `%s' definition"), 4113 abfd, name); 4114 bfd_set_error (bfd_error_bad_value); 4115 goto error_free_vers; 4116 } 4117 4118 elf_dyn_lib_class (abfd) &= ~DYN_AS_NEEDED; 4119 4120 add_needed = TRUE; 4121 ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); 4122 if (ret < 0) 4123 goto error_free_vers; 4124 4125 BFD_ASSERT (ret == 0); 4126 } 4127 } 4128 } 4129 4130 if (extversym != NULL) 4131 { 4132 free (extversym); 4133 extversym = NULL; 4134 } 4135 4136 if (isymbuf != NULL) 4137 { 4138 free (isymbuf); 4139 isymbuf = NULL; 4140 } 4141 4142 #if 0 4143 if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0) 4144 { 4145 unsigned int i; 4146 4147 /* Restore the symbol table. */ 4148 old_hash = (char *) old_tab + tabsize; 4149 old_ent = (char *) old_hash + hashsize; 4150 sym_hash = elf_sym_hashes (abfd); 4151 memcpy (htab->root.table.table, old_tab, tabsize); 4152 memcpy (sym_hash, old_hash, hashsize); 4153 htab->root.undefs = old_undefs; 4154 htab->root.undefs_tail = old_undefs_tail; 4155 for (i = 0; i < htab->root.table.size; i++) 4156 { 4157 struct bfd_hash_entry *p; 4158 struct elf_link_hash_entry *h; 4159 4160 for (p = htab->root.table.table[i]; p != NULL; p = p->next) 4161 { 4162 h = (struct elf_link_hash_entry *) p; 4163 if (h->root.type == bfd_link_hash_warning) 4164 h = (struct elf_link_hash_entry *) h->root.u.i.link; 4165 if (h->dynindx >= old_dynsymcount) 4166 _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index); 4167 4168 memcpy (p, old_ent, htab->root.table.entsize); 4169 old_ent = (char *) old_ent + htab->root.table.entsize; 4170 h = (struct elf_link_hash_entry *) p; 4171 if (h->root.type == bfd_link_hash_warning) 4172 { 4173 memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize); 4174 old_ent = (char *) old_ent + htab->root.table.entsize; 4175 } 4176 } 4177 } 4178 4179 free (old_tab); 4180 objalloc_free_block ((struct objalloc *) htab->root.table.memory, 4181 alloc_mark); 4182 if (nondeflt_vers != NULL) 4183 free (nondeflt_vers); 4184 return TRUE; 4185 } 4186 #endif 4187 4188 if (old_tab != NULL) 4189 { 4190 free (old_tab); 4191 old_tab = NULL; 4192 } 4193 4194 /* Now that all the symbols from this input file are created, handle 4195 .symver foo, foo@BAR such that any relocs against foo become foo@BAR. */ 4196 if (nondeflt_vers != NULL) 4197 { 4198 bfd_size_type cnt, symidx; 4199 4200 for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt) 4201 { 4202 struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi; 4203 char *shortname, *p; 4204 4205 p = strchr (h->root.root.string, ELF_VER_CHR); 4206 if (p == NULL 4207 || (h->root.type != bfd_link_hash_defined 4208 && h->root.type != bfd_link_hash_defweak)) 4209 continue; 4210 4211 amt = p - h->root.root.string; 4212 shortname = bfd_malloc (amt + 1); 4213 memcpy (shortname, h->root.root.string, amt); 4214 shortname[amt] = '\0'; 4215 4216 hi = (struct elf_link_hash_entry *) 4217 bfd_link_hash_lookup (&htab->root, shortname, 4218 FALSE, FALSE, FALSE); 4219 if (hi != NULL 4220 && hi->root.type == h->root.type 4221 && hi->root.u.def.value == h->root.u.def.value 4222 && hi->root.u.def.section == h->root.u.def.section) 4223 { 4224 (*bed->elf_backend_hide_symbol) (info, hi, TRUE); 4225 hi->root.type = bfd_link_hash_indirect; 4226 hi->root.u.i.link = (struct bfd_link_hash_entry *) h; 4227 (*bed->elf_backend_copy_indirect_symbol) (info, h, hi); 4228 sym_hash = elf_sym_hashes (abfd); 4229 if (sym_hash) 4230 for (symidx = 0; symidx < extsymcount; ++symidx) 4231 if (sym_hash[symidx] == hi) 4232 { 4233 sym_hash[symidx] = h; 4234 break; 4235 } 4236 } 4237 free (shortname); 4238 } 4239 free (nondeflt_vers); 4240 nondeflt_vers = NULL; 4241 } 4242 4243 /* Now set the weakdefs field correctly for all the weak defined 4244 symbols we found. The only way to do this is to search all the 4245 symbols. Since we only need the information for non functions in 4246 dynamic objects, that's the only time we actually put anything on 4247 the list WEAKS. We need this information so that if a regular 4248 object refers to a symbol defined weakly in a dynamic object, the 4249 real symbol in the dynamic object is also put in the dynamic 4250 symbols; we also must arrange for both symbols to point to the 4251 same memory location. We could handle the general case of symbol 4252 aliasing, but a general symbol alias can only be generated in 4253 assembler code, handling it correctly would be very time 4254 consuming, and other ELF linkers don't handle general aliasing 4255 either. */ 4256 if (weaks != NULL) 4257 { 4258 struct elf_link_hash_entry **hpp; 4259 struct elf_link_hash_entry **hppend; 4260 struct elf_link_hash_entry **sorted_sym_hash; 4261 struct elf_link_hash_entry *h; 4262 size_t sym_count; 4263 4264 /* Since we have to search the whole symbol list for each weak 4265 defined symbol, search time for N weak defined symbols will be 4266 O(N^2). Binary search will cut it down to O(NlogN). */ 4267 amt = extsymcount * sizeof (struct elf_link_hash_entry *); 4268 sorted_sym_hash = bfd_malloc (amt); 4269 if (sorted_sym_hash == NULL) 4270 goto error_return; 4271 sym_hash = sorted_sym_hash; 4272 hpp = elf_sym_hashes (abfd); 4273 hppend = hpp + extsymcount; 4274 sym_count = 0; 4275 for (; hpp < hppend; hpp++) 4276 { 4277 h = *hpp; 4278 if (h != NULL 4279 && h->root.type == bfd_link_hash_defined 4280 && h->type != STT_FUNC) 4281 { 4282 *sym_hash = h; 4283 sym_hash++; 4284 sym_count++; 4285 } 4286 } 4287 4288 qsort (sorted_sym_hash, sym_count, 4289 sizeof (struct elf_link_hash_entry *), 4290 elf_sort_symbol); 4291 4292 while (weaks != NULL) 4293 { 4294 struct elf_link_hash_entry *hlook; 4295 asection *slook; 4296 bfd_vma vlook; 4297 long ilook; 4298 size_t i, j, idx; 4299 4300 hlook = weaks; 4301 weaks = hlook->u.weakdef; 4302 hlook->u.weakdef = NULL; 4303 4304 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined 4305 || hlook->root.type == bfd_link_hash_defweak 4306 || hlook->root.type == bfd_link_hash_common 4307 || hlook->root.type == bfd_link_hash_indirect); 4308 slook = hlook->root.u.def.section; 4309 vlook = hlook->root.u.def.value; 4310 4311 ilook = -1; 4312 i = 0; 4313 j = sym_count; 4314 while (i < j) 4315 { 4316 bfd_signed_vma vdiff; 4317 idx = (i + j) / 2; 4318 h = sorted_sym_hash [idx]; 4319 vdiff = vlook - h->root.u.def.value; 4320 if (vdiff < 0) 4321 j = idx; 4322 else if (vdiff > 0) 4323 i = idx + 1; 4324 else 4325 { 4326 long sdiff = slook->id - h->root.u.def.section->id; 4327 if (sdiff < 0) 4328 j = idx; 4329 else if (sdiff > 0) 4330 i = idx + 1; 4331 else 4332 { 4333 ilook = idx; 4334 break; 4335 } 4336 } 4337 } 4338 4339 /* We didn't find a value/section match. */ 4340 if (ilook == -1) 4341 continue; 4342 4343 for (i = ilook; i < sym_count; i++) 4344 { 4345 h = sorted_sym_hash [i]; 4346 4347 /* Stop if value or section doesn't match. */ 4348 if (h->root.u.def.value != vlook 4349 || h->root.u.def.section != slook) 4350 break; 4351 else if (h != hlook) 4352 { 4353 hlook->u.weakdef = h; 4354 4355 /* If the weak definition is in the list of dynamic 4356 symbols, make sure the real definition is put 4357 there as well. */ 4358 if (hlook->dynindx != -1 && h->dynindx == -1) 4359 { 4360 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 4361 goto error_return; 4362 } 4363 4364 /* If the real definition is in the list of dynamic 4365 symbols, make sure the weak definition is put 4366 there as well. If we don't do this, then the 4367 dynamic loader might not merge the entries for the 4368 real definition and the weak definition. */ 4369 if (h->dynindx != -1 && hlook->dynindx == -1) 4370 { 4371 if (! bfd_elf_link_record_dynamic_symbol (info, hlook)) 4372 goto error_return; 4373 } 4374 break; 4375 } 4376 } 4377 } 4378 4379 free (sorted_sym_hash); 4380 } 4381 4382 if (bed->check_directives) 4383 (*bed->check_directives) (abfd, info); 4384 4385 /* If this object is the same format as the output object, and it is 4386 not a shared library, then let the backend look through the 4387 relocs. 4388 4389 This is required to build global offset table entries and to 4390 arrange for dynamic relocs. It is not required for the 4391 particular common case of linking non PIC code, even when linking 4392 against shared libraries, but unfortunately there is no way of 4393 knowing whether an object file has been compiled PIC or not. 4394 Looking through the relocs is not particularly time consuming. 4395 The problem is that we must either (1) keep the relocs in memory, 4396 which causes the linker to require additional runtime memory or 4397 (2) read the relocs twice from the input file, which wastes time. 4398 This would be a good case for using mmap. 4399 4400 I have no idea how to handle linking PIC code into a file of a 4401 different format. It probably can't be done. */ 4402 if (! dynamic 4403 && is_elf_hash_table (htab) 4404 && htab->root.creator == abfd->xvec 4405 && bed->check_relocs != NULL) 4406 { 4407 asection *o; 4408 4409 for (o = abfd->sections; o != NULL; o = o->next) 4410 { 4411 Elf_Internal_Rela *internal_relocs; 4412 bfd_boolean ok; 4413 4414 if ((o->flags & SEC_RELOC) == 0 4415 || o->reloc_count == 0 4416 || ((info->strip == strip_all || info->strip == strip_debugger) 4417 && (o->flags & SEC_DEBUGGING) != 0) 4418 || bfd_is_abs_section (o->output_section)) 4419 continue; 4420 4421 internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 4422 info->keep_memory); 4423 if (internal_relocs == NULL) 4424 goto error_return; 4425 4426 ok = (*bed->check_relocs) (abfd, info, o, internal_relocs); 4427 4428 if (elf_section_data (o)->relocs != internal_relocs) 4429 free (internal_relocs); 4430 4431 if (! ok) 4432 goto error_return; 4433 } 4434 } 4435 4436 /* If this is a non-traditional link, try to optimize the handling 4437 of the .stab/.stabstr sections. */ 4438 if (! dynamic 4439 && ! info->traditional_format 4440 && is_elf_hash_table (htab) 4441 && (info->strip != strip_all && info->strip != strip_debugger)) 4442 { 4443 asection *stabstr; 4444 4445 stabstr = bfd_get_section_by_name (abfd, ".stabstr"); 4446 if (stabstr != NULL) 4447 { 4448 bfd_size_type string_offset = 0; 4449 asection *stab; 4450 4451 for (stab = abfd->sections; stab; stab = stab->next) 4452 if (strncmp (".stab", stab->name, 5) == 0 4453 && (!stab->name[5] || 4454 (stab->name[5] == '.' && ISDIGIT (stab->name[6]))) 4455 && (stab->flags & SEC_MERGE) == 0 4456 && !bfd_is_abs_section (stab->output_section)) 4457 { 4458 struct bfd_elf_section_data *secdata; 4459 4460 secdata = elf_section_data (stab); 4461 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab, 4462 stabstr, &secdata->sec_info, 4463 &string_offset)) 4464 goto error_return; 4465 if (secdata->sec_info) 4466 stab->sec_info_type = ELF_INFO_TYPE_STABS; 4467 } 4468 } 4469 } 4470 4471 if (is_elf_hash_table (htab) && add_needed) 4472 { 4473 /* Add this bfd to the loaded list. */ 4474 struct elf_link_loaded_list *n; 4475 4476 n = bfd_alloc (abfd, sizeof (struct elf_link_loaded_list)); 4477 if (n == NULL) 4478 goto error_return; 4479 n->abfd = abfd; 4480 n->next = htab->loaded; 4481 htab->loaded = n; 4482 } 4483 4484 return TRUE; 4485 4486 error_free_vers: 4487 if (old_tab != NULL) 4488 free (old_tab); 4489 if (nondeflt_vers != NULL) 4490 free (nondeflt_vers); 4491 if (extversym != NULL) 4492 free (extversym); 4493 error_free_sym: 4494 if (isymbuf != NULL) 4495 free (isymbuf); 4496 error_return: 4497 return FALSE; 4498 } 4499 4500 /* Return the linker hash table entry of a symbol that might be 4501 satisfied by an archive symbol. Return -1 on error. */ 4502 4503 struct elf_link_hash_entry * 4504 _bfd_elf_archive_symbol_lookup (bfd *abfd, 4505 struct bfd_link_info *info, 4506 const char *name) 4507 { 4508 struct elf_link_hash_entry *h; 4509 char *p, *copy; 4510 size_t len, first; 4511 4512 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE); 4513 if (h != NULL) 4514 return h; 4515 4516 /* If this is a default version (the name contains @@), look up the 4517 symbol again with only one `@' as well as without the version. 4518 The effect is that references to the symbol with and without the 4519 version will be matched by the default symbol in the archive. */ 4520 4521 p = strchr (name, ELF_VER_CHR); 4522 if (p == NULL || p[1] != ELF_VER_CHR) 4523 return h; 4524 4525 /* First check with only one `@'. */ 4526 len = strlen (name); 4527 copy = bfd_alloc (abfd, len); 4528 if (copy == NULL) 4529 return (struct elf_link_hash_entry *) 0 - 1; 4530 4531 first = p - name + 1; 4532 memcpy (copy, name, first); 4533 memcpy (copy + first, name + first + 1, len - first); 4534 4535 h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, FALSE); 4536 if (h == NULL) 4537 { 4538 /* We also need to check references to the symbol without the 4539 version. */ 4540 copy[first - 1] = '\0'; 4541 h = elf_link_hash_lookup (elf_hash_table (info), copy, 4542 FALSE, FALSE, FALSE); 4543 } 4544 4545 bfd_release (abfd, copy); 4546 return h; 4547 } 4548 4549 /* Add symbols from an ELF archive file to the linker hash table. We 4550 don't use _bfd_generic_link_add_archive_symbols because of a 4551 problem which arises on UnixWare. The UnixWare libc.so is an 4552 archive which includes an entry libc.so.1 which defines a bunch of 4553 symbols. The libc.so archive also includes a number of other 4554 object files, which also define symbols, some of which are the same 4555 as those defined in libc.so.1. Correct linking requires that we 4556 consider each object file in turn, and include it if it defines any 4557 symbols we need. _bfd_generic_link_add_archive_symbols does not do 4558 this; it looks through the list of undefined symbols, and includes 4559 any object file which defines them. When this algorithm is used on 4560 UnixWare, it winds up pulling in libc.so.1 early and defining a 4561 bunch of symbols. This means that some of the other objects in the 4562 archive are not included in the link, which is incorrect since they 4563 precede libc.so.1 in the archive. 4564 4565 Fortunately, ELF archive handling is simpler than that done by 4566 _bfd_generic_link_add_archive_symbols, which has to allow for a.out 4567 oddities. In ELF, if we find a symbol in the archive map, and the 4568 symbol is currently undefined, we know that we must pull in that 4569 object file. 4570 4571 Unfortunately, we do have to make multiple passes over the symbol 4572 table until nothing further is resolved. */ 4573 4574 static bfd_boolean 4575 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) 4576 { 4577 symindex c; 4578 bfd_boolean *defined = NULL; 4579 bfd_boolean *included = NULL; 4580 carsym *symdefs; 4581 bfd_boolean loop; 4582 bfd_size_type amt; 4583 const struct elf_backend_data *bed; 4584 struct elf_link_hash_entry * (*archive_symbol_lookup) 4585 (bfd *, struct bfd_link_info *, const char *); 4586 4587 if (! bfd_has_map (abfd)) 4588 { 4589 /* An empty archive is a special case. */ 4590 if (bfd_openr_next_archived_file (abfd, NULL) == NULL) 4591 return TRUE; 4592 bfd_set_error (bfd_error_no_armap); 4593 return FALSE; 4594 } 4595 4596 /* Keep track of all symbols we know to be already defined, and all 4597 files we know to be already included. This is to speed up the 4598 second and subsequent passes. */ 4599 c = bfd_ardata (abfd)->symdef_count; 4600 if (c == 0) 4601 return TRUE; 4602 amt = c; 4603 amt *= sizeof (bfd_boolean); 4604 defined = bfd_zmalloc (amt); 4605 included = bfd_zmalloc (amt); 4606 if (defined == NULL || included == NULL) 4607 goto error_return; 4608 4609 symdefs = bfd_ardata (abfd)->symdefs; 4610 bed = get_elf_backend_data (abfd); 4611 archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup; 4612 4613 do 4614 { 4615 file_ptr last; 4616 symindex i; 4617 carsym *symdef; 4618 carsym *symdefend; 4619 4620 loop = FALSE; 4621 last = -1; 4622 4623 symdef = symdefs; 4624 symdefend = symdef + c; 4625 for (i = 0; symdef < symdefend; symdef++, i++) 4626 { 4627 struct elf_link_hash_entry *h; 4628 bfd *element; 4629 struct bfd_link_hash_entry *undefs_tail; 4630 symindex mark; 4631 4632 if (defined[i] || included[i]) 4633 continue; 4634 if (symdef->file_offset == last) 4635 { 4636 included[i] = TRUE; 4637 continue; 4638 } 4639 4640 h = archive_symbol_lookup (abfd, info, symdef->name); 4641 if (h == (struct elf_link_hash_entry *) 0 - 1) 4642 goto error_return; 4643 4644 if (h == NULL) 4645 continue; 4646 4647 if (h->root.type == bfd_link_hash_common) 4648 { 4649 /* We currently have a common symbol. The archive map contains 4650 a reference to this symbol, so we may want to include it. We 4651 only want to include it however, if this archive element 4652 contains a definition of the symbol, not just another common 4653 declaration of it. 4654 4655 Unfortunately some archivers (including GNU ar) will put 4656 declarations of common symbols into their archive maps, as 4657 well as real definitions, so we cannot just go by the archive 4658 map alone. Instead we must read in the element's symbol 4659 table and check that to see what kind of symbol definition 4660 this is. */ 4661 if (! elf_link_is_defined_archive_symbol (abfd, symdef)) 4662 continue; 4663 } 4664 else if (h->root.type != bfd_link_hash_undefined) 4665 { 4666 if (h->root.type != bfd_link_hash_undefweak) 4667 defined[i] = TRUE; 4668 continue; 4669 } 4670 4671 /* We need to include this archive member. */ 4672 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset); 4673 if (element == NULL) 4674 goto error_return; 4675 4676 if (! bfd_check_format (element, bfd_object)) 4677 goto error_return; 4678 4679 /* Doublecheck that we have not included this object 4680 already--it should be impossible, but there may be 4681 something wrong with the archive. */ 4682 if (element->archive_pass != 0) 4683 { 4684 bfd_set_error (bfd_error_bad_value); 4685 goto error_return; 4686 } 4687 element->archive_pass = 1; 4688 4689 undefs_tail = info->hash->undefs_tail; 4690 4691 if (! (*info->callbacks->add_archive_element) (info, element, 4692 symdef->name)) 4693 goto error_return; 4694 if (! bfd_link_add_symbols (element, info)) 4695 goto error_return; 4696 4697 /* If there are any new undefined symbols, we need to make 4698 another pass through the archive in order to see whether 4699 they can be defined. FIXME: This isn't perfect, because 4700 common symbols wind up on undefs_tail and because an 4701 undefined symbol which is defined later on in this pass 4702 does not require another pass. This isn't a bug, but it 4703 does make the code less efficient than it could be. */ 4704 if (undefs_tail != info->hash->undefs_tail) 4705 loop = TRUE; 4706 4707 /* Look backward to mark all symbols from this object file 4708 which we have already seen in this pass. */ 4709 mark = i; 4710 do 4711 { 4712 included[mark] = TRUE; 4713 if (mark == 0) 4714 break; 4715 --mark; 4716 } 4717 while (symdefs[mark].file_offset == symdef->file_offset); 4718 4719 /* We mark subsequent symbols from this object file as we go 4720 on through the loop. */ 4721 last = symdef->file_offset; 4722 } 4723 } 4724 while (loop); 4725 4726 free (defined); 4727 free (included); 4728 4729 return TRUE; 4730 4731 error_return: 4732 if (defined != NULL) 4733 free (defined); 4734 if (included != NULL) 4735 free (included); 4736 return FALSE; 4737 } 4738 4739 /* Given an ELF BFD, add symbols to the global hash table as 4740 appropriate. */ 4741 4742 bfd_boolean 4743 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info) 4744 { 4745 switch (bfd_get_format (abfd)) 4746 { 4747 case bfd_object: 4748 return elf_link_add_object_symbols (abfd, info); 4749 case bfd_archive: 4750 return elf_link_add_archive_symbols (abfd, info); 4751 default: 4752 bfd_set_error (bfd_error_wrong_format); 4753 return FALSE; 4754 } 4755 } 4756 4757 /* This function will be called though elf_link_hash_traverse to store 4758 all hash value of the exported symbols in an array. */ 4759 4760 static bfd_boolean 4761 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data) 4762 { 4763 unsigned long **valuep = data; 4764 const char *name; 4765 char *p; 4766 unsigned long ha; 4767 char *alc = NULL; 4768 4769 if (h->root.type == bfd_link_hash_warning) 4770 h = (struct elf_link_hash_entry *) h->root.u.i.link; 4771 4772 /* Ignore indirect symbols. These are added by the versioning code. */ 4773 if (h->dynindx == -1) 4774 return TRUE; 4775 4776 name = h->root.root.string; 4777 p = strchr (name, ELF_VER_CHR); 4778 if (p != NULL) 4779 { 4780 alc = bfd_malloc (p - name + 1); 4781 memcpy (alc, name, p - name); 4782 alc[p - name] = '\0'; 4783 name = alc; 4784 } 4785 4786 /* Compute the hash value. */ 4787 ha = bfd_elf_hash (name); 4788 4789 /* Store the found hash value in the array given as the argument. */ 4790 *(*valuep)++ = ha; 4791 4792 /* And store it in the struct so that we can put it in the hash table 4793 later. */ 4794 h->u.elf_hash_value = ha; 4795 4796 if (alc != NULL) 4797 free (alc); 4798 4799 return TRUE; 4800 } 4801 4802 /* Array used to determine the number of hash table buckets to use 4803 based on the number of symbols there are. If there are fewer than 4804 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets, 4805 fewer than 37 we use 17 buckets, and so forth. We never use more 4806 than 32771 buckets. */ 4807 4808 static const size_t elf_buckets[] = 4809 { 4810 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209, 4811 16411, 32771, 0 4812 }; 4813 4814 /* Compute bucket count for hashing table. We do not use a static set 4815 of possible tables sizes anymore. Instead we determine for all 4816 possible reasonable sizes of the table the outcome (i.e., the 4817 number of collisions etc) and choose the best solution. The 4818 weighting functions are not too simple to allow the table to grow 4819 without bounds. Instead one of the weighting factors is the size. 4820 Therefore the result is always a good payoff between few collisions 4821 (= short chain lengths) and table size. */ 4822 static size_t 4823 compute_bucket_count (struct bfd_link_info *info) 4824 { 4825 size_t dynsymcount = elf_hash_table (info)->dynsymcount; 4826 size_t best_size = 0; 4827 unsigned long int *hashcodes; 4828 unsigned long int *hashcodesp; 4829 unsigned long int i; 4830 bfd_size_type amt; 4831 4832 /* Compute the hash values for all exported symbols. At the same 4833 time store the values in an array so that we could use them for 4834 optimizations. */ 4835 amt = dynsymcount; 4836 amt *= sizeof (unsigned long int); 4837 hashcodes = bfd_malloc (amt); 4838 if (hashcodes == NULL) 4839 return 0; 4840 hashcodesp = hashcodes; 4841 4842 /* Put all hash values in HASHCODES. */ 4843 elf_link_hash_traverse (elf_hash_table (info), 4844 elf_collect_hash_codes, &hashcodesp); 4845 4846 /* We have a problem here. The following code to optimize the table 4847 size requires an integer type with more the 32 bits. If 4848 BFD_HOST_U_64_BIT is set we know about such a type. */ 4849 #ifdef BFD_HOST_U_64_BIT 4850 if (info->optimize) 4851 { 4852 unsigned long int nsyms = hashcodesp - hashcodes; 4853 size_t minsize; 4854 size_t maxsize; 4855 BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0); 4856 unsigned long int *counts ; 4857 bfd *dynobj = elf_hash_table (info)->dynobj; 4858 const struct elf_backend_data *bed = get_elf_backend_data (dynobj); 4859 4860 /* Possible optimization parameters: if we have NSYMS symbols we say 4861 that the hashing table must at least have NSYMS/4 and at most 4862 2*NSYMS buckets. */ 4863 minsize = nsyms / 4; 4864 if (minsize == 0) 4865 minsize = 1; 4866 best_size = maxsize = nsyms * 2; 4867 4868 /* Create array where we count the collisions in. We must use bfd_malloc 4869 since the size could be large. */ 4870 amt = maxsize; 4871 amt *= sizeof (unsigned long int); 4872 counts = bfd_malloc (amt); 4873 if (counts == NULL) 4874 { 4875 free (hashcodes); 4876 return 0; 4877 } 4878 4879 /* Compute the "optimal" size for the hash table. The criteria is a 4880 minimal chain length. The minor criteria is (of course) the size 4881 of the table. */ 4882 for (i = minsize; i < maxsize; ++i) 4883 { 4884 /* Walk through the array of hashcodes and count the collisions. */ 4885 BFD_HOST_U_64_BIT max; 4886 unsigned long int j; 4887 unsigned long int fact; 4888 4889 memset (counts, '\0', i * sizeof (unsigned long int)); 4890 4891 /* Determine how often each hash bucket is used. */ 4892 for (j = 0; j < nsyms; ++j) 4893 ++counts[hashcodes[j] % i]; 4894 4895 /* For the weight function we need some information about the 4896 pagesize on the target. This is information need not be 100% 4897 accurate. Since this information is not available (so far) we 4898 define it here to a reasonable default value. If it is crucial 4899 to have a better value some day simply define this value. */ 4900 # ifndef BFD_TARGET_PAGESIZE 4901 # define BFD_TARGET_PAGESIZE (4096) 4902 # endif 4903 4904 /* We in any case need 2 + NSYMS entries for the size values and 4905 the chains. */ 4906 max = (2 + nsyms) * (bed->s->arch_size / 8); 4907 4908 # if 1 4909 /* Variant 1: optimize for short chains. We add the squares 4910 of all the chain lengths (which favors many small chain 4911 over a few long chains). */ 4912 for (j = 0; j < i; ++j) 4913 max += counts[j] * counts[j]; 4914 4915 /* This adds penalties for the overall size of the table. */ 4916 fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1; 4917 max *= fact * fact; 4918 # else 4919 /* Variant 2: Optimize a lot more for small table. Here we 4920 also add squares of the size but we also add penalties for 4921 empty slots (the +1 term). */ 4922 for (j = 0; j < i; ++j) 4923 max += (1 + counts[j]) * (1 + counts[j]); 4924 4925 /* The overall size of the table is considered, but not as 4926 strong as in variant 1, where it is squared. */ 4927 fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1; 4928 max *= fact; 4929 # endif 4930 4931 /* Compare with current best results. */ 4932 if (max < best_chlen) 4933 { 4934 best_chlen = max; 4935 best_size = i; 4936 } 4937 } 4938 4939 free (counts); 4940 } 4941 else 4942 #endif /* defined (BFD_HOST_U_64_BIT) */ 4943 { 4944 /* This is the fallback solution if no 64bit type is available or if we 4945 are not supposed to spend much time on optimizations. We select the 4946 bucket count using a fixed set of numbers. */ 4947 for (i = 0; elf_buckets[i] != 0; i++) 4948 { 4949 best_size = elf_buckets[i]; 4950 if (dynsymcount < elf_buckets[i + 1]) 4951 break; 4952 } 4953 } 4954 4955 /* Free the arrays we needed. */ 4956 free (hashcodes); 4957 4958 return best_size; 4959 } 4960 4961 /* Set up the sizes and contents of the ELF dynamic sections. This is 4962 called by the ELF linker emulation before_allocation routine. We 4963 must set the sizes of the sections before the linker sets the 4964 addresses of the various sections. */ 4965 4966 bfd_boolean 4967 bfd_elf_size_dynamic_sections (bfd *output_bfd, 4968 const char *soname, 4969 const char *rpath, 4970 const char *filter_shlib, 4971 const char * const *auxiliary_filters, 4972 struct bfd_link_info *info, 4973 asection **sinterpptr, 4974 struct bfd_elf_version_tree *verdefs) 4975 { 4976 bfd_size_type soname_indx; 4977 bfd *dynobj; 4978 const struct elf_backend_data *bed; 4979 struct elf_assign_sym_version_info asvinfo; 4980 4981 *sinterpptr = NULL; 4982 4983 soname_indx = (bfd_size_type) -1; 4984 4985 if (!is_elf_hash_table (info->hash)) 4986 return TRUE; 4987 4988 elf_tdata (output_bfd)->relro = info->relro; 4989 if (info->execstack) 4990 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X; 4991 else if (info->noexecstack) 4992 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W; 4993 else 4994 { 4995 bfd *inputobj; 4996 asection *notesec = NULL; 4997 int exec = 0; 4998 4999 for (inputobj = info->input_bfds; 5000 inputobj; 5001 inputobj = inputobj->link_next) 5002 { 5003 asection *s; 5004 5005 if (inputobj->flags & (DYNAMIC | BFD_LINKER_CREATED)) 5006 continue; 5007 s = bfd_get_section_by_name (inputobj, ".note.GNU-stack"); 5008 if (s) 5009 { 5010 if (s->flags & SEC_CODE) 5011 exec = PF_X; 5012 notesec = s; 5013 } 5014 else 5015 exec = PF_X; 5016 } 5017 if (notesec) 5018 { 5019 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec; 5020 if (exec && info->relocatable 5021 && notesec->output_section != bfd_abs_section_ptr) 5022 notesec->output_section->flags |= SEC_CODE; 5023 } 5024 } 5025 5026 /* Any syms created from now on start with -1 in 5027 got.refcount/offset and plt.refcount/offset. */ 5028 elf_hash_table (info)->init_got_refcount 5029 = elf_hash_table (info)->init_got_offset; 5030 elf_hash_table (info)->init_plt_refcount 5031 = elf_hash_table (info)->init_plt_offset; 5032 5033 /* The backend may have to create some sections regardless of whether 5034 we're dynamic or not. */ 5035 bed = get_elf_backend_data (output_bfd); 5036 if (bed->elf_backend_always_size_sections 5037 && ! (*bed->elf_backend_always_size_sections) (output_bfd, info)) 5038 return FALSE; 5039 5040 dynobj = elf_hash_table (info)->dynobj; 5041 5042 /* If there were no dynamic objects in the link, there is nothing to 5043 do here. */ 5044 if (dynobj == NULL) 5045 return TRUE; 5046 5047 if (! _bfd_elf_maybe_strip_eh_frame_hdr (info)) 5048 return FALSE; 5049 5050 if (elf_hash_table (info)->dynamic_sections_created) 5051 { 5052 struct elf_info_failed eif; 5053 struct elf_link_hash_entry *h; 5054 asection *dynstr; 5055 struct bfd_elf_version_tree *t; 5056 struct bfd_elf_version_expr *d; 5057 asection *s; 5058 bfd_boolean all_defined; 5059 5060 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp"); 5061 BFD_ASSERT (*sinterpptr != NULL || !info->executable); 5062 5063 if (soname != NULL) 5064 { 5065 soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5066 soname, TRUE); 5067 if (soname_indx == (bfd_size_type) -1 5068 || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx)) 5069 return FALSE; 5070 } 5071 5072 if (info->symbolic) 5073 { 5074 if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0)) 5075 return FALSE; 5076 info->flags |= DF_SYMBOLIC; 5077 } 5078 5079 if (rpath != NULL) 5080 { 5081 bfd_size_type indx; 5082 5083 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath, 5084 TRUE); 5085 if (indx == (bfd_size_type) -1 5086 || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx)) 5087 return FALSE; 5088 5089 if (info->new_dtags) 5090 { 5091 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx); 5092 if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx)) 5093 return FALSE; 5094 } 5095 } 5096 5097 if (filter_shlib != NULL) 5098 { 5099 bfd_size_type indx; 5100 5101 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5102 filter_shlib, TRUE); 5103 if (indx == (bfd_size_type) -1 5104 || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx)) 5105 return FALSE; 5106 } 5107 5108 if (auxiliary_filters != NULL) 5109 { 5110 const char * const *p; 5111 5112 for (p = auxiliary_filters; *p != NULL; p++) 5113 { 5114 bfd_size_type indx; 5115 5116 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5117 *p, TRUE); 5118 if (indx == (bfd_size_type) -1 5119 || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx)) 5120 return FALSE; 5121 } 5122 } 5123 5124 eif.info = info; 5125 eif.verdefs = verdefs; 5126 eif.failed = FALSE; 5127 5128 /* If we are supposed to export all symbols into the dynamic symbol 5129 table (this is not the normal case), then do so. */ 5130 if (info->export_dynamic) 5131 { 5132 elf_link_hash_traverse (elf_hash_table (info), 5133 _bfd_elf_export_symbol, 5134 &eif); 5135 if (eif.failed) 5136 return FALSE; 5137 } 5138 5139 /* Make all global versions with definition. */ 5140 for (t = verdefs; t != NULL; t = t->next) 5141 for (d = t->globals.list; d != NULL; d = d->next) 5142 if (!d->symver && d->symbol) 5143 { 5144 const char *verstr, *name; 5145 size_t namelen, verlen, newlen; 5146 char *newname, *p; 5147 struct elf_link_hash_entry *newh; 5148 5149 name = d->symbol; 5150 namelen = strlen (name); 5151 verstr = t->name; 5152 verlen = strlen (verstr); 5153 newlen = namelen + verlen + 3; 5154 5155 newname = bfd_malloc (newlen); 5156 if (newname == NULL) 5157 return FALSE; 5158 memcpy (newname, name, namelen); 5159 5160 /* Check the hidden versioned definition. */ 5161 p = newname + namelen; 5162 *p++ = ELF_VER_CHR; 5163 memcpy (p, verstr, verlen + 1); 5164 newh = elf_link_hash_lookup (elf_hash_table (info), 5165 newname, FALSE, FALSE, 5166 FALSE); 5167 if (newh == NULL 5168 || (newh->root.type != bfd_link_hash_defined 5169 && newh->root.type != bfd_link_hash_defweak)) 5170 { 5171 /* Check the default versioned definition. */ 5172 *p++ = ELF_VER_CHR; 5173 memcpy (p, verstr, verlen + 1); 5174 newh = elf_link_hash_lookup (elf_hash_table (info), 5175 newname, FALSE, FALSE, 5176 FALSE); 5177 } 5178 free (newname); 5179 5180 /* Mark this version if there is a definition and it is 5181 not defined in a shared object. */ 5182 if (newh != NULL 5183 && !newh->def_dynamic 5184 && (newh->root.type == bfd_link_hash_defined 5185 || newh->root.type == bfd_link_hash_defweak)) 5186 d->symver = 1; 5187 } 5188 5189 /* Attach all the symbols to their version information. */ 5190 asvinfo.output_bfd = output_bfd; 5191 asvinfo.info = info; 5192 asvinfo.verdefs = verdefs; 5193 asvinfo.failed = FALSE; 5194 5195 elf_link_hash_traverse (elf_hash_table (info), 5196 _bfd_elf_link_assign_sym_version, 5197 &asvinfo); 5198 if (asvinfo.failed) 5199 return FALSE; 5200 5201 if (!info->allow_undefined_version) 5202 { 5203 /* Check if all global versions have a definition. */ 5204 all_defined = TRUE; 5205 for (t = verdefs; t != NULL; t = t->next) 5206 for (d = t->globals.list; d != NULL; d = d->next) 5207 if (!d->symver && !d->script) 5208 { 5209 (*_bfd_error_handler) 5210 (_("%s: undefined version: %s"), 5211 d->pattern, t->name); 5212 all_defined = FALSE; 5213 } 5214 5215 if (!all_defined) 5216 { 5217 bfd_set_error (bfd_error_bad_value); 5218 return FALSE; 5219 } 5220 } 5221 5222 /* Find all symbols which were defined in a dynamic object and make 5223 the backend pick a reasonable value for them. */ 5224 elf_link_hash_traverse (elf_hash_table (info), 5225 _bfd_elf_adjust_dynamic_symbol, 5226 &eif); 5227 if (eif.failed) 5228 return FALSE; 5229 5230 /* Add some entries to the .dynamic section. We fill in some of the 5231 values later, in bfd_elf_final_link, but we must add the entries 5232 now so that we know the final size of the .dynamic section. */ 5233 5234 /* If there are initialization and/or finalization functions to 5235 call then add the corresponding DT_INIT/DT_FINI entries. */ 5236 h = (info->init_function 5237 ? elf_link_hash_lookup (elf_hash_table (info), 5238 info->init_function, FALSE, 5239 FALSE, FALSE) 5240 : NULL); 5241 if (h != NULL 5242 && (h->ref_regular 5243 || h->def_regular)) 5244 { 5245 if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0)) 5246 return FALSE; 5247 } 5248 h = (info->fini_function 5249 ? elf_link_hash_lookup (elf_hash_table (info), 5250 info->fini_function, FALSE, 5251 FALSE, FALSE) 5252 : NULL); 5253 if (h != NULL 5254 && (h->ref_regular 5255 || h->def_regular)) 5256 { 5257 if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0)) 5258 return FALSE; 5259 } 5260 5261 s = bfd_get_section_by_name (output_bfd, ".preinit_array"); 5262 if (s != NULL && s->linker_has_input) 5263 { 5264 /* DT_PREINIT_ARRAY is not allowed in shared library. */ 5265 if (! info->executable) 5266 { 5267 bfd *sub; 5268 asection *o; 5269 5270 for (sub = info->input_bfds; sub != NULL; 5271 sub = sub->link_next) 5272 for (o = sub->sections; o != NULL; o = o->next) 5273 if (elf_section_data (o)->this_hdr.sh_type 5274 == SHT_PREINIT_ARRAY) 5275 { 5276 (*_bfd_error_handler) 5277 (_("%B: .preinit_array section is not allowed in DSO"), 5278 sub); 5279 break; 5280 } 5281 5282 bfd_set_error (bfd_error_nonrepresentable_section); 5283 return FALSE; 5284 } 5285 5286 if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0) 5287 || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0)) 5288 return FALSE; 5289 } 5290 s = bfd_get_section_by_name (output_bfd, ".init_array"); 5291 if (s != NULL && s->linker_has_input) 5292 { 5293 if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0) 5294 || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0)) 5295 return FALSE; 5296 } 5297 s = bfd_get_section_by_name (output_bfd, ".fini_array"); 5298 if (s != NULL && s->linker_has_input) 5299 { 5300 if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0) 5301 || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0)) 5302 return FALSE; 5303 } 5304 5305 dynstr = bfd_get_section_by_name (dynobj, ".dynstr"); 5306 /* If .dynstr is excluded from the link, we don't want any of 5307 these tags. Strictly, we should be checking each section 5308 individually; This quick check covers for the case where 5309 someone does a /DISCARD/ : { *(*) }. */ 5310 if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr) 5311 { 5312 bfd_size_type strsize; 5313 5314 strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 5315 if (!_bfd_elf_add_dynamic_entry (info, DT_HASH, 0) 5316 || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0) 5317 || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0) 5318 || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize) 5319 || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT, 5320 bed->s->sizeof_sym)) 5321 return FALSE; 5322 } 5323 } 5324 5325 /* The backend must work out the sizes of all the other dynamic 5326 sections. */ 5327 if (bed->elf_backend_size_dynamic_sections 5328 && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info)) 5329 return FALSE; 5330 5331 if (elf_hash_table (info)->dynamic_sections_created) 5332 { 5333 unsigned long section_sym_count; 5334 asection *s; 5335 5336 /* Set up the version definition section. */ 5337 s = bfd_get_section_by_name (dynobj, ".gnu.version_d"); 5338 BFD_ASSERT (s != NULL); 5339 5340 /* We may have created additional version definitions if we are 5341 just linking a regular application. */ 5342 verdefs = asvinfo.verdefs; 5343 5344 /* Skip anonymous version tag. */ 5345 if (verdefs != NULL && verdefs->vernum == 0) 5346 verdefs = verdefs->next; 5347 5348 if (verdefs == NULL && !info->create_default_symver) 5349 s->flags |= SEC_EXCLUDE; 5350 else 5351 { 5352 unsigned int cdefs; 5353 bfd_size_type size; 5354 struct bfd_elf_version_tree *t; 5355 bfd_byte *p; 5356 Elf_Internal_Verdef def; 5357 Elf_Internal_Verdaux defaux; 5358 struct bfd_link_hash_entry *bh; 5359 struct elf_link_hash_entry *h; 5360 const char *name; 5361 5362 cdefs = 0; 5363 size = 0; 5364 5365 /* Make space for the base version. */ 5366 size += sizeof (Elf_External_Verdef); 5367 size += sizeof (Elf_External_Verdaux); 5368 ++cdefs; 5369 5370 /* Make space for the default version. */ 5371 if (info->create_default_symver) 5372 { 5373 size += sizeof (Elf_External_Verdef); 5374 ++cdefs; 5375 } 5376 5377 for (t = verdefs; t != NULL; t = t->next) 5378 { 5379 struct bfd_elf_version_deps *n; 5380 5381 size += sizeof (Elf_External_Verdef); 5382 size += sizeof (Elf_External_Verdaux); 5383 ++cdefs; 5384 5385 for (n = t->deps; n != NULL; n = n->next) 5386 size += sizeof (Elf_External_Verdaux); 5387 } 5388 5389 s->size = size; 5390 s->contents = bfd_alloc (output_bfd, s->size); 5391 if (s->contents == NULL && s->size != 0) 5392 return FALSE; 5393 5394 /* Fill in the version definition section. */ 5395 5396 p = s->contents; 5397 5398 def.vd_version = VER_DEF_CURRENT; 5399 def.vd_flags = VER_FLG_BASE; 5400 def.vd_ndx = 1; 5401 def.vd_cnt = 1; 5402 if (info->create_default_symver) 5403 { 5404 def.vd_aux = 2 * sizeof (Elf_External_Verdef); 5405 def.vd_next = sizeof (Elf_External_Verdef); 5406 } 5407 else 5408 { 5409 def.vd_aux = sizeof (Elf_External_Verdef); 5410 def.vd_next = (sizeof (Elf_External_Verdef) 5411 + sizeof (Elf_External_Verdaux)); 5412 } 5413 5414 if (soname_indx != (bfd_size_type) -1) 5415 { 5416 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, 5417 soname_indx); 5418 def.vd_hash = bfd_elf_hash (soname); 5419 defaux.vda_name = soname_indx; 5420 name = soname; 5421 } 5422 else 5423 { 5424 bfd_size_type indx; 5425 5426 name = lbasename (output_bfd->filename); 5427 def.vd_hash = bfd_elf_hash (name); 5428 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5429 name, FALSE); 5430 if (indx == (bfd_size_type) -1) 5431 return FALSE; 5432 defaux.vda_name = indx; 5433 } 5434 defaux.vda_next = 0; 5435 5436 _bfd_elf_swap_verdef_out (output_bfd, &def, 5437 (Elf_External_Verdef *) p); 5438 p += sizeof (Elf_External_Verdef); 5439 if (info->create_default_symver) 5440 { 5441 /* Add a symbol representing this version. */ 5442 bh = NULL; 5443 if (! (_bfd_generic_link_add_one_symbol 5444 (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr, 5445 0, NULL, FALSE, 5446 get_elf_backend_data (dynobj)->collect, &bh))) 5447 return FALSE; 5448 h = (struct elf_link_hash_entry *) bh; 5449 h->non_elf = 0; 5450 h->def_regular = 1; 5451 h->type = STT_OBJECT; 5452 h->verinfo.vertree = NULL; 5453 5454 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 5455 return FALSE; 5456 5457 /* Create a duplicate of the base version with the same 5458 aux block, but different flags. */ 5459 def.vd_flags = 0; 5460 def.vd_ndx = 2; 5461 def.vd_aux = sizeof (Elf_External_Verdef); 5462 if (verdefs) 5463 def.vd_next = (sizeof (Elf_External_Verdef) 5464 + sizeof (Elf_External_Verdaux)); 5465 else 5466 def.vd_next = 0; 5467 _bfd_elf_swap_verdef_out (output_bfd, &def, 5468 (Elf_External_Verdef *) p); 5469 p += sizeof (Elf_External_Verdef); 5470 } 5471 _bfd_elf_swap_verdaux_out (output_bfd, &defaux, 5472 (Elf_External_Verdaux *) p); 5473 p += sizeof (Elf_External_Verdaux); 5474 5475 for (t = verdefs; t != NULL; t = t->next) 5476 { 5477 unsigned int cdeps; 5478 struct bfd_elf_version_deps *n; 5479 5480 cdeps = 0; 5481 for (n = t->deps; n != NULL; n = n->next) 5482 ++cdeps; 5483 5484 /* Add a symbol representing this version. */ 5485 bh = NULL; 5486 if (! (_bfd_generic_link_add_one_symbol 5487 (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr, 5488 0, NULL, FALSE, 5489 get_elf_backend_data (dynobj)->collect, &bh))) 5490 return FALSE; 5491 h = (struct elf_link_hash_entry *) bh; 5492 h->non_elf = 0; 5493 h->def_regular = 1; 5494 h->type = STT_OBJECT; 5495 h->verinfo.vertree = t; 5496 5497 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 5498 return FALSE; 5499 5500 def.vd_version = VER_DEF_CURRENT; 5501 def.vd_flags = 0; 5502 if (t->globals.list == NULL 5503 && t->locals.list == NULL 5504 && ! t->used) 5505 def.vd_flags |= VER_FLG_WEAK; 5506 def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1); 5507 def.vd_cnt = cdeps + 1; 5508 def.vd_hash = bfd_elf_hash (t->name); 5509 def.vd_aux = sizeof (Elf_External_Verdef); 5510 def.vd_next = 0; 5511 if (t->next != NULL) 5512 def.vd_next = (sizeof (Elf_External_Verdef) 5513 + (cdeps + 1) * sizeof (Elf_External_Verdaux)); 5514 5515 _bfd_elf_swap_verdef_out (output_bfd, &def, 5516 (Elf_External_Verdef *) p); 5517 p += sizeof (Elf_External_Verdef); 5518 5519 defaux.vda_name = h->dynstr_index; 5520 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, 5521 h->dynstr_index); 5522 defaux.vda_next = 0; 5523 if (t->deps != NULL) 5524 defaux.vda_next = sizeof (Elf_External_Verdaux); 5525 t->name_indx = defaux.vda_name; 5526 5527 _bfd_elf_swap_verdaux_out (output_bfd, &defaux, 5528 (Elf_External_Verdaux *) p); 5529 p += sizeof (Elf_External_Verdaux); 5530 5531 for (n = t->deps; n != NULL; n = n->next) 5532 { 5533 if (n->version_needed == NULL) 5534 { 5535 /* This can happen if there was an error in the 5536 version script. */ 5537 defaux.vda_name = 0; 5538 } 5539 else 5540 { 5541 defaux.vda_name = n->version_needed->name_indx; 5542 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, 5543 defaux.vda_name); 5544 } 5545 if (n->next == NULL) 5546 defaux.vda_next = 0; 5547 else 5548 defaux.vda_next = sizeof (Elf_External_Verdaux); 5549 5550 _bfd_elf_swap_verdaux_out (output_bfd, &defaux, 5551 (Elf_External_Verdaux *) p); 5552 p += sizeof (Elf_External_Verdaux); 5553 } 5554 } 5555 5556 if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0) 5557 || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs)) 5558 return FALSE; 5559 5560 elf_tdata (output_bfd)->cverdefs = cdefs; 5561 } 5562 5563 if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS)) 5564 { 5565 if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags)) 5566 return FALSE; 5567 } 5568 else if (info->flags & DF_BIND_NOW) 5569 { 5570 if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0)) 5571 return FALSE; 5572 } 5573 5574 if (info->flags_1) 5575 { 5576 if (info->executable) 5577 info->flags_1 &= ~ (DF_1_INITFIRST 5578 | DF_1_NODELETE 5579 | DF_1_NOOPEN); 5580 if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1)) 5581 return FALSE; 5582 } 5583 5584 /* Work out the size of the version reference section. */ 5585 5586 s = bfd_get_section_by_name (dynobj, ".gnu.version_r"); 5587 BFD_ASSERT (s != NULL); 5588 { 5589 struct elf_find_verdep_info sinfo; 5590 5591 sinfo.output_bfd = output_bfd; 5592 sinfo.info = info; 5593 sinfo.vers = elf_tdata (output_bfd)->cverdefs; 5594 if (sinfo.vers == 0) 5595 sinfo.vers = 1; 5596 sinfo.failed = FALSE; 5597 5598 elf_link_hash_traverse (elf_hash_table (info), 5599 _bfd_elf_link_find_version_dependencies, 5600 &sinfo); 5601 5602 if (elf_tdata (output_bfd)->verref == NULL) 5603 s->flags |= SEC_EXCLUDE; 5604 else 5605 { 5606 Elf_Internal_Verneed *t; 5607 unsigned int size; 5608 unsigned int crefs; 5609 bfd_byte *p; 5610 5611 /* Build the version definition section. */ 5612 size = 0; 5613 crefs = 0; 5614 for (t = elf_tdata (output_bfd)->verref; 5615 t != NULL; 5616 t = t->vn_nextref) 5617 { 5618 Elf_Internal_Vernaux *a; 5619 5620 size += sizeof (Elf_External_Verneed); 5621 ++crefs; 5622 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 5623 size += sizeof (Elf_External_Vernaux); 5624 } 5625 5626 s->size = size; 5627 s->contents = bfd_alloc (output_bfd, s->size); 5628 if (s->contents == NULL) 5629 return FALSE; 5630 5631 p = s->contents; 5632 for (t = elf_tdata (output_bfd)->verref; 5633 t != NULL; 5634 t = t->vn_nextref) 5635 { 5636 unsigned int caux; 5637 Elf_Internal_Vernaux *a; 5638 bfd_size_type indx; 5639 5640 caux = 0; 5641 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 5642 ++caux; 5643 5644 t->vn_version = VER_NEED_CURRENT; 5645 t->vn_cnt = caux; 5646 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5647 elf_dt_name (t->vn_bfd) != NULL 5648 ? elf_dt_name (t->vn_bfd) 5649 : lbasename (t->vn_bfd->filename), 5650 FALSE); 5651 if (indx == (bfd_size_type) -1) 5652 return FALSE; 5653 t->vn_file = indx; 5654 t->vn_aux = sizeof (Elf_External_Verneed); 5655 if (t->vn_nextref == NULL) 5656 t->vn_next = 0; 5657 else 5658 t->vn_next = (sizeof (Elf_External_Verneed) 5659 + caux * sizeof (Elf_External_Vernaux)); 5660 5661 _bfd_elf_swap_verneed_out (output_bfd, t, 5662 (Elf_External_Verneed *) p); 5663 p += sizeof (Elf_External_Verneed); 5664 5665 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 5666 { 5667 a->vna_hash = bfd_elf_hash (a->vna_nodename); 5668 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5669 a->vna_nodename, FALSE); 5670 if (indx == (bfd_size_type) -1) 5671 return FALSE; 5672 a->vna_name = indx; 5673 if (a->vna_nextptr == NULL) 5674 a->vna_next = 0; 5675 else 5676 a->vna_next = sizeof (Elf_External_Vernaux); 5677 5678 _bfd_elf_swap_vernaux_out (output_bfd, a, 5679 (Elf_External_Vernaux *) p); 5680 p += sizeof (Elf_External_Vernaux); 5681 } 5682 } 5683 5684 if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0) 5685 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs)) 5686 return FALSE; 5687 5688 elf_tdata (output_bfd)->cverrefs = crefs; 5689 } 5690 } 5691 5692 if ((elf_tdata (output_bfd)->cverrefs == 0 5693 && elf_tdata (output_bfd)->cverdefs == 0) 5694 || _bfd_elf_link_renumber_dynsyms (output_bfd, info, 5695 §ion_sym_count) == 0) 5696 { 5697 s = bfd_get_section_by_name (dynobj, ".gnu.version"); 5698 s->flags |= SEC_EXCLUDE; 5699 } 5700 } 5701 return TRUE; 5702 } 5703 5704 bfd_boolean 5705 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) 5706 { 5707 if (!is_elf_hash_table (info->hash)) 5708 return TRUE; 5709 5710 if (elf_hash_table (info)->dynamic_sections_created) 5711 { 5712 bfd *dynobj; 5713 const struct elf_backend_data *bed; 5714 asection *s; 5715 bfd_size_type dynsymcount; 5716 unsigned long section_sym_count; 5717 size_t bucketcount = 0; 5718 size_t hash_entry_size; 5719 unsigned int dtagcount; 5720 5721 dynobj = elf_hash_table (info)->dynobj; 5722 5723 /* Assign dynsym indicies. In a shared library we generate a 5724 section symbol for each output section, which come first. 5725 Next come all of the back-end allocated local dynamic syms, 5726 followed by the rest of the global symbols. */ 5727 5728 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info, 5729 §ion_sym_count); 5730 5731 /* Work out the size of the symbol version section. */ 5732 s = bfd_get_section_by_name (dynobj, ".gnu.version"); 5733 BFD_ASSERT (s != NULL); 5734 if (dynsymcount != 0 5735 && (s->flags & SEC_EXCLUDE) == 0) 5736 { 5737 s->size = dynsymcount * sizeof (Elf_External_Versym); 5738 s->contents = bfd_zalloc (output_bfd, s->size); 5739 if (s->contents == NULL) 5740 return FALSE; 5741 5742 if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0)) 5743 return FALSE; 5744 } 5745 5746 /* Set the size of the .dynsym and .hash sections. We counted 5747 the number of dynamic symbols in elf_link_add_object_symbols. 5748 We will build the contents of .dynsym and .hash when we build 5749 the final symbol table, because until then we do not know the 5750 correct value to give the symbols. We built the .dynstr 5751 section as we went along in elf_link_add_object_symbols. */ 5752 s = bfd_get_section_by_name (dynobj, ".dynsym"); 5753 BFD_ASSERT (s != NULL); 5754 bed = get_elf_backend_data (output_bfd); 5755 s->size = dynsymcount * bed->s->sizeof_sym; 5756 5757 if (dynsymcount != 0) 5758 { 5759 s->contents = bfd_alloc (output_bfd, s->size); 5760 if (s->contents == NULL) 5761 return FALSE; 5762 5763 /* The first entry in .dynsym is a dummy symbol. 5764 Clear all the section syms, in case we don't output them all. */ 5765 ++section_sym_count; 5766 memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym); 5767 } 5768 5769 /* Compute the size of the hashing table. As a side effect this 5770 computes the hash values for all the names we export. */ 5771 bucketcount = compute_bucket_count (info); 5772 5773 s = bfd_get_section_by_name (dynobj, ".hash"); 5774 BFD_ASSERT (s != NULL); 5775 hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize; 5776 s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size); 5777 s->contents = bfd_zalloc (output_bfd, s->size); 5778 if (s->contents == NULL) 5779 return FALSE; 5780 5781 bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents); 5782 bfd_put (8 * hash_entry_size, output_bfd, dynsymcount, 5783 s->contents + hash_entry_size); 5784 5785 elf_hash_table (info)->bucketcount = bucketcount; 5786 5787 s = bfd_get_section_by_name (dynobj, ".dynstr"); 5788 BFD_ASSERT (s != NULL); 5789 5790 elf_finalize_dynstr (output_bfd, info); 5791 5792 s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 5793 5794 for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount) 5795 if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0)) 5796 return FALSE; 5797 } 5798 5799 return TRUE; 5800 } 5801 5802 /* Final phase of ELF linker. */ 5803 5804 /* A structure we use to avoid passing large numbers of arguments. */ 5805 5806 struct elf_final_link_info 5807 { 5808 /* General link information. */ 5809 struct bfd_link_info *info; 5810 /* Output BFD. */ 5811 bfd *output_bfd; 5812 /* Symbol string table. */ 5813 struct bfd_strtab_hash *symstrtab; 5814 /* .dynsym section. */ 5815 asection *dynsym_sec; 5816 /* .hash section. */ 5817 asection *hash_sec; 5818 /* symbol version section (.gnu.version). */ 5819 asection *symver_sec; 5820 /* Buffer large enough to hold contents of any section. */ 5821 bfd_byte *contents; 5822 /* Buffer large enough to hold external relocs of any section. */ 5823 void *external_relocs; 5824 /* Buffer large enough to hold internal relocs of any section. */ 5825 Elf_Internal_Rela *internal_relocs; 5826 /* Buffer large enough to hold external local symbols of any input 5827 BFD. */ 5828 bfd_byte *external_syms; 5829 /* And a buffer for symbol section indices. */ 5830 Elf_External_Sym_Shndx *locsym_shndx; 5831 /* Buffer large enough to hold internal local symbols of any input 5832 BFD. */ 5833 Elf_Internal_Sym *internal_syms; 5834 /* Array large enough to hold a symbol index for each local symbol 5835 of any input BFD. */ 5836 long *indices; 5837 /* Array large enough to hold a section pointer for each local 5838 symbol of any input BFD. */ 5839 asection **sections; 5840 /* Buffer to hold swapped out symbols. */ 5841 bfd_byte *symbuf; 5842 /* And one for symbol section indices. */ 5843 Elf_External_Sym_Shndx *symshndxbuf; 5844 /* Number of swapped out symbols in buffer. */ 5845 size_t symbuf_count; 5846 /* Number of symbols which fit in symbuf. */ 5847 size_t symbuf_size; 5848 /* And same for symshndxbuf. */ 5849 size_t shndxbuf_size; 5850 }; 5851 5852 /* This struct is used to pass information to elf_link_output_extsym. */ 5853 5854 struct elf_outext_info 5855 { 5856 bfd_boolean failed; 5857 bfd_boolean localsyms; 5858 struct elf_final_link_info *finfo; 5859 }; 5860 5861 /* When performing a relocatable link, the input relocations are 5862 preserved. But, if they reference global symbols, the indices 5863 referenced must be updated. Update all the relocations in 5864 REL_HDR (there are COUNT of them), using the data in REL_HASH. */ 5865 5866 static void 5867 elf_link_adjust_relocs (bfd *abfd, 5868 Elf_Internal_Shdr *rel_hdr, 5869 unsigned int count, 5870 struct elf_link_hash_entry **rel_hash) 5871 { 5872 unsigned int i; 5873 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 5874 bfd_byte *erela; 5875 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); 5876 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 5877 bfd_vma r_type_mask; 5878 int r_sym_shift; 5879 5880 if (rel_hdr->sh_entsize == bed->s->sizeof_rel) 5881 { 5882 swap_in = bed->s->swap_reloc_in; 5883 swap_out = bed->s->swap_reloc_out; 5884 } 5885 else if (rel_hdr->sh_entsize == bed->s->sizeof_rela) 5886 { 5887 swap_in = bed->s->swap_reloca_in; 5888 swap_out = bed->s->swap_reloca_out; 5889 } 5890 else 5891 abort (); 5892 5893 if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL) 5894 abort (); 5895 5896 if (bed->s->arch_size == 32) 5897 { 5898 r_type_mask = 0xff; 5899 r_sym_shift = 8; 5900 } 5901 else 5902 { 5903 r_type_mask = 0xffffffff; 5904 r_sym_shift = 32; 5905 } 5906 5907 erela = rel_hdr->contents; 5908 for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize) 5909 { 5910 Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL]; 5911 unsigned int j; 5912 5913 if (*rel_hash == NULL) 5914 continue; 5915 5916 BFD_ASSERT ((*rel_hash)->indx >= 0); 5917 5918 (*swap_in) (abfd, erela, irela); 5919 for (j = 0; j < bed->s->int_rels_per_ext_rel; j++) 5920 irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift 5921 | (irela[j].r_info & r_type_mask)); 5922 (*swap_out) (abfd, irela, erela); 5923 } 5924 } 5925 5926 struct elf_link_sort_rela 5927 { 5928 union { 5929 bfd_vma offset; 5930 bfd_vma sym_mask; 5931 } u; 5932 enum elf_reloc_type_class type; 5933 /* We use this as an array of size int_rels_per_ext_rel. */ 5934 Elf_Internal_Rela rela[1]; 5935 }; 5936 5937 static int 5938 elf_link_sort_cmp1 (const void *A, const void *B) 5939 { 5940 const struct elf_link_sort_rela *a = A; 5941 const struct elf_link_sort_rela *b = B; 5942 int relativea, relativeb; 5943 5944 relativea = a->type == reloc_class_relative; 5945 relativeb = b->type == reloc_class_relative; 5946 5947 if (relativea < relativeb) 5948 return 1; 5949 if (relativea > relativeb) 5950 return -1; 5951 if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask)) 5952 return -1; 5953 if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask)) 5954 return 1; 5955 if (a->rela->r_offset < b->rela->r_offset) 5956 return -1; 5957 if (a->rela->r_offset > b->rela->r_offset) 5958 return 1; 5959 return 0; 5960 } 5961 5962 static int 5963 elf_link_sort_cmp2 (const void *A, const void *B) 5964 { 5965 const struct elf_link_sort_rela *a = A; 5966 const struct elf_link_sort_rela *b = B; 5967 int copya, copyb; 5968 5969 if (a->u.offset < b->u.offset) 5970 return -1; 5971 if (a->u.offset > b->u.offset) 5972 return 1; 5973 copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt); 5974 copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt); 5975 if (copya < copyb) 5976 return -1; 5977 if (copya > copyb) 5978 return 1; 5979 if (a->rela->r_offset < b->rela->r_offset) 5980 return -1; 5981 if (a->rela->r_offset > b->rela->r_offset) 5982 return 1; 5983 return 0; 5984 } 5985 5986 static size_t 5987 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) 5988 { 5989 asection *reldyn; 5990 bfd_size_type count, size; 5991 size_t i, ret, sort_elt, ext_size; 5992 bfd_byte *sort, *s_non_relative, *p; 5993 struct elf_link_sort_rela *sq; 5994 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 5995 int i2e = bed->s->int_rels_per_ext_rel; 5996 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); 5997 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 5998 struct bfd_link_order *lo; 5999 bfd_vma r_sym_mask; 6000 6001 reldyn = bfd_get_section_by_name (abfd, ".rela.dyn"); 6002 if (reldyn == NULL || reldyn->size == 0) 6003 { 6004 reldyn = bfd_get_section_by_name (abfd, ".rel.dyn"); 6005 if (reldyn == NULL || reldyn->size == 0) 6006 return 0; 6007 ext_size = bed->s->sizeof_rel; 6008 swap_in = bed->s->swap_reloc_in; 6009 swap_out = bed->s->swap_reloc_out; 6010 } 6011 else 6012 { 6013 ext_size = bed->s->sizeof_rela; 6014 swap_in = bed->s->swap_reloca_in; 6015 swap_out = bed->s->swap_reloca_out; 6016 } 6017 count = reldyn->size / ext_size; 6018 6019 size = 0; 6020 for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next) 6021 if (lo->type == bfd_indirect_link_order) 6022 { 6023 asection *o = lo->u.indirect.section; 6024 size += o->size; 6025 } 6026 6027 if (size != reldyn->size) 6028 return 0; 6029 6030 sort_elt = (sizeof (struct elf_link_sort_rela) 6031 + (i2e - 1) * sizeof (Elf_Internal_Rela)); 6032 sort = bfd_zmalloc (sort_elt * count); 6033 if (sort == NULL) 6034 { 6035 (*info->callbacks->warning) 6036 (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0); 6037 return 0; 6038 } 6039 6040 if (bed->s->arch_size == 32) 6041 r_sym_mask = ~(bfd_vma) 0xff; 6042 else 6043 r_sym_mask = ~(bfd_vma) 0xffffffff; 6044 6045 for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next) 6046 if (lo->type == bfd_indirect_link_order) 6047 { 6048 bfd_byte *erel, *erelend; 6049 asection *o = lo->u.indirect.section; 6050 6051 if (o->contents == NULL && o->size != 0) 6052 { 6053 /* This is a reloc section that is being handled as a normal 6054 section. See bfd_section_from_shdr. We can't combine 6055 relocs in this case. */ 6056 free (sort); 6057 return 0; 6058 } 6059 erel = o->contents; 6060 erelend = o->contents + o->size; 6061 p = sort + o->output_offset / ext_size * sort_elt; 6062 while (erel < erelend) 6063 { 6064 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; 6065 (*swap_in) (abfd, erel, s->rela); 6066 s->type = (*bed->elf_backend_reloc_type_class) (s->rela); 6067 s->u.sym_mask = r_sym_mask; 6068 p += sort_elt; 6069 erel += ext_size; 6070 } 6071 } 6072 6073 qsort (sort, count, sort_elt, elf_link_sort_cmp1); 6074 6075 for (i = 0, p = sort; i < count; i++, p += sort_elt) 6076 { 6077 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; 6078 if (s->type != reloc_class_relative) 6079 break; 6080 } 6081 ret = i; 6082 s_non_relative = p; 6083 6084 sq = (struct elf_link_sort_rela *) s_non_relative; 6085 for (; i < count; i++, p += sort_elt) 6086 { 6087 struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p; 6088 if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0) 6089 sq = sp; 6090 sp->u.offset = sq->rela->r_offset; 6091 } 6092 6093 qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2); 6094 6095 for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next) 6096 if (lo->type == bfd_indirect_link_order) 6097 { 6098 bfd_byte *erel, *erelend; 6099 asection *o = lo->u.indirect.section; 6100 6101 erel = o->contents; 6102 erelend = o->contents + o->size; 6103 p = sort + o->output_offset / ext_size * sort_elt; 6104 while (erel < erelend) 6105 { 6106 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; 6107 (*swap_out) (abfd, s->rela, erel); 6108 p += sort_elt; 6109 erel += ext_size; 6110 } 6111 } 6112 6113 free (sort); 6114 *psec = reldyn; 6115 return ret; 6116 } 6117 6118 /* Flush the output symbols to the file. */ 6119 6120 static bfd_boolean 6121 elf_link_flush_output_syms (struct elf_final_link_info *finfo, 6122 const struct elf_backend_data *bed) 6123 { 6124 if (finfo->symbuf_count > 0) 6125 { 6126 Elf_Internal_Shdr *hdr; 6127 file_ptr pos; 6128 bfd_size_type amt; 6129 6130 hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr; 6131 pos = hdr->sh_offset + hdr->sh_size; 6132 amt = finfo->symbuf_count * bed->s->sizeof_sym; 6133 if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0 6134 || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt) 6135 return FALSE; 6136 6137 hdr->sh_size += amt; 6138 finfo->symbuf_count = 0; 6139 } 6140 6141 return TRUE; 6142 } 6143 6144 /* Add a symbol to the output symbol table. */ 6145 6146 static bfd_boolean 6147 elf_link_output_sym (struct elf_final_link_info *finfo, 6148 const char *name, 6149 Elf_Internal_Sym *elfsym, 6150 asection *input_sec, 6151 struct elf_link_hash_entry *h) 6152 { 6153 bfd_byte *dest; 6154 Elf_External_Sym_Shndx *destshndx; 6155 bfd_boolean (*output_symbol_hook) 6156 (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, 6157 struct elf_link_hash_entry *); 6158 const struct elf_backend_data *bed; 6159 6160 bed = get_elf_backend_data (finfo->output_bfd); 6161 output_symbol_hook = bed->elf_backend_link_output_symbol_hook; 6162 if (output_symbol_hook != NULL) 6163 { 6164 if (! (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h)) 6165 return FALSE; 6166 } 6167 6168 if (name == NULL || *name == '\0') 6169 elfsym->st_name = 0; 6170 else if (input_sec->flags & SEC_EXCLUDE) 6171 elfsym->st_name = 0; 6172 else 6173 { 6174 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab, 6175 name, TRUE, FALSE); 6176 if (elfsym->st_name == (unsigned long) -1) 6177 return FALSE; 6178 } 6179 6180 if (finfo->symbuf_count >= finfo->symbuf_size) 6181 { 6182 if (! elf_link_flush_output_syms (finfo, bed)) 6183 return FALSE; 6184 } 6185 6186 dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym; 6187 destshndx = finfo->symshndxbuf; 6188 if (destshndx != NULL) 6189 { 6190 if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size) 6191 { 6192 bfd_size_type amt; 6193 6194 amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx); 6195 finfo->symshndxbuf = destshndx = bfd_realloc (destshndx, amt * 2); 6196 if (destshndx == NULL) 6197 return FALSE; 6198 memset ((char *) destshndx + amt, 0, amt); 6199 finfo->shndxbuf_size *= 2; 6200 } 6201 destshndx += bfd_get_symcount (finfo->output_bfd); 6202 } 6203 6204 bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx); 6205 finfo->symbuf_count += 1; 6206 bfd_get_symcount (finfo->output_bfd) += 1; 6207 6208 return TRUE; 6209 } 6210 6211 /* Return TRUE if the dynamic symbol SYM in ABFD is supported. */ 6212 6213 static bfd_boolean 6214 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym) 6215 { 6216 if (sym->st_shndx > SHN_HIRESERVE) 6217 { 6218 /* The gABI doesn't support dynamic symbols in output sections 6219 beyond 64k. */ 6220 (*_bfd_error_handler) 6221 (_("%B: Too many sections: %d (>= %d)"), 6222 abfd, bfd_count_sections (abfd), SHN_LORESERVE); 6223 bfd_set_error (bfd_error_nonrepresentable_section); 6224 return FALSE; 6225 } 6226 return TRUE; 6227 } 6228 6229 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in 6230 allowing an unsatisfied unversioned symbol in the DSO to match a 6231 versioned symbol that would normally require an explicit version. 6232 We also handle the case that a DSO references a hidden symbol 6233 which may be satisfied by a versioned symbol in another DSO. */ 6234 6235 static bfd_boolean 6236 elf_link_check_versioned_symbol (struct bfd_link_info *info, 6237 const struct elf_backend_data *bed, 6238 struct elf_link_hash_entry *h) 6239 { 6240 bfd *abfd; 6241 struct elf_link_loaded_list *loaded; 6242 6243 if (!is_elf_hash_table (info->hash)) 6244 return FALSE; 6245 6246 switch (h->root.type) 6247 { 6248 default: 6249 abfd = NULL; 6250 break; 6251 6252 case bfd_link_hash_undefined: 6253 case bfd_link_hash_undefweak: 6254 abfd = h->root.u.undef.abfd; 6255 if ((abfd->flags & DYNAMIC) == 0 6256 || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0) 6257 return FALSE; 6258 break; 6259 6260 case bfd_link_hash_defined: 6261 case bfd_link_hash_defweak: 6262 abfd = h->root.u.def.section->owner; 6263 break; 6264 6265 case bfd_link_hash_common: 6266 abfd = h->root.u.c.p->section->owner; 6267 break; 6268 } 6269 BFD_ASSERT (abfd != NULL); 6270 6271 for (loaded = elf_hash_table (info)->loaded; 6272 loaded != NULL; 6273 loaded = loaded->next) 6274 { 6275 bfd *input; 6276 Elf_Internal_Shdr *hdr; 6277 bfd_size_type symcount; 6278 bfd_size_type extsymcount; 6279 bfd_size_type extsymoff; 6280 Elf_Internal_Shdr *versymhdr; 6281 Elf_Internal_Sym *isym; 6282 Elf_Internal_Sym *isymend; 6283 Elf_Internal_Sym *isymbuf; 6284 Elf_External_Versym *ever; 6285 Elf_External_Versym *extversym; 6286 6287 input = loaded->abfd; 6288 6289 /* We check each DSO for a possible hidden versioned definition. */ 6290 if (input == abfd 6291 || (input->flags & DYNAMIC) == 0 6292 || elf_dynversym (input) == 0) 6293 continue; 6294 6295 hdr = &elf_tdata (input)->dynsymtab_hdr; 6296 6297 symcount = hdr->sh_size / bed->s->sizeof_sym; 6298 if (elf_bad_symtab (input)) 6299 { 6300 extsymcount = symcount; 6301 extsymoff = 0; 6302 } 6303 else 6304 { 6305 extsymcount = symcount - hdr->sh_info; 6306 extsymoff = hdr->sh_info; 6307 } 6308 6309 if (extsymcount == 0) 6310 continue; 6311 6312 isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff, 6313 NULL, NULL, NULL); 6314 if (isymbuf == NULL) 6315 return FALSE; 6316 6317 /* Read in any version definitions. */ 6318 versymhdr = &elf_tdata (input)->dynversym_hdr; 6319 extversym = bfd_malloc (versymhdr->sh_size); 6320 if (extversym == NULL) 6321 goto error_ret; 6322 6323 if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0 6324 || (bfd_bread (extversym, versymhdr->sh_size, input) 6325 != versymhdr->sh_size)) 6326 { 6327 free (extversym); 6328 error_ret: 6329 free (isymbuf); 6330 return FALSE; 6331 } 6332 6333 ever = extversym + extsymoff; 6334 isymend = isymbuf + extsymcount; 6335 for (isym = isymbuf; isym < isymend; isym++, ever++) 6336 { 6337 const char *name; 6338 Elf_Internal_Versym iver; 6339 unsigned short version_index; 6340 6341 if (ELF_ST_BIND (isym->st_info) == STB_LOCAL 6342 || isym->st_shndx == SHN_UNDEF) 6343 continue; 6344 6345 name = bfd_elf_string_from_elf_section (input, 6346 hdr->sh_link, 6347 isym->st_name); 6348 if (strcmp (name, h->root.root.string) != 0) 6349 continue; 6350 6351 _bfd_elf_swap_versym_in (input, ever, &iver); 6352 6353 if ((iver.vs_vers & VERSYM_HIDDEN) == 0) 6354 { 6355 /* If we have a non-hidden versioned sym, then it should 6356 have provided a definition for the undefined sym. */ 6357 abort (); 6358 } 6359 6360 version_index = iver.vs_vers & VERSYM_VERSION; 6361 if (version_index == 1 || version_index == 2) 6362 { 6363 /* This is the base or first version. We can use it. */ 6364 free (extversym); 6365 free (isymbuf); 6366 return TRUE; 6367 } 6368 } 6369 6370 free (extversym); 6371 free (isymbuf); 6372 } 6373 6374 return FALSE; 6375 } 6376 6377 /* Add an external symbol to the symbol table. This is called from 6378 the hash table traversal routine. When generating a shared object, 6379 we go through the symbol table twice. The first time we output 6380 anything that might have been forced to local scope in a version 6381 script. The second time we output the symbols that are still 6382 global symbols. */ 6383 6384 static bfd_boolean 6385 elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) 6386 { 6387 struct elf_outext_info *eoinfo = data; 6388 struct elf_final_link_info *finfo = eoinfo->finfo; 6389 bfd_boolean strip; 6390 Elf_Internal_Sym sym; 6391 asection *input_sec; 6392 const struct elf_backend_data *bed; 6393 6394 if (h->root.type == bfd_link_hash_warning) 6395 { 6396 h = (struct elf_link_hash_entry *) h->root.u.i.link; 6397 if (h->root.type == bfd_link_hash_new) 6398 return TRUE; 6399 } 6400 6401 /* Decide whether to output this symbol in this pass. */ 6402 if (eoinfo->localsyms) 6403 { 6404 if (!h->forced_local) 6405 return TRUE; 6406 } 6407 else 6408 { 6409 if (h->forced_local) 6410 return TRUE; 6411 } 6412 6413 bed = get_elf_backend_data (finfo->output_bfd); 6414 6415 if (h->root.type == bfd_link_hash_undefined) 6416 { 6417 /* If we have an undefined symbol reference here then it must have 6418 come from a shared library that is being linked in. (Undefined 6419 references in regular files have already been handled). */ 6420 bfd_boolean ignore_undef = FALSE; 6421 6422 /* Some symbols may be special in that the fact that they're 6423 undefined can be safely ignored - let backend determine that. */ 6424 if (bed->elf_backend_ignore_undef_symbol) 6425 ignore_undef = bed->elf_backend_ignore_undef_symbol (h); 6426 6427 /* If we are reporting errors for this situation then do so now. */ 6428 if (ignore_undef == FALSE 6429 && h->ref_dynamic 6430 && ! h->ref_regular 6431 && ! elf_link_check_versioned_symbol (finfo->info, bed, h) 6432 && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE) 6433 { 6434 if (! (finfo->info->callbacks->undefined_symbol 6435 (finfo->info, h->root.root.string, h->root.u.undef.abfd, 6436 NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR))) 6437 { 6438 eoinfo->failed = TRUE; 6439 return FALSE; 6440 } 6441 } 6442 } 6443 6444 /* We should also warn if a forced local symbol is referenced from 6445 shared libraries. */ 6446 if (! finfo->info->relocatable 6447 && (! finfo->info->shared) 6448 && h->forced_local 6449 && h->ref_dynamic 6450 && !h->dynamic_def 6451 && !h->dynamic_weak 6452 && ! elf_link_check_versioned_symbol (finfo->info, bed, h)) 6453 { 6454 (*_bfd_error_handler) 6455 (_("%B: %s symbol `%s' in %B is referenced by DSO"), 6456 finfo->output_bfd, 6457 h->root.u.def.section == bfd_abs_section_ptr 6458 ? finfo->output_bfd : h->root.u.def.section->owner, 6459 ELF_ST_VISIBILITY (h->other) == STV_INTERNAL 6460 ? "internal" 6461 : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN 6462 ? "hidden" : "local", 6463 h->root.root.string); 6464 eoinfo->failed = TRUE; 6465 return FALSE; 6466 } 6467 6468 /* We don't want to output symbols that have never been mentioned by 6469 a regular file, or that we have been told to strip. However, if 6470 h->indx is set to -2, the symbol is used by a reloc and we must 6471 output it. */ 6472 if (h->indx == -2) 6473 strip = FALSE; 6474 else if ((h->def_dynamic 6475 || h->ref_dynamic 6476 || h->root.type == bfd_link_hash_new) 6477 && !h->def_regular 6478 && !h->ref_regular) 6479 strip = TRUE; 6480 else if (finfo->info->strip == strip_all) 6481 strip = TRUE; 6482 else if (finfo->info->strip == strip_some 6483 && bfd_hash_lookup (finfo->info->keep_hash, 6484 h->root.root.string, FALSE, FALSE) == NULL) 6485 strip = TRUE; 6486 else if (finfo->info->strip_discarded 6487 && (h->root.type == bfd_link_hash_defined 6488 || h->root.type == bfd_link_hash_defweak) 6489 && elf_discarded_section (h->root.u.def.section)) 6490 strip = TRUE; 6491 else 6492 strip = FALSE; 6493 6494 /* If we're stripping it, and it's not a dynamic symbol, there's 6495 nothing else to do unless it is a forced local symbol. */ 6496 if (strip 6497 && h->dynindx == -1 6498 && !h->forced_local) 6499 return TRUE; 6500 6501 sym.st_value = 0; 6502 sym.st_size = h->size; 6503 sym.st_other = h->other; 6504 if (h->forced_local) 6505 sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type); 6506 else if (h->root.type == bfd_link_hash_undefweak 6507 || h->root.type == bfd_link_hash_defweak) 6508 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type); 6509 else 6510 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type); 6511 6512 switch (h->root.type) 6513 { 6514 default: 6515 case bfd_link_hash_new: 6516 case bfd_link_hash_warning: 6517 abort (); 6518 return FALSE; 6519 6520 case bfd_link_hash_undefined: 6521 case bfd_link_hash_undefweak: 6522 input_sec = bfd_und_section_ptr; 6523 sym.st_shndx = SHN_UNDEF; 6524 break; 6525 6526 case bfd_link_hash_defined: 6527 case bfd_link_hash_defweak: 6528 { 6529 input_sec = h->root.u.def.section; 6530 if (input_sec->output_section != NULL) 6531 { 6532 sym.st_shndx = 6533 _bfd_elf_section_from_bfd_section (finfo->output_bfd, 6534 input_sec->output_section); 6535 if (sym.st_shndx == SHN_BAD) 6536 { 6537 (*_bfd_error_handler) 6538 (_("%B: could not find output section %A for input section %A"), 6539 finfo->output_bfd, input_sec->output_section, input_sec); 6540 eoinfo->failed = TRUE; 6541 return FALSE; 6542 } 6543 6544 /* ELF symbols in relocatable files are section relative, 6545 but in nonrelocatable files they are virtual 6546 addresses. */ 6547 sym.st_value = h->root.u.def.value + input_sec->output_offset; 6548 if (! finfo->info->relocatable) 6549 { 6550 sym.st_value += input_sec->output_section->vma; 6551 if (h->type == STT_TLS) 6552 { 6553 /* STT_TLS symbols are relative to PT_TLS segment 6554 base. */ 6555 BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL); 6556 sym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma; 6557 } 6558 } 6559 } 6560 else 6561 { 6562 BFD_ASSERT (input_sec->owner == NULL 6563 || (input_sec->owner->flags & DYNAMIC) != 0); 6564 sym.st_shndx = SHN_UNDEF; 6565 input_sec = bfd_und_section_ptr; 6566 } 6567 } 6568 break; 6569 6570 case bfd_link_hash_common: 6571 input_sec = h->root.u.c.p->section; 6572 sym.st_shndx = bed->common_section_index (input_sec); 6573 sym.st_value = 1 << h->root.u.c.p->alignment_power; 6574 break; 6575 6576 case bfd_link_hash_indirect: 6577 /* These symbols are created by symbol versioning. They point 6578 to the decorated version of the name. For example, if the 6579 symbol foo@@GNU_1.2 is the default, which should be used when 6580 foo is used with no version, then we add an indirect symbol 6581 foo which points to foo@@GNU_1.2. We ignore these symbols, 6582 since the indirected symbol is already in the hash table. */ 6583 return TRUE; 6584 } 6585 6586 /* Give the processor backend a chance to tweak the symbol value, 6587 and also to finish up anything that needs to be done for this 6588 symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for 6589 forced local syms when non-shared is due to a historical quirk. */ 6590 if ((h->dynindx != -1 6591 || h->forced_local) 6592 && ((finfo->info->shared 6593 && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT 6594 || h->root.type != bfd_link_hash_undefweak)) 6595 || !h->forced_local) 6596 && elf_hash_table (finfo->info)->dynamic_sections_created) 6597 { 6598 if (! ((*bed->elf_backend_finish_dynamic_symbol) 6599 (finfo->output_bfd, finfo->info, h, &sym))) 6600 { 6601 eoinfo->failed = TRUE; 6602 return FALSE; 6603 } 6604 } 6605 6606 /* If we are marking the symbol as undefined, and there are no 6607 non-weak references to this symbol from a regular object, then 6608 mark the symbol as weak undefined; if there are non-weak 6609 references, mark the symbol as strong. We can't do this earlier, 6610 because it might not be marked as undefined until the 6611 finish_dynamic_symbol routine gets through with it. */ 6612 if (sym.st_shndx == SHN_UNDEF 6613 && h->ref_regular 6614 && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL 6615 || ELF_ST_BIND (sym.st_info) == STB_WEAK)) 6616 { 6617 int bindtype; 6618 6619 if (h->ref_regular_nonweak) 6620 bindtype = STB_GLOBAL; 6621 else 6622 bindtype = STB_WEAK; 6623 sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info)); 6624 } 6625 6626 /* If a non-weak symbol with non-default visibility is not defined 6627 locally, it is a fatal error. */ 6628 if (! finfo->info->relocatable 6629 && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT 6630 && ELF_ST_BIND (sym.st_info) != STB_WEAK 6631 && h->root.type == bfd_link_hash_undefined 6632 && !h->def_regular) 6633 { 6634 (*_bfd_error_handler) 6635 (_("%B: %s symbol `%s' isn't defined"), 6636 finfo->output_bfd, 6637 ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED 6638 ? "protected" 6639 : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL 6640 ? "internal" : "hidden", 6641 h->root.root.string); 6642 eoinfo->failed = TRUE; 6643 return FALSE; 6644 } 6645 6646 /* If this symbol should be put in the .dynsym section, then put it 6647 there now. We already know the symbol index. We also fill in 6648 the entry in the .hash section. */ 6649 if (h->dynindx != -1 6650 && elf_hash_table (finfo->info)->dynamic_sections_created) 6651 { 6652 size_t bucketcount; 6653 size_t bucket; 6654 size_t hash_entry_size; 6655 bfd_byte *bucketpos; 6656 bfd_vma chain; 6657 bfd_byte *esym; 6658 6659 sym.st_name = h->dynstr_index; 6660 esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym; 6661 if (! check_dynsym (finfo->output_bfd, &sym)) 6662 { 6663 eoinfo->failed = TRUE; 6664 return FALSE; 6665 } 6666 bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0); 6667 6668 bucketcount = elf_hash_table (finfo->info)->bucketcount; 6669 bucket = h->u.elf_hash_value % bucketcount; 6670 hash_entry_size 6671 = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize; 6672 bucketpos = ((bfd_byte *) finfo->hash_sec->contents 6673 + (bucket + 2) * hash_entry_size); 6674 chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos); 6675 bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos); 6676 bfd_put (8 * hash_entry_size, finfo->output_bfd, chain, 6677 ((bfd_byte *) finfo->hash_sec->contents 6678 + (bucketcount + 2 + h->dynindx) * hash_entry_size)); 6679 6680 if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL) 6681 { 6682 Elf_Internal_Versym iversym; 6683 Elf_External_Versym *eversym; 6684 6685 if (!h->def_regular) 6686 { 6687 if (h->verinfo.verdef == NULL) 6688 iversym.vs_vers = 0; 6689 else 6690 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1; 6691 } 6692 else 6693 { 6694 if (h->verinfo.vertree == NULL) 6695 iversym.vs_vers = 1; 6696 else 6697 iversym.vs_vers = h->verinfo.vertree->vernum + 1; 6698 if (finfo->info->create_default_symver) 6699 iversym.vs_vers++; 6700 } 6701 6702 if (h->hidden) 6703 iversym.vs_vers |= VERSYM_HIDDEN; 6704 6705 eversym = (Elf_External_Versym *) finfo->symver_sec->contents; 6706 eversym += h->dynindx; 6707 _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym); 6708 } 6709 } 6710 6711 /* If we're stripping it, then it was just a dynamic symbol, and 6712 there's nothing else to do. */ 6713 if (strip || (input_sec->flags & SEC_EXCLUDE) != 0) 6714 return TRUE; 6715 6716 h->indx = bfd_get_symcount (finfo->output_bfd); 6717 6718 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h)) 6719 { 6720 eoinfo->failed = TRUE; 6721 return FALSE; 6722 } 6723 6724 return TRUE; 6725 } 6726 6727 /* Return TRUE if special handling is done for relocs in SEC against 6728 symbols defined in discarded sections. */ 6729 6730 static bfd_boolean 6731 elf_section_ignore_discarded_relocs (asection *sec) 6732 { 6733 const struct elf_backend_data *bed; 6734 6735 switch (sec->sec_info_type) 6736 { 6737 case ELF_INFO_TYPE_STABS: 6738 case ELF_INFO_TYPE_EH_FRAME: 6739 return TRUE; 6740 default: 6741 break; 6742 } 6743 6744 bed = get_elf_backend_data (sec->owner); 6745 if (bed->elf_backend_ignore_discarded_relocs != NULL 6746 && (*bed->elf_backend_ignore_discarded_relocs) (sec)) 6747 return TRUE; 6748 6749 return FALSE; 6750 } 6751 6752 /* Return a mask saying how ld should treat relocations in SEC against 6753 symbols defined in discarded sections. If this function returns 6754 COMPLAIN set, ld will issue a warning message. If this function 6755 returns PRETEND set, and the discarded section was link-once and the 6756 same size as the kept link-once section, ld will pretend that the 6757 symbol was actually defined in the kept section. Otherwise ld will 6758 zero the reloc (at least that is the intent, but some cooperation by 6759 the target dependent code is needed, particularly for REL targets). */ 6760 6761 unsigned int 6762 _bfd_elf_default_action_discarded (asection *sec) 6763 { 6764 if (sec->flags & SEC_DEBUGGING) 6765 return PRETEND; 6766 6767 if (strcmp (".eh_frame", sec->name) == 0) 6768 return 0; 6769 6770 if (strcmp (".gcc_except_table", sec->name) == 0) 6771 return 0; 6772 6773 return COMPLAIN | PRETEND; 6774 } 6775 6776 /* Find a match between a section and a member of a section group. */ 6777 6778 static asection * 6779 match_group_member (asection *sec, asection *group) 6780 { 6781 asection *first = elf_next_in_group (group); 6782 asection *s = first; 6783 6784 while (s != NULL) 6785 { 6786 if (bfd_elf_match_symbols_in_sections (s, sec)) 6787 return s; 6788 6789 s = elf_next_in_group (s); 6790 if (s == first) 6791 break; 6792 } 6793 6794 return NULL; 6795 } 6796 6797 /* Check if the kept section of a discarded section SEC can be used 6798 to replace it. Return the replacement if it is OK. Otherwise return 6799 NULL. */ 6800 6801 asection * 6802 _bfd_elf_check_kept_section (asection *sec) 6803 { 6804 asection *kept; 6805 6806 kept = sec->kept_section; 6807 if (kept != NULL) 6808 { 6809 if (elf_sec_group (sec) != NULL) 6810 kept = match_group_member (sec, kept); 6811 if (kept != NULL && sec->size != kept->size) 6812 kept = NULL; 6813 } 6814 return kept; 6815 } 6816 6817 /* Link an input file into the linker output file. This function 6818 handles all the sections and relocations of the input file at once. 6819 This is so that we only have to read the local symbols once, and 6820 don't have to keep them in memory. */ 6821 6822 static bfd_boolean 6823 elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) 6824 { 6825 bfd_boolean (*relocate_section) 6826 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, 6827 Elf_Internal_Rela *, Elf_Internal_Sym *, asection **); 6828 bfd *output_bfd; 6829 Elf_Internal_Shdr *symtab_hdr; 6830 size_t locsymcount; 6831 size_t extsymoff; 6832 Elf_Internal_Sym *isymbuf; 6833 Elf_Internal_Sym *isym; 6834 Elf_Internal_Sym *isymend; 6835 long *pindex; 6836 asection **ppsection; 6837 asection *o; 6838 const struct elf_backend_data *bed; 6839 bfd_boolean emit_relocs; 6840 struct elf_link_hash_entry **sym_hashes; 6841 6842 output_bfd = finfo->output_bfd; 6843 bed = get_elf_backend_data (output_bfd); 6844 relocate_section = bed->elf_backend_relocate_section; 6845 6846 /* If this is a dynamic object, we don't want to do anything here: 6847 we don't want the local symbols, and we don't want the section 6848 contents. */ 6849 if ((input_bfd->flags & DYNAMIC) != 0) 6850 return TRUE; 6851 6852 emit_relocs = (finfo->info->relocatable 6853 || finfo->info->emitrelocations); 6854 6855 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 6856 if (elf_bad_symtab (input_bfd)) 6857 { 6858 locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; 6859 extsymoff = 0; 6860 } 6861 else 6862 { 6863 locsymcount = symtab_hdr->sh_info; 6864 extsymoff = symtab_hdr->sh_info; 6865 } 6866 6867 /* Read the local symbols. */ 6868 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 6869 if (isymbuf == NULL && locsymcount != 0) 6870 { 6871 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, 6872 finfo->internal_syms, 6873 finfo->external_syms, 6874 finfo->locsym_shndx); 6875 if (isymbuf == NULL) 6876 return FALSE; 6877 } 6878 6879 /* Find local symbol sections and adjust values of symbols in 6880 SEC_MERGE sections. Write out those local symbols we know are 6881 going into the output file. */ 6882 isymend = isymbuf + locsymcount; 6883 for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections; 6884 isym < isymend; 6885 isym++, pindex++, ppsection++) 6886 { 6887 asection *isec; 6888 const char *name; 6889 Elf_Internal_Sym osym; 6890 6891 *pindex = -1; 6892 6893 if (elf_bad_symtab (input_bfd)) 6894 { 6895 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL) 6896 { 6897 *ppsection = NULL; 6898 continue; 6899 } 6900 } 6901 6902 if (isym->st_shndx == SHN_UNDEF) 6903 isec = bfd_und_section_ptr; 6904 else if (isym->st_shndx < SHN_LORESERVE 6905 || isym->st_shndx > SHN_HIRESERVE) 6906 { 6907 isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx); 6908 if (isec 6909 && isec->sec_info_type == ELF_INFO_TYPE_MERGE 6910 && ELF_ST_TYPE (isym->st_info) != STT_SECTION) 6911 isym->st_value = 6912 _bfd_merged_section_offset (output_bfd, &isec, 6913 elf_section_data (isec)->sec_info, 6914 isym->st_value); 6915 } 6916 else if (isym->st_shndx == SHN_ABS) 6917 isec = bfd_abs_section_ptr; 6918 else if (isym->st_shndx == SHN_COMMON) 6919 isec = bfd_com_section_ptr; 6920 else 6921 { 6922 /* Don't attempt to output symbols with st_shnx in the 6923 reserved range other than SHN_ABS and SHN_COMMON. */ 6924 *ppsection = NULL; 6925 continue; 6926 } 6927 6928 *ppsection = isec; 6929 6930 /* Don't output the first, undefined, symbol. */ 6931 if (ppsection == finfo->sections) 6932 continue; 6933 6934 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) 6935 { 6936 /* We never output section symbols. Instead, we use the 6937 section symbol of the corresponding section in the output 6938 file. */ 6939 continue; 6940 } 6941 6942 /* If we are stripping all symbols, we don't want to output this 6943 one. */ 6944 if (finfo->info->strip == strip_all) 6945 continue; 6946 6947 /* If we are discarding all local symbols, we don't want to 6948 output this one. If we are generating a relocatable output 6949 file, then some of the local symbols may be required by 6950 relocs; we output them below as we discover that they are 6951 needed. */ 6952 if (finfo->info->discard == discard_all) 6953 continue; 6954 6955 /* If this symbol is defined in a section which we are 6956 discarding, we don't need to keep it. */ 6957 if (isym->st_shndx != SHN_UNDEF 6958 && (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) 6959 && (isec == NULL 6960 || bfd_section_removed_from_list (output_bfd, 6961 isec->output_section))) 6962 continue; 6963 6964 /* Get the name of the symbol. */ 6965 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, 6966 isym->st_name); 6967 if (name == NULL) 6968 return FALSE; 6969 6970 /* See if we are discarding symbols with this name. */ 6971 if ((finfo->info->strip == strip_some 6972 && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE) 6973 == NULL)) 6974 || (((finfo->info->discard == discard_sec_merge 6975 && (isec->flags & SEC_MERGE) && ! finfo->info->relocatable) 6976 || finfo->info->discard == discard_l) 6977 && bfd_is_local_label_name (input_bfd, name))) 6978 continue; 6979 6980 /* If we get here, we are going to output this symbol. */ 6981 6982 osym = *isym; 6983 6984 /* Adjust the section index for the output file. */ 6985 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, 6986 isec->output_section); 6987 if (osym.st_shndx == SHN_BAD) 6988 return FALSE; 6989 6990 *pindex = bfd_get_symcount (output_bfd); 6991 6992 /* ELF symbols in relocatable files are section relative, but 6993 in executable files they are virtual addresses. Note that 6994 this code assumes that all ELF sections have an associated 6995 BFD section with a reasonable value for output_offset; below 6996 we assume that they also have a reasonable value for 6997 output_section. Any special sections must be set up to meet 6998 these requirements. */ 6999 osym.st_value += isec->output_offset; 7000 if (! finfo->info->relocatable) 7001 { 7002 osym.st_value += isec->output_section->vma; 7003 if (ELF_ST_TYPE (osym.st_info) == STT_TLS) 7004 { 7005 /* STT_TLS symbols are relative to PT_TLS segment base. */ 7006 BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL); 7007 osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma; 7008 } 7009 } 7010 7011 if (! elf_link_output_sym (finfo, name, &osym, isec, NULL)) 7012 return FALSE; 7013 } 7014 7015 /* Relocate the contents of each section. */ 7016 sym_hashes = elf_sym_hashes (input_bfd); 7017 for (o = input_bfd->sections; o != NULL; o = o->next) 7018 { 7019 bfd_byte *contents; 7020 7021 if (! o->linker_mark) 7022 { 7023 /* This section was omitted from the link. */ 7024 continue; 7025 } 7026 7027 if ((o->flags & SEC_HAS_CONTENTS) == 0 7028 || (o->size == 0 && (o->flags & SEC_RELOC) == 0)) 7029 continue; 7030 7031 if ((o->flags & SEC_LINKER_CREATED) != 0) 7032 { 7033 /* Section was created by _bfd_elf_link_create_dynamic_sections 7034 or somesuch. */ 7035 continue; 7036 } 7037 7038 /* Get the contents of the section. They have been cached by a 7039 relaxation routine. Note that o is a section in an input 7040 file, so the contents field will not have been set by any of 7041 the routines which work on output files. */ 7042 if (elf_section_data (o)->this_hdr.contents != NULL) 7043 contents = elf_section_data (o)->this_hdr.contents; 7044 else 7045 { 7046 bfd_size_type amt = o->rawsize ? o->rawsize : o->size; 7047 7048 contents = finfo->contents; 7049 if (! bfd_get_section_contents (input_bfd, o, contents, 0, amt)) 7050 return FALSE; 7051 } 7052 7053 if ((o->flags & SEC_RELOC) != 0) 7054 { 7055 Elf_Internal_Rela *internal_relocs; 7056 bfd_vma r_type_mask; 7057 int r_sym_shift; 7058 7059 /* Get the swapped relocs. */ 7060 internal_relocs 7061 = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs, 7062 finfo->internal_relocs, FALSE); 7063 if (internal_relocs == NULL 7064 && o->reloc_count > 0) 7065 return FALSE; 7066 7067 if (bed->s->arch_size == 32) 7068 { 7069 r_type_mask = 0xff; 7070 r_sym_shift = 8; 7071 } 7072 else 7073 { 7074 r_type_mask = 0xffffffff; 7075 r_sym_shift = 32; 7076 } 7077 7078 /* Run through the relocs looking for any against symbols 7079 from discarded sections and section symbols from 7080 removed link-once sections. Complain about relocs 7081 against discarded sections. Zero relocs against removed 7082 link-once sections. */ 7083 if (!elf_section_ignore_discarded_relocs (o)) 7084 { 7085 Elf_Internal_Rela *rel, *relend; 7086 unsigned int action = (*bed->action_discarded) (o); 7087 7088 rel = internal_relocs; 7089 relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel; 7090 for ( ; rel < relend; rel++) 7091 { 7092 unsigned long r_symndx = rel->r_info >> r_sym_shift; 7093 asection **ps, *sec; 7094 struct elf_link_hash_entry *h = NULL; 7095 const char *sym_name; 7096 7097 if (r_symndx == STN_UNDEF) 7098 continue; 7099 7100 if (r_symndx >= locsymcount 7101 || (elf_bad_symtab (input_bfd) 7102 && finfo->sections[r_symndx] == NULL)) 7103 { 7104 h = sym_hashes[r_symndx - extsymoff]; 7105 7106 /* Badly formatted input files can contain relocs that 7107 reference non-existant symbols. Check here so that 7108 we do not seg fault. */ 7109 if (h == NULL) 7110 { 7111 char buffer [32]; 7112 7113 sprintf_vma (buffer, rel->r_info); 7114 (*_bfd_error_handler) 7115 (_("error: %B contains a reloc (0x%s) for section %A " 7116 "that references a non-existent global symbol"), 7117 input_bfd, o, buffer); 7118 bfd_set_error (bfd_error_bad_value); 7119 return FALSE; 7120 } 7121 7122 while (h->root.type == bfd_link_hash_indirect 7123 || h->root.type == bfd_link_hash_warning) 7124 h = (struct elf_link_hash_entry *) h->root.u.i.link; 7125 7126 if (h->root.type != bfd_link_hash_defined 7127 && h->root.type != bfd_link_hash_defweak) 7128 continue; 7129 7130 ps = &h->root.u.def.section; 7131 sym_name = h->root.root.string; 7132 } 7133 else 7134 { 7135 Elf_Internal_Sym *sym = isymbuf + r_symndx; 7136 ps = &finfo->sections[r_symndx]; 7137 sym_name = bfd_elf_sym_name (input_bfd, 7138 symtab_hdr, 7139 sym, *ps); 7140 } 7141 7142 /* Complain if the definition comes from a 7143 discarded section. */ 7144 if ((sec = *ps) != NULL && elf_discarded_section (sec)) 7145 { 7146 BFD_ASSERT (r_symndx != 0); 7147 if (action & COMPLAIN) 7148 (*finfo->info->callbacks->einfo) 7149 (_("%X`%s' referenced in section `%A' of %B: " 7150 "defined in discarded section `%A' of %B\n"), 7151 sym_name, o, input_bfd, sec, sec->owner); 7152 7153 /* Try to do the best we can to support buggy old 7154 versions of gcc. Pretend that the symbol is 7155 really defined in the kept linkonce section. 7156 FIXME: This is quite broken. Modifying the 7157 symbol here means we will be changing all later 7158 uses of the symbol, not just in this section. */ 7159 if (action & PRETEND) 7160 { 7161 asection *kept; 7162 7163 kept = _bfd_elf_check_kept_section (sec); 7164 if (kept != NULL) 7165 { 7166 *ps = kept; 7167 continue; 7168 } 7169 } 7170 7171 /* Remove the symbol reference from the reloc, but 7172 don't kill the reloc completely. This is so that 7173 a zero value will be written into the section, 7174 which may have non-zero contents put there by the 7175 assembler. Zero in things like an eh_frame fde 7176 pc_begin allows stack unwinders to recognize the 7177 fde as bogus. */ 7178 rel->r_info &= r_type_mask; 7179 rel->r_addend = 0; 7180 } 7181 } 7182 } 7183 7184 /* Relocate the section by invoking a back end routine. 7185 7186 The back end routine is responsible for adjusting the 7187 section contents as necessary, and (if using Rela relocs 7188 and generating a relocatable output file) adjusting the 7189 reloc addend as necessary. 7190 7191 The back end routine does not have to worry about setting 7192 the reloc address or the reloc symbol index. 7193 7194 The back end routine is given a pointer to the swapped in 7195 internal symbols, and can access the hash table entries 7196 for the external symbols via elf_sym_hashes (input_bfd). 7197 7198 When generating relocatable output, the back end routine 7199 must handle STB_LOCAL/STT_SECTION symbols specially. The 7200 output symbol is going to be a section symbol 7201 corresponding to the output section, which will require 7202 the addend to be adjusted. */ 7203 7204 if (! (*relocate_section) (output_bfd, finfo->info, 7205 input_bfd, o, contents, 7206 internal_relocs, 7207 isymbuf, 7208 finfo->sections)) 7209 return FALSE; 7210 7211 if (emit_relocs) 7212 { 7213 Elf_Internal_Rela *irela; 7214 Elf_Internal_Rela *irelaend; 7215 bfd_vma last_offset; 7216 struct elf_link_hash_entry **rel_hash; 7217 struct elf_link_hash_entry **rel_hash_list; 7218 Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2; 7219 unsigned int next_erel; 7220 bfd_boolean rela_normal; 7221 7222 input_rel_hdr = &elf_section_data (o)->rel_hdr; 7223 rela_normal = (bed->rela_normal 7224 && (input_rel_hdr->sh_entsize 7225 == bed->s->sizeof_rela)); 7226 7227 /* Adjust the reloc addresses and symbol indices. */ 7228 7229 irela = internal_relocs; 7230 irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel; 7231 rel_hash = (elf_section_data (o->output_section)->rel_hashes 7232 + elf_section_data (o->output_section)->rel_count 7233 + elf_section_data (o->output_section)->rel_count2); 7234 rel_hash_list = rel_hash; 7235 last_offset = o->output_offset; 7236 if (!finfo->info->relocatable) 7237 last_offset += o->output_section->vma; 7238 for (next_erel = 0; irela < irelaend; irela++, next_erel++) 7239 { 7240 unsigned long r_symndx; 7241 asection *sec; 7242 Elf_Internal_Sym sym; 7243 7244 if (next_erel == bed->s->int_rels_per_ext_rel) 7245 { 7246 rel_hash++; 7247 next_erel = 0; 7248 } 7249 7250 irela->r_offset = _bfd_elf_section_offset (output_bfd, 7251 finfo->info, o, 7252 irela->r_offset); 7253 if (irela->r_offset >= (bfd_vma) -2) 7254 { 7255 /* This is a reloc for a deleted entry or somesuch. 7256 Turn it into an R_*_NONE reloc, at the same 7257 offset as the last reloc. elf_eh_frame.c and 7258 elf_bfd_discard_info rely on reloc offsets 7259 being ordered. */ 7260 irela->r_offset = last_offset; 7261 irela->r_info = 0; 7262 irela->r_addend = 0; 7263 continue; 7264 } 7265 7266 irela->r_offset += o->output_offset; 7267 7268 /* Relocs in an executable have to be virtual addresses. */ 7269 if (!finfo->info->relocatable) 7270 irela->r_offset += o->output_section->vma; 7271 7272 last_offset = irela->r_offset; 7273 7274 r_symndx = irela->r_info >> r_sym_shift; 7275 if (r_symndx == STN_UNDEF) 7276 continue; 7277 7278 if (r_symndx >= locsymcount 7279 || (elf_bad_symtab (input_bfd) 7280 && finfo->sections[r_symndx] == NULL)) 7281 { 7282 struct elf_link_hash_entry *rh; 7283 unsigned long indx; 7284 7285 /* This is a reloc against a global symbol. We 7286 have not yet output all the local symbols, so 7287 we do not know the symbol index of any global 7288 symbol. We set the rel_hash entry for this 7289 reloc to point to the global hash table entry 7290 for this symbol. The symbol index is then 7291 set at the end of bfd_elf_final_link. */ 7292 indx = r_symndx - extsymoff; 7293 rh = elf_sym_hashes (input_bfd)[indx]; 7294 while (rh->root.type == bfd_link_hash_indirect 7295 || rh->root.type == bfd_link_hash_warning) 7296 rh = (struct elf_link_hash_entry *) rh->root.u.i.link; 7297 7298 /* Setting the index to -2 tells 7299 elf_link_output_extsym that this symbol is 7300 used by a reloc. */ 7301 BFD_ASSERT (rh->indx < 0); 7302 rh->indx = -2; 7303 7304 *rel_hash = rh; 7305 7306 continue; 7307 } 7308 7309 /* This is a reloc against a local symbol. */ 7310 7311 *rel_hash = NULL; 7312 sym = isymbuf[r_symndx]; 7313 sec = finfo->sections[r_symndx]; 7314 if (ELF_ST_TYPE (sym.st_info) == STT_SECTION) 7315 { 7316 /* I suppose the backend ought to fill in the 7317 section of any STT_SECTION symbol against a 7318 processor specific section. */ 7319 r_symndx = 0; 7320 if (bfd_is_abs_section (sec)) 7321 ; 7322 else if (sec == NULL || sec->owner == NULL) 7323 { 7324 bfd_set_error (bfd_error_bad_value); 7325 return FALSE; 7326 } 7327 else 7328 { 7329 asection *osec = sec->output_section; 7330 7331 /* If we have discarded a section, the output 7332 section will be the absolute section. In 7333 case of discarded link-once and discarded 7334 SEC_MERGE sections, use the kept section. */ 7335 if (bfd_is_abs_section (osec) 7336 && sec->kept_section != NULL 7337 && sec->kept_section->output_section != NULL) 7338 { 7339 osec = sec->kept_section->output_section; 7340 irela->r_addend -= osec->vma; 7341 } 7342 7343 if (!bfd_is_abs_section (osec)) 7344 { 7345 r_symndx = osec->target_index; 7346 BFD_ASSERT (r_symndx != 0); 7347 } 7348 } 7349 7350 /* Adjust the addend according to where the 7351 section winds up in the output section. */ 7352 if (rela_normal) 7353 irela->r_addend += sec->output_offset; 7354 } 7355 else 7356 { 7357 if (finfo->indices[r_symndx] == -1) 7358 { 7359 unsigned long shlink; 7360 const char *name; 7361 asection *osec; 7362 7363 if (finfo->info->strip == strip_all) 7364 { 7365 /* You can't do ld -r -s. */ 7366 bfd_set_error (bfd_error_invalid_operation); 7367 return FALSE; 7368 } 7369 7370 /* This symbol was skipped earlier, but 7371 since it is needed by a reloc, we 7372 must output it now. */ 7373 shlink = symtab_hdr->sh_link; 7374 name = (bfd_elf_string_from_elf_section 7375 (input_bfd, shlink, sym.st_name)); 7376 if (name == NULL) 7377 return FALSE; 7378 7379 osec = sec->output_section; 7380 sym.st_shndx = 7381 _bfd_elf_section_from_bfd_section (output_bfd, 7382 osec); 7383 if (sym.st_shndx == SHN_BAD) 7384 return FALSE; 7385 7386 sym.st_value += sec->output_offset; 7387 if (! finfo->info->relocatable) 7388 { 7389 sym.st_value += osec->vma; 7390 if (ELF_ST_TYPE (sym.st_info) == STT_TLS) 7391 { 7392 /* STT_TLS symbols are relative to PT_TLS 7393 segment base. */ 7394 BFD_ASSERT (elf_hash_table (finfo->info) 7395 ->tls_sec != NULL); 7396 sym.st_value -= (elf_hash_table (finfo->info) 7397 ->tls_sec->vma); 7398 } 7399 } 7400 7401 finfo->indices[r_symndx] 7402 = bfd_get_symcount (output_bfd); 7403 7404 if (! elf_link_output_sym (finfo, name, &sym, sec, 7405 NULL)) 7406 return FALSE; 7407 } 7408 7409 r_symndx = finfo->indices[r_symndx]; 7410 } 7411 7412 irela->r_info = ((bfd_vma) r_symndx << r_sym_shift 7413 | (irela->r_info & r_type_mask)); 7414 } 7415 7416 /* Swap out the relocs. */ 7417 if (input_rel_hdr->sh_size != 0 7418 && !bed->elf_backend_emit_relocs (output_bfd, o, 7419 input_rel_hdr, 7420 internal_relocs, 7421 rel_hash_list)) 7422 return FALSE; 7423 7424 input_rel_hdr2 = elf_section_data (o)->rel_hdr2; 7425 if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0) 7426 { 7427 internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr) 7428 * bed->s->int_rels_per_ext_rel); 7429 rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr); 7430 if (!bed->elf_backend_emit_relocs (output_bfd, o, 7431 input_rel_hdr2, 7432 internal_relocs, 7433 rel_hash_list)) 7434 return FALSE; 7435 } 7436 } 7437 } 7438 7439 /* Write out the modified section contents. */ 7440 if (bed->elf_backend_write_section 7441 && (*bed->elf_backend_write_section) (output_bfd, o, contents)) 7442 { 7443 /* Section written out. */ 7444 } 7445 else switch (o->sec_info_type) 7446 { 7447 case ELF_INFO_TYPE_STABS: 7448 if (! (_bfd_write_section_stabs 7449 (output_bfd, 7450 &elf_hash_table (finfo->info)->stab_info, 7451 o, &elf_section_data (o)->sec_info, contents))) 7452 return FALSE; 7453 break; 7454 case ELF_INFO_TYPE_MERGE: 7455 if (! _bfd_write_merged_section (output_bfd, o, 7456 elf_section_data (o)->sec_info)) 7457 return FALSE; 7458 break; 7459 case ELF_INFO_TYPE_EH_FRAME: 7460 { 7461 if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info, 7462 o, contents)) 7463 return FALSE; 7464 } 7465 break; 7466 default: 7467 { 7468 if (! (o->flags & SEC_EXCLUDE) 7469 && ! bfd_set_section_contents (output_bfd, o->output_section, 7470 contents, 7471 (file_ptr) o->output_offset, 7472 o->size)) 7473 return FALSE; 7474 } 7475 break; 7476 } 7477 } 7478 7479 return TRUE; 7480 } 7481 7482 /* Generate a reloc when linking an ELF file. This is a reloc 7483 requested by the linker, and does not come from any input file. This 7484 is used to build constructor and destructor tables when linking 7485 with -Ur. */ 7486 7487 static bfd_boolean 7488 elf_reloc_link_order (bfd *output_bfd, 7489 struct bfd_link_info *info, 7490 asection *output_section, 7491 struct bfd_link_order *link_order) 7492 { 7493 reloc_howto_type *howto; 7494 long indx; 7495 bfd_vma offset; 7496 bfd_vma addend; 7497 struct elf_link_hash_entry **rel_hash_ptr; 7498 Elf_Internal_Shdr *rel_hdr; 7499 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 7500 Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL]; 7501 bfd_byte *erel; 7502 unsigned int i; 7503 7504 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc); 7505 if (howto == NULL) 7506 { 7507 bfd_set_error (bfd_error_bad_value); 7508 return FALSE; 7509 } 7510 7511 addend = link_order->u.reloc.p->addend; 7512 7513 /* Figure out the symbol index. */ 7514 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes 7515 + elf_section_data (output_section)->rel_count 7516 + elf_section_data (output_section)->rel_count2); 7517 if (link_order->type == bfd_section_reloc_link_order) 7518 { 7519 indx = link_order->u.reloc.p->u.section->target_index; 7520 BFD_ASSERT (indx != 0); 7521 *rel_hash_ptr = NULL; 7522 } 7523 else 7524 { 7525 struct elf_link_hash_entry *h; 7526 7527 /* Treat a reloc against a defined symbol as though it were 7528 actually against the section. */ 7529 h = ((struct elf_link_hash_entry *) 7530 bfd_wrapped_link_hash_lookup (output_bfd, info, 7531 link_order->u.reloc.p->u.name, 7532 FALSE, FALSE, TRUE)); 7533 if (h != NULL 7534 && (h->root.type == bfd_link_hash_defined 7535 || h->root.type == bfd_link_hash_defweak)) 7536 { 7537 asection *section; 7538 7539 section = h->root.u.def.section; 7540 indx = section->output_section->target_index; 7541 *rel_hash_ptr = NULL; 7542 /* It seems that we ought to add the symbol value to the 7543 addend here, but in practice it has already been added 7544 because it was passed to constructor_callback. */ 7545 addend += section->output_section->vma + section->output_offset; 7546 } 7547 else if (h != NULL) 7548 { 7549 /* Setting the index to -2 tells elf_link_output_extsym that 7550 this symbol is used by a reloc. */ 7551 h->indx = -2; 7552 *rel_hash_ptr = h; 7553 indx = 0; 7554 } 7555 else 7556 { 7557 if (! ((*info->callbacks->unattached_reloc) 7558 (info, link_order->u.reloc.p->u.name, NULL, NULL, 0))) 7559 return FALSE; 7560 indx = 0; 7561 } 7562 } 7563 7564 /* If this is an inplace reloc, we must write the addend into the 7565 object file. */ 7566 if (howto->partial_inplace && addend != 0) 7567 { 7568 bfd_size_type size; 7569 bfd_reloc_status_type rstat; 7570 bfd_byte *buf; 7571 bfd_boolean ok; 7572 const char *sym_name; 7573 7574 size = bfd_get_reloc_size (howto); 7575 buf = bfd_zmalloc (size); 7576 if (buf == NULL) 7577 return FALSE; 7578 rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf); 7579 switch (rstat) 7580 { 7581 case bfd_reloc_ok: 7582 break; 7583 7584 default: 7585 case bfd_reloc_outofrange: 7586 abort (); 7587 7588 case bfd_reloc_overflow: 7589 if (link_order->type == bfd_section_reloc_link_order) 7590 sym_name = bfd_section_name (output_bfd, 7591 link_order->u.reloc.p->u.section); 7592 else 7593 sym_name = link_order->u.reloc.p->u.name; 7594 if (! ((*info->callbacks->reloc_overflow) 7595 (info, NULL, sym_name, howto->name, addend, NULL, 7596 NULL, (bfd_vma) 0))) 7597 { 7598 free (buf); 7599 return FALSE; 7600 } 7601 break; 7602 } 7603 ok = bfd_set_section_contents (output_bfd, output_section, buf, 7604 link_order->offset, size); 7605 free (buf); 7606 if (! ok) 7607 return FALSE; 7608 } 7609 7610 /* The address of a reloc is relative to the section in a 7611 relocatable file, and is a virtual address in an executable 7612 file. */ 7613 offset = link_order->offset; 7614 if (! info->relocatable) 7615 offset += output_section->vma; 7616 7617 for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) 7618 { 7619 irel[i].r_offset = offset; 7620 irel[i].r_info = 0; 7621 irel[i].r_addend = 0; 7622 } 7623 if (bed->s->arch_size == 32) 7624 irel[0].r_info = ELF32_R_INFO (indx, howto->type); 7625 else 7626 irel[0].r_info = ELF64_R_INFO (indx, howto->type); 7627 7628 rel_hdr = &elf_section_data (output_section)->rel_hdr; 7629 erel = rel_hdr->contents; 7630 if (rel_hdr->sh_type == SHT_REL) 7631 { 7632 erel += (elf_section_data (output_section)->rel_count 7633 * bed->s->sizeof_rel); 7634 (*bed->s->swap_reloc_out) (output_bfd, irel, erel); 7635 } 7636 else 7637 { 7638 irel[0].r_addend = addend; 7639 erel += (elf_section_data (output_section)->rel_count 7640 * bed->s->sizeof_rela); 7641 (*bed->s->swap_reloca_out) (output_bfd, irel, erel); 7642 } 7643 7644 ++elf_section_data (output_section)->rel_count; 7645 7646 return TRUE; 7647 } 7648 7649 7650 /* Get the output vma of the section pointed to by the sh_link field. */ 7651 7652 static bfd_vma 7653 elf_get_linked_section_vma (struct bfd_link_order *p) 7654 { 7655 Elf_Internal_Shdr **elf_shdrp; 7656 asection *s; 7657 int elfsec; 7658 7659 s = p->u.indirect.section; 7660 elf_shdrp = elf_elfsections (s->owner); 7661 elfsec = _bfd_elf_section_from_bfd_section (s->owner, s); 7662 elfsec = elf_shdrp[elfsec]->sh_link; 7663 /* PR 290: 7664 The Intel C compiler generates SHT_IA_64_UNWIND with 7665 SHF_LINK_ORDER. But it doesn't set the sh_link or 7666 sh_info fields. Hence we could get the situation 7667 where elfsec is 0. */ 7668 if (elfsec == 0) 7669 { 7670 const struct elf_backend_data *bed 7671 = get_elf_backend_data (s->owner); 7672 if (bed->link_order_error_handler) 7673 bed->link_order_error_handler 7674 (_("%B: warning: sh_link not set for section `%A'"), s->owner, s); 7675 return 0; 7676 } 7677 else 7678 { 7679 s = elf_shdrp[elfsec]->bfd_section; 7680 return s->output_section->vma + s->output_offset; 7681 } 7682 } 7683 7684 7685 /* Compare two sections based on the locations of the sections they are 7686 linked to. Used by elf_fixup_link_order. */ 7687 7688 static int 7689 compare_link_order (const void * a, const void * b) 7690 { 7691 bfd_vma apos; 7692 bfd_vma bpos; 7693 7694 apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a); 7695 bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b); 7696 if (apos < bpos) 7697 return -1; 7698 return apos > bpos; 7699 } 7700 7701 7702 /* Looks for sections with SHF_LINK_ORDER set. Rearranges them into the same 7703 order as their linked sections. Returns false if this could not be done 7704 because an output section includes both ordered and unordered 7705 sections. Ideally we'd do this in the linker proper. */ 7706 7707 static bfd_boolean 7708 elf_fixup_link_order (bfd *abfd, asection *o) 7709 { 7710 int seen_linkorder; 7711 int seen_other; 7712 int n; 7713 struct bfd_link_order *p; 7714 bfd *sub; 7715 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 7716 unsigned elfsec; 7717 struct bfd_link_order **sections; 7718 asection *s, *other_sec, *linkorder_sec; 7719 bfd_vma offset; 7720 7721 other_sec = NULL; 7722 linkorder_sec = NULL; 7723 seen_other = 0; 7724 seen_linkorder = 0; 7725 for (p = o->map_head.link_order; p != NULL; p = p->next) 7726 { 7727 if (p->type == bfd_indirect_link_order) 7728 { 7729 s = p->u.indirect.section; 7730 sub = s->owner; 7731 if (bfd_get_flavour (sub) == bfd_target_elf_flavour 7732 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass 7733 && (elfsec = _bfd_elf_section_from_bfd_section (sub, s)) 7734 && elfsec < elf_numsections (sub) 7735 && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER) 7736 { 7737 seen_linkorder++; 7738 linkorder_sec = s; 7739 } 7740 else 7741 { 7742 seen_other++; 7743 other_sec = s; 7744 } 7745 } 7746 else 7747 seen_other++; 7748 7749 if (seen_other && seen_linkorder) 7750 { 7751 if (other_sec && linkorder_sec) 7752 (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"), 7753 o, linkorder_sec, 7754 linkorder_sec->owner, other_sec, 7755 other_sec->owner); 7756 else 7757 (*_bfd_error_handler) (_("%A has both ordered and unordered sections"), 7758 o); 7759 bfd_set_error (bfd_error_bad_value); 7760 return FALSE; 7761 } 7762 } 7763 7764 if (!seen_linkorder) 7765 return TRUE; 7766 7767 sections = (struct bfd_link_order **) 7768 xmalloc (seen_linkorder * sizeof (struct bfd_link_order *)); 7769 seen_linkorder = 0; 7770 7771 for (p = o->map_head.link_order; p != NULL; p = p->next) 7772 { 7773 sections[seen_linkorder++] = p; 7774 } 7775 /* Sort the input sections in the order of their linked section. */ 7776 qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *), 7777 compare_link_order); 7778 7779 /* Change the offsets of the sections. */ 7780 offset = 0; 7781 for (n = 0; n < seen_linkorder; n++) 7782 { 7783 s = sections[n]->u.indirect.section; 7784 offset &= ~(bfd_vma)((1 << s->alignment_power) - 1); 7785 s->output_offset = offset; 7786 sections[n]->offset = offset; 7787 offset += sections[n]->size; 7788 } 7789 7790 return TRUE; 7791 } 7792 7793 7794 /* Do the final step of an ELF link. */ 7795 7796 bfd_boolean 7797 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) 7798 { 7799 bfd_boolean dynamic; 7800 bfd_boolean emit_relocs; 7801 bfd *dynobj; 7802 struct elf_final_link_info finfo; 7803 register asection *o; 7804 register struct bfd_link_order *p; 7805 register bfd *sub; 7806 bfd_size_type max_contents_size; 7807 bfd_size_type max_external_reloc_size; 7808 bfd_size_type max_internal_reloc_count; 7809 bfd_size_type max_sym_count; 7810 bfd_size_type max_sym_shndx_count; 7811 file_ptr off; 7812 Elf_Internal_Sym elfsym; 7813 unsigned int i; 7814 Elf_Internal_Shdr *symtab_hdr; 7815 Elf_Internal_Shdr *symtab_shndx_hdr; 7816 Elf_Internal_Shdr *symstrtab_hdr; 7817 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 7818 struct elf_outext_info eoinfo; 7819 bfd_boolean merged; 7820 size_t relativecount = 0; 7821 asection *reldyn = 0; 7822 bfd_size_type amt; 7823 7824 if (! is_elf_hash_table (info->hash)) 7825 return FALSE; 7826 7827 if (info->shared) 7828 abfd->flags |= DYNAMIC; 7829 7830 dynamic = elf_hash_table (info)->dynamic_sections_created; 7831 dynobj = elf_hash_table (info)->dynobj; 7832 7833 emit_relocs = (info->relocatable 7834 || info->emitrelocations); 7835 7836 finfo.info = info; 7837 finfo.output_bfd = abfd; 7838 finfo.symstrtab = _bfd_elf_stringtab_init (); 7839 if (finfo.symstrtab == NULL) 7840 return FALSE; 7841 7842 if (! dynamic) 7843 { 7844 finfo.dynsym_sec = NULL; 7845 finfo.hash_sec = NULL; 7846 finfo.symver_sec = NULL; 7847 } 7848 else 7849 { 7850 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym"); 7851 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash"); 7852 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL); 7853 finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version"); 7854 /* Note that it is OK if symver_sec is NULL. */ 7855 } 7856 7857 finfo.contents = NULL; 7858 finfo.external_relocs = NULL; 7859 finfo.internal_relocs = NULL; 7860 finfo.external_syms = NULL; 7861 finfo.locsym_shndx = NULL; 7862 finfo.internal_syms = NULL; 7863 finfo.indices = NULL; 7864 finfo.sections = NULL; 7865 finfo.symbuf = NULL; 7866 finfo.symshndxbuf = NULL; 7867 finfo.symbuf_count = 0; 7868 finfo.shndxbuf_size = 0; 7869 7870 /* Count up the number of relocations we will output for each output 7871 section, so that we know the sizes of the reloc sections. We 7872 also figure out some maximum sizes. */ 7873 max_contents_size = 0; 7874 max_external_reloc_size = 0; 7875 max_internal_reloc_count = 0; 7876 max_sym_count = 0; 7877 max_sym_shndx_count = 0; 7878 merged = FALSE; 7879 for (o = abfd->sections; o != NULL; o = o->next) 7880 { 7881 struct bfd_elf_section_data *esdo = elf_section_data (o); 7882 o->reloc_count = 0; 7883 7884 for (p = o->map_head.link_order; p != NULL; p = p->next) 7885 { 7886 unsigned int reloc_count = 0; 7887 struct bfd_elf_section_data *esdi = NULL; 7888 unsigned int *rel_count1; 7889 7890 if (p->type == bfd_section_reloc_link_order 7891 || p->type == bfd_symbol_reloc_link_order) 7892 reloc_count = 1; 7893 else if (p->type == bfd_indirect_link_order) 7894 { 7895 asection *sec; 7896 7897 sec = p->u.indirect.section; 7898 esdi = elf_section_data (sec); 7899 7900 /* Mark all sections which are to be included in the 7901 link. This will normally be every section. We need 7902 to do this so that we can identify any sections which 7903 the linker has decided to not include. */ 7904 sec->linker_mark = TRUE; 7905 7906 if (sec->flags & SEC_MERGE) 7907 merged = TRUE; 7908 7909 if (info->relocatable || info->emitrelocations) 7910 reloc_count = sec->reloc_count; 7911 else if (bed->elf_backend_count_relocs) 7912 { 7913 Elf_Internal_Rela * relocs; 7914 7915 relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, 7916 info->keep_memory); 7917 7918 reloc_count = (*bed->elf_backend_count_relocs) (sec, relocs); 7919 7920 if (elf_section_data (o)->relocs != relocs) 7921 free (relocs); 7922 } 7923 7924 if (sec->rawsize > max_contents_size) 7925 max_contents_size = sec->rawsize; 7926 if (sec->size > max_contents_size) 7927 max_contents_size = sec->size; 7928 7929 /* We are interested in just local symbols, not all 7930 symbols. */ 7931 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour 7932 && (sec->owner->flags & DYNAMIC) == 0) 7933 { 7934 size_t sym_count; 7935 7936 if (elf_bad_symtab (sec->owner)) 7937 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size 7938 / bed->s->sizeof_sym); 7939 else 7940 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info; 7941 7942 if (sym_count > max_sym_count) 7943 max_sym_count = sym_count; 7944 7945 if (sym_count > max_sym_shndx_count 7946 && elf_symtab_shndx (sec->owner) != 0) 7947 max_sym_shndx_count = sym_count; 7948 7949 if ((sec->flags & SEC_RELOC) != 0) 7950 { 7951 size_t ext_size; 7952 7953 ext_size = elf_section_data (sec)->rel_hdr.sh_size; 7954 if (ext_size > max_external_reloc_size) 7955 max_external_reloc_size = ext_size; 7956 if (sec->reloc_count > max_internal_reloc_count) 7957 max_internal_reloc_count = sec->reloc_count; 7958 } 7959 } 7960 } 7961 7962 if (reloc_count == 0) 7963 continue; 7964 7965 o->reloc_count += reloc_count; 7966 7967 /* MIPS may have a mix of REL and RELA relocs on sections. 7968 To support this curious ABI we keep reloc counts in 7969 elf_section_data too. We must be careful to add the 7970 relocations from the input section to the right output 7971 count. FIXME: Get rid of one count. We have 7972 o->reloc_count == esdo->rel_count + esdo->rel_count2. */ 7973 rel_count1 = &esdo->rel_count; 7974 if (esdi != NULL) 7975 { 7976 bfd_boolean same_size; 7977 bfd_size_type entsize1; 7978 7979 entsize1 = esdi->rel_hdr.sh_entsize; 7980 BFD_ASSERT (entsize1 == bed->s->sizeof_rel 7981 || entsize1 == bed->s->sizeof_rela); 7982 same_size = !o->use_rela_p == (entsize1 == bed->s->sizeof_rel); 7983 7984 if (!same_size) 7985 rel_count1 = &esdo->rel_count2; 7986 7987 if (esdi->rel_hdr2 != NULL) 7988 { 7989 bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize; 7990 unsigned int alt_count; 7991 unsigned int *rel_count2; 7992 7993 BFD_ASSERT (entsize2 != entsize1 7994 && (entsize2 == bed->s->sizeof_rel 7995 || entsize2 == bed->s->sizeof_rela)); 7996 7997 rel_count2 = &esdo->rel_count2; 7998 if (!same_size) 7999 rel_count2 = &esdo->rel_count; 8000 8001 /* The following is probably too simplistic if the 8002 backend counts output relocs unusually. */ 8003 BFD_ASSERT (bed->elf_backend_count_relocs == NULL); 8004 alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2); 8005 *rel_count2 += alt_count; 8006 reloc_count -= alt_count; 8007 } 8008 } 8009 *rel_count1 += reloc_count; 8010 } 8011 8012 if (o->reloc_count > 0) 8013 o->flags |= SEC_RELOC; 8014 else 8015 { 8016 /* Explicitly clear the SEC_RELOC flag. The linker tends to 8017 set it (this is probably a bug) and if it is set 8018 assign_section_numbers will create a reloc section. */ 8019 o->flags &=~ SEC_RELOC; 8020 } 8021 8022 /* If the SEC_ALLOC flag is not set, force the section VMA to 8023 zero. This is done in elf_fake_sections as well, but forcing 8024 the VMA to 0 here will ensure that relocs against these 8025 sections are handled correctly. */ 8026 if ((o->flags & SEC_ALLOC) == 0 8027 && ! o->user_set_vma) 8028 o->vma = 0; 8029 } 8030 8031 if (! info->relocatable && merged) 8032 elf_link_hash_traverse (elf_hash_table (info), 8033 _bfd_elf_link_sec_merge_syms, abfd); 8034 8035 /* Figure out the file positions for everything but the symbol table 8036 and the relocs. We set symcount to force assign_section_numbers 8037 to create a symbol table. */ 8038 bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1; 8039 BFD_ASSERT (! abfd->output_has_begun); 8040 if (! _bfd_elf_compute_section_file_positions (abfd, info)) 8041 goto error_return; 8042 8043 /* Set sizes, and assign file positions for reloc sections. */ 8044 for (o = abfd->sections; o != NULL; o = o->next) 8045 { 8046 if ((o->flags & SEC_RELOC) != 0) 8047 { 8048 if (!(_bfd_elf_link_size_reloc_section 8049 (abfd, &elf_section_data (o)->rel_hdr, o))) 8050 goto error_return; 8051 8052 if (elf_section_data (o)->rel_hdr2 8053 && !(_bfd_elf_link_size_reloc_section 8054 (abfd, elf_section_data (o)->rel_hdr2, o))) 8055 goto error_return; 8056 } 8057 8058 /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them 8059 to count upwards while actually outputting the relocations. */ 8060 elf_section_data (o)->rel_count = 0; 8061 elf_section_data (o)->rel_count2 = 0; 8062 } 8063 8064 _bfd_elf_assign_file_positions_for_relocs (abfd); 8065 8066 /* We have now assigned file positions for all the sections except 8067 .symtab and .strtab. We start the .symtab section at the current 8068 file position, and write directly to it. We build the .strtab 8069 section in memory. */ 8070 bfd_get_symcount (abfd) = 0; 8071 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 8072 /* sh_name is set in prep_headers. */ 8073 symtab_hdr->sh_type = SHT_SYMTAB; 8074 /* sh_flags, sh_addr and sh_size all start off zero. */ 8075 symtab_hdr->sh_entsize = bed->s->sizeof_sym; 8076 /* sh_link is set in assign_section_numbers. */ 8077 /* sh_info is set below. */ 8078 /* sh_offset is set just below. */ 8079 symtab_hdr->sh_addralign = 1 << bed->s->log_file_align; 8080 8081 off = elf_tdata (abfd)->next_file_pos; 8082 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE); 8083 8084 /* Note that at this point elf_tdata (abfd)->next_file_pos is 8085 incorrect. We do not yet know the size of the .symtab section. 8086 We correct next_file_pos below, after we do know the size. */ 8087 8088 /* Allocate a buffer to hold swapped out symbols. This is to avoid 8089 continuously seeking to the right position in the file. */ 8090 if (! info->keep_memory || max_sym_count < 20) 8091 finfo.symbuf_size = 20; 8092 else 8093 finfo.symbuf_size = max_sym_count; 8094 amt = finfo.symbuf_size; 8095 amt *= bed->s->sizeof_sym; 8096 finfo.symbuf = bfd_malloc (amt); 8097 if (finfo.symbuf == NULL) 8098 goto error_return; 8099 if (elf_numsections (abfd) > SHN_LORESERVE) 8100 { 8101 /* Wild guess at number of output symbols. realloc'd as needed. */ 8102 amt = 2 * max_sym_count + elf_numsections (abfd) + 1000; 8103 finfo.shndxbuf_size = amt; 8104 amt *= sizeof (Elf_External_Sym_Shndx); 8105 finfo.symshndxbuf = bfd_zmalloc (amt); 8106 if (finfo.symshndxbuf == NULL) 8107 goto error_return; 8108 } 8109 8110 /* Start writing out the symbol table. The first symbol is always a 8111 dummy symbol. */ 8112 if (info->strip != strip_all 8113 || emit_relocs) 8114 { 8115 elfsym.st_value = 0; 8116 elfsym.st_size = 0; 8117 elfsym.st_info = 0; 8118 elfsym.st_other = 0; 8119 elfsym.st_shndx = SHN_UNDEF; 8120 if (! elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr, 8121 NULL)) 8122 goto error_return; 8123 } 8124 8125 /* Output a symbol for each section. We output these even if we are 8126 discarding local symbols, since they are used for relocs. These 8127 symbols have no names. We store the index of each one in the 8128 index field of the section, so that we can find it again when 8129 outputting relocs. */ 8130 if (info->strip != strip_all 8131 || emit_relocs) 8132 { 8133 elfsym.st_size = 0; 8134 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); 8135 elfsym.st_other = 0; 8136 for (i = 1; i < elf_numsections (abfd); i++) 8137 { 8138 o = bfd_section_from_elf_index (abfd, i); 8139 if (o != NULL) 8140 o->target_index = bfd_get_symcount (abfd); 8141 elfsym.st_shndx = i; 8142 if (info->relocatable || o == NULL) 8143 elfsym.st_value = 0; 8144 else 8145 elfsym.st_value = o->vma; 8146 if (! elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL)) 8147 goto error_return; 8148 if (i == SHN_LORESERVE - 1) 8149 i += SHN_HIRESERVE + 1 - SHN_LORESERVE; 8150 } 8151 } 8152 8153 /* Allocate some memory to hold information read in from the input 8154 files. */ 8155 if (max_contents_size != 0) 8156 { 8157 finfo.contents = bfd_malloc (max_contents_size); 8158 if (finfo.contents == NULL) 8159 goto error_return; 8160 } 8161 8162 if (max_external_reloc_size != 0) 8163 { 8164 finfo.external_relocs = bfd_malloc (max_external_reloc_size); 8165 if (finfo.external_relocs == NULL) 8166 goto error_return; 8167 } 8168 8169 if (max_internal_reloc_count != 0) 8170 { 8171 amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel; 8172 amt *= sizeof (Elf_Internal_Rela); 8173 finfo.internal_relocs = bfd_malloc (amt); 8174 if (finfo.internal_relocs == NULL) 8175 goto error_return; 8176 } 8177 8178 if (max_sym_count != 0) 8179 { 8180 amt = max_sym_count * bed->s->sizeof_sym; 8181 finfo.external_syms = bfd_malloc (amt); 8182 if (finfo.external_syms == NULL) 8183 goto error_return; 8184 8185 amt = max_sym_count * sizeof (Elf_Internal_Sym); 8186 finfo.internal_syms = bfd_malloc (amt); 8187 if (finfo.internal_syms == NULL) 8188 goto error_return; 8189 8190 amt = max_sym_count * sizeof (long); 8191 finfo.indices = bfd_malloc (amt); 8192 if (finfo.indices == NULL) 8193 goto error_return; 8194 8195 amt = max_sym_count * sizeof (asection *); 8196 finfo.sections = bfd_malloc (amt); 8197 if (finfo.sections == NULL) 8198 goto error_return; 8199 } 8200 8201 if (max_sym_shndx_count != 0) 8202 { 8203 amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx); 8204 finfo.locsym_shndx = bfd_malloc (amt); 8205 if (finfo.locsym_shndx == NULL) 8206 goto error_return; 8207 } 8208 8209 if (elf_hash_table (info)->tls_sec) 8210 { 8211 bfd_vma base, end = 0; 8212 asection *sec; 8213 8214 for (sec = elf_hash_table (info)->tls_sec; 8215 sec && (sec->flags & SEC_THREAD_LOCAL); 8216 sec = sec->next) 8217 { 8218 bfd_size_type size = sec->size; 8219 8220 if (size == 0 8221 && (sec->flags & SEC_HAS_CONTENTS) == 0) 8222 { 8223 struct bfd_link_order *o = sec->map_tail.link_order; 8224 if (o != NULL) 8225 size = o->offset + o->size; 8226 } 8227 end = sec->vma + size; 8228 } 8229 base = elf_hash_table (info)->tls_sec->vma; 8230 end = align_power (end, elf_hash_table (info)->tls_sec->alignment_power); 8231 elf_hash_table (info)->tls_size = end - base; 8232 } 8233 8234 /* Reorder SHF_LINK_ORDER sections. */ 8235 for (o = abfd->sections; o != NULL; o = o->next) 8236 { 8237 if (!elf_fixup_link_order (abfd, o)) 8238 return FALSE; 8239 } 8240 8241 /* Since ELF permits relocations to be against local symbols, we 8242 must have the local symbols available when we do the relocations. 8243 Since we would rather only read the local symbols once, and we 8244 would rather not keep them in memory, we handle all the 8245 relocations for a single input file at the same time. 8246 8247 Unfortunately, there is no way to know the total number of local 8248 symbols until we have seen all of them, and the local symbol 8249 indices precede the global symbol indices. This means that when 8250 we are generating relocatable output, and we see a reloc against 8251 a global symbol, we can not know the symbol index until we have 8252 finished examining all the local symbols to see which ones we are 8253 going to output. To deal with this, we keep the relocations in 8254 memory, and don't output them until the end of the link. This is 8255 an unfortunate waste of memory, but I don't see a good way around 8256 it. Fortunately, it only happens when performing a relocatable 8257 link, which is not the common case. FIXME: If keep_memory is set 8258 we could write the relocs out and then read them again; I don't 8259 know how bad the memory loss will be. */ 8260 8261 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 8262 sub->output_has_begun = FALSE; 8263 for (o = abfd->sections; o != NULL; o = o->next) 8264 { 8265 for (p = o->map_head.link_order; p != NULL; p = p->next) 8266 { 8267 if (p->type == bfd_indirect_link_order 8268 && (bfd_get_flavour ((sub = p->u.indirect.section->owner)) 8269 == bfd_target_elf_flavour) 8270 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass) 8271 { 8272 if (! sub->output_has_begun) 8273 { 8274 if (! elf_link_input_bfd (&finfo, sub)) 8275 goto error_return; 8276 sub->output_has_begun = TRUE; 8277 } 8278 } 8279 else if (p->type == bfd_section_reloc_link_order 8280 || p->type == bfd_symbol_reloc_link_order) 8281 { 8282 if (! elf_reloc_link_order (abfd, info, o, p)) 8283 goto error_return; 8284 } 8285 else 8286 { 8287 if (! _bfd_default_link_order (abfd, info, o, p)) 8288 goto error_return; 8289 } 8290 } 8291 } 8292 8293 /* Output any global symbols that got converted to local in a 8294 version script or due to symbol visibility. We do this in a 8295 separate step since ELF requires all local symbols to appear 8296 prior to any global symbols. FIXME: We should only do this if 8297 some global symbols were, in fact, converted to become local. 8298 FIXME: Will this work correctly with the Irix 5 linker? */ 8299 eoinfo.failed = FALSE; 8300 eoinfo.finfo = &finfo; 8301 eoinfo.localsyms = TRUE; 8302 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym, 8303 &eoinfo); 8304 if (eoinfo.failed) 8305 return FALSE; 8306 8307 /* That wrote out all the local symbols. Finish up the symbol table 8308 with the global symbols. Even if we want to strip everything we 8309 can, we still need to deal with those global symbols that got 8310 converted to local in a version script. */ 8311 8312 /* The sh_info field records the index of the first non local symbol. */ 8313 symtab_hdr->sh_info = bfd_get_symcount (abfd); 8314 8315 if (dynamic 8316 && finfo.dynsym_sec->output_section != bfd_abs_section_ptr) 8317 { 8318 Elf_Internal_Sym sym; 8319 bfd_byte *dynsym = finfo.dynsym_sec->contents; 8320 long last_local = 0; 8321 8322 /* Write out the section symbols for the output sections. */ 8323 if (info->shared || elf_hash_table (info)->is_relocatable_executable) 8324 { 8325 asection *s; 8326 8327 sym.st_size = 0; 8328 sym.st_name = 0; 8329 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); 8330 sym.st_other = 0; 8331 8332 for (s = abfd->sections; s != NULL; s = s->next) 8333 { 8334 int indx; 8335 bfd_byte *dest; 8336 long dynindx; 8337 8338 dynindx = elf_section_data (s)->dynindx; 8339 if (dynindx <= 0) 8340 continue; 8341 indx = elf_section_data (s)->this_idx; 8342 BFD_ASSERT (indx > 0); 8343 sym.st_shndx = indx; 8344 if (! check_dynsym (abfd, &sym)) 8345 return FALSE; 8346 sym.st_value = s->vma; 8347 dest = dynsym + dynindx * bed->s->sizeof_sym; 8348 if (last_local < dynindx) 8349 last_local = dynindx; 8350 bed->s->swap_symbol_out (abfd, &sym, dest, 0); 8351 } 8352 } 8353 8354 /* Write out the local dynsyms. */ 8355 if (elf_hash_table (info)->dynlocal) 8356 { 8357 struct elf_link_local_dynamic_entry *e; 8358 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next) 8359 { 8360 asection *s; 8361 bfd_byte *dest; 8362 8363 sym.st_size = e->isym.st_size; 8364 sym.st_other = e->isym.st_other; 8365 8366 /* Copy the internal symbol as is. 8367 Note that we saved a word of storage and overwrote 8368 the original st_name with the dynstr_index. */ 8369 sym = e->isym; 8370 8371 if (e->isym.st_shndx != SHN_UNDEF 8372 && (e->isym.st_shndx < SHN_LORESERVE 8373 || e->isym.st_shndx > SHN_HIRESERVE)) 8374 { 8375 s = bfd_section_from_elf_index (e->input_bfd, 8376 e->isym.st_shndx); 8377 8378 sym.st_shndx = 8379 elf_section_data (s->output_section)->this_idx; 8380 if (! check_dynsym (abfd, &sym)) 8381 return FALSE; 8382 sym.st_value = (s->output_section->vma 8383 + s->output_offset 8384 + e->isym.st_value); 8385 } 8386 8387 if (last_local < e->dynindx) 8388 last_local = e->dynindx; 8389 8390 dest = dynsym + e->dynindx * bed->s->sizeof_sym; 8391 bed->s->swap_symbol_out (abfd, &sym, dest, 0); 8392 } 8393 } 8394 8395 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 8396 last_local + 1; 8397 } 8398 8399 /* We get the global symbols from the hash table. */ 8400 eoinfo.failed = FALSE; 8401 eoinfo.localsyms = FALSE; 8402 eoinfo.finfo = &finfo; 8403 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym, 8404 &eoinfo); 8405 if (eoinfo.failed) 8406 return FALSE; 8407 8408 /* If backend needs to output some symbols not present in the hash 8409 table, do it now. */ 8410 if (bed->elf_backend_output_arch_syms) 8411 { 8412 typedef bfd_boolean (*out_sym_func) 8413 (void *, const char *, Elf_Internal_Sym *, asection *, 8414 struct elf_link_hash_entry *); 8415 8416 if (! ((*bed->elf_backend_output_arch_syms) 8417 (abfd, info, &finfo, (out_sym_func) elf_link_output_sym))) 8418 return FALSE; 8419 } 8420 8421 /* Flush all symbols to the file. */ 8422 if (! elf_link_flush_output_syms (&finfo, bed)) 8423 return FALSE; 8424 8425 /* Now we know the size of the symtab section. */ 8426 off += symtab_hdr->sh_size; 8427 8428 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr; 8429 if (symtab_shndx_hdr->sh_name != 0) 8430 { 8431 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX; 8432 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx); 8433 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx); 8434 amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx); 8435 symtab_shndx_hdr->sh_size = amt; 8436 8437 off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr, 8438 off, TRUE); 8439 8440 if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0 8441 || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt)) 8442 return FALSE; 8443 } 8444 8445 8446 /* Finish up and write out the symbol string table (.strtab) 8447 section. */ 8448 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr; 8449 /* sh_name was set in prep_headers. */ 8450 symstrtab_hdr->sh_type = SHT_STRTAB; 8451 symstrtab_hdr->sh_flags = 0; 8452 symstrtab_hdr->sh_addr = 0; 8453 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab); 8454 symstrtab_hdr->sh_entsize = 0; 8455 symstrtab_hdr->sh_link = 0; 8456 symstrtab_hdr->sh_info = 0; 8457 /* sh_offset is set just below. */ 8458 symstrtab_hdr->sh_addralign = 1; 8459 8460 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE); 8461 elf_tdata (abfd)->next_file_pos = off; 8462 8463 if (bfd_get_symcount (abfd) > 0) 8464 { 8465 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0 8466 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab)) 8467 return FALSE; 8468 } 8469 8470 /* Adjust the relocs to have the correct symbol indices. */ 8471 for (o = abfd->sections; o != NULL; o = o->next) 8472 { 8473 if ((o->flags & SEC_RELOC) == 0) 8474 continue; 8475 8476 elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr, 8477 elf_section_data (o)->rel_count, 8478 elf_section_data (o)->rel_hashes); 8479 if (elf_section_data (o)->rel_hdr2 != NULL) 8480 elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2, 8481 elf_section_data (o)->rel_count2, 8482 (elf_section_data (o)->rel_hashes 8483 + elf_section_data (o)->rel_count)); 8484 8485 /* Set the reloc_count field to 0 to prevent write_relocs from 8486 trying to swap the relocs out itself. */ 8487 o->reloc_count = 0; 8488 } 8489 8490 if (dynamic && info->combreloc && dynobj != NULL) 8491 relativecount = elf_link_sort_relocs (abfd, info, &reldyn); 8492 8493 /* If we are linking against a dynamic object, or generating a 8494 shared library, finish up the dynamic linking information. */ 8495 if (dynamic) 8496 { 8497 bfd_byte *dyncon, *dynconend; 8498 8499 /* Fix up .dynamic entries. */ 8500 o = bfd_get_section_by_name (dynobj, ".dynamic"); 8501 BFD_ASSERT (o != NULL); 8502 8503 dyncon = o->contents; 8504 dynconend = o->contents + o->size; 8505 for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn) 8506 { 8507 Elf_Internal_Dyn dyn; 8508 const char *name; 8509 unsigned int type; 8510 8511 bed->s->swap_dyn_in (dynobj, dyncon, &dyn); 8512 8513 switch (dyn.d_tag) 8514 { 8515 default: 8516 continue; 8517 case DT_NULL: 8518 if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend) 8519 { 8520 switch (elf_section_data (reldyn)->this_hdr.sh_type) 8521 { 8522 case SHT_REL: dyn.d_tag = DT_RELCOUNT; break; 8523 case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break; 8524 default: continue; 8525 } 8526 dyn.d_un.d_val = relativecount; 8527 relativecount = 0; 8528 break; 8529 } 8530 continue; 8531 8532 case DT_INIT: 8533 name = info->init_function; 8534 goto get_sym; 8535 case DT_FINI: 8536 name = info->fini_function; 8537 get_sym: 8538 { 8539 struct elf_link_hash_entry *h; 8540 8541 h = elf_link_hash_lookup (elf_hash_table (info), name, 8542 FALSE, FALSE, TRUE); 8543 if (h != NULL 8544 && (h->root.type == bfd_link_hash_defined 8545 || h->root.type == bfd_link_hash_defweak)) 8546 { 8547 dyn.d_un.d_val = h->root.u.def.value; 8548 o = h->root.u.def.section; 8549 if (o->output_section != NULL) 8550 dyn.d_un.d_val += (o->output_section->vma 8551 + o->output_offset); 8552 else 8553 { 8554 /* The symbol is imported from another shared 8555 library and does not apply to this one. */ 8556 dyn.d_un.d_val = 0; 8557 } 8558 break; 8559 } 8560 } 8561 continue; 8562 8563 case DT_PREINIT_ARRAYSZ: 8564 name = ".preinit_array"; 8565 goto get_size; 8566 case DT_INIT_ARRAYSZ: 8567 name = ".init_array"; 8568 goto get_size; 8569 case DT_FINI_ARRAYSZ: 8570 name = ".fini_array"; 8571 get_size: 8572 o = bfd_get_section_by_name (abfd, name); 8573 if (o == NULL) 8574 { 8575 (*_bfd_error_handler) 8576 (_("%B: could not find output section %s"), abfd, name); 8577 goto error_return; 8578 } 8579 if (o->size == 0) 8580 (*_bfd_error_handler) 8581 (_("warning: %s section has zero size"), name); 8582 dyn.d_un.d_val = o->size; 8583 break; 8584 8585 case DT_PREINIT_ARRAY: 8586 name = ".preinit_array"; 8587 goto get_vma; 8588 case DT_INIT_ARRAY: 8589 name = ".init_array"; 8590 goto get_vma; 8591 case DT_FINI_ARRAY: 8592 name = ".fini_array"; 8593 goto get_vma; 8594 8595 case DT_HASH: 8596 name = ".hash"; 8597 goto get_vma; 8598 case DT_STRTAB: 8599 name = ".dynstr"; 8600 goto get_vma; 8601 case DT_SYMTAB: 8602 name = ".dynsym"; 8603 goto get_vma; 8604 case DT_VERDEF: 8605 name = ".gnu.version_d"; 8606 goto get_vma; 8607 case DT_VERNEED: 8608 name = ".gnu.version_r"; 8609 goto get_vma; 8610 case DT_VERSYM: 8611 name = ".gnu.version"; 8612 get_vma: 8613 o = bfd_get_section_by_name (abfd, name); 8614 if (o == NULL) 8615 { 8616 (*_bfd_error_handler) 8617 (_("%B: could not find output section %s"), abfd, name); 8618 goto error_return; 8619 } 8620 dyn.d_un.d_ptr = o->vma; 8621 break; 8622 8623 case DT_REL: 8624 case DT_RELA: 8625 case DT_RELSZ: 8626 case DT_RELASZ: 8627 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ) 8628 type = SHT_REL; 8629 else 8630 type = SHT_RELA; 8631 dyn.d_un.d_val = 0; 8632 for (i = 1; i < elf_numsections (abfd); i++) 8633 { 8634 Elf_Internal_Shdr *hdr; 8635 8636 hdr = elf_elfsections (abfd)[i]; 8637 if (hdr->sh_type == type 8638 && (hdr->sh_flags & SHF_ALLOC) != 0) 8639 { 8640 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ) 8641 dyn.d_un.d_val += hdr->sh_size; 8642 else 8643 { 8644 if (dyn.d_un.d_val == 0 8645 || hdr->sh_addr < dyn.d_un.d_val) 8646 dyn.d_un.d_val = hdr->sh_addr; 8647 } 8648 } 8649 } 8650 break; 8651 } 8652 bed->s->swap_dyn_out (dynobj, &dyn, dyncon); 8653 } 8654 } 8655 8656 /* If we have created any dynamic sections, then output them. */ 8657 if (dynobj != NULL) 8658 { 8659 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info)) 8660 goto error_return; 8661 8662 /* Check for DT_TEXTREL (late, in case the backend removes it). */ 8663 if (info->warn_shared_textrel && info->shared) 8664 { 8665 bfd_byte *dyncon, *dynconend; 8666 8667 /* Fix up .dynamic entries. */ 8668 o = bfd_get_section_by_name (dynobj, ".dynamic"); 8669 BFD_ASSERT (o != NULL); 8670 8671 dyncon = o->contents; 8672 dynconend = o->contents + o->size; 8673 for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn) 8674 { 8675 Elf_Internal_Dyn dyn; 8676 8677 bed->s->swap_dyn_in (dynobj, dyncon, &dyn); 8678 8679 if (dyn.d_tag == DT_TEXTREL) 8680 { 8681 _bfd_error_handler 8682 (_("warning: creating a DT_TEXTREL in a shared object.")); 8683 break; 8684 } 8685 } 8686 } 8687 8688 for (o = dynobj->sections; o != NULL; o = o->next) 8689 { 8690 if ((o->flags & SEC_HAS_CONTENTS) == 0 8691 || o->size == 0 8692 || o->output_section == bfd_abs_section_ptr) 8693 continue; 8694 if ((o->flags & SEC_LINKER_CREATED) == 0) 8695 { 8696 /* At this point, we are only interested in sections 8697 created by _bfd_elf_link_create_dynamic_sections. */ 8698 continue; 8699 } 8700 if (elf_hash_table (info)->stab_info.stabstr == o) 8701 continue; 8702 if (elf_hash_table (info)->eh_info.hdr_sec == o) 8703 continue; 8704 if ((elf_section_data (o->output_section)->this_hdr.sh_type 8705 != SHT_STRTAB) 8706 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0) 8707 { 8708 if (! bfd_set_section_contents (abfd, o->output_section, 8709 o->contents, 8710 (file_ptr) o->output_offset, 8711 o->size)) 8712 goto error_return; 8713 } 8714 else 8715 { 8716 /* The contents of the .dynstr section are actually in a 8717 stringtab. */ 8718 off = elf_section_data (o->output_section)->this_hdr.sh_offset; 8719 if (bfd_seek (abfd, off, SEEK_SET) != 0 8720 || ! _bfd_elf_strtab_emit (abfd, 8721 elf_hash_table (info)->dynstr)) 8722 goto error_return; 8723 } 8724 } 8725 } 8726 8727 if (info->relocatable) 8728 { 8729 bfd_boolean failed = FALSE; 8730 8731 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed); 8732 if (failed) 8733 goto error_return; 8734 } 8735 8736 /* If we have optimized stabs strings, output them. */ 8737 if (elf_hash_table (info)->stab_info.stabstr != NULL) 8738 { 8739 if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info)) 8740 goto error_return; 8741 } 8742 8743 if (info->eh_frame_hdr) 8744 { 8745 if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info)) 8746 goto error_return; 8747 } 8748 8749 if (finfo.symstrtab != NULL) 8750 _bfd_stringtab_free (finfo.symstrtab); 8751 if (finfo.contents != NULL) 8752 free (finfo.contents); 8753 if (finfo.external_relocs != NULL) 8754 free (finfo.external_relocs); 8755 if (finfo.internal_relocs != NULL) 8756 free (finfo.internal_relocs); 8757 if (finfo.external_syms != NULL) 8758 free (finfo.external_syms); 8759 if (finfo.locsym_shndx != NULL) 8760 free (finfo.locsym_shndx); 8761 if (finfo.internal_syms != NULL) 8762 free (finfo.internal_syms); 8763 if (finfo.indices != NULL) 8764 free (finfo.indices); 8765 if (finfo.sections != NULL) 8766 free (finfo.sections); 8767 if (finfo.symbuf != NULL) 8768 free (finfo.symbuf); 8769 if (finfo.symshndxbuf != NULL) 8770 free (finfo.symshndxbuf); 8771 for (o = abfd->sections; o != NULL; o = o->next) 8772 { 8773 if ((o->flags & SEC_RELOC) != 0 8774 && elf_section_data (o)->rel_hashes != NULL) 8775 free (elf_section_data (o)->rel_hashes); 8776 } 8777 8778 elf_tdata (abfd)->linker = TRUE; 8779 8780 return TRUE; 8781 8782 error_return: 8783 if (finfo.symstrtab != NULL) 8784 _bfd_stringtab_free (finfo.symstrtab); 8785 if (finfo.contents != NULL) 8786 free (finfo.contents); 8787 if (finfo.external_relocs != NULL) 8788 free (finfo.external_relocs); 8789 if (finfo.internal_relocs != NULL) 8790 free (finfo.internal_relocs); 8791 if (finfo.external_syms != NULL) 8792 free (finfo.external_syms); 8793 if (finfo.locsym_shndx != NULL) 8794 free (finfo.locsym_shndx); 8795 if (finfo.internal_syms != NULL) 8796 free (finfo.internal_syms); 8797 if (finfo.indices != NULL) 8798 free (finfo.indices); 8799 if (finfo.sections != NULL) 8800 free (finfo.sections); 8801 if (finfo.symbuf != NULL) 8802 free (finfo.symbuf); 8803 if (finfo.symshndxbuf != NULL) 8804 free (finfo.symshndxbuf); 8805 for (o = abfd->sections; o != NULL; o = o->next) 8806 { 8807 if ((o->flags & SEC_RELOC) != 0 8808 && elf_section_data (o)->rel_hashes != NULL) 8809 free (elf_section_data (o)->rel_hashes); 8810 } 8811 8812 return FALSE; 8813 } 8814 8815 /* Garbage collect unused sections. */ 8816 8817 /* The mark phase of garbage collection. For a given section, mark 8818 it and any sections in this section's group, and all the sections 8819 which define symbols to which it refers. */ 8820 8821 typedef asection * (*gc_mark_hook_fn) 8822 (asection *, struct bfd_link_info *, Elf_Internal_Rela *, 8823 struct elf_link_hash_entry *, Elf_Internal_Sym *); 8824 8825 bfd_boolean 8826 _bfd_elf_gc_mark (struct bfd_link_info *info, 8827 asection *sec, 8828 gc_mark_hook_fn gc_mark_hook) 8829 { 8830 bfd_boolean ret; 8831 bfd_boolean is_eh; 8832 asection *group_sec; 8833 8834 sec->gc_mark = 1; 8835 8836 /* Mark all the sections in the group. */ 8837 group_sec = elf_section_data (sec)->next_in_group; 8838 if (group_sec && !group_sec->gc_mark) 8839 if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook)) 8840 return FALSE; 8841 8842 /* Look through the section relocs. */ 8843 ret = TRUE; 8844 is_eh = strcmp (sec->name, ".eh_frame") == 0; 8845 if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0) 8846 { 8847 Elf_Internal_Rela *relstart, *rel, *relend; 8848 Elf_Internal_Shdr *symtab_hdr; 8849 struct elf_link_hash_entry **sym_hashes; 8850 size_t nlocsyms; 8851 size_t extsymoff; 8852 bfd *input_bfd = sec->owner; 8853 const struct elf_backend_data *bed = get_elf_backend_data (input_bfd); 8854 Elf_Internal_Sym *isym = NULL; 8855 int r_sym_shift; 8856 8857 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 8858 sym_hashes = elf_sym_hashes (input_bfd); 8859 8860 /* Read the local symbols. */ 8861 if (elf_bad_symtab (input_bfd)) 8862 { 8863 nlocsyms = symtab_hdr->sh_size / bed->s->sizeof_sym; 8864 extsymoff = 0; 8865 } 8866 else 8867 extsymoff = nlocsyms = symtab_hdr->sh_info; 8868 8869 isym = (Elf_Internal_Sym *) symtab_hdr->contents; 8870 if (isym == NULL && nlocsyms != 0) 8871 { 8872 isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0, 8873 NULL, NULL, NULL); 8874 if (isym == NULL) 8875 return FALSE; 8876 } 8877 8878 /* Read the relocations. */ 8879 relstart = _bfd_elf_link_read_relocs (input_bfd, sec, NULL, NULL, 8880 info->keep_memory); 8881 if (relstart == NULL) 8882 { 8883 ret = FALSE; 8884 goto out1; 8885 } 8886 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; 8887 8888 if (bed->s->arch_size == 32) 8889 r_sym_shift = 8; 8890 else 8891 r_sym_shift = 32; 8892 8893 for (rel = relstart; rel < relend; rel++) 8894 { 8895 unsigned long r_symndx; 8896 asection *rsec; 8897 struct elf_link_hash_entry *h; 8898 8899 r_symndx = rel->r_info >> r_sym_shift; 8900 if (r_symndx == 0) 8901 continue; 8902 8903 if (r_symndx >= nlocsyms 8904 || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL) 8905 { 8906 h = sym_hashes[r_symndx - extsymoff]; 8907 while (h->root.type == bfd_link_hash_indirect 8908 || h->root.type == bfd_link_hash_warning) 8909 h = (struct elf_link_hash_entry *) h->root.u.i.link; 8910 rsec = (*gc_mark_hook) (sec, info, rel, h, NULL); 8911 } 8912 else 8913 { 8914 rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]); 8915 } 8916 8917 if (rsec && !rsec->gc_mark) 8918 { 8919 if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour) 8920 rsec->gc_mark = 1; 8921 else if (is_eh) 8922 rsec->gc_mark_from_eh = 1; 8923 else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook)) 8924 { 8925 ret = FALSE; 8926 goto out2; 8927 } 8928 } 8929 } 8930 8931 out2: 8932 if (elf_section_data (sec)->relocs != relstart) 8933 free (relstart); 8934 out1: 8935 if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym) 8936 { 8937 if (! info->keep_memory) 8938 free (isym); 8939 else 8940 symtab_hdr->contents = (unsigned char *) isym; 8941 } 8942 } 8943 8944 return ret; 8945 } 8946 8947 /* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */ 8948 8949 struct elf_gc_sweep_symbol_info { 8950 struct bfd_link_info *info; 8951 void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *, 8952 bfd_boolean); 8953 }; 8954 8955 static bfd_boolean 8956 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data) 8957 { 8958 if (h->root.type == bfd_link_hash_warning) 8959 h = (struct elf_link_hash_entry *) h->root.u.i.link; 8960 8961 if ((h->root.type == bfd_link_hash_defined 8962 || h->root.type == bfd_link_hash_defweak) 8963 && !h->root.u.def.section->gc_mark 8964 && !(h->root.u.def.section->owner->flags & DYNAMIC)) 8965 { 8966 struct elf_gc_sweep_symbol_info *inf = data; 8967 (*inf->hide_symbol) (inf->info, h, TRUE); 8968 } 8969 8970 return TRUE; 8971 } 8972 8973 /* The sweep phase of garbage collection. Remove all garbage sections. */ 8974 8975 typedef bfd_boolean (*gc_sweep_hook_fn) 8976 (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); 8977 8978 static bfd_boolean 8979 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info) 8980 { 8981 bfd *sub; 8982 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 8983 gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook; 8984 unsigned long section_sym_count; 8985 struct elf_gc_sweep_symbol_info sweep_info; 8986 8987 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 8988 { 8989 asection *o; 8990 8991 if (bfd_get_flavour (sub) != bfd_target_elf_flavour) 8992 continue; 8993 8994 for (o = sub->sections; o != NULL; o = o->next) 8995 { 8996 /* Keep debug and special sections. */ 8997 if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0 8998 || elf_section_data (o)->this_hdr.sh_type == SHT_NOTE 8999 || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0) 9000 o->gc_mark = 1; 9001 9002 if (o->gc_mark) 9003 continue; 9004 9005 /* Skip sweeping sections already excluded. */ 9006 if (o->flags & SEC_EXCLUDE) 9007 continue; 9008 9009 /* Since this is early in the link process, it is simple 9010 to remove a section from the output. */ 9011 o->flags |= SEC_EXCLUDE; 9012 9013 /* But we also have to update some of the relocation 9014 info we collected before. */ 9015 if (gc_sweep_hook 9016 && (o->flags & SEC_RELOC) != 0 9017 && o->reloc_count > 0 9018 && !bfd_is_abs_section (o->output_section)) 9019 { 9020 Elf_Internal_Rela *internal_relocs; 9021 bfd_boolean r; 9022 9023 internal_relocs 9024 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL, 9025 info->keep_memory); 9026 if (internal_relocs == NULL) 9027 return FALSE; 9028 9029 r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs); 9030 9031 if (elf_section_data (o)->relocs != internal_relocs) 9032 free (internal_relocs); 9033 9034 if (!r) 9035 return FALSE; 9036 } 9037 } 9038 } 9039 9040 /* Remove the symbols that were in the swept sections from the dynamic 9041 symbol table. GCFIXME: Anyone know how to get them out of the 9042 static symbol table as well? */ 9043 sweep_info.info = info; 9044 sweep_info.hide_symbol = bed->elf_backend_hide_symbol; 9045 elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol, 9046 &sweep_info); 9047 9048 _bfd_elf_link_renumber_dynsyms (abfd, info, §ion_sym_count); 9049 return TRUE; 9050 } 9051 9052 /* Propagate collected vtable information. This is called through 9053 elf_link_hash_traverse. */ 9054 9055 static bfd_boolean 9056 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp) 9057 { 9058 if (h->root.type == bfd_link_hash_warning) 9059 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9060 9061 /* Those that are not vtables. */ 9062 if (h->vtable == NULL || h->vtable->parent == NULL) 9063 return TRUE; 9064 9065 /* Those vtables that do not have parents, we cannot merge. */ 9066 if (h->vtable->parent == (struct elf_link_hash_entry *) -1) 9067 return TRUE; 9068 9069 /* If we've already been done, exit. */ 9070 if (h->vtable->used && h->vtable->used[-1]) 9071 return TRUE; 9072 9073 /* Make sure the parent's table is up to date. */ 9074 elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp); 9075 9076 if (h->vtable->used == NULL) 9077 { 9078 /* None of this table's entries were referenced. Re-use the 9079 parent's table. */ 9080 h->vtable->used = h->vtable->parent->vtable->used; 9081 h->vtable->size = h->vtable->parent->vtable->size; 9082 } 9083 else 9084 { 9085 size_t n; 9086 bfd_boolean *cu, *pu; 9087 9088 /* Or the parent's entries into ours. */ 9089 cu = h->vtable->used; 9090 cu[-1] = TRUE; 9091 pu = h->vtable->parent->vtable->used; 9092 if (pu != NULL) 9093 { 9094 const struct elf_backend_data *bed; 9095 unsigned int log_file_align; 9096 9097 bed = get_elf_backend_data (h->root.u.def.section->owner); 9098 log_file_align = bed->s->log_file_align; 9099 n = h->vtable->parent->vtable->size >> log_file_align; 9100 while (n--) 9101 { 9102 if (*pu) 9103 *cu = TRUE; 9104 pu++; 9105 cu++; 9106 } 9107 } 9108 } 9109 9110 return TRUE; 9111 } 9112 9113 static bfd_boolean 9114 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp) 9115 { 9116 asection *sec; 9117 bfd_vma hstart, hend; 9118 Elf_Internal_Rela *relstart, *relend, *rel; 9119 const struct elf_backend_data *bed; 9120 unsigned int log_file_align; 9121 9122 if (h->root.type == bfd_link_hash_warning) 9123 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9124 9125 /* Take care of both those symbols that do not describe vtables as 9126 well as those that are not loaded. */ 9127 if (h->vtable == NULL || h->vtable->parent == NULL) 9128 return TRUE; 9129 9130 BFD_ASSERT (h->root.type == bfd_link_hash_defined 9131 || h->root.type == bfd_link_hash_defweak); 9132 9133 sec = h->root.u.def.section; 9134 hstart = h->root.u.def.value; 9135 hend = hstart + h->size; 9136 9137 relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE); 9138 if (!relstart) 9139 return *(bfd_boolean *) okp = FALSE; 9140 bed = get_elf_backend_data (sec->owner); 9141 log_file_align = bed->s->log_file_align; 9142 9143 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; 9144 9145 for (rel = relstart; rel < relend; ++rel) 9146 if (rel->r_offset >= hstart && rel->r_offset < hend) 9147 { 9148 /* If the entry is in use, do nothing. */ 9149 if (h->vtable->used 9150 && (rel->r_offset - hstart) < h->vtable->size) 9151 { 9152 bfd_vma entry = (rel->r_offset - hstart) >> log_file_align; 9153 if (h->vtable->used[entry]) 9154 continue; 9155 } 9156 /* Otherwise, kill it. */ 9157 rel->r_offset = rel->r_info = rel->r_addend = 0; 9158 } 9159 9160 return TRUE; 9161 } 9162 9163 /* Mark sections containing dynamically referenced symbols. When 9164 building shared libraries, we must assume that any visible symbol is 9165 referenced. */ 9166 9167 bfd_boolean 9168 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf) 9169 { 9170 struct bfd_link_info *info = (struct bfd_link_info *) inf; 9171 9172 if (h->root.type == bfd_link_hash_warning) 9173 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9174 9175 if ((h->root.type == bfd_link_hash_defined 9176 || h->root.type == bfd_link_hash_defweak) 9177 && (h->ref_dynamic 9178 || (!info->executable 9179 && h->def_regular 9180 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL 9181 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN))) 9182 h->root.u.def.section->flags |= SEC_KEEP; 9183 9184 return TRUE; 9185 } 9186 9187 /* Do mark and sweep of unused sections. */ 9188 9189 bfd_boolean 9190 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info) 9191 { 9192 bfd_boolean ok = TRUE; 9193 bfd *sub; 9194 asection * (*gc_mark_hook) 9195 (asection *, struct bfd_link_info *, Elf_Internal_Rela *, 9196 struct elf_link_hash_entry *h, Elf_Internal_Sym *); 9197 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 9198 9199 if (!bed->can_gc_sections 9200 || info->relocatable 9201 || info->emitrelocations 9202 || !is_elf_hash_table (info->hash)) 9203 { 9204 (*_bfd_error_handler)(_("Warning: gc-sections option ignored")); 9205 return TRUE; 9206 } 9207 9208 /* Apply transitive closure to the vtable entry usage info. */ 9209 elf_link_hash_traverse (elf_hash_table (info), 9210 elf_gc_propagate_vtable_entries_used, 9211 &ok); 9212 if (!ok) 9213 return FALSE; 9214 9215 /* Kill the vtable relocations that were not used. */ 9216 elf_link_hash_traverse (elf_hash_table (info), 9217 elf_gc_smash_unused_vtentry_relocs, 9218 &ok); 9219 if (!ok) 9220 return FALSE; 9221 9222 /* Mark dynamically referenced symbols. */ 9223 if (elf_hash_table (info)->dynamic_sections_created) 9224 elf_link_hash_traverse (elf_hash_table (info), 9225 bed->gc_mark_dynamic_ref, 9226 info); 9227 9228 /* Grovel through relocs to find out who stays ... */ 9229 gc_mark_hook = bed->gc_mark_hook; 9230 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 9231 { 9232 asection *o; 9233 9234 if (bfd_get_flavour (sub) != bfd_target_elf_flavour) 9235 continue; 9236 9237 for (o = sub->sections; o != NULL; o = o->next) 9238 if ((o->flags & SEC_KEEP) != 0 && !o->gc_mark) 9239 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook)) 9240 return FALSE; 9241 } 9242 9243 /* ... again for sections marked from eh_frame. */ 9244 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 9245 { 9246 asection *o; 9247 9248 if (bfd_get_flavour (sub) != bfd_target_elf_flavour) 9249 continue; 9250 9251 /* Keep .gcc_except_table.* if the associated .text.* is 9252 marked. This isn't very nice, but the proper solution, 9253 splitting .eh_frame up and using comdat doesn't pan out 9254 easily due to needing special relocs to handle the 9255 difference of two symbols in separate sections. 9256 Don't keep code sections referenced by .eh_frame. */ 9257 for (o = sub->sections; o != NULL; o = o->next) 9258 if (!o->gc_mark && o->gc_mark_from_eh && (o->flags & SEC_CODE) == 0) 9259 { 9260 if (strncmp (o->name, ".gcc_except_table.", 18) == 0) 9261 { 9262 unsigned long len; 9263 char *fn_name; 9264 asection *fn_text; 9265 9266 len = strlen (o->name + 18) + 1; 9267 fn_name = bfd_malloc (len + 6); 9268 if (fn_name == NULL) 9269 return FALSE; 9270 memcpy (fn_name, ".text.", 6); 9271 memcpy (fn_name + 6, o->name + 18, len); 9272 fn_text = bfd_get_section_by_name (sub, fn_name); 9273 free (fn_name); 9274 if (fn_text == NULL || !fn_text->gc_mark) 9275 continue; 9276 } 9277 9278 /* If not using specially named exception table section, 9279 then keep whatever we are using. */ 9280 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook)) 9281 return FALSE; 9282 } 9283 } 9284 9285 /* ... and mark SEC_EXCLUDE for those that go. */ 9286 return elf_gc_sweep (abfd, info); 9287 } 9288 9289 /* Called from check_relocs to record the existence of a VTINHERIT reloc. */ 9290 9291 bfd_boolean 9292 bfd_elf_gc_record_vtinherit (bfd *abfd, 9293 asection *sec, 9294 struct elf_link_hash_entry *h, 9295 bfd_vma offset) 9296 { 9297 struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; 9298 struct elf_link_hash_entry **search, *child; 9299 bfd_size_type extsymcount; 9300 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 9301 9302 /* The sh_info field of the symtab header tells us where the 9303 external symbols start. We don't care about the local symbols at 9304 this point. */ 9305 extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym; 9306 if (!elf_bad_symtab (abfd)) 9307 extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info; 9308 9309 sym_hashes = elf_sym_hashes (abfd); 9310 sym_hashes_end = sym_hashes + extsymcount; 9311 9312 /* Hunt down the child symbol, which is in this section at the same 9313 offset as the relocation. */ 9314 for (search = sym_hashes; search != sym_hashes_end; ++search) 9315 { 9316 if ((child = *search) != NULL 9317 && (child->root.type == bfd_link_hash_defined 9318 || child->root.type == bfd_link_hash_defweak) 9319 && child->root.u.def.section == sec 9320 && child->root.u.def.value == offset) 9321 goto win; 9322 } 9323 9324 (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT", 9325 abfd, sec, (unsigned long) offset); 9326 bfd_set_error (bfd_error_invalid_operation); 9327 return FALSE; 9328 9329 win: 9330 if (!child->vtable) 9331 { 9332 child->vtable = bfd_zalloc (abfd, sizeof (*child->vtable)); 9333 if (!child->vtable) 9334 return FALSE; 9335 } 9336 if (!h) 9337 { 9338 /* This *should* only be the absolute section. It could potentially 9339 be that someone has defined a non-global vtable though, which 9340 would be bad. It isn't worth paging in the local symbols to be 9341 sure though; that case should simply be handled by the assembler. */ 9342 9343 child->vtable->parent = (struct elf_link_hash_entry *) -1; 9344 } 9345 else 9346 child->vtable->parent = h; 9347 9348 return TRUE; 9349 } 9350 9351 /* Called from check_relocs to record the existence of a VTENTRY reloc. */ 9352 9353 bfd_boolean 9354 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED, 9355 asection *sec ATTRIBUTE_UNUSED, 9356 struct elf_link_hash_entry *h, 9357 bfd_vma addend) 9358 { 9359 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 9360 unsigned int log_file_align = bed->s->log_file_align; 9361 9362 if (!h->vtable) 9363 { 9364 h->vtable = bfd_zalloc (abfd, sizeof (*h->vtable)); 9365 if (!h->vtable) 9366 return FALSE; 9367 } 9368 9369 if (addend >= h->vtable->size) 9370 { 9371 size_t size, bytes, file_align; 9372 bfd_boolean *ptr = h->vtable->used; 9373 9374 /* While the symbol is undefined, we have to be prepared to handle 9375 a zero size. */ 9376 file_align = 1 << log_file_align; 9377 if (h->root.type == bfd_link_hash_undefined) 9378 size = addend + file_align; 9379 else 9380 { 9381 size = h->size; 9382 if (addend >= size) 9383 { 9384 /* Oops! We've got a reference past the defined end of 9385 the table. This is probably a bug -- shall we warn? */ 9386 size = addend + file_align; 9387 } 9388 } 9389 size = (size + file_align - 1) & -file_align; 9390 9391 /* Allocate one extra entry for use as a "done" flag for the 9392 consolidation pass. */ 9393 bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean); 9394 9395 if (ptr) 9396 { 9397 ptr = bfd_realloc (ptr - 1, bytes); 9398 9399 if (ptr != NULL) 9400 { 9401 size_t oldbytes; 9402 9403 oldbytes = (((h->vtable->size >> log_file_align) + 1) 9404 * sizeof (bfd_boolean)); 9405 memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes); 9406 } 9407 } 9408 else 9409 ptr = bfd_zmalloc (bytes); 9410 9411 if (ptr == NULL) 9412 return FALSE; 9413 9414 /* And arrange for that done flag to be at index -1. */ 9415 h->vtable->used = ptr + 1; 9416 h->vtable->size = size; 9417 } 9418 9419 h->vtable->used[addend >> log_file_align] = TRUE; 9420 9421 return TRUE; 9422 } 9423 9424 struct alloc_got_off_arg { 9425 bfd_vma gotoff; 9426 unsigned int got_elt_size; 9427 }; 9428 9429 /* We need a special top-level link routine to convert got reference counts 9430 to real got offsets. */ 9431 9432 static bfd_boolean 9433 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg) 9434 { 9435 struct alloc_got_off_arg *gofarg = arg; 9436 9437 if (h->root.type == bfd_link_hash_warning) 9438 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9439 9440 if (h->got.refcount > 0) 9441 { 9442 h->got.offset = gofarg->gotoff; 9443 gofarg->gotoff += gofarg->got_elt_size; 9444 } 9445 else 9446 h->got.offset = (bfd_vma) -1; 9447 9448 return TRUE; 9449 } 9450 9451 /* And an accompanying bit to work out final got entry offsets once 9452 we're done. Should be called from final_link. */ 9453 9454 bfd_boolean 9455 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd, 9456 struct bfd_link_info *info) 9457 { 9458 bfd *i; 9459 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 9460 bfd_vma gotoff; 9461 unsigned int got_elt_size = bed->s->arch_size / 8; 9462 struct alloc_got_off_arg gofarg; 9463 9464 if (! is_elf_hash_table (info->hash)) 9465 return FALSE; 9466 9467 /* The GOT offset is relative to the .got section, but the GOT header is 9468 put into the .got.plt section, if the backend uses it. */ 9469 if (bed->want_got_plt) 9470 gotoff = 0; 9471 else 9472 gotoff = bed->got_header_size; 9473 9474 /* Do the local .got entries first. */ 9475 for (i = info->input_bfds; i; i = i->link_next) 9476 { 9477 bfd_signed_vma *local_got; 9478 bfd_size_type j, locsymcount; 9479 Elf_Internal_Shdr *symtab_hdr; 9480 9481 if (bfd_get_flavour (i) != bfd_target_elf_flavour) 9482 continue; 9483 9484 local_got = elf_local_got_refcounts (i); 9485 if (!local_got) 9486 continue; 9487 9488 symtab_hdr = &elf_tdata (i)->symtab_hdr; 9489 if (elf_bad_symtab (i)) 9490 locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; 9491 else 9492 locsymcount = symtab_hdr->sh_info; 9493 9494 for (j = 0; j < locsymcount; ++j) 9495 { 9496 if (local_got[j] > 0) 9497 { 9498 local_got[j] = gotoff; 9499 gotoff += got_elt_size; 9500 } 9501 else 9502 local_got[j] = (bfd_vma) -1; 9503 } 9504 } 9505 9506 /* Then the global .got entries. .plt refcounts are handled by 9507 adjust_dynamic_symbol */ 9508 gofarg.gotoff = gotoff; 9509 gofarg.got_elt_size = got_elt_size; 9510 elf_link_hash_traverse (elf_hash_table (info), 9511 elf_gc_allocate_got_offsets, 9512 &gofarg); 9513 return TRUE; 9514 } 9515 9516 /* Many folk need no more in the way of final link than this, once 9517 got entry reference counting is enabled. */ 9518 9519 bfd_boolean 9520 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info) 9521 { 9522 if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info)) 9523 return FALSE; 9524 9525 /* Invoke the regular ELF backend linker to do all the work. */ 9526 return bfd_elf_final_link (abfd, info); 9527 } 9528 9529 bfd_boolean 9530 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie) 9531 { 9532 struct elf_reloc_cookie *rcookie = cookie; 9533 9534 if (rcookie->bad_symtab) 9535 rcookie->rel = rcookie->rels; 9536 9537 for (; rcookie->rel < rcookie->relend; rcookie->rel++) 9538 { 9539 unsigned long r_symndx; 9540 9541 if (! rcookie->bad_symtab) 9542 if (rcookie->rel->r_offset > offset) 9543 return FALSE; 9544 if (rcookie->rel->r_offset != offset) 9545 continue; 9546 9547 r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift; 9548 if (r_symndx == SHN_UNDEF) 9549 return TRUE; 9550 9551 if (r_symndx >= rcookie->locsymcount 9552 || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL) 9553 { 9554 struct elf_link_hash_entry *h; 9555 9556 h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff]; 9557 9558 while (h->root.type == bfd_link_hash_indirect 9559 || h->root.type == bfd_link_hash_warning) 9560 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9561 9562 if ((h->root.type == bfd_link_hash_defined 9563 || h->root.type == bfd_link_hash_defweak) 9564 && elf_discarded_section (h->root.u.def.section)) 9565 return TRUE; 9566 else 9567 return FALSE; 9568 } 9569 else 9570 { 9571 /* It's not a relocation against a global symbol, 9572 but it could be a relocation against a local 9573 symbol for a discarded section. */ 9574 asection *isec; 9575 Elf_Internal_Sym *isym; 9576 9577 /* Need to: get the symbol; get the section. */ 9578 isym = &rcookie->locsyms[r_symndx]; 9579 if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) 9580 { 9581 isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx); 9582 if (isec != NULL && elf_discarded_section (isec)) 9583 return TRUE; 9584 } 9585 } 9586 return FALSE; 9587 } 9588 return FALSE; 9589 } 9590 9591 /* Discard unneeded references to discarded sections. 9592 Returns TRUE if any section's size was changed. */ 9593 /* This function assumes that the relocations are in sorted order, 9594 which is true for all known assemblers. */ 9595 9596 bfd_boolean 9597 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info) 9598 { 9599 struct elf_reloc_cookie cookie; 9600 asection *stab, *eh; 9601 Elf_Internal_Shdr *symtab_hdr; 9602 const struct elf_backend_data *bed; 9603 bfd *abfd; 9604 unsigned int count; 9605 bfd_boolean ret = FALSE; 9606 9607 if (info->traditional_format 9608 || !is_elf_hash_table (info->hash)) 9609 return FALSE; 9610 9611 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next) 9612 { 9613 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) 9614 continue; 9615 9616 bed = get_elf_backend_data (abfd); 9617 9618 if ((abfd->flags & DYNAMIC) != 0) 9619 continue; 9620 9621 eh = bfd_get_section_by_name (abfd, ".eh_frame"); 9622 if (info->relocatable 9623 || (eh != NULL 9624 && (eh->size == 0 9625 || bfd_is_abs_section (eh->output_section)))) 9626 eh = NULL; 9627 9628 stab = bfd_get_section_by_name (abfd, ".stab"); 9629 if (stab != NULL 9630 && (stab->size == 0 9631 || bfd_is_abs_section (stab->output_section) 9632 || stab->sec_info_type != ELF_INFO_TYPE_STABS)) 9633 stab = NULL; 9634 9635 if (stab == NULL 9636 && eh == NULL 9637 && bed->elf_backend_discard_info == NULL) 9638 continue; 9639 9640 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 9641 cookie.abfd = abfd; 9642 cookie.sym_hashes = elf_sym_hashes (abfd); 9643 cookie.bad_symtab = elf_bad_symtab (abfd); 9644 if (cookie.bad_symtab) 9645 { 9646 cookie.locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; 9647 cookie.extsymoff = 0; 9648 } 9649 else 9650 { 9651 cookie.locsymcount = symtab_hdr->sh_info; 9652 cookie.extsymoff = symtab_hdr->sh_info; 9653 } 9654 9655 if (bed->s->arch_size == 32) 9656 cookie.r_sym_shift = 8; 9657 else 9658 cookie.r_sym_shift = 32; 9659 9660 cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; 9661 if (cookie.locsyms == NULL && cookie.locsymcount != 0) 9662 { 9663 cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr, 9664 cookie.locsymcount, 0, 9665 NULL, NULL, NULL); 9666 if (cookie.locsyms == NULL) 9667 return FALSE; 9668 } 9669 9670 if (stab != NULL) 9671 { 9672 cookie.rels = NULL; 9673 count = stab->reloc_count; 9674 if (count != 0) 9675 cookie.rels = _bfd_elf_link_read_relocs (abfd, stab, NULL, NULL, 9676 info->keep_memory); 9677 if (cookie.rels != NULL) 9678 { 9679 cookie.rel = cookie.rels; 9680 cookie.relend = cookie.rels; 9681 cookie.relend += count * bed->s->int_rels_per_ext_rel; 9682 if (_bfd_discard_section_stabs (abfd, stab, 9683 elf_section_data (stab)->sec_info, 9684 bfd_elf_reloc_symbol_deleted_p, 9685 &cookie)) 9686 ret = TRUE; 9687 if (elf_section_data (stab)->relocs != cookie.rels) 9688 free (cookie.rels); 9689 } 9690 } 9691 9692 if (eh != NULL) 9693 { 9694 cookie.rels = NULL; 9695 count = eh->reloc_count; 9696 if (count != 0) 9697 cookie.rels = _bfd_elf_link_read_relocs (abfd, eh, NULL, NULL, 9698 info->keep_memory); 9699 cookie.rel = cookie.rels; 9700 cookie.relend = cookie.rels; 9701 if (cookie.rels != NULL) 9702 cookie.relend += count * bed->s->int_rels_per_ext_rel; 9703 9704 if (_bfd_elf_discard_section_eh_frame (abfd, info, eh, 9705 bfd_elf_reloc_symbol_deleted_p, 9706 &cookie)) 9707 ret = TRUE; 9708 9709 if (cookie.rels != NULL 9710 && elf_section_data (eh)->relocs != cookie.rels) 9711 free (cookie.rels); 9712 } 9713 9714 if (bed->elf_backend_discard_info != NULL 9715 && (*bed->elf_backend_discard_info) (abfd, &cookie, info)) 9716 ret = TRUE; 9717 9718 if (cookie.locsyms != NULL 9719 && symtab_hdr->contents != (unsigned char *) cookie.locsyms) 9720 { 9721 if (! info->keep_memory) 9722 free (cookie.locsyms); 9723 else 9724 symtab_hdr->contents = (unsigned char *) cookie.locsyms; 9725 } 9726 } 9727 9728 if (info->eh_frame_hdr 9729 && !info->relocatable 9730 && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info)) 9731 ret = TRUE; 9732 9733 return ret; 9734 } 9735 9736 void 9737 _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec) 9738 { 9739 flagword flags; 9740 const char *name, *p; 9741 struct bfd_section_already_linked *l; 9742 struct bfd_section_already_linked_hash_entry *already_linked_list; 9743 asection *group; 9744 9745 /* A single member comdat group section may be discarded by a 9746 linkonce section. See below. */ 9747 if (sec->output_section == bfd_abs_section_ptr) 9748 return; 9749 9750 flags = sec->flags; 9751 9752 /* Check if it belongs to a section group. */ 9753 group = elf_sec_group (sec); 9754 9755 /* Return if it isn't a linkonce section nor a member of a group. A 9756 comdat group section also has SEC_LINK_ONCE set. */ 9757 if ((flags & SEC_LINK_ONCE) == 0 && group == NULL) 9758 return; 9759 9760 if (group) 9761 { 9762 /* If this is the member of a single member comdat group, check if 9763 the group should be discarded. */ 9764 if (elf_next_in_group (sec) == sec 9765 && (group->flags & SEC_LINK_ONCE) != 0) 9766 sec = group; 9767 else 9768 return; 9769 } 9770 9771 /* FIXME: When doing a relocatable link, we may have trouble 9772 copying relocations in other sections that refer to local symbols 9773 in the section being discarded. Those relocations will have to 9774 be converted somehow; as of this writing I'm not sure that any of 9775 the backends handle that correctly. 9776 9777 It is tempting to instead not discard link once sections when 9778 doing a relocatable link (technically, they should be discarded 9779 whenever we are building constructors). However, that fails, 9780 because the linker winds up combining all the link once sections 9781 into a single large link once section, which defeats the purpose 9782 of having link once sections in the first place. 9783 9784 Also, not merging link once sections in a relocatable link 9785 causes trouble for MIPS ELF, which relies on link once semantics 9786 to handle the .reginfo section correctly. */ 9787 9788 name = bfd_get_section_name (abfd, sec); 9789 9790 if (strncmp (name, ".gnu.linkonce.", sizeof (".gnu.linkonce.") - 1) == 0 9791 && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL) 9792 p++; 9793 else 9794 p = name; 9795 9796 already_linked_list = bfd_section_already_linked_table_lookup (p); 9797 9798 for (l = already_linked_list->entry; l != NULL; l = l->next) 9799 { 9800 /* We may have 3 different sections on the list: group section, 9801 comdat section and linkonce section. SEC may be a linkonce or 9802 group section. We match a group section with a group section, 9803 a linkonce section with a linkonce section, and ignore comdat 9804 section. */ 9805 if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP) 9806 && strcmp (name, l->sec->name) == 0 9807 && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL) 9808 { 9809 /* The section has already been linked. See if we should 9810 issue a warning. */ 9811 switch (flags & SEC_LINK_DUPLICATES) 9812 { 9813 default: 9814 abort (); 9815 9816 case SEC_LINK_DUPLICATES_DISCARD: 9817 break; 9818 9819 case SEC_LINK_DUPLICATES_ONE_ONLY: 9820 (*_bfd_error_handler) 9821 (_("%B: ignoring duplicate section `%A'"), 9822 abfd, sec); 9823 break; 9824 9825 case SEC_LINK_DUPLICATES_SAME_SIZE: 9826 if (sec->size != l->sec->size) 9827 (*_bfd_error_handler) 9828 (_("%B: duplicate section `%A' has different size"), 9829 abfd, sec); 9830 break; 9831 9832 case SEC_LINK_DUPLICATES_SAME_CONTENTS: 9833 if (sec->size != l->sec->size) 9834 (*_bfd_error_handler) 9835 (_("%B: duplicate section `%A' has different size"), 9836 abfd, sec); 9837 else if (sec->size != 0) 9838 { 9839 bfd_byte *sec_contents, *l_sec_contents; 9840 9841 if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents)) 9842 (*_bfd_error_handler) 9843 (_("%B: warning: could not read contents of section `%A'"), 9844 abfd, sec); 9845 else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec, 9846 &l_sec_contents)) 9847 (*_bfd_error_handler) 9848 (_("%B: warning: could not read contents of section `%A'"), 9849 l->sec->owner, l->sec); 9850 else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0) 9851 (*_bfd_error_handler) 9852 (_("%B: warning: duplicate section `%A' has different contents"), 9853 abfd, sec); 9854 9855 if (sec_contents) 9856 free (sec_contents); 9857 if (l_sec_contents) 9858 free (l_sec_contents); 9859 } 9860 break; 9861 } 9862 9863 /* Set the output_section field so that lang_add_section 9864 does not create a lang_input_section structure for this 9865 section. Since there might be a symbol in the section 9866 being discarded, we must retain a pointer to the section 9867 which we are really going to use. */ 9868 sec->output_section = bfd_abs_section_ptr; 9869 sec->kept_section = l->sec; 9870 9871 if (flags & SEC_GROUP) 9872 { 9873 asection *first = elf_next_in_group (sec); 9874 asection *s = first; 9875 9876 while (s != NULL) 9877 { 9878 s->output_section = bfd_abs_section_ptr; 9879 /* Record which group discards it. */ 9880 s->kept_section = l->sec; 9881 s = elf_next_in_group (s); 9882 /* These lists are circular. */ 9883 if (s == first) 9884 break; 9885 } 9886 } 9887 9888 return; 9889 } 9890 } 9891 9892 if (group) 9893 { 9894 /* If this is the member of a single member comdat group and the 9895 group hasn't be discarded, we check if it matches a linkonce 9896 section. We only record the discarded comdat group. Otherwise 9897 the undiscarded group will be discarded incorrectly later since 9898 itself has been recorded. */ 9899 for (l = already_linked_list->entry; l != NULL; l = l->next) 9900 if ((l->sec->flags & SEC_GROUP) == 0 9901 && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL 9902 && bfd_elf_match_symbols_in_sections (l->sec, 9903 elf_next_in_group (sec))) 9904 { 9905 elf_next_in_group (sec)->output_section = bfd_abs_section_ptr; 9906 elf_next_in_group (sec)->kept_section = l->sec; 9907 group->output_section = bfd_abs_section_ptr; 9908 break; 9909 } 9910 if (l == NULL) 9911 return; 9912 } 9913 else 9914 /* There is no direct match. But for linkonce section, we should 9915 check if there is a match with comdat group member. We always 9916 record the linkonce section, discarded or not. */ 9917 for (l = already_linked_list->entry; l != NULL; l = l->next) 9918 if (l->sec->flags & SEC_GROUP) 9919 { 9920 asection *first = elf_next_in_group (l->sec); 9921 9922 if (first != NULL 9923 && elf_next_in_group (first) == first 9924 && bfd_elf_match_symbols_in_sections (first, sec)) 9925 { 9926 sec->output_section = bfd_abs_section_ptr; 9927 sec->kept_section = l->sec; 9928 break; 9929 } 9930 } 9931 9932 /* This is the first section with this name. Record it. */ 9933 bfd_section_already_linked_table_insert (already_linked_list, sec); 9934 } 9935 9936 bfd_boolean 9937 _bfd_elf_common_definition (Elf_Internal_Sym *sym) 9938 { 9939 return sym->st_shndx == SHN_COMMON; 9940 } 9941 9942 unsigned int 9943 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED) 9944 { 9945 return SHN_COMMON; 9946 } 9947 9948 asection * 9949 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED) 9950 { 9951 return bfd_com_section_ptr; 9952 } 9953