1 /* ELF linking support for BFD. 2 Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 4 Free Software Foundation, Inc. 5 6 This file is part of BFD, the Binary File Descriptor library. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 MA 02110-1301, USA. */ 22 23 #include "sysdep.h" 24 #include "bfd.h" 25 #include "bfdlink.h" 26 #include "libbfd.h" 27 #define ARCH_SIZE 0 28 #include "elf-bfd.h" 29 #include "safe-ctype.h" 30 #include "libiberty.h" 31 #include "objalloc.h" 32 33 /* This struct is used to pass information to routines called via 34 elf_link_hash_traverse which must return failure. */ 35 36 struct elf_info_failed 37 { 38 struct bfd_link_info *info; 39 bfd_boolean failed; 40 }; 41 42 /* This structure is used to pass information to 43 _bfd_elf_link_find_version_dependencies. */ 44 45 struct elf_find_verdep_info 46 { 47 /* General link information. */ 48 struct bfd_link_info *info; 49 /* The number of dependencies. */ 50 unsigned int vers; 51 /* Whether we had a failure. */ 52 bfd_boolean failed; 53 }; 54 55 static bfd_boolean _bfd_elf_fix_symbol_flags 56 (struct elf_link_hash_entry *, struct elf_info_failed *); 57 58 /* Define a symbol in a dynamic linkage section. */ 59 60 struct elf_link_hash_entry * 61 _bfd_elf_define_linkage_sym (bfd *abfd, 62 struct bfd_link_info *info, 63 asection *sec, 64 const char *name) 65 { 66 struct elf_link_hash_entry *h; 67 struct bfd_link_hash_entry *bh; 68 const struct elf_backend_data *bed; 69 70 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE); 71 if (h != NULL) 72 { 73 /* Zap symbol defined in an as-needed lib that wasn't linked. 74 This is a symptom of a larger problem: Absolute symbols 75 defined in shared libraries can't be overridden, because we 76 lose the link to the bfd which is via the symbol section. */ 77 h->root.type = bfd_link_hash_new; 78 } 79 80 bh = &h->root; 81 if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL, 82 sec, 0, NULL, FALSE, 83 get_elf_backend_data (abfd)->collect, 84 &bh)) 85 return NULL; 86 h = (struct elf_link_hash_entry *) bh; 87 h->def_regular = 1; 88 h->non_elf = 0; 89 h->type = STT_OBJECT; 90 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; 91 92 bed = get_elf_backend_data (abfd); 93 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 94 return h; 95 } 96 97 bfd_boolean 98 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) 99 { 100 flagword flags; 101 asection *s; 102 struct elf_link_hash_entry *h; 103 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 104 struct elf_link_hash_table *htab = elf_hash_table (info); 105 106 /* This function may be called more than once. */ 107 s = bfd_get_linker_section (abfd, ".got"); 108 if (s != NULL) 109 return TRUE; 110 111 flags = bed->dynamic_sec_flags; 112 113 s = bfd_make_section_anyway_with_flags (abfd, 114 (bed->rela_plts_and_copies_p 115 ? ".rela.got" : ".rel.got"), 116 (bed->dynamic_sec_flags 117 | SEC_READONLY)); 118 if (s == NULL 119 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 120 return FALSE; 121 htab->srelgot = s; 122 123 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags); 124 if (s == NULL 125 || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 126 return FALSE; 127 htab->sgot = s; 128 129 if (bed->want_got_plt) 130 { 131 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags); 132 if (s == NULL 133 || !bfd_set_section_alignment (abfd, s, 134 bed->s->log_file_align)) 135 return FALSE; 136 htab->sgotplt = s; 137 } 138 139 /* The first bit of the global offset table is the header. */ 140 s->size += bed->got_header_size; 141 142 if (bed->want_got_sym) 143 { 144 /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got 145 (or .got.plt) section. We don't do this in the linker script 146 because we don't want to define the symbol if we are not creating 147 a global offset table. */ 148 h = _bfd_elf_define_linkage_sym (abfd, info, s, 149 "_GLOBAL_OFFSET_TABLE_"); 150 elf_hash_table (info)->hgot = h; 151 if (h == NULL) 152 return FALSE; 153 } 154 155 return TRUE; 156 } 157 158 /* Create a strtab to hold the dynamic symbol names. */ 159 static bfd_boolean 160 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info) 161 { 162 struct elf_link_hash_table *hash_table; 163 164 hash_table = elf_hash_table (info); 165 if (hash_table->dynobj == NULL) 166 hash_table->dynobj = abfd; 167 168 if (hash_table->dynstr == NULL) 169 { 170 hash_table->dynstr = _bfd_elf_strtab_init (); 171 if (hash_table->dynstr == NULL) 172 return FALSE; 173 } 174 return TRUE; 175 } 176 177 /* Create some sections which will be filled in with dynamic linking 178 information. ABFD is an input file which requires dynamic sections 179 to be created. The dynamic sections take up virtual memory space 180 when the final executable is run, so we need to create them before 181 addresses are assigned to the output sections. We work out the 182 actual contents and size of these sections later. */ 183 184 bfd_boolean 185 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 186 { 187 flagword flags; 188 asection *s; 189 const struct elf_backend_data *bed; 190 191 if (! is_elf_hash_table (info->hash)) 192 return FALSE; 193 194 if (elf_hash_table (info)->dynamic_sections_created) 195 return TRUE; 196 197 if (!_bfd_elf_link_create_dynstrtab (abfd, info)) 198 return FALSE; 199 200 abfd = elf_hash_table (info)->dynobj; 201 bed = get_elf_backend_data (abfd); 202 203 flags = bed->dynamic_sec_flags; 204 205 /* A dynamically linked executable has a .interp section, but a 206 shared library does not. */ 207 if (info->executable) 208 { 209 s = bfd_make_section_anyway_with_flags (abfd, ".interp", 210 flags | SEC_READONLY); 211 if (s == NULL) 212 return FALSE; 213 } 214 215 /* Create sections to hold version informations. These are removed 216 if they are not needed. */ 217 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_d", 218 flags | SEC_READONLY); 219 if (s == NULL 220 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 221 return FALSE; 222 223 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version", 224 flags | SEC_READONLY); 225 if (s == NULL 226 || ! bfd_set_section_alignment (abfd, s, 1)) 227 return FALSE; 228 229 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r", 230 flags | SEC_READONLY); 231 if (s == NULL 232 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 233 return FALSE; 234 235 s = bfd_make_section_anyway_with_flags (abfd, ".dynsym", 236 flags | SEC_READONLY); 237 if (s == NULL 238 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 239 return FALSE; 240 241 s = bfd_make_section_anyway_with_flags (abfd, ".dynstr", 242 flags | SEC_READONLY); 243 if (s == NULL) 244 return FALSE; 245 246 s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags); 247 if (s == NULL 248 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 249 return FALSE; 250 251 /* The special symbol _DYNAMIC is always set to the start of the 252 .dynamic section. We could set _DYNAMIC in a linker script, but we 253 only want to define it if we are, in fact, creating a .dynamic 254 section. We don't want to define it if there is no .dynamic 255 section, since on some ELF platforms the start up code examines it 256 to decide how to initialize the process. */ 257 if (!_bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC")) 258 return FALSE; 259 260 if (info->emit_hash) 261 { 262 s = bfd_make_section_anyway_with_flags (abfd, ".hash", 263 flags | SEC_READONLY); 264 if (s == NULL 265 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 266 return FALSE; 267 elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry; 268 } 269 270 if (info->emit_gnu_hash) 271 { 272 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.hash", 273 flags | SEC_READONLY); 274 if (s == NULL 275 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 276 return FALSE; 277 /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section: 278 4 32-bit words followed by variable count of 64-bit words, then 279 variable count of 32-bit words. */ 280 if (bed->s->arch_size == 64) 281 elf_section_data (s)->this_hdr.sh_entsize = 0; 282 else 283 elf_section_data (s)->this_hdr.sh_entsize = 4; 284 } 285 286 /* Let the backend create the rest of the sections. This lets the 287 backend set the right flags. The backend will normally create 288 the .got and .plt sections. */ 289 if (bed->elf_backend_create_dynamic_sections == NULL 290 || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info)) 291 return FALSE; 292 293 elf_hash_table (info)->dynamic_sections_created = TRUE; 294 295 return TRUE; 296 } 297 298 /* Create dynamic sections when linking against a dynamic object. */ 299 300 bfd_boolean 301 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 302 { 303 flagword flags, pltflags; 304 struct elf_link_hash_entry *h; 305 asection *s; 306 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 307 struct elf_link_hash_table *htab = elf_hash_table (info); 308 309 /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and 310 .rel[a].bss sections. */ 311 flags = bed->dynamic_sec_flags; 312 313 pltflags = flags; 314 if (bed->plt_not_loaded) 315 /* We do not clear SEC_ALLOC here because we still want the OS to 316 allocate space for the section; it's just that there's nothing 317 to read in from the object file. */ 318 pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS); 319 else 320 pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD; 321 if (bed->plt_readonly) 322 pltflags |= SEC_READONLY; 323 324 s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags); 325 if (s == NULL 326 || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment)) 327 return FALSE; 328 htab->splt = s; 329 330 /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the 331 .plt section. */ 332 if (bed->want_plt_sym) 333 { 334 h = _bfd_elf_define_linkage_sym (abfd, info, s, 335 "_PROCEDURE_LINKAGE_TABLE_"); 336 elf_hash_table (info)->hplt = h; 337 if (h == NULL) 338 return FALSE; 339 } 340 341 s = bfd_make_section_anyway_with_flags (abfd, 342 (bed->rela_plts_and_copies_p 343 ? ".rela.plt" : ".rel.plt"), 344 flags | SEC_READONLY); 345 if (s == NULL 346 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 347 return FALSE; 348 htab->srelplt = s; 349 350 if (! _bfd_elf_create_got_section (abfd, info)) 351 return FALSE; 352 353 if (bed->want_dynbss) 354 { 355 /* The .dynbss section is a place to put symbols which are defined 356 by dynamic objects, are referenced by regular objects, and are 357 not functions. We must allocate space for them in the process 358 image and use a R_*_COPY reloc to tell the dynamic linker to 359 initialize them at run time. The linker script puts the .dynbss 360 section into the .bss section of the final image. */ 361 s = bfd_make_section_anyway_with_flags (abfd, ".dynbss", 362 (SEC_ALLOC | SEC_LINKER_CREATED)); 363 if (s == NULL) 364 return FALSE; 365 366 /* The .rel[a].bss section holds copy relocs. This section is not 367 normally needed. We need to create it here, though, so that the 368 linker will map it to an output section. We can't just create it 369 only if we need it, because we will not know whether we need it 370 until we have seen all the input files, and the first time the 371 main linker code calls BFD after examining all the input files 372 (size_dynamic_sections) the input sections have already been 373 mapped to the output sections. If the section turns out not to 374 be needed, we can discard it later. We will never need this 375 section when generating a shared object, since they do not use 376 copy relocs. */ 377 if (! info->shared) 378 { 379 s = bfd_make_section_anyway_with_flags (abfd, 380 (bed->rela_plts_and_copies_p 381 ? ".rela.bss" : ".rel.bss"), 382 flags | SEC_READONLY); 383 if (s == NULL 384 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) 385 return FALSE; 386 } 387 } 388 389 return TRUE; 390 } 391 392 /* Record a new dynamic symbol. We record the dynamic symbols as we 393 read the input files, since we need to have a list of all of them 394 before we can determine the final sizes of the output sections. 395 Note that we may actually call this function even though we are not 396 going to output any dynamic symbols; in some cases we know that a 397 symbol should be in the dynamic symbol table, but only if there is 398 one. */ 399 400 bfd_boolean 401 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info, 402 struct elf_link_hash_entry *h) 403 { 404 if (h->dynindx == -1) 405 { 406 struct elf_strtab_hash *dynstr; 407 char *p; 408 const char *name; 409 bfd_size_type indx; 410 411 /* XXX: The ABI draft says the linker must turn hidden and 412 internal symbols into STB_LOCAL symbols when producing the 413 DSO. However, if ld.so honors st_other in the dynamic table, 414 this would not be necessary. */ 415 switch (ELF_ST_VISIBILITY (h->other)) 416 { 417 case STV_INTERNAL: 418 case STV_HIDDEN: 419 if (h->root.type != bfd_link_hash_undefined 420 && h->root.type != bfd_link_hash_undefweak) 421 { 422 h->forced_local = 1; 423 if (!elf_hash_table (info)->is_relocatable_executable) 424 return TRUE; 425 } 426 427 default: 428 break; 429 } 430 431 h->dynindx = elf_hash_table (info)->dynsymcount; 432 ++elf_hash_table (info)->dynsymcount; 433 434 dynstr = elf_hash_table (info)->dynstr; 435 if (dynstr == NULL) 436 { 437 /* Create a strtab to hold the dynamic symbol names. */ 438 elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init (); 439 if (dynstr == NULL) 440 return FALSE; 441 } 442 443 /* We don't put any version information in the dynamic string 444 table. */ 445 name = h->root.root.string; 446 p = strchr (name, ELF_VER_CHR); 447 if (p != NULL) 448 /* We know that the p points into writable memory. In fact, 449 there are only a few symbols that have read-only names, being 450 those like _GLOBAL_OFFSET_TABLE_ that are created specially 451 by the backends. Most symbols will have names pointing into 452 an ELF string table read from a file, or to objalloc memory. */ 453 *p = 0; 454 455 indx = _bfd_elf_strtab_add (dynstr, name, p != NULL); 456 457 if (p != NULL) 458 *p = ELF_VER_CHR; 459 460 if (indx == (bfd_size_type) -1) 461 return FALSE; 462 h->dynstr_index = indx; 463 } 464 465 return TRUE; 466 } 467 468 /* Mark a symbol dynamic. */ 469 470 static void 471 bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, 472 struct elf_link_hash_entry *h, 473 Elf_Internal_Sym *sym) 474 { 475 struct bfd_elf_dynamic_list *d = info->dynamic_list; 476 477 /* It may be called more than once on the same H. */ 478 if(h->dynamic || info->relocatable) 479 return; 480 481 if ((info->dynamic_data 482 && (h->type == STT_OBJECT 483 || (sym != NULL 484 && ELF_ST_TYPE (sym->st_info) == STT_OBJECT))) 485 || (d != NULL 486 && h->root.type == bfd_link_hash_new 487 && (*d->match) (&d->head, NULL, h->root.root.string))) 488 h->dynamic = 1; 489 } 490 491 /* Record an assignment to a symbol made by a linker script. We need 492 this in case some dynamic object refers to this symbol. */ 493 494 bfd_boolean 495 bfd_elf_record_link_assignment (bfd *output_bfd, 496 struct bfd_link_info *info, 497 const char *name, 498 bfd_boolean provide, 499 bfd_boolean hidden) 500 { 501 struct elf_link_hash_entry *h, *hv; 502 struct elf_link_hash_table *htab; 503 const struct elf_backend_data *bed; 504 505 if (!is_elf_hash_table (info->hash)) 506 return TRUE; 507 508 htab = elf_hash_table (info); 509 h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE); 510 if (h == NULL) 511 return provide; 512 513 switch (h->root.type) 514 { 515 case bfd_link_hash_defined: 516 case bfd_link_hash_defweak: 517 case bfd_link_hash_common: 518 break; 519 case bfd_link_hash_undefweak: 520 case bfd_link_hash_undefined: 521 /* Since we're defining the symbol, don't let it seem to have not 522 been defined. record_dynamic_symbol and size_dynamic_sections 523 may depend on this. */ 524 h->root.type = bfd_link_hash_new; 525 if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root) 526 bfd_link_repair_undef_list (&htab->root); 527 break; 528 case bfd_link_hash_new: 529 bfd_elf_link_mark_dynamic_symbol (info, h, NULL); 530 h->non_elf = 0; 531 break; 532 case bfd_link_hash_indirect: 533 /* We had a versioned symbol in a dynamic library. We make the 534 the versioned symbol point to this one. */ 535 bed = get_elf_backend_data (output_bfd); 536 hv = h; 537 while (hv->root.type == bfd_link_hash_indirect 538 || hv->root.type == bfd_link_hash_warning) 539 hv = (struct elf_link_hash_entry *) hv->root.u.i.link; 540 /* We don't need to update h->root.u since linker will set them 541 later. */ 542 h->root.type = bfd_link_hash_undefined; 543 hv->root.type = bfd_link_hash_indirect; 544 hv->root.u.i.link = (struct bfd_link_hash_entry *) h; 545 (*bed->elf_backend_copy_indirect_symbol) (info, h, hv); 546 break; 547 case bfd_link_hash_warning: 548 abort (); 549 break; 550 } 551 552 /* If this symbol is being provided by the linker script, and it is 553 currently defined by a dynamic object, but not by a regular 554 object, then mark it as undefined so that the generic linker will 555 force the correct value. */ 556 if (provide 557 && h->def_dynamic 558 && !h->def_regular) 559 h->root.type = bfd_link_hash_undefined; 560 561 /* If this symbol is not being provided by the linker script, and it is 562 currently defined by a dynamic object, but not by a regular object, 563 then clear out any version information because the symbol will not be 564 associated with the dynamic object any more. */ 565 if (!provide 566 && h->def_dynamic 567 && !h->def_regular) 568 h->verinfo.verdef = NULL; 569 570 h->def_regular = 1; 571 572 if (hidden) 573 { 574 bed = get_elf_backend_data (output_bfd); 575 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; 576 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 577 } 578 579 /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects 580 and executables. */ 581 if (!info->relocatable 582 && h->dynindx != -1 583 && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN 584 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)) 585 h->forced_local = 1; 586 587 if ((h->def_dynamic 588 || h->ref_dynamic 589 || info->shared 590 || (info->executable && elf_hash_table (info)->is_relocatable_executable)) 591 && h->dynindx == -1) 592 { 593 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 594 return FALSE; 595 596 /* If this is a weak defined symbol, and we know a corresponding 597 real symbol from the same dynamic object, make sure the real 598 symbol is also made into a dynamic symbol. */ 599 if (h->u.weakdef != NULL 600 && h->u.weakdef->dynindx == -1) 601 { 602 if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef)) 603 return FALSE; 604 } 605 } 606 607 return TRUE; 608 } 609 610 /* Record a new local dynamic symbol. Returns 0 on failure, 1 on 611 success, and 2 on a failure caused by attempting to record a symbol 612 in a discarded section, eg. a discarded link-once section symbol. */ 613 614 int 615 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info, 616 bfd *input_bfd, 617 long input_indx) 618 { 619 bfd_size_type amt; 620 struct elf_link_local_dynamic_entry *entry; 621 struct elf_link_hash_table *eht; 622 struct elf_strtab_hash *dynstr; 623 unsigned long dynstr_index; 624 char *name; 625 Elf_External_Sym_Shndx eshndx; 626 char esym[sizeof (Elf64_External_Sym)]; 627 628 if (! is_elf_hash_table (info->hash)) 629 return 0; 630 631 /* See if the entry exists already. */ 632 for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next) 633 if (entry->input_bfd == input_bfd && entry->input_indx == input_indx) 634 return 1; 635 636 amt = sizeof (*entry); 637 entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt); 638 if (entry == NULL) 639 return 0; 640 641 /* Go find the symbol, so that we can find it's name. */ 642 if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr, 643 1, input_indx, &entry->isym, esym, &eshndx)) 644 { 645 bfd_release (input_bfd, entry); 646 return 0; 647 } 648 649 if (entry->isym.st_shndx != SHN_UNDEF 650 && entry->isym.st_shndx < SHN_LORESERVE) 651 { 652 asection *s; 653 654 s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx); 655 if (s == NULL || bfd_is_abs_section (s->output_section)) 656 { 657 /* We can still bfd_release here as nothing has done another 658 bfd_alloc. We can't do this later in this function. */ 659 bfd_release (input_bfd, entry); 660 return 2; 661 } 662 } 663 664 name = (bfd_elf_string_from_elf_section 665 (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link, 666 entry->isym.st_name)); 667 668 dynstr = elf_hash_table (info)->dynstr; 669 if (dynstr == NULL) 670 { 671 /* Create a strtab to hold the dynamic symbol names. */ 672 elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init (); 673 if (dynstr == NULL) 674 return 0; 675 } 676 677 dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE); 678 if (dynstr_index == (unsigned long) -1) 679 return 0; 680 entry->isym.st_name = dynstr_index; 681 682 eht = elf_hash_table (info); 683 684 entry->next = eht->dynlocal; 685 eht->dynlocal = entry; 686 entry->input_bfd = input_bfd; 687 entry->input_indx = input_indx; 688 eht->dynsymcount++; 689 690 /* Whatever binding the symbol had before, it's now local. */ 691 entry->isym.st_info 692 = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info)); 693 694 /* The dynindx will be set at the end of size_dynamic_sections. */ 695 696 return 1; 697 } 698 699 /* Return the dynindex of a local dynamic symbol. */ 700 701 long 702 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info, 703 bfd *input_bfd, 704 long input_indx) 705 { 706 struct elf_link_local_dynamic_entry *e; 707 708 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next) 709 if (e->input_bfd == input_bfd && e->input_indx == input_indx) 710 return e->dynindx; 711 return -1; 712 } 713 714 /* This function is used to renumber the dynamic symbols, if some of 715 them are removed because they are marked as local. This is called 716 via elf_link_hash_traverse. */ 717 718 static bfd_boolean 719 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h, 720 void *data) 721 { 722 size_t *count = (size_t *) data; 723 724 if (h->forced_local) 725 return TRUE; 726 727 if (h->dynindx != -1) 728 h->dynindx = ++(*count); 729 730 return TRUE; 731 } 732 733 734 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with 735 STB_LOCAL binding. */ 736 737 static bfd_boolean 738 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h, 739 void *data) 740 { 741 size_t *count = (size_t *) data; 742 743 if (!h->forced_local) 744 return TRUE; 745 746 if (h->dynindx != -1) 747 h->dynindx = ++(*count); 748 749 return TRUE; 750 } 751 752 /* Return true if the dynamic symbol for a given section should be 753 omitted when creating a shared library. */ 754 bfd_boolean 755 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED, 756 struct bfd_link_info *info, 757 asection *p) 758 { 759 struct elf_link_hash_table *htab; 760 761 switch (elf_section_data (p)->this_hdr.sh_type) 762 { 763 case SHT_PROGBITS: 764 case SHT_NOBITS: 765 /* If sh_type is yet undecided, assume it could be 766 SHT_PROGBITS/SHT_NOBITS. */ 767 case SHT_NULL: 768 htab = elf_hash_table (info); 769 if (p == htab->tls_sec) 770 return FALSE; 771 772 if (htab->text_index_section != NULL) 773 return p != htab->text_index_section && p != htab->data_index_section; 774 775 if (strcmp (p->name, ".got") == 0 776 || strcmp (p->name, ".got.plt") == 0 777 || strcmp (p->name, ".plt") == 0) 778 { 779 asection *ip; 780 781 if (htab->dynobj != NULL 782 && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL 783 && ip->output_section == p) 784 return TRUE; 785 } 786 return FALSE; 787 788 /* There shouldn't be section relative relocations 789 against any other section. */ 790 default: 791 return TRUE; 792 } 793 } 794 795 /* Assign dynsym indices. In a shared library we generate a section 796 symbol for each output section, which come first. Next come symbols 797 which have been forced to local binding. Then all of the back-end 798 allocated local dynamic syms, followed by the rest of the global 799 symbols. */ 800 801 static unsigned long 802 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd, 803 struct bfd_link_info *info, 804 unsigned long *section_sym_count) 805 { 806 unsigned long dynsymcount = 0; 807 808 if (info->shared || elf_hash_table (info)->is_relocatable_executable) 809 { 810 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 811 asection *p; 812 for (p = output_bfd->sections; p ; p = p->next) 813 if ((p->flags & SEC_EXCLUDE) == 0 814 && (p->flags & SEC_ALLOC) != 0 815 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p)) 816 elf_section_data (p)->dynindx = ++dynsymcount; 817 else 818 elf_section_data (p)->dynindx = 0; 819 } 820 *section_sym_count = dynsymcount; 821 822 elf_link_hash_traverse (elf_hash_table (info), 823 elf_link_renumber_local_hash_table_dynsyms, 824 &dynsymcount); 825 826 if (elf_hash_table (info)->dynlocal) 827 { 828 struct elf_link_local_dynamic_entry *p; 829 for (p = elf_hash_table (info)->dynlocal; p ; p = p->next) 830 p->dynindx = ++dynsymcount; 831 } 832 833 elf_link_hash_traverse (elf_hash_table (info), 834 elf_link_renumber_hash_table_dynsyms, 835 &dynsymcount); 836 837 /* There is an unused NULL entry at the head of the table which 838 we must account for in our count. Unless there weren't any 839 symbols, which means we'll have no table at all. */ 840 if (dynsymcount != 0) 841 ++dynsymcount; 842 843 elf_hash_table (info)->dynsymcount = dynsymcount; 844 return dynsymcount; 845 } 846 847 /* Merge st_other field. */ 848 849 static void 850 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h, 851 Elf_Internal_Sym *isym, bfd_boolean definition, 852 bfd_boolean dynamic) 853 { 854 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 855 856 /* If st_other has a processor-specific meaning, specific 857 code might be needed here. We never merge the visibility 858 attribute with the one from a dynamic object. */ 859 if (bed->elf_backend_merge_symbol_attribute) 860 (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition, 861 dynamic); 862 863 /* If this symbol has default visibility and the user has requested 864 we not re-export it, then mark it as hidden. */ 865 if (definition 866 && !dynamic 867 && (abfd->no_export 868 || (abfd->my_archive && abfd->my_archive->no_export)) 869 && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL) 870 isym->st_other = (STV_HIDDEN 871 | (isym->st_other & ~ELF_ST_VISIBILITY (-1))); 872 873 if (!dynamic && ELF_ST_VISIBILITY (isym->st_other) != 0) 874 { 875 unsigned char hvis, symvis, other, nvis; 876 877 /* Only merge the visibility. Leave the remainder of the 878 st_other field to elf_backend_merge_symbol_attribute. */ 879 other = h->other & ~ELF_ST_VISIBILITY (-1); 880 881 /* Combine visibilities, using the most constraining one. */ 882 hvis = ELF_ST_VISIBILITY (h->other); 883 symvis = ELF_ST_VISIBILITY (isym->st_other); 884 if (! hvis) 885 nvis = symvis; 886 else if (! symvis) 887 nvis = hvis; 888 else 889 nvis = hvis < symvis ? hvis : symvis; 890 891 h->other = other | nvis; 892 } 893 } 894 895 /* This function is called when we want to define a new symbol. It 896 handles the various cases which arise when we find a definition in 897 a dynamic object, or when there is already a definition in a 898 dynamic object. The new symbol is described by NAME, SYM, PSEC, 899 and PVALUE. We set SYM_HASH to the hash table entry. We set 900 OVERRIDE if the old symbol is overriding a new definition. We set 901 TYPE_CHANGE_OK if it is OK for the type to change. We set 902 SIZE_CHANGE_OK if it is OK for the size to change. By OK to 903 change, we mean that we shouldn't warn if the type or size does 904 change. We set POLD_ALIGNMENT if an old common symbol in a dynamic 905 object is overridden by a regular object. */ 906 907 bfd_boolean 908 _bfd_elf_merge_symbol (bfd *abfd, 909 struct bfd_link_info *info, 910 const char *name, 911 Elf_Internal_Sym *sym, 912 asection **psec, 913 bfd_vma *pvalue, 914 bfd_boolean *pold_weak, 915 unsigned int *pold_alignment, 916 struct elf_link_hash_entry **sym_hash, 917 bfd_boolean *skip, 918 bfd_boolean *override, 919 bfd_boolean *type_change_ok, 920 bfd_boolean *size_change_ok) 921 { 922 asection *sec, *oldsec; 923 struct elf_link_hash_entry *h; 924 struct elf_link_hash_entry *hi; 925 struct elf_link_hash_entry *flip; 926 int bind; 927 bfd *oldbfd; 928 bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon; 929 bfd_boolean newweak, oldweak, newfunc, oldfunc; 930 const struct elf_backend_data *bed; 931 932 *skip = FALSE; 933 *override = FALSE; 934 935 sec = *psec; 936 bind = ELF_ST_BIND (sym->st_info); 937 938 /* Silently discard TLS symbols from --just-syms. There's no way to 939 combine a static TLS block with a new TLS block for this executable. */ 940 if (ELF_ST_TYPE (sym->st_info) == STT_TLS 941 && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS) 942 { 943 *skip = TRUE; 944 return TRUE; 945 } 946 947 if (! bfd_is_und_section (sec)) 948 h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE); 949 else 950 h = ((struct elf_link_hash_entry *) 951 bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE)); 952 if (h == NULL) 953 return FALSE; 954 *sym_hash = h; 955 956 bed = get_elf_backend_data (abfd); 957 958 /* This code is for coping with dynamic objects, and is only useful 959 if we are doing an ELF link. */ 960 if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec)) 961 return TRUE; 962 963 /* For merging, we only care about real symbols. But we need to make 964 sure that indirect symbol dynamic flags are updated. */ 965 hi = h; 966 while (h->root.type == bfd_link_hash_indirect 967 || h->root.type == bfd_link_hash_warning) 968 h = (struct elf_link_hash_entry *) h->root.u.i.link; 969 970 /* We have to check it for every instance since the first few may be 971 references and not all compilers emit symbol type for undefined 972 symbols. */ 973 bfd_elf_link_mark_dynamic_symbol (info, h, sym); 974 975 /* NEWDYN and OLDDYN indicate whether the new or old symbol, 976 respectively, is from a dynamic object. */ 977 978 newdyn = (abfd->flags & DYNAMIC) != 0; 979 980 /* ref_dynamic_nonweak and dynamic_def flags track actual undefined 981 syms and defined syms in dynamic libraries respectively. 982 ref_dynamic on the other hand can be set for a symbol defined in 983 a dynamic library, and def_dynamic may not be set; When the 984 definition in a dynamic lib is overridden by a definition in the 985 executable use of the symbol in the dynamic lib becomes a 986 reference to the executable symbol. */ 987 if (newdyn) 988 { 989 if (bfd_is_und_section (sec)) 990 { 991 if (bind != STB_WEAK) 992 { 993 h->ref_dynamic_nonweak = 1; 994 hi->ref_dynamic_nonweak = 1; 995 } 996 } 997 else 998 { 999 h->dynamic_def = 1; 1000 hi->dynamic_def = 1; 1001 } 1002 } 1003 1004 /* If we just created the symbol, mark it as being an ELF symbol. 1005 Other than that, there is nothing to do--there is no merge issue 1006 with a newly defined symbol--so we just return. */ 1007 1008 if (h->root.type == bfd_link_hash_new) 1009 { 1010 h->non_elf = 0; 1011 return TRUE; 1012 } 1013 1014 /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the 1015 existing symbol. */ 1016 1017 switch (h->root.type) 1018 { 1019 default: 1020 oldbfd = NULL; 1021 oldsec = NULL; 1022 break; 1023 1024 case bfd_link_hash_undefined: 1025 case bfd_link_hash_undefweak: 1026 oldbfd = h->root.u.undef.abfd; 1027 oldsec = NULL; 1028 break; 1029 1030 case bfd_link_hash_defined: 1031 case bfd_link_hash_defweak: 1032 oldbfd = h->root.u.def.section->owner; 1033 oldsec = h->root.u.def.section; 1034 break; 1035 1036 case bfd_link_hash_common: 1037 oldbfd = h->root.u.c.p->section->owner; 1038 oldsec = h->root.u.c.p->section; 1039 break; 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 if (pold_weak) 1047 *pold_weak = oldweak; 1048 1049 /* In cases involving weak versioned symbols, we may wind up trying 1050 to merge a symbol with itself. Catch that here, to avoid the 1051 confusion that results if we try to override a symbol with 1052 itself. The additional tests catch cases like 1053 _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a 1054 dynamic object, which we do want to handle here. */ 1055 if (abfd == oldbfd 1056 && (newweak || oldweak) 1057 && ((abfd->flags & DYNAMIC) == 0 1058 || !h->def_regular)) 1059 return TRUE; 1060 1061 olddyn = FALSE; 1062 if (oldbfd != NULL) 1063 olddyn = (oldbfd->flags & DYNAMIC) != 0; 1064 else if (oldsec != NULL) 1065 { 1066 /* This handles the special SHN_MIPS_{TEXT,DATA} section 1067 indices used by MIPS ELF. */ 1068 olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0; 1069 } 1070 1071 /* NEWDEF and OLDDEF indicate whether the new or old symbol, 1072 respectively, appear to be a definition rather than reference. */ 1073 1074 newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec); 1075 1076 olddef = (h->root.type != bfd_link_hash_undefined 1077 && h->root.type != bfd_link_hash_undefweak 1078 && h->root.type != bfd_link_hash_common); 1079 1080 /* NEWFUNC and OLDFUNC indicate whether the new or old symbol, 1081 respectively, appear to be a function. */ 1082 1083 newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE 1084 && bed->is_function_type (ELF_ST_TYPE (sym->st_info))); 1085 1086 oldfunc = (h->type != STT_NOTYPE 1087 && bed->is_function_type (h->type)); 1088 1089 /* When we try to create a default indirect symbol from the dynamic 1090 definition with the default version, we skip it if its type and 1091 the type of existing regular definition mismatch. We only do it 1092 if the existing regular definition won't be dynamic. */ 1093 if (pold_alignment == NULL 1094 && !info->shared 1095 && !info->export_dynamic 1096 && !h->ref_dynamic 1097 && newdyn 1098 && newdef 1099 && !olddyn 1100 && (olddef || h->root.type == bfd_link_hash_common) 1101 && ELF_ST_TYPE (sym->st_info) != h->type 1102 && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE 1103 && h->type != STT_NOTYPE 1104 && !(newfunc && oldfunc)) 1105 { 1106 *skip = TRUE; 1107 return TRUE; 1108 } 1109 1110 /* Plugin symbol type isn't currently set. Stop bogus errors. */ 1111 if (oldbfd != NULL && (oldbfd->flags & BFD_PLUGIN) != 0) 1112 *type_change_ok = TRUE; 1113 1114 /* Check TLS symbol. We don't check undefined symbol introduced by 1115 "ld -u". */ 1116 else if (oldbfd != NULL 1117 && ELF_ST_TYPE (sym->st_info) != h->type 1118 && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS)) 1119 { 1120 bfd *ntbfd, *tbfd; 1121 bfd_boolean ntdef, tdef; 1122 asection *ntsec, *tsec; 1123 1124 if (h->type == STT_TLS) 1125 { 1126 ntbfd = abfd; 1127 ntsec = sec; 1128 ntdef = newdef; 1129 tbfd = oldbfd; 1130 tsec = oldsec; 1131 tdef = olddef; 1132 } 1133 else 1134 { 1135 ntbfd = oldbfd; 1136 ntsec = oldsec; 1137 ntdef = olddef; 1138 tbfd = abfd; 1139 tsec = sec; 1140 tdef = newdef; 1141 } 1142 1143 if (tdef && ntdef) 1144 (*_bfd_error_handler) 1145 (_("%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"), 1146 tbfd, tsec, ntbfd, ntsec, h->root.root.string); 1147 else if (!tdef && !ntdef) 1148 (*_bfd_error_handler) 1149 (_("%s: TLS reference in %B mismatches non-TLS reference in %B"), 1150 tbfd, ntbfd, h->root.root.string); 1151 else if (tdef) 1152 (*_bfd_error_handler) 1153 (_("%s: TLS definition in %B section %A mismatches non-TLS reference in %B"), 1154 tbfd, tsec, ntbfd, h->root.root.string); 1155 else 1156 (*_bfd_error_handler) 1157 (_("%s: TLS reference in %B mismatches non-TLS definition in %B section %A"), 1158 tbfd, ntbfd, ntsec, h->root.root.string); 1159 1160 bfd_set_error (bfd_error_bad_value); 1161 return FALSE; 1162 } 1163 1164 /* If the old symbol has non-default visibility, we ignore the new 1165 definition from a dynamic object. */ 1166 if (newdyn 1167 && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 1168 && !bfd_is_und_section (sec)) 1169 { 1170 *skip = TRUE; 1171 /* Make sure this symbol is dynamic. */ 1172 h->ref_dynamic = 1; 1173 hi->ref_dynamic = 1; 1174 /* A protected symbol has external availability. Make sure it is 1175 recorded as dynamic. 1176 1177 FIXME: Should we check type and size for protected symbol? */ 1178 if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) 1179 return bfd_elf_link_record_dynamic_symbol (info, h); 1180 else 1181 return TRUE; 1182 } 1183 else if (!newdyn 1184 && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT 1185 && h->def_dynamic) 1186 { 1187 /* If the new symbol with non-default visibility comes from a 1188 relocatable file and the old definition comes from a dynamic 1189 object, we remove the old definition. */ 1190 if ((*sym_hash)->root.type == bfd_link_hash_indirect) 1191 { 1192 /* Handle the case where the old dynamic definition is 1193 default versioned. We need to copy the symbol info from 1194 the symbol with default version to the normal one if it 1195 was referenced before. */ 1196 if (h->ref_regular) 1197 { 1198 struct elf_link_hash_entry *vh = *sym_hash; 1199 1200 vh->root.type = h->root.type; 1201 h->root.type = bfd_link_hash_indirect; 1202 (*bed->elf_backend_copy_indirect_symbol) (info, vh, h); 1203 1204 h->root.u.i.link = (struct bfd_link_hash_entry *) vh; 1205 if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED) 1206 { 1207 /* If the new symbol is hidden or internal, completely undo 1208 any dynamic link state. */ 1209 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 1210 h->forced_local = 0; 1211 h->ref_dynamic = 0; 1212 } 1213 else 1214 h->ref_dynamic = 1; 1215 1216 h->def_dynamic = 0; 1217 /* FIXME: Should we check type and size for protected symbol? */ 1218 h->size = 0; 1219 h->type = 0; 1220 1221 h = vh; 1222 } 1223 else 1224 h = *sym_hash; 1225 } 1226 1227 /* If the old symbol was undefined before, then it will still be 1228 on the undefs list. If the new symbol is undefined or 1229 common, we can't make it bfd_link_hash_new here, because new 1230 undefined or common symbols will be added to the undefs list 1231 by _bfd_generic_link_add_one_symbol. Symbols may not be 1232 added twice to the undefs list. Also, if the new symbol is 1233 undefweak then we don't want to lose the strong undef. */ 1234 if (h->root.u.undef.next || info->hash->undefs_tail == &h->root) 1235 { 1236 h->root.type = bfd_link_hash_undefined; 1237 h->root.u.undef.abfd = abfd; 1238 } 1239 else 1240 { 1241 h->root.type = bfd_link_hash_new; 1242 h->root.u.undef.abfd = NULL; 1243 } 1244 1245 if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED) 1246 { 1247 /* If the new symbol is hidden or internal, completely undo 1248 any dynamic link state. */ 1249 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 1250 h->forced_local = 0; 1251 h->ref_dynamic = 0; 1252 } 1253 else 1254 h->ref_dynamic = 1; 1255 h->def_dynamic = 0; 1256 /* FIXME: Should we check type and size for protected symbol? */ 1257 h->size = 0; 1258 h->type = 0; 1259 return TRUE; 1260 } 1261 1262 if (bind == STB_GNU_UNIQUE) 1263 h->unique_global = 1; 1264 1265 /* If a new weak symbol definition comes from a regular file and the 1266 old symbol comes from a dynamic library, we treat the new one as 1267 strong. Similarly, an old weak symbol definition from a regular 1268 file is treated as strong when the new symbol comes from a dynamic 1269 library. Further, an old weak symbol from a dynamic library is 1270 treated as strong if the new symbol is from a dynamic library. 1271 This reflects the way glibc's ld.so works. 1272 1273 Do this before setting *type_change_ok or *size_change_ok so that 1274 we warn properly when dynamic library symbols are overridden. */ 1275 1276 if (newdef && !newdyn && olddyn) 1277 newweak = FALSE; 1278 if (olddef && newdyn) 1279 oldweak = FALSE; 1280 1281 /* Allow changes between different types of function symbol. */ 1282 if (newfunc && oldfunc) 1283 *type_change_ok = TRUE; 1284 1285 /* It's OK to change the type if either the existing symbol or the 1286 new symbol is weak. A type change is also OK if the old symbol 1287 is undefined and the new symbol is defined. */ 1288 1289 if (oldweak 1290 || newweak 1291 || (newdef 1292 && h->root.type == bfd_link_hash_undefined)) 1293 *type_change_ok = TRUE; 1294 1295 /* It's OK to change the size if either the existing symbol or the 1296 new symbol is weak, or if the old symbol is undefined. */ 1297 1298 if (*type_change_ok 1299 || h->root.type == bfd_link_hash_undefined) 1300 *size_change_ok = TRUE; 1301 1302 /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old 1303 symbol, respectively, appears to be a common symbol in a dynamic 1304 object. If a symbol appears in an uninitialized section, and is 1305 not weak, and is not a function, then it may be a common symbol 1306 which was resolved when the dynamic object was created. We want 1307 to treat such symbols specially, because they raise special 1308 considerations when setting the symbol size: if the symbol 1309 appears as a common symbol in a regular object, and the size in 1310 the regular object is larger, we must make sure that we use the 1311 larger size. This problematic case can always be avoided in C, 1312 but it must be handled correctly when using Fortran shared 1313 libraries. 1314 1315 Note that if NEWDYNCOMMON is set, NEWDEF will be set, and 1316 likewise for OLDDYNCOMMON and OLDDEF. 1317 1318 Note that this test is just a heuristic, and that it is quite 1319 possible to have an uninitialized symbol in a shared object which 1320 is really a definition, rather than a common symbol. This could 1321 lead to some minor confusion when the symbol really is a common 1322 symbol in some regular object. However, I think it will be 1323 harmless. */ 1324 1325 if (newdyn 1326 && newdef 1327 && !newweak 1328 && (sec->flags & SEC_ALLOC) != 0 1329 && (sec->flags & SEC_LOAD) == 0 1330 && sym->st_size > 0 1331 && !newfunc) 1332 newdyncommon = TRUE; 1333 else 1334 newdyncommon = FALSE; 1335 1336 if (olddyn 1337 && olddef 1338 && h->root.type == bfd_link_hash_defined 1339 && h->def_dynamic 1340 && (h->root.u.def.section->flags & SEC_ALLOC) != 0 1341 && (h->root.u.def.section->flags & SEC_LOAD) == 0 1342 && h->size > 0 1343 && !oldfunc) 1344 olddyncommon = TRUE; 1345 else 1346 olddyncommon = FALSE; 1347 1348 /* We now know everything about the old and new symbols. We ask the 1349 backend to check if we can merge them. */ 1350 if (bed->merge_symbol 1351 && !bed->merge_symbol (info, sym_hash, h, sym, psec, pvalue, 1352 pold_alignment, skip, override, 1353 type_change_ok, size_change_ok, 1354 &newdyn, &newdef, &newdyncommon, &newweak, 1355 abfd, &sec, 1356 &olddyn, &olddef, &olddyncommon, &oldweak, 1357 oldbfd, &oldsec)) 1358 return FALSE; 1359 1360 /* If both the old and the new symbols look like common symbols in a 1361 dynamic object, set the size of the symbol to the larger of the 1362 two. */ 1363 1364 if (olddyncommon 1365 && newdyncommon 1366 && sym->st_size != h->size) 1367 { 1368 /* Since we think we have two common symbols, issue a multiple 1369 common warning if desired. Note that we only warn if the 1370 size is different. If the size is the same, we simply let 1371 the old symbol override the new one as normally happens with 1372 symbols defined in dynamic objects. */ 1373 1374 if (! ((*info->callbacks->multiple_common) 1375 (info, &h->root, abfd, bfd_link_hash_common, sym->st_size))) 1376 return FALSE; 1377 1378 if (sym->st_size > h->size) 1379 h->size = sym->st_size; 1380 1381 *size_change_ok = TRUE; 1382 } 1383 1384 /* If we are looking at a dynamic object, and we have found a 1385 definition, we need to see if the symbol was already defined by 1386 some other object. If so, we want to use the existing 1387 definition, and we do not want to report a multiple symbol 1388 definition error; we do this by clobbering *PSEC to be 1389 bfd_und_section_ptr. 1390 1391 We treat a common symbol as a definition if the symbol in the 1392 shared library is a function, since common symbols always 1393 represent variables; this can cause confusion in principle, but 1394 any such confusion would seem to indicate an erroneous program or 1395 shared library. We also permit a common symbol in a regular 1396 object to override a weak symbol in a shared object. */ 1397 1398 if (newdyn 1399 && newdef 1400 && (olddef 1401 || (h->root.type == bfd_link_hash_common 1402 && (newweak || newfunc)))) 1403 { 1404 *override = TRUE; 1405 newdef = FALSE; 1406 newdyncommon = FALSE; 1407 1408 *psec = sec = bfd_und_section_ptr; 1409 *size_change_ok = TRUE; 1410 1411 /* If we get here when the old symbol is a common symbol, then 1412 we are explicitly letting it override a weak symbol or 1413 function in a dynamic object, and we don't want to warn about 1414 a type change. If the old symbol is a defined symbol, a type 1415 change warning may still be appropriate. */ 1416 1417 if (h->root.type == bfd_link_hash_common) 1418 *type_change_ok = TRUE; 1419 } 1420 1421 /* Handle the special case of an old common symbol merging with a 1422 new symbol which looks like a common symbol in a shared object. 1423 We change *PSEC and *PVALUE to make the new symbol look like a 1424 common symbol, and let _bfd_generic_link_add_one_symbol do the 1425 right thing. */ 1426 1427 if (newdyncommon 1428 && h->root.type == bfd_link_hash_common) 1429 { 1430 *override = TRUE; 1431 newdef = FALSE; 1432 newdyncommon = FALSE; 1433 *pvalue = sym->st_size; 1434 *psec = sec = bed->common_section (oldsec); 1435 *size_change_ok = TRUE; 1436 } 1437 1438 /* Skip weak definitions of symbols that are already defined. */ 1439 if (newdef && olddef && newweak) 1440 { 1441 /* Don't skip new non-IR weak syms. */ 1442 if (!(oldbfd != NULL 1443 && (oldbfd->flags & BFD_PLUGIN) != 0 1444 && (abfd->flags & BFD_PLUGIN) == 0)) 1445 { 1446 newdef = FALSE; 1447 *skip = TRUE; 1448 } 1449 1450 /* Merge st_other. If the symbol already has a dynamic index, 1451 but visibility says it should not be visible, turn it into a 1452 local symbol. */ 1453 elf_merge_st_other (abfd, h, sym, newdef, newdyn); 1454 if (h->dynindx != -1) 1455 switch (ELF_ST_VISIBILITY (h->other)) 1456 { 1457 case STV_INTERNAL: 1458 case STV_HIDDEN: 1459 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 1460 break; 1461 } 1462 } 1463 1464 /* If the old symbol is from a dynamic object, and the new symbol is 1465 a definition which is not from a dynamic object, then the new 1466 symbol overrides the old symbol. Symbols from regular files 1467 always take precedence over symbols from dynamic objects, even if 1468 they are defined after the dynamic object in the link. 1469 1470 As above, we again permit a common symbol in a regular object to 1471 override a definition in a shared object if the shared object 1472 symbol is a function or is weak. */ 1473 1474 flip = NULL; 1475 if (!newdyn 1476 && (newdef 1477 || (bfd_is_com_section (sec) 1478 && (oldweak || oldfunc))) 1479 && olddyn 1480 && olddef 1481 && h->def_dynamic) 1482 { 1483 /* Change the hash table entry to undefined, and let 1484 _bfd_generic_link_add_one_symbol do the right thing with the 1485 new definition. */ 1486 1487 h->root.type = bfd_link_hash_undefined; 1488 h->root.u.undef.abfd = h->root.u.def.section->owner; 1489 *size_change_ok = TRUE; 1490 1491 olddef = FALSE; 1492 olddyncommon = FALSE; 1493 1494 /* We again permit a type change when a common symbol may be 1495 overriding a function. */ 1496 1497 if (bfd_is_com_section (sec)) 1498 { 1499 if (oldfunc) 1500 { 1501 /* If a common symbol overrides a function, make sure 1502 that it isn't defined dynamically nor has type 1503 function. */ 1504 h->def_dynamic = 0; 1505 h->type = STT_NOTYPE; 1506 } 1507 *type_change_ok = TRUE; 1508 } 1509 1510 if ((*sym_hash)->root.type == bfd_link_hash_indirect) 1511 flip = *sym_hash; 1512 else 1513 /* This union may have been set to be non-NULL when this symbol 1514 was seen in a dynamic object. We must force the union to be 1515 NULL, so that it is correct for a regular symbol. */ 1516 h->verinfo.vertree = NULL; 1517 } 1518 1519 /* Handle the special case of a new common symbol merging with an 1520 old symbol that looks like it might be a common symbol defined in 1521 a shared object. Note that we have already handled the case in 1522 which a new common symbol should simply override the definition 1523 in the shared library. */ 1524 1525 if (! newdyn 1526 && bfd_is_com_section (sec) 1527 && olddyncommon) 1528 { 1529 /* It would be best if we could set the hash table entry to a 1530 common symbol, but we don't know what to use for the section 1531 or the alignment. */ 1532 if (! ((*info->callbacks->multiple_common) 1533 (info, &h->root, abfd, bfd_link_hash_common, sym->st_size))) 1534 return FALSE; 1535 1536 /* If the presumed common symbol in the dynamic object is 1537 larger, pretend that the new symbol has its size. */ 1538 1539 if (h->size > *pvalue) 1540 *pvalue = h->size; 1541 1542 /* We need to remember the alignment required by the symbol 1543 in the dynamic object. */ 1544 BFD_ASSERT (pold_alignment); 1545 *pold_alignment = h->root.u.def.section->alignment_power; 1546 1547 olddef = FALSE; 1548 olddyncommon = FALSE; 1549 1550 h->root.type = bfd_link_hash_undefined; 1551 h->root.u.undef.abfd = h->root.u.def.section->owner; 1552 1553 *size_change_ok = TRUE; 1554 *type_change_ok = TRUE; 1555 1556 if ((*sym_hash)->root.type == bfd_link_hash_indirect) 1557 flip = *sym_hash; 1558 else 1559 h->verinfo.vertree = NULL; 1560 } 1561 1562 if (flip != NULL) 1563 { 1564 /* Handle the case where we had a versioned symbol in a dynamic 1565 library and now find a definition in a normal object. In this 1566 case, we make the versioned symbol point to the normal one. */ 1567 flip->root.type = h->root.type; 1568 flip->root.u.undef.abfd = h->root.u.undef.abfd; 1569 h->root.type = bfd_link_hash_indirect; 1570 h->root.u.i.link = (struct bfd_link_hash_entry *) flip; 1571 (*bed->elf_backend_copy_indirect_symbol) (info, flip, h); 1572 if (h->def_dynamic) 1573 { 1574 h->def_dynamic = 0; 1575 flip->ref_dynamic = 1; 1576 } 1577 } 1578 1579 return TRUE; 1580 } 1581 1582 /* This function is called to create an indirect symbol from the 1583 default for the symbol with the default version if needed. The 1584 symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE. We 1585 set DYNSYM if the new indirect symbol is dynamic. */ 1586 1587 static bfd_boolean 1588 _bfd_elf_add_default_symbol (bfd *abfd, 1589 struct bfd_link_info *info, 1590 struct elf_link_hash_entry *h, 1591 const char *name, 1592 Elf_Internal_Sym *sym, 1593 asection **psec, 1594 bfd_vma *value, 1595 bfd_boolean *dynsym, 1596 bfd_boolean override) 1597 { 1598 bfd_boolean type_change_ok; 1599 bfd_boolean size_change_ok; 1600 bfd_boolean skip; 1601 char *shortname; 1602 struct elf_link_hash_entry *hi; 1603 struct bfd_link_hash_entry *bh; 1604 const struct elf_backend_data *bed; 1605 bfd_boolean collect; 1606 bfd_boolean dynamic; 1607 char *p; 1608 size_t len, shortlen; 1609 asection *sec; 1610 1611 /* If this symbol has a version, and it is the default version, we 1612 create an indirect symbol from the default name to the fully 1613 decorated name. This will cause external references which do not 1614 specify a version to be bound to this version of the symbol. */ 1615 p = strchr (name, ELF_VER_CHR); 1616 if (p == NULL || p[1] != ELF_VER_CHR) 1617 return TRUE; 1618 1619 if (override) 1620 { 1621 /* We are overridden by an old definition. We need to check if we 1622 need to create the indirect symbol from the default name. */ 1623 hi = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, 1624 FALSE, FALSE); 1625 BFD_ASSERT (hi != NULL); 1626 if (hi == h) 1627 return TRUE; 1628 while (hi->root.type == bfd_link_hash_indirect 1629 || hi->root.type == bfd_link_hash_warning) 1630 { 1631 hi = (struct elf_link_hash_entry *) hi->root.u.i.link; 1632 if (hi == h) 1633 return TRUE; 1634 } 1635 } 1636 1637 bed = get_elf_backend_data (abfd); 1638 collect = bed->collect; 1639 dynamic = (abfd->flags & DYNAMIC) != 0; 1640 1641 shortlen = p - name; 1642 shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1); 1643 if (shortname == NULL) 1644 return FALSE; 1645 memcpy (shortname, name, shortlen); 1646 shortname[shortlen] = '\0'; 1647 1648 /* We are going to create a new symbol. Merge it with any existing 1649 symbol with this name. For the purposes of the merge, act as 1650 though we were defining the symbol we just defined, although we 1651 actually going to define an indirect symbol. */ 1652 type_change_ok = FALSE; 1653 size_change_ok = FALSE; 1654 sec = *psec; 1655 if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value, 1656 NULL, NULL, &hi, &skip, &override, 1657 &type_change_ok, &size_change_ok)) 1658 return FALSE; 1659 1660 if (skip) 1661 goto nondefault; 1662 1663 if (! override) 1664 { 1665 bh = &hi->root; 1666 if (! (_bfd_generic_link_add_one_symbol 1667 (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr, 1668 0, name, FALSE, collect, &bh))) 1669 return FALSE; 1670 hi = (struct elf_link_hash_entry *) bh; 1671 } 1672 else 1673 { 1674 /* In this case the symbol named SHORTNAME is overriding the 1675 indirect symbol we want to add. We were planning on making 1676 SHORTNAME an indirect symbol referring to NAME. SHORTNAME 1677 is the name without a version. NAME is the fully versioned 1678 name, and it is the default version. 1679 1680 Overriding means that we already saw a definition for the 1681 symbol SHORTNAME in a regular object, and it is overriding 1682 the symbol defined in the dynamic object. 1683 1684 When this happens, we actually want to change NAME, the 1685 symbol we just added, to refer to SHORTNAME. This will cause 1686 references to NAME in the shared object to become references 1687 to SHORTNAME in the regular object. This is what we expect 1688 when we override a function in a shared object: that the 1689 references in the shared object will be mapped to the 1690 definition in the regular object. */ 1691 1692 while (hi->root.type == bfd_link_hash_indirect 1693 || hi->root.type == bfd_link_hash_warning) 1694 hi = (struct elf_link_hash_entry *) hi->root.u.i.link; 1695 1696 h->root.type = bfd_link_hash_indirect; 1697 h->root.u.i.link = (struct bfd_link_hash_entry *) hi; 1698 if (h->def_dynamic) 1699 { 1700 h->def_dynamic = 0; 1701 hi->ref_dynamic = 1; 1702 if (hi->ref_regular 1703 || hi->def_regular) 1704 { 1705 if (! bfd_elf_link_record_dynamic_symbol (info, hi)) 1706 return FALSE; 1707 } 1708 } 1709 1710 /* Now set HI to H, so that the following code will set the 1711 other fields correctly. */ 1712 hi = h; 1713 } 1714 1715 /* Check if HI is a warning symbol. */ 1716 if (hi->root.type == bfd_link_hash_warning) 1717 hi = (struct elf_link_hash_entry *) hi->root.u.i.link; 1718 1719 /* If there is a duplicate definition somewhere, then HI may not 1720 point to an indirect symbol. We will have reported an error to 1721 the user in that case. */ 1722 1723 if (hi->root.type == bfd_link_hash_indirect) 1724 { 1725 struct elf_link_hash_entry *ht; 1726 1727 ht = (struct elf_link_hash_entry *) hi->root.u.i.link; 1728 (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi); 1729 1730 /* See if the new flags lead us to realize that the symbol must 1731 be dynamic. */ 1732 if (! *dynsym) 1733 { 1734 if (! dynamic) 1735 { 1736 if (! info->executable 1737 || hi->def_dynamic 1738 || hi->ref_dynamic) 1739 *dynsym = TRUE; 1740 } 1741 else 1742 { 1743 if (hi->ref_regular) 1744 *dynsym = TRUE; 1745 } 1746 } 1747 } 1748 1749 /* We also need to define an indirection from the nondefault version 1750 of the symbol. */ 1751 1752 nondefault: 1753 len = strlen (name); 1754 shortname = (char *) bfd_hash_allocate (&info->hash->table, len); 1755 if (shortname == NULL) 1756 return FALSE; 1757 memcpy (shortname, name, shortlen); 1758 memcpy (shortname + shortlen, p + 1, len - shortlen); 1759 1760 /* Once again, merge with any existing symbol. */ 1761 type_change_ok = FALSE; 1762 size_change_ok = FALSE; 1763 sec = *psec; 1764 if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value, 1765 NULL, NULL, &hi, &skip, &override, 1766 &type_change_ok, &size_change_ok)) 1767 return FALSE; 1768 1769 if (skip) 1770 return TRUE; 1771 1772 if (override) 1773 { 1774 /* Here SHORTNAME is a versioned name, so we don't expect to see 1775 the type of override we do in the case above unless it is 1776 overridden by a versioned definition. */ 1777 if (hi->root.type != bfd_link_hash_defined 1778 && hi->root.type != bfd_link_hash_defweak) 1779 (*_bfd_error_handler) 1780 (_("%B: unexpected redefinition of indirect versioned symbol `%s'"), 1781 abfd, shortname); 1782 } 1783 else 1784 { 1785 bh = &hi->root; 1786 if (! (_bfd_generic_link_add_one_symbol 1787 (info, abfd, shortname, BSF_INDIRECT, 1788 bfd_ind_section_ptr, 0, name, FALSE, collect, &bh))) 1789 return FALSE; 1790 hi = (struct elf_link_hash_entry *) bh; 1791 1792 /* If there is a duplicate definition somewhere, then HI may not 1793 point to an indirect symbol. We will have reported an error 1794 to the user in that case. */ 1795 1796 if (hi->root.type == bfd_link_hash_indirect) 1797 { 1798 (*bed->elf_backend_copy_indirect_symbol) (info, h, hi); 1799 1800 /* See if the new flags lead us to realize that the symbol 1801 must be dynamic. */ 1802 if (! *dynsym) 1803 { 1804 if (! dynamic) 1805 { 1806 if (! info->executable 1807 || hi->ref_dynamic) 1808 *dynsym = TRUE; 1809 } 1810 else 1811 { 1812 if (hi->ref_regular) 1813 *dynsym = TRUE; 1814 } 1815 } 1816 } 1817 } 1818 1819 return TRUE; 1820 } 1821 1822 /* This routine is used to export all defined symbols into the dynamic 1823 symbol table. It is called via elf_link_hash_traverse. */ 1824 1825 static bfd_boolean 1826 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data) 1827 { 1828 struct elf_info_failed *eif = (struct elf_info_failed *) data; 1829 1830 /* Ignore indirect symbols. These are added by the versioning code. */ 1831 if (h->root.type == bfd_link_hash_indirect) 1832 return TRUE; 1833 1834 /* Ignore this if we won't export it. */ 1835 if (!eif->info->export_dynamic && !h->dynamic) 1836 return TRUE; 1837 1838 if (h->dynindx == -1 1839 && (h->def_regular || h->ref_regular) 1840 && ! bfd_hide_sym_by_version (eif->info->version_info, 1841 h->root.root.string)) 1842 { 1843 if (! bfd_elf_link_record_dynamic_symbol (eif->info, h)) 1844 { 1845 eif->failed = TRUE; 1846 return FALSE; 1847 } 1848 } 1849 1850 return TRUE; 1851 } 1852 1853 /* Look through the symbols which are defined in other shared 1854 libraries and referenced here. Update the list of version 1855 dependencies. This will be put into the .gnu.version_r section. 1856 This function is called via elf_link_hash_traverse. */ 1857 1858 static bfd_boolean 1859 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, 1860 void *data) 1861 { 1862 struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data; 1863 Elf_Internal_Verneed *t; 1864 Elf_Internal_Vernaux *a; 1865 bfd_size_type amt; 1866 1867 /* We only care about symbols defined in shared objects with version 1868 information. */ 1869 if (!h->def_dynamic 1870 || h->def_regular 1871 || h->dynindx == -1 1872 || h->verinfo.verdef == NULL) 1873 return TRUE; 1874 1875 /* See if we already know about this version. */ 1876 for (t = elf_tdata (rinfo->info->output_bfd)->verref; 1877 t != NULL; 1878 t = t->vn_nextref) 1879 { 1880 if (t->vn_bfd != h->verinfo.verdef->vd_bfd) 1881 continue; 1882 1883 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 1884 if (a->vna_nodename == h->verinfo.verdef->vd_nodename) 1885 return TRUE; 1886 1887 break; 1888 } 1889 1890 /* This is a new version. Add it to tree we are building. */ 1891 1892 if (t == NULL) 1893 { 1894 amt = sizeof *t; 1895 t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt); 1896 if (t == NULL) 1897 { 1898 rinfo->failed = TRUE; 1899 return FALSE; 1900 } 1901 1902 t->vn_bfd = h->verinfo.verdef->vd_bfd; 1903 t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref; 1904 elf_tdata (rinfo->info->output_bfd)->verref = t; 1905 } 1906 1907 amt = sizeof *a; 1908 a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt); 1909 if (a == NULL) 1910 { 1911 rinfo->failed = TRUE; 1912 return FALSE; 1913 } 1914 1915 /* Note that we are copying a string pointer here, and testing it 1916 above. If bfd_elf_string_from_elf_section is ever changed to 1917 discard the string data when low in memory, this will have to be 1918 fixed. */ 1919 a->vna_nodename = h->verinfo.verdef->vd_nodename; 1920 1921 a->vna_flags = h->verinfo.verdef->vd_flags; 1922 a->vna_nextptr = t->vn_auxptr; 1923 1924 h->verinfo.verdef->vd_exp_refno = rinfo->vers; 1925 ++rinfo->vers; 1926 1927 a->vna_other = h->verinfo.verdef->vd_exp_refno + 1; 1928 1929 t->vn_auxptr = a; 1930 1931 return TRUE; 1932 } 1933 1934 /* Figure out appropriate versions for all the symbols. We may not 1935 have the version number script until we have read all of the input 1936 files, so until that point we don't know which symbols should be 1937 local. This function is called via elf_link_hash_traverse. */ 1938 1939 static bfd_boolean 1940 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) 1941 { 1942 struct elf_info_failed *sinfo; 1943 struct bfd_link_info *info; 1944 const struct elf_backend_data *bed; 1945 struct elf_info_failed eif; 1946 char *p; 1947 bfd_size_type amt; 1948 1949 sinfo = (struct elf_info_failed *) data; 1950 info = sinfo->info; 1951 1952 /* Fix the symbol flags. */ 1953 eif.failed = FALSE; 1954 eif.info = info; 1955 if (! _bfd_elf_fix_symbol_flags (h, &eif)) 1956 { 1957 if (eif.failed) 1958 sinfo->failed = TRUE; 1959 return FALSE; 1960 } 1961 1962 /* We only need version numbers for symbols defined in regular 1963 objects. */ 1964 if (!h->def_regular) 1965 return TRUE; 1966 1967 bed = get_elf_backend_data (info->output_bfd); 1968 p = strchr (h->root.root.string, ELF_VER_CHR); 1969 if (p != NULL && h->verinfo.vertree == NULL) 1970 { 1971 struct bfd_elf_version_tree *t; 1972 bfd_boolean hidden; 1973 1974 hidden = TRUE; 1975 1976 /* There are two consecutive ELF_VER_CHR characters if this is 1977 not a hidden symbol. */ 1978 ++p; 1979 if (*p == ELF_VER_CHR) 1980 { 1981 hidden = FALSE; 1982 ++p; 1983 } 1984 1985 /* If there is no version string, we can just return out. */ 1986 if (*p == '\0') 1987 { 1988 if (hidden) 1989 h->hidden = 1; 1990 return TRUE; 1991 } 1992 1993 /* Look for the version. If we find it, it is no longer weak. */ 1994 for (t = sinfo->info->version_info; t != NULL; t = t->next) 1995 { 1996 if (strcmp (t->name, p) == 0) 1997 { 1998 size_t len; 1999 char *alc; 2000 struct bfd_elf_version_expr *d; 2001 2002 len = p - h->root.root.string; 2003 alc = (char *) bfd_malloc (len); 2004 if (alc == NULL) 2005 { 2006 sinfo->failed = TRUE; 2007 return FALSE; 2008 } 2009 memcpy (alc, h->root.root.string, len - 1); 2010 alc[len - 1] = '\0'; 2011 if (alc[len - 2] == ELF_VER_CHR) 2012 alc[len - 2] = '\0'; 2013 2014 h->verinfo.vertree = t; 2015 t->used = TRUE; 2016 d = NULL; 2017 2018 if (t->globals.list != NULL) 2019 d = (*t->match) (&t->globals, NULL, alc); 2020 2021 /* See if there is anything to force this symbol to 2022 local scope. */ 2023 if (d == NULL && t->locals.list != NULL) 2024 { 2025 d = (*t->match) (&t->locals, NULL, alc); 2026 if (d != NULL 2027 && h->dynindx != -1 2028 && ! info->export_dynamic) 2029 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 2030 } 2031 2032 free (alc); 2033 break; 2034 } 2035 } 2036 2037 /* If we are building an application, we need to create a 2038 version node for this version. */ 2039 if (t == NULL && info->executable) 2040 { 2041 struct bfd_elf_version_tree **pp; 2042 int version_index; 2043 2044 /* If we aren't going to export this symbol, we don't need 2045 to worry about it. */ 2046 if (h->dynindx == -1) 2047 return TRUE; 2048 2049 amt = sizeof *t; 2050 t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, amt); 2051 if (t == NULL) 2052 { 2053 sinfo->failed = TRUE; 2054 return FALSE; 2055 } 2056 2057 t->name = p; 2058 t->name_indx = (unsigned int) -1; 2059 t->used = TRUE; 2060 2061 version_index = 1; 2062 /* Don't count anonymous version tag. */ 2063 if (sinfo->info->version_info != NULL 2064 && sinfo->info->version_info->vernum == 0) 2065 version_index = 0; 2066 for (pp = &sinfo->info->version_info; 2067 *pp != NULL; 2068 pp = &(*pp)->next) 2069 ++version_index; 2070 t->vernum = version_index; 2071 2072 *pp = t; 2073 2074 h->verinfo.vertree = t; 2075 } 2076 else if (t == NULL) 2077 { 2078 /* We could not find the version for a symbol when 2079 generating a shared archive. Return an error. */ 2080 (*_bfd_error_handler) 2081 (_("%B: version node not found for symbol %s"), 2082 info->output_bfd, h->root.root.string); 2083 bfd_set_error (bfd_error_bad_value); 2084 sinfo->failed = TRUE; 2085 return FALSE; 2086 } 2087 2088 if (hidden) 2089 h->hidden = 1; 2090 } 2091 2092 /* If we don't have a version for this symbol, see if we can find 2093 something. */ 2094 if (h->verinfo.vertree == NULL && sinfo->info->version_info != NULL) 2095 { 2096 bfd_boolean hide; 2097 2098 h->verinfo.vertree 2099 = bfd_find_version_for_sym (sinfo->info->version_info, 2100 h->root.root.string, &hide); 2101 if (h->verinfo.vertree != NULL && hide) 2102 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 2103 } 2104 2105 return TRUE; 2106 } 2107 2108 /* Read and swap the relocs from the section indicated by SHDR. This 2109 may be either a REL or a RELA section. The relocations are 2110 translated into RELA relocations and stored in INTERNAL_RELOCS, 2111 which should have already been allocated to contain enough space. 2112 The EXTERNAL_RELOCS are a buffer where the external form of the 2113 relocations should be stored. 2114 2115 Returns FALSE if something goes wrong. */ 2116 2117 static bfd_boolean 2118 elf_link_read_relocs_from_section (bfd *abfd, 2119 asection *sec, 2120 Elf_Internal_Shdr *shdr, 2121 void *external_relocs, 2122 Elf_Internal_Rela *internal_relocs) 2123 { 2124 const struct elf_backend_data *bed; 2125 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); 2126 const bfd_byte *erela; 2127 const bfd_byte *erelaend; 2128 Elf_Internal_Rela *irela; 2129 Elf_Internal_Shdr *symtab_hdr; 2130 size_t nsyms; 2131 2132 /* Position ourselves at the start of the section. */ 2133 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0) 2134 return FALSE; 2135 2136 /* Read the relocations. */ 2137 if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size) 2138 return FALSE; 2139 2140 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 2141 nsyms = NUM_SHDR_ENTRIES (symtab_hdr); 2142 2143 bed = get_elf_backend_data (abfd); 2144 2145 /* Convert the external relocations to the internal format. */ 2146 if (shdr->sh_entsize == bed->s->sizeof_rel) 2147 swap_in = bed->s->swap_reloc_in; 2148 else if (shdr->sh_entsize == bed->s->sizeof_rela) 2149 swap_in = bed->s->swap_reloca_in; 2150 else 2151 { 2152 bfd_set_error (bfd_error_wrong_format); 2153 return FALSE; 2154 } 2155 2156 erela = (const bfd_byte *) external_relocs; 2157 erelaend = erela + shdr->sh_size; 2158 irela = internal_relocs; 2159 while (erela < erelaend) 2160 { 2161 bfd_vma r_symndx; 2162 2163 (*swap_in) (abfd, erela, irela); 2164 r_symndx = ELF32_R_SYM (irela->r_info); 2165 if (bed->s->arch_size == 64) 2166 r_symndx >>= 24; 2167 if (nsyms > 0) 2168 { 2169 if ((size_t) r_symndx >= nsyms) 2170 { 2171 (*_bfd_error_handler) 2172 (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)" 2173 " for offset 0x%lx in section `%A'"), 2174 abfd, sec, 2175 (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); 2176 bfd_set_error (bfd_error_bad_value); 2177 return FALSE; 2178 } 2179 } 2180 else if (r_symndx != STN_UNDEF) 2181 { 2182 (*_bfd_error_handler) 2183 (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'" 2184 " when the object file has no symbol table"), 2185 abfd, sec, 2186 (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); 2187 bfd_set_error (bfd_error_bad_value); 2188 return FALSE; 2189 } 2190 irela += bed->s->int_rels_per_ext_rel; 2191 erela += shdr->sh_entsize; 2192 } 2193 2194 return TRUE; 2195 } 2196 2197 /* Read and swap the relocs for a section O. They may have been 2198 cached. If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are 2199 not NULL, they are used as buffers to read into. They are known to 2200 be large enough. If the INTERNAL_RELOCS relocs argument is NULL, 2201 the return value is allocated using either malloc or bfd_alloc, 2202 according to the KEEP_MEMORY argument. If O has two relocation 2203 sections (both REL and RELA relocations), then the REL_HDR 2204 relocations will appear first in INTERNAL_RELOCS, followed by the 2205 RELA_HDR relocations. */ 2206 2207 Elf_Internal_Rela * 2208 _bfd_elf_link_read_relocs (bfd *abfd, 2209 asection *o, 2210 void *external_relocs, 2211 Elf_Internal_Rela *internal_relocs, 2212 bfd_boolean keep_memory) 2213 { 2214 void *alloc1 = NULL; 2215 Elf_Internal_Rela *alloc2 = NULL; 2216 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 2217 struct bfd_elf_section_data *esdo = elf_section_data (o); 2218 Elf_Internal_Rela *internal_rela_relocs; 2219 2220 if (esdo->relocs != NULL) 2221 return esdo->relocs; 2222 2223 if (o->reloc_count == 0) 2224 return NULL; 2225 2226 if (internal_relocs == NULL) 2227 { 2228 bfd_size_type size; 2229 2230 size = o->reloc_count; 2231 size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela); 2232 if (keep_memory) 2233 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size); 2234 else 2235 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size); 2236 if (internal_relocs == NULL) 2237 goto error_return; 2238 } 2239 2240 if (external_relocs == NULL) 2241 { 2242 bfd_size_type size = 0; 2243 2244 if (esdo->rel.hdr) 2245 size += esdo->rel.hdr->sh_size; 2246 if (esdo->rela.hdr) 2247 size += esdo->rela.hdr->sh_size; 2248 2249 alloc1 = bfd_malloc (size); 2250 if (alloc1 == NULL) 2251 goto error_return; 2252 external_relocs = alloc1; 2253 } 2254 2255 internal_rela_relocs = internal_relocs; 2256 if (esdo->rel.hdr) 2257 { 2258 if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr, 2259 external_relocs, 2260 internal_relocs)) 2261 goto error_return; 2262 external_relocs = (((bfd_byte *) external_relocs) 2263 + esdo->rel.hdr->sh_size); 2264 internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr) 2265 * bed->s->int_rels_per_ext_rel); 2266 } 2267 2268 if (esdo->rela.hdr 2269 && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr, 2270 external_relocs, 2271 internal_rela_relocs))) 2272 goto error_return; 2273 2274 /* Cache the results for next time, if we can. */ 2275 if (keep_memory) 2276 esdo->relocs = internal_relocs; 2277 2278 if (alloc1 != NULL) 2279 free (alloc1); 2280 2281 /* Don't free alloc2, since if it was allocated we are passing it 2282 back (under the name of internal_relocs). */ 2283 2284 return internal_relocs; 2285 2286 error_return: 2287 if (alloc1 != NULL) 2288 free (alloc1); 2289 if (alloc2 != NULL) 2290 { 2291 if (keep_memory) 2292 bfd_release (abfd, alloc2); 2293 else 2294 free (alloc2); 2295 } 2296 return NULL; 2297 } 2298 2299 /* Compute the size of, and allocate space for, REL_HDR which is the 2300 section header for a section containing relocations for O. */ 2301 2302 static bfd_boolean 2303 _bfd_elf_link_size_reloc_section (bfd *abfd, 2304 struct bfd_elf_section_reloc_data *reldata) 2305 { 2306 Elf_Internal_Shdr *rel_hdr = reldata->hdr; 2307 2308 /* That allows us to calculate the size of the section. */ 2309 rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count; 2310 2311 /* The contents field must last into write_object_contents, so we 2312 allocate it with bfd_alloc rather than malloc. Also since we 2313 cannot be sure that the contents will actually be filled in, 2314 we zero the allocated space. */ 2315 rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size); 2316 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0) 2317 return FALSE; 2318 2319 if (reldata->hashes == NULL && reldata->count) 2320 { 2321 struct elf_link_hash_entry **p; 2322 2323 p = (struct elf_link_hash_entry **) 2324 bfd_zmalloc (reldata->count * sizeof (struct elf_link_hash_entry *)); 2325 if (p == NULL) 2326 return FALSE; 2327 2328 reldata->hashes = p; 2329 } 2330 2331 return TRUE; 2332 } 2333 2334 /* Copy the relocations indicated by the INTERNAL_RELOCS (which 2335 originated from the section given by INPUT_REL_HDR) to the 2336 OUTPUT_BFD. */ 2337 2338 bfd_boolean 2339 _bfd_elf_link_output_relocs (bfd *output_bfd, 2340 asection *input_section, 2341 Elf_Internal_Shdr *input_rel_hdr, 2342 Elf_Internal_Rela *internal_relocs, 2343 struct elf_link_hash_entry **rel_hash 2344 ATTRIBUTE_UNUSED) 2345 { 2346 Elf_Internal_Rela *irela; 2347 Elf_Internal_Rela *irelaend; 2348 bfd_byte *erel; 2349 struct bfd_elf_section_reloc_data *output_reldata; 2350 asection *output_section; 2351 const struct elf_backend_data *bed; 2352 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 2353 struct bfd_elf_section_data *esdo; 2354 2355 output_section = input_section->output_section; 2356 2357 bed = get_elf_backend_data (output_bfd); 2358 esdo = elf_section_data (output_section); 2359 if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize) 2360 { 2361 output_reldata = &esdo->rel; 2362 swap_out = bed->s->swap_reloc_out; 2363 } 2364 else if (esdo->rela.hdr 2365 && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize) 2366 { 2367 output_reldata = &esdo->rela; 2368 swap_out = bed->s->swap_reloca_out; 2369 } 2370 else 2371 { 2372 (*_bfd_error_handler) 2373 (_("%B: relocation size mismatch in %B section %A"), 2374 output_bfd, input_section->owner, input_section); 2375 bfd_set_error (bfd_error_wrong_format); 2376 return FALSE; 2377 } 2378 2379 erel = output_reldata->hdr->contents; 2380 erel += output_reldata->count * input_rel_hdr->sh_entsize; 2381 irela = internal_relocs; 2382 irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr) 2383 * bed->s->int_rels_per_ext_rel); 2384 while (irela < irelaend) 2385 { 2386 (*swap_out) (output_bfd, irela, erel); 2387 irela += bed->s->int_rels_per_ext_rel; 2388 erel += input_rel_hdr->sh_entsize; 2389 } 2390 2391 /* Bump the counter, so that we know where to add the next set of 2392 relocations. */ 2393 output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr); 2394 2395 return TRUE; 2396 } 2397 2398 /* Make weak undefined symbols in PIE dynamic. */ 2399 2400 bfd_boolean 2401 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info, 2402 struct elf_link_hash_entry *h) 2403 { 2404 if (info->pie 2405 && h->dynindx == -1 2406 && h->root.type == bfd_link_hash_undefweak) 2407 return bfd_elf_link_record_dynamic_symbol (info, h); 2408 2409 return TRUE; 2410 } 2411 2412 /* Fix up the flags for a symbol. This handles various cases which 2413 can only be fixed after all the input files are seen. This is 2414 currently called by both adjust_dynamic_symbol and 2415 assign_sym_version, which is unnecessary but perhaps more robust in 2416 the face of future changes. */ 2417 2418 static bfd_boolean 2419 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h, 2420 struct elf_info_failed *eif) 2421 { 2422 const struct elf_backend_data *bed; 2423 2424 /* If this symbol was mentioned in a non-ELF file, try to set 2425 DEF_REGULAR and REF_REGULAR correctly. This is the only way to 2426 permit a non-ELF file to correctly refer to a symbol defined in 2427 an ELF dynamic object. */ 2428 if (h->non_elf) 2429 { 2430 while (h->root.type == bfd_link_hash_indirect) 2431 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2432 2433 if (h->root.type != bfd_link_hash_defined 2434 && h->root.type != bfd_link_hash_defweak) 2435 { 2436 h->ref_regular = 1; 2437 h->ref_regular_nonweak = 1; 2438 } 2439 else 2440 { 2441 if (h->root.u.def.section->owner != NULL 2442 && (bfd_get_flavour (h->root.u.def.section->owner) 2443 == bfd_target_elf_flavour)) 2444 { 2445 h->ref_regular = 1; 2446 h->ref_regular_nonweak = 1; 2447 } 2448 else 2449 h->def_regular = 1; 2450 } 2451 2452 if (h->dynindx == -1 2453 && (h->def_dynamic 2454 || h->ref_dynamic)) 2455 { 2456 if (! bfd_elf_link_record_dynamic_symbol (eif->info, h)) 2457 { 2458 eif->failed = TRUE; 2459 return FALSE; 2460 } 2461 } 2462 } 2463 else 2464 { 2465 /* Unfortunately, NON_ELF is only correct if the symbol 2466 was first seen in a non-ELF file. Fortunately, if the symbol 2467 was first seen in an ELF file, we're probably OK unless the 2468 symbol was defined in a non-ELF file. Catch that case here. 2469 FIXME: We're still in trouble if the symbol was first seen in 2470 a dynamic object, and then later in a non-ELF regular object. */ 2471 if ((h->root.type == bfd_link_hash_defined 2472 || h->root.type == bfd_link_hash_defweak) 2473 && !h->def_regular 2474 && (h->root.u.def.section->owner != NULL 2475 ? (bfd_get_flavour (h->root.u.def.section->owner) 2476 != bfd_target_elf_flavour) 2477 : (bfd_is_abs_section (h->root.u.def.section) 2478 && !h->def_dynamic))) 2479 h->def_regular = 1; 2480 } 2481 2482 /* Backend specific symbol fixup. */ 2483 bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj); 2484 if (bed->elf_backend_fixup_symbol 2485 && !(*bed->elf_backend_fixup_symbol) (eif->info, h)) 2486 return FALSE; 2487 2488 /* If this is a final link, and the symbol was defined as a common 2489 symbol in a regular object file, and there was no definition in 2490 any dynamic object, then the linker will have allocated space for 2491 the symbol in a common section but the DEF_REGULAR 2492 flag will not have been set. */ 2493 if (h->root.type == bfd_link_hash_defined 2494 && !h->def_regular 2495 && h->ref_regular 2496 && !h->def_dynamic 2497 && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) 2498 h->def_regular = 1; 2499 2500 /* If -Bsymbolic was used (which means to bind references to global 2501 symbols to the definition within the shared object), and this 2502 symbol was defined in a regular object, then it actually doesn't 2503 need a PLT entry. Likewise, if the symbol has non-default 2504 visibility. If the symbol has hidden or internal visibility, we 2505 will force it local. */ 2506 if (h->needs_plt 2507 && eif->info->shared 2508 && is_elf_hash_table (eif->info->hash) 2509 && (SYMBOLIC_BIND (eif->info, h) 2510 || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) 2511 && h->def_regular) 2512 { 2513 bfd_boolean force_local; 2514 2515 force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL 2516 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN); 2517 (*bed->elf_backend_hide_symbol) (eif->info, h, force_local); 2518 } 2519 2520 /* If a weak undefined symbol has non-default visibility, we also 2521 hide it from the dynamic linker. */ 2522 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT 2523 && h->root.type == bfd_link_hash_undefweak) 2524 (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE); 2525 2526 /* If this is a weak defined symbol in a dynamic object, and we know 2527 the real definition in the dynamic object, copy interesting flags 2528 over to the real definition. */ 2529 if (h->u.weakdef != NULL) 2530 { 2531 /* If the real definition is defined by a regular object file, 2532 don't do anything special. See the longer description in 2533 _bfd_elf_adjust_dynamic_symbol, below. */ 2534 if (h->u.weakdef->def_regular) 2535 h->u.weakdef = NULL; 2536 else 2537 { 2538 struct elf_link_hash_entry *weakdef = h->u.weakdef; 2539 2540 while (h->root.type == bfd_link_hash_indirect) 2541 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2542 2543 BFD_ASSERT (h->root.type == bfd_link_hash_defined 2544 || h->root.type == bfd_link_hash_defweak); 2545 BFD_ASSERT (weakdef->def_dynamic); 2546 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined 2547 || weakdef->root.type == bfd_link_hash_defweak); 2548 (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h); 2549 } 2550 } 2551 2552 return TRUE; 2553 } 2554 2555 /* Make the backend pick a good value for a dynamic symbol. This is 2556 called via elf_link_hash_traverse, and also calls itself 2557 recursively. */ 2558 2559 static bfd_boolean 2560 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data) 2561 { 2562 struct elf_info_failed *eif = (struct elf_info_failed *) data; 2563 bfd *dynobj; 2564 const struct elf_backend_data *bed; 2565 2566 if (! is_elf_hash_table (eif->info->hash)) 2567 return FALSE; 2568 2569 /* Ignore indirect symbols. These are added by the versioning code. */ 2570 if (h->root.type == bfd_link_hash_indirect) 2571 return TRUE; 2572 2573 /* Fix the symbol flags. */ 2574 if (! _bfd_elf_fix_symbol_flags (h, eif)) 2575 return FALSE; 2576 2577 /* If this symbol does not require a PLT entry, and it is not 2578 defined by a dynamic object, or is not referenced by a regular 2579 object, ignore it. We do have to handle a weak defined symbol, 2580 even if no regular object refers to it, if we decided to add it 2581 to the dynamic symbol table. FIXME: Do we normally need to worry 2582 about symbols which are defined by one dynamic object and 2583 referenced by another one? */ 2584 if (!h->needs_plt 2585 && h->type != STT_GNU_IFUNC 2586 && (h->def_regular 2587 || !h->def_dynamic 2588 || (!h->ref_regular 2589 && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1)))) 2590 { 2591 h->plt = elf_hash_table (eif->info)->init_plt_offset; 2592 return TRUE; 2593 } 2594 2595 /* If we've already adjusted this symbol, don't do it again. This 2596 can happen via a recursive call. */ 2597 if (h->dynamic_adjusted) 2598 return TRUE; 2599 2600 /* Don't look at this symbol again. Note that we must set this 2601 after checking the above conditions, because we may look at a 2602 symbol once, decide not to do anything, and then get called 2603 recursively later after REF_REGULAR is set below. */ 2604 h->dynamic_adjusted = 1; 2605 2606 /* If this is a weak definition, and we know a real definition, and 2607 the real symbol is not itself defined by a regular object file, 2608 then get a good value for the real definition. We handle the 2609 real symbol first, for the convenience of the backend routine. 2610 2611 Note that there is a confusing case here. If the real definition 2612 is defined by a regular object file, we don't get the real symbol 2613 from the dynamic object, but we do get the weak symbol. If the 2614 processor backend uses a COPY reloc, then if some routine in the 2615 dynamic object changes the real symbol, we will not see that 2616 change in the corresponding weak symbol. This is the way other 2617 ELF linkers work as well, and seems to be a result of the shared 2618 library model. 2619 2620 I will clarify this issue. Most SVR4 shared libraries define the 2621 variable _timezone and define timezone as a weak synonym. The 2622 tzset call changes _timezone. If you write 2623 extern int timezone; 2624 int _timezone = 5; 2625 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); } 2626 you might expect that, since timezone is a synonym for _timezone, 2627 the same number will print both times. However, if the processor 2628 backend uses a COPY reloc, then actually timezone will be copied 2629 into your process image, and, since you define _timezone 2630 yourself, _timezone will not. Thus timezone and _timezone will 2631 wind up at different memory locations. The tzset call will set 2632 _timezone, leaving timezone unchanged. */ 2633 2634 if (h->u.weakdef != NULL) 2635 { 2636 /* If we get to this point, there is an implicit reference to 2637 H->U.WEAKDEF by a regular object file via the weak symbol H. */ 2638 h->u.weakdef->ref_regular = 1; 2639 2640 /* Ensure that the backend adjust_dynamic_symbol function sees 2641 H->U.WEAKDEF before H by recursively calling ourselves. */ 2642 if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif)) 2643 return FALSE; 2644 } 2645 2646 /* If a symbol has no type and no size and does not require a PLT 2647 entry, then we are probably about to do the wrong thing here: we 2648 are probably going to create a COPY reloc for an empty object. 2649 This case can arise when a shared object is built with assembly 2650 code, and the assembly code fails to set the symbol type. */ 2651 if (h->size == 0 2652 && h->type == STT_NOTYPE 2653 && !h->needs_plt) 2654 (*_bfd_error_handler) 2655 (_("warning: type and size of dynamic symbol `%s' are not defined"), 2656 h->root.root.string); 2657 2658 dynobj = elf_hash_table (eif->info)->dynobj; 2659 bed = get_elf_backend_data (dynobj); 2660 2661 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h)) 2662 { 2663 eif->failed = TRUE; 2664 return FALSE; 2665 } 2666 2667 return TRUE; 2668 } 2669 2670 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section, 2671 DYNBSS. */ 2672 2673 bfd_boolean 2674 _bfd_elf_adjust_dynamic_copy (struct elf_link_hash_entry *h, 2675 asection *dynbss) 2676 { 2677 unsigned int power_of_two; 2678 bfd_vma mask; 2679 asection *sec = h->root.u.def.section; 2680 2681 /* The section aligment of definition is the maximum alignment 2682 requirement of symbols defined in the section. Since we don't 2683 know the symbol alignment requirement, we start with the 2684 maximum alignment and check low bits of the symbol address 2685 for the minimum alignment. */ 2686 power_of_two = bfd_get_section_alignment (sec->owner, sec); 2687 mask = ((bfd_vma) 1 << power_of_two) - 1; 2688 while ((h->root.u.def.value & mask) != 0) 2689 { 2690 mask >>= 1; 2691 --power_of_two; 2692 } 2693 2694 if (power_of_two > bfd_get_section_alignment (dynbss->owner, 2695 dynbss)) 2696 { 2697 /* Adjust the section alignment if needed. */ 2698 if (! bfd_set_section_alignment (dynbss->owner, dynbss, 2699 power_of_two)) 2700 return FALSE; 2701 } 2702 2703 /* We make sure that the symbol will be aligned properly. */ 2704 dynbss->size = BFD_ALIGN (dynbss->size, mask + 1); 2705 2706 /* Define the symbol as being at this point in DYNBSS. */ 2707 h->root.u.def.section = dynbss; 2708 h->root.u.def.value = dynbss->size; 2709 2710 /* Increment the size of DYNBSS to make room for the symbol. */ 2711 dynbss->size += h->size; 2712 2713 return TRUE; 2714 } 2715 2716 /* Adjust all external symbols pointing into SEC_MERGE sections 2717 to reflect the object merging within the sections. */ 2718 2719 static bfd_boolean 2720 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data) 2721 { 2722 asection *sec; 2723 2724 if ((h->root.type == bfd_link_hash_defined 2725 || h->root.type == bfd_link_hash_defweak) 2726 && ((sec = h->root.u.def.section)->flags & SEC_MERGE) 2727 && sec->sec_info_type == SEC_INFO_TYPE_MERGE) 2728 { 2729 bfd *output_bfd = (bfd *) data; 2730 2731 h->root.u.def.value = 2732 _bfd_merged_section_offset (output_bfd, 2733 &h->root.u.def.section, 2734 elf_section_data (sec)->sec_info, 2735 h->root.u.def.value); 2736 } 2737 2738 return TRUE; 2739 } 2740 2741 /* Returns false if the symbol referred to by H should be considered 2742 to resolve local to the current module, and true if it should be 2743 considered to bind dynamically. */ 2744 2745 bfd_boolean 2746 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h, 2747 struct bfd_link_info *info, 2748 bfd_boolean not_local_protected) 2749 { 2750 bfd_boolean binding_stays_local_p; 2751 const struct elf_backend_data *bed; 2752 struct elf_link_hash_table *hash_table; 2753 2754 if (h == NULL) 2755 return FALSE; 2756 2757 while (h->root.type == bfd_link_hash_indirect 2758 || h->root.type == bfd_link_hash_warning) 2759 h = (struct elf_link_hash_entry *) h->root.u.i.link; 2760 2761 /* If it was forced local, then clearly it's not dynamic. */ 2762 if (h->dynindx == -1) 2763 return FALSE; 2764 if (h->forced_local) 2765 return FALSE; 2766 2767 /* Identify the cases where name binding rules say that a 2768 visible symbol resolves locally. */ 2769 binding_stays_local_p = info->executable || SYMBOLIC_BIND (info, h); 2770 2771 switch (ELF_ST_VISIBILITY (h->other)) 2772 { 2773 case STV_INTERNAL: 2774 case STV_HIDDEN: 2775 return FALSE; 2776 2777 case STV_PROTECTED: 2778 hash_table = elf_hash_table (info); 2779 if (!is_elf_hash_table (hash_table)) 2780 return FALSE; 2781 2782 bed = get_elf_backend_data (hash_table->dynobj); 2783 2784 /* Proper resolution for function pointer equality may require 2785 that these symbols perhaps be resolved dynamically, even though 2786 we should be resolving them to the current module. */ 2787 if (!not_local_protected || !bed->is_function_type (h->type)) 2788 binding_stays_local_p = TRUE; 2789 break; 2790 2791 default: 2792 break; 2793 } 2794 2795 /* If it isn't defined locally, then clearly it's dynamic. */ 2796 if (!h->def_regular && !ELF_COMMON_DEF_P (h)) 2797 return TRUE; 2798 2799 /* Otherwise, the symbol is dynamic if binding rules don't tell 2800 us that it remains local. */ 2801 return !binding_stays_local_p; 2802 } 2803 2804 /* Return true if the symbol referred to by H should be considered 2805 to resolve local to the current module, and false otherwise. Differs 2806 from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of 2807 undefined symbols. The two functions are virtually identical except 2808 for the place where forced_local and dynindx == -1 are tested. If 2809 either of those tests are true, _bfd_elf_dynamic_symbol_p will say 2810 the symbol is local, while _bfd_elf_symbol_refs_local_p will say 2811 the symbol is local only for defined symbols. 2812 It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as 2813 !_bfd_elf_symbol_refs_local_p, except that targets differ in their 2814 treatment of undefined weak symbols. For those that do not make 2815 undefined weak symbols dynamic, both functions may return false. */ 2816 2817 bfd_boolean 2818 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, 2819 struct bfd_link_info *info, 2820 bfd_boolean local_protected) 2821 { 2822 const struct elf_backend_data *bed; 2823 struct elf_link_hash_table *hash_table; 2824 2825 /* If it's a local sym, of course we resolve locally. */ 2826 if (h == NULL) 2827 return TRUE; 2828 2829 /* STV_HIDDEN or STV_INTERNAL ones must be local. */ 2830 if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN 2831 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL) 2832 return TRUE; 2833 2834 /* Common symbols that become definitions don't get the DEF_REGULAR 2835 flag set, so test it first, and don't bail out. */ 2836 if (ELF_COMMON_DEF_P (h)) 2837 /* Do nothing. */; 2838 /* If we don't have a definition in a regular file, then we can't 2839 resolve locally. The sym is either undefined or dynamic. */ 2840 else if (!h->def_regular) 2841 return FALSE; 2842 2843 /* Forced local symbols resolve locally. */ 2844 if (h->forced_local) 2845 return TRUE; 2846 2847 /* As do non-dynamic symbols. */ 2848 if (h->dynindx == -1) 2849 return TRUE; 2850 2851 /* At this point, we know the symbol is defined and dynamic. In an 2852 executable it must resolve locally, likewise when building symbolic 2853 shared libraries. */ 2854 if (info->executable || SYMBOLIC_BIND (info, h)) 2855 return TRUE; 2856 2857 /* Now deal with defined dynamic symbols in shared libraries. Ones 2858 with default visibility might not resolve locally. */ 2859 if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) 2860 return FALSE; 2861 2862 hash_table = elf_hash_table (info); 2863 if (!is_elf_hash_table (hash_table)) 2864 return TRUE; 2865 2866 bed = get_elf_backend_data (hash_table->dynobj); 2867 2868 /* STV_PROTECTED non-function symbols are local. */ 2869 if (!bed->is_function_type (h->type)) 2870 return TRUE; 2871 2872 /* Function pointer equality tests may require that STV_PROTECTED 2873 symbols be treated as dynamic symbols. If the address of a 2874 function not defined in an executable is set to that function's 2875 plt entry in the executable, then the address of the function in 2876 a shared library must also be the plt entry in the executable. */ 2877 return local_protected; 2878 } 2879 2880 /* Caches some TLS segment info, and ensures that the TLS segment vma is 2881 aligned. Returns the first TLS output section. */ 2882 2883 struct bfd_section * 2884 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info) 2885 { 2886 struct bfd_section *sec, *tls; 2887 unsigned int align = 0; 2888 2889 for (sec = obfd->sections; sec != NULL; sec = sec->next) 2890 if ((sec->flags & SEC_THREAD_LOCAL) != 0) 2891 break; 2892 tls = sec; 2893 2894 for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next) 2895 if (sec->alignment_power > align) 2896 align = sec->alignment_power; 2897 2898 elf_hash_table (info)->tls_sec = tls; 2899 2900 /* Ensure the alignment of the first section is the largest alignment, 2901 so that the tls segment starts aligned. */ 2902 if (tls != NULL) 2903 tls->alignment_power = align; 2904 2905 return tls; 2906 } 2907 2908 /* Return TRUE iff this is a non-common, definition of a non-function symbol. */ 2909 static bfd_boolean 2910 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED, 2911 Elf_Internal_Sym *sym) 2912 { 2913 const struct elf_backend_data *bed; 2914 2915 /* Local symbols do not count, but target specific ones might. */ 2916 if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL 2917 && ELF_ST_BIND (sym->st_info) < STB_LOOS) 2918 return FALSE; 2919 2920 bed = get_elf_backend_data (abfd); 2921 /* Function symbols do not count. */ 2922 if (bed->is_function_type (ELF_ST_TYPE (sym->st_info))) 2923 return FALSE; 2924 2925 /* If the section is undefined, then so is the symbol. */ 2926 if (sym->st_shndx == SHN_UNDEF) 2927 return FALSE; 2928 2929 /* If the symbol is defined in the common section, then 2930 it is a common definition and so does not count. */ 2931 if (bed->common_definition (sym)) 2932 return FALSE; 2933 2934 /* If the symbol is in a target specific section then we 2935 must rely upon the backend to tell us what it is. */ 2936 if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS) 2937 /* FIXME - this function is not coded yet: 2938 2939 return _bfd_is_global_symbol_definition (abfd, sym); 2940 2941 Instead for now assume that the definition is not global, 2942 Even if this is wrong, at least the linker will behave 2943 in the same way that it used to do. */ 2944 return FALSE; 2945 2946 return TRUE; 2947 } 2948 2949 /* Search the symbol table of the archive element of the archive ABFD 2950 whose archive map contains a mention of SYMDEF, and determine if 2951 the symbol is defined in this element. */ 2952 static bfd_boolean 2953 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef) 2954 { 2955 Elf_Internal_Shdr * hdr; 2956 bfd_size_type symcount; 2957 bfd_size_type extsymcount; 2958 bfd_size_type extsymoff; 2959 Elf_Internal_Sym *isymbuf; 2960 Elf_Internal_Sym *isym; 2961 Elf_Internal_Sym *isymend; 2962 bfd_boolean result; 2963 2964 abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset); 2965 if (abfd == NULL) 2966 return FALSE; 2967 2968 if (! bfd_check_format (abfd, bfd_object)) 2969 return FALSE; 2970 2971 /* If we have already included the element containing this symbol in the 2972 link then we do not need to include it again. Just claim that any symbol 2973 it contains is not a definition, so that our caller will not decide to 2974 (re)include this element. */ 2975 if (abfd->archive_pass) 2976 return FALSE; 2977 2978 /* Select the appropriate symbol table. */ 2979 if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0) 2980 hdr = &elf_tdata (abfd)->symtab_hdr; 2981 else 2982 hdr = &elf_tdata (abfd)->dynsymtab_hdr; 2983 2984 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; 2985 2986 /* The sh_info field of the symtab header tells us where the 2987 external symbols start. We don't care about the local symbols. */ 2988 if (elf_bad_symtab (abfd)) 2989 { 2990 extsymcount = symcount; 2991 extsymoff = 0; 2992 } 2993 else 2994 { 2995 extsymcount = symcount - hdr->sh_info; 2996 extsymoff = hdr->sh_info; 2997 } 2998 2999 if (extsymcount == 0) 3000 return FALSE; 3001 3002 /* Read in the symbol table. */ 3003 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff, 3004 NULL, NULL, NULL); 3005 if (isymbuf == NULL) 3006 return FALSE; 3007 3008 /* Scan the symbol table looking for SYMDEF. */ 3009 result = FALSE; 3010 for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++) 3011 { 3012 const char *name; 3013 3014 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 3015 isym->st_name); 3016 if (name == NULL) 3017 break; 3018 3019 if (strcmp (name, symdef->name) == 0) 3020 { 3021 result = is_global_data_symbol_definition (abfd, isym); 3022 break; 3023 } 3024 } 3025 3026 free (isymbuf); 3027 3028 return result; 3029 } 3030 3031 /* Add an entry to the .dynamic table. */ 3032 3033 bfd_boolean 3034 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info, 3035 bfd_vma tag, 3036 bfd_vma val) 3037 { 3038 struct elf_link_hash_table *hash_table; 3039 const struct elf_backend_data *bed; 3040 asection *s; 3041 bfd_size_type newsize; 3042 bfd_byte *newcontents; 3043 Elf_Internal_Dyn dyn; 3044 3045 hash_table = elf_hash_table (info); 3046 if (! is_elf_hash_table (hash_table)) 3047 return FALSE; 3048 3049 bed = get_elf_backend_data (hash_table->dynobj); 3050 s = bfd_get_linker_section (hash_table->dynobj, ".dynamic"); 3051 BFD_ASSERT (s != NULL); 3052 3053 newsize = s->size + bed->s->sizeof_dyn; 3054 newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize); 3055 if (newcontents == NULL) 3056 return FALSE; 3057 3058 dyn.d_tag = tag; 3059 dyn.d_un.d_val = val; 3060 bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size); 3061 3062 s->size = newsize; 3063 s->contents = newcontents; 3064 3065 return TRUE; 3066 } 3067 3068 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true, 3069 otherwise just check whether one already exists. Returns -1 on error, 3070 1 if a DT_NEEDED tag already exists, and 0 on success. */ 3071 3072 static int 3073 elf_add_dt_needed_tag (bfd *abfd, 3074 struct bfd_link_info *info, 3075 const char *soname, 3076 bfd_boolean do_it) 3077 { 3078 struct elf_link_hash_table *hash_table; 3079 bfd_size_type strindex; 3080 3081 if (!_bfd_elf_link_create_dynstrtab (abfd, info)) 3082 return -1; 3083 3084 hash_table = elf_hash_table (info); 3085 strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE); 3086 if (strindex == (bfd_size_type) -1) 3087 return -1; 3088 3089 if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1) 3090 { 3091 asection *sdyn; 3092 const struct elf_backend_data *bed; 3093 bfd_byte *extdyn; 3094 3095 bed = get_elf_backend_data (hash_table->dynobj); 3096 sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic"); 3097 if (sdyn != NULL) 3098 for (extdyn = sdyn->contents; 3099 extdyn < sdyn->contents + sdyn->size; 3100 extdyn += bed->s->sizeof_dyn) 3101 { 3102 Elf_Internal_Dyn dyn; 3103 3104 bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn); 3105 if (dyn.d_tag == DT_NEEDED 3106 && dyn.d_un.d_val == strindex) 3107 { 3108 _bfd_elf_strtab_delref (hash_table->dynstr, strindex); 3109 return 1; 3110 } 3111 } 3112 } 3113 3114 if (do_it) 3115 { 3116 if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info)) 3117 return -1; 3118 3119 if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex)) 3120 return -1; 3121 } 3122 else 3123 /* We were just checking for existence of the tag. */ 3124 _bfd_elf_strtab_delref (hash_table->dynstr, strindex); 3125 3126 return 0; 3127 } 3128 3129 static bfd_boolean 3130 on_needed_list (const char *soname, struct bfd_link_needed_list *needed) 3131 { 3132 for (; needed != NULL; needed = needed->next) 3133 if (strcmp (soname, needed->name) == 0) 3134 return TRUE; 3135 3136 return FALSE; 3137 } 3138 3139 /* Sort symbol by value, section, and size. */ 3140 static int 3141 elf_sort_symbol (const void *arg1, const void *arg2) 3142 { 3143 const struct elf_link_hash_entry *h1; 3144 const struct elf_link_hash_entry *h2; 3145 bfd_signed_vma vdiff; 3146 3147 h1 = *(const struct elf_link_hash_entry **) arg1; 3148 h2 = *(const struct elf_link_hash_entry **) arg2; 3149 vdiff = h1->root.u.def.value - h2->root.u.def.value; 3150 if (vdiff != 0) 3151 return vdiff > 0 ? 1 : -1; 3152 else 3153 { 3154 long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id; 3155 if (sdiff != 0) 3156 return sdiff > 0 ? 1 : -1; 3157 } 3158 vdiff = h1->size - h2->size; 3159 return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1; 3160 } 3161 3162 /* This function is used to adjust offsets into .dynstr for 3163 dynamic symbols. This is called via elf_link_hash_traverse. */ 3164 3165 static bfd_boolean 3166 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data) 3167 { 3168 struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data; 3169 3170 if (h->dynindx != -1) 3171 h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index); 3172 return TRUE; 3173 } 3174 3175 /* Assign string offsets in .dynstr, update all structures referencing 3176 them. */ 3177 3178 static bfd_boolean 3179 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info) 3180 { 3181 struct elf_link_hash_table *hash_table = elf_hash_table (info); 3182 struct elf_link_local_dynamic_entry *entry; 3183 struct elf_strtab_hash *dynstr = hash_table->dynstr; 3184 bfd *dynobj = hash_table->dynobj; 3185 asection *sdyn; 3186 bfd_size_type size; 3187 const struct elf_backend_data *bed; 3188 bfd_byte *extdyn; 3189 3190 _bfd_elf_strtab_finalize (dynstr); 3191 size = _bfd_elf_strtab_size (dynstr); 3192 3193 bed = get_elf_backend_data (dynobj); 3194 sdyn = bfd_get_linker_section (dynobj, ".dynamic"); 3195 BFD_ASSERT (sdyn != NULL); 3196 3197 /* Update all .dynamic entries referencing .dynstr strings. */ 3198 for (extdyn = sdyn->contents; 3199 extdyn < sdyn->contents + sdyn->size; 3200 extdyn += bed->s->sizeof_dyn) 3201 { 3202 Elf_Internal_Dyn dyn; 3203 3204 bed->s->swap_dyn_in (dynobj, extdyn, &dyn); 3205 switch (dyn.d_tag) 3206 { 3207 case DT_STRSZ: 3208 dyn.d_un.d_val = size; 3209 break; 3210 case DT_NEEDED: 3211 case DT_SONAME: 3212 case DT_RPATH: 3213 case DT_RUNPATH: 3214 case DT_FILTER: 3215 case DT_AUXILIARY: 3216 case DT_AUDIT: 3217 case DT_DEPAUDIT: 3218 dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val); 3219 break; 3220 default: 3221 continue; 3222 } 3223 bed->s->swap_dyn_out (dynobj, &dyn, extdyn); 3224 } 3225 3226 /* Now update local dynamic symbols. */ 3227 for (entry = hash_table->dynlocal; entry ; entry = entry->next) 3228 entry->isym.st_name = _bfd_elf_strtab_offset (dynstr, 3229 entry->isym.st_name); 3230 3231 /* And the rest of dynamic symbols. */ 3232 elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr); 3233 3234 /* Adjust version definitions. */ 3235 if (elf_tdata (output_bfd)->cverdefs) 3236 { 3237 asection *s; 3238 bfd_byte *p; 3239 bfd_size_type i; 3240 Elf_Internal_Verdef def; 3241 Elf_Internal_Verdaux defaux; 3242 3243 s = bfd_get_linker_section (dynobj, ".gnu.version_d"); 3244 p = s->contents; 3245 do 3246 { 3247 _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p, 3248 &def); 3249 p += sizeof (Elf_External_Verdef); 3250 if (def.vd_aux != sizeof (Elf_External_Verdef)) 3251 continue; 3252 for (i = 0; i < def.vd_cnt; ++i) 3253 { 3254 _bfd_elf_swap_verdaux_in (output_bfd, 3255 (Elf_External_Verdaux *) p, &defaux); 3256 defaux.vda_name = _bfd_elf_strtab_offset (dynstr, 3257 defaux.vda_name); 3258 _bfd_elf_swap_verdaux_out (output_bfd, 3259 &defaux, (Elf_External_Verdaux *) p); 3260 p += sizeof (Elf_External_Verdaux); 3261 } 3262 } 3263 while (def.vd_next); 3264 } 3265 3266 /* Adjust version references. */ 3267 if (elf_tdata (output_bfd)->verref) 3268 { 3269 asection *s; 3270 bfd_byte *p; 3271 bfd_size_type i; 3272 Elf_Internal_Verneed need; 3273 Elf_Internal_Vernaux needaux; 3274 3275 s = bfd_get_linker_section (dynobj, ".gnu.version_r"); 3276 p = s->contents; 3277 do 3278 { 3279 _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p, 3280 &need); 3281 need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file); 3282 _bfd_elf_swap_verneed_out (output_bfd, &need, 3283 (Elf_External_Verneed *) p); 3284 p += sizeof (Elf_External_Verneed); 3285 for (i = 0; i < need.vn_cnt; ++i) 3286 { 3287 _bfd_elf_swap_vernaux_in (output_bfd, 3288 (Elf_External_Vernaux *) p, &needaux); 3289 needaux.vna_name = _bfd_elf_strtab_offset (dynstr, 3290 needaux.vna_name); 3291 _bfd_elf_swap_vernaux_out (output_bfd, 3292 &needaux, 3293 (Elf_External_Vernaux *) p); 3294 p += sizeof (Elf_External_Vernaux); 3295 } 3296 } 3297 while (need.vn_next); 3298 } 3299 3300 return TRUE; 3301 } 3302 3303 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT. 3304 The default is to only match when the INPUT and OUTPUT are exactly 3305 the same target. */ 3306 3307 bfd_boolean 3308 _bfd_elf_default_relocs_compatible (const bfd_target *input, 3309 const bfd_target *output) 3310 { 3311 return input == output; 3312 } 3313 3314 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT. 3315 This version is used when different targets for the same architecture 3316 are virtually identical. */ 3317 3318 bfd_boolean 3319 _bfd_elf_relocs_compatible (const bfd_target *input, 3320 const bfd_target *output) 3321 { 3322 const struct elf_backend_data *obed, *ibed; 3323 3324 if (input == output) 3325 return TRUE; 3326 3327 ibed = xvec_get_elf_backend_data (input); 3328 obed = xvec_get_elf_backend_data (output); 3329 3330 if (ibed->arch != obed->arch) 3331 return FALSE; 3332 3333 /* If both backends are using this function, deem them compatible. */ 3334 return ibed->relocs_compatible == obed->relocs_compatible; 3335 } 3336 3337 /* Add symbols from an ELF object file to the linker hash table. */ 3338 3339 static bfd_boolean 3340 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) 3341 { 3342 Elf_Internal_Ehdr *ehdr; 3343 Elf_Internal_Shdr *hdr; 3344 bfd_size_type symcount; 3345 bfd_size_type extsymcount; 3346 bfd_size_type extsymoff; 3347 struct elf_link_hash_entry **sym_hash; 3348 bfd_boolean dynamic; 3349 Elf_External_Versym *extversym = NULL; 3350 Elf_External_Versym *ever; 3351 struct elf_link_hash_entry *weaks; 3352 struct elf_link_hash_entry **nondeflt_vers = NULL; 3353 bfd_size_type nondeflt_vers_cnt = 0; 3354 Elf_Internal_Sym *isymbuf = NULL; 3355 Elf_Internal_Sym *isym; 3356 Elf_Internal_Sym *isymend; 3357 const struct elf_backend_data *bed; 3358 bfd_boolean add_needed; 3359 struct elf_link_hash_table *htab; 3360 bfd_size_type amt; 3361 void *alloc_mark = NULL; 3362 struct bfd_hash_entry **old_table = NULL; 3363 unsigned int old_size = 0; 3364 unsigned int old_count = 0; 3365 void *old_tab = NULL; 3366 void *old_hash; 3367 void *old_ent; 3368 struct bfd_link_hash_entry *old_undefs = NULL; 3369 struct bfd_link_hash_entry *old_undefs_tail = NULL; 3370 long old_dynsymcount = 0; 3371 bfd_size_type old_dynstr_size = 0; 3372 size_t tabsize = 0; 3373 size_t hashsize = 0; 3374 3375 htab = elf_hash_table (info); 3376 bed = get_elf_backend_data (abfd); 3377 3378 if ((abfd->flags & DYNAMIC) == 0) 3379 dynamic = FALSE; 3380 else 3381 { 3382 dynamic = TRUE; 3383 3384 /* You can't use -r against a dynamic object. Also, there's no 3385 hope of using a dynamic object which does not exactly match 3386 the format of the output file. */ 3387 if (info->relocatable 3388 || !is_elf_hash_table (htab) 3389 || info->output_bfd->xvec != abfd->xvec) 3390 { 3391 if (info->relocatable) 3392 bfd_set_error (bfd_error_invalid_operation); 3393 else 3394 bfd_set_error (bfd_error_wrong_format); 3395 goto error_return; 3396 } 3397 } 3398 3399 ehdr = elf_elfheader (abfd); 3400 if (info->warn_alternate_em 3401 && bed->elf_machine_code != ehdr->e_machine 3402 && ((bed->elf_machine_alt1 != 0 3403 && ehdr->e_machine == bed->elf_machine_alt1) 3404 || (bed->elf_machine_alt2 != 0 3405 && ehdr->e_machine == bed->elf_machine_alt2))) 3406 info->callbacks->einfo 3407 (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"), 3408 ehdr->e_machine, abfd, bed->elf_machine_code); 3409 3410 /* As a GNU extension, any input sections which are named 3411 .gnu.warning.SYMBOL are treated as warning symbols for the given 3412 symbol. This differs from .gnu.warning sections, which generate 3413 warnings when they are included in an output file. */ 3414 /* PR 12761: Also generate this warning when building shared libraries. */ 3415 if (info->executable || info->shared) 3416 { 3417 asection *s; 3418 3419 for (s = abfd->sections; s != NULL; s = s->next) 3420 { 3421 const char *name; 3422 3423 name = bfd_get_section_name (abfd, s); 3424 if (CONST_STRNEQ (name, ".gnu.warning.")) 3425 { 3426 char *msg; 3427 bfd_size_type sz; 3428 3429 name += sizeof ".gnu.warning." - 1; 3430 3431 /* If this is a shared object, then look up the symbol 3432 in the hash table. If it is there, and it is already 3433 been defined, then we will not be using the entry 3434 from this shared object, so we don't need to warn. 3435 FIXME: If we see the definition in a regular object 3436 later on, we will warn, but we shouldn't. The only 3437 fix is to keep track of what warnings we are supposed 3438 to emit, and then handle them all at the end of the 3439 link. */ 3440 if (dynamic) 3441 { 3442 struct elf_link_hash_entry *h; 3443 3444 h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE); 3445 3446 /* FIXME: What about bfd_link_hash_common? */ 3447 if (h != NULL 3448 && (h->root.type == bfd_link_hash_defined 3449 || h->root.type == bfd_link_hash_defweak)) 3450 { 3451 /* We don't want to issue this warning. Clobber 3452 the section size so that the warning does not 3453 get copied into the output file. */ 3454 s->size = 0; 3455 continue; 3456 } 3457 } 3458 3459 sz = s->size; 3460 msg = (char *) bfd_alloc (abfd, sz + 1); 3461 if (msg == NULL) 3462 goto error_return; 3463 3464 if (! bfd_get_section_contents (abfd, s, msg, 0, sz)) 3465 goto error_return; 3466 3467 msg[sz] = '\0'; 3468 3469 if (! (_bfd_generic_link_add_one_symbol 3470 (info, abfd, name, BSF_WARNING, s, 0, msg, 3471 FALSE, bed->collect, NULL))) 3472 goto error_return; 3473 3474 if (! info->relocatable) 3475 { 3476 /* Clobber the section size so that the warning does 3477 not get copied into the output file. */ 3478 s->size = 0; 3479 3480 /* Also set SEC_EXCLUDE, so that symbols defined in 3481 the warning section don't get copied to the output. */ 3482 s->flags |= SEC_EXCLUDE; 3483 } 3484 } 3485 } 3486 } 3487 3488 add_needed = TRUE; 3489 if (! dynamic) 3490 { 3491 /* If we are creating a shared library, create all the dynamic 3492 sections immediately. We need to attach them to something, 3493 so we attach them to this BFD, provided it is the right 3494 format. FIXME: If there are no input BFD's of the same 3495 format as the output, we can't make a shared library. */ 3496 if (info->shared 3497 && is_elf_hash_table (htab) 3498 && info->output_bfd->xvec == abfd->xvec 3499 && !htab->dynamic_sections_created) 3500 { 3501 if (! _bfd_elf_link_create_dynamic_sections (abfd, info)) 3502 goto error_return; 3503 } 3504 } 3505 else if (!is_elf_hash_table (htab)) 3506 goto error_return; 3507 else 3508 { 3509 asection *s; 3510 const char *soname = NULL; 3511 char *audit = NULL; 3512 struct bfd_link_needed_list *rpath = NULL, *runpath = NULL; 3513 int ret; 3514 3515 /* ld --just-symbols and dynamic objects don't mix very well. 3516 ld shouldn't allow it. */ 3517 if ((s = abfd->sections) != NULL 3518 && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS) 3519 abort (); 3520 3521 /* If this dynamic lib was specified on the command line with 3522 --as-needed in effect, then we don't want to add a DT_NEEDED 3523 tag unless the lib is actually used. Similary for libs brought 3524 in by another lib's DT_NEEDED. When --no-add-needed is used 3525 on a dynamic lib, we don't want to add a DT_NEEDED entry for 3526 any dynamic library in DT_NEEDED tags in the dynamic lib at 3527 all. */ 3528 add_needed = (elf_dyn_lib_class (abfd) 3529 & (DYN_AS_NEEDED | DYN_DT_NEEDED 3530 | DYN_NO_NEEDED)) == 0; 3531 3532 s = bfd_get_section_by_name (abfd, ".dynamic"); 3533 if (s != NULL) 3534 { 3535 bfd_byte *dynbuf; 3536 bfd_byte *extdyn; 3537 unsigned int elfsec; 3538 unsigned long shlink; 3539 3540 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) 3541 { 3542 error_free_dyn: 3543 free (dynbuf); 3544 goto error_return; 3545 } 3546 3547 elfsec = _bfd_elf_section_from_bfd_section (abfd, s); 3548 if (elfsec == SHN_BAD) 3549 goto error_free_dyn; 3550 shlink = elf_elfsections (abfd)[elfsec]->sh_link; 3551 3552 for (extdyn = dynbuf; 3553 extdyn < dynbuf + s->size; 3554 extdyn += bed->s->sizeof_dyn) 3555 { 3556 Elf_Internal_Dyn dyn; 3557 3558 bed->s->swap_dyn_in (abfd, extdyn, &dyn); 3559 if (dyn.d_tag == DT_SONAME) 3560 { 3561 unsigned int tagv = dyn.d_un.d_val; 3562 soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3563 if (soname == NULL) 3564 goto error_free_dyn; 3565 } 3566 if (dyn.d_tag == DT_NEEDED) 3567 { 3568 struct bfd_link_needed_list *n, **pn; 3569 char *fnm, *anm; 3570 unsigned int tagv = dyn.d_un.d_val; 3571 3572 amt = sizeof (struct bfd_link_needed_list); 3573 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); 3574 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3575 if (n == NULL || fnm == NULL) 3576 goto error_free_dyn; 3577 amt = strlen (fnm) + 1; 3578 anm = (char *) bfd_alloc (abfd, amt); 3579 if (anm == NULL) 3580 goto error_free_dyn; 3581 memcpy (anm, fnm, amt); 3582 n->name = anm; 3583 n->by = abfd; 3584 n->next = NULL; 3585 for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next) 3586 ; 3587 *pn = n; 3588 } 3589 if (dyn.d_tag == DT_RUNPATH) 3590 { 3591 struct bfd_link_needed_list *n, **pn; 3592 char *fnm, *anm; 3593 unsigned int tagv = dyn.d_un.d_val; 3594 3595 amt = sizeof (struct bfd_link_needed_list); 3596 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); 3597 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3598 if (n == NULL || fnm == NULL) 3599 goto error_free_dyn; 3600 amt = strlen (fnm) + 1; 3601 anm = (char *) bfd_alloc (abfd, amt); 3602 if (anm == NULL) 3603 goto error_free_dyn; 3604 memcpy (anm, fnm, amt); 3605 n->name = anm; 3606 n->by = abfd; 3607 n->next = NULL; 3608 for (pn = & runpath; 3609 *pn != NULL; 3610 pn = &(*pn)->next) 3611 ; 3612 *pn = n; 3613 } 3614 /* Ignore DT_RPATH if we have seen DT_RUNPATH. */ 3615 if (!runpath && dyn.d_tag == DT_RPATH) 3616 { 3617 struct bfd_link_needed_list *n, **pn; 3618 char *fnm, *anm; 3619 unsigned int tagv = dyn.d_un.d_val; 3620 3621 amt = sizeof (struct bfd_link_needed_list); 3622 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); 3623 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3624 if (n == NULL || fnm == NULL) 3625 goto error_free_dyn; 3626 amt = strlen (fnm) + 1; 3627 anm = (char *) bfd_alloc (abfd, amt); 3628 if (anm == NULL) 3629 goto error_free_dyn; 3630 memcpy (anm, fnm, amt); 3631 n->name = anm; 3632 n->by = abfd; 3633 n->next = NULL; 3634 for (pn = & rpath; 3635 *pn != NULL; 3636 pn = &(*pn)->next) 3637 ; 3638 *pn = n; 3639 } 3640 if (dyn.d_tag == DT_AUDIT) 3641 { 3642 unsigned int tagv = dyn.d_un.d_val; 3643 audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 3644 } 3645 } 3646 3647 free (dynbuf); 3648 } 3649 3650 /* DT_RUNPATH overrides DT_RPATH. Do _NOT_ bfd_release, as that 3651 frees all more recently bfd_alloc'd blocks as well. */ 3652 if (runpath) 3653 rpath = runpath; 3654 3655 if (rpath) 3656 { 3657 struct bfd_link_needed_list **pn; 3658 for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next) 3659 ; 3660 *pn = rpath; 3661 } 3662 3663 /* We do not want to include any of the sections in a dynamic 3664 object in the output file. We hack by simply clobbering the 3665 list of sections in the BFD. This could be handled more 3666 cleanly by, say, a new section flag; the existing 3667 SEC_NEVER_LOAD flag is not the one we want, because that one 3668 still implies that the section takes up space in the output 3669 file. */ 3670 bfd_section_list_clear (abfd); 3671 3672 /* Find the name to use in a DT_NEEDED entry that refers to this 3673 object. If the object has a DT_SONAME entry, we use it. 3674 Otherwise, if the generic linker stuck something in 3675 elf_dt_name, we use that. Otherwise, we just use the file 3676 name. */ 3677 if (soname == NULL || *soname == '\0') 3678 { 3679 soname = elf_dt_name (abfd); 3680 if (soname == NULL || *soname == '\0') 3681 soname = bfd_get_filename (abfd); 3682 } 3683 3684 /* Save the SONAME because sometimes the linker emulation code 3685 will need to know it. */ 3686 elf_dt_name (abfd) = soname; 3687 3688 ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); 3689 if (ret < 0) 3690 goto error_return; 3691 3692 /* If we have already included this dynamic object in the 3693 link, just ignore it. There is no reason to include a 3694 particular dynamic object more than once. */ 3695 if (ret > 0) 3696 return TRUE; 3697 3698 /* Save the DT_AUDIT entry for the linker emulation code. */ 3699 elf_dt_audit (abfd) = audit; 3700 } 3701 3702 /* If this is a dynamic object, we always link against the .dynsym 3703 symbol table, not the .symtab symbol table. The dynamic linker 3704 will only see the .dynsym symbol table, so there is no reason to 3705 look at .symtab for a dynamic object. */ 3706 3707 if (! dynamic || elf_dynsymtab (abfd) == 0) 3708 hdr = &elf_tdata (abfd)->symtab_hdr; 3709 else 3710 hdr = &elf_tdata (abfd)->dynsymtab_hdr; 3711 3712 symcount = hdr->sh_size / bed->s->sizeof_sym; 3713 3714 /* The sh_info field of the symtab header tells us where the 3715 external symbols start. We don't care about the local symbols at 3716 this point. */ 3717 if (elf_bad_symtab (abfd)) 3718 { 3719 extsymcount = symcount; 3720 extsymoff = 0; 3721 } 3722 else 3723 { 3724 extsymcount = symcount - hdr->sh_info; 3725 extsymoff = hdr->sh_info; 3726 } 3727 3728 sym_hash = NULL; 3729 if (extsymcount != 0) 3730 { 3731 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff, 3732 NULL, NULL, NULL); 3733 if (isymbuf == NULL) 3734 goto error_return; 3735 3736 /* We store a pointer to the hash table entry for each external 3737 symbol. */ 3738 amt = extsymcount * sizeof (struct elf_link_hash_entry *); 3739 sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt); 3740 if (sym_hash == NULL) 3741 goto error_free_sym; 3742 elf_sym_hashes (abfd) = sym_hash; 3743 } 3744 3745 if (dynamic) 3746 { 3747 /* Read in any version definitions. */ 3748 if (!_bfd_elf_slurp_version_tables (abfd, 3749 info->default_imported_symver)) 3750 goto error_free_sym; 3751 3752 /* Read in the symbol versions, but don't bother to convert them 3753 to internal format. */ 3754 if (elf_dynversym (abfd) != 0) 3755 { 3756 Elf_Internal_Shdr *versymhdr; 3757 3758 versymhdr = &elf_tdata (abfd)->dynversym_hdr; 3759 extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); 3760 if (extversym == NULL) 3761 goto error_free_sym; 3762 amt = versymhdr->sh_size; 3763 if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0 3764 || bfd_bread (extversym, amt, abfd) != amt) 3765 goto error_free_vers; 3766 } 3767 } 3768 3769 /* If we are loading an as-needed shared lib, save the symbol table 3770 state before we start adding symbols. If the lib turns out 3771 to be unneeded, restore the state. */ 3772 if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0) 3773 { 3774 unsigned int i; 3775 size_t entsize; 3776 3777 for (entsize = 0, i = 0; i < htab->root.table.size; i++) 3778 { 3779 struct bfd_hash_entry *p; 3780 struct elf_link_hash_entry *h; 3781 3782 for (p = htab->root.table.table[i]; p != NULL; p = p->next) 3783 { 3784 h = (struct elf_link_hash_entry *) p; 3785 entsize += htab->root.table.entsize; 3786 if (h->root.type == bfd_link_hash_warning) 3787 entsize += htab->root.table.entsize; 3788 } 3789 } 3790 3791 tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *); 3792 hashsize = extsymcount * sizeof (struct elf_link_hash_entry *); 3793 old_tab = bfd_malloc (tabsize + entsize + hashsize); 3794 if (old_tab == NULL) 3795 goto error_free_vers; 3796 3797 /* Remember the current objalloc pointer, so that all mem for 3798 symbols added can later be reclaimed. */ 3799 alloc_mark = bfd_hash_allocate (&htab->root.table, 1); 3800 if (alloc_mark == NULL) 3801 goto error_free_vers; 3802 3803 /* Make a special call to the linker "notice" function to 3804 tell it that we are about to handle an as-needed lib. */ 3805 if (!(*info->callbacks->notice) (info, NULL, abfd, NULL, 3806 notice_as_needed, 0, NULL)) 3807 goto error_free_vers; 3808 3809 /* Clone the symbol table and sym hashes. Remember some 3810 pointers into the symbol table, and dynamic symbol count. */ 3811 old_hash = (char *) old_tab + tabsize; 3812 old_ent = (char *) old_hash + hashsize; 3813 memcpy (old_tab, htab->root.table.table, tabsize); 3814 memcpy (old_hash, sym_hash, hashsize); 3815 old_undefs = htab->root.undefs; 3816 old_undefs_tail = htab->root.undefs_tail; 3817 old_table = htab->root.table.table; 3818 old_size = htab->root.table.size; 3819 old_count = htab->root.table.count; 3820 old_dynsymcount = htab->dynsymcount; 3821 old_dynstr_size = _bfd_elf_strtab_size (htab->dynstr); 3822 3823 for (i = 0; i < htab->root.table.size; i++) 3824 { 3825 struct bfd_hash_entry *p; 3826 struct elf_link_hash_entry *h; 3827 3828 for (p = htab->root.table.table[i]; p != NULL; p = p->next) 3829 { 3830 memcpy (old_ent, p, htab->root.table.entsize); 3831 old_ent = (char *) old_ent + htab->root.table.entsize; 3832 h = (struct elf_link_hash_entry *) p; 3833 if (h->root.type == bfd_link_hash_warning) 3834 { 3835 memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize); 3836 old_ent = (char *) old_ent + htab->root.table.entsize; 3837 } 3838 } 3839 } 3840 } 3841 3842 weaks = NULL; 3843 ever = extversym != NULL ? extversym + extsymoff : NULL; 3844 for (isym = isymbuf, isymend = isymbuf + extsymcount; 3845 isym < isymend; 3846 isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL)) 3847 { 3848 int bind; 3849 bfd_vma value; 3850 asection *sec, *new_sec; 3851 flagword flags; 3852 const char *name; 3853 struct elf_link_hash_entry *h; 3854 struct elf_link_hash_entry *hi; 3855 bfd_boolean definition; 3856 bfd_boolean size_change_ok; 3857 bfd_boolean type_change_ok; 3858 bfd_boolean new_weakdef; 3859 bfd_boolean new_weak; 3860 bfd_boolean old_weak; 3861 bfd_boolean override; 3862 bfd_boolean common; 3863 unsigned int old_alignment; 3864 bfd *old_bfd; 3865 bfd * undef_bfd = NULL; 3866 3867 override = FALSE; 3868 3869 flags = BSF_NO_FLAGS; 3870 sec = NULL; 3871 value = isym->st_value; 3872 *sym_hash = NULL; 3873 common = bed->common_definition (isym); 3874 3875 bind = ELF_ST_BIND (isym->st_info); 3876 switch (bind) 3877 { 3878 case STB_LOCAL: 3879 /* This should be impossible, since ELF requires that all 3880 global symbols follow all local symbols, and that sh_info 3881 point to the first global symbol. Unfortunately, Irix 5 3882 screws this up. */ 3883 continue; 3884 3885 case STB_GLOBAL: 3886 if (isym->st_shndx != SHN_UNDEF && !common) 3887 flags = BSF_GLOBAL; 3888 break; 3889 3890 case STB_WEAK: 3891 flags = BSF_WEAK; 3892 break; 3893 3894 case STB_GNU_UNIQUE: 3895 flags = BSF_GNU_UNIQUE; 3896 break; 3897 3898 default: 3899 /* Leave it up to the processor backend. */ 3900 break; 3901 } 3902 3903 if (isym->st_shndx == SHN_UNDEF) 3904 sec = bfd_und_section_ptr; 3905 else if (isym->st_shndx == SHN_ABS) 3906 sec = bfd_abs_section_ptr; 3907 else if (isym->st_shndx == SHN_COMMON) 3908 { 3909 sec = bfd_com_section_ptr; 3910 /* What ELF calls the size we call the value. What ELF 3911 calls the value we call the alignment. */ 3912 value = isym->st_size; 3913 } 3914 else 3915 { 3916 sec = bfd_section_from_elf_index (abfd, isym->st_shndx); 3917 if (sec == NULL) 3918 sec = bfd_abs_section_ptr; 3919 else if (discarded_section (sec)) 3920 { 3921 /* Symbols from discarded section are undefined. We keep 3922 its visibility. */ 3923 sec = bfd_und_section_ptr; 3924 isym->st_shndx = SHN_UNDEF; 3925 } 3926 else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) 3927 value -= sec->vma; 3928 } 3929 3930 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, 3931 isym->st_name); 3932 if (name == NULL) 3933 goto error_free_vers; 3934 3935 if (isym->st_shndx == SHN_COMMON 3936 && (abfd->flags & BFD_PLUGIN) != 0) 3937 { 3938 asection *xc = bfd_get_section_by_name (abfd, "COMMON"); 3939 3940 if (xc == NULL) 3941 { 3942 flagword sflags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP 3943 | SEC_EXCLUDE); 3944 xc = bfd_make_section_with_flags (abfd, "COMMON", sflags); 3945 if (xc == NULL) 3946 goto error_free_vers; 3947 } 3948 sec = xc; 3949 } 3950 else if (isym->st_shndx == SHN_COMMON 3951 && ELF_ST_TYPE (isym->st_info) == STT_TLS 3952 && !info->relocatable) 3953 { 3954 asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon"); 3955 3956 if (tcomm == NULL) 3957 { 3958 flagword sflags = (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_IS_COMMON 3959 | SEC_LINKER_CREATED); 3960 tcomm = bfd_make_section_with_flags (abfd, ".tcommon", sflags); 3961 if (tcomm == NULL) 3962 goto error_free_vers; 3963 } 3964 sec = tcomm; 3965 } 3966 else if (bed->elf_add_symbol_hook) 3967 { 3968 if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags, 3969 &sec, &value)) 3970 goto error_free_vers; 3971 3972 /* The hook function sets the name to NULL if this symbol 3973 should be skipped for some reason. */ 3974 if (name == NULL) 3975 continue; 3976 } 3977 3978 /* Sanity check that all possibilities were handled. */ 3979 if (sec == NULL) 3980 { 3981 bfd_set_error (bfd_error_bad_value); 3982 goto error_free_vers; 3983 } 3984 3985 if (bfd_is_und_section (sec) 3986 || bfd_is_com_section (sec)) 3987 definition = FALSE; 3988 else 3989 definition = TRUE; 3990 3991 size_change_ok = FALSE; 3992 type_change_ok = bed->type_change_ok; 3993 old_weak = FALSE; 3994 old_alignment = 0; 3995 old_bfd = NULL; 3996 new_sec = sec; 3997 3998 if (is_elf_hash_table (htab)) 3999 { 4000 Elf_Internal_Versym iver; 4001 unsigned int vernum = 0; 4002 bfd_boolean skip; 4003 4004 /* If this is a definition of a symbol which was previously 4005 referenced in a non-weak manner then make a note of the bfd 4006 that contained the reference. This is used if we need to 4007 refer to the source of the reference later on. */ 4008 if (! bfd_is_und_section (sec)) 4009 { 4010 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE); 4011 4012 if (h != NULL 4013 && h->root.type == bfd_link_hash_undefined 4014 && h->root.u.undef.abfd) 4015 undef_bfd = h->root.u.undef.abfd; 4016 } 4017 4018 if (ever == NULL) 4019 { 4020 if (info->default_imported_symver) 4021 /* Use the default symbol version created earlier. */ 4022 iver.vs_vers = elf_tdata (abfd)->cverdefs; 4023 else 4024 iver.vs_vers = 0; 4025 } 4026 else 4027 _bfd_elf_swap_versym_in (abfd, ever, &iver); 4028 4029 vernum = iver.vs_vers & VERSYM_VERSION; 4030 4031 /* If this is a hidden symbol, or if it is not version 4032 1, we append the version name to the symbol name. 4033 However, we do not modify a non-hidden absolute symbol 4034 if it is not a function, because it might be the version 4035 symbol itself. FIXME: What if it isn't? */ 4036 if ((iver.vs_vers & VERSYM_HIDDEN) != 0 4037 || (vernum > 1 4038 && (!bfd_is_abs_section (sec) 4039 || bed->is_function_type (ELF_ST_TYPE (isym->st_info))))) 4040 { 4041 const char *verstr; 4042 size_t namelen, verlen, newlen; 4043 char *newname, *p; 4044 4045 if (isym->st_shndx != SHN_UNDEF) 4046 { 4047 if (vernum > elf_tdata (abfd)->cverdefs) 4048 verstr = NULL; 4049 else if (vernum > 1) 4050 verstr = 4051 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; 4052 else 4053 verstr = ""; 4054 4055 if (verstr == NULL) 4056 { 4057 (*_bfd_error_handler) 4058 (_("%B: %s: invalid version %u (max %d)"), 4059 abfd, name, vernum, 4060 elf_tdata (abfd)->cverdefs); 4061 bfd_set_error (bfd_error_bad_value); 4062 goto error_free_vers; 4063 } 4064 } 4065 else 4066 { 4067 /* We cannot simply test for the number of 4068 entries in the VERNEED section since the 4069 numbers for the needed versions do not start 4070 at 0. */ 4071 Elf_Internal_Verneed *t; 4072 4073 verstr = NULL; 4074 for (t = elf_tdata (abfd)->verref; 4075 t != NULL; 4076 t = t->vn_nextref) 4077 { 4078 Elf_Internal_Vernaux *a; 4079 4080 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 4081 { 4082 if (a->vna_other == vernum) 4083 { 4084 verstr = a->vna_nodename; 4085 break; 4086 } 4087 } 4088 if (a != NULL) 4089 break; 4090 } 4091 if (verstr == NULL) 4092 { 4093 (*_bfd_error_handler) 4094 (_("%B: %s: invalid needed version %d"), 4095 abfd, name, vernum); 4096 bfd_set_error (bfd_error_bad_value); 4097 goto error_free_vers; 4098 } 4099 } 4100 4101 namelen = strlen (name); 4102 verlen = strlen (verstr); 4103 newlen = namelen + verlen + 2; 4104 if ((iver.vs_vers & VERSYM_HIDDEN) == 0 4105 && isym->st_shndx != SHN_UNDEF) 4106 ++newlen; 4107 4108 newname = (char *) bfd_hash_allocate (&htab->root.table, newlen); 4109 if (newname == NULL) 4110 goto error_free_vers; 4111 memcpy (newname, name, namelen); 4112 p = newname + namelen; 4113 *p++ = ELF_VER_CHR; 4114 /* If this is a defined non-hidden version symbol, 4115 we add another @ to the name. This indicates the 4116 default version of the symbol. */ 4117 if ((iver.vs_vers & VERSYM_HIDDEN) == 0 4118 && isym->st_shndx != SHN_UNDEF) 4119 *p++ = ELF_VER_CHR; 4120 memcpy (p, verstr, verlen + 1); 4121 4122 name = newname; 4123 } 4124 4125 /* If necessary, make a second attempt to locate the bfd 4126 containing an unresolved, non-weak reference to the 4127 current symbol. */ 4128 if (! bfd_is_und_section (sec) && undef_bfd == NULL) 4129 { 4130 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE); 4131 4132 if (h != NULL 4133 && h->root.type == bfd_link_hash_undefined 4134 && h->root.u.undef.abfd) 4135 undef_bfd = h->root.u.undef.abfd; 4136 } 4137 4138 if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, 4139 &value, &old_weak, &old_alignment, 4140 sym_hash, &skip, &override, 4141 &type_change_ok, &size_change_ok)) 4142 goto error_free_vers; 4143 4144 if (skip) 4145 continue; 4146 4147 if (override) 4148 definition = FALSE; 4149 4150 h = *sym_hash; 4151 while (h->root.type == bfd_link_hash_indirect 4152 || h->root.type == bfd_link_hash_warning) 4153 h = (struct elf_link_hash_entry *) h->root.u.i.link; 4154 4155 /* Remember the old alignment if this is a common symbol, so 4156 that we don't reduce the alignment later on. We can't 4157 check later, because _bfd_generic_link_add_one_symbol 4158 will set a default for the alignment which we want to 4159 override. We also remember the old bfd where the existing 4160 definition comes from. */ 4161 switch (h->root.type) 4162 { 4163 default: 4164 break; 4165 4166 case bfd_link_hash_defined: 4167 case bfd_link_hash_defweak: 4168 old_bfd = h->root.u.def.section->owner; 4169 break; 4170 4171 case bfd_link_hash_common: 4172 old_bfd = h->root.u.c.p->section->owner; 4173 old_alignment = h->root.u.c.p->alignment_power; 4174 break; 4175 } 4176 4177 if (elf_tdata (abfd)->verdef != NULL 4178 && vernum > 1 4179 && definition) 4180 h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1]; 4181 } 4182 4183 if (! (_bfd_generic_link_add_one_symbol 4184 (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect, 4185 (struct bfd_link_hash_entry **) sym_hash))) 4186 goto error_free_vers; 4187 4188 h = *sym_hash; 4189 /* We need to make sure that indirect symbol dynamic flags are 4190 updated. */ 4191 hi = h; 4192 while (h->root.type == bfd_link_hash_indirect 4193 || h->root.type == bfd_link_hash_warning) 4194 h = (struct elf_link_hash_entry *) h->root.u.i.link; 4195 4196 *sym_hash = h; 4197 if (is_elf_hash_table (htab)) 4198 h->unique_global = (flags & BSF_GNU_UNIQUE) != 0; 4199 4200 new_weak = (flags & BSF_WEAK) != 0; 4201 new_weakdef = FALSE; 4202 if (dynamic 4203 && definition 4204 && new_weak 4205 && !bed->is_function_type (ELF_ST_TYPE (isym->st_info)) 4206 && is_elf_hash_table (htab) 4207 && h->u.weakdef == NULL) 4208 { 4209 /* Keep a list of all weak defined non function symbols from 4210 a dynamic object, using the weakdef field. Later in this 4211 function we will set the weakdef field to the correct 4212 value. We only put non-function symbols from dynamic 4213 objects on this list, because that happens to be the only 4214 time we need to know the normal symbol corresponding to a 4215 weak symbol, and the information is time consuming to 4216 figure out. If the weakdef field is not already NULL, 4217 then this symbol was already defined by some previous 4218 dynamic object, and we will be using that previous 4219 definition anyhow. */ 4220 4221 h->u.weakdef = weaks; 4222 weaks = h; 4223 new_weakdef = TRUE; 4224 } 4225 4226 /* Set the alignment of a common symbol. */ 4227 if ((common || bfd_is_com_section (sec)) 4228 && h->root.type == bfd_link_hash_common) 4229 { 4230 unsigned int align; 4231 4232 if (common) 4233 align = bfd_log2 (isym->st_value); 4234 else 4235 { 4236 /* The new symbol is a common symbol in a shared object. 4237 We need to get the alignment from the section. */ 4238 align = new_sec->alignment_power; 4239 } 4240 if (align > old_alignment) 4241 h->root.u.c.p->alignment_power = align; 4242 else 4243 h->root.u.c.p->alignment_power = old_alignment; 4244 } 4245 4246 if (is_elf_hash_table (htab)) 4247 { 4248 bfd_boolean dynsym; 4249 4250 /* Check the alignment when a common symbol is involved. This 4251 can change when a common symbol is overridden by a normal 4252 definition or a common symbol is ignored due to the old 4253 normal definition. We need to make sure the maximum 4254 alignment is maintained. */ 4255 if ((old_alignment || common) 4256 && h->root.type != bfd_link_hash_common) 4257 { 4258 unsigned int common_align; 4259 unsigned int normal_align; 4260 unsigned int symbol_align; 4261 bfd *normal_bfd; 4262 bfd *common_bfd; 4263 4264 symbol_align = ffs (h->root.u.def.value) - 1; 4265 if (h->root.u.def.section->owner != NULL 4266 && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) 4267 { 4268 normal_align = h->root.u.def.section->alignment_power; 4269 if (normal_align > symbol_align) 4270 normal_align = symbol_align; 4271 } 4272 else 4273 normal_align = symbol_align; 4274 4275 if (old_alignment) 4276 { 4277 common_align = old_alignment; 4278 common_bfd = old_bfd; 4279 normal_bfd = abfd; 4280 } 4281 else 4282 { 4283 common_align = bfd_log2 (isym->st_value); 4284 common_bfd = abfd; 4285 normal_bfd = old_bfd; 4286 } 4287 4288 if (normal_align < common_align) 4289 { 4290 /* PR binutils/2735 */ 4291 if (normal_bfd == NULL) 4292 (*_bfd_error_handler) 4293 (_("Warning: alignment %u of common symbol `%s' in %B" 4294 " is greater than the alignment (%u) of its section %A"), 4295 common_bfd, h->root.u.def.section, 4296 1 << common_align, name, 1 << normal_align); 4297 else 4298 (*_bfd_error_handler) 4299 (_("Warning: alignment %u of symbol `%s' in %B" 4300 " is smaller than %u in %B"), 4301 normal_bfd, common_bfd, 4302 1 << normal_align, name, 1 << common_align); 4303 } 4304 } 4305 4306 /* Remember the symbol size if it isn't undefined. */ 4307 if ((isym->st_size != 0 && isym->st_shndx != SHN_UNDEF) 4308 && (definition || h->size == 0)) 4309 { 4310 if (h->size != 0 4311 && h->size != isym->st_size 4312 && ! size_change_ok) 4313 (*_bfd_error_handler) 4314 (_("Warning: size of symbol `%s' changed" 4315 " from %lu in %B to %lu in %B"), 4316 old_bfd, abfd, 4317 name, (unsigned long) h->size, 4318 (unsigned long) isym->st_size); 4319 4320 h->size = isym->st_size; 4321 } 4322 4323 /* If this is a common symbol, then we always want H->SIZE 4324 to be the size of the common symbol. The code just above 4325 won't fix the size if a common symbol becomes larger. We 4326 don't warn about a size change here, because that is 4327 covered by --warn-common. Allow changed between different 4328 function types. */ 4329 if (h->root.type == bfd_link_hash_common) 4330 h->size = h->root.u.c.size; 4331 4332 if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE 4333 && ((definition && !new_weak) 4334 || (old_weak && h->root.type == bfd_link_hash_common) 4335 || h->type == STT_NOTYPE)) 4336 { 4337 unsigned int type = ELF_ST_TYPE (isym->st_info); 4338 4339 /* Turn an IFUNC symbol from a DSO into a normal FUNC 4340 symbol. */ 4341 if (type == STT_GNU_IFUNC 4342 && (abfd->flags & DYNAMIC) != 0) 4343 type = STT_FUNC; 4344 4345 if (h->type != type) 4346 { 4347 if (h->type != STT_NOTYPE && ! type_change_ok) 4348 (*_bfd_error_handler) 4349 (_("Warning: type of symbol `%s' changed" 4350 " from %d to %d in %B"), 4351 abfd, name, h->type, type); 4352 4353 h->type = type; 4354 } 4355 } 4356 4357 /* Merge st_other field. */ 4358 elf_merge_st_other (abfd, h, isym, definition, dynamic); 4359 4360 /* Set a flag in the hash table entry indicating the type of 4361 reference or definition we just found. Keep a count of 4362 the number of dynamic symbols we find. A dynamic symbol 4363 is one which is referenced or defined by both a regular 4364 object and a shared object. */ 4365 dynsym = FALSE; 4366 if (! dynamic) 4367 { 4368 if (! definition) 4369 { 4370 h->ref_regular = 1; 4371 if (bind != STB_WEAK) 4372 h->ref_regular_nonweak = 1; 4373 } 4374 else 4375 { 4376 h->def_regular = 1; 4377 if (h->def_dynamic) 4378 { 4379 h->def_dynamic = 0; 4380 h->ref_dynamic = 1; 4381 } 4382 } 4383 4384 /* If the indirect symbol has been forced local, don't 4385 make the real symbol dynamic. */ 4386 if ((h == hi || !hi->forced_local) 4387 && (! info->executable 4388 || h->def_dynamic 4389 || h->ref_dynamic)) 4390 dynsym = TRUE; 4391 } 4392 else 4393 { 4394 if (! definition) 4395 { 4396 h->ref_dynamic = 1; 4397 hi->ref_dynamic = 1; 4398 } 4399 else 4400 { 4401 h->def_dynamic = 1; 4402 hi->def_dynamic = 1; 4403 } 4404 4405 /* If the indirect symbol has been forced local, don't 4406 make the real symbol dynamic. */ 4407 if ((h == hi || !hi->forced_local) 4408 && (h->def_regular 4409 || h->ref_regular 4410 || (h->u.weakdef != NULL 4411 && ! new_weakdef 4412 && h->u.weakdef->dynindx != -1))) 4413 dynsym = TRUE; 4414 } 4415 4416 /* We don't want to make debug symbol dynamic. */ 4417 if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable) 4418 dynsym = FALSE; 4419 4420 /* Nor should we make plugin symbols dynamic. */ 4421 if ((abfd->flags & BFD_PLUGIN) != 0) 4422 dynsym = FALSE; 4423 4424 if (definition) 4425 h->target_internal = isym->st_target_internal; 4426 4427 /* Check to see if we need to add an indirect symbol for 4428 the default name. */ 4429 if (definition || h->root.type == bfd_link_hash_common) 4430 if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym, 4431 &sec, &value, &dynsym, 4432 override)) 4433 goto error_free_vers; 4434 4435 if (definition && !dynamic) 4436 { 4437 char *p = strchr (name, ELF_VER_CHR); 4438 if (p != NULL && p[1] != ELF_VER_CHR) 4439 { 4440 /* Queue non-default versions so that .symver x, x@FOO 4441 aliases can be checked. */ 4442 if (!nondeflt_vers) 4443 { 4444 amt = ((isymend - isym + 1) 4445 * sizeof (struct elf_link_hash_entry *)); 4446 nondeflt_vers = 4447 (struct elf_link_hash_entry **) bfd_malloc (amt); 4448 if (!nondeflt_vers) 4449 goto error_free_vers; 4450 } 4451 nondeflt_vers[nondeflt_vers_cnt++] = h; 4452 } 4453 } 4454 4455 if (dynsym && h->dynindx == -1) 4456 { 4457 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 4458 goto error_free_vers; 4459 if (h->u.weakdef != NULL 4460 && ! new_weakdef 4461 && h->u.weakdef->dynindx == -1) 4462 { 4463 if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef)) 4464 goto error_free_vers; 4465 } 4466 } 4467 else if (dynsym && h->dynindx != -1) 4468 /* If the symbol already has a dynamic index, but 4469 visibility says it should not be visible, turn it into 4470 a local symbol. */ 4471 switch (ELF_ST_VISIBILITY (h->other)) 4472 { 4473 case STV_INTERNAL: 4474 case STV_HIDDEN: 4475 (*bed->elf_backend_hide_symbol) (info, h, TRUE); 4476 dynsym = FALSE; 4477 break; 4478 } 4479 4480 if (!add_needed 4481 && definition 4482 && ((dynsym 4483 && h->ref_regular) 4484 || (h->ref_dynamic 4485 && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0 4486 && !on_needed_list (elf_dt_name (abfd), htab->needed)))) 4487 { 4488 int ret; 4489 const char *soname = elf_dt_name (abfd); 4490 4491 /* A symbol from a library loaded via DT_NEEDED of some 4492 other library is referenced by a regular object. 4493 Add a DT_NEEDED entry for it. Issue an error if 4494 --no-add-needed is used and the reference was not 4495 a weak one. */ 4496 if (undef_bfd != NULL 4497 && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0) 4498 { 4499 (*_bfd_error_handler) 4500 (_("%B: undefined reference to symbol '%s'"), 4501 undef_bfd, name); 4502 (*_bfd_error_handler) 4503 (_("note: '%s' is defined in DSO %B so try adding it to the linker command line"), 4504 abfd, name); 4505 bfd_set_error (bfd_error_invalid_operation); 4506 goto error_free_vers; 4507 } 4508 4509 elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class) 4510 (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED); 4511 4512 add_needed = TRUE; 4513 ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); 4514 if (ret < 0) 4515 goto error_free_vers; 4516 4517 BFD_ASSERT (ret == 0); 4518 } 4519 } 4520 } 4521 4522 if (extversym != NULL) 4523 { 4524 free (extversym); 4525 extversym = NULL; 4526 } 4527 4528 if (isymbuf != NULL) 4529 { 4530 free (isymbuf); 4531 isymbuf = NULL; 4532 } 4533 4534 if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0) 4535 { 4536 unsigned int i; 4537 4538 /* Restore the symbol table. */ 4539 if (bed->as_needed_cleanup) 4540 (*bed->as_needed_cleanup) (abfd, info); 4541 old_hash = (char *) old_tab + tabsize; 4542 old_ent = (char *) old_hash + hashsize; 4543 sym_hash = elf_sym_hashes (abfd); 4544 htab->root.table.table = old_table; 4545 htab->root.table.size = old_size; 4546 htab->root.table.count = old_count; 4547 memcpy (htab->root.table.table, old_tab, tabsize); 4548 memcpy (sym_hash, old_hash, hashsize); 4549 htab->root.undefs = old_undefs; 4550 htab->root.undefs_tail = old_undefs_tail; 4551 _bfd_elf_strtab_restore_size (htab->dynstr, old_dynstr_size); 4552 for (i = 0; i < htab->root.table.size; i++) 4553 { 4554 struct bfd_hash_entry *p; 4555 struct elf_link_hash_entry *h; 4556 bfd_size_type size; 4557 unsigned int alignment_power; 4558 4559 for (p = htab->root.table.table[i]; p != NULL; p = p->next) 4560 { 4561 h = (struct elf_link_hash_entry *) p; 4562 if (h->root.type == bfd_link_hash_warning) 4563 h = (struct elf_link_hash_entry *) h->root.u.i.link; 4564 if (h->dynindx >= old_dynsymcount 4565 && h->dynstr_index < old_dynstr_size) 4566 _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index); 4567 4568 /* Preserve the maximum alignment and size for common 4569 symbols even if this dynamic lib isn't on DT_NEEDED 4570 since it can still be loaded at run time by another 4571 dynamic lib. */ 4572 if (h->root.type == bfd_link_hash_common) 4573 { 4574 size = h->root.u.c.size; 4575 alignment_power = h->root.u.c.p->alignment_power; 4576 } 4577 else 4578 { 4579 size = 0; 4580 alignment_power = 0; 4581 } 4582 memcpy (p, old_ent, htab->root.table.entsize); 4583 old_ent = (char *) old_ent + htab->root.table.entsize; 4584 h = (struct elf_link_hash_entry *) p; 4585 if (h->root.type == bfd_link_hash_warning) 4586 { 4587 memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize); 4588 old_ent = (char *) old_ent + htab->root.table.entsize; 4589 h = (struct elf_link_hash_entry *) h->root.u.i.link; 4590 } 4591 if (h->root.type == bfd_link_hash_common) 4592 { 4593 if (size > h->root.u.c.size) 4594 h->root.u.c.size = size; 4595 if (alignment_power > h->root.u.c.p->alignment_power) 4596 h->root.u.c.p->alignment_power = alignment_power; 4597 } 4598 } 4599 } 4600 4601 /* Make a special call to the linker "notice" function to 4602 tell it that symbols added for crefs may need to be removed. */ 4603 if (!(*info->callbacks->notice) (info, NULL, abfd, NULL, 4604 notice_not_needed, 0, NULL)) 4605 goto error_free_vers; 4606 4607 free (old_tab); 4608 objalloc_free_block ((struct objalloc *) htab->root.table.memory, 4609 alloc_mark); 4610 if (nondeflt_vers != NULL) 4611 free (nondeflt_vers); 4612 return TRUE; 4613 } 4614 4615 if (old_tab != NULL) 4616 { 4617 if (!(*info->callbacks->notice) (info, NULL, abfd, NULL, 4618 notice_needed, 0, NULL)) 4619 goto error_free_vers; 4620 free (old_tab); 4621 old_tab = NULL; 4622 } 4623 4624 /* Now that all the symbols from this input file are created, handle 4625 .symver foo, foo@BAR such that any relocs against foo become foo@BAR. */ 4626 if (nondeflt_vers != NULL) 4627 { 4628 bfd_size_type cnt, symidx; 4629 4630 for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt) 4631 { 4632 struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi; 4633 char *shortname, *p; 4634 4635 p = strchr (h->root.root.string, ELF_VER_CHR); 4636 if (p == NULL 4637 || (h->root.type != bfd_link_hash_defined 4638 && h->root.type != bfd_link_hash_defweak)) 4639 continue; 4640 4641 amt = p - h->root.root.string; 4642 shortname = (char *) bfd_malloc (amt + 1); 4643 if (!shortname) 4644 goto error_free_vers; 4645 memcpy (shortname, h->root.root.string, amt); 4646 shortname[amt] = '\0'; 4647 4648 hi = (struct elf_link_hash_entry *) 4649 bfd_link_hash_lookup (&htab->root, shortname, 4650 FALSE, FALSE, FALSE); 4651 if (hi != NULL 4652 && hi->root.type == h->root.type 4653 && hi->root.u.def.value == h->root.u.def.value 4654 && hi->root.u.def.section == h->root.u.def.section) 4655 { 4656 (*bed->elf_backend_hide_symbol) (info, hi, TRUE); 4657 hi->root.type = bfd_link_hash_indirect; 4658 hi->root.u.i.link = (struct bfd_link_hash_entry *) h; 4659 (*bed->elf_backend_copy_indirect_symbol) (info, h, hi); 4660 sym_hash = elf_sym_hashes (abfd); 4661 if (sym_hash) 4662 for (symidx = 0; symidx < extsymcount; ++symidx) 4663 if (sym_hash[symidx] == hi) 4664 { 4665 sym_hash[symidx] = h; 4666 break; 4667 } 4668 } 4669 free (shortname); 4670 } 4671 free (nondeflt_vers); 4672 nondeflt_vers = NULL; 4673 } 4674 4675 /* Now set the weakdefs field correctly for all the weak defined 4676 symbols we found. The only way to do this is to search all the 4677 symbols. Since we only need the information for non functions in 4678 dynamic objects, that's the only time we actually put anything on 4679 the list WEAKS. We need this information so that if a regular 4680 object refers to a symbol defined weakly in a dynamic object, the 4681 real symbol in the dynamic object is also put in the dynamic 4682 symbols; we also must arrange for both symbols to point to the 4683 same memory location. We could handle the general case of symbol 4684 aliasing, but a general symbol alias can only be generated in 4685 assembler code, handling it correctly would be very time 4686 consuming, and other ELF linkers don't handle general aliasing 4687 either. */ 4688 if (weaks != NULL) 4689 { 4690 struct elf_link_hash_entry **hpp; 4691 struct elf_link_hash_entry **hppend; 4692 struct elf_link_hash_entry **sorted_sym_hash; 4693 struct elf_link_hash_entry *h; 4694 size_t sym_count; 4695 4696 /* Since we have to search the whole symbol list for each weak 4697 defined symbol, search time for N weak defined symbols will be 4698 O(N^2). Binary search will cut it down to O(NlogN). */ 4699 amt = extsymcount * sizeof (struct elf_link_hash_entry *); 4700 sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt); 4701 if (sorted_sym_hash == NULL) 4702 goto error_return; 4703 sym_hash = sorted_sym_hash; 4704 hpp = elf_sym_hashes (abfd); 4705 hppend = hpp + extsymcount; 4706 sym_count = 0; 4707 for (; hpp < hppend; hpp++) 4708 { 4709 h = *hpp; 4710 if (h != NULL 4711 && h->root.type == bfd_link_hash_defined 4712 && !bed->is_function_type (h->type)) 4713 { 4714 *sym_hash = h; 4715 sym_hash++; 4716 sym_count++; 4717 } 4718 } 4719 4720 qsort (sorted_sym_hash, sym_count, 4721 sizeof (struct elf_link_hash_entry *), 4722 elf_sort_symbol); 4723 4724 while (weaks != NULL) 4725 { 4726 struct elf_link_hash_entry *hlook; 4727 asection *slook; 4728 bfd_vma vlook; 4729 size_t i, j, idx; 4730 4731 hlook = weaks; 4732 weaks = hlook->u.weakdef; 4733 hlook->u.weakdef = NULL; 4734 4735 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined 4736 || hlook->root.type == bfd_link_hash_defweak 4737 || hlook->root.type == bfd_link_hash_common 4738 || hlook->root.type == bfd_link_hash_indirect); 4739 slook = hlook->root.u.def.section; 4740 vlook = hlook->root.u.def.value; 4741 4742 i = 0; 4743 j = sym_count; 4744 while (i != j) 4745 { 4746 bfd_signed_vma vdiff; 4747 idx = (i + j) / 2; 4748 h = sorted_sym_hash[idx]; 4749 vdiff = vlook - h->root.u.def.value; 4750 if (vdiff < 0) 4751 j = idx; 4752 else if (vdiff > 0) 4753 i = idx + 1; 4754 else 4755 { 4756 long sdiff = slook->id - h->root.u.def.section->id; 4757 if (sdiff < 0) 4758 j = idx; 4759 else if (sdiff > 0) 4760 i = idx + 1; 4761 else 4762 break; 4763 } 4764 } 4765 4766 /* We didn't find a value/section match. */ 4767 if (i == j) 4768 continue; 4769 4770 /* With multiple aliases, or when the weak symbol is already 4771 strongly defined, we have multiple matching symbols and 4772 the binary search above may land on any of them. Step 4773 one past the matching symbol(s). */ 4774 while (++idx != j) 4775 { 4776 h = sorted_sym_hash[idx]; 4777 if (h->root.u.def.section != slook 4778 || h->root.u.def.value != vlook) 4779 break; 4780 } 4781 4782 /* Now look back over the aliases. Since we sorted by size 4783 as well as value and section, we'll choose the one with 4784 the largest size. */ 4785 while (idx-- != i) 4786 { 4787 h = sorted_sym_hash[idx]; 4788 4789 /* Stop if value or section doesn't match. */ 4790 if (h->root.u.def.section != slook 4791 || h->root.u.def.value != vlook) 4792 break; 4793 else if (h != hlook) 4794 { 4795 hlook->u.weakdef = h; 4796 4797 /* If the weak definition is in the list of dynamic 4798 symbols, make sure the real definition is put 4799 there as well. */ 4800 if (hlook->dynindx != -1 && h->dynindx == -1) 4801 { 4802 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 4803 { 4804 err_free_sym_hash: 4805 free (sorted_sym_hash); 4806 goto error_return; 4807 } 4808 } 4809 4810 /* If the real definition is in the list of dynamic 4811 symbols, make sure the weak definition is put 4812 there as well. If we don't do this, then the 4813 dynamic loader might not merge the entries for the 4814 real definition and the weak definition. */ 4815 if (h->dynindx != -1 && hlook->dynindx == -1) 4816 { 4817 if (! bfd_elf_link_record_dynamic_symbol (info, hlook)) 4818 goto err_free_sym_hash; 4819 } 4820 break; 4821 } 4822 } 4823 } 4824 4825 free (sorted_sym_hash); 4826 } 4827 4828 if (bed->check_directives 4829 && !(*bed->check_directives) (abfd, info)) 4830 return FALSE; 4831 4832 /* If this object is the same format as the output object, and it is 4833 not a shared library, then let the backend look through the 4834 relocs. 4835 4836 This is required to build global offset table entries and to 4837 arrange for dynamic relocs. It is not required for the 4838 particular common case of linking non PIC code, even when linking 4839 against shared libraries, but unfortunately there is no way of 4840 knowing whether an object file has been compiled PIC or not. 4841 Looking through the relocs is not particularly time consuming. 4842 The problem is that we must either (1) keep the relocs in memory, 4843 which causes the linker to require additional runtime memory or 4844 (2) read the relocs twice from the input file, which wastes time. 4845 This would be a good case for using mmap. 4846 4847 I have no idea how to handle linking PIC code into a file of a 4848 different format. It probably can't be done. */ 4849 if (! dynamic 4850 && is_elf_hash_table (htab) 4851 && bed->check_relocs != NULL 4852 && elf_object_id (abfd) == elf_hash_table_id (htab) 4853 && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec)) 4854 { 4855 asection *o; 4856 4857 for (o = abfd->sections; o != NULL; o = o->next) 4858 { 4859 Elf_Internal_Rela *internal_relocs; 4860 bfd_boolean ok; 4861 4862 if ((o->flags & SEC_RELOC) == 0 4863 || o->reloc_count == 0 4864 || ((info->strip == strip_all || info->strip == strip_debugger) 4865 && (o->flags & SEC_DEBUGGING) != 0) 4866 || bfd_is_abs_section (o->output_section)) 4867 continue; 4868 4869 internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, 4870 info->keep_memory); 4871 if (internal_relocs == NULL) 4872 goto error_return; 4873 4874 ok = (*bed->check_relocs) (abfd, info, o, internal_relocs); 4875 4876 if (elf_section_data (o)->relocs != internal_relocs) 4877 free (internal_relocs); 4878 4879 if (! ok) 4880 goto error_return; 4881 } 4882 } 4883 4884 /* If this is a non-traditional link, try to optimize the handling 4885 of the .stab/.stabstr sections. */ 4886 if (! dynamic 4887 && ! info->traditional_format 4888 && is_elf_hash_table (htab) 4889 && (info->strip != strip_all && info->strip != strip_debugger)) 4890 { 4891 asection *stabstr; 4892 4893 stabstr = bfd_get_section_by_name (abfd, ".stabstr"); 4894 if (stabstr != NULL) 4895 { 4896 bfd_size_type string_offset = 0; 4897 asection *stab; 4898 4899 for (stab = abfd->sections; stab; stab = stab->next) 4900 if (CONST_STRNEQ (stab->name, ".stab") 4901 && (!stab->name[5] || 4902 (stab->name[5] == '.' && ISDIGIT (stab->name[6]))) 4903 && (stab->flags & SEC_MERGE) == 0 4904 && !bfd_is_abs_section (stab->output_section)) 4905 { 4906 struct bfd_elf_section_data *secdata; 4907 4908 secdata = elf_section_data (stab); 4909 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab, 4910 stabstr, &secdata->sec_info, 4911 &string_offset)) 4912 goto error_return; 4913 if (secdata->sec_info) 4914 stab->sec_info_type = SEC_INFO_TYPE_STABS; 4915 } 4916 } 4917 } 4918 4919 if (is_elf_hash_table (htab) && add_needed) 4920 { 4921 /* Add this bfd to the loaded list. */ 4922 struct elf_link_loaded_list *n; 4923 4924 n = (struct elf_link_loaded_list *) 4925 bfd_alloc (abfd, sizeof (struct elf_link_loaded_list)); 4926 if (n == NULL) 4927 goto error_return; 4928 n->abfd = abfd; 4929 n->next = htab->loaded; 4930 htab->loaded = n; 4931 } 4932 4933 return TRUE; 4934 4935 error_free_vers: 4936 if (old_tab != NULL) 4937 free (old_tab); 4938 if (nondeflt_vers != NULL) 4939 free (nondeflt_vers); 4940 if (extversym != NULL) 4941 free (extversym); 4942 error_free_sym: 4943 if (isymbuf != NULL) 4944 free (isymbuf); 4945 error_return: 4946 return FALSE; 4947 } 4948 4949 /* Return the linker hash table entry of a symbol that might be 4950 satisfied by an archive symbol. Return -1 on error. */ 4951 4952 struct elf_link_hash_entry * 4953 _bfd_elf_archive_symbol_lookup (bfd *abfd, 4954 struct bfd_link_info *info, 4955 const char *name) 4956 { 4957 struct elf_link_hash_entry *h; 4958 char *p, *copy; 4959 size_t len, first; 4960 4961 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE); 4962 if (h != NULL) 4963 return h; 4964 4965 /* If this is a default version (the name contains @@), look up the 4966 symbol again with only one `@' as well as without the version. 4967 The effect is that references to the symbol with and without the 4968 version will be matched by the default symbol in the archive. */ 4969 4970 p = strchr (name, ELF_VER_CHR); 4971 if (p == NULL || p[1] != ELF_VER_CHR) 4972 return h; 4973 4974 /* First check with only one `@'. */ 4975 len = strlen (name); 4976 copy = (char *) bfd_alloc (abfd, len); 4977 if (copy == NULL) 4978 return (struct elf_link_hash_entry *) 0 - 1; 4979 4980 first = p - name + 1; 4981 memcpy (copy, name, first); 4982 memcpy (copy + first, name + first + 1, len - first); 4983 4984 h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE); 4985 if (h == NULL) 4986 { 4987 /* We also need to check references to the symbol without the 4988 version. */ 4989 copy[first - 1] = '\0'; 4990 h = elf_link_hash_lookup (elf_hash_table (info), copy, 4991 FALSE, FALSE, TRUE); 4992 } 4993 4994 bfd_release (abfd, copy); 4995 return h; 4996 } 4997 4998 /* Add symbols from an ELF archive file to the linker hash table. We 4999 don't use _bfd_generic_link_add_archive_symbols because of a 5000 problem which arises on UnixWare. The UnixWare libc.so is an 5001 archive which includes an entry libc.so.1 which defines a bunch of 5002 symbols. The libc.so archive also includes a number of other 5003 object files, which also define symbols, some of which are the same 5004 as those defined in libc.so.1. Correct linking requires that we 5005 consider each object file in turn, and include it if it defines any 5006 symbols we need. _bfd_generic_link_add_archive_symbols does not do 5007 this; it looks through the list of undefined symbols, and includes 5008 any object file which defines them. When this algorithm is used on 5009 UnixWare, it winds up pulling in libc.so.1 early and defining a 5010 bunch of symbols. This means that some of the other objects in the 5011 archive are not included in the link, which is incorrect since they 5012 precede libc.so.1 in the archive. 5013 5014 Fortunately, ELF archive handling is simpler than that done by 5015 _bfd_generic_link_add_archive_symbols, which has to allow for a.out 5016 oddities. In ELF, if we find a symbol in the archive map, and the 5017 symbol is currently undefined, we know that we must pull in that 5018 object file. 5019 5020 Unfortunately, we do have to make multiple passes over the symbol 5021 table until nothing further is resolved. */ 5022 5023 static bfd_boolean 5024 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) 5025 { 5026 symindex c; 5027 bfd_boolean *defined = NULL; 5028 bfd_boolean *included = NULL; 5029 carsym *symdefs; 5030 bfd_boolean loop; 5031 bfd_size_type amt; 5032 const struct elf_backend_data *bed; 5033 struct elf_link_hash_entry * (*archive_symbol_lookup) 5034 (bfd *, struct bfd_link_info *, const char *); 5035 5036 if (! bfd_has_map (abfd)) 5037 { 5038 /* An empty archive is a special case. */ 5039 if (bfd_openr_next_archived_file (abfd, NULL) == NULL) 5040 return TRUE; 5041 bfd_set_error (bfd_error_no_armap); 5042 return FALSE; 5043 } 5044 5045 /* Keep track of all symbols we know to be already defined, and all 5046 files we know to be already included. This is to speed up the 5047 second and subsequent passes. */ 5048 c = bfd_ardata (abfd)->symdef_count; 5049 if (c == 0) 5050 return TRUE; 5051 amt = c; 5052 amt *= sizeof (bfd_boolean); 5053 defined = (bfd_boolean *) bfd_zmalloc (amt); 5054 included = (bfd_boolean *) bfd_zmalloc (amt); 5055 if (defined == NULL || included == NULL) 5056 goto error_return; 5057 5058 symdefs = bfd_ardata (abfd)->symdefs; 5059 bed = get_elf_backend_data (abfd); 5060 archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup; 5061 5062 do 5063 { 5064 file_ptr last; 5065 symindex i; 5066 carsym *symdef; 5067 carsym *symdefend; 5068 5069 loop = FALSE; 5070 last = -1; 5071 5072 symdef = symdefs; 5073 symdefend = symdef + c; 5074 for (i = 0; symdef < symdefend; symdef++, i++) 5075 { 5076 struct elf_link_hash_entry *h; 5077 bfd *element; 5078 struct bfd_link_hash_entry *undefs_tail; 5079 symindex mark; 5080 5081 if (defined[i] || included[i]) 5082 continue; 5083 if (symdef->file_offset == last) 5084 { 5085 included[i] = TRUE; 5086 continue; 5087 } 5088 5089 h = archive_symbol_lookup (abfd, info, symdef->name); 5090 if (h == (struct elf_link_hash_entry *) 0 - 1) 5091 goto error_return; 5092 5093 if (h == NULL) 5094 continue; 5095 5096 if (h->root.type == bfd_link_hash_common) 5097 { 5098 /* We currently have a common symbol. The archive map contains 5099 a reference to this symbol, so we may want to include it. We 5100 only want to include it however, if this archive element 5101 contains a definition of the symbol, not just another common 5102 declaration of it. 5103 5104 Unfortunately some archivers (including GNU ar) will put 5105 declarations of common symbols into their archive maps, as 5106 well as real definitions, so we cannot just go by the archive 5107 map alone. Instead we must read in the element's symbol 5108 table and check that to see what kind of symbol definition 5109 this is. */ 5110 if (! elf_link_is_defined_archive_symbol (abfd, symdef)) 5111 continue; 5112 } 5113 else if (h->root.type != bfd_link_hash_undefined) 5114 { 5115 if (h->root.type != bfd_link_hash_undefweak) 5116 defined[i] = TRUE; 5117 continue; 5118 } 5119 5120 /* We need to include this archive member. */ 5121 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset); 5122 if (element == NULL) 5123 goto error_return; 5124 5125 if (! bfd_check_format (element, bfd_object)) 5126 goto error_return; 5127 5128 /* Doublecheck that we have not included this object 5129 already--it should be impossible, but there may be 5130 something wrong with the archive. */ 5131 if (element->archive_pass != 0) 5132 { 5133 bfd_set_error (bfd_error_bad_value); 5134 goto error_return; 5135 } 5136 element->archive_pass = 1; 5137 5138 undefs_tail = info->hash->undefs_tail; 5139 5140 if (!(*info->callbacks 5141 ->add_archive_element) (info, element, symdef->name, &element)) 5142 goto error_return; 5143 if (!bfd_link_add_symbols (element, info)) 5144 goto error_return; 5145 5146 /* If there are any new undefined symbols, we need to make 5147 another pass through the archive in order to see whether 5148 they can be defined. FIXME: This isn't perfect, because 5149 common symbols wind up on undefs_tail and because an 5150 undefined symbol which is defined later on in this pass 5151 does not require another pass. This isn't a bug, but it 5152 does make the code less efficient than it could be. */ 5153 if (undefs_tail != info->hash->undefs_tail) 5154 loop = TRUE; 5155 5156 /* Look backward to mark all symbols from this object file 5157 which we have already seen in this pass. */ 5158 mark = i; 5159 do 5160 { 5161 included[mark] = TRUE; 5162 if (mark == 0) 5163 break; 5164 --mark; 5165 } 5166 while (symdefs[mark].file_offset == symdef->file_offset); 5167 5168 /* We mark subsequent symbols from this object file as we go 5169 on through the loop. */ 5170 last = symdef->file_offset; 5171 } 5172 } 5173 while (loop); 5174 5175 free (defined); 5176 free (included); 5177 5178 return TRUE; 5179 5180 error_return: 5181 if (defined != NULL) 5182 free (defined); 5183 if (included != NULL) 5184 free (included); 5185 return FALSE; 5186 } 5187 5188 /* Given an ELF BFD, add symbols to the global hash table as 5189 appropriate. */ 5190 5191 bfd_boolean 5192 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info) 5193 { 5194 switch (bfd_get_format (abfd)) 5195 { 5196 case bfd_object: 5197 return elf_link_add_object_symbols (abfd, info); 5198 case bfd_archive: 5199 return elf_link_add_archive_symbols (abfd, info); 5200 default: 5201 bfd_set_error (bfd_error_wrong_format); 5202 return FALSE; 5203 } 5204 } 5205 5206 struct hash_codes_info 5207 { 5208 unsigned long *hashcodes; 5209 bfd_boolean error; 5210 }; 5211 5212 /* This function will be called though elf_link_hash_traverse to store 5213 all hash value of the exported symbols in an array. */ 5214 5215 static bfd_boolean 5216 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data) 5217 { 5218 struct hash_codes_info *inf = (struct hash_codes_info *) data; 5219 const char *name; 5220 char *p; 5221 unsigned long ha; 5222 char *alc = NULL; 5223 5224 /* Ignore indirect symbols. These are added by the versioning code. */ 5225 if (h->dynindx == -1) 5226 return TRUE; 5227 5228 name = h->root.root.string; 5229 p = strchr (name, ELF_VER_CHR); 5230 if (p != NULL) 5231 { 5232 alc = (char *) bfd_malloc (p - name + 1); 5233 if (alc == NULL) 5234 { 5235 inf->error = TRUE; 5236 return FALSE; 5237 } 5238 memcpy (alc, name, p - name); 5239 alc[p - name] = '\0'; 5240 name = alc; 5241 } 5242 5243 /* Compute the hash value. */ 5244 ha = bfd_elf_hash (name); 5245 5246 /* Store the found hash value in the array given as the argument. */ 5247 *(inf->hashcodes)++ = ha; 5248 5249 /* And store it in the struct so that we can put it in the hash table 5250 later. */ 5251 h->u.elf_hash_value = ha; 5252 5253 if (alc != NULL) 5254 free (alc); 5255 5256 return TRUE; 5257 } 5258 5259 struct collect_gnu_hash_codes 5260 { 5261 bfd *output_bfd; 5262 const struct elf_backend_data *bed; 5263 unsigned long int nsyms; 5264 unsigned long int maskbits; 5265 unsigned long int *hashcodes; 5266 unsigned long int *hashval; 5267 unsigned long int *indx; 5268 unsigned long int *counts; 5269 bfd_vma *bitmask; 5270 bfd_byte *contents; 5271 long int min_dynindx; 5272 unsigned long int bucketcount; 5273 unsigned long int symindx; 5274 long int local_indx; 5275 long int shift1, shift2; 5276 unsigned long int mask; 5277 bfd_boolean error; 5278 }; 5279 5280 /* This function will be called though elf_link_hash_traverse to store 5281 all hash value of the exported symbols in an array. */ 5282 5283 static bfd_boolean 5284 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data) 5285 { 5286 struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data; 5287 const char *name; 5288 char *p; 5289 unsigned long ha; 5290 char *alc = NULL; 5291 5292 /* Ignore indirect symbols. These are added by the versioning code. */ 5293 if (h->dynindx == -1) 5294 return TRUE; 5295 5296 /* Ignore also local symbols and undefined symbols. */ 5297 if (! (*s->bed->elf_hash_symbol) (h)) 5298 return TRUE; 5299 5300 name = h->root.root.string; 5301 p = strchr (name, ELF_VER_CHR); 5302 if (p != NULL) 5303 { 5304 alc = (char *) bfd_malloc (p - name + 1); 5305 if (alc == NULL) 5306 { 5307 s->error = TRUE; 5308 return FALSE; 5309 } 5310 memcpy (alc, name, p - name); 5311 alc[p - name] = '\0'; 5312 name = alc; 5313 } 5314 5315 /* Compute the hash value. */ 5316 ha = bfd_elf_gnu_hash (name); 5317 5318 /* Store the found hash value in the array for compute_bucket_count, 5319 and also for .dynsym reordering purposes. */ 5320 s->hashcodes[s->nsyms] = ha; 5321 s->hashval[h->dynindx] = ha; 5322 ++s->nsyms; 5323 if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx) 5324 s->min_dynindx = h->dynindx; 5325 5326 if (alc != NULL) 5327 free (alc); 5328 5329 return TRUE; 5330 } 5331 5332 /* This function will be called though elf_link_hash_traverse to do 5333 final dynaminc symbol renumbering. */ 5334 5335 static bfd_boolean 5336 elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data) 5337 { 5338 struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data; 5339 unsigned long int bucket; 5340 unsigned long int val; 5341 5342 /* Ignore indirect symbols. */ 5343 if (h->dynindx == -1) 5344 return TRUE; 5345 5346 /* Ignore also local symbols and undefined symbols. */ 5347 if (! (*s->bed->elf_hash_symbol) (h)) 5348 { 5349 if (h->dynindx >= s->min_dynindx) 5350 h->dynindx = s->local_indx++; 5351 return TRUE; 5352 } 5353 5354 bucket = s->hashval[h->dynindx] % s->bucketcount; 5355 val = (s->hashval[h->dynindx] >> s->shift1) 5356 & ((s->maskbits >> s->shift1) - 1); 5357 s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask); 5358 s->bitmask[val] 5359 |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask); 5360 val = s->hashval[h->dynindx] & ~(unsigned long int) 1; 5361 if (s->counts[bucket] == 1) 5362 /* Last element terminates the chain. */ 5363 val |= 1; 5364 bfd_put_32 (s->output_bfd, val, 5365 s->contents + (s->indx[bucket] - s->symindx) * 4); 5366 --s->counts[bucket]; 5367 h->dynindx = s->indx[bucket]++; 5368 return TRUE; 5369 } 5370 5371 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */ 5372 5373 bfd_boolean 5374 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h) 5375 { 5376 return !(h->forced_local 5377 || h->root.type == bfd_link_hash_undefined 5378 || h->root.type == bfd_link_hash_undefweak 5379 || ((h->root.type == bfd_link_hash_defined 5380 || h->root.type == bfd_link_hash_defweak) 5381 && h->root.u.def.section->output_section == NULL)); 5382 } 5383 5384 /* Array used to determine the number of hash table buckets to use 5385 based on the number of symbols there are. If there are fewer than 5386 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets, 5387 fewer than 37 we use 17 buckets, and so forth. We never use more 5388 than 32771 buckets. */ 5389 5390 static const size_t elf_buckets[] = 5391 { 5392 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209, 5393 16411, 32771, 0 5394 }; 5395 5396 /* Compute bucket count for hashing table. We do not use a static set 5397 of possible tables sizes anymore. Instead we determine for all 5398 possible reasonable sizes of the table the outcome (i.e., the 5399 number of collisions etc) and choose the best solution. The 5400 weighting functions are not too simple to allow the table to grow 5401 without bounds. Instead one of the weighting factors is the size. 5402 Therefore the result is always a good payoff between few collisions 5403 (= short chain lengths) and table size. */ 5404 static size_t 5405 compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED, 5406 unsigned long int *hashcodes ATTRIBUTE_UNUSED, 5407 unsigned long int nsyms, 5408 int gnu_hash) 5409 { 5410 size_t best_size = 0; 5411 unsigned long int i; 5412 5413 /* We have a problem here. The following code to optimize the table 5414 size requires an integer type with more the 32 bits. If 5415 BFD_HOST_U_64_BIT is set we know about such a type. */ 5416 #ifdef BFD_HOST_U_64_BIT 5417 if (info->optimize) 5418 { 5419 size_t minsize; 5420 size_t maxsize; 5421 BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0); 5422 bfd *dynobj = elf_hash_table (info)->dynobj; 5423 size_t dynsymcount = elf_hash_table (info)->dynsymcount; 5424 const struct elf_backend_data *bed = get_elf_backend_data (dynobj); 5425 unsigned long int *counts; 5426 bfd_size_type amt; 5427 unsigned int no_improvement_count = 0; 5428 5429 /* Possible optimization parameters: if we have NSYMS symbols we say 5430 that the hashing table must at least have NSYMS/4 and at most 5431 2*NSYMS buckets. */ 5432 minsize = nsyms / 4; 5433 if (minsize == 0) 5434 minsize = 1; 5435 best_size = maxsize = nsyms * 2; 5436 if (gnu_hash) 5437 { 5438 if (minsize < 2) 5439 minsize = 2; 5440 if ((best_size & 31) == 0) 5441 ++best_size; 5442 } 5443 5444 /* Create array where we count the collisions in. We must use bfd_malloc 5445 since the size could be large. */ 5446 amt = maxsize; 5447 amt *= sizeof (unsigned long int); 5448 counts = (unsigned long int *) bfd_malloc (amt); 5449 if (counts == NULL) 5450 return 0; 5451 5452 /* Compute the "optimal" size for the hash table. The criteria is a 5453 minimal chain length. The minor criteria is (of course) the size 5454 of the table. */ 5455 for (i = minsize; i < maxsize; ++i) 5456 { 5457 /* Walk through the array of hashcodes and count the collisions. */ 5458 BFD_HOST_U_64_BIT max; 5459 unsigned long int j; 5460 unsigned long int fact; 5461 5462 if (gnu_hash && (i & 31) == 0) 5463 continue; 5464 5465 memset (counts, '\0', i * sizeof (unsigned long int)); 5466 5467 /* Determine how often each hash bucket is used. */ 5468 for (j = 0; j < nsyms; ++j) 5469 ++counts[hashcodes[j] % i]; 5470 5471 /* For the weight function we need some information about the 5472 pagesize on the target. This is information need not be 100% 5473 accurate. Since this information is not available (so far) we 5474 define it here to a reasonable default value. If it is crucial 5475 to have a better value some day simply define this value. */ 5476 # ifndef BFD_TARGET_PAGESIZE 5477 # define BFD_TARGET_PAGESIZE (4096) 5478 # endif 5479 5480 /* We in any case need 2 + DYNSYMCOUNT entries for the size values 5481 and the chains. */ 5482 max = (2 + dynsymcount) * bed->s->sizeof_hash_entry; 5483 5484 # if 1 5485 /* Variant 1: optimize for short chains. We add the squares 5486 of all the chain lengths (which favors many small chain 5487 over a few long chains). */ 5488 for (j = 0; j < i; ++j) 5489 max += counts[j] * counts[j]; 5490 5491 /* This adds penalties for the overall size of the table. */ 5492 fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1; 5493 max *= fact * fact; 5494 # else 5495 /* Variant 2: Optimize a lot more for small table. Here we 5496 also add squares of the size but we also add penalties for 5497 empty slots (the +1 term). */ 5498 for (j = 0; j < i; ++j) 5499 max += (1 + counts[j]) * (1 + counts[j]); 5500 5501 /* The overall size of the table is considered, but not as 5502 strong as in variant 1, where it is squared. */ 5503 fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1; 5504 max *= fact; 5505 # endif 5506 5507 /* Compare with current best results. */ 5508 if (max < best_chlen) 5509 { 5510 best_chlen = max; 5511 best_size = i; 5512 no_improvement_count = 0; 5513 } 5514 /* PR 11843: Avoid futile long searches for the best bucket size 5515 when there are a large number of symbols. */ 5516 else if (++no_improvement_count == 100) 5517 break; 5518 } 5519 5520 free (counts); 5521 } 5522 else 5523 #endif /* defined (BFD_HOST_U_64_BIT) */ 5524 { 5525 /* This is the fallback solution if no 64bit type is available or if we 5526 are not supposed to spend much time on optimizations. We select the 5527 bucket count using a fixed set of numbers. */ 5528 for (i = 0; elf_buckets[i] != 0; i++) 5529 { 5530 best_size = elf_buckets[i]; 5531 if (nsyms < elf_buckets[i + 1]) 5532 break; 5533 } 5534 if (gnu_hash && best_size < 2) 5535 best_size = 2; 5536 } 5537 5538 return best_size; 5539 } 5540 5541 /* Size any SHT_GROUP section for ld -r. */ 5542 5543 bfd_boolean 5544 _bfd_elf_size_group_sections (struct bfd_link_info *info) 5545 { 5546 bfd *ibfd; 5547 5548 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) 5549 if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour 5550 && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr)) 5551 return FALSE; 5552 return TRUE; 5553 } 5554 5555 /* Set up the sizes and contents of the ELF dynamic sections. This is 5556 called by the ELF linker emulation before_allocation routine. We 5557 must set the sizes of the sections before the linker sets the 5558 addresses of the various sections. */ 5559 5560 bfd_boolean 5561 bfd_elf_size_dynamic_sections (bfd *output_bfd, 5562 const char *soname, 5563 const char *rpath, 5564 const char *filter_shlib, 5565 const char *audit, 5566 const char *depaudit, 5567 const char * const *auxiliary_filters, 5568 struct bfd_link_info *info, 5569 asection **sinterpptr) 5570 { 5571 bfd_size_type soname_indx; 5572 bfd *dynobj; 5573 const struct elf_backend_data *bed; 5574 struct elf_info_failed asvinfo; 5575 5576 *sinterpptr = NULL; 5577 5578 soname_indx = (bfd_size_type) -1; 5579 5580 if (!is_elf_hash_table (info->hash)) 5581 return TRUE; 5582 5583 bed = get_elf_backend_data (output_bfd); 5584 if (info->execstack) 5585 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X; 5586 else if (info->noexecstack) 5587 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W; 5588 else 5589 { 5590 bfd *inputobj; 5591 asection *notesec = NULL; 5592 int exec = 0; 5593 5594 for (inputobj = info->input_bfds; 5595 inputobj; 5596 inputobj = inputobj->link_next) 5597 { 5598 asection *s; 5599 5600 if (inputobj->flags 5601 & (DYNAMIC | EXEC_P | BFD_PLUGIN | BFD_LINKER_CREATED)) 5602 continue; 5603 s = bfd_get_section_by_name (inputobj, ".note.GNU-stack"); 5604 if (s) 5605 { 5606 if (s->flags & SEC_CODE) 5607 exec = PF_X; 5608 notesec = s; 5609 } 5610 else if (bed->default_execstack) 5611 exec = PF_X; 5612 } 5613 if (notesec) 5614 { 5615 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec; 5616 if (exec && info->relocatable 5617 && notesec->output_section != bfd_abs_section_ptr) 5618 notesec->output_section->flags |= SEC_CODE; 5619 } 5620 } 5621 5622 /* Any syms created from now on start with -1 in 5623 got.refcount/offset and plt.refcount/offset. */ 5624 elf_hash_table (info)->init_got_refcount 5625 = elf_hash_table (info)->init_got_offset; 5626 elf_hash_table (info)->init_plt_refcount 5627 = elf_hash_table (info)->init_plt_offset; 5628 5629 if (info->relocatable 5630 && !_bfd_elf_size_group_sections (info)) 5631 return FALSE; 5632 5633 /* The backend may have to create some sections regardless of whether 5634 we're dynamic or not. */ 5635 if (bed->elf_backend_always_size_sections 5636 && ! (*bed->elf_backend_always_size_sections) (output_bfd, info)) 5637 return FALSE; 5638 5639 dynobj = elf_hash_table (info)->dynobj; 5640 5641 if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created) 5642 { 5643 struct elf_info_failed eif; 5644 struct elf_link_hash_entry *h; 5645 asection *dynstr; 5646 struct bfd_elf_version_tree *t; 5647 struct bfd_elf_version_expr *d; 5648 asection *s; 5649 bfd_boolean all_defined; 5650 5651 *sinterpptr = bfd_get_linker_section (dynobj, ".interp"); 5652 BFD_ASSERT (*sinterpptr != NULL || !info->executable); 5653 5654 if (soname != NULL) 5655 { 5656 soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5657 soname, TRUE); 5658 if (soname_indx == (bfd_size_type) -1 5659 || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx)) 5660 return FALSE; 5661 } 5662 5663 if (info->symbolic) 5664 { 5665 if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0)) 5666 return FALSE; 5667 info->flags |= DF_SYMBOLIC; 5668 } 5669 5670 if (rpath != NULL) 5671 { 5672 bfd_size_type indx; 5673 5674 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath, 5675 TRUE); 5676 if (indx == (bfd_size_type) -1 5677 || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx)) 5678 return FALSE; 5679 5680 if (info->new_dtags) 5681 { 5682 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx); 5683 if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx)) 5684 return FALSE; 5685 } 5686 } 5687 5688 if (filter_shlib != NULL) 5689 { 5690 bfd_size_type indx; 5691 5692 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5693 filter_shlib, TRUE); 5694 if (indx == (bfd_size_type) -1 5695 || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx)) 5696 return FALSE; 5697 } 5698 5699 if (auxiliary_filters != NULL) 5700 { 5701 const char * const *p; 5702 5703 for (p = auxiliary_filters; *p != NULL; p++) 5704 { 5705 bfd_size_type indx; 5706 5707 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 5708 *p, TRUE); 5709 if (indx == (bfd_size_type) -1 5710 || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx)) 5711 return FALSE; 5712 } 5713 } 5714 5715 if (audit != NULL) 5716 { 5717 bfd_size_type indx; 5718 5719 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit, 5720 TRUE); 5721 if (indx == (bfd_size_type) -1 5722 || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx)) 5723 return FALSE; 5724 } 5725 5726 if (depaudit != NULL) 5727 { 5728 bfd_size_type indx; 5729 5730 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit, 5731 TRUE); 5732 if (indx == (bfd_size_type) -1 5733 || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx)) 5734 return FALSE; 5735 } 5736 5737 eif.info = info; 5738 eif.failed = FALSE; 5739 5740 /* If we are supposed to export all symbols into the dynamic symbol 5741 table (this is not the normal case), then do so. */ 5742 if (info->export_dynamic 5743 || (info->executable && info->dynamic)) 5744 { 5745 elf_link_hash_traverse (elf_hash_table (info), 5746 _bfd_elf_export_symbol, 5747 &eif); 5748 if (eif.failed) 5749 return FALSE; 5750 } 5751 5752 /* Make all global versions with definition. */ 5753 for (t = info->version_info; t != NULL; t = t->next) 5754 for (d = t->globals.list; d != NULL; d = d->next) 5755 if (!d->symver && d->literal) 5756 { 5757 const char *verstr, *name; 5758 size_t namelen, verlen, newlen; 5759 char *newname, *p, leading_char; 5760 struct elf_link_hash_entry *newh; 5761 5762 leading_char = bfd_get_symbol_leading_char (output_bfd); 5763 name = d->pattern; 5764 namelen = strlen (name) + (leading_char != '\0'); 5765 verstr = t->name; 5766 verlen = strlen (verstr); 5767 newlen = namelen + verlen + 3; 5768 5769 newname = (char *) bfd_malloc (newlen); 5770 if (newname == NULL) 5771 return FALSE; 5772 newname[0] = leading_char; 5773 memcpy (newname + (leading_char != '\0'), name, namelen); 5774 5775 /* Check the hidden versioned definition. */ 5776 p = newname + namelen; 5777 *p++ = ELF_VER_CHR; 5778 memcpy (p, verstr, verlen + 1); 5779 newh = elf_link_hash_lookup (elf_hash_table (info), 5780 newname, FALSE, FALSE, 5781 FALSE); 5782 if (newh == NULL 5783 || (newh->root.type != bfd_link_hash_defined 5784 && newh->root.type != bfd_link_hash_defweak)) 5785 { 5786 /* Check the default versioned definition. */ 5787 *p++ = ELF_VER_CHR; 5788 memcpy (p, verstr, verlen + 1); 5789 newh = elf_link_hash_lookup (elf_hash_table (info), 5790 newname, FALSE, FALSE, 5791 FALSE); 5792 } 5793 free (newname); 5794 5795 /* Mark this version if there is a definition and it is 5796 not defined in a shared object. */ 5797 if (newh != NULL 5798 && !newh->def_dynamic 5799 && (newh->root.type == bfd_link_hash_defined 5800 || newh->root.type == bfd_link_hash_defweak)) 5801 d->symver = 1; 5802 } 5803 5804 /* Attach all the symbols to their version information. */ 5805 asvinfo.info = info; 5806 asvinfo.failed = FALSE; 5807 5808 elf_link_hash_traverse (elf_hash_table (info), 5809 _bfd_elf_link_assign_sym_version, 5810 &asvinfo); 5811 if (asvinfo.failed) 5812 return FALSE; 5813 5814 if (!info->allow_undefined_version) 5815 { 5816 /* Check if all global versions have a definition. */ 5817 all_defined = TRUE; 5818 for (t = info->version_info; t != NULL; t = t->next) 5819 for (d = t->globals.list; d != NULL; d = d->next) 5820 if (d->literal && !d->symver && !d->script) 5821 { 5822 (*_bfd_error_handler) 5823 (_("%s: undefined version: %s"), 5824 d->pattern, t->name); 5825 all_defined = FALSE; 5826 } 5827 5828 if (!all_defined) 5829 { 5830 bfd_set_error (bfd_error_bad_value); 5831 return FALSE; 5832 } 5833 } 5834 5835 /* Find all symbols which were defined in a dynamic object and make 5836 the backend pick a reasonable value for them. */ 5837 elf_link_hash_traverse (elf_hash_table (info), 5838 _bfd_elf_adjust_dynamic_symbol, 5839 &eif); 5840 if (eif.failed) 5841 return FALSE; 5842 5843 /* Add some entries to the .dynamic section. We fill in some of the 5844 values later, in bfd_elf_final_link, but we must add the entries 5845 now so that we know the final size of the .dynamic section. */ 5846 5847 /* If there are initialization and/or finalization functions to 5848 call then add the corresponding DT_INIT/DT_FINI entries. */ 5849 h = (info->init_function 5850 ? elf_link_hash_lookup (elf_hash_table (info), 5851 info->init_function, FALSE, 5852 FALSE, FALSE) 5853 : NULL); 5854 if (h != NULL 5855 && (h->ref_regular 5856 || h->def_regular)) 5857 { 5858 if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0)) 5859 return FALSE; 5860 } 5861 h = (info->fini_function 5862 ? elf_link_hash_lookup (elf_hash_table (info), 5863 info->fini_function, FALSE, 5864 FALSE, FALSE) 5865 : NULL); 5866 if (h != NULL 5867 && (h->ref_regular 5868 || h->def_regular)) 5869 { 5870 if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0)) 5871 return FALSE; 5872 } 5873 5874 s = bfd_get_section_by_name (output_bfd, ".preinit_array"); 5875 if (s != NULL && s->linker_has_input) 5876 { 5877 /* DT_PREINIT_ARRAY is not allowed in shared library. */ 5878 if (! info->executable) 5879 { 5880 bfd *sub; 5881 asection *o; 5882 5883 for (sub = info->input_bfds; sub != NULL; 5884 sub = sub->link_next) 5885 if (bfd_get_flavour (sub) == bfd_target_elf_flavour) 5886 for (o = sub->sections; o != NULL; o = o->next) 5887 if (elf_section_data (o)->this_hdr.sh_type 5888 == SHT_PREINIT_ARRAY) 5889 { 5890 (*_bfd_error_handler) 5891 (_("%B: .preinit_array section is not allowed in DSO"), 5892 sub); 5893 break; 5894 } 5895 5896 bfd_set_error (bfd_error_nonrepresentable_section); 5897 return FALSE; 5898 } 5899 5900 if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0) 5901 || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0)) 5902 return FALSE; 5903 } 5904 s = bfd_get_section_by_name (output_bfd, ".init_array"); 5905 if (s != NULL && s->linker_has_input) 5906 { 5907 if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0) 5908 || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0)) 5909 return FALSE; 5910 } 5911 s = bfd_get_section_by_name (output_bfd, ".fini_array"); 5912 if (s != NULL && s->linker_has_input) 5913 { 5914 if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0) 5915 || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0)) 5916 return FALSE; 5917 } 5918 5919 dynstr = bfd_get_linker_section (dynobj, ".dynstr"); 5920 /* If .dynstr is excluded from the link, we don't want any of 5921 these tags. Strictly, we should be checking each section 5922 individually; This quick check covers for the case where 5923 someone does a /DISCARD/ : { *(*) }. */ 5924 if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr) 5925 { 5926 bfd_size_type strsize; 5927 5928 strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 5929 if ((info->emit_hash 5930 && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0)) 5931 || (info->emit_gnu_hash 5932 && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0)) 5933 || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0) 5934 || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0) 5935 || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize) 5936 || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT, 5937 bed->s->sizeof_sym)) 5938 return FALSE; 5939 } 5940 } 5941 5942 /* The backend must work out the sizes of all the other dynamic 5943 sections. */ 5944 if (dynobj != NULL 5945 && bed->elf_backend_size_dynamic_sections != NULL 5946 && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info)) 5947 return FALSE; 5948 5949 if (! _bfd_elf_maybe_strip_eh_frame_hdr (info)) 5950 return FALSE; 5951 5952 if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created) 5953 { 5954 unsigned long section_sym_count; 5955 struct bfd_elf_version_tree *verdefs; 5956 asection *s; 5957 5958 /* Set up the version definition section. */ 5959 s = bfd_get_linker_section (dynobj, ".gnu.version_d"); 5960 BFD_ASSERT (s != NULL); 5961 5962 /* We may have created additional version definitions if we are 5963 just linking a regular application. */ 5964 verdefs = info->version_info; 5965 5966 /* Skip anonymous version tag. */ 5967 if (verdefs != NULL && verdefs->vernum == 0) 5968 verdefs = verdefs->next; 5969 5970 if (verdefs == NULL && !info->create_default_symver) 5971 s->flags |= SEC_EXCLUDE; 5972 else 5973 { 5974 unsigned int cdefs; 5975 bfd_size_type size; 5976 struct bfd_elf_version_tree *t; 5977 bfd_byte *p; 5978 Elf_Internal_Verdef def; 5979 Elf_Internal_Verdaux defaux; 5980 struct bfd_link_hash_entry *bh; 5981 struct elf_link_hash_entry *h; 5982 const char *name; 5983 5984 cdefs = 0; 5985 size = 0; 5986 5987 /* Make space for the base version. */ 5988 size += sizeof (Elf_External_Verdef); 5989 size += sizeof (Elf_External_Verdaux); 5990 ++cdefs; 5991 5992 /* Make space for the default version. */ 5993 if (info->create_default_symver) 5994 { 5995 size += sizeof (Elf_External_Verdef); 5996 ++cdefs; 5997 } 5998 5999 for (t = verdefs; t != NULL; t = t->next) 6000 { 6001 struct bfd_elf_version_deps *n; 6002 6003 /* Don't emit base version twice. */ 6004 if (t->vernum == 0) 6005 continue; 6006 6007 size += sizeof (Elf_External_Verdef); 6008 size += sizeof (Elf_External_Verdaux); 6009 ++cdefs; 6010 6011 for (n = t->deps; n != NULL; n = n->next) 6012 size += sizeof (Elf_External_Verdaux); 6013 } 6014 6015 s->size = size; 6016 s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); 6017 if (s->contents == NULL && s->size != 0) 6018 return FALSE; 6019 6020 /* Fill in the version definition section. */ 6021 6022 p = s->contents; 6023 6024 def.vd_version = VER_DEF_CURRENT; 6025 def.vd_flags = VER_FLG_BASE; 6026 def.vd_ndx = 1; 6027 def.vd_cnt = 1; 6028 if (info->create_default_symver) 6029 { 6030 def.vd_aux = 2 * sizeof (Elf_External_Verdef); 6031 def.vd_next = sizeof (Elf_External_Verdef); 6032 } 6033 else 6034 { 6035 def.vd_aux = sizeof (Elf_External_Verdef); 6036 def.vd_next = (sizeof (Elf_External_Verdef) 6037 + sizeof (Elf_External_Verdaux)); 6038 } 6039 6040 if (soname_indx != (bfd_size_type) -1) 6041 { 6042 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, 6043 soname_indx); 6044 def.vd_hash = bfd_elf_hash (soname); 6045 defaux.vda_name = soname_indx; 6046 name = soname; 6047 } 6048 else 6049 { 6050 bfd_size_type indx; 6051 6052 name = lbasename (output_bfd->filename); 6053 def.vd_hash = bfd_elf_hash (name); 6054 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 6055 name, FALSE); 6056 if (indx == (bfd_size_type) -1) 6057 return FALSE; 6058 defaux.vda_name = indx; 6059 } 6060 defaux.vda_next = 0; 6061 6062 _bfd_elf_swap_verdef_out (output_bfd, &def, 6063 (Elf_External_Verdef *) p); 6064 p += sizeof (Elf_External_Verdef); 6065 if (info->create_default_symver) 6066 { 6067 /* Add a symbol representing this version. */ 6068 bh = NULL; 6069 if (! (_bfd_generic_link_add_one_symbol 6070 (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr, 6071 0, NULL, FALSE, 6072 get_elf_backend_data (dynobj)->collect, &bh))) 6073 return FALSE; 6074 h = (struct elf_link_hash_entry *) bh; 6075 h->non_elf = 0; 6076 h->def_regular = 1; 6077 h->type = STT_OBJECT; 6078 h->verinfo.vertree = NULL; 6079 6080 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 6081 return FALSE; 6082 6083 /* Create a duplicate of the base version with the same 6084 aux block, but different flags. */ 6085 def.vd_flags = 0; 6086 def.vd_ndx = 2; 6087 def.vd_aux = sizeof (Elf_External_Verdef); 6088 if (verdefs) 6089 def.vd_next = (sizeof (Elf_External_Verdef) 6090 + sizeof (Elf_External_Verdaux)); 6091 else 6092 def.vd_next = 0; 6093 _bfd_elf_swap_verdef_out (output_bfd, &def, 6094 (Elf_External_Verdef *) p); 6095 p += sizeof (Elf_External_Verdef); 6096 } 6097 _bfd_elf_swap_verdaux_out (output_bfd, &defaux, 6098 (Elf_External_Verdaux *) p); 6099 p += sizeof (Elf_External_Verdaux); 6100 6101 for (t = verdefs; t != NULL; t = t->next) 6102 { 6103 unsigned int cdeps; 6104 struct bfd_elf_version_deps *n; 6105 6106 /* Don't emit the base version twice. */ 6107 if (t->vernum == 0) 6108 continue; 6109 6110 cdeps = 0; 6111 for (n = t->deps; n != NULL; n = n->next) 6112 ++cdeps; 6113 6114 /* Add a symbol representing this version. */ 6115 bh = NULL; 6116 if (! (_bfd_generic_link_add_one_symbol 6117 (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr, 6118 0, NULL, FALSE, 6119 get_elf_backend_data (dynobj)->collect, &bh))) 6120 return FALSE; 6121 h = (struct elf_link_hash_entry *) bh; 6122 h->non_elf = 0; 6123 h->def_regular = 1; 6124 h->type = STT_OBJECT; 6125 h->verinfo.vertree = t; 6126 6127 if (! bfd_elf_link_record_dynamic_symbol (info, h)) 6128 return FALSE; 6129 6130 def.vd_version = VER_DEF_CURRENT; 6131 def.vd_flags = 0; 6132 if (t->globals.list == NULL 6133 && t->locals.list == NULL 6134 && ! t->used) 6135 def.vd_flags |= VER_FLG_WEAK; 6136 def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1); 6137 def.vd_cnt = cdeps + 1; 6138 def.vd_hash = bfd_elf_hash (t->name); 6139 def.vd_aux = sizeof (Elf_External_Verdef); 6140 def.vd_next = 0; 6141 6142 /* If a basever node is next, it *must* be the last node in 6143 the chain, otherwise Verdef construction breaks. */ 6144 if (t->next != NULL && t->next->vernum == 0) 6145 BFD_ASSERT (t->next->next == NULL); 6146 6147 if (t->next != NULL && t->next->vernum != 0) 6148 def.vd_next = (sizeof (Elf_External_Verdef) 6149 + (cdeps + 1) * sizeof (Elf_External_Verdaux)); 6150 6151 _bfd_elf_swap_verdef_out (output_bfd, &def, 6152 (Elf_External_Verdef *) p); 6153 p += sizeof (Elf_External_Verdef); 6154 6155 defaux.vda_name = h->dynstr_index; 6156 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, 6157 h->dynstr_index); 6158 defaux.vda_next = 0; 6159 if (t->deps != NULL) 6160 defaux.vda_next = sizeof (Elf_External_Verdaux); 6161 t->name_indx = defaux.vda_name; 6162 6163 _bfd_elf_swap_verdaux_out (output_bfd, &defaux, 6164 (Elf_External_Verdaux *) p); 6165 p += sizeof (Elf_External_Verdaux); 6166 6167 for (n = t->deps; n != NULL; n = n->next) 6168 { 6169 if (n->version_needed == NULL) 6170 { 6171 /* This can happen if there was an error in the 6172 version script. */ 6173 defaux.vda_name = 0; 6174 } 6175 else 6176 { 6177 defaux.vda_name = n->version_needed->name_indx; 6178 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, 6179 defaux.vda_name); 6180 } 6181 if (n->next == NULL) 6182 defaux.vda_next = 0; 6183 else 6184 defaux.vda_next = sizeof (Elf_External_Verdaux); 6185 6186 _bfd_elf_swap_verdaux_out (output_bfd, &defaux, 6187 (Elf_External_Verdaux *) p); 6188 p += sizeof (Elf_External_Verdaux); 6189 } 6190 } 6191 6192 if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0) 6193 || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs)) 6194 return FALSE; 6195 6196 elf_tdata (output_bfd)->cverdefs = cdefs; 6197 } 6198 6199 if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS)) 6200 { 6201 if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags)) 6202 return FALSE; 6203 } 6204 else if (info->flags & DF_BIND_NOW) 6205 { 6206 if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0)) 6207 return FALSE; 6208 } 6209 6210 if (info->flags_1) 6211 { 6212 if (info->executable) 6213 info->flags_1 &= ~ (DF_1_INITFIRST 6214 | DF_1_NODELETE 6215 | DF_1_NOOPEN); 6216 if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1)) 6217 return FALSE; 6218 } 6219 6220 /* Work out the size of the version reference section. */ 6221 6222 s = bfd_get_linker_section (dynobj, ".gnu.version_r"); 6223 BFD_ASSERT (s != NULL); 6224 { 6225 struct elf_find_verdep_info sinfo; 6226 6227 sinfo.info = info; 6228 sinfo.vers = elf_tdata (output_bfd)->cverdefs; 6229 if (sinfo.vers == 0) 6230 sinfo.vers = 1; 6231 sinfo.failed = FALSE; 6232 6233 elf_link_hash_traverse (elf_hash_table (info), 6234 _bfd_elf_link_find_version_dependencies, 6235 &sinfo); 6236 if (sinfo.failed) 6237 return FALSE; 6238 6239 if (elf_tdata (output_bfd)->verref == NULL) 6240 s->flags |= SEC_EXCLUDE; 6241 else 6242 { 6243 Elf_Internal_Verneed *t; 6244 unsigned int size; 6245 unsigned int crefs; 6246 bfd_byte *p; 6247 6248 /* Build the version dependency section. */ 6249 size = 0; 6250 crefs = 0; 6251 for (t = elf_tdata (output_bfd)->verref; 6252 t != NULL; 6253 t = t->vn_nextref) 6254 { 6255 Elf_Internal_Vernaux *a; 6256 6257 size += sizeof (Elf_External_Verneed); 6258 ++crefs; 6259 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 6260 size += sizeof (Elf_External_Vernaux); 6261 } 6262 6263 s->size = size; 6264 s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); 6265 if (s->contents == NULL) 6266 return FALSE; 6267 6268 p = s->contents; 6269 for (t = elf_tdata (output_bfd)->verref; 6270 t != NULL; 6271 t = t->vn_nextref) 6272 { 6273 unsigned int caux; 6274 Elf_Internal_Vernaux *a; 6275 bfd_size_type indx; 6276 6277 caux = 0; 6278 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 6279 ++caux; 6280 6281 t->vn_version = VER_NEED_CURRENT; 6282 t->vn_cnt = caux; 6283 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 6284 elf_dt_name (t->vn_bfd) != NULL 6285 ? elf_dt_name (t->vn_bfd) 6286 : lbasename (t->vn_bfd->filename), 6287 FALSE); 6288 if (indx == (bfd_size_type) -1) 6289 return FALSE; 6290 t->vn_file = indx; 6291 t->vn_aux = sizeof (Elf_External_Verneed); 6292 if (t->vn_nextref == NULL) 6293 t->vn_next = 0; 6294 else 6295 t->vn_next = (sizeof (Elf_External_Verneed) 6296 + caux * sizeof (Elf_External_Vernaux)); 6297 6298 _bfd_elf_swap_verneed_out (output_bfd, t, 6299 (Elf_External_Verneed *) p); 6300 p += sizeof (Elf_External_Verneed); 6301 6302 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) 6303 { 6304 a->vna_hash = bfd_elf_hash (a->vna_nodename); 6305 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, 6306 a->vna_nodename, FALSE); 6307 if (indx == (bfd_size_type) -1) 6308 return FALSE; 6309 a->vna_name = indx; 6310 if (a->vna_nextptr == NULL) 6311 a->vna_next = 0; 6312 else 6313 a->vna_next = sizeof (Elf_External_Vernaux); 6314 6315 _bfd_elf_swap_vernaux_out (output_bfd, a, 6316 (Elf_External_Vernaux *) p); 6317 p += sizeof (Elf_External_Vernaux); 6318 } 6319 } 6320 6321 if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0) 6322 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs)) 6323 return FALSE; 6324 6325 elf_tdata (output_bfd)->cverrefs = crefs; 6326 } 6327 } 6328 6329 if ((elf_tdata (output_bfd)->cverrefs == 0 6330 && elf_tdata (output_bfd)->cverdefs == 0) 6331 || _bfd_elf_link_renumber_dynsyms (output_bfd, info, 6332 §ion_sym_count) == 0) 6333 { 6334 s = bfd_get_linker_section (dynobj, ".gnu.version"); 6335 s->flags |= SEC_EXCLUDE; 6336 } 6337 } 6338 return TRUE; 6339 } 6340 6341 /* Find the first non-excluded output section. We'll use its 6342 section symbol for some emitted relocs. */ 6343 void 6344 _bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info) 6345 { 6346 asection *s; 6347 6348 for (s = output_bfd->sections; s != NULL; s = s->next) 6349 if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC 6350 && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s)) 6351 { 6352 elf_hash_table (info)->text_index_section = s; 6353 break; 6354 } 6355 } 6356 6357 /* Find two non-excluded output sections, one for code, one for data. 6358 We'll use their section symbols for some emitted relocs. */ 6359 void 6360 _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info) 6361 { 6362 asection *s; 6363 6364 /* Data first, since setting text_index_section changes 6365 _bfd_elf_link_omit_section_dynsym. */ 6366 for (s = output_bfd->sections; s != NULL; s = s->next) 6367 if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC) 6368 && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s)) 6369 { 6370 elf_hash_table (info)->data_index_section = s; 6371 break; 6372 } 6373 6374 for (s = output_bfd->sections; s != NULL; s = s->next) 6375 if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) 6376 == (SEC_ALLOC | SEC_READONLY)) 6377 && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s)) 6378 { 6379 elf_hash_table (info)->text_index_section = s; 6380 break; 6381 } 6382 6383 if (elf_hash_table (info)->text_index_section == NULL) 6384 elf_hash_table (info)->text_index_section 6385 = elf_hash_table (info)->data_index_section; 6386 } 6387 6388 bfd_boolean 6389 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) 6390 { 6391 const struct elf_backend_data *bed; 6392 6393 if (!is_elf_hash_table (info->hash)) 6394 return TRUE; 6395 6396 bed = get_elf_backend_data (output_bfd); 6397 (*bed->elf_backend_init_index_section) (output_bfd, info); 6398 6399 if (elf_hash_table (info)->dynamic_sections_created) 6400 { 6401 bfd *dynobj; 6402 asection *s; 6403 bfd_size_type dynsymcount; 6404 unsigned long section_sym_count; 6405 unsigned int dtagcount; 6406 6407 dynobj = elf_hash_table (info)->dynobj; 6408 6409 /* Assign dynsym indicies. In a shared library we generate a 6410 section symbol for each output section, which come first. 6411 Next come all of the back-end allocated local dynamic syms, 6412 followed by the rest of the global symbols. */ 6413 6414 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info, 6415 §ion_sym_count); 6416 6417 /* Work out the size of the symbol version section. */ 6418 s = bfd_get_linker_section (dynobj, ".gnu.version"); 6419 BFD_ASSERT (s != NULL); 6420 if (dynsymcount != 0 6421 && (s->flags & SEC_EXCLUDE) == 0) 6422 { 6423 s->size = dynsymcount * sizeof (Elf_External_Versym); 6424 s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); 6425 if (s->contents == NULL) 6426 return FALSE; 6427 6428 if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0)) 6429 return FALSE; 6430 } 6431 6432 /* Set the size of the .dynsym and .hash sections. We counted 6433 the number of dynamic symbols in elf_link_add_object_symbols. 6434 We will build the contents of .dynsym and .hash when we build 6435 the final symbol table, because until then we do not know the 6436 correct value to give the symbols. We built the .dynstr 6437 section as we went along in elf_link_add_object_symbols. */ 6438 s = bfd_get_linker_section (dynobj, ".dynsym"); 6439 BFD_ASSERT (s != NULL); 6440 s->size = dynsymcount * bed->s->sizeof_sym; 6441 6442 if (dynsymcount != 0) 6443 { 6444 s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); 6445 if (s->contents == NULL) 6446 return FALSE; 6447 6448 /* The first entry in .dynsym is a dummy symbol. 6449 Clear all the section syms, in case we don't output them all. */ 6450 ++section_sym_count; 6451 memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym); 6452 } 6453 6454 elf_hash_table (info)->bucketcount = 0; 6455 6456 /* Compute the size of the hashing table. As a side effect this 6457 computes the hash values for all the names we export. */ 6458 if (info->emit_hash) 6459 { 6460 unsigned long int *hashcodes; 6461 struct hash_codes_info hashinf; 6462 bfd_size_type amt; 6463 unsigned long int nsyms; 6464 size_t bucketcount; 6465 size_t hash_entry_size; 6466 6467 /* Compute the hash values for all exported symbols. At the same 6468 time store the values in an array so that we could use them for 6469 optimizations. */ 6470 amt = dynsymcount * sizeof (unsigned long int); 6471 hashcodes = (unsigned long int *) bfd_malloc (amt); 6472 if (hashcodes == NULL) 6473 return FALSE; 6474 hashinf.hashcodes = hashcodes; 6475 hashinf.error = FALSE; 6476 6477 /* Put all hash values in HASHCODES. */ 6478 elf_link_hash_traverse (elf_hash_table (info), 6479 elf_collect_hash_codes, &hashinf); 6480 if (hashinf.error) 6481 { 6482 free (hashcodes); 6483 return FALSE; 6484 } 6485 6486 nsyms = hashinf.hashcodes - hashcodes; 6487 bucketcount 6488 = compute_bucket_count (info, hashcodes, nsyms, 0); 6489 free (hashcodes); 6490 6491 if (bucketcount == 0) 6492 return FALSE; 6493 6494 elf_hash_table (info)->bucketcount = bucketcount; 6495 6496 s = bfd_get_linker_section (dynobj, ".hash"); 6497 BFD_ASSERT (s != NULL); 6498 hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize; 6499 s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size); 6500 s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); 6501 if (s->contents == NULL) 6502 return FALSE; 6503 6504 bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents); 6505 bfd_put (8 * hash_entry_size, output_bfd, dynsymcount, 6506 s->contents + hash_entry_size); 6507 } 6508 6509 if (info->emit_gnu_hash) 6510 { 6511 size_t i, cnt; 6512 unsigned char *contents; 6513 struct collect_gnu_hash_codes cinfo; 6514 bfd_size_type amt; 6515 size_t bucketcount; 6516 6517 memset (&cinfo, 0, sizeof (cinfo)); 6518 6519 /* Compute the hash values for all exported symbols. At the same 6520 time store the values in an array so that we could use them for 6521 optimizations. */ 6522 amt = dynsymcount * 2 * sizeof (unsigned long int); 6523 cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt); 6524 if (cinfo.hashcodes == NULL) 6525 return FALSE; 6526 6527 cinfo.hashval = cinfo.hashcodes + dynsymcount; 6528 cinfo.min_dynindx = -1; 6529 cinfo.output_bfd = output_bfd; 6530 cinfo.bed = bed; 6531 6532 /* Put all hash values in HASHCODES. */ 6533 elf_link_hash_traverse (elf_hash_table (info), 6534 elf_collect_gnu_hash_codes, &cinfo); 6535 if (cinfo.error) 6536 { 6537 free (cinfo.hashcodes); 6538 return FALSE; 6539 } 6540 6541 bucketcount 6542 = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1); 6543 6544 if (bucketcount == 0) 6545 { 6546 free (cinfo.hashcodes); 6547 return FALSE; 6548 } 6549 6550 s = bfd_get_linker_section (dynobj, ".gnu.hash"); 6551 BFD_ASSERT (s != NULL); 6552 6553 if (cinfo.nsyms == 0) 6554 { 6555 /* Empty .gnu.hash section is special. */ 6556 BFD_ASSERT (cinfo.min_dynindx == -1); 6557 free (cinfo.hashcodes); 6558 s->size = 5 * 4 + bed->s->arch_size / 8; 6559 contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); 6560 if (contents == NULL) 6561 return FALSE; 6562 s->contents = contents; 6563 /* 1 empty bucket. */ 6564 bfd_put_32 (output_bfd, 1, contents); 6565 /* SYMIDX above the special symbol 0. */ 6566 bfd_put_32 (output_bfd, 1, contents + 4); 6567 /* Just one word for bitmask. */ 6568 bfd_put_32 (output_bfd, 1, contents + 8); 6569 /* Only hash fn bloom filter. */ 6570 bfd_put_32 (output_bfd, 0, contents + 12); 6571 /* No hashes are valid - empty bitmask. */ 6572 bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16); 6573 /* No hashes in the only bucket. */ 6574 bfd_put_32 (output_bfd, 0, 6575 contents + 16 + bed->s->arch_size / 8); 6576 } 6577 else 6578 { 6579 unsigned long int maskwords, maskbitslog2, x; 6580 BFD_ASSERT (cinfo.min_dynindx != -1); 6581 6582 x = cinfo.nsyms; 6583 maskbitslog2 = 1; 6584 while ((x >>= 1) != 0) 6585 ++maskbitslog2; 6586 if (maskbitslog2 < 3) 6587 maskbitslog2 = 5; 6588 else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms) 6589 maskbitslog2 = maskbitslog2 + 3; 6590 else 6591 maskbitslog2 = maskbitslog2 + 2; 6592 if (bed->s->arch_size == 64) 6593 { 6594 if (maskbitslog2 == 5) 6595 maskbitslog2 = 6; 6596 cinfo.shift1 = 6; 6597 } 6598 else 6599 cinfo.shift1 = 5; 6600 cinfo.mask = (1 << cinfo.shift1) - 1; 6601 cinfo.shift2 = maskbitslog2; 6602 cinfo.maskbits = 1 << maskbitslog2; 6603 maskwords = 1 << (maskbitslog2 - cinfo.shift1); 6604 amt = bucketcount * sizeof (unsigned long int) * 2; 6605 amt += maskwords * sizeof (bfd_vma); 6606 cinfo.bitmask = (bfd_vma *) bfd_malloc (amt); 6607 if (cinfo.bitmask == NULL) 6608 { 6609 free (cinfo.hashcodes); 6610 return FALSE; 6611 } 6612 6613 cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords); 6614 cinfo.indx = cinfo.counts + bucketcount; 6615 cinfo.symindx = dynsymcount - cinfo.nsyms; 6616 memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma)); 6617 6618 /* Determine how often each hash bucket is used. */ 6619 memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0])); 6620 for (i = 0; i < cinfo.nsyms; ++i) 6621 ++cinfo.counts[cinfo.hashcodes[i] % bucketcount]; 6622 6623 for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i) 6624 if (cinfo.counts[i] != 0) 6625 { 6626 cinfo.indx[i] = cnt; 6627 cnt += cinfo.counts[i]; 6628 } 6629 BFD_ASSERT (cnt == dynsymcount); 6630 cinfo.bucketcount = bucketcount; 6631 cinfo.local_indx = cinfo.min_dynindx; 6632 6633 s->size = (4 + bucketcount + cinfo.nsyms) * 4; 6634 s->size += cinfo.maskbits / 8; 6635 contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); 6636 if (contents == NULL) 6637 { 6638 free (cinfo.bitmask); 6639 free (cinfo.hashcodes); 6640 return FALSE; 6641 } 6642 6643 s->contents = contents; 6644 bfd_put_32 (output_bfd, bucketcount, contents); 6645 bfd_put_32 (output_bfd, cinfo.symindx, contents + 4); 6646 bfd_put_32 (output_bfd, maskwords, contents + 8); 6647 bfd_put_32 (output_bfd, cinfo.shift2, contents + 12); 6648 contents += 16 + cinfo.maskbits / 8; 6649 6650 for (i = 0; i < bucketcount; ++i) 6651 { 6652 if (cinfo.counts[i] == 0) 6653 bfd_put_32 (output_bfd, 0, contents); 6654 else 6655 bfd_put_32 (output_bfd, cinfo.indx[i], contents); 6656 contents += 4; 6657 } 6658 6659 cinfo.contents = contents; 6660 6661 /* Renumber dynamic symbols, populate .gnu.hash section. */ 6662 elf_link_hash_traverse (elf_hash_table (info), 6663 elf_renumber_gnu_hash_syms, &cinfo); 6664 6665 contents = s->contents + 16; 6666 for (i = 0; i < maskwords; ++i) 6667 { 6668 bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i], 6669 contents); 6670 contents += bed->s->arch_size / 8; 6671 } 6672 6673 free (cinfo.bitmask); 6674 free (cinfo.hashcodes); 6675 } 6676 } 6677 6678 s = bfd_get_linker_section (dynobj, ".dynstr"); 6679 BFD_ASSERT (s != NULL); 6680 6681 elf_finalize_dynstr (output_bfd, info); 6682 6683 s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); 6684 6685 for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount) 6686 if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0)) 6687 return FALSE; 6688 } 6689 6690 return TRUE; 6691 } 6692 6693 /* Make sure sec_info_type is cleared if sec_info is cleared too. */ 6694 6695 static void 6696 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED, 6697 asection *sec) 6698 { 6699 BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE); 6700 sec->sec_info_type = SEC_INFO_TYPE_NONE; 6701 } 6702 6703 /* Finish SHF_MERGE section merging. */ 6704 6705 bfd_boolean 6706 _bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info) 6707 { 6708 bfd *ibfd; 6709 asection *sec; 6710 6711 if (!is_elf_hash_table (info->hash)) 6712 return FALSE; 6713 6714 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) 6715 if ((ibfd->flags & DYNAMIC) == 0) 6716 for (sec = ibfd->sections; sec != NULL; sec = sec->next) 6717 if ((sec->flags & SEC_MERGE) != 0 6718 && !bfd_is_abs_section (sec->output_section)) 6719 { 6720 struct bfd_elf_section_data *secdata; 6721 6722 secdata = elf_section_data (sec); 6723 if (! _bfd_add_merge_section (abfd, 6724 &elf_hash_table (info)->merge_info, 6725 sec, &secdata->sec_info)) 6726 return FALSE; 6727 else if (secdata->sec_info) 6728 sec->sec_info_type = SEC_INFO_TYPE_MERGE; 6729 } 6730 6731 if (elf_hash_table (info)->merge_info != NULL) 6732 _bfd_merge_sections (abfd, info, elf_hash_table (info)->merge_info, 6733 merge_sections_remove_hook); 6734 return TRUE; 6735 } 6736 6737 /* Create an entry in an ELF linker hash table. */ 6738 6739 struct bfd_hash_entry * 6740 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry, 6741 struct bfd_hash_table *table, 6742 const char *string) 6743 { 6744 /* Allocate the structure if it has not already been allocated by a 6745 subclass. */ 6746 if (entry == NULL) 6747 { 6748 entry = (struct bfd_hash_entry *) 6749 bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)); 6750 if (entry == NULL) 6751 return entry; 6752 } 6753 6754 /* Call the allocation method of the superclass. */ 6755 entry = _bfd_link_hash_newfunc (entry, table, string); 6756 if (entry != NULL) 6757 { 6758 struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry; 6759 struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table; 6760 6761 /* Set local fields. */ 6762 ret->indx = -1; 6763 ret->dynindx = -1; 6764 ret->got = htab->init_got_refcount; 6765 ret->plt = htab->init_plt_refcount; 6766 memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry) 6767 - offsetof (struct elf_link_hash_entry, size))); 6768 /* Assume that we have been called by a non-ELF symbol reader. 6769 This flag is then reset by the code which reads an ELF input 6770 file. This ensures that a symbol created by a non-ELF symbol 6771 reader will have the flag set correctly. */ 6772 ret->non_elf = 1; 6773 } 6774 6775 return entry; 6776 } 6777 6778 /* Copy data from an indirect symbol to its direct symbol, hiding the 6779 old indirect symbol. Also used for copying flags to a weakdef. */ 6780 6781 void 6782 _bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info, 6783 struct elf_link_hash_entry *dir, 6784 struct elf_link_hash_entry *ind) 6785 { 6786 struct elf_link_hash_table *htab; 6787 6788 /* Copy down any references that we may have already seen to the 6789 symbol which just became indirect. */ 6790 6791 dir->ref_dynamic |= ind->ref_dynamic; 6792 dir->ref_regular |= ind->ref_regular; 6793 dir->ref_regular_nonweak |= ind->ref_regular_nonweak; 6794 dir->non_got_ref |= ind->non_got_ref; 6795 dir->needs_plt |= ind->needs_plt; 6796 dir->pointer_equality_needed |= ind->pointer_equality_needed; 6797 6798 if (ind->root.type != bfd_link_hash_indirect) 6799 return; 6800 6801 /* Copy over the global and procedure linkage table refcount entries. 6802 These may have been already set up by a check_relocs routine. */ 6803 htab = elf_hash_table (info); 6804 if (ind->got.refcount > htab->init_got_refcount.refcount) 6805 { 6806 if (dir->got.refcount < 0) 6807 dir->got.refcount = 0; 6808 dir->got.refcount += ind->got.refcount; 6809 ind->got.refcount = htab->init_got_refcount.refcount; 6810 } 6811 6812 if (ind->plt.refcount > htab->init_plt_refcount.refcount) 6813 { 6814 if (dir->plt.refcount < 0) 6815 dir->plt.refcount = 0; 6816 dir->plt.refcount += ind->plt.refcount; 6817 ind->plt.refcount = htab->init_plt_refcount.refcount; 6818 } 6819 6820 if (ind->dynindx != -1) 6821 { 6822 if (dir->dynindx != -1) 6823 _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index); 6824 dir->dynindx = ind->dynindx; 6825 dir->dynstr_index = ind->dynstr_index; 6826 ind->dynindx = -1; 6827 ind->dynstr_index = 0; 6828 } 6829 } 6830 6831 void 6832 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info, 6833 struct elf_link_hash_entry *h, 6834 bfd_boolean force_local) 6835 { 6836 /* STT_GNU_IFUNC symbol must go through PLT. */ 6837 if (h->type != STT_GNU_IFUNC) 6838 { 6839 h->plt = elf_hash_table (info)->init_plt_offset; 6840 h->needs_plt = 0; 6841 } 6842 if (force_local) 6843 { 6844 h->forced_local = 1; 6845 if (h->dynindx != -1) 6846 { 6847 h->dynindx = -1; 6848 _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, 6849 h->dynstr_index); 6850 } 6851 } 6852 } 6853 6854 /* Initialize an ELF linker hash table. */ 6855 6856 bfd_boolean 6857 _bfd_elf_link_hash_table_init 6858 (struct elf_link_hash_table *table, 6859 bfd *abfd, 6860 struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *, 6861 struct bfd_hash_table *, 6862 const char *), 6863 unsigned int entsize, 6864 enum elf_target_id target_id) 6865 { 6866 bfd_boolean ret; 6867 int can_refcount = get_elf_backend_data (abfd)->can_refcount; 6868 6869 memset (table, 0, sizeof * table); 6870 table->init_got_refcount.refcount = can_refcount - 1; 6871 table->init_plt_refcount.refcount = can_refcount - 1; 6872 table->init_got_offset.offset = -(bfd_vma) 1; 6873 table->init_plt_offset.offset = -(bfd_vma) 1; 6874 /* The first dynamic symbol is a dummy. */ 6875 table->dynsymcount = 1; 6876 6877 ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize); 6878 6879 table->root.type = bfd_link_elf_hash_table; 6880 table->hash_table_id = target_id; 6881 6882 return ret; 6883 } 6884 6885 /* Create an ELF linker hash table. */ 6886 6887 struct bfd_link_hash_table * 6888 _bfd_elf_link_hash_table_create (bfd *abfd) 6889 { 6890 struct elf_link_hash_table *ret; 6891 bfd_size_type amt = sizeof (struct elf_link_hash_table); 6892 6893 ret = (struct elf_link_hash_table *) bfd_malloc (amt); 6894 if (ret == NULL) 6895 return NULL; 6896 6897 if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc, 6898 sizeof (struct elf_link_hash_entry), 6899 GENERIC_ELF_DATA)) 6900 { 6901 free (ret); 6902 return NULL; 6903 } 6904 6905 return &ret->root; 6906 } 6907 6908 /* This is a hook for the ELF emulation code in the generic linker to 6909 tell the backend linker what file name to use for the DT_NEEDED 6910 entry for a dynamic object. */ 6911 6912 void 6913 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name) 6914 { 6915 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour 6916 && bfd_get_format (abfd) == bfd_object) 6917 elf_dt_name (abfd) = name; 6918 } 6919 6920 int 6921 bfd_elf_get_dyn_lib_class (bfd *abfd) 6922 { 6923 int lib_class; 6924 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour 6925 && bfd_get_format (abfd) == bfd_object) 6926 lib_class = elf_dyn_lib_class (abfd); 6927 else 6928 lib_class = 0; 6929 return lib_class; 6930 } 6931 6932 void 6933 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class) 6934 { 6935 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour 6936 && bfd_get_format (abfd) == bfd_object) 6937 elf_dyn_lib_class (abfd) = lib_class; 6938 } 6939 6940 /* Get the list of DT_NEEDED entries for a link. This is a hook for 6941 the linker ELF emulation code. */ 6942 6943 struct bfd_link_needed_list * 6944 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED, 6945 struct bfd_link_info *info) 6946 { 6947 if (! is_elf_hash_table (info->hash)) 6948 return NULL; 6949 return elf_hash_table (info)->needed; 6950 } 6951 6952 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link. This is a 6953 hook for the linker ELF emulation code. */ 6954 6955 struct bfd_link_needed_list * 6956 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED, 6957 struct bfd_link_info *info) 6958 { 6959 if (! is_elf_hash_table (info->hash)) 6960 return NULL; 6961 return elf_hash_table (info)->runpath; 6962 } 6963 6964 /* Get the name actually used for a dynamic object for a link. This 6965 is the SONAME entry if there is one. Otherwise, it is the string 6966 passed to bfd_elf_set_dt_needed_name, or it is the filename. */ 6967 6968 const char * 6969 bfd_elf_get_dt_soname (bfd *abfd) 6970 { 6971 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour 6972 && bfd_get_format (abfd) == bfd_object) 6973 return elf_dt_name (abfd); 6974 return NULL; 6975 } 6976 6977 /* Get the list of DT_NEEDED entries from a BFD. This is a hook for 6978 the ELF linker emulation code. */ 6979 6980 bfd_boolean 6981 bfd_elf_get_bfd_needed_list (bfd *abfd, 6982 struct bfd_link_needed_list **pneeded) 6983 { 6984 asection *s; 6985 bfd_byte *dynbuf = NULL; 6986 unsigned int elfsec; 6987 unsigned long shlink; 6988 bfd_byte *extdyn, *extdynend; 6989 size_t extdynsize; 6990 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *); 6991 6992 *pneeded = NULL; 6993 6994 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour 6995 || bfd_get_format (abfd) != bfd_object) 6996 return TRUE; 6997 6998 s = bfd_get_section_by_name (abfd, ".dynamic"); 6999 if (s == NULL || s->size == 0) 7000 return TRUE; 7001 7002 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) 7003 goto error_return; 7004 7005 elfsec = _bfd_elf_section_from_bfd_section (abfd, s); 7006 if (elfsec == SHN_BAD) 7007 goto error_return; 7008 7009 shlink = elf_elfsections (abfd)[elfsec]->sh_link; 7010 7011 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn; 7012 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in; 7013 7014 extdyn = dynbuf; 7015 extdynend = extdyn + s->size; 7016 for (; extdyn < extdynend; extdyn += extdynsize) 7017 { 7018 Elf_Internal_Dyn dyn; 7019 7020 (*swap_dyn_in) (abfd, extdyn, &dyn); 7021 7022 if (dyn.d_tag == DT_NULL) 7023 break; 7024 7025 if (dyn.d_tag == DT_NEEDED) 7026 { 7027 const char *string; 7028 struct bfd_link_needed_list *l; 7029 unsigned int tagv = dyn.d_un.d_val; 7030 bfd_size_type amt; 7031 7032 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv); 7033 if (string == NULL) 7034 goto error_return; 7035 7036 amt = sizeof *l; 7037 l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); 7038 if (l == NULL) 7039 goto error_return; 7040 7041 l->by = abfd; 7042 l->name = string; 7043 l->next = *pneeded; 7044 *pneeded = l; 7045 } 7046 } 7047 7048 free (dynbuf); 7049 7050 return TRUE; 7051 7052 error_return: 7053 if (dynbuf != NULL) 7054 free (dynbuf); 7055 return FALSE; 7056 } 7057 7058 struct elf_symbuf_symbol 7059 { 7060 unsigned long st_name; /* Symbol name, index in string tbl */ 7061 unsigned char st_info; /* Type and binding attributes */ 7062 unsigned char st_other; /* Visibilty, and target specific */ 7063 }; 7064 7065 struct elf_symbuf_head 7066 { 7067 struct elf_symbuf_symbol *ssym; 7068 bfd_size_type count; 7069 unsigned int st_shndx; 7070 }; 7071 7072 struct elf_symbol 7073 { 7074 union 7075 { 7076 Elf_Internal_Sym *isym; 7077 struct elf_symbuf_symbol *ssym; 7078 } u; 7079 const char *name; 7080 }; 7081 7082 /* Sort references to symbols by ascending section number. */ 7083 7084 static int 7085 elf_sort_elf_symbol (const void *arg1, const void *arg2) 7086 { 7087 const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1; 7088 const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2; 7089 7090 return s1->st_shndx - s2->st_shndx; 7091 } 7092 7093 static int 7094 elf_sym_name_compare (const void *arg1, const void *arg2) 7095 { 7096 const struct elf_symbol *s1 = (const struct elf_symbol *) arg1; 7097 const struct elf_symbol *s2 = (const struct elf_symbol *) arg2; 7098 return strcmp (s1->name, s2->name); 7099 } 7100 7101 static struct elf_symbuf_head * 7102 elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf) 7103 { 7104 Elf_Internal_Sym **ind, **indbufend, **indbuf; 7105 struct elf_symbuf_symbol *ssym; 7106 struct elf_symbuf_head *ssymbuf, *ssymhead; 7107 bfd_size_type i, shndx_count, total_size; 7108 7109 indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf)); 7110 if (indbuf == NULL) 7111 return NULL; 7112 7113 for (ind = indbuf, i = 0; i < symcount; i++) 7114 if (isymbuf[i].st_shndx != SHN_UNDEF) 7115 *ind++ = &isymbuf[i]; 7116 indbufend = ind; 7117 7118 qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *), 7119 elf_sort_elf_symbol); 7120 7121 shndx_count = 0; 7122 if (indbufend > indbuf) 7123 for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++) 7124 if (ind[0]->st_shndx != ind[1]->st_shndx) 7125 shndx_count++; 7126 7127 total_size = ((shndx_count + 1) * sizeof (*ssymbuf) 7128 + (indbufend - indbuf) * sizeof (*ssym)); 7129 ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size); 7130 if (ssymbuf == NULL) 7131 { 7132 free (indbuf); 7133 return NULL; 7134 } 7135 7136 ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1); 7137 ssymbuf->ssym = NULL; 7138 ssymbuf->count = shndx_count; 7139 ssymbuf->st_shndx = 0; 7140 for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++) 7141 { 7142 if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx) 7143 { 7144 ssymhead++; 7145 ssymhead->ssym = ssym; 7146 ssymhead->count = 0; 7147 ssymhead->st_shndx = (*ind)->st_shndx; 7148 } 7149 ssym->st_name = (*ind)->st_name; 7150 ssym->st_info = (*ind)->st_info; 7151 ssym->st_other = (*ind)->st_other; 7152 ssymhead->count++; 7153 } 7154 BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count 7155 && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf) 7156 == total_size)); 7157 7158 free (indbuf); 7159 return ssymbuf; 7160 } 7161 7162 /* Check if 2 sections define the same set of local and global 7163 symbols. */ 7164 7165 static bfd_boolean 7166 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, 7167 struct bfd_link_info *info) 7168 { 7169 bfd *bfd1, *bfd2; 7170 const struct elf_backend_data *bed1, *bed2; 7171 Elf_Internal_Shdr *hdr1, *hdr2; 7172 bfd_size_type symcount1, symcount2; 7173 Elf_Internal_Sym *isymbuf1, *isymbuf2; 7174 struct elf_symbuf_head *ssymbuf1, *ssymbuf2; 7175 Elf_Internal_Sym *isym, *isymend; 7176 struct elf_symbol *symtable1 = NULL, *symtable2 = NULL; 7177 bfd_size_type count1, count2, i; 7178 unsigned int shndx1, shndx2; 7179 bfd_boolean result; 7180 7181 bfd1 = sec1->owner; 7182 bfd2 = sec2->owner; 7183 7184 /* Both sections have to be in ELF. */ 7185 if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour 7186 || bfd_get_flavour (bfd2) != bfd_target_elf_flavour) 7187 return FALSE; 7188 7189 if (elf_section_type (sec1) != elf_section_type (sec2)) 7190 return FALSE; 7191 7192 shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1); 7193 shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2); 7194 if (shndx1 == SHN_BAD || shndx2 == SHN_BAD) 7195 return FALSE; 7196 7197 bed1 = get_elf_backend_data (bfd1); 7198 bed2 = get_elf_backend_data (bfd2); 7199 hdr1 = &elf_tdata (bfd1)->symtab_hdr; 7200 symcount1 = hdr1->sh_size / bed1->s->sizeof_sym; 7201 hdr2 = &elf_tdata (bfd2)->symtab_hdr; 7202 symcount2 = hdr2->sh_size / bed2->s->sizeof_sym; 7203 7204 if (symcount1 == 0 || symcount2 == 0) 7205 return FALSE; 7206 7207 result = FALSE; 7208 isymbuf1 = NULL; 7209 isymbuf2 = NULL; 7210 ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf; 7211 ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf; 7212 7213 if (ssymbuf1 == NULL) 7214 { 7215 isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0, 7216 NULL, NULL, NULL); 7217 if (isymbuf1 == NULL) 7218 goto done; 7219 7220 if (!info->reduce_memory_overheads) 7221 elf_tdata (bfd1)->symbuf = ssymbuf1 7222 = elf_create_symbuf (symcount1, isymbuf1); 7223 } 7224 7225 if (ssymbuf1 == NULL || ssymbuf2 == NULL) 7226 { 7227 isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0, 7228 NULL, NULL, NULL); 7229 if (isymbuf2 == NULL) 7230 goto done; 7231 7232 if (ssymbuf1 != NULL && !info->reduce_memory_overheads) 7233 elf_tdata (bfd2)->symbuf = ssymbuf2 7234 = elf_create_symbuf (symcount2, isymbuf2); 7235 } 7236 7237 if (ssymbuf1 != NULL && ssymbuf2 != NULL) 7238 { 7239 /* Optimized faster version. */ 7240 bfd_size_type lo, hi, mid; 7241 struct elf_symbol *symp; 7242 struct elf_symbuf_symbol *ssym, *ssymend; 7243 7244 lo = 0; 7245 hi = ssymbuf1->count; 7246 ssymbuf1++; 7247 count1 = 0; 7248 while (lo < hi) 7249 { 7250 mid = (lo + hi) / 2; 7251 if (shndx1 < ssymbuf1[mid].st_shndx) 7252 hi = mid; 7253 else if (shndx1 > ssymbuf1[mid].st_shndx) 7254 lo = mid + 1; 7255 else 7256 { 7257 count1 = ssymbuf1[mid].count; 7258 ssymbuf1 += mid; 7259 break; 7260 } 7261 } 7262 7263 lo = 0; 7264 hi = ssymbuf2->count; 7265 ssymbuf2++; 7266 count2 = 0; 7267 while (lo < hi) 7268 { 7269 mid = (lo + hi) / 2; 7270 if (shndx2 < ssymbuf2[mid].st_shndx) 7271 hi = mid; 7272 else if (shndx2 > ssymbuf2[mid].st_shndx) 7273 lo = mid + 1; 7274 else 7275 { 7276 count2 = ssymbuf2[mid].count; 7277 ssymbuf2 += mid; 7278 break; 7279 } 7280 } 7281 7282 if (count1 == 0 || count2 == 0 || count1 != count2) 7283 goto done; 7284 7285 symtable1 = (struct elf_symbol *) 7286 bfd_malloc (count1 * sizeof (struct elf_symbol)); 7287 symtable2 = (struct elf_symbol *) 7288 bfd_malloc (count2 * sizeof (struct elf_symbol)); 7289 if (symtable1 == NULL || symtable2 == NULL) 7290 goto done; 7291 7292 symp = symtable1; 7293 for (ssym = ssymbuf1->ssym, ssymend = ssym + count1; 7294 ssym < ssymend; ssym++, symp++) 7295 { 7296 symp->u.ssym = ssym; 7297 symp->name = bfd_elf_string_from_elf_section (bfd1, 7298 hdr1->sh_link, 7299 ssym->st_name); 7300 } 7301 7302 symp = symtable2; 7303 for (ssym = ssymbuf2->ssym, ssymend = ssym + count2; 7304 ssym < ssymend; ssym++, symp++) 7305 { 7306 symp->u.ssym = ssym; 7307 symp->name = bfd_elf_string_from_elf_section (bfd2, 7308 hdr2->sh_link, 7309 ssym->st_name); 7310 } 7311 7312 /* Sort symbol by name. */ 7313 qsort (symtable1, count1, sizeof (struct elf_symbol), 7314 elf_sym_name_compare); 7315 qsort (symtable2, count1, sizeof (struct elf_symbol), 7316 elf_sym_name_compare); 7317 7318 for (i = 0; i < count1; i++) 7319 /* Two symbols must have the same binding, type and name. */ 7320 if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info 7321 || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other 7322 || strcmp (symtable1 [i].name, symtable2 [i].name) != 0) 7323 goto done; 7324 7325 result = TRUE; 7326 goto done; 7327 } 7328 7329 symtable1 = (struct elf_symbol *) 7330 bfd_malloc (symcount1 * sizeof (struct elf_symbol)); 7331 symtable2 = (struct elf_symbol *) 7332 bfd_malloc (symcount2 * sizeof (struct elf_symbol)); 7333 if (symtable1 == NULL || symtable2 == NULL) 7334 goto done; 7335 7336 /* Count definitions in the section. */ 7337 count1 = 0; 7338 for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++) 7339 if (isym->st_shndx == shndx1) 7340 symtable1[count1++].u.isym = isym; 7341 7342 count2 = 0; 7343 for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++) 7344 if (isym->st_shndx == shndx2) 7345 symtable2[count2++].u.isym = isym; 7346 7347 if (count1 == 0 || count2 == 0 || count1 != count2) 7348 goto done; 7349 7350 for (i = 0; i < count1; i++) 7351 symtable1[i].name 7352 = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link, 7353 symtable1[i].u.isym->st_name); 7354 7355 for (i = 0; i < count2; i++) 7356 symtable2[i].name 7357 = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link, 7358 symtable2[i].u.isym->st_name); 7359 7360 /* Sort symbol by name. */ 7361 qsort (symtable1, count1, sizeof (struct elf_symbol), 7362 elf_sym_name_compare); 7363 qsort (symtable2, count1, sizeof (struct elf_symbol), 7364 elf_sym_name_compare); 7365 7366 for (i = 0; i < count1; i++) 7367 /* Two symbols must have the same binding, type and name. */ 7368 if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info 7369 || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other 7370 || strcmp (symtable1 [i].name, symtable2 [i].name) != 0) 7371 goto done; 7372 7373 result = TRUE; 7374 7375 done: 7376 if (symtable1) 7377 free (symtable1); 7378 if (symtable2) 7379 free (symtable2); 7380 if (isymbuf1) 7381 free (isymbuf1); 7382 if (isymbuf2) 7383 free (isymbuf2); 7384 7385 return result; 7386 } 7387 7388 /* Return TRUE if 2 section types are compatible. */ 7389 7390 bfd_boolean 7391 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec, 7392 bfd *bbfd, const asection *bsec) 7393 { 7394 if (asec == NULL 7395 || bsec == NULL 7396 || abfd->xvec->flavour != bfd_target_elf_flavour 7397 || bbfd->xvec->flavour != bfd_target_elf_flavour) 7398 return TRUE; 7399 7400 return elf_section_type (asec) == elf_section_type (bsec); 7401 } 7402 7403 /* Final phase of ELF linker. */ 7404 7405 /* A structure we use to avoid passing large numbers of arguments. */ 7406 7407 struct elf_final_link_info 7408 { 7409 /* General link information. */ 7410 struct bfd_link_info *info; 7411 /* Output BFD. */ 7412 bfd *output_bfd; 7413 /* Symbol string table. */ 7414 struct bfd_strtab_hash *symstrtab; 7415 /* .dynsym section. */ 7416 asection *dynsym_sec; 7417 /* .hash section. */ 7418 asection *hash_sec; 7419 /* symbol version section (.gnu.version). */ 7420 asection *symver_sec; 7421 /* Buffer large enough to hold contents of any section. */ 7422 bfd_byte *contents; 7423 /* Buffer large enough to hold external relocs of any section. */ 7424 void *external_relocs; 7425 /* Buffer large enough to hold internal relocs of any section. */ 7426 Elf_Internal_Rela *internal_relocs; 7427 /* Buffer large enough to hold external local symbols of any input 7428 BFD. */ 7429 bfd_byte *external_syms; 7430 /* And a buffer for symbol section indices. */ 7431 Elf_External_Sym_Shndx *locsym_shndx; 7432 /* Buffer large enough to hold internal local symbols of any input 7433 BFD. */ 7434 Elf_Internal_Sym *internal_syms; 7435 /* Array large enough to hold a symbol index for each local symbol 7436 of any input BFD. */ 7437 long *indices; 7438 /* Array large enough to hold a section pointer for each local 7439 symbol of any input BFD. */ 7440 asection **sections; 7441 /* Buffer to hold swapped out symbols. */ 7442 bfd_byte *symbuf; 7443 /* And one for symbol section indices. */ 7444 Elf_External_Sym_Shndx *symshndxbuf; 7445 /* Number of swapped out symbols in buffer. */ 7446 size_t symbuf_count; 7447 /* Number of symbols which fit in symbuf. */ 7448 size_t symbuf_size; 7449 /* And same for symshndxbuf. */ 7450 size_t shndxbuf_size; 7451 /* Number of STT_FILE syms seen. */ 7452 size_t filesym_count; 7453 }; 7454 7455 /* This struct is used to pass information to elf_link_output_extsym. */ 7456 7457 struct elf_outext_info 7458 { 7459 bfd_boolean failed; 7460 bfd_boolean localsyms; 7461 bfd_boolean need_second_pass; 7462 bfd_boolean second_pass; 7463 struct elf_final_link_info *flinfo; 7464 }; 7465 7466 7467 /* Support for evaluating a complex relocation. 7468 7469 Complex relocations are generalized, self-describing relocations. The 7470 implementation of them consists of two parts: complex symbols, and the 7471 relocations themselves. 7472 7473 The relocations are use a reserved elf-wide relocation type code (R_RELC 7474 external / BFD_RELOC_RELC internal) and an encoding of relocation field 7475 information (start bit, end bit, word width, etc) into the addend. This 7476 information is extracted from CGEN-generated operand tables within gas. 7477 7478 Complex symbols are mangled symbols (BSF_RELC external / STT_RELC 7479 internal) representing prefix-notation expressions, including but not 7480 limited to those sorts of expressions normally encoded as addends in the 7481 addend field. The symbol mangling format is: 7482 7483 <node> := <literal> 7484 | <unary-operator> ':' <node> 7485 | <binary-operator> ':' <node> ':' <node> 7486 ; 7487 7488 <literal> := 's' <digits=N> ':' <N character symbol name> 7489 | 'S' <digits=N> ':' <N character section name> 7490 | '#' <hexdigits> 7491 ; 7492 7493 <binary-operator> := as in C 7494 <unary-operator> := as in C, plus "0-" for unambiguous negation. */ 7495 7496 static void 7497 set_symbol_value (bfd *bfd_with_globals, 7498 Elf_Internal_Sym *isymbuf, 7499 size_t locsymcount, 7500 size_t symidx, 7501 bfd_vma val) 7502 { 7503 struct elf_link_hash_entry **sym_hashes; 7504 struct elf_link_hash_entry *h; 7505 size_t extsymoff = locsymcount; 7506 7507 if (symidx < locsymcount) 7508 { 7509 Elf_Internal_Sym *sym; 7510 7511 sym = isymbuf + symidx; 7512 if (ELF_ST_BIND (sym->st_info) == STB_LOCAL) 7513 { 7514 /* It is a local symbol: move it to the 7515 "absolute" section and give it a value. */ 7516 sym->st_shndx = SHN_ABS; 7517 sym->st_value = val; 7518 return; 7519 } 7520 BFD_ASSERT (elf_bad_symtab (bfd_with_globals)); 7521 extsymoff = 0; 7522 } 7523 7524 /* It is a global symbol: set its link type 7525 to "defined" and give it a value. */ 7526 7527 sym_hashes = elf_sym_hashes (bfd_with_globals); 7528 h = sym_hashes [symidx - extsymoff]; 7529 while (h->root.type == bfd_link_hash_indirect 7530 || h->root.type == bfd_link_hash_warning) 7531 h = (struct elf_link_hash_entry *) h->root.u.i.link; 7532 h->root.type = bfd_link_hash_defined; 7533 h->root.u.def.value = val; 7534 h->root.u.def.section = bfd_abs_section_ptr; 7535 } 7536 7537 static bfd_boolean 7538 resolve_symbol (const char *name, 7539 bfd *input_bfd, 7540 struct elf_final_link_info *flinfo, 7541 bfd_vma *result, 7542 Elf_Internal_Sym *isymbuf, 7543 size_t locsymcount) 7544 { 7545 Elf_Internal_Sym *sym; 7546 struct bfd_link_hash_entry *global_entry; 7547 const char *candidate = NULL; 7548 Elf_Internal_Shdr *symtab_hdr; 7549 size_t i; 7550 7551 symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; 7552 7553 for (i = 0; i < locsymcount; ++ i) 7554 { 7555 sym = isymbuf + i; 7556 7557 if (ELF_ST_BIND (sym->st_info) != STB_LOCAL) 7558 continue; 7559 7560 candidate = bfd_elf_string_from_elf_section (input_bfd, 7561 symtab_hdr->sh_link, 7562 sym->st_name); 7563 #ifdef DEBUG 7564 printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n", 7565 name, candidate, (unsigned long) sym->st_value); 7566 #endif 7567 if (candidate && strcmp (candidate, name) == 0) 7568 { 7569 asection *sec = flinfo->sections [i]; 7570 7571 *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0); 7572 *result += sec->output_offset + sec->output_section->vma; 7573 #ifdef DEBUG 7574 printf ("Found symbol with value %8.8lx\n", 7575 (unsigned long) *result); 7576 #endif 7577 return TRUE; 7578 } 7579 } 7580 7581 /* Hmm, haven't found it yet. perhaps it is a global. */ 7582 global_entry = bfd_link_hash_lookup (flinfo->info->hash, name, 7583 FALSE, FALSE, TRUE); 7584 if (!global_entry) 7585 return FALSE; 7586 7587 if (global_entry->type == bfd_link_hash_defined 7588 || global_entry->type == bfd_link_hash_defweak) 7589 { 7590 *result = (global_entry->u.def.value 7591 + global_entry->u.def.section->output_section->vma 7592 + global_entry->u.def.section->output_offset); 7593 #ifdef DEBUG 7594 printf ("Found GLOBAL symbol '%s' with value %8.8lx\n", 7595 global_entry->root.string, (unsigned long) *result); 7596 #endif 7597 return TRUE; 7598 } 7599 7600 return FALSE; 7601 } 7602 7603 static bfd_boolean 7604 resolve_section (const char *name, 7605 asection *sections, 7606 bfd_vma *result) 7607 { 7608 asection *curr; 7609 unsigned int len; 7610 7611 for (curr = sections; curr; curr = curr->next) 7612 if (strcmp (curr->name, name) == 0) 7613 { 7614 *result = curr->vma; 7615 return TRUE; 7616 } 7617 7618 /* Hmm. still haven't found it. try pseudo-section names. */ 7619 for (curr = sections; curr; curr = curr->next) 7620 { 7621 len = strlen (curr->name); 7622 if (len > strlen (name)) 7623 continue; 7624 7625 if (strncmp (curr->name, name, len) == 0) 7626 { 7627 if (strncmp (".end", name + len, 4) == 0) 7628 { 7629 *result = curr->vma + curr->size; 7630 return TRUE; 7631 } 7632 7633 /* Insert more pseudo-section names here, if you like. */ 7634 } 7635 } 7636 7637 return FALSE; 7638 } 7639 7640 static void 7641 undefined_reference (const char *reftype, const char *name) 7642 { 7643 _bfd_error_handler (_("undefined %s reference in complex symbol: %s"), 7644 reftype, name); 7645 } 7646 7647 static bfd_boolean 7648 eval_symbol (bfd_vma *result, 7649 const char **symp, 7650 bfd *input_bfd, 7651 struct elf_final_link_info *flinfo, 7652 bfd_vma dot, 7653 Elf_Internal_Sym *isymbuf, 7654 size_t locsymcount, 7655 int signed_p) 7656 { 7657 size_t len; 7658 size_t symlen; 7659 bfd_vma a; 7660 bfd_vma b; 7661 char symbuf[4096]; 7662 const char *sym = *symp; 7663 const char *symend; 7664 bfd_boolean symbol_is_section = FALSE; 7665 7666 len = strlen (sym); 7667 symend = sym + len; 7668 7669 if (len < 1 || len > sizeof (symbuf)) 7670 { 7671 bfd_set_error (bfd_error_invalid_operation); 7672 return FALSE; 7673 } 7674 7675 switch (* sym) 7676 { 7677 case '.': 7678 *result = dot; 7679 *symp = sym + 1; 7680 return TRUE; 7681 7682 case '#': 7683 ++sym; 7684 *result = strtoul (sym, (char **) symp, 16); 7685 return TRUE; 7686 7687 case 'S': 7688 symbol_is_section = TRUE; 7689 case 's': 7690 ++sym; 7691 symlen = strtol (sym, (char **) symp, 10); 7692 sym = *symp + 1; /* Skip the trailing ':'. */ 7693 7694 if (symend < sym || symlen + 1 > sizeof (symbuf)) 7695 { 7696 bfd_set_error (bfd_error_invalid_operation); 7697 return FALSE; 7698 } 7699 7700 memcpy (symbuf, sym, symlen); 7701 symbuf[symlen] = '\0'; 7702 *symp = sym + symlen; 7703 7704 /* Is it always possible, with complex symbols, that gas "mis-guessed" 7705 the symbol as a section, or vice-versa. so we're pretty liberal in our 7706 interpretation here; section means "try section first", not "must be a 7707 section", and likewise with symbol. */ 7708 7709 if (symbol_is_section) 7710 { 7711 if (!resolve_section (symbuf, flinfo->output_bfd->sections, result) 7712 && !resolve_symbol (symbuf, input_bfd, flinfo, result, 7713 isymbuf, locsymcount)) 7714 { 7715 undefined_reference ("section", symbuf); 7716 return FALSE; 7717 } 7718 } 7719 else 7720 { 7721 if (!resolve_symbol (symbuf, input_bfd, flinfo, result, 7722 isymbuf, locsymcount) 7723 && !resolve_section (symbuf, flinfo->output_bfd->sections, 7724 result)) 7725 { 7726 undefined_reference ("symbol", symbuf); 7727 return FALSE; 7728 } 7729 } 7730 7731 return TRUE; 7732 7733 /* All that remains are operators. */ 7734 7735 #define UNARY_OP(op) \ 7736 if (strncmp (sym, #op, strlen (#op)) == 0) \ 7737 { \ 7738 sym += strlen (#op); \ 7739 if (*sym == ':') \ 7740 ++sym; \ 7741 *symp = sym; \ 7742 if (!eval_symbol (&a, symp, input_bfd, flinfo, dot, \ 7743 isymbuf, locsymcount, signed_p)) \ 7744 return FALSE; \ 7745 if (signed_p) \ 7746 *result = op ((bfd_signed_vma) a); \ 7747 else \ 7748 *result = op a; \ 7749 return TRUE; \ 7750 } 7751 7752 #define BINARY_OP(op) \ 7753 if (strncmp (sym, #op, strlen (#op)) == 0) \ 7754 { \ 7755 sym += strlen (#op); \ 7756 if (*sym == ':') \ 7757 ++sym; \ 7758 *symp = sym; \ 7759 if (!eval_symbol (&a, symp, input_bfd, flinfo, dot, \ 7760 isymbuf, locsymcount, signed_p)) \ 7761 return FALSE; \ 7762 ++*symp; \ 7763 if (!eval_symbol (&b, symp, input_bfd, flinfo, dot, \ 7764 isymbuf, locsymcount, signed_p)) \ 7765 return FALSE; \ 7766 if (signed_p) \ 7767 *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \ 7768 else \ 7769 *result = a op b; \ 7770 return TRUE; \ 7771 } 7772 7773 default: 7774 UNARY_OP (0-); 7775 BINARY_OP (<<); 7776 BINARY_OP (>>); 7777 BINARY_OP (==); 7778 BINARY_OP (!=); 7779 BINARY_OP (<=); 7780 BINARY_OP (>=); 7781 BINARY_OP (&&); 7782 BINARY_OP (||); 7783 UNARY_OP (~); 7784 UNARY_OP (!); 7785 BINARY_OP (*); 7786 BINARY_OP (/); 7787 BINARY_OP (%); 7788 BINARY_OP (^); 7789 BINARY_OP (|); 7790 BINARY_OP (&); 7791 BINARY_OP (+); 7792 BINARY_OP (-); 7793 BINARY_OP (<); 7794 BINARY_OP (>); 7795 #undef UNARY_OP 7796 #undef BINARY_OP 7797 _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym); 7798 bfd_set_error (bfd_error_invalid_operation); 7799 return FALSE; 7800 } 7801 } 7802 7803 static void 7804 put_value (bfd_vma size, 7805 unsigned long chunksz, 7806 bfd *input_bfd, 7807 bfd_vma x, 7808 bfd_byte *location) 7809 { 7810 location += (size - chunksz); 7811 7812 for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8)) 7813 { 7814 switch (chunksz) 7815 { 7816 default: 7817 case 0: 7818 abort (); 7819 case 1: 7820 bfd_put_8 (input_bfd, x, location); 7821 break; 7822 case 2: 7823 bfd_put_16 (input_bfd, x, location); 7824 break; 7825 case 4: 7826 bfd_put_32 (input_bfd, x, location); 7827 break; 7828 case 8: 7829 #ifdef BFD64 7830 bfd_put_64 (input_bfd, x, location); 7831 #else 7832 abort (); 7833 #endif 7834 break; 7835 } 7836 } 7837 } 7838 7839 static bfd_vma 7840 get_value (bfd_vma size, 7841 unsigned long chunksz, 7842 bfd *input_bfd, 7843 bfd_byte *location) 7844 { 7845 bfd_vma x = 0; 7846 7847 for (; size; size -= chunksz, location += chunksz) 7848 { 7849 switch (chunksz) 7850 { 7851 default: 7852 case 0: 7853 abort (); 7854 case 1: 7855 x = (x << (8 * chunksz)) | bfd_get_8 (input_bfd, location); 7856 break; 7857 case 2: 7858 x = (x << (8 * chunksz)) | bfd_get_16 (input_bfd, location); 7859 break; 7860 case 4: 7861 x = (x << (8 * chunksz)) | bfd_get_32 (input_bfd, location); 7862 break; 7863 case 8: 7864 #ifdef BFD64 7865 x = (x << (8 * chunksz)) | bfd_get_64 (input_bfd, location); 7866 #else 7867 abort (); 7868 #endif 7869 break; 7870 } 7871 } 7872 return x; 7873 } 7874 7875 static void 7876 decode_complex_addend (unsigned long *start, /* in bits */ 7877 unsigned long *oplen, /* in bits */ 7878 unsigned long *len, /* in bits */ 7879 unsigned long *wordsz, /* in bytes */ 7880 unsigned long *chunksz, /* in bytes */ 7881 unsigned long *lsb0_p, 7882 unsigned long *signed_p, 7883 unsigned long *trunc_p, 7884 unsigned long encoded) 7885 { 7886 * start = encoded & 0x3F; 7887 * len = (encoded >> 6) & 0x3F; 7888 * oplen = (encoded >> 12) & 0x3F; 7889 * wordsz = (encoded >> 18) & 0xF; 7890 * chunksz = (encoded >> 22) & 0xF; 7891 * lsb0_p = (encoded >> 27) & 1; 7892 * signed_p = (encoded >> 28) & 1; 7893 * trunc_p = (encoded >> 29) & 1; 7894 } 7895 7896 bfd_reloc_status_type 7897 bfd_elf_perform_complex_relocation (bfd *input_bfd, 7898 asection *input_section ATTRIBUTE_UNUSED, 7899 bfd_byte *contents, 7900 Elf_Internal_Rela *rel, 7901 bfd_vma relocation) 7902 { 7903 bfd_vma shift, x, mask; 7904 unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p; 7905 bfd_reloc_status_type r; 7906 7907 /* Perform this reloc, since it is complex. 7908 (this is not to say that it necessarily refers to a complex 7909 symbol; merely that it is a self-describing CGEN based reloc. 7910 i.e. the addend has the complete reloc information (bit start, end, 7911 word size, etc) encoded within it.). */ 7912 7913 decode_complex_addend (&start, &oplen, &len, &wordsz, 7914 &chunksz, &lsb0_p, &signed_p, 7915 &trunc_p, rel->r_addend); 7916 7917 mask = (((1L << (len - 1)) - 1) << 1) | 1; 7918 7919 if (lsb0_p) 7920 shift = (start + 1) - len; 7921 else 7922 shift = (8 * wordsz) - (start + len); 7923 7924 /* FIXME: octets_per_byte. */ 7925 x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset); 7926 7927 #ifdef DEBUG 7928 printf ("Doing complex reloc: " 7929 "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, " 7930 "chunksz %ld, start %ld, len %ld, oplen %ld\n" 7931 " dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n", 7932 lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len, 7933 oplen, (unsigned long) x, (unsigned long) mask, 7934 (unsigned long) relocation); 7935 #endif 7936 7937 r = bfd_reloc_ok; 7938 if (! trunc_p) 7939 /* Now do an overflow check. */ 7940 r = bfd_check_overflow ((signed_p 7941 ? complain_overflow_signed 7942 : complain_overflow_unsigned), 7943 len, 0, (8 * wordsz), 7944 relocation); 7945 7946 /* Do the deed. */ 7947 x = (x & ~(mask << shift)) | ((relocation & mask) << shift); 7948 7949 #ifdef DEBUG 7950 printf (" relocation: %8.8lx\n" 7951 " shifted mask: %8.8lx\n" 7952 " shifted/masked reloc: %8.8lx\n" 7953 " result: %8.8lx\n", 7954 (unsigned long) relocation, (unsigned long) (mask << shift), 7955 (unsigned long) ((relocation & mask) << shift), (unsigned long) x); 7956 #endif 7957 /* FIXME: octets_per_byte. */ 7958 put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset); 7959 return r; 7960 } 7961 7962 /* When performing a relocatable link, the input relocations are 7963 preserved. But, if they reference global symbols, the indices 7964 referenced must be updated. Update all the relocations found in 7965 RELDATA. */ 7966 7967 static void 7968 elf_link_adjust_relocs (bfd *abfd, 7969 struct bfd_elf_section_reloc_data *reldata) 7970 { 7971 unsigned int i; 7972 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 7973 bfd_byte *erela; 7974 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); 7975 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 7976 bfd_vma r_type_mask; 7977 int r_sym_shift; 7978 unsigned int count = reldata->count; 7979 struct elf_link_hash_entry **rel_hash = reldata->hashes; 7980 7981 if (reldata->hdr->sh_entsize == bed->s->sizeof_rel) 7982 { 7983 swap_in = bed->s->swap_reloc_in; 7984 swap_out = bed->s->swap_reloc_out; 7985 } 7986 else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela) 7987 { 7988 swap_in = bed->s->swap_reloca_in; 7989 swap_out = bed->s->swap_reloca_out; 7990 } 7991 else 7992 abort (); 7993 7994 if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL) 7995 abort (); 7996 7997 if (bed->s->arch_size == 32) 7998 { 7999 r_type_mask = 0xff; 8000 r_sym_shift = 8; 8001 } 8002 else 8003 { 8004 r_type_mask = 0xffffffff; 8005 r_sym_shift = 32; 8006 } 8007 8008 erela = reldata->hdr->contents; 8009 for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize) 8010 { 8011 Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL]; 8012 unsigned int j; 8013 8014 if (*rel_hash == NULL) 8015 continue; 8016 8017 BFD_ASSERT ((*rel_hash)->indx >= 0); 8018 8019 (*swap_in) (abfd, erela, irela); 8020 for (j = 0; j < bed->s->int_rels_per_ext_rel; j++) 8021 irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift 8022 | (irela[j].r_info & r_type_mask)); 8023 (*swap_out) (abfd, irela, erela); 8024 } 8025 } 8026 8027 struct elf_link_sort_rela 8028 { 8029 union { 8030 bfd_vma offset; 8031 bfd_vma sym_mask; 8032 } u; 8033 enum elf_reloc_type_class type; 8034 /* We use this as an array of size int_rels_per_ext_rel. */ 8035 Elf_Internal_Rela rela[1]; 8036 }; 8037 8038 static int 8039 elf_link_sort_cmp1 (const void *A, const void *B) 8040 { 8041 const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A; 8042 const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B; 8043 int relativea, relativeb; 8044 8045 relativea = a->type == reloc_class_relative; 8046 relativeb = b->type == reloc_class_relative; 8047 8048 if (relativea < relativeb) 8049 return 1; 8050 if (relativea > relativeb) 8051 return -1; 8052 if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask)) 8053 return -1; 8054 if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask)) 8055 return 1; 8056 if (a->rela->r_offset < b->rela->r_offset) 8057 return -1; 8058 if (a->rela->r_offset > b->rela->r_offset) 8059 return 1; 8060 return 0; 8061 } 8062 8063 static int 8064 elf_link_sort_cmp2 (const void *A, const void *B) 8065 { 8066 const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A; 8067 const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B; 8068 int copya, copyb; 8069 8070 if (a->u.offset < b->u.offset) 8071 return -1; 8072 if (a->u.offset > b->u.offset) 8073 return 1; 8074 copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt); 8075 copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt); 8076 if (copya < copyb) 8077 return -1; 8078 if (copya > copyb) 8079 return 1; 8080 if (a->rela->r_offset < b->rela->r_offset) 8081 return -1; 8082 if (a->rela->r_offset > b->rela->r_offset) 8083 return 1; 8084 return 0; 8085 } 8086 8087 static size_t 8088 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) 8089 { 8090 asection *dynamic_relocs; 8091 asection *rela_dyn; 8092 asection *rel_dyn; 8093 bfd_size_type count, size; 8094 size_t i, ret, sort_elt, ext_size; 8095 bfd_byte *sort, *s_non_relative, *p; 8096 struct elf_link_sort_rela *sq; 8097 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 8098 int i2e = bed->s->int_rels_per_ext_rel; 8099 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *); 8100 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 8101 struct bfd_link_order *lo; 8102 bfd_vma r_sym_mask; 8103 bfd_boolean use_rela; 8104 8105 /* Find a dynamic reloc section. */ 8106 rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn"); 8107 rel_dyn = bfd_get_section_by_name (abfd, ".rel.dyn"); 8108 if (rela_dyn != NULL && rela_dyn->size > 0 8109 && rel_dyn != NULL && rel_dyn->size > 0) 8110 { 8111 bfd_boolean use_rela_initialised = FALSE; 8112 8113 /* This is just here to stop gcc from complaining. 8114 It's initialization checking code is not perfect. */ 8115 use_rela = TRUE; 8116 8117 /* Both sections are present. Examine the sizes 8118 of the indirect sections to help us choose. */ 8119 for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next) 8120 if (lo->type == bfd_indirect_link_order) 8121 { 8122 asection *o = lo->u.indirect.section; 8123 8124 if ((o->size % bed->s->sizeof_rela) == 0) 8125 { 8126 if ((o->size % bed->s->sizeof_rel) == 0) 8127 /* Section size is divisible by both rel and rela sizes. 8128 It is of no help to us. */ 8129 ; 8130 else 8131 { 8132 /* Section size is only divisible by rela. */ 8133 if (use_rela_initialised && (use_rela == FALSE)) 8134 { 8135 _bfd_error_handler 8136 (_("%B: Unable to sort relocs - they are in more than one size"), abfd); 8137 bfd_set_error (bfd_error_invalid_operation); 8138 return 0; 8139 } 8140 else 8141 { 8142 use_rela = TRUE; 8143 use_rela_initialised = TRUE; 8144 } 8145 } 8146 } 8147 else if ((o->size % bed->s->sizeof_rel) == 0) 8148 { 8149 /* Section size is only divisible by rel. */ 8150 if (use_rela_initialised && (use_rela == TRUE)) 8151 { 8152 _bfd_error_handler 8153 (_("%B: Unable to sort relocs - they are in more than one size"), abfd); 8154 bfd_set_error (bfd_error_invalid_operation); 8155 return 0; 8156 } 8157 else 8158 { 8159 use_rela = FALSE; 8160 use_rela_initialised = TRUE; 8161 } 8162 } 8163 else 8164 { 8165 /* The section size is not divisible by either - something is wrong. */ 8166 _bfd_error_handler 8167 (_("%B: Unable to sort relocs - they are of an unknown size"), abfd); 8168 bfd_set_error (bfd_error_invalid_operation); 8169 return 0; 8170 } 8171 } 8172 8173 for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next) 8174 if (lo->type == bfd_indirect_link_order) 8175 { 8176 asection *o = lo->u.indirect.section; 8177 8178 if ((o->size % bed->s->sizeof_rela) == 0) 8179 { 8180 if ((o->size % bed->s->sizeof_rel) == 0) 8181 /* Section size is divisible by both rel and rela sizes. 8182 It is of no help to us. */ 8183 ; 8184 else 8185 { 8186 /* Section size is only divisible by rela. */ 8187 if (use_rela_initialised && (use_rela == FALSE)) 8188 { 8189 _bfd_error_handler 8190 (_("%B: Unable to sort relocs - they are in more than one size"), abfd); 8191 bfd_set_error (bfd_error_invalid_operation); 8192 return 0; 8193 } 8194 else 8195 { 8196 use_rela = TRUE; 8197 use_rela_initialised = TRUE; 8198 } 8199 } 8200 } 8201 else if ((o->size % bed->s->sizeof_rel) == 0) 8202 { 8203 /* Section size is only divisible by rel. */ 8204 if (use_rela_initialised && (use_rela == TRUE)) 8205 { 8206 _bfd_error_handler 8207 (_("%B: Unable to sort relocs - they are in more than one size"), abfd); 8208 bfd_set_error (bfd_error_invalid_operation); 8209 return 0; 8210 } 8211 else 8212 { 8213 use_rela = FALSE; 8214 use_rela_initialised = TRUE; 8215 } 8216 } 8217 else 8218 { 8219 /* The section size is not divisible by either - something is wrong. */ 8220 _bfd_error_handler 8221 (_("%B: Unable to sort relocs - they are of an unknown size"), abfd); 8222 bfd_set_error (bfd_error_invalid_operation); 8223 return 0; 8224 } 8225 } 8226 8227 if (! use_rela_initialised) 8228 /* Make a guess. */ 8229 use_rela = TRUE; 8230 } 8231 else if (rela_dyn != NULL && rela_dyn->size > 0) 8232 use_rela = TRUE; 8233 else if (rel_dyn != NULL && rel_dyn->size > 0) 8234 use_rela = FALSE; 8235 else 8236 return 0; 8237 8238 if (use_rela) 8239 { 8240 dynamic_relocs = rela_dyn; 8241 ext_size = bed->s->sizeof_rela; 8242 swap_in = bed->s->swap_reloca_in; 8243 swap_out = bed->s->swap_reloca_out; 8244 } 8245 else 8246 { 8247 dynamic_relocs = rel_dyn; 8248 ext_size = bed->s->sizeof_rel; 8249 swap_in = bed->s->swap_reloc_in; 8250 swap_out = bed->s->swap_reloc_out; 8251 } 8252 8253 size = 0; 8254 for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next) 8255 if (lo->type == bfd_indirect_link_order) 8256 size += lo->u.indirect.section->size; 8257 8258 if (size != dynamic_relocs->size) 8259 return 0; 8260 8261 sort_elt = (sizeof (struct elf_link_sort_rela) 8262 + (i2e - 1) * sizeof (Elf_Internal_Rela)); 8263 8264 count = dynamic_relocs->size / ext_size; 8265 if (count == 0) 8266 return 0; 8267 sort = (bfd_byte *) bfd_zmalloc (sort_elt * count); 8268 8269 if (sort == NULL) 8270 { 8271 (*info->callbacks->warning) 8272 (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0); 8273 return 0; 8274 } 8275 8276 if (bed->s->arch_size == 32) 8277 r_sym_mask = ~(bfd_vma) 0xff; 8278 else 8279 r_sym_mask = ~(bfd_vma) 0xffffffff; 8280 8281 for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next) 8282 if (lo->type == bfd_indirect_link_order) 8283 { 8284 bfd_byte *erel, *erelend; 8285 asection *o = lo->u.indirect.section; 8286 8287 if (o->contents == NULL && o->size != 0) 8288 { 8289 /* This is a reloc section that is being handled as a normal 8290 section. See bfd_section_from_shdr. We can't combine 8291 relocs in this case. */ 8292 free (sort); 8293 return 0; 8294 } 8295 erel = o->contents; 8296 erelend = o->contents + o->size; 8297 /* FIXME: octets_per_byte. */ 8298 p = sort + o->output_offset / ext_size * sort_elt; 8299 8300 while (erel < erelend) 8301 { 8302 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; 8303 8304 (*swap_in) (abfd, erel, s->rela); 8305 s->type = (*bed->elf_backend_reloc_type_class) (s->rela); 8306 s->u.sym_mask = r_sym_mask; 8307 p += sort_elt; 8308 erel += ext_size; 8309 } 8310 } 8311 8312 qsort (sort, count, sort_elt, elf_link_sort_cmp1); 8313 8314 for (i = 0, p = sort; i < count; i++, p += sort_elt) 8315 { 8316 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; 8317 if (s->type != reloc_class_relative) 8318 break; 8319 } 8320 ret = i; 8321 s_non_relative = p; 8322 8323 sq = (struct elf_link_sort_rela *) s_non_relative; 8324 for (; i < count; i++, p += sort_elt) 8325 { 8326 struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p; 8327 if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0) 8328 sq = sp; 8329 sp->u.offset = sq->rela->r_offset; 8330 } 8331 8332 qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2); 8333 8334 for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next) 8335 if (lo->type == bfd_indirect_link_order) 8336 { 8337 bfd_byte *erel, *erelend; 8338 asection *o = lo->u.indirect.section; 8339 8340 erel = o->contents; 8341 erelend = o->contents + o->size; 8342 /* FIXME: octets_per_byte. */ 8343 p = sort + o->output_offset / ext_size * sort_elt; 8344 while (erel < erelend) 8345 { 8346 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p; 8347 (*swap_out) (abfd, s->rela, erel); 8348 p += sort_elt; 8349 erel += ext_size; 8350 } 8351 } 8352 8353 free (sort); 8354 *psec = dynamic_relocs; 8355 return ret; 8356 } 8357 8358 /* Flush the output symbols to the file. */ 8359 8360 static bfd_boolean 8361 elf_link_flush_output_syms (struct elf_final_link_info *flinfo, 8362 const struct elf_backend_data *bed) 8363 { 8364 if (flinfo->symbuf_count > 0) 8365 { 8366 Elf_Internal_Shdr *hdr; 8367 file_ptr pos; 8368 bfd_size_type amt; 8369 8370 hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr; 8371 pos = hdr->sh_offset + hdr->sh_size; 8372 amt = flinfo->symbuf_count * bed->s->sizeof_sym; 8373 if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) != 0 8374 || bfd_bwrite (flinfo->symbuf, amt, flinfo->output_bfd) != amt) 8375 return FALSE; 8376 8377 hdr->sh_size += amt; 8378 flinfo->symbuf_count = 0; 8379 } 8380 8381 return TRUE; 8382 } 8383 8384 /* Add a symbol to the output symbol table. */ 8385 8386 static int 8387 elf_link_output_sym (struct elf_final_link_info *flinfo, 8388 const char *name, 8389 Elf_Internal_Sym *elfsym, 8390 asection *input_sec, 8391 struct elf_link_hash_entry *h) 8392 { 8393 bfd_byte *dest; 8394 Elf_External_Sym_Shndx *destshndx; 8395 int (*output_symbol_hook) 8396 (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, 8397 struct elf_link_hash_entry *); 8398 const struct elf_backend_data *bed; 8399 8400 bed = get_elf_backend_data (flinfo->output_bfd); 8401 output_symbol_hook = bed->elf_backend_link_output_symbol_hook; 8402 if (output_symbol_hook != NULL) 8403 { 8404 int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h); 8405 if (ret != 1) 8406 return ret; 8407 } 8408 8409 if (name == NULL || *name == '\0') 8410 elfsym->st_name = 0; 8411 else if (input_sec->flags & SEC_EXCLUDE) 8412 elfsym->st_name = 0; 8413 else 8414 { 8415 elfsym->st_name = (unsigned long) _bfd_stringtab_add (flinfo->symstrtab, 8416 name, TRUE, FALSE); 8417 if (elfsym->st_name == (unsigned long) -1) 8418 return 0; 8419 } 8420 8421 if (flinfo->symbuf_count >= flinfo->symbuf_size) 8422 { 8423 if (! elf_link_flush_output_syms (flinfo, bed)) 8424 return 0; 8425 } 8426 8427 dest = flinfo->symbuf + flinfo->symbuf_count * bed->s->sizeof_sym; 8428 destshndx = flinfo->symshndxbuf; 8429 if (destshndx != NULL) 8430 { 8431 if (bfd_get_symcount (flinfo->output_bfd) >= flinfo->shndxbuf_size) 8432 { 8433 bfd_size_type amt; 8434 8435 amt = flinfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx); 8436 destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx, 8437 amt * 2); 8438 if (destshndx == NULL) 8439 return 0; 8440 flinfo->symshndxbuf = destshndx; 8441 memset ((char *) destshndx + amt, 0, amt); 8442 flinfo->shndxbuf_size *= 2; 8443 } 8444 destshndx += bfd_get_symcount (flinfo->output_bfd); 8445 } 8446 8447 bed->s->swap_symbol_out (flinfo->output_bfd, elfsym, dest, destshndx); 8448 flinfo->symbuf_count += 1; 8449 bfd_get_symcount (flinfo->output_bfd) += 1; 8450 8451 return 1; 8452 } 8453 8454 /* Return TRUE if the dynamic symbol SYM in ABFD is supported. */ 8455 8456 static bfd_boolean 8457 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym) 8458 { 8459 if (sym->st_shndx >= (SHN_LORESERVE & 0xffff) 8460 && sym->st_shndx < SHN_LORESERVE) 8461 { 8462 /* The gABI doesn't support dynamic symbols in output sections 8463 beyond 64k. */ 8464 (*_bfd_error_handler) 8465 (_("%B: Too many sections: %d (>= %d)"), 8466 abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff); 8467 bfd_set_error (bfd_error_nonrepresentable_section); 8468 return FALSE; 8469 } 8470 return TRUE; 8471 } 8472 8473 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in 8474 allowing an unsatisfied unversioned symbol in the DSO to match a 8475 versioned symbol that would normally require an explicit version. 8476 We also handle the case that a DSO references a hidden symbol 8477 which may be satisfied by a versioned symbol in another DSO. */ 8478 8479 static bfd_boolean 8480 elf_link_check_versioned_symbol (struct bfd_link_info *info, 8481 const struct elf_backend_data *bed, 8482 struct elf_link_hash_entry *h) 8483 { 8484 bfd *abfd; 8485 struct elf_link_loaded_list *loaded; 8486 8487 if (!is_elf_hash_table (info->hash)) 8488 return FALSE; 8489 8490 /* Check indirect symbol. */ 8491 while (h->root.type == bfd_link_hash_indirect) 8492 h = (struct elf_link_hash_entry *) h->root.u.i.link; 8493 8494 switch (h->root.type) 8495 { 8496 default: 8497 abfd = NULL; 8498 break; 8499 8500 case bfd_link_hash_undefined: 8501 case bfd_link_hash_undefweak: 8502 abfd = h->root.u.undef.abfd; 8503 if ((abfd->flags & DYNAMIC) == 0 8504 || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0) 8505 return FALSE; 8506 break; 8507 8508 case bfd_link_hash_defined: 8509 case bfd_link_hash_defweak: 8510 abfd = h->root.u.def.section->owner; 8511 break; 8512 8513 case bfd_link_hash_common: 8514 abfd = h->root.u.c.p->section->owner; 8515 break; 8516 } 8517 BFD_ASSERT (abfd != NULL); 8518 8519 for (loaded = elf_hash_table (info)->loaded; 8520 loaded != NULL; 8521 loaded = loaded->next) 8522 { 8523 bfd *input; 8524 Elf_Internal_Shdr *hdr; 8525 bfd_size_type symcount; 8526 bfd_size_type extsymcount; 8527 bfd_size_type extsymoff; 8528 Elf_Internal_Shdr *versymhdr; 8529 Elf_Internal_Sym *isym; 8530 Elf_Internal_Sym *isymend; 8531 Elf_Internal_Sym *isymbuf; 8532 Elf_External_Versym *ever; 8533 Elf_External_Versym *extversym; 8534 8535 input = loaded->abfd; 8536 8537 /* We check each DSO for a possible hidden versioned definition. */ 8538 if (input == abfd 8539 || (input->flags & DYNAMIC) == 0 8540 || elf_dynversym (input) == 0) 8541 continue; 8542 8543 hdr = &elf_tdata (input)->dynsymtab_hdr; 8544 8545 symcount = hdr->sh_size / bed->s->sizeof_sym; 8546 if (elf_bad_symtab (input)) 8547 { 8548 extsymcount = symcount; 8549 extsymoff = 0; 8550 } 8551 else 8552 { 8553 extsymcount = symcount - hdr->sh_info; 8554 extsymoff = hdr->sh_info; 8555 } 8556 8557 if (extsymcount == 0) 8558 continue; 8559 8560 isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff, 8561 NULL, NULL, NULL); 8562 if (isymbuf == NULL) 8563 return FALSE; 8564 8565 /* Read in any version definitions. */ 8566 versymhdr = &elf_tdata (input)->dynversym_hdr; 8567 extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); 8568 if (extversym == NULL) 8569 goto error_ret; 8570 8571 if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0 8572 || (bfd_bread (extversym, versymhdr->sh_size, input) 8573 != versymhdr->sh_size)) 8574 { 8575 free (extversym); 8576 error_ret: 8577 free (isymbuf); 8578 return FALSE; 8579 } 8580 8581 ever = extversym + extsymoff; 8582 isymend = isymbuf + extsymcount; 8583 for (isym = isymbuf; isym < isymend; isym++, ever++) 8584 { 8585 const char *name; 8586 Elf_Internal_Versym iver; 8587 unsigned short version_index; 8588 8589 if (ELF_ST_BIND (isym->st_info) == STB_LOCAL 8590 || isym->st_shndx == SHN_UNDEF) 8591 continue; 8592 8593 name = bfd_elf_string_from_elf_section (input, 8594 hdr->sh_link, 8595 isym->st_name); 8596 if (strcmp (name, h->root.root.string) != 0) 8597 continue; 8598 8599 _bfd_elf_swap_versym_in (input, ever, &iver); 8600 8601 if ((iver.vs_vers & VERSYM_HIDDEN) == 0 8602 && !(h->def_regular 8603 && h->forced_local)) 8604 { 8605 /* If we have a non-hidden versioned sym, then it should 8606 have provided a definition for the undefined sym unless 8607 it is defined in a non-shared object and forced local. 8608 */ 8609 abort (); 8610 } 8611 8612 version_index = iver.vs_vers & VERSYM_VERSION; 8613 if (version_index == 1 || version_index == 2) 8614 { 8615 /* This is the base or first version. We can use it. */ 8616 free (extversym); 8617 free (isymbuf); 8618 return TRUE; 8619 } 8620 } 8621 8622 free (extversym); 8623 free (isymbuf); 8624 } 8625 8626 return FALSE; 8627 } 8628 8629 /* Add an external symbol to the symbol table. This is called from 8630 the hash table traversal routine. When generating a shared object, 8631 we go through the symbol table twice. The first time we output 8632 anything that might have been forced to local scope in a version 8633 script. The second time we output the symbols that are still 8634 global symbols. */ 8635 8636 static bfd_boolean 8637 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) 8638 { 8639 struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh; 8640 struct elf_outext_info *eoinfo = (struct elf_outext_info *) data; 8641 struct elf_final_link_info *flinfo = eoinfo->flinfo; 8642 bfd_boolean strip; 8643 Elf_Internal_Sym sym; 8644 asection *input_sec; 8645 const struct elf_backend_data *bed; 8646 long indx; 8647 int ret; 8648 8649 if (h->root.type == bfd_link_hash_warning) 8650 { 8651 h = (struct elf_link_hash_entry *) h->root.u.i.link; 8652 if (h->root.type == bfd_link_hash_new) 8653 return TRUE; 8654 } 8655 8656 /* Decide whether to output this symbol in this pass. */ 8657 if (eoinfo->localsyms) 8658 { 8659 if (!h->forced_local) 8660 return TRUE; 8661 if (eoinfo->second_pass 8662 && !((h->root.type == bfd_link_hash_defined 8663 || h->root.type == bfd_link_hash_defweak) 8664 && h->root.u.def.section->output_section != NULL)) 8665 return TRUE; 8666 } 8667 else 8668 { 8669 if (h->forced_local) 8670 return TRUE; 8671 } 8672 8673 bed = get_elf_backend_data (flinfo->output_bfd); 8674 8675 if (h->root.type == bfd_link_hash_undefined) 8676 { 8677 /* If we have an undefined symbol reference here then it must have 8678 come from a shared library that is being linked in. (Undefined 8679 references in regular files have already been handled unless 8680 they are in unreferenced sections which are removed by garbage 8681 collection). */ 8682 bfd_boolean ignore_undef = FALSE; 8683 8684 /* Some symbols may be special in that the fact that they're 8685 undefined can be safely ignored - let backend determine that. */ 8686 if (bed->elf_backend_ignore_undef_symbol) 8687 ignore_undef = bed->elf_backend_ignore_undef_symbol (h); 8688 8689 /* If we are reporting errors for this situation then do so now. */ 8690 if (!ignore_undef 8691 && h->ref_dynamic 8692 && (!h->ref_regular || flinfo->info->gc_sections) 8693 && !elf_link_check_versioned_symbol (flinfo->info, bed, h) 8694 && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE) 8695 { 8696 if (!(flinfo->info->callbacks->undefined_symbol 8697 (flinfo->info, h->root.root.string, 8698 h->ref_regular ? NULL : h->root.u.undef.abfd, 8699 NULL, 0, 8700 (flinfo->info->unresolved_syms_in_shared_libs 8701 == RM_GENERATE_ERROR)))) 8702 { 8703 bfd_set_error (bfd_error_bad_value); 8704 eoinfo->failed = TRUE; 8705 return FALSE; 8706 } 8707 } 8708 } 8709 8710 /* We should also warn if a forced local symbol is referenced from 8711 shared libraries. */ 8712 if (!flinfo->info->relocatable 8713 && flinfo->info->executable 8714 && h->forced_local 8715 && h->ref_dynamic 8716 && h->def_regular 8717 && !h->dynamic_def 8718 && h->ref_dynamic_nonweak 8719 && !elf_link_check_versioned_symbol (flinfo->info, bed, h)) 8720 { 8721 bfd *def_bfd; 8722 const char *msg; 8723 struct elf_link_hash_entry *hi = h; 8724 8725 /* Check indirect symbol. */ 8726 while (hi->root.type == bfd_link_hash_indirect) 8727 hi = (struct elf_link_hash_entry *) hi->root.u.i.link; 8728 8729 if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL) 8730 msg = _("%B: internal symbol `%s' in %B is referenced by DSO"); 8731 else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN) 8732 msg = _("%B: hidden symbol `%s' in %B is referenced by DSO"); 8733 else 8734 msg = _("%B: local symbol `%s' in %B is referenced by DSO"); 8735 def_bfd = flinfo->output_bfd; 8736 if (hi->root.u.def.section != bfd_abs_section_ptr) 8737 def_bfd = hi->root.u.def.section->owner; 8738 (*_bfd_error_handler) (msg, flinfo->output_bfd, def_bfd, 8739 h->root.root.string); 8740 bfd_set_error (bfd_error_bad_value); 8741 eoinfo->failed = TRUE; 8742 return FALSE; 8743 } 8744 8745 /* We don't want to output symbols that have never been mentioned by 8746 a regular file, or that we have been told to strip. However, if 8747 h->indx is set to -2, the symbol is used by a reloc and we must 8748 output it. */ 8749 if (h->indx == -2) 8750 strip = FALSE; 8751 else if ((h->def_dynamic 8752 || h->ref_dynamic 8753 || h->root.type == bfd_link_hash_new) 8754 && !h->def_regular 8755 && !h->ref_regular) 8756 strip = TRUE; 8757 else if (flinfo->info->strip == strip_all) 8758 strip = TRUE; 8759 else if (flinfo->info->strip == strip_some 8760 && bfd_hash_lookup (flinfo->info->keep_hash, 8761 h->root.root.string, FALSE, FALSE) == NULL) 8762 strip = TRUE; 8763 else if ((h->root.type == bfd_link_hash_defined 8764 || h->root.type == bfd_link_hash_defweak) 8765 && ((flinfo->info->strip_discarded 8766 && discarded_section (h->root.u.def.section)) 8767 || (h->root.u.def.section->owner != NULL 8768 && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0))) 8769 strip = TRUE; 8770 else if ((h->root.type == bfd_link_hash_undefined 8771 || h->root.type == bfd_link_hash_undefweak) 8772 && h->root.u.undef.abfd != NULL 8773 && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0) 8774 strip = TRUE; 8775 else 8776 strip = FALSE; 8777 8778 /* If we're stripping it, and it's not a dynamic symbol, there's 8779 nothing else to do unless it is a forced local symbol or a 8780 STT_GNU_IFUNC symbol. */ 8781 if (strip 8782 && h->dynindx == -1 8783 && h->type != STT_GNU_IFUNC 8784 && !h->forced_local) 8785 return TRUE; 8786 8787 sym.st_value = 0; 8788 sym.st_size = h->size; 8789 sym.st_other = h->other; 8790 if (h->forced_local) 8791 { 8792 sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type); 8793 /* Turn off visibility on local symbol. */ 8794 sym.st_other &= ~ELF_ST_VISIBILITY (-1); 8795 } 8796 else if (h->unique_global) 8797 sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type); 8798 else if (h->root.type == bfd_link_hash_undefweak 8799 || h->root.type == bfd_link_hash_defweak) 8800 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type); 8801 else 8802 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type); 8803 sym.st_target_internal = h->target_internal; 8804 8805 switch (h->root.type) 8806 { 8807 default: 8808 case bfd_link_hash_new: 8809 case bfd_link_hash_warning: 8810 abort (); 8811 return FALSE; 8812 8813 case bfd_link_hash_undefined: 8814 case bfd_link_hash_undefweak: 8815 input_sec = bfd_und_section_ptr; 8816 sym.st_shndx = SHN_UNDEF; 8817 break; 8818 8819 case bfd_link_hash_defined: 8820 case bfd_link_hash_defweak: 8821 { 8822 input_sec = h->root.u.def.section; 8823 if (input_sec->output_section != NULL) 8824 { 8825 if (eoinfo->localsyms && flinfo->filesym_count == 1) 8826 { 8827 bfd_boolean second_pass_sym 8828 = (input_sec->owner == flinfo->output_bfd 8829 || input_sec->owner == NULL 8830 || (input_sec->flags & SEC_LINKER_CREATED) != 0 8831 || (input_sec->owner->flags & BFD_LINKER_CREATED) != 0); 8832 8833 eoinfo->need_second_pass |= second_pass_sym; 8834 if (eoinfo->second_pass != second_pass_sym) 8835 return TRUE; 8836 } 8837 8838 sym.st_shndx = 8839 _bfd_elf_section_from_bfd_section (flinfo->output_bfd, 8840 input_sec->output_section); 8841 if (sym.st_shndx == SHN_BAD) 8842 { 8843 (*_bfd_error_handler) 8844 (_("%B: could not find output section %A for input section %A"), 8845 flinfo->output_bfd, input_sec->output_section, input_sec); 8846 bfd_set_error (bfd_error_nonrepresentable_section); 8847 eoinfo->failed = TRUE; 8848 return FALSE; 8849 } 8850 8851 /* ELF symbols in relocatable files are section relative, 8852 but in nonrelocatable files they are virtual 8853 addresses. */ 8854 sym.st_value = h->root.u.def.value + input_sec->output_offset; 8855 if (!flinfo->info->relocatable) 8856 { 8857 sym.st_value += input_sec->output_section->vma; 8858 if (h->type == STT_TLS) 8859 { 8860 asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec; 8861 if (tls_sec != NULL) 8862 sym.st_value -= tls_sec->vma; 8863 else 8864 { 8865 /* The TLS section may have been garbage collected. */ 8866 BFD_ASSERT (flinfo->info->gc_sections 8867 && !input_sec->gc_mark); 8868 } 8869 } 8870 } 8871 } 8872 else 8873 { 8874 BFD_ASSERT (input_sec->owner == NULL 8875 || (input_sec->owner->flags & DYNAMIC) != 0); 8876 sym.st_shndx = SHN_UNDEF; 8877 input_sec = bfd_und_section_ptr; 8878 } 8879 } 8880 break; 8881 8882 case bfd_link_hash_common: 8883 input_sec = h->root.u.c.p->section; 8884 sym.st_shndx = bed->common_section_index (input_sec); 8885 sym.st_value = 1 << h->root.u.c.p->alignment_power; 8886 break; 8887 8888 case bfd_link_hash_indirect: 8889 /* These symbols are created by symbol versioning. They point 8890 to the decorated version of the name. For example, if the 8891 symbol foo@@GNU_1.2 is the default, which should be used when 8892 foo is used with no version, then we add an indirect symbol 8893 foo which points to foo@@GNU_1.2. We ignore these symbols, 8894 since the indirected symbol is already in the hash table. */ 8895 return TRUE; 8896 } 8897 8898 /* Give the processor backend a chance to tweak the symbol value, 8899 and also to finish up anything that needs to be done for this 8900 symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for 8901 forced local syms when non-shared is due to a historical quirk. 8902 STT_GNU_IFUNC symbol must go through PLT. */ 8903 if ((h->type == STT_GNU_IFUNC 8904 && h->def_regular 8905 && !flinfo->info->relocatable) 8906 || ((h->dynindx != -1 8907 || h->forced_local) 8908 && ((flinfo->info->shared 8909 && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT 8910 || h->root.type != bfd_link_hash_undefweak)) 8911 || !h->forced_local) 8912 && elf_hash_table (flinfo->info)->dynamic_sections_created)) 8913 { 8914 if (! ((*bed->elf_backend_finish_dynamic_symbol) 8915 (flinfo->output_bfd, flinfo->info, h, &sym))) 8916 { 8917 eoinfo->failed = TRUE; 8918 return FALSE; 8919 } 8920 } 8921 8922 /* If we are marking the symbol as undefined, and there are no 8923 non-weak references to this symbol from a regular object, then 8924 mark the symbol as weak undefined; if there are non-weak 8925 references, mark the symbol as strong. We can't do this earlier, 8926 because it might not be marked as undefined until the 8927 finish_dynamic_symbol routine gets through with it. */ 8928 if (sym.st_shndx == SHN_UNDEF 8929 && h->ref_regular 8930 && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL 8931 || ELF_ST_BIND (sym.st_info) == STB_WEAK)) 8932 { 8933 int bindtype; 8934 unsigned int type = ELF_ST_TYPE (sym.st_info); 8935 8936 /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */ 8937 if (type == STT_GNU_IFUNC) 8938 type = STT_FUNC; 8939 8940 if (h->ref_regular_nonweak) 8941 bindtype = STB_GLOBAL; 8942 else 8943 bindtype = STB_WEAK; 8944 sym.st_info = ELF_ST_INFO (bindtype, type); 8945 } 8946 8947 /* If this is a symbol defined in a dynamic library, don't use the 8948 symbol size from the dynamic library. Relinking an executable 8949 against a new library may introduce gratuitous changes in the 8950 executable's symbols if we keep the size. */ 8951 if (sym.st_shndx == SHN_UNDEF 8952 && !h->def_regular 8953 && h->def_dynamic) 8954 sym.st_size = 0; 8955 8956 /* If a non-weak symbol with non-default visibility is not defined 8957 locally, it is a fatal error. */ 8958 if (!flinfo->info->relocatable 8959 && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT 8960 && ELF_ST_BIND (sym.st_info) != STB_WEAK 8961 && h->root.type == bfd_link_hash_undefined 8962 && !h->def_regular) 8963 { 8964 const char *msg; 8965 8966 if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED) 8967 msg = _("%B: protected symbol `%s' isn't defined"); 8968 else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL) 8969 msg = _("%B: internal symbol `%s' isn't defined"); 8970 else 8971 msg = _("%B: hidden symbol `%s' isn't defined"); 8972 (*_bfd_error_handler) (msg, flinfo->output_bfd, h->root.root.string); 8973 bfd_set_error (bfd_error_bad_value); 8974 eoinfo->failed = TRUE; 8975 return FALSE; 8976 } 8977 8978 /* If this symbol should be put in the .dynsym section, then put it 8979 there now. We already know the symbol index. We also fill in 8980 the entry in the .hash section. */ 8981 if (flinfo->dynsym_sec != NULL 8982 && h->dynindx != -1 8983 && elf_hash_table (flinfo->info)->dynamic_sections_created) 8984 { 8985 bfd_byte *esym; 8986 8987 /* Since there is no version information in the dynamic string, 8988 if there is no version info in symbol version section, we will 8989 have a run-time problem. */ 8990 if (h->verinfo.verdef == NULL) 8991 { 8992 char *p = strrchr (h->root.root.string, ELF_VER_CHR); 8993 8994 if (p && p [1] != '\0') 8995 { 8996 (*_bfd_error_handler) 8997 (_("%B: No symbol version section for versioned symbol `%s'"), 8998 flinfo->output_bfd, h->root.root.string); 8999 eoinfo->failed = TRUE; 9000 return FALSE; 9001 } 9002 } 9003 9004 sym.st_name = h->dynstr_index; 9005 esym = flinfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym; 9006 if (!check_dynsym (flinfo->output_bfd, &sym)) 9007 { 9008 eoinfo->failed = TRUE; 9009 return FALSE; 9010 } 9011 bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0); 9012 9013 if (flinfo->hash_sec != NULL) 9014 { 9015 size_t hash_entry_size; 9016 bfd_byte *bucketpos; 9017 bfd_vma chain; 9018 size_t bucketcount; 9019 size_t bucket; 9020 9021 bucketcount = elf_hash_table (flinfo->info)->bucketcount; 9022 bucket = h->u.elf_hash_value % bucketcount; 9023 9024 hash_entry_size 9025 = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize; 9026 bucketpos = ((bfd_byte *) flinfo->hash_sec->contents 9027 + (bucket + 2) * hash_entry_size); 9028 chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos); 9029 bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx, 9030 bucketpos); 9031 bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain, 9032 ((bfd_byte *) flinfo->hash_sec->contents 9033 + (bucketcount + 2 + h->dynindx) * hash_entry_size)); 9034 } 9035 9036 if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL) 9037 { 9038 Elf_Internal_Versym iversym; 9039 Elf_External_Versym *eversym; 9040 9041 if (!h->def_regular) 9042 { 9043 if (h->verinfo.verdef == NULL) 9044 iversym.vs_vers = 0; 9045 else 9046 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1; 9047 } 9048 else 9049 { 9050 if (h->verinfo.vertree == NULL) 9051 iversym.vs_vers = 1; 9052 else 9053 iversym.vs_vers = h->verinfo.vertree->vernum + 1; 9054 if (flinfo->info->create_default_symver) 9055 iversym.vs_vers++; 9056 } 9057 9058 if (h->hidden) 9059 iversym.vs_vers |= VERSYM_HIDDEN; 9060 9061 eversym = (Elf_External_Versym *) flinfo->symver_sec->contents; 9062 eversym += h->dynindx; 9063 _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym); 9064 } 9065 } 9066 9067 /* If we're stripping it, then it was just a dynamic symbol, and 9068 there's nothing else to do. */ 9069 if (strip || (input_sec->flags & SEC_EXCLUDE) != 0) 9070 return TRUE; 9071 9072 indx = bfd_get_symcount (flinfo->output_bfd); 9073 ret = elf_link_output_sym (flinfo, h->root.root.string, &sym, input_sec, h); 9074 if (ret == 0) 9075 { 9076 eoinfo->failed = TRUE; 9077 return FALSE; 9078 } 9079 else if (ret == 1) 9080 h->indx = indx; 9081 else if (h->indx == -2) 9082 abort(); 9083 9084 return TRUE; 9085 } 9086 9087 /* Return TRUE if special handling is done for relocs in SEC against 9088 symbols defined in discarded sections. */ 9089 9090 static bfd_boolean 9091 elf_section_ignore_discarded_relocs (asection *sec) 9092 { 9093 const struct elf_backend_data *bed; 9094 9095 switch (sec->sec_info_type) 9096 { 9097 case SEC_INFO_TYPE_STABS: 9098 case SEC_INFO_TYPE_EH_FRAME: 9099 return TRUE; 9100 default: 9101 break; 9102 } 9103 9104 bed = get_elf_backend_data (sec->owner); 9105 if (bed->elf_backend_ignore_discarded_relocs != NULL 9106 && (*bed->elf_backend_ignore_discarded_relocs) (sec)) 9107 return TRUE; 9108 9109 return FALSE; 9110 } 9111 9112 /* Return a mask saying how ld should treat relocations in SEC against 9113 symbols defined in discarded sections. If this function returns 9114 COMPLAIN set, ld will issue a warning message. If this function 9115 returns PRETEND set, and the discarded section was link-once and the 9116 same size as the kept link-once section, ld will pretend that the 9117 symbol was actually defined in the kept section. Otherwise ld will 9118 zero the reloc (at least that is the intent, but some cooperation by 9119 the target dependent code is needed, particularly for REL targets). */ 9120 9121 unsigned int 9122 _bfd_elf_default_action_discarded (asection *sec) 9123 { 9124 if (sec->flags & SEC_DEBUGGING) 9125 return PRETEND; 9126 9127 if (strcmp (".eh_frame", sec->name) == 0) 9128 return 0; 9129 9130 if (strcmp (".gcc_except_table", sec->name) == 0) 9131 return 0; 9132 9133 return COMPLAIN | PRETEND; 9134 } 9135 9136 /* Find a match between a section and a member of a section group. */ 9137 9138 static asection * 9139 match_group_member (asection *sec, asection *group, 9140 struct bfd_link_info *info) 9141 { 9142 asection *first = elf_next_in_group (group); 9143 asection *s = first; 9144 9145 while (s != NULL) 9146 { 9147 if (bfd_elf_match_symbols_in_sections (s, sec, info)) 9148 return s; 9149 9150 s = elf_next_in_group (s); 9151 if (s == first) 9152 break; 9153 } 9154 9155 return NULL; 9156 } 9157 9158 /* Check if the kept section of a discarded section SEC can be used 9159 to replace it. Return the replacement if it is OK. Otherwise return 9160 NULL. */ 9161 9162 asection * 9163 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info) 9164 { 9165 asection *kept; 9166 9167 kept = sec->kept_section; 9168 if (kept != NULL) 9169 { 9170 if ((kept->flags & SEC_GROUP) != 0) 9171 kept = match_group_member (sec, kept, info); 9172 if (kept != NULL 9173 && ((sec->rawsize != 0 ? sec->rawsize : sec->size) 9174 != (kept->rawsize != 0 ? kept->rawsize : kept->size))) 9175 kept = NULL; 9176 sec->kept_section = kept; 9177 } 9178 return kept; 9179 } 9180 9181 /* Link an input file into the linker output file. This function 9182 handles all the sections and relocations of the input file at once. 9183 This is so that we only have to read the local symbols once, and 9184 don't have to keep them in memory. */ 9185 9186 static bfd_boolean 9187 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) 9188 { 9189 int (*relocate_section) 9190 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, 9191 Elf_Internal_Rela *, Elf_Internal_Sym *, asection **); 9192 bfd *output_bfd; 9193 Elf_Internal_Shdr *symtab_hdr; 9194 size_t locsymcount; 9195 size_t extsymoff; 9196 Elf_Internal_Sym *isymbuf; 9197 Elf_Internal_Sym *isym; 9198 Elf_Internal_Sym *isymend; 9199 long *pindex; 9200 asection **ppsection; 9201 asection *o; 9202 const struct elf_backend_data *bed; 9203 struct elf_link_hash_entry **sym_hashes; 9204 bfd_size_type address_size; 9205 bfd_vma r_type_mask; 9206 int r_sym_shift; 9207 bfd_boolean have_file_sym = FALSE; 9208 9209 output_bfd = flinfo->output_bfd; 9210 bed = get_elf_backend_data (output_bfd); 9211 relocate_section = bed->elf_backend_relocate_section; 9212 9213 /* If this is a dynamic object, we don't want to do anything here: 9214 we don't want the local symbols, and we don't want the section 9215 contents. */ 9216 if ((input_bfd->flags & DYNAMIC) != 0) 9217 return TRUE; 9218 9219 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; 9220 if (elf_bad_symtab (input_bfd)) 9221 { 9222 locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; 9223 extsymoff = 0; 9224 } 9225 else 9226 { 9227 locsymcount = symtab_hdr->sh_info; 9228 extsymoff = symtab_hdr->sh_info; 9229 } 9230 9231 /* Read the local symbols. */ 9232 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 9233 if (isymbuf == NULL && locsymcount != 0) 9234 { 9235 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, 9236 flinfo->internal_syms, 9237 flinfo->external_syms, 9238 flinfo->locsym_shndx); 9239 if (isymbuf == NULL) 9240 return FALSE; 9241 } 9242 9243 /* Find local symbol sections and adjust values of symbols in 9244 SEC_MERGE sections. Write out those local symbols we know are 9245 going into the output file. */ 9246 isymend = isymbuf + locsymcount; 9247 for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections; 9248 isym < isymend; 9249 isym++, pindex++, ppsection++) 9250 { 9251 asection *isec; 9252 const char *name; 9253 Elf_Internal_Sym osym; 9254 long indx; 9255 int ret; 9256 9257 *pindex = -1; 9258 9259 if (elf_bad_symtab (input_bfd)) 9260 { 9261 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL) 9262 { 9263 *ppsection = NULL; 9264 continue; 9265 } 9266 } 9267 9268 if (isym->st_shndx == SHN_UNDEF) 9269 isec = bfd_und_section_ptr; 9270 else if (isym->st_shndx == SHN_ABS) 9271 isec = bfd_abs_section_ptr; 9272 else if (isym->st_shndx == SHN_COMMON) 9273 isec = bfd_com_section_ptr; 9274 else 9275 { 9276 isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx); 9277 if (isec == NULL) 9278 { 9279 /* Don't attempt to output symbols with st_shnx in the 9280 reserved range other than SHN_ABS and SHN_COMMON. */ 9281 *ppsection = NULL; 9282 continue; 9283 } 9284 else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE 9285 && ELF_ST_TYPE (isym->st_info) != STT_SECTION) 9286 isym->st_value = 9287 _bfd_merged_section_offset (output_bfd, &isec, 9288 elf_section_data (isec)->sec_info, 9289 isym->st_value); 9290 } 9291 9292 *ppsection = isec; 9293 9294 /* Don't output the first, undefined, symbol. */ 9295 if (ppsection == flinfo->sections) 9296 continue; 9297 9298 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) 9299 { 9300 /* We never output section symbols. Instead, we use the 9301 section symbol of the corresponding section in the output 9302 file. */ 9303 continue; 9304 } 9305 9306 /* If we are stripping all symbols, we don't want to output this 9307 one. */ 9308 if (flinfo->info->strip == strip_all) 9309 continue; 9310 9311 /* If we are discarding all local symbols, we don't want to 9312 output this one. If we are generating a relocatable output 9313 file, then some of the local symbols may be required by 9314 relocs; we output them below as we discover that they are 9315 needed. */ 9316 if (flinfo->info->discard == discard_all) 9317 continue; 9318 9319 /* If this symbol is defined in a section which we are 9320 discarding, we don't need to keep it. */ 9321 if (isym->st_shndx != SHN_UNDEF 9322 && isym->st_shndx < SHN_LORESERVE 9323 && bfd_section_removed_from_list (output_bfd, 9324 isec->output_section)) 9325 continue; 9326 9327 /* Get the name of the symbol. */ 9328 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, 9329 isym->st_name); 9330 if (name == NULL) 9331 return FALSE; 9332 9333 /* See if we are discarding symbols with this name. */ 9334 if ((flinfo->info->strip == strip_some 9335 && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE) 9336 == NULL)) 9337 || (((flinfo->info->discard == discard_sec_merge 9338 && (isec->flags & SEC_MERGE) && !flinfo->info->relocatable) 9339 || flinfo->info->discard == discard_l) 9340 && bfd_is_local_label_name (input_bfd, name))) 9341 continue; 9342 9343 if (ELF_ST_TYPE (isym->st_info) == STT_FILE) 9344 { 9345 have_file_sym = TRUE; 9346 flinfo->filesym_count += 1; 9347 } 9348 if (!have_file_sym) 9349 { 9350 /* In the absence of debug info, bfd_find_nearest_line uses 9351 FILE symbols to determine the source file for local 9352 function symbols. Provide a FILE symbol here if input 9353 files lack such, so that their symbols won't be 9354 associated with a previous input file. It's not the 9355 source file, but the best we can do. */ 9356 have_file_sym = TRUE; 9357 flinfo->filesym_count += 1; 9358 memset (&osym, 0, sizeof (osym)); 9359 osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE); 9360 osym.st_shndx = SHN_ABS; 9361 if (!elf_link_output_sym (flinfo, input_bfd->filename, &osym, 9362 bfd_abs_section_ptr, NULL)) 9363 return FALSE; 9364 } 9365 9366 osym = *isym; 9367 9368 /* Adjust the section index for the output file. */ 9369 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, 9370 isec->output_section); 9371 if (osym.st_shndx == SHN_BAD) 9372 return FALSE; 9373 9374 /* ELF symbols in relocatable files are section relative, but 9375 in executable files they are virtual addresses. Note that 9376 this code assumes that all ELF sections have an associated 9377 BFD section with a reasonable value for output_offset; below 9378 we assume that they also have a reasonable value for 9379 output_section. Any special sections must be set up to meet 9380 these requirements. */ 9381 osym.st_value += isec->output_offset; 9382 if (!flinfo->info->relocatable) 9383 { 9384 osym.st_value += isec->output_section->vma; 9385 if (ELF_ST_TYPE (osym.st_info) == STT_TLS) 9386 { 9387 /* STT_TLS symbols are relative to PT_TLS segment base. */ 9388 BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL); 9389 osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma; 9390 } 9391 } 9392 9393 indx = bfd_get_symcount (output_bfd); 9394 ret = elf_link_output_sym (flinfo, name, &osym, isec, NULL); 9395 if (ret == 0) 9396 return FALSE; 9397 else if (ret == 1) 9398 *pindex = indx; 9399 } 9400 9401 if (bed->s->arch_size == 32) 9402 { 9403 r_type_mask = 0xff; 9404 r_sym_shift = 8; 9405 address_size = 4; 9406 } 9407 else 9408 { 9409 r_type_mask = 0xffffffff; 9410 r_sym_shift = 32; 9411 address_size = 8; 9412 } 9413 9414 /* Relocate the contents of each section. */ 9415 sym_hashes = elf_sym_hashes (input_bfd); 9416 for (o = input_bfd->sections; o != NULL; o = o->next) 9417 { 9418 bfd_byte *contents; 9419 9420 if (! o->linker_mark) 9421 { 9422 /* This section was omitted from the link. */ 9423 continue; 9424 } 9425 9426 if (flinfo->info->relocatable 9427 && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP) 9428 { 9429 /* Deal with the group signature symbol. */ 9430 struct bfd_elf_section_data *sec_data = elf_section_data (o); 9431 unsigned long symndx = sec_data->this_hdr.sh_info; 9432 asection *osec = o->output_section; 9433 9434 if (symndx >= locsymcount 9435 || (elf_bad_symtab (input_bfd) 9436 && flinfo->sections[symndx] == NULL)) 9437 { 9438 struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff]; 9439 while (h->root.type == bfd_link_hash_indirect 9440 || h->root.type == bfd_link_hash_warning) 9441 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9442 /* Arrange for symbol to be output. */ 9443 h->indx = -2; 9444 elf_section_data (osec)->this_hdr.sh_info = -2; 9445 } 9446 else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION) 9447 { 9448 /* We'll use the output section target_index. */ 9449 asection *sec = flinfo->sections[symndx]->output_section; 9450 elf_section_data (osec)->this_hdr.sh_info = sec->target_index; 9451 } 9452 else 9453 { 9454 if (flinfo->indices[symndx] == -1) 9455 { 9456 /* Otherwise output the local symbol now. */ 9457 Elf_Internal_Sym sym = isymbuf[symndx]; 9458 asection *sec = flinfo->sections[symndx]->output_section; 9459 const char *name; 9460 long indx; 9461 int ret; 9462 9463 name = bfd_elf_string_from_elf_section (input_bfd, 9464 symtab_hdr->sh_link, 9465 sym.st_name); 9466 if (name == NULL) 9467 return FALSE; 9468 9469 sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, 9470 sec); 9471 if (sym.st_shndx == SHN_BAD) 9472 return FALSE; 9473 9474 sym.st_value += o->output_offset; 9475 9476 indx = bfd_get_symcount (output_bfd); 9477 ret = elf_link_output_sym (flinfo, name, &sym, o, NULL); 9478 if (ret == 0) 9479 return FALSE; 9480 else if (ret == 1) 9481 flinfo->indices[symndx] = indx; 9482 else 9483 abort (); 9484 } 9485 elf_section_data (osec)->this_hdr.sh_info 9486 = flinfo->indices[symndx]; 9487 } 9488 } 9489 9490 if ((o->flags & SEC_HAS_CONTENTS) == 0 9491 || (o->size == 0 && (o->flags & SEC_RELOC) == 0)) 9492 continue; 9493 9494 if ((o->flags & SEC_LINKER_CREATED) != 0) 9495 { 9496 /* Section was created by _bfd_elf_link_create_dynamic_sections 9497 or somesuch. */ 9498 continue; 9499 } 9500 9501 /* Get the contents of the section. They have been cached by a 9502 relaxation routine. Note that o is a section in an input 9503 file, so the contents field will not have been set by any of 9504 the routines which work on output files. */ 9505 if (elf_section_data (o)->this_hdr.contents != NULL) 9506 contents = elf_section_data (o)->this_hdr.contents; 9507 else 9508 { 9509 contents = flinfo->contents; 9510 if (! bfd_get_full_section_contents (input_bfd, o, &contents)) 9511 return FALSE; 9512 } 9513 9514 if ((o->flags & SEC_RELOC) != 0) 9515 { 9516 Elf_Internal_Rela *internal_relocs; 9517 Elf_Internal_Rela *rel, *relend; 9518 int action_discarded; 9519 int ret; 9520 9521 /* Get the swapped relocs. */ 9522 internal_relocs 9523 = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs, 9524 flinfo->internal_relocs, FALSE); 9525 if (internal_relocs == NULL 9526 && o->reloc_count > 0) 9527 return FALSE; 9528 9529 /* We need to reverse-copy input .ctors/.dtors sections if 9530 they are placed in .init_array/.finit_array for output. */ 9531 if (o->size > address_size 9532 && ((strncmp (o->name, ".ctors", 6) == 0 9533 && strcmp (o->output_section->name, 9534 ".init_array") == 0) 9535 || (strncmp (o->name, ".dtors", 6) == 0 9536 && strcmp (o->output_section->name, 9537 ".fini_array") == 0)) 9538 && (o->name[6] == 0 || o->name[6] == '.')) 9539 { 9540 if (o->size != o->reloc_count * address_size) 9541 { 9542 (*_bfd_error_handler) 9543 (_("error: %B: size of section %A is not " 9544 "multiple of address size"), 9545 input_bfd, o); 9546 bfd_set_error (bfd_error_on_input); 9547 return FALSE; 9548 } 9549 o->flags |= SEC_ELF_REVERSE_COPY; 9550 } 9551 9552 action_discarded = -1; 9553 if (!elf_section_ignore_discarded_relocs (o)) 9554 action_discarded = (*bed->action_discarded) (o); 9555 9556 /* Run through the relocs evaluating complex reloc symbols and 9557 looking for relocs against symbols from discarded sections 9558 or section symbols from removed link-once sections. 9559 Complain about relocs against discarded sections. Zero 9560 relocs against removed link-once sections. */ 9561 9562 rel = internal_relocs; 9563 relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel; 9564 for ( ; rel < relend; rel++) 9565 { 9566 unsigned long r_symndx = rel->r_info >> r_sym_shift; 9567 unsigned int s_type; 9568 asection **ps, *sec; 9569 struct elf_link_hash_entry *h = NULL; 9570 const char *sym_name; 9571 9572 if (r_symndx == STN_UNDEF) 9573 continue; 9574 9575 if (r_symndx >= locsymcount 9576 || (elf_bad_symtab (input_bfd) 9577 && flinfo->sections[r_symndx] == NULL)) 9578 { 9579 h = sym_hashes[r_symndx - extsymoff]; 9580 9581 /* Badly formatted input files can contain relocs that 9582 reference non-existant symbols. Check here so that 9583 we do not seg fault. */ 9584 if (h == NULL) 9585 { 9586 char buffer [32]; 9587 9588 sprintf_vma (buffer, rel->r_info); 9589 (*_bfd_error_handler) 9590 (_("error: %B contains a reloc (0x%s) for section %A " 9591 "that references a non-existent global symbol"), 9592 input_bfd, o, buffer); 9593 bfd_set_error (bfd_error_bad_value); 9594 return FALSE; 9595 } 9596 9597 while (h->root.type == bfd_link_hash_indirect 9598 || h->root.type == bfd_link_hash_warning) 9599 h = (struct elf_link_hash_entry *) h->root.u.i.link; 9600 9601 s_type = h->type; 9602 9603 ps = NULL; 9604 if (h->root.type == bfd_link_hash_defined 9605 || h->root.type == bfd_link_hash_defweak) 9606 ps = &h->root.u.def.section; 9607 9608 sym_name = h->root.root.string; 9609 } 9610 else 9611 { 9612 Elf_Internal_Sym *sym = isymbuf + r_symndx; 9613 9614 s_type = ELF_ST_TYPE (sym->st_info); 9615 ps = &flinfo->sections[r_symndx]; 9616 sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, 9617 sym, *ps); 9618 } 9619 9620 if ((s_type == STT_RELC || s_type == STT_SRELC) 9621 && !flinfo->info->relocatable) 9622 { 9623 bfd_vma val; 9624 bfd_vma dot = (rel->r_offset 9625 + o->output_offset + o->output_section->vma); 9626 #ifdef DEBUG 9627 printf ("Encountered a complex symbol!"); 9628 printf (" (input_bfd %s, section %s, reloc %ld\n", 9629 input_bfd->filename, o->name, 9630 (long) (rel - internal_relocs)); 9631 printf (" symbol: idx %8.8lx, name %s\n", 9632 r_symndx, sym_name); 9633 printf (" reloc : info %8.8lx, addr %8.8lx\n", 9634 (unsigned long) rel->r_info, 9635 (unsigned long) rel->r_offset); 9636 #endif 9637 if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot, 9638 isymbuf, locsymcount, s_type == STT_SRELC)) 9639 return FALSE; 9640 9641 /* Symbol evaluated OK. Update to absolute value. */ 9642 set_symbol_value (input_bfd, isymbuf, locsymcount, 9643 r_symndx, val); 9644 continue; 9645 } 9646 9647 if (action_discarded != -1 && ps != NULL) 9648 { 9649 /* Complain if the definition comes from a 9650 discarded section. */ 9651 if ((sec = *ps) != NULL && discarded_section (sec)) 9652 { 9653 BFD_ASSERT (r_symndx != STN_UNDEF); 9654 if (action_discarded & COMPLAIN) 9655 (*flinfo->info->callbacks->einfo) 9656 (_("%X`%s' referenced in section `%A' of %B: " 9657 "defined in discarded section `%A' of %B\n"), 9658 sym_name, o, input_bfd, sec, sec->owner); 9659 9660 /* Try to do the best we can to support buggy old 9661 versions of gcc. Pretend that the symbol is 9662 really defined in the kept linkonce section. 9663 FIXME: This is quite broken. Modifying the 9664 symbol here means we will be changing all later 9665 uses of the symbol, not just in this section. */ 9666 if (action_discarded & PRETEND) 9667 { 9668 asection *kept; 9669 9670 kept = _bfd_elf_check_kept_section (sec, 9671 flinfo->info); 9672 if (kept != NULL) 9673 { 9674 *ps = kept; 9675 continue; 9676 } 9677 } 9678 } 9679 } 9680 } 9681 9682 /* Relocate the section by invoking a back end routine. 9683 9684 The back end routine is responsible for adjusting the 9685 section contents as necessary, and (if using Rela relocs 9686 and generating a relocatable output file) adjusting the 9687 reloc addend as necessary. 9688 9689 The back end routine does not have to worry about setting 9690 the reloc address or the reloc symbol index. 9691 9692 The back end routine is given a pointer to the swapped in 9693 internal symbols, and can access the hash table entries 9694 for the external symbols via elf_sym_hashes (input_bfd). 9695 9696 When generating relocatable output, the back end routine 9697 must handle STB_LOCAL/STT_SECTION symbols specially. The 9698 output symbol is going to be a section symbol 9699 corresponding to the output section, which will require 9700 the addend to be adjusted. */ 9701 9702 ret = (*relocate_section) (output_bfd, flinfo->info, 9703 input_bfd, o, contents, 9704 internal_relocs, 9705 isymbuf, 9706 flinfo->sections); 9707 if (!ret) 9708 return FALSE; 9709 9710 if (ret == 2 9711 || flinfo->info->relocatable 9712 || flinfo->info->emitrelocations) 9713 { 9714 Elf_Internal_Rela *irela; 9715 Elf_Internal_Rela *irelaend, *irelamid; 9716 bfd_vma last_offset; 9717 struct elf_link_hash_entry **rel_hash; 9718 struct elf_link_hash_entry **rel_hash_list, **rela_hash_list; 9719 Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr; 9720 unsigned int next_erel; 9721 bfd_boolean rela_normal; 9722 struct bfd_elf_section_data *esdi, *esdo; 9723 9724 esdi = elf_section_data (o); 9725 esdo = elf_section_data (o->output_section); 9726 rela_normal = FALSE; 9727 9728 /* Adjust the reloc addresses and symbol indices. */ 9729 9730 irela = internal_relocs; 9731 irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel; 9732 rel_hash = esdo->rel.hashes + esdo->rel.count; 9733 /* We start processing the REL relocs, if any. When we reach 9734 IRELAMID in the loop, we switch to the RELA relocs. */ 9735 irelamid = irela; 9736 if (esdi->rel.hdr != NULL) 9737 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr) 9738 * bed->s->int_rels_per_ext_rel); 9739 rel_hash_list = rel_hash; 9740 rela_hash_list = NULL; 9741 last_offset = o->output_offset; 9742 if (!flinfo->info->relocatable) 9743 last_offset += o->output_section->vma; 9744 for (next_erel = 0; irela < irelaend; irela++, next_erel++) 9745 { 9746 unsigned long r_symndx; 9747 asection *sec; 9748 Elf_Internal_Sym sym; 9749 9750 if (next_erel == bed->s->int_rels_per_ext_rel) 9751 { 9752 rel_hash++; 9753 next_erel = 0; 9754 } 9755 9756 if (irela == irelamid) 9757 { 9758 rel_hash = esdo->rela.hashes + esdo->rela.count; 9759 rela_hash_list = rel_hash; 9760 rela_normal = bed->rela_normal; 9761 } 9762 9763 irela->r_offset = _bfd_elf_section_offset (output_bfd, 9764 flinfo->info, o, 9765 irela->r_offset); 9766 if (irela->r_offset >= (bfd_vma) -2) 9767 { 9768 /* This is a reloc for a deleted entry or somesuch. 9769 Turn it into an R_*_NONE reloc, at the same 9770 offset as the last reloc. elf_eh_frame.c and 9771 bfd_elf_discard_info rely on reloc offsets 9772 being ordered. */ 9773 irela->r_offset = last_offset; 9774 irela->r_info = 0; 9775 irela->r_addend = 0; 9776 continue; 9777 } 9778 9779 irela->r_offset += o->output_offset; 9780 9781 /* Relocs in an executable have to be virtual addresses. */ 9782 if (!flinfo->info->relocatable) 9783 irela->r_offset += o->output_section->vma; 9784 9785 last_offset = irela->r_offset; 9786 9787 r_symndx = irela->r_info >> r_sym_shift; 9788 if (r_symndx == STN_UNDEF) 9789 continue; 9790 9791 if (r_symndx >= locsymcount 9792 || (elf_bad_symtab (input_bfd) 9793 && flinfo->sections[r_symndx] == NULL)) 9794 { 9795 struct elf_link_hash_entry *rh; 9796 unsigned long indx; 9797 9798 /* This is a reloc against a global symbol. We 9799 have not yet output all the local symbols, so 9800 we do not know the symbol index of any global 9801 symbol. We set the rel_hash entry for this 9802 reloc to point to the global hash table entry 9803 for this symbol. The symbol index is then 9804 set at the end of bfd_elf_final_link. */ 9805 indx = r_symndx - extsymoff; 9806 rh = elf_sym_hashes (input_bfd)[indx]; 9807 while (rh->root.type == bfd_link_hash_indirect 9808 || rh->root.type == bfd_link_hash_warning) 9809 rh = (struct elf_link_hash_entry *) rh->root.u.i.link; 9810 9811 /* Setting the index to -2 tells 9812 elf_link_output_extsym that this symbol is 9813 used by a reloc. */ 9814 BFD_ASSERT (rh->indx < 0); 9815 rh->indx = -2; 9816 9817 *rel_hash = rh; 9818 9819 continue; 9820 } 9821 9822 /* This is a reloc against a local symbol. */ 9823 9824 *rel_hash = NULL; 9825 sym = isymbuf[r_symndx]; 9826 sec = flinfo->sections[r_symndx]; 9827 if (ELF_ST_TYPE (sym.st_info) == STT_SECTION) 9828 { 9829 /* I suppose the backend ought to fill in the 9830 section of any STT_SECTION symbol against a 9831 processor specific section. */ 9832 r_symndx = STN_UNDEF; 9833 if (bfd_is_abs_section (sec)) 9834 ; 9835 else if (sec == NULL || sec->owner == NULL) 9836 { 9837 bfd_set_error (bfd_error_bad_value); 9838 return FALSE; 9839 } 9840 else 9841 { 9842 asection *osec = sec->output_section; 9843 9844 /* If we have discarded a section, the output 9845 section will be the absolute section. In 9846 case of discarded SEC_MERGE sections, use 9847 the kept section. relocate_section should 9848 have already handled discarded linkonce 9849 sections. */ 9850 if (bfd_is_abs_section (osec) 9851 && sec->kept_section != NULL 9852 && sec->kept_section->output_section != NULL) 9853 { 9854 osec = sec->kept_section->output_section; 9855 irela->r_addend -= osec->vma; 9856 } 9857 9858 if (!bfd_is_abs_section (osec)) 9859 { 9860 r_symndx = osec->target_index; 9861 if (r_symndx == STN_UNDEF) 9862 { 9863 irela->r_addend += osec->vma; 9864 osec = _bfd_nearby_section (output_bfd, osec, 9865 osec->vma); 9866 irela->r_addend -= osec->vma; 9867 r_symndx = osec->target_index; 9868 } 9869 } 9870 } 9871 9872 /* Adjust the addend according to where the 9873 section winds up in the output section. */ 9874 if (rela_normal) 9875 irela->r_addend += sec->output_offset; 9876 } 9877 else 9878 { 9879 if (flinfo->indices[r_symndx] == -1) 9880 { 9881 unsigned long shlink; 9882 const char *name; 9883 asection *osec; 9884 long indx; 9885 9886 if (flinfo->info->strip == strip_all) 9887 { 9888 /* You can't do ld -r -s. */ 9889 bfd_set_error (bfd_error_invalid_operation); 9890 return FALSE; 9891 } 9892 9893 /* This symbol was skipped earlier, but 9894 since it is needed by a reloc, we 9895 must output it now. */ 9896 shlink = symtab_hdr->sh_link; 9897 name = (bfd_elf_string_from_elf_section 9898 (input_bfd, shlink, sym.st_name)); 9899 if (name == NULL) 9900 return FALSE; 9901 9902 osec = sec->output_section; 9903 sym.st_shndx = 9904 _bfd_elf_section_from_bfd_section (output_bfd, 9905 osec); 9906 if (sym.st_shndx == SHN_BAD) 9907 return FALSE; 9908 9909 sym.st_value += sec->output_offset; 9910 if (!flinfo->info->relocatable) 9911 { 9912 sym.st_value += osec->vma; 9913 if (ELF_ST_TYPE (sym.st_info) == STT_TLS) 9914 { 9915 /* STT_TLS symbols are relative to PT_TLS 9916 segment base. */ 9917 BFD_ASSERT (elf_hash_table (flinfo->info) 9918 ->tls_sec != NULL); 9919 sym.st_value -= (elf_hash_table (flinfo->info) 9920 ->tls_sec->vma); 9921 } 9922 } 9923 9924 indx = bfd_get_symcount (output_bfd); 9925 ret = elf_link_output_sym (flinfo, name, &sym, sec, 9926 NULL); 9927 if (ret == 0) 9928 return FALSE; 9929 else if (ret == 1) 9930 flinfo->indices[r_symndx] = indx; 9931 else 9932 abort (); 9933 } 9934 9935 r_symndx = flinfo->indices[r_symndx]; 9936 } 9937 9938 irela->r_info = ((bfd_vma) r_symndx << r_sym_shift 9939 | (irela->r_info & r_type_mask)); 9940 } 9941 9942 /* Swap out the relocs. */ 9943 input_rel_hdr = esdi->rel.hdr; 9944 if (input_rel_hdr && input_rel_hdr->sh_size != 0) 9945 { 9946 if (!bed->elf_backend_emit_relocs (output_bfd, o, 9947 input_rel_hdr, 9948 internal_relocs, 9949 rel_hash_list)) 9950 return FALSE; 9951 internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr) 9952 * bed->s->int_rels_per_ext_rel); 9953 rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr); 9954 } 9955 9956 input_rela_hdr = esdi->rela.hdr; 9957 if (input_rela_hdr && input_rela_hdr->sh_size != 0) 9958 { 9959 if (!bed->elf_backend_emit_relocs (output_bfd, o, 9960 input_rela_hdr, 9961 internal_relocs, 9962 rela_hash_list)) 9963 return FALSE; 9964 } 9965 } 9966 } 9967 9968 /* Write out the modified section contents. */ 9969 if (bed->elf_backend_write_section 9970 && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o, 9971 contents)) 9972 { 9973 /* Section written out. */ 9974 } 9975 else switch (o->sec_info_type) 9976 { 9977 case SEC_INFO_TYPE_STABS: 9978 if (! (_bfd_write_section_stabs 9979 (output_bfd, 9980 &elf_hash_table (flinfo->info)->stab_info, 9981 o, &elf_section_data (o)->sec_info, contents))) 9982 return FALSE; 9983 break; 9984 case SEC_INFO_TYPE_MERGE: 9985 if (! _bfd_write_merged_section (output_bfd, o, 9986 elf_section_data (o)->sec_info)) 9987 return FALSE; 9988 break; 9989 case SEC_INFO_TYPE_EH_FRAME: 9990 { 9991 if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info, 9992 o, contents)) 9993 return FALSE; 9994 } 9995 break; 9996 default: 9997 { 9998 /* FIXME: octets_per_byte. */ 9999 if (! (o->flags & SEC_EXCLUDE)) 10000 { 10001 file_ptr offset = (file_ptr) o->output_offset; 10002 bfd_size_type todo = o->size; 10003 if ((o->flags & SEC_ELF_REVERSE_COPY)) 10004 { 10005 /* Reverse-copy input section to output. */ 10006 do 10007 { 10008 todo -= address_size; 10009 if (! bfd_set_section_contents (output_bfd, 10010 o->output_section, 10011 contents + todo, 10012 offset, 10013 address_size)) 10014 return FALSE; 10015 if (todo == 0) 10016 break; 10017 offset += address_size; 10018 } 10019 while (1); 10020 } 10021 else if (! bfd_set_section_contents (output_bfd, 10022 o->output_section, 10023 contents, 10024 offset, todo)) 10025 return FALSE; 10026 } 10027 } 10028 break; 10029 } 10030 } 10031 10032 return TRUE; 10033 } 10034 10035 /* Generate a reloc when linking an ELF file. This is a reloc 10036 requested by the linker, and does not come from any input file. This 10037 is used to build constructor and destructor tables when linking 10038 with -Ur. */ 10039 10040 static bfd_boolean 10041 elf_reloc_link_order (bfd *output_bfd, 10042 struct bfd_link_info *info, 10043 asection *output_section, 10044 struct bfd_link_order *link_order) 10045 { 10046 reloc_howto_type *howto; 10047 long indx; 10048 bfd_vma offset; 10049 bfd_vma addend; 10050 struct bfd_elf_section_reloc_data *reldata; 10051 struct elf_link_hash_entry **rel_hash_ptr; 10052 Elf_Internal_Shdr *rel_hdr; 10053 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); 10054 Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL]; 10055 bfd_byte *erel; 10056 unsigned int i; 10057 struct bfd_elf_section_data *esdo = elf_section_data (output_section); 10058 10059 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc); 10060 if (howto == NULL) 10061 { 10062 bfd_set_error (bfd_error_bad_value); 10063 return FALSE; 10064 } 10065 10066 addend = link_order->u.reloc.p->addend; 10067 10068 if (esdo->rel.hdr) 10069 reldata = &esdo->rel; 10070 else if (esdo->rela.hdr) 10071 reldata = &esdo->rela; 10072 else 10073 { 10074 reldata = NULL; 10075 BFD_ASSERT (0); 10076 } 10077 10078 /* Figure out the symbol index. */ 10079 rel_hash_ptr = reldata->hashes + reldata->count; 10080 if (link_order->type == bfd_section_reloc_link_order) 10081 { 10082 indx = link_order->u.reloc.p->u.section->target_index; 10083 BFD_ASSERT (indx != 0); 10084 *rel_hash_ptr = NULL; 10085 } 10086 else 10087 { 10088 struct elf_link_hash_entry *h; 10089 10090 /* Treat a reloc against a defined symbol as though it were 10091 actually against the section. */ 10092 h = ((struct elf_link_hash_entry *) 10093 bfd_wrapped_link_hash_lookup (output_bfd, info, 10094 link_order->u.reloc.p->u.name, 10095 FALSE, FALSE, TRUE)); 10096 if (h != NULL 10097 && (h->root.type == bfd_link_hash_defined 10098 || h->root.type == bfd_link_hash_defweak)) 10099 { 10100 asection *section; 10101 10102 section = h->root.u.def.section; 10103 indx = section->output_section->target_index; 10104 *rel_hash_ptr = NULL; 10105 /* It seems that we ought to add the symbol value to the 10106 addend here, but in practice it has already been added 10107 because it was passed to constructor_callback. */ 10108 addend += section->output_section->vma + section->output_offset; 10109 } 10110 else if (h != NULL) 10111 { 10112 /* Setting the index to -2 tells elf_link_output_extsym that 10113 this symbol is used by a reloc. */ 10114 h->indx = -2; 10115 *rel_hash_ptr = h; 10116 indx = 0; 10117 } 10118 else 10119 { 10120 if (! ((*info->callbacks->unattached_reloc) 10121 (info, link_order->u.reloc.p->u.name, NULL, NULL, 0))) 10122 return FALSE; 10123 indx = 0; 10124 } 10125 } 10126 10127 /* If this is an inplace reloc, we must write the addend into the 10128 object file. */ 10129 if (howto->partial_inplace && addend != 0) 10130 { 10131 bfd_size_type size; 10132 bfd_reloc_status_type rstat; 10133 bfd_byte *buf; 10134 bfd_boolean ok; 10135 const char *sym_name; 10136 10137 size = (bfd_size_type) bfd_get_reloc_size (howto); 10138 buf = (bfd_byte *) bfd_zmalloc (size); 10139 if (buf == NULL) 10140 return FALSE; 10141 rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf); 10142 switch (rstat) 10143 { 10144 case bfd_reloc_ok: 10145 break; 10146 10147 default: 10148 case bfd_reloc_outofrange: 10149 abort (); 10150 10151 case bfd_reloc_overflow: 10152 if (link_order->type == bfd_section_reloc_link_order) 10153 sym_name = bfd_section_name (output_bfd, 10154 link_order->u.reloc.p->u.section); 10155 else 10156 sym_name = link_order->u.reloc.p->u.name; 10157 if (! ((*info->callbacks->reloc_overflow) 10158 (info, NULL, sym_name, howto->name, addend, NULL, 10159 NULL, (bfd_vma) 0))) 10160 { 10161 free (buf); 10162 return FALSE; 10163 } 10164 break; 10165 } 10166 ok = bfd_set_section_contents (output_bfd, output_section, buf, 10167 link_order->offset, size); 10168 free (buf); 10169 if (! ok) 10170 return FALSE; 10171 } 10172 10173 /* The address of a reloc is relative to the section in a 10174 relocatable file, and is a virtual address in an executable 10175 file. */ 10176 offset = link_order->offset; 10177 if (! info->relocatable) 10178 offset += output_section->vma; 10179 10180 for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) 10181 { 10182 irel[i].r_offset = offset; 10183 irel[i].r_info = 0; 10184 irel[i].r_addend = 0; 10185 } 10186 if (bed->s->arch_size == 32) 10187 irel[0].r_info = ELF32_R_INFO (indx, howto->type); 10188 else 10189 #ifdef BFD64 10190 { 10191 bfd_uint64_t indx64 = indx; 10192 irel[0].r_info = ELF64_R_INFO (indx64, howto->type); 10193 } 10194 #else 10195 BFD_FAIL(); 10196 #endif 10197 10198 rel_hdr = reldata->hdr; 10199 erel = rel_hdr->contents; 10200 if (rel_hdr->sh_type == SHT_REL) 10201 { 10202 erel += reldata->count * bed->s->sizeof_rel; 10203 (*bed->s->swap_reloc_out) (output_bfd, irel, erel); 10204 } 10205 else 10206 { 10207 irel[0].r_addend = addend; 10208 erel += reldata->count * bed->s->sizeof_rela; 10209 (*bed->s->swap_reloca_out) (output_bfd, irel, erel); 10210 } 10211 10212 ++reldata->count; 10213 10214 return TRUE; 10215 } 10216 10217 10218 /* Get the output vma of the section pointed to by the sh_link field. */ 10219 10220 static bfd_vma 10221 elf_get_linked_section_vma (struct bfd_link_order *p) 10222 { 10223 Elf_Internal_Shdr **elf_shdrp; 10224 asection *s; 10225 int elfsec; 10226 10227 s = p->u.indirect.section; 10228 elf_shdrp = elf_elfsections (s->owner); 10229 elfsec = _bfd_elf_section_from_bfd_section (s->owner, s); 10230 elfsec = elf_shdrp[elfsec]->sh_link; 10231 /* PR 290: 10232 The Intel C compiler generates SHT_IA_64_UNWIND with 10233 SHF_LINK_ORDER. But it doesn't set the sh_link or 10234 sh_info fields. Hence we could get the situation 10235 where elfsec is 0. */ 10236 if (elfsec == 0) 10237 { 10238 const struct elf_backend_data *bed 10239 = get_elf_backend_data (s->owner); 10240 if (bed->link_order_error_handler) 10241 bed->link_order_error_handler 10242 (_("%B: warning: sh_link not set for section `%A'"), s->owner, s); 10243 return 0; 10244 } 10245 else 10246 { 10247 s = elf_shdrp[elfsec]->bfd_section; 10248 return s->output_section->vma + s->output_offset; 10249 } 10250 } 10251 10252 10253 /* Compare two sections based on the locations of the sections they are 10254 linked to. Used by elf_fixup_link_order. */ 10255 10256 static int 10257 compare_link_order (const void * a, const void * b) 10258 { 10259 bfd_vma apos; 10260 bfd_vma bpos; 10261 10262 apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a); 10263 bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b); 10264 if (apos < bpos) 10265 return -1; 10266 return apos > bpos; 10267 } 10268 10269 10270 /* Looks for sections with SHF_LINK_ORDER set. Rearranges them into the same 10271 order as their linked sections. Returns false if this could not be done 10272 because an output section includes both ordered and unordered 10273 sections. Ideally we'd do this in the linker proper. */ 10274 10275 static bfd_boolean 10276 elf_fixup_link_order (bfd *abfd, asection *o) 10277 { 10278 int seen_linkorder; 10279 int seen_other; 10280 int n; 10281 struct bfd_link_order *p; 10282 bfd *sub; 10283 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 10284 unsigned elfsec; 10285 struct bfd_link_order **sections; 10286 asection *s, *other_sec, *linkorder_sec; 10287 bfd_vma offset; 10288 10289 other_sec = NULL; 10290 linkorder_sec = NULL; 10291 seen_other = 0; 10292 seen_linkorder = 0; 10293 for (p = o->map_head.link_order; p != NULL; p = p->next) 10294 { 10295 if (p->type == bfd_indirect_link_order) 10296 { 10297 s = p->u.indirect.section; 10298 sub = s->owner; 10299 if (bfd_get_flavour (sub) == bfd_target_elf_flavour 10300 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass 10301 && (elfsec = _bfd_elf_section_from_bfd_section (sub, s)) 10302 && elfsec < elf_numsections (sub) 10303 && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER 10304 && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub)) 10305 { 10306 seen_linkorder++; 10307 linkorder_sec = s; 10308 } 10309 else 10310 { 10311 seen_other++; 10312 other_sec = s; 10313 } 10314 } 10315 else 10316 seen_other++; 10317 10318 if (seen_other && seen_linkorder) 10319 { 10320 if (other_sec && linkorder_sec) 10321 (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"), 10322 o, linkorder_sec, 10323 linkorder_sec->owner, other_sec, 10324 other_sec->owner); 10325 else 10326 (*_bfd_error_handler) (_("%A has both ordered and unordered sections"), 10327 o); 10328 bfd_set_error (bfd_error_bad_value); 10329 return FALSE; 10330 } 10331 } 10332 10333 if (!seen_linkorder) 10334 return TRUE; 10335 10336 sections = (struct bfd_link_order **) 10337 bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *)); 10338 if (sections == NULL) 10339 return FALSE; 10340 seen_linkorder = 0; 10341 10342 for (p = o->map_head.link_order; p != NULL; p = p->next) 10343 { 10344 sections[seen_linkorder++] = p; 10345 } 10346 /* Sort the input sections in the order of their linked section. */ 10347 qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *), 10348 compare_link_order); 10349 10350 /* Change the offsets of the sections. */ 10351 offset = 0; 10352 for (n = 0; n < seen_linkorder; n++) 10353 { 10354 s = sections[n]->u.indirect.section; 10355 offset &= ~(bfd_vma) 0 << s->alignment_power; 10356 s->output_offset = offset; 10357 sections[n]->offset = offset; 10358 /* FIXME: octets_per_byte. */ 10359 offset += sections[n]->size; 10360 } 10361 10362 free (sections); 10363 return TRUE; 10364 } 10365 10366 10367 /* Do the final step of an ELF link. */ 10368 10369 bfd_boolean 10370 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) 10371 { 10372 bfd_boolean dynamic; 10373 bfd_boolean emit_relocs; 10374 bfd *dynobj; 10375 struct elf_final_link_info flinfo; 10376 asection *o; 10377 struct bfd_link_order *p; 10378 bfd *sub; 10379 bfd_size_type max_contents_size; 10380 bfd_size_type max_external_reloc_size; 10381 bfd_size_type max_internal_reloc_count; 10382 bfd_size_type max_sym_count; 10383 bfd_size_type max_sym_shndx_count; 10384 file_ptr off; 10385 Elf_Internal_Sym elfsym; 10386 unsigned int i; 10387 Elf_Internal_Shdr *symtab_hdr; 10388 Elf_Internal_Shdr *symtab_shndx_hdr; 10389 Elf_Internal_Shdr *symstrtab_hdr; 10390 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 10391 struct elf_outext_info eoinfo; 10392 bfd_boolean merged; 10393 size_t relativecount = 0; 10394 asection *reldyn = 0; 10395 bfd_size_type amt; 10396 asection *attr_section = NULL; 10397 bfd_vma attr_size = 0; 10398 const char *std_attrs_section; 10399 10400 if (! is_elf_hash_table (info->hash)) 10401 return FALSE; 10402 10403 if (info->shared) 10404 abfd->flags |= DYNAMIC; 10405 10406 dynamic = elf_hash_table (info)->dynamic_sections_created; 10407 dynobj = elf_hash_table (info)->dynobj; 10408 10409 emit_relocs = (info->relocatable 10410 || info->emitrelocations); 10411 10412 flinfo.info = info; 10413 flinfo.output_bfd = abfd; 10414 flinfo.symstrtab = _bfd_elf_stringtab_init (); 10415 if (flinfo.symstrtab == NULL) 10416 return FALSE; 10417 10418 if (! dynamic) 10419 { 10420 flinfo.dynsym_sec = NULL; 10421 flinfo.hash_sec = NULL; 10422 flinfo.symver_sec = NULL; 10423 } 10424 else 10425 { 10426 flinfo.dynsym_sec = bfd_get_linker_section (dynobj, ".dynsym"); 10427 flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash"); 10428 /* Note that dynsym_sec can be NULL (on VMS). */ 10429 flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version"); 10430 /* Note that it is OK if symver_sec is NULL. */ 10431 } 10432 10433 flinfo.contents = NULL; 10434 flinfo.external_relocs = NULL; 10435 flinfo.internal_relocs = NULL; 10436 flinfo.external_syms = NULL; 10437 flinfo.locsym_shndx = NULL; 10438 flinfo.internal_syms = NULL; 10439 flinfo.indices = NULL; 10440 flinfo.sections = NULL; 10441 flinfo.symbuf = NULL; 10442 flinfo.symshndxbuf = NULL; 10443 flinfo.symbuf_count = 0; 10444 flinfo.shndxbuf_size = 0; 10445 flinfo.filesym_count = 0; 10446 10447 /* The object attributes have been merged. Remove the input 10448 sections from the link, and set the contents of the output 10449 secton. */ 10450 std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section; 10451 for (o = abfd->sections; o != NULL; o = o->next) 10452 { 10453 if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0) 10454 || strcmp (o->name, ".gnu.attributes") == 0) 10455 { 10456 for (p = o->map_head.link_order; p != NULL; p = p->next) 10457 { 10458 asection *input_section; 10459 10460 if (p->type != bfd_indirect_link_order) 10461 continue; 10462 input_section = p->u.indirect.section; 10463 /* Hack: reset the SEC_HAS_CONTENTS flag so that 10464 elf_link_input_bfd ignores this section. */ 10465 input_section->flags &= ~SEC_HAS_CONTENTS; 10466 } 10467 10468 attr_size = bfd_elf_obj_attr_size (abfd); 10469 if (attr_size) 10470 { 10471 bfd_set_section_size (abfd, o, attr_size); 10472 attr_section = o; 10473 /* Skip this section later on. */ 10474 o->map_head.link_order = NULL; 10475 } 10476 else 10477 o->flags |= SEC_EXCLUDE; 10478 } 10479 } 10480 10481 /* Count up the number of relocations we will output for each output 10482 section, so that we know the sizes of the reloc sections. We 10483 also figure out some maximum sizes. */ 10484 max_contents_size = 0; 10485 max_external_reloc_size = 0; 10486 max_internal_reloc_count = 0; 10487 max_sym_count = 0; 10488 max_sym_shndx_count = 0; 10489 merged = FALSE; 10490 for (o = abfd->sections; o != NULL; o = o->next) 10491 { 10492 struct bfd_elf_section_data *esdo = elf_section_data (o); 10493 o->reloc_count = 0; 10494 10495 for (p = o->map_head.link_order; p != NULL; p = p->next) 10496 { 10497 unsigned int reloc_count = 0; 10498 struct bfd_elf_section_data *esdi = NULL; 10499 10500 if (p->type == bfd_section_reloc_link_order 10501 || p->type == bfd_symbol_reloc_link_order) 10502 reloc_count = 1; 10503 else if (p->type == bfd_indirect_link_order) 10504 { 10505 asection *sec; 10506 10507 sec = p->u.indirect.section; 10508 esdi = elf_section_data (sec); 10509 10510 /* Mark all sections which are to be included in the 10511 link. This will normally be every section. We need 10512 to do this so that we can identify any sections which 10513 the linker has decided to not include. */ 10514 sec->linker_mark = TRUE; 10515 10516 if (sec->flags & SEC_MERGE) 10517 merged = TRUE; 10518 10519 if (esdo->this_hdr.sh_type == SHT_REL 10520 || esdo->this_hdr.sh_type == SHT_RELA) 10521 /* Some backends use reloc_count in relocation sections 10522 to count particular types of relocs. Of course, 10523 reloc sections themselves can't have relocations. */ 10524 reloc_count = 0; 10525 else if (info->relocatable || info->emitrelocations) 10526 reloc_count = sec->reloc_count; 10527 else if (bed->elf_backend_count_relocs) 10528 reloc_count = (*bed->elf_backend_count_relocs) (info, sec); 10529 10530 if (sec->rawsize > max_contents_size) 10531 max_contents_size = sec->rawsize; 10532 if (sec->size > max_contents_size) 10533 max_contents_size = sec->size; 10534 10535 /* We are interested in just local symbols, not all 10536 symbols. */ 10537 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour 10538 && (sec->owner->flags & DYNAMIC) == 0) 10539 { 10540 size_t sym_count; 10541 10542 if (elf_bad_symtab (sec->owner)) 10543 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size 10544 / bed->s->sizeof_sym); 10545 else 10546 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info; 10547 10548 if (sym_count > max_sym_count) 10549 max_sym_count = sym_count; 10550 10551 if (sym_count > max_sym_shndx_count 10552 && elf_symtab_shndx (sec->owner) != 0) 10553 max_sym_shndx_count = sym_count; 10554 10555 if ((sec->flags & SEC_RELOC) != 0) 10556 { 10557 size_t ext_size = 0; 10558 10559 if (esdi->rel.hdr != NULL) 10560 ext_size = esdi->rel.hdr->sh_size; 10561 if (esdi->rela.hdr != NULL) 10562 ext_size += esdi->rela.hdr->sh_size; 10563 10564 if (ext_size > max_external_reloc_size) 10565 max_external_reloc_size = ext_size; 10566 if (sec->reloc_count > max_internal_reloc_count) 10567 max_internal_reloc_count = sec->reloc_count; 10568 } 10569 } 10570 } 10571 10572 if (reloc_count == 0) 10573 continue; 10574 10575 o->reloc_count += reloc_count; 10576 10577 if (p->type == bfd_indirect_link_order 10578 && (info->relocatable || info->emitrelocations)) 10579 { 10580 if (esdi->rel.hdr) 10581 esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr); 10582 if (esdi->rela.hdr) 10583 esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr); 10584 } 10585 else 10586 { 10587 if (o->use_rela_p) 10588 esdo->rela.count += reloc_count; 10589 else 10590 esdo->rel.count += reloc_count; 10591 } 10592 } 10593 10594 if (o->reloc_count > 0) 10595 o->flags |= SEC_RELOC; 10596 else 10597 { 10598 /* Explicitly clear the SEC_RELOC flag. The linker tends to 10599 set it (this is probably a bug) and if it is set 10600 assign_section_numbers will create a reloc section. */ 10601 o->flags &=~ SEC_RELOC; 10602 } 10603 10604 /* If the SEC_ALLOC flag is not set, force the section VMA to 10605 zero. This is done in elf_fake_sections as well, but forcing 10606 the VMA to 0 here will ensure that relocs against these 10607 sections are handled correctly. */ 10608 if ((o->flags & SEC_ALLOC) == 0 10609 && ! o->user_set_vma) 10610 o->vma = 0; 10611 } 10612 10613 if (! info->relocatable && merged) 10614 elf_link_hash_traverse (elf_hash_table (info), 10615 _bfd_elf_link_sec_merge_syms, abfd); 10616 10617 /* Figure out the file positions for everything but the symbol table 10618 and the relocs. We set symcount to force assign_section_numbers 10619 to create a symbol table. */ 10620 bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1; 10621 BFD_ASSERT (! abfd->output_has_begun); 10622 if (! _bfd_elf_compute_section_file_positions (abfd, info)) 10623 goto error_return; 10624 10625 /* Set sizes, and assign file positions for reloc sections. */ 10626 for (o = abfd->sections; o != NULL; o = o->next) 10627 { 10628 struct bfd_elf_section_data *esdo = elf_section_data (o); 10629 if ((o->flags & SEC_RELOC) != 0) 10630 { 10631 if (esdo->rel.hdr 10632 && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel))) 10633 goto error_return; 10634 10635 if (esdo->rela.hdr 10636 && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela))) 10637 goto error_return; 10638 } 10639 10640 /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them 10641 to count upwards while actually outputting the relocations. */ 10642 esdo->rel.count = 0; 10643 esdo->rela.count = 0; 10644 } 10645 10646 _bfd_elf_assign_file_positions_for_relocs (abfd); 10647 10648 /* We have now assigned file positions for all the sections except 10649 .symtab and .strtab. We start the .symtab section at the current 10650 file position, and write directly to it. We build the .strtab 10651 section in memory. */ 10652 bfd_get_symcount (abfd) = 0; 10653 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 10654 /* sh_name is set in prep_headers. */ 10655 symtab_hdr->sh_type = SHT_SYMTAB; 10656 /* sh_flags, sh_addr and sh_size all start off zero. */ 10657 symtab_hdr->sh_entsize = bed->s->sizeof_sym; 10658 /* sh_link is set in assign_section_numbers. */ 10659 /* sh_info is set below. */ 10660 /* sh_offset is set just below. */ 10661 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align; 10662 10663 off = elf_tdata (abfd)->next_file_pos; 10664 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE); 10665 10666 /* Note that at this point elf_tdata (abfd)->next_file_pos is 10667 incorrect. We do not yet know the size of the .symtab section. 10668 We correct next_file_pos below, after we do know the size. */ 10669 10670 /* Allocate a buffer to hold swapped out symbols. This is to avoid 10671 continuously seeking to the right position in the file. */ 10672 if (! info->keep_memory || max_sym_count < 20) 10673 flinfo.symbuf_size = 20; 10674 else 10675 flinfo.symbuf_size = max_sym_count; 10676 amt = flinfo.symbuf_size; 10677 amt *= bed->s->sizeof_sym; 10678 flinfo.symbuf = (bfd_byte *) bfd_malloc (amt); 10679 if (flinfo.symbuf == NULL) 10680 goto error_return; 10681 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)) 10682 { 10683 /* Wild guess at number of output symbols. realloc'd as needed. */ 10684 amt = 2 * max_sym_count + elf_numsections (abfd) + 1000; 10685 flinfo.shndxbuf_size = amt; 10686 amt *= sizeof (Elf_External_Sym_Shndx); 10687 flinfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt); 10688 if (flinfo.symshndxbuf == NULL) 10689 goto error_return; 10690 } 10691 10692 /* Start writing out the symbol table. The first symbol is always a 10693 dummy symbol. */ 10694 if (info->strip != strip_all 10695 || emit_relocs) 10696 { 10697 elfsym.st_value = 0; 10698 elfsym.st_size = 0; 10699 elfsym.st_info = 0; 10700 elfsym.st_other = 0; 10701 elfsym.st_shndx = SHN_UNDEF; 10702 elfsym.st_target_internal = 0; 10703 if (elf_link_output_sym (&flinfo, NULL, &elfsym, bfd_und_section_ptr, 10704 NULL) != 1) 10705 goto error_return; 10706 } 10707 10708 /* Output a symbol for each section. We output these even if we are 10709 discarding local symbols, since they are used for relocs. These 10710 symbols have no names. We store the index of each one in the 10711 index field of the section, so that we can find it again when 10712 outputting relocs. */ 10713 if (info->strip != strip_all 10714 || emit_relocs) 10715 { 10716 elfsym.st_size = 0; 10717 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); 10718 elfsym.st_other = 0; 10719 elfsym.st_value = 0; 10720 elfsym.st_target_internal = 0; 10721 for (i = 1; i < elf_numsections (abfd); i++) 10722 { 10723 o = bfd_section_from_elf_index (abfd, i); 10724 if (o != NULL) 10725 { 10726 o->target_index = bfd_get_symcount (abfd); 10727 elfsym.st_shndx = i; 10728 if (!info->relocatable) 10729 elfsym.st_value = o->vma; 10730 if (elf_link_output_sym (&flinfo, NULL, &elfsym, o, NULL) != 1) 10731 goto error_return; 10732 } 10733 } 10734 } 10735 10736 /* Allocate some memory to hold information read in from the input 10737 files. */ 10738 if (max_contents_size != 0) 10739 { 10740 flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); 10741 if (flinfo.contents == NULL) 10742 goto error_return; 10743 } 10744 10745 if (max_external_reloc_size != 0) 10746 { 10747 flinfo.external_relocs = bfd_malloc (max_external_reloc_size); 10748 if (flinfo.external_relocs == NULL) 10749 goto error_return; 10750 } 10751 10752 if (max_internal_reloc_count != 0) 10753 { 10754 amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel; 10755 amt *= sizeof (Elf_Internal_Rela); 10756 flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt); 10757 if (flinfo.internal_relocs == NULL) 10758 goto error_return; 10759 } 10760 10761 if (max_sym_count != 0) 10762 { 10763 amt = max_sym_count * bed->s->sizeof_sym; 10764 flinfo.external_syms = (bfd_byte *) bfd_malloc (amt); 10765 if (flinfo.external_syms == NULL) 10766 goto error_return; 10767 10768 amt = max_sym_count * sizeof (Elf_Internal_Sym); 10769 flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt); 10770 if (flinfo.internal_syms == NULL) 10771 goto error_return; 10772 10773 amt = max_sym_count * sizeof (long); 10774 flinfo.indices = (long int *) bfd_malloc (amt); 10775 if (flinfo.indices == NULL) 10776 goto error_return; 10777 10778 amt = max_sym_count * sizeof (asection *); 10779 flinfo.sections = (asection **) bfd_malloc (amt); 10780 if (flinfo.sections == NULL) 10781 goto error_return; 10782 } 10783 10784 if (max_sym_shndx_count != 0) 10785 { 10786 amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx); 10787 flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt); 10788 if (flinfo.locsym_shndx == NULL) 10789 goto error_return; 10790 } 10791 10792 if (elf_hash_table (info)->tls_sec) 10793 { 10794 bfd_vma base, end = 0; 10795 asection *sec; 10796 10797 for (sec = elf_hash_table (info)->tls_sec; 10798 sec && (sec->flags & SEC_THREAD_LOCAL); 10799 sec = sec->next) 10800 { 10801 bfd_size_type size = sec->size; 10802 10803 if (size == 0 10804 && (sec->flags & SEC_HAS_CONTENTS) == 0) 10805 { 10806 struct bfd_link_order *ord = sec->map_tail.link_order; 10807 10808 if (ord != NULL) 10809 size = ord->offset + ord->size; 10810 } 10811 end = sec->vma + size; 10812 } 10813 base = elf_hash_table (info)->tls_sec->vma; 10814 /* Only align end of TLS section if static TLS doesn't have special 10815 alignment requirements. */ 10816 if (bed->static_tls_alignment == 1) 10817 end = align_power (end, 10818 elf_hash_table (info)->tls_sec->alignment_power); 10819 elf_hash_table (info)->tls_size = end - base; 10820 } 10821 10822 /* Reorder SHF_LINK_ORDER sections. */ 10823 for (o = abfd->sections; o != NULL; o = o->next) 10824 { 10825 if (!elf_fixup_link_order (abfd, o)) 10826 return FALSE; 10827 } 10828 10829 /* Since ELF permits relocations to be against local symbols, we 10830 must have the local symbols available when we do the relocations. 10831 Since we would rather only read the local symbols once, and we 10832 would rather not keep them in memory, we handle all the 10833 relocations for a single input file at the same time. 10834 10835 Unfortunately, there is no way to know the total number of local 10836 symbols until we have seen all of them, and the local symbol 10837 indices precede the global symbol indices. This means that when 10838 we are generating relocatable output, and we see a reloc against 10839 a global symbol, we can not know the symbol index until we have 10840 finished examining all the local symbols to see which ones we are 10841 going to output. To deal with this, we keep the relocations in 10842 memory, and don't output them until the end of the link. This is 10843 an unfortunate waste of memory, but I don't see a good way around 10844 it. Fortunately, it only happens when performing a relocatable 10845 link, which is not the common case. FIXME: If keep_memory is set 10846 we could write the relocs out and then read them again; I don't 10847 know how bad the memory loss will be. */ 10848 10849 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 10850 sub->output_has_begun = FALSE; 10851 for (o = abfd->sections; o != NULL; o = o->next) 10852 { 10853 for (p = o->map_head.link_order; p != NULL; p = p->next) 10854 { 10855 if (p->type == bfd_indirect_link_order 10856 && (bfd_get_flavour ((sub = p->u.indirect.section->owner)) 10857 == bfd_target_elf_flavour) 10858 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass) 10859 { 10860 if (! sub->output_has_begun) 10861 { 10862 if (! elf_link_input_bfd (&flinfo, sub)) 10863 goto error_return; 10864 sub->output_has_begun = TRUE; 10865 } 10866 } 10867 else if (p->type == bfd_section_reloc_link_order 10868 || p->type == bfd_symbol_reloc_link_order) 10869 { 10870 if (! elf_reloc_link_order (abfd, info, o, p)) 10871 goto error_return; 10872 } 10873 else 10874 { 10875 if (! _bfd_default_link_order (abfd, info, o, p)) 10876 { 10877 if (p->type == bfd_indirect_link_order 10878 && (bfd_get_flavour (sub) 10879 == bfd_target_elf_flavour) 10880 && (elf_elfheader (sub)->e_ident[EI_CLASS] 10881 != bed->s->elfclass)) 10882 { 10883 const char *iclass, *oclass; 10884 10885 if (bed->s->elfclass == ELFCLASS64) 10886 { 10887 iclass = "ELFCLASS32"; 10888 oclass = "ELFCLASS64"; 10889 } 10890 else 10891 { 10892 iclass = "ELFCLASS64"; 10893 oclass = "ELFCLASS32"; 10894 } 10895 10896 bfd_set_error (bfd_error_wrong_format); 10897 (*_bfd_error_handler) 10898 (_("%B: file class %s incompatible with %s"), 10899 sub, iclass, oclass); 10900 } 10901 10902 goto error_return; 10903 } 10904 } 10905 } 10906 } 10907 10908 /* Free symbol buffer if needed. */ 10909 if (!info->reduce_memory_overheads) 10910 { 10911 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 10912 if (bfd_get_flavour (sub) == bfd_target_elf_flavour 10913 && elf_tdata (sub)->symbuf) 10914 { 10915 free (elf_tdata (sub)->symbuf); 10916 elf_tdata (sub)->symbuf = NULL; 10917 } 10918 } 10919 10920 /* Output a FILE symbol so that following locals are not associated 10921 with the wrong input file. */ 10922 memset (&elfsym, 0, sizeof (elfsym)); 10923 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE); 10924 elfsym.st_shndx = SHN_ABS; 10925 10926 if (flinfo.filesym_count > 1 10927 && !elf_link_output_sym (&flinfo, NULL, &elfsym, 10928 bfd_und_section_ptr, NULL)) 10929 return FALSE; 10930 10931 /* Output any global symbols that got converted to local in a 10932 version script or due to symbol visibility. We do this in a 10933 separate step since ELF requires all local symbols to appear 10934 prior to any global symbols. FIXME: We should only do this if 10935 some global symbols were, in fact, converted to become local. 10936 FIXME: Will this work correctly with the Irix 5 linker? */ 10937 eoinfo.failed = FALSE; 10938 eoinfo.flinfo = &flinfo; 10939 eoinfo.localsyms = TRUE; 10940 eoinfo.need_second_pass = FALSE; 10941 eoinfo.second_pass = FALSE; 10942 bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo); 10943 if (eoinfo.failed) 10944 return FALSE; 10945 10946 if (flinfo.filesym_count == 1 10947 && !elf_link_output_sym (&flinfo, NULL, &elfsym, 10948 bfd_und_section_ptr, NULL)) 10949 return FALSE; 10950 10951 if (eoinfo.need_second_pass) 10952 { 10953 eoinfo.second_pass = TRUE; 10954 bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo); 10955 if (eoinfo.failed) 10956 return FALSE; 10957 } 10958 10959 /* If backend needs to output some local symbols not present in the hash 10960 table, do it now. */ 10961 if (bed->elf_backend_output_arch_local_syms) 10962 { 10963 typedef int (*out_sym_func) 10964 (void *, const char *, Elf_Internal_Sym *, asection *, 10965 struct elf_link_hash_entry *); 10966 10967 if (! ((*bed->elf_backend_output_arch_local_syms) 10968 (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym))) 10969 return FALSE; 10970 } 10971 10972 /* That wrote out all the local symbols. Finish up the symbol table 10973 with the global symbols. Even if we want to strip everything we 10974 can, we still need to deal with those global symbols that got 10975 converted to local in a version script. */ 10976 10977 /* The sh_info field records the index of the first non local symbol. */ 10978 symtab_hdr->sh_info = bfd_get_symcount (abfd); 10979 10980 if (dynamic 10981 && flinfo.dynsym_sec != NULL 10982 && flinfo.dynsym_sec->output_section != bfd_abs_section_ptr) 10983 { 10984 Elf_Internal_Sym sym; 10985 bfd_byte *dynsym = flinfo.dynsym_sec->contents; 10986 long last_local = 0; 10987 10988 /* Write out the section symbols for the output sections. */ 10989 if (info->shared || elf_hash_table (info)->is_relocatable_executable) 10990 { 10991 asection *s; 10992 10993 sym.st_size = 0; 10994 sym.st_name = 0; 10995 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); 10996 sym.st_other = 0; 10997 sym.st_target_internal = 0; 10998 10999 for (s = abfd->sections; s != NULL; s = s->next) 11000 { 11001 int indx; 11002 bfd_byte *dest; 11003 long dynindx; 11004 11005 dynindx = elf_section_data (s)->dynindx; 11006 if (dynindx <= 0) 11007 continue; 11008 indx = elf_section_data (s)->this_idx; 11009 BFD_ASSERT (indx > 0); 11010 sym.st_shndx = indx; 11011 if (! check_dynsym (abfd, &sym)) 11012 return FALSE; 11013 sym.st_value = s->vma; 11014 dest = dynsym + dynindx * bed->s->sizeof_sym; 11015 if (last_local < dynindx) 11016 last_local = dynindx; 11017 bed->s->swap_symbol_out (abfd, &sym, dest, 0); 11018 } 11019 } 11020 11021 /* Write out the local dynsyms. */ 11022 if (elf_hash_table (info)->dynlocal) 11023 { 11024 struct elf_link_local_dynamic_entry *e; 11025 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next) 11026 { 11027 asection *s; 11028 bfd_byte *dest; 11029 11030 /* Copy the internal symbol and turn off visibility. 11031 Note that we saved a word of storage and overwrote 11032 the original st_name with the dynstr_index. */ 11033 sym = e->isym; 11034 sym.st_other &= ~ELF_ST_VISIBILITY (-1); 11035 11036 s = bfd_section_from_elf_index (e->input_bfd, 11037 e->isym.st_shndx); 11038 if (s != NULL) 11039 { 11040 sym.st_shndx = 11041 elf_section_data (s->output_section)->this_idx; 11042 if (! check_dynsym (abfd, &sym)) 11043 return FALSE; 11044 sym.st_value = (s->output_section->vma 11045 + s->output_offset 11046 + e->isym.st_value); 11047 } 11048 11049 if (last_local < e->dynindx) 11050 last_local = e->dynindx; 11051 11052 dest = dynsym + e->dynindx * bed->s->sizeof_sym; 11053 bed->s->swap_symbol_out (abfd, &sym, dest, 0); 11054 } 11055 } 11056 11057 elf_section_data (flinfo.dynsym_sec->output_section)->this_hdr.sh_info = 11058 last_local + 1; 11059 } 11060 11061 /* We get the global symbols from the hash table. */ 11062 eoinfo.failed = FALSE; 11063 eoinfo.localsyms = FALSE; 11064 eoinfo.flinfo = &flinfo; 11065 bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo); 11066 if (eoinfo.failed) 11067 return FALSE; 11068 11069 /* If backend needs to output some symbols not present in the hash 11070 table, do it now. */ 11071 if (bed->elf_backend_output_arch_syms) 11072 { 11073 typedef int (*out_sym_func) 11074 (void *, const char *, Elf_Internal_Sym *, asection *, 11075 struct elf_link_hash_entry *); 11076 11077 if (! ((*bed->elf_backend_output_arch_syms) 11078 (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym))) 11079 return FALSE; 11080 } 11081 11082 /* Flush all symbols to the file. */ 11083 if (! elf_link_flush_output_syms (&flinfo, bed)) 11084 return FALSE; 11085 11086 /* Now we know the size of the symtab section. */ 11087 off += symtab_hdr->sh_size; 11088 11089 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr; 11090 if (symtab_shndx_hdr->sh_name != 0) 11091 { 11092 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX; 11093 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx); 11094 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx); 11095 amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx); 11096 symtab_shndx_hdr->sh_size = amt; 11097 11098 off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr, 11099 off, TRUE); 11100 11101 if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0 11102 || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt)) 11103 return FALSE; 11104 } 11105 11106 11107 /* Finish up and write out the symbol string table (.strtab) 11108 section. */ 11109 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr; 11110 /* sh_name was set in prep_headers. */ 11111 symstrtab_hdr->sh_type = SHT_STRTAB; 11112 symstrtab_hdr->sh_flags = 0; 11113 symstrtab_hdr->sh_addr = 0; 11114 symstrtab_hdr->sh_size = _bfd_stringtab_size (flinfo.symstrtab); 11115 symstrtab_hdr->sh_entsize = 0; 11116 symstrtab_hdr->sh_link = 0; 11117 symstrtab_hdr->sh_info = 0; 11118 /* sh_offset is set just below. */ 11119 symstrtab_hdr->sh_addralign = 1; 11120 11121 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE); 11122 elf_tdata (abfd)->next_file_pos = off; 11123 11124 if (bfd_get_symcount (abfd) > 0) 11125 { 11126 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0 11127 || ! _bfd_stringtab_emit (abfd, flinfo.symstrtab)) 11128 return FALSE; 11129 } 11130 11131 /* Adjust the relocs to have the correct symbol indices. */ 11132 for (o = abfd->sections; o != NULL; o = o->next) 11133 { 11134 struct bfd_elf_section_data *esdo = elf_section_data (o); 11135 if ((o->flags & SEC_RELOC) == 0) 11136 continue; 11137 11138 if (esdo->rel.hdr != NULL) 11139 elf_link_adjust_relocs (abfd, &esdo->rel); 11140 if (esdo->rela.hdr != NULL) 11141 elf_link_adjust_relocs (abfd, &esdo->rela); 11142 11143 /* Set the reloc_count field to 0 to prevent write_relocs from 11144 trying to swap the relocs out itself. */ 11145 o->reloc_count = 0; 11146 } 11147 11148 if (dynamic && info->combreloc && dynobj != NULL) 11149 relativecount = elf_link_sort_relocs (abfd, info, &reldyn); 11150 11151 /* If we are linking against a dynamic object, or generating a 11152 shared library, finish up the dynamic linking information. */ 11153 if (dynamic) 11154 { 11155 bfd_byte *dyncon, *dynconend; 11156 11157 /* Fix up .dynamic entries. */ 11158 o = bfd_get_linker_section (dynobj, ".dynamic"); 11159 BFD_ASSERT (o != NULL); 11160 11161 dyncon = o->contents; 11162 dynconend = o->contents + o->size; 11163 for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn) 11164 { 11165 Elf_Internal_Dyn dyn; 11166 const char *name; 11167 unsigned int type; 11168 11169 bed->s->swap_dyn_in (dynobj, dyncon, &dyn); 11170 11171 switch (dyn.d_tag) 11172 { 11173 default: 11174 continue; 11175 case DT_NULL: 11176 if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend) 11177 { 11178 switch (elf_section_data (reldyn)->this_hdr.sh_type) 11179 { 11180 case SHT_REL: dyn.d_tag = DT_RELCOUNT; break; 11181 case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break; 11182 default: continue; 11183 } 11184 dyn.d_un.d_val = relativecount; 11185 relativecount = 0; 11186 break; 11187 } 11188 continue; 11189 11190 case DT_INIT: 11191 name = info->init_function; 11192 goto get_sym; 11193 case DT_FINI: 11194 name = info->fini_function; 11195 get_sym: 11196 { 11197 struct elf_link_hash_entry *h; 11198 11199 h = elf_link_hash_lookup (elf_hash_table (info), name, 11200 FALSE, FALSE, TRUE); 11201 if (h != NULL 11202 && (h->root.type == bfd_link_hash_defined 11203 || h->root.type == bfd_link_hash_defweak)) 11204 { 11205 dyn.d_un.d_ptr = h->root.u.def.value; 11206 o = h->root.u.def.section; 11207 if (o->output_section != NULL) 11208 dyn.d_un.d_ptr += (o->output_section->vma 11209 + o->output_offset); 11210 else 11211 { 11212 /* The symbol is imported from another shared 11213 library and does not apply to this one. */ 11214 dyn.d_un.d_ptr = 0; 11215 } 11216 break; 11217 } 11218 } 11219 continue; 11220 11221 case DT_PREINIT_ARRAYSZ: 11222 name = ".preinit_array"; 11223 goto get_size; 11224 case DT_INIT_ARRAYSZ: 11225 name = ".init_array"; 11226 goto get_size; 11227 case DT_FINI_ARRAYSZ: 11228 name = ".fini_array"; 11229 get_size: 11230 o = bfd_get_section_by_name (abfd, name); 11231 if (o == NULL) 11232 { 11233 (*_bfd_error_handler) 11234 (_("%B: could not find output section %s"), abfd, name); 11235 goto error_return; 11236 } 11237 if (o->size == 0) 11238 (*_bfd_error_handler) 11239 (_("warning: %s section has zero size"), name); 11240 dyn.d_un.d_val = o->size; 11241 break; 11242 11243 case DT_PREINIT_ARRAY: 11244 name = ".preinit_array"; 11245 goto get_vma; 11246 case DT_INIT_ARRAY: 11247 name = ".init_array"; 11248 goto get_vma; 11249 case DT_FINI_ARRAY: 11250 name = ".fini_array"; 11251 goto get_vma; 11252 11253 case DT_HASH: 11254 name = ".hash"; 11255 goto get_vma; 11256 case DT_GNU_HASH: 11257 name = ".gnu.hash"; 11258 goto get_vma; 11259 case DT_STRTAB: 11260 name = ".dynstr"; 11261 goto get_vma; 11262 case DT_SYMTAB: 11263 name = ".dynsym"; 11264 goto get_vma; 11265 case DT_VERDEF: 11266 name = ".gnu.version_d"; 11267 goto get_vma; 11268 case DT_VERNEED: 11269 name = ".gnu.version_r"; 11270 goto get_vma; 11271 case DT_VERSYM: 11272 name = ".gnu.version"; 11273 get_vma: 11274 o = bfd_get_section_by_name (abfd, name); 11275 if (o == NULL) 11276 { 11277 (*_bfd_error_handler) 11278 (_("%B: could not find output section %s"), abfd, name); 11279 goto error_return; 11280 } 11281 if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE) 11282 { 11283 (*_bfd_error_handler) 11284 (_("warning: section '%s' is being made into a note"), name); 11285 bfd_set_error (bfd_error_nonrepresentable_section); 11286 goto error_return; 11287 } 11288 dyn.d_un.d_ptr = o->vma; 11289 break; 11290 11291 case DT_REL: 11292 case DT_RELA: 11293 case DT_RELSZ: 11294 case DT_RELASZ: 11295 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ) 11296 type = SHT_REL; 11297 else 11298 type = SHT_RELA; 11299 dyn.d_un.d_val = 0; 11300 dyn.d_un.d_ptr = 0; 11301 for (i = 1; i < elf_numsections (abfd); i++) 11302 { 11303 Elf_Internal_Shdr *hdr; 11304 11305 hdr = elf_elfsections (abfd)[i]; 11306 if (hdr->sh_type == type 11307 && (hdr->sh_flags & SHF_ALLOC) != 0) 11308 { 11309 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ) 11310 dyn.d_un.d_val += hdr->sh_size; 11311 else 11312 { 11313 if (dyn.d_un.d_ptr == 0 11314 || hdr->sh_addr < dyn.d_un.d_ptr) 11315 dyn.d_un.d_ptr = hdr->sh_addr; 11316 } 11317 } 11318 } 11319 break; 11320 } 11321 bed->s->swap_dyn_out (dynobj, &dyn, dyncon); 11322 } 11323 } 11324 11325 /* If we have created any dynamic sections, then output them. */ 11326 if (dynobj != NULL) 11327 { 11328 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info)) 11329 goto error_return; 11330 11331 /* Check for DT_TEXTREL (late, in case the backend removes it). */ 11332 if (((info->warn_shared_textrel && info->shared) 11333 || info->error_textrel) 11334 && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL) 11335 { 11336 bfd_byte *dyncon, *dynconend; 11337 11338 dyncon = o->contents; 11339 dynconend = o->contents + o->size; 11340 for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn) 11341 { 11342 Elf_Internal_Dyn dyn; 11343 11344 bed->s->swap_dyn_in (dynobj, dyncon, &dyn); 11345 11346 if (dyn.d_tag == DT_TEXTREL) 11347 { 11348 if (info->error_textrel) 11349 info->callbacks->einfo 11350 (_("%P%X: read-only segment has dynamic relocations.\n")); 11351 else 11352 info->callbacks->einfo 11353 (_("%P: warning: creating a DT_TEXTREL in a shared object.\n")); 11354 break; 11355 } 11356 } 11357 } 11358 11359 for (o = dynobj->sections; o != NULL; o = o->next) 11360 { 11361 if ((o->flags & SEC_HAS_CONTENTS) == 0 11362 || o->size == 0 11363 || o->output_section == bfd_abs_section_ptr) 11364 continue; 11365 if ((o->flags & SEC_LINKER_CREATED) == 0) 11366 { 11367 /* At this point, we are only interested in sections 11368 created by _bfd_elf_link_create_dynamic_sections. */ 11369 continue; 11370 } 11371 if (elf_hash_table (info)->stab_info.stabstr == o) 11372 continue; 11373 if (elf_hash_table (info)->eh_info.hdr_sec == o) 11374 continue; 11375 if (strcmp (o->name, ".dynstr") != 0) 11376 { 11377 /* FIXME: octets_per_byte. */ 11378 if (! bfd_set_section_contents (abfd, o->output_section, 11379 o->contents, 11380 (file_ptr) o->output_offset, 11381 o->size)) 11382 goto error_return; 11383 } 11384 else 11385 { 11386 /* The contents of the .dynstr section are actually in a 11387 stringtab. */ 11388 off = elf_section_data (o->output_section)->this_hdr.sh_offset; 11389 if (bfd_seek (abfd, off, SEEK_SET) != 0 11390 || ! _bfd_elf_strtab_emit (abfd, 11391 elf_hash_table (info)->dynstr)) 11392 goto error_return; 11393 } 11394 } 11395 } 11396 11397 if (info->relocatable) 11398 { 11399 bfd_boolean failed = FALSE; 11400 11401 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed); 11402 if (failed) 11403 goto error_return; 11404 } 11405 11406 /* If we have optimized stabs strings, output them. */ 11407 if (elf_hash_table (info)->stab_info.stabstr != NULL) 11408 { 11409 if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info)) 11410 goto error_return; 11411 } 11412 11413 if (info->eh_frame_hdr) 11414 { 11415 if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info)) 11416 goto error_return; 11417 } 11418 11419 if (flinfo.symstrtab != NULL) 11420 _bfd_stringtab_free (flinfo.symstrtab); 11421 if (flinfo.contents != NULL) 11422 free (flinfo.contents); 11423 if (flinfo.external_relocs != NULL) 11424 free (flinfo.external_relocs); 11425 if (flinfo.internal_relocs != NULL) 11426 free (flinfo.internal_relocs); 11427 if (flinfo.external_syms != NULL) 11428 free (flinfo.external_syms); 11429 if (flinfo.locsym_shndx != NULL) 11430 free (flinfo.locsym_shndx); 11431 if (flinfo.internal_syms != NULL) 11432 free (flinfo.internal_syms); 11433 if (flinfo.indices != NULL) 11434 free (flinfo.indices); 11435 if (flinfo.sections != NULL) 11436 free (flinfo.sections); 11437 if (flinfo.symbuf != NULL) 11438 free (flinfo.symbuf); 11439 if (flinfo.symshndxbuf != NULL) 11440 free (flinfo.symshndxbuf); 11441 for (o = abfd->sections; o != NULL; o = o->next) 11442 { 11443 struct bfd_elf_section_data *esdo = elf_section_data (o); 11444 if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL) 11445 free (esdo->rel.hashes); 11446 if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL) 11447 free (esdo->rela.hashes); 11448 } 11449 11450 elf_tdata (abfd)->linker = TRUE; 11451 11452 if (attr_section) 11453 { 11454 bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size); 11455 if (contents == NULL) 11456 return FALSE; /* Bail out and fail. */ 11457 bfd_elf_set_obj_attr_contents (abfd, contents, attr_size); 11458 bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size); 11459 free (contents); 11460 } 11461 11462 return TRUE; 11463 11464 error_return: 11465 if (flinfo.symstrtab != NULL) 11466 _bfd_stringtab_free (flinfo.symstrtab); 11467 if (flinfo.contents != NULL) 11468 free (flinfo.contents); 11469 if (flinfo.external_relocs != NULL) 11470 free (flinfo.external_relocs); 11471 if (flinfo.internal_relocs != NULL) 11472 free (flinfo.internal_relocs); 11473 if (flinfo.external_syms != NULL) 11474 free (flinfo.external_syms); 11475 if (flinfo.locsym_shndx != NULL) 11476 free (flinfo.locsym_shndx); 11477 if (flinfo.internal_syms != NULL) 11478 free (flinfo.internal_syms); 11479 if (flinfo.indices != NULL) 11480 free (flinfo.indices); 11481 if (flinfo.sections != NULL) 11482 free (flinfo.sections); 11483 if (flinfo.symbuf != NULL) 11484 free (flinfo.symbuf); 11485 if (flinfo.symshndxbuf != NULL) 11486 free (flinfo.symshndxbuf); 11487 for (o = abfd->sections; o != NULL; o = o->next) 11488 { 11489 struct bfd_elf_section_data *esdo = elf_section_data (o); 11490 if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL) 11491 free (esdo->rel.hashes); 11492 if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL) 11493 free (esdo->rela.hashes); 11494 } 11495 11496 return FALSE; 11497 } 11498 11499 /* Initialize COOKIE for input bfd ABFD. */ 11500 11501 static bfd_boolean 11502 init_reloc_cookie (struct elf_reloc_cookie *cookie, 11503 struct bfd_link_info *info, bfd *abfd) 11504 { 11505 Elf_Internal_Shdr *symtab_hdr; 11506 const struct elf_backend_data *bed; 11507 11508 bed = get_elf_backend_data (abfd); 11509 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 11510 11511 cookie->abfd = abfd; 11512 cookie->sym_hashes = elf_sym_hashes (abfd); 11513 cookie->bad_symtab = elf_bad_symtab (abfd); 11514 if (cookie->bad_symtab) 11515 { 11516 cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; 11517 cookie->extsymoff = 0; 11518 } 11519 else 11520 { 11521 cookie->locsymcount = symtab_hdr->sh_info; 11522 cookie->extsymoff = symtab_hdr->sh_info; 11523 } 11524 11525 if (bed->s->arch_size == 32) 11526 cookie->r_sym_shift = 8; 11527 else 11528 cookie->r_sym_shift = 32; 11529 11530 cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; 11531 if (cookie->locsyms == NULL && cookie->locsymcount != 0) 11532 { 11533 cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr, 11534 cookie->locsymcount, 0, 11535 NULL, NULL, NULL); 11536 if (cookie->locsyms == NULL) 11537 { 11538 info->callbacks->einfo (_("%P%X: can not read symbols: %E\n")); 11539 return FALSE; 11540 } 11541 if (info->keep_memory) 11542 symtab_hdr->contents = (bfd_byte *) cookie->locsyms; 11543 } 11544 return TRUE; 11545 } 11546 11547 /* Free the memory allocated by init_reloc_cookie, if appropriate. */ 11548 11549 static void 11550 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd) 11551 { 11552 Elf_Internal_Shdr *symtab_hdr; 11553 11554 symtab_hdr = &elf_tdata (abfd)->symtab_hdr; 11555 if (cookie->locsyms != NULL 11556 && symtab_hdr->contents != (unsigned char *) cookie->locsyms) 11557 free (cookie->locsyms); 11558 } 11559 11560 /* Initialize the relocation information in COOKIE for input section SEC 11561 of input bfd ABFD. */ 11562 11563 static bfd_boolean 11564 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie, 11565 struct bfd_link_info *info, bfd *abfd, 11566 asection *sec) 11567 { 11568 const struct elf_backend_data *bed; 11569 11570 if (sec->reloc_count == 0) 11571 { 11572 cookie->rels = NULL; 11573 cookie->relend = NULL; 11574 } 11575 else 11576 { 11577 bed = get_elf_backend_data (abfd); 11578 11579 cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, 11580 info->keep_memory); 11581 if (cookie->rels == NULL) 11582 return FALSE; 11583 cookie->rel = cookie->rels; 11584 cookie->relend = (cookie->rels 11585 + sec->reloc_count * bed->s->int_rels_per_ext_rel); 11586 } 11587 cookie->rel = cookie->rels; 11588 return TRUE; 11589 } 11590 11591 /* Free the memory allocated by init_reloc_cookie_rels, 11592 if appropriate. */ 11593 11594 static void 11595 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie, 11596 asection *sec) 11597 { 11598 if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels) 11599 free (cookie->rels); 11600 } 11601 11602 /* Initialize the whole of COOKIE for input section SEC. */ 11603 11604 static bfd_boolean 11605 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie, 11606 struct bfd_link_info *info, 11607 asection *sec) 11608 { 11609 if (!init_reloc_cookie (cookie, info, sec->owner)) 11610 goto error1; 11611 if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec)) 11612 goto error2; 11613 return TRUE; 11614 11615 error2: 11616 fini_reloc_cookie (cookie, sec->owner); 11617 error1: 11618 return FALSE; 11619 } 11620 11621 /* Free the memory allocated by init_reloc_cookie_for_section, 11622 if appropriate. */ 11623 11624 static void 11625 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie, 11626 asection *sec) 11627 { 11628 fini_reloc_cookie_rels (cookie, sec); 11629 fini_reloc_cookie (cookie, sec->owner); 11630 } 11631 11632 /* Garbage collect unused sections. */ 11633 11634 /* Default gc_mark_hook. */ 11635 11636 asection * 11637 _bfd_elf_gc_mark_hook (asection *sec, 11638 struct bfd_link_info *info ATTRIBUTE_UNUSED, 11639 Elf_Internal_Rela *rel ATTRIBUTE_UNUSED, 11640 struct elf_link_hash_entry *h, 11641 Elf_Internal_Sym *sym) 11642 { 11643 const char *sec_name; 11644 11645 if (h != NULL) 11646 { 11647 switch (h->root.type) 11648 { 11649 case bfd_link_hash_defined: 11650 case bfd_link_hash_defweak: 11651 return h->root.u.def.section; 11652 11653 case bfd_link_hash_common: 11654 return h->root.u.c.p->section; 11655 11656 case bfd_link_hash_undefined: 11657 case bfd_link_hash_undefweak: 11658 /* To work around a glibc bug, keep all XXX input sections 11659 when there is an as yet undefined reference to __start_XXX 11660 or __stop_XXX symbols. The linker will later define such 11661 symbols for orphan input sections that have a name 11662 representable as a C identifier. */ 11663 if (strncmp (h->root.root.string, "__start_", 8) == 0) 11664 sec_name = h->root.root.string + 8; 11665 else if (strncmp (h->root.root.string, "__stop_", 7) == 0) 11666 sec_name = h->root.root.string + 7; 11667 else 11668 sec_name = NULL; 11669 11670 if (sec_name && *sec_name != '\0') 11671 { 11672 bfd *i; 11673 11674 for (i = info->input_bfds; i; i = i->link_next) 11675 { 11676 sec = bfd_get_section_by_name (i, sec_name); 11677 if (sec) 11678 sec->flags |= SEC_KEEP; 11679 } 11680 } 11681 break; 11682 11683 default: 11684 break; 11685 } 11686 } 11687 else 11688 return bfd_section_from_elf_index (sec->owner, sym->st_shndx); 11689 11690 return NULL; 11691 } 11692 11693 /* COOKIE->rel describes a relocation against section SEC, which is 11694 a section we've decided to keep. Return the section that contains 11695 the relocation symbol, or NULL if no section contains it. */ 11696 11697 asection * 11698 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec, 11699 elf_gc_mark_hook_fn gc_mark_hook, 11700 struct elf_reloc_cookie *cookie) 11701 { 11702 unsigned long r_symndx; 11703 struct elf_link_hash_entry *h; 11704 11705 r_symndx = cookie->rel->r_info >> cookie->r_sym_shift; 11706 if (r_symndx == STN_UNDEF) 11707 return NULL; 11708 11709 if (r_symndx >= cookie->locsymcount 11710 || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL) 11711 { 11712 h = cookie->sym_hashes[r_symndx - cookie->extsymoff]; 11713 while (h->root.type == bfd_link_hash_indirect 11714 || h->root.type == bfd_link_hash_warning) 11715 h = (struct elf_link_hash_entry *) h->root.u.i.link; 11716 h->mark = 1; 11717 /* If this symbol is weak and there is a non-weak definition, we 11718 keep the non-weak definition because many backends put 11719 dynamic reloc info on the non-weak definition for code 11720 handling copy relocs. */ 11721 if (h->u.weakdef != NULL) 11722 h->u.weakdef->mark = 1; 11723 return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL); 11724 } 11725 11726 return (*gc_mark_hook) (sec, info, cookie->rel, NULL, 11727 &cookie->locsyms[r_symndx]); 11728 } 11729 11730 /* COOKIE->rel describes a relocation against section SEC, which is 11731 a section we've decided to keep. Mark the section that contains 11732 the relocation symbol. */ 11733 11734 bfd_boolean 11735 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info, 11736 asection *sec, 11737 elf_gc_mark_hook_fn gc_mark_hook, 11738 struct elf_reloc_cookie *cookie) 11739 { 11740 asection *rsec; 11741 11742 rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie); 11743 if (rsec && !rsec->gc_mark) 11744 { 11745 if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour 11746 || (rsec->owner->flags & DYNAMIC) != 0) 11747 rsec->gc_mark = 1; 11748 else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook)) 11749 return FALSE; 11750 } 11751 return TRUE; 11752 } 11753 11754 /* The mark phase of garbage collection. For a given section, mark 11755 it and any sections in this section's group, and all the sections 11756 which define symbols to which it refers. */ 11757 11758 bfd_boolean 11759 _bfd_elf_gc_mark (struct bfd_link_info *info, 11760 asection *sec, 11761 elf_gc_mark_hook_fn gc_mark_hook) 11762 { 11763 bfd_boolean ret; 11764 asection *group_sec, *eh_frame; 11765 11766 sec->gc_mark = 1; 11767 11768 /* Mark all the sections in the group. */ 11769 group_sec = elf_section_data (sec)->next_in_group; 11770 if (group_sec && !group_sec->gc_mark) 11771 if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook)) 11772 return FALSE; 11773 11774 /* Look through the section relocs. */ 11775 ret = TRUE; 11776 eh_frame = elf_eh_frame_section (sec->owner); 11777 if ((sec->flags & SEC_RELOC) != 0 11778 && sec->reloc_count > 0 11779 && sec != eh_frame) 11780 { 11781 struct elf_reloc_cookie cookie; 11782 11783 if (!init_reloc_cookie_for_section (&cookie, info, sec)) 11784 ret = FALSE; 11785 else 11786 { 11787 for (; cookie.rel < cookie.relend; cookie.rel++) 11788 if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie)) 11789 { 11790 ret = FALSE; 11791 break; 11792 } 11793 fini_reloc_cookie_for_section (&cookie, sec); 11794 } 11795 } 11796 11797 if (ret && eh_frame && elf_fde_list (sec)) 11798 { 11799 struct elf_reloc_cookie cookie; 11800 11801 if (!init_reloc_cookie_for_section (&cookie, info, eh_frame)) 11802 ret = FALSE; 11803 else 11804 { 11805 if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame, 11806 gc_mark_hook, &cookie)) 11807 ret = FALSE; 11808 fini_reloc_cookie_for_section (&cookie, eh_frame); 11809 } 11810 } 11811 11812 return ret; 11813 } 11814 11815 /* Keep debug and special sections. */ 11816 11817 bfd_boolean 11818 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info, 11819 elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED) 11820 { 11821 bfd *ibfd; 11822 11823 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) 11824 { 11825 asection *isec; 11826 bfd_boolean some_kept; 11827 11828 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) 11829 continue; 11830 11831 /* Ensure all linker created sections are kept, and see whether 11832 any other section is already marked. */ 11833 some_kept = FALSE; 11834 for (isec = ibfd->sections; isec != NULL; isec = isec->next) 11835 { 11836 if ((isec->flags & SEC_LINKER_CREATED) != 0) 11837 isec->gc_mark = 1; 11838 else if (isec->gc_mark) 11839 some_kept = TRUE; 11840 } 11841 11842 /* If no section in this file will be kept, then we can 11843 toss out debug sections. */ 11844 if (!some_kept) 11845 continue; 11846 11847 /* Keep debug and special sections like .comment when they are 11848 not part of a group, or when we have single-member groups. */ 11849 for (isec = ibfd->sections; isec != NULL; isec = isec->next) 11850 if ((elf_next_in_group (isec) == NULL 11851 || elf_next_in_group (isec) == isec) 11852 && ((isec->flags & SEC_DEBUGGING) != 0 11853 || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)) 11854 isec->gc_mark = 1; 11855 } 11856 return TRUE; 11857 } 11858 11859 /* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */ 11860 11861 struct elf_gc_sweep_symbol_info 11862 { 11863 struct bfd_link_info *info; 11864 void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *, 11865 bfd_boolean); 11866 }; 11867 11868 static bfd_boolean 11869 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data) 11870 { 11871 if (!h->mark 11872 && (((h->root.type == bfd_link_hash_defined 11873 || h->root.type == bfd_link_hash_defweak) 11874 && !(h->def_regular 11875 && h->root.u.def.section->gc_mark)) 11876 || h->root.type == bfd_link_hash_undefined 11877 || h->root.type == bfd_link_hash_undefweak)) 11878 { 11879 struct elf_gc_sweep_symbol_info *inf; 11880 11881 inf = (struct elf_gc_sweep_symbol_info *) data; 11882 (*inf->hide_symbol) (inf->info, h, TRUE); 11883 h->def_regular = 0; 11884 h->ref_regular = 0; 11885 h->ref_regular_nonweak = 0; 11886 } 11887 11888 return TRUE; 11889 } 11890 11891 /* The sweep phase of garbage collection. Remove all garbage sections. */ 11892 11893 typedef bfd_boolean (*gc_sweep_hook_fn) 11894 (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); 11895 11896 static bfd_boolean 11897 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info) 11898 { 11899 bfd *sub; 11900 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 11901 gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook; 11902 unsigned long section_sym_count; 11903 struct elf_gc_sweep_symbol_info sweep_info; 11904 11905 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 11906 { 11907 asection *o; 11908 11909 if (bfd_get_flavour (sub) != bfd_target_elf_flavour) 11910 continue; 11911 11912 for (o = sub->sections; o != NULL; o = o->next) 11913 { 11914 /* When any section in a section group is kept, we keep all 11915 sections in the section group. If the first member of 11916 the section group is excluded, we will also exclude the 11917 group section. */ 11918 if (o->flags & SEC_GROUP) 11919 { 11920 asection *first = elf_next_in_group (o); 11921 o->gc_mark = first->gc_mark; 11922 } 11923 11924 if (o->gc_mark) 11925 continue; 11926 11927 /* Skip sweeping sections already excluded. */ 11928 if (o->flags & SEC_EXCLUDE) 11929 continue; 11930 11931 /* Since this is early in the link process, it is simple 11932 to remove a section from the output. */ 11933 o->flags |= SEC_EXCLUDE; 11934 11935 if (info->print_gc_sections && o->size != 0) 11936 _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name); 11937 11938 /* But we also have to update some of the relocation 11939 info we collected before. */ 11940 if (gc_sweep_hook 11941 && (o->flags & SEC_RELOC) != 0 11942 && o->reloc_count > 0 11943 && !bfd_is_abs_section (o->output_section)) 11944 { 11945 Elf_Internal_Rela *internal_relocs; 11946 bfd_boolean r; 11947 11948 internal_relocs 11949 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL, 11950 info->keep_memory); 11951 if (internal_relocs == NULL) 11952 return FALSE; 11953 11954 r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs); 11955 11956 if (elf_section_data (o)->relocs != internal_relocs) 11957 free (internal_relocs); 11958 11959 if (!r) 11960 return FALSE; 11961 } 11962 } 11963 } 11964 11965 /* Remove the symbols that were in the swept sections from the dynamic 11966 symbol table. GCFIXME: Anyone know how to get them out of the 11967 static symbol table as well? */ 11968 sweep_info.info = info; 11969 sweep_info.hide_symbol = bed->elf_backend_hide_symbol; 11970 elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol, 11971 &sweep_info); 11972 11973 _bfd_elf_link_renumber_dynsyms (abfd, info, §ion_sym_count); 11974 return TRUE; 11975 } 11976 11977 /* Propagate collected vtable information. This is called through 11978 elf_link_hash_traverse. */ 11979 11980 static bfd_boolean 11981 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp) 11982 { 11983 /* Those that are not vtables. */ 11984 if (h->vtable == NULL || h->vtable->parent == NULL) 11985 return TRUE; 11986 11987 /* Those vtables that do not have parents, we cannot merge. */ 11988 if (h->vtable->parent == (struct elf_link_hash_entry *) -1) 11989 return TRUE; 11990 11991 /* If we've already been done, exit. */ 11992 if (h->vtable->used && h->vtable->used[-1]) 11993 return TRUE; 11994 11995 /* Make sure the parent's table is up to date. */ 11996 elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp); 11997 11998 if (h->vtable->used == NULL) 11999 { 12000 /* None of this table's entries were referenced. Re-use the 12001 parent's table. */ 12002 h->vtable->used = h->vtable->parent->vtable->used; 12003 h->vtable->size = h->vtable->parent->vtable->size; 12004 } 12005 else 12006 { 12007 size_t n; 12008 bfd_boolean *cu, *pu; 12009 12010 /* Or the parent's entries into ours. */ 12011 cu = h->vtable->used; 12012 cu[-1] = TRUE; 12013 pu = h->vtable->parent->vtable->used; 12014 if (pu != NULL) 12015 { 12016 const struct elf_backend_data *bed; 12017 unsigned int log_file_align; 12018 12019 bed = get_elf_backend_data (h->root.u.def.section->owner); 12020 log_file_align = bed->s->log_file_align; 12021 n = h->vtable->parent->vtable->size >> log_file_align; 12022 while (n--) 12023 { 12024 if (*pu) 12025 *cu = TRUE; 12026 pu++; 12027 cu++; 12028 } 12029 } 12030 } 12031 12032 return TRUE; 12033 } 12034 12035 static bfd_boolean 12036 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp) 12037 { 12038 asection *sec; 12039 bfd_vma hstart, hend; 12040 Elf_Internal_Rela *relstart, *relend, *rel; 12041 const struct elf_backend_data *bed; 12042 unsigned int log_file_align; 12043 12044 /* Take care of both those symbols that do not describe vtables as 12045 well as those that are not loaded. */ 12046 if (h->vtable == NULL || h->vtable->parent == NULL) 12047 return TRUE; 12048 12049 BFD_ASSERT (h->root.type == bfd_link_hash_defined 12050 || h->root.type == bfd_link_hash_defweak); 12051 12052 sec = h->root.u.def.section; 12053 hstart = h->root.u.def.value; 12054 hend = hstart + h->size; 12055 12056 relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE); 12057 if (!relstart) 12058 return *(bfd_boolean *) okp = FALSE; 12059 bed = get_elf_backend_data (sec->owner); 12060 log_file_align = bed->s->log_file_align; 12061 12062 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; 12063 12064 for (rel = relstart; rel < relend; ++rel) 12065 if (rel->r_offset >= hstart && rel->r_offset < hend) 12066 { 12067 /* If the entry is in use, do nothing. */ 12068 if (h->vtable->used 12069 && (rel->r_offset - hstart) < h->vtable->size) 12070 { 12071 bfd_vma entry = (rel->r_offset - hstart) >> log_file_align; 12072 if (h->vtable->used[entry]) 12073 continue; 12074 } 12075 /* Otherwise, kill it. */ 12076 rel->r_offset = rel->r_info = rel->r_addend = 0; 12077 } 12078 12079 return TRUE; 12080 } 12081 12082 /* Mark sections containing dynamically referenced symbols. When 12083 building shared libraries, we must assume that any visible symbol is 12084 referenced. */ 12085 12086 bfd_boolean 12087 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf) 12088 { 12089 struct bfd_link_info *info = (struct bfd_link_info *) inf; 12090 12091 if ((h->root.type == bfd_link_hash_defined 12092 || h->root.type == bfd_link_hash_defweak) 12093 && (h->ref_dynamic 12094 || ((!info->executable || info->export_dynamic) 12095 && h->def_regular 12096 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL 12097 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN 12098 && (strchr (h->root.root.string, ELF_VER_CHR) != NULL 12099 || !bfd_hide_sym_by_version (info->version_info, 12100 h->root.root.string))))) 12101 h->root.u.def.section->flags |= SEC_KEEP; 12102 12103 return TRUE; 12104 } 12105 12106 /* Keep all sections containing symbols undefined on the command-line, 12107 and the section containing the entry symbol. */ 12108 12109 void 12110 _bfd_elf_gc_keep (struct bfd_link_info *info) 12111 { 12112 struct bfd_sym_chain *sym; 12113 12114 for (sym = info->gc_sym_list; sym != NULL; sym = sym->next) 12115 { 12116 struct elf_link_hash_entry *h; 12117 12118 h = elf_link_hash_lookup (elf_hash_table (info), sym->name, 12119 FALSE, FALSE, FALSE); 12120 12121 if (h != NULL 12122 && (h->root.type == bfd_link_hash_defined 12123 || h->root.type == bfd_link_hash_defweak) 12124 && !bfd_is_abs_section (h->root.u.def.section)) 12125 h->root.u.def.section->flags |= SEC_KEEP; 12126 } 12127 } 12128 12129 /* Do mark and sweep of unused sections. */ 12130 12131 bfd_boolean 12132 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info) 12133 { 12134 bfd_boolean ok = TRUE; 12135 bfd *sub; 12136 elf_gc_mark_hook_fn gc_mark_hook; 12137 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 12138 12139 if (!bed->can_gc_sections 12140 || !is_elf_hash_table (info->hash)) 12141 { 12142 (*_bfd_error_handler)(_("Warning: gc-sections option ignored")); 12143 return TRUE; 12144 } 12145 12146 bed->gc_keep (info); 12147 12148 /* Try to parse each bfd's .eh_frame section. Point elf_eh_frame_section 12149 at the .eh_frame section if we can mark the FDEs individually. */ 12150 _bfd_elf_begin_eh_frame_parsing (info); 12151 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 12152 { 12153 asection *sec; 12154 struct elf_reloc_cookie cookie; 12155 12156 sec = bfd_get_section_by_name (sub, ".eh_frame"); 12157 while (sec && init_reloc_cookie_for_section (&cookie, info, sec)) 12158 { 12159 _bfd_elf_parse_eh_frame (sub, info, sec, &cookie); 12160 if (elf_section_data (sec)->sec_info 12161 && (sec->flags & SEC_LINKER_CREATED) == 0) 12162 elf_eh_frame_section (sub) = sec; 12163 fini_reloc_cookie_for_section (&cookie, sec); 12164 sec = bfd_get_next_section_by_name (sec); 12165 } 12166 } 12167 _bfd_elf_end_eh_frame_parsing (info); 12168 12169 /* Apply transitive closure to the vtable entry usage info. */ 12170 elf_link_hash_traverse (elf_hash_table (info), 12171 elf_gc_propagate_vtable_entries_used, 12172 &ok); 12173 if (!ok) 12174 return FALSE; 12175 12176 /* Kill the vtable relocations that were not used. */ 12177 elf_link_hash_traverse (elf_hash_table (info), 12178 elf_gc_smash_unused_vtentry_relocs, 12179 &ok); 12180 if (!ok) 12181 return FALSE; 12182 12183 /* Mark dynamically referenced symbols. */ 12184 if (elf_hash_table (info)->dynamic_sections_created) 12185 elf_link_hash_traverse (elf_hash_table (info), 12186 bed->gc_mark_dynamic_ref, 12187 info); 12188 12189 /* Grovel through relocs to find out who stays ... */ 12190 gc_mark_hook = bed->gc_mark_hook; 12191 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) 12192 { 12193 asection *o; 12194 12195 if (bfd_get_flavour (sub) != bfd_target_elf_flavour) 12196 continue; 12197 12198 /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep). 12199 Also treat note sections as a root, if the section is not part 12200 of a group. */ 12201 for (o = sub->sections; o != NULL; o = o->next) 12202 if (!o->gc_mark 12203 && (o->flags & SEC_EXCLUDE) == 0 12204 && ((o->flags & SEC_KEEP) != 0 12205 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE 12206 && elf_next_in_group (o) == NULL ))) 12207 { 12208 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook)) 12209 return FALSE; 12210 } 12211 } 12212 12213 /* Allow the backend to mark additional target specific sections. */ 12214 bed->gc_mark_extra_sections (info, gc_mark_hook); 12215 12216 /* ... and mark SEC_EXCLUDE for those that go. */ 12217 return elf_gc_sweep (abfd, info); 12218 } 12219 12220 /* Called from check_relocs to record the existence of a VTINHERIT reloc. */ 12221 12222 bfd_boolean 12223 bfd_elf_gc_record_vtinherit (bfd *abfd, 12224 asection *sec, 12225 struct elf_link_hash_entry *h, 12226 bfd_vma offset) 12227 { 12228 struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; 12229 struct elf_link_hash_entry **search, *child; 12230 bfd_size_type extsymcount; 12231 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 12232 12233 /* The sh_info field of the symtab header tells us where the 12234 external symbols start. We don't care about the local symbols at 12235 this point. */ 12236 extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym; 12237 if (!elf_bad_symtab (abfd)) 12238 extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info; 12239 12240 sym_hashes = elf_sym_hashes (abfd); 12241 sym_hashes_end = sym_hashes + extsymcount; 12242 12243 /* Hunt down the child symbol, which is in this section at the same 12244 offset as the relocation. */ 12245 for (search = sym_hashes; search != sym_hashes_end; ++search) 12246 { 12247 if ((child = *search) != NULL 12248 && (child->root.type == bfd_link_hash_defined 12249 || child->root.type == bfd_link_hash_defweak) 12250 && child->root.u.def.section == sec 12251 && child->root.u.def.value == offset) 12252 goto win; 12253 } 12254 12255 (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT", 12256 abfd, sec, (unsigned long) offset); 12257 bfd_set_error (bfd_error_invalid_operation); 12258 return FALSE; 12259 12260 win: 12261 if (!child->vtable) 12262 { 12263 child->vtable = (struct elf_link_virtual_table_entry *) 12264 bfd_zalloc (abfd, sizeof (*child->vtable)); 12265 if (!child->vtable) 12266 return FALSE; 12267 } 12268 if (!h) 12269 { 12270 /* This *should* only be the absolute section. It could potentially 12271 be that someone has defined a non-global vtable though, which 12272 would be bad. It isn't worth paging in the local symbols to be 12273 sure though; that case should simply be handled by the assembler. */ 12274 12275 child->vtable->parent = (struct elf_link_hash_entry *) -1; 12276 } 12277 else 12278 child->vtable->parent = h; 12279 12280 return TRUE; 12281 } 12282 12283 /* Called from check_relocs to record the existence of a VTENTRY reloc. */ 12284 12285 bfd_boolean 12286 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED, 12287 asection *sec ATTRIBUTE_UNUSED, 12288 struct elf_link_hash_entry *h, 12289 bfd_vma addend) 12290 { 12291 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 12292 unsigned int log_file_align = bed->s->log_file_align; 12293 12294 if (!h->vtable) 12295 { 12296 h->vtable = (struct elf_link_virtual_table_entry *) 12297 bfd_zalloc (abfd, sizeof (*h->vtable)); 12298 if (!h->vtable) 12299 return FALSE; 12300 } 12301 12302 if (addend >= h->vtable->size) 12303 { 12304 size_t size, bytes, file_align; 12305 bfd_boolean *ptr = h->vtable->used; 12306 12307 /* While the symbol is undefined, we have to be prepared to handle 12308 a zero size. */ 12309 file_align = 1 << log_file_align; 12310 if (h->root.type == bfd_link_hash_undefined) 12311 size = addend + file_align; 12312 else 12313 { 12314 size = h->size; 12315 if (addend >= size) 12316 { 12317 /* Oops! We've got a reference past the defined end of 12318 the table. This is probably a bug -- shall we warn? */ 12319 size = addend + file_align; 12320 } 12321 } 12322 size = (size + file_align - 1) & -file_align; 12323 12324 /* Allocate one extra entry for use as a "done" flag for the 12325 consolidation pass. */ 12326 bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean); 12327 12328 if (ptr) 12329 { 12330 ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes); 12331 12332 if (ptr != NULL) 12333 { 12334 size_t oldbytes; 12335 12336 oldbytes = (((h->vtable->size >> log_file_align) + 1) 12337 * sizeof (bfd_boolean)); 12338 memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes); 12339 } 12340 } 12341 else 12342 ptr = (bfd_boolean *) bfd_zmalloc (bytes); 12343 12344 if (ptr == NULL) 12345 return FALSE; 12346 12347 /* And arrange for that done flag to be at index -1. */ 12348 h->vtable->used = ptr + 1; 12349 h->vtable->size = size; 12350 } 12351 12352 h->vtable->used[addend >> log_file_align] = TRUE; 12353 12354 return TRUE; 12355 } 12356 12357 /* Map an ELF section header flag to its corresponding string. */ 12358 typedef struct 12359 { 12360 char *flag_name; 12361 flagword flag_value; 12362 } elf_flags_to_name_table; 12363 12364 static elf_flags_to_name_table elf_flags_to_names [] = 12365 { 12366 { "SHF_WRITE", SHF_WRITE }, 12367 { "SHF_ALLOC", SHF_ALLOC }, 12368 { "SHF_EXECINSTR", SHF_EXECINSTR }, 12369 { "SHF_MERGE", SHF_MERGE }, 12370 { "SHF_STRINGS", SHF_STRINGS }, 12371 { "SHF_INFO_LINK", SHF_INFO_LINK}, 12372 { "SHF_LINK_ORDER", SHF_LINK_ORDER}, 12373 { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING}, 12374 { "SHF_GROUP", SHF_GROUP }, 12375 { "SHF_TLS", SHF_TLS }, 12376 { "SHF_MASKOS", SHF_MASKOS }, 12377 { "SHF_EXCLUDE", SHF_EXCLUDE }, 12378 }; 12379 12380 /* Returns TRUE if the section is to be included, otherwise FALSE. */ 12381 bfd_boolean 12382 bfd_elf_lookup_section_flags (struct bfd_link_info *info, 12383 struct flag_info *flaginfo, 12384 asection *section) 12385 { 12386 const bfd_vma sh_flags = elf_section_flags (section); 12387 12388 if (!flaginfo->flags_initialized) 12389 { 12390 bfd *obfd = info->output_bfd; 12391 const struct elf_backend_data *bed = get_elf_backend_data (obfd); 12392 struct flag_info_list *tf = flaginfo->flag_list; 12393 int with_hex = 0; 12394 int without_hex = 0; 12395 12396 for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next) 12397 { 12398 unsigned i; 12399 flagword (*lookup) (char *); 12400 12401 lookup = bed->elf_backend_lookup_section_flags_hook; 12402 if (lookup != NULL) 12403 { 12404 flagword hexval = (*lookup) ((char *) tf->name); 12405 12406 if (hexval != 0) 12407 { 12408 if (tf->with == with_flags) 12409 with_hex |= hexval; 12410 else if (tf->with == without_flags) 12411 without_hex |= hexval; 12412 tf->valid = TRUE; 12413 continue; 12414 } 12415 } 12416 for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i) 12417 { 12418 if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0) 12419 { 12420 if (tf->with == with_flags) 12421 with_hex |= elf_flags_to_names[i].flag_value; 12422 else if (tf->with == without_flags) 12423 without_hex |= elf_flags_to_names[i].flag_value; 12424 tf->valid = TRUE; 12425 break; 12426 } 12427 } 12428 if (!tf->valid) 12429 { 12430 info->callbacks->einfo 12431 (_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name); 12432 return FALSE; 12433 } 12434 } 12435 flaginfo->flags_initialized = TRUE; 12436 flaginfo->only_with_flags |= with_hex; 12437 flaginfo->not_with_flags |= without_hex; 12438 } 12439 12440 if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags) 12441 return FALSE; 12442 12443 if ((flaginfo->not_with_flags & sh_flags) != 0) 12444 return FALSE; 12445 12446 return TRUE; 12447 } 12448 12449 struct alloc_got_off_arg { 12450 bfd_vma gotoff; 12451 struct bfd_link_info *info; 12452 }; 12453 12454 /* We need a special top-level link routine to convert got reference counts 12455 to real got offsets. */ 12456 12457 static bfd_boolean 12458 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg) 12459 { 12460 struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg; 12461 bfd *obfd = gofarg->info->output_bfd; 12462 const struct elf_backend_data *bed = get_elf_backend_data (obfd); 12463 12464 if (h->got.refcount > 0) 12465 { 12466 h->got.offset = gofarg->gotoff; 12467 gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0); 12468 } 12469 else 12470 h->got.offset = (bfd_vma) -1; 12471 12472 return TRUE; 12473 } 12474 12475 /* And an accompanying bit to work out final got entry offsets once 12476 we're done. Should be called from final_link. */ 12477 12478 bfd_boolean 12479 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd, 12480 struct bfd_link_info *info) 12481 { 12482 bfd *i; 12483 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 12484 bfd_vma gotoff; 12485 struct alloc_got_off_arg gofarg; 12486 12487 BFD_ASSERT (abfd == info->output_bfd); 12488 12489 if (! is_elf_hash_table (info->hash)) 12490 return FALSE; 12491 12492 /* The GOT offset is relative to the .got section, but the GOT header is 12493 put into the .got.plt section, if the backend uses it. */ 12494 if (bed->want_got_plt) 12495 gotoff = 0; 12496 else 12497 gotoff = bed->got_header_size; 12498 12499 /* Do the local .got entries first. */ 12500 for (i = info->input_bfds; i; i = i->link_next) 12501 { 12502 bfd_signed_vma *local_got; 12503 bfd_size_type j, locsymcount; 12504 Elf_Internal_Shdr *symtab_hdr; 12505 12506 if (bfd_get_flavour (i) != bfd_target_elf_flavour) 12507 continue; 12508 12509 local_got = elf_local_got_refcounts (i); 12510 if (!local_got) 12511 continue; 12512 12513 symtab_hdr = &elf_tdata (i)->symtab_hdr; 12514 if (elf_bad_symtab (i)) 12515 locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; 12516 else 12517 locsymcount = symtab_hdr->sh_info; 12518 12519 for (j = 0; j < locsymcount; ++j) 12520 { 12521 if (local_got[j] > 0) 12522 { 12523 local_got[j] = gotoff; 12524 gotoff += bed->got_elt_size (abfd, info, NULL, i, j); 12525 } 12526 else 12527 local_got[j] = (bfd_vma) -1; 12528 } 12529 } 12530 12531 /* Then the global .got entries. .plt refcounts are handled by 12532 adjust_dynamic_symbol */ 12533 gofarg.gotoff = gotoff; 12534 gofarg.info = info; 12535 elf_link_hash_traverse (elf_hash_table (info), 12536 elf_gc_allocate_got_offsets, 12537 &gofarg); 12538 return TRUE; 12539 } 12540 12541 /* Many folk need no more in the way of final link than this, once 12542 got entry reference counting is enabled. */ 12543 12544 bfd_boolean 12545 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info) 12546 { 12547 if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info)) 12548 return FALSE; 12549 12550 /* Invoke the regular ELF backend linker to do all the work. */ 12551 return bfd_elf_final_link (abfd, info); 12552 } 12553 12554 bfd_boolean 12555 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie) 12556 { 12557 struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie; 12558 12559 if (rcookie->bad_symtab) 12560 rcookie->rel = rcookie->rels; 12561 12562 for (; rcookie->rel < rcookie->relend; rcookie->rel++) 12563 { 12564 unsigned long r_symndx; 12565 12566 if (! rcookie->bad_symtab) 12567 if (rcookie->rel->r_offset > offset) 12568 return FALSE; 12569 if (rcookie->rel->r_offset != offset) 12570 continue; 12571 12572 r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift; 12573 if (r_symndx == STN_UNDEF) 12574 return TRUE; 12575 12576 if (r_symndx >= rcookie->locsymcount 12577 || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL) 12578 { 12579 struct elf_link_hash_entry *h; 12580 12581 h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff]; 12582 12583 while (h->root.type == bfd_link_hash_indirect 12584 || h->root.type == bfd_link_hash_warning) 12585 h = (struct elf_link_hash_entry *) h->root.u.i.link; 12586 12587 if ((h->root.type == bfd_link_hash_defined 12588 || h->root.type == bfd_link_hash_defweak) 12589 && discarded_section (h->root.u.def.section)) 12590 return TRUE; 12591 else 12592 return FALSE; 12593 } 12594 else 12595 { 12596 /* It's not a relocation against a global symbol, 12597 but it could be a relocation against a local 12598 symbol for a discarded section. */ 12599 asection *isec; 12600 Elf_Internal_Sym *isym; 12601 12602 /* Need to: get the symbol; get the section. */ 12603 isym = &rcookie->locsyms[r_symndx]; 12604 isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx); 12605 if (isec != NULL && discarded_section (isec)) 12606 return TRUE; 12607 } 12608 return FALSE; 12609 } 12610 return FALSE; 12611 } 12612 12613 /* Discard unneeded references to discarded sections. 12614 Returns TRUE if any section's size was changed. */ 12615 /* This function assumes that the relocations are in sorted order, 12616 which is true for all known assemblers. */ 12617 12618 bfd_boolean 12619 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info) 12620 { 12621 struct elf_reloc_cookie cookie; 12622 asection *stab, *eh; 12623 const struct elf_backend_data *bed; 12624 bfd *abfd; 12625 bfd_boolean ret = FALSE; 12626 12627 if (info->traditional_format 12628 || !is_elf_hash_table (info->hash)) 12629 return FALSE; 12630 12631 _bfd_elf_begin_eh_frame_parsing (info); 12632 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next) 12633 { 12634 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) 12635 continue; 12636 12637 bed = get_elf_backend_data (abfd); 12638 12639 eh = NULL; 12640 if (!info->relocatable) 12641 { 12642 eh = bfd_get_section_by_name (abfd, ".eh_frame"); 12643 while (eh != NULL 12644 && (eh->size == 0 12645 || bfd_is_abs_section (eh->output_section))) 12646 eh = bfd_get_next_section_by_name (eh); 12647 } 12648 12649 stab = bfd_get_section_by_name (abfd, ".stab"); 12650 if (stab != NULL 12651 && (stab->size == 0 12652 || bfd_is_abs_section (stab->output_section) 12653 || stab->sec_info_type != SEC_INFO_TYPE_STABS)) 12654 stab = NULL; 12655 12656 if (stab == NULL 12657 && eh == NULL 12658 && bed->elf_backend_discard_info == NULL) 12659 continue; 12660 12661 if (!init_reloc_cookie (&cookie, info, abfd)) 12662 return FALSE; 12663 12664 if (stab != NULL 12665 && stab->reloc_count > 0 12666 && init_reloc_cookie_rels (&cookie, info, abfd, stab)) 12667 { 12668 if (_bfd_discard_section_stabs (abfd, stab, 12669 elf_section_data (stab)->sec_info, 12670 bfd_elf_reloc_symbol_deleted_p, 12671 &cookie)) 12672 ret = TRUE; 12673 fini_reloc_cookie_rels (&cookie, stab); 12674 } 12675 12676 while (eh != NULL 12677 && init_reloc_cookie_rels (&cookie, info, abfd, eh)) 12678 { 12679 _bfd_elf_parse_eh_frame (abfd, info, eh, &cookie); 12680 if (_bfd_elf_discard_section_eh_frame (abfd, info, eh, 12681 bfd_elf_reloc_symbol_deleted_p, 12682 &cookie)) 12683 ret = TRUE; 12684 fini_reloc_cookie_rels (&cookie, eh); 12685 eh = bfd_get_next_section_by_name (eh); 12686 } 12687 12688 if (bed->elf_backend_discard_info != NULL 12689 && (*bed->elf_backend_discard_info) (abfd, &cookie, info)) 12690 ret = TRUE; 12691 12692 fini_reloc_cookie (&cookie, abfd); 12693 } 12694 _bfd_elf_end_eh_frame_parsing (info); 12695 12696 if (info->eh_frame_hdr 12697 && !info->relocatable 12698 && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info)) 12699 ret = TRUE; 12700 12701 return ret; 12702 } 12703 12704 bfd_boolean 12705 _bfd_elf_section_already_linked (bfd *abfd, 12706 asection *sec, 12707 struct bfd_link_info *info) 12708 { 12709 flagword flags; 12710 const char *name, *key; 12711 struct bfd_section_already_linked *l; 12712 struct bfd_section_already_linked_hash_entry *already_linked_list; 12713 12714 if (sec->output_section == bfd_abs_section_ptr) 12715 return FALSE; 12716 12717 flags = sec->flags; 12718 12719 /* Return if it isn't a linkonce section. A comdat group section 12720 also has SEC_LINK_ONCE set. */ 12721 if ((flags & SEC_LINK_ONCE) == 0) 12722 return FALSE; 12723 12724 /* Don't put group member sections on our list of already linked 12725 sections. They are handled as a group via their group section. */ 12726 if (elf_sec_group (sec) != NULL) 12727 return FALSE; 12728 12729 /* For a SHT_GROUP section, use the group signature as the key. */ 12730 name = sec->name; 12731 if ((flags & SEC_GROUP) != 0 12732 && elf_next_in_group (sec) != NULL 12733 && elf_group_name (elf_next_in_group (sec)) != NULL) 12734 key = elf_group_name (elf_next_in_group (sec)); 12735 else 12736 { 12737 /* Otherwise we should have a .gnu.linkonce.<type>.<key> section. */ 12738 if (CONST_STRNEQ (name, ".gnu.linkonce.") 12739 && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL) 12740 key++; 12741 else 12742 /* Must be a user linkonce section that doesn't follow gcc's 12743 naming convention. In this case we won't be matching 12744 single member groups. */ 12745 key = name; 12746 } 12747 12748 already_linked_list = bfd_section_already_linked_table_lookup (key); 12749 12750 for (l = already_linked_list->entry; l != NULL; l = l->next) 12751 { 12752 /* We may have 2 different types of sections on the list: group 12753 sections with a signature of <key> (<key> is some string), 12754 and linkonce sections named .gnu.linkonce.<type>.<key>. 12755 Match like sections. LTO plugin sections are an exception. 12756 They are always named .gnu.linkonce.t.<key> and match either 12757 type of section. */ 12758 if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP) 12759 && ((flags & SEC_GROUP) != 0 12760 || strcmp (name, l->sec->name) == 0)) 12761 || (l->sec->owner->flags & BFD_PLUGIN) != 0) 12762 { 12763 /* The section has already been linked. See if we should 12764 issue a warning. */ 12765 if (!_bfd_handle_already_linked (sec, l, info)) 12766 return FALSE; 12767 12768 if (flags & SEC_GROUP) 12769 { 12770 asection *first = elf_next_in_group (sec); 12771 asection *s = first; 12772 12773 while (s != NULL) 12774 { 12775 s->output_section = bfd_abs_section_ptr; 12776 /* Record which group discards it. */ 12777 s->kept_section = l->sec; 12778 s = elf_next_in_group (s); 12779 /* These lists are circular. */ 12780 if (s == first) 12781 break; 12782 } 12783 } 12784 12785 return TRUE; 12786 } 12787 } 12788 12789 /* A single member comdat group section may be discarded by a 12790 linkonce section and vice versa. */ 12791 if ((flags & SEC_GROUP) != 0) 12792 { 12793 asection *first = elf_next_in_group (sec); 12794 12795 if (first != NULL && elf_next_in_group (first) == first) 12796 /* Check this single member group against linkonce sections. */ 12797 for (l = already_linked_list->entry; l != NULL; l = l->next) 12798 if ((l->sec->flags & SEC_GROUP) == 0 12799 && bfd_elf_match_symbols_in_sections (l->sec, first, info)) 12800 { 12801 first->output_section = bfd_abs_section_ptr; 12802 first->kept_section = l->sec; 12803 sec->output_section = bfd_abs_section_ptr; 12804 break; 12805 } 12806 } 12807 else 12808 /* Check this linkonce section against single member groups. */ 12809 for (l = already_linked_list->entry; l != NULL; l = l->next) 12810 if (l->sec->flags & SEC_GROUP) 12811 { 12812 asection *first = elf_next_in_group (l->sec); 12813 12814 if (first != NULL 12815 && elf_next_in_group (first) == first 12816 && bfd_elf_match_symbols_in_sections (first, sec, info)) 12817 { 12818 sec->output_section = bfd_abs_section_ptr; 12819 sec->kept_section = first; 12820 break; 12821 } 12822 } 12823 12824 /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F' 12825 referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4 12826 specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce' 12827 prefix) instead. `.gnu.linkonce.r.*' were the `.rodata' part of its 12828 matching `.gnu.linkonce.t.*'. If `.gnu.linkonce.r.F' is not discarded 12829 but its `.gnu.linkonce.t.F' is discarded means we chose one-only 12830 `.gnu.linkonce.t.F' section from a different bfd not requiring any 12831 `.gnu.linkonce.r.F'. Thus `.gnu.linkonce.r.F' should be discarded. 12832 The reverse order cannot happen as there is never a bfd with only the 12833 `.gnu.linkonce.r.F' section. The order of sections in a bfd does not 12834 matter as here were are looking only for cross-bfd sections. */ 12835 12836 if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r.")) 12837 for (l = already_linked_list->entry; l != NULL; l = l->next) 12838 if ((l->sec->flags & SEC_GROUP) == 0 12839 && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t.")) 12840 { 12841 if (abfd != l->sec->owner) 12842 sec->output_section = bfd_abs_section_ptr; 12843 break; 12844 } 12845 12846 /* This is the first section with this name. Record it. */ 12847 if (!bfd_section_already_linked_table_insert (already_linked_list, sec)) 12848 info->callbacks->einfo (_("%F%P: already_linked_table: %E\n")); 12849 return sec->output_section == bfd_abs_section_ptr; 12850 } 12851 12852 bfd_boolean 12853 _bfd_elf_common_definition (Elf_Internal_Sym *sym) 12854 { 12855 return sym->st_shndx == SHN_COMMON; 12856 } 12857 12858 unsigned int 12859 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED) 12860 { 12861 return SHN_COMMON; 12862 } 12863 12864 asection * 12865 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED) 12866 { 12867 return bfd_com_section_ptr; 12868 } 12869 12870 bfd_vma 12871 _bfd_elf_default_got_elt_size (bfd *abfd, 12872 struct bfd_link_info *info ATTRIBUTE_UNUSED, 12873 struct elf_link_hash_entry *h ATTRIBUTE_UNUSED, 12874 bfd *ibfd ATTRIBUTE_UNUSED, 12875 unsigned long symndx ATTRIBUTE_UNUSED) 12876 { 12877 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 12878 return bed->s->arch_size / 8; 12879 } 12880 12881 /* Routines to support the creation of dynamic relocs. */ 12882 12883 /* Returns the name of the dynamic reloc section associated with SEC. */ 12884 12885 static const char * 12886 get_dynamic_reloc_section_name (bfd * abfd, 12887 asection * sec, 12888 bfd_boolean is_rela) 12889 { 12890 char *name; 12891 const char *old_name = bfd_get_section_name (NULL, sec); 12892 const char *prefix = is_rela ? ".rela" : ".rel"; 12893 12894 if (old_name == NULL) 12895 return NULL; 12896 12897 name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1); 12898 sprintf (name, "%s%s", prefix, old_name); 12899 12900 return name; 12901 } 12902 12903 /* Returns the dynamic reloc section associated with SEC. 12904 If necessary compute the name of the dynamic reloc section based 12905 on SEC's name (looked up in ABFD's string table) and the setting 12906 of IS_RELA. */ 12907 12908 asection * 12909 _bfd_elf_get_dynamic_reloc_section (bfd * abfd, 12910 asection * sec, 12911 bfd_boolean is_rela) 12912 { 12913 asection * reloc_sec = elf_section_data (sec)->sreloc; 12914 12915 if (reloc_sec == NULL) 12916 { 12917 const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela); 12918 12919 if (name != NULL) 12920 { 12921 reloc_sec = bfd_get_linker_section (abfd, name); 12922 12923 if (reloc_sec != NULL) 12924 elf_section_data (sec)->sreloc = reloc_sec; 12925 } 12926 } 12927 12928 return reloc_sec; 12929 } 12930 12931 /* Returns the dynamic reloc section associated with SEC. If the 12932 section does not exist it is created and attached to the DYNOBJ 12933 bfd and stored in the SRELOC field of SEC's elf_section_data 12934 structure. 12935 12936 ALIGNMENT is the alignment for the newly created section and 12937 IS_RELA defines whether the name should be .rela.<SEC's name> 12938 or .rel.<SEC's name>. The section name is looked up in the 12939 string table associated with ABFD. */ 12940 12941 asection * 12942 _bfd_elf_make_dynamic_reloc_section (asection * sec, 12943 bfd * dynobj, 12944 unsigned int alignment, 12945 bfd * abfd, 12946 bfd_boolean is_rela) 12947 { 12948 asection * reloc_sec = elf_section_data (sec)->sreloc; 12949 12950 if (reloc_sec == NULL) 12951 { 12952 const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela); 12953 12954 if (name == NULL) 12955 return NULL; 12956 12957 reloc_sec = bfd_get_linker_section (dynobj, name); 12958 12959 if (reloc_sec == NULL) 12960 { 12961 flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY 12962 | SEC_IN_MEMORY | SEC_LINKER_CREATED); 12963 if ((sec->flags & SEC_ALLOC) != 0) 12964 flags |= SEC_ALLOC | SEC_LOAD; 12965 12966 reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags); 12967 if (reloc_sec != NULL) 12968 { 12969 if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment)) 12970 reloc_sec = NULL; 12971 } 12972 } 12973 12974 elf_section_data (sec)->sreloc = reloc_sec; 12975 } 12976 12977 return reloc_sec; 12978 } 12979 12980 /* Copy the ELF symbol type associated with a linker hash entry. */ 12981 void 12982 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED, 12983 struct bfd_link_hash_entry * hdest, 12984 struct bfd_link_hash_entry * hsrc) 12985 { 12986 struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *)hdest; 12987 struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *)hsrc; 12988 12989 ehdest->type = ehsrc->type; 12990 ehdest->target_internal = ehsrc->target_internal; 12991 } 12992 12993 /* Append a RELA relocation REL to section S in BFD. */ 12994 12995 void 12996 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel) 12997 { 12998 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 12999 bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela); 13000 BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size); 13001 bed->s->swap_reloca_out (abfd, rel, loc); 13002 } 13003 13004 /* Append a REL relocation REL to section S in BFD. */ 13005 13006 void 13007 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel) 13008 { 13009 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 13010 bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel); 13011 BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size); 13012 bed->s->swap_reloc_out (abfd, rel, loc); 13013 } 13014