1 // symtab.h -- the gold symbol table -*- C++ -*- 2 3 // Copyright (C) 2006-2016 Free Software Foundation, Inc. 4 // Written by Ian Lance Taylor <iant@google.com>. 5 6 // This file is part of gold. 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 // Symbol_table 24 // The symbol table. 25 26 #ifndef GOLD_SYMTAB_H 27 #define GOLD_SYMTAB_H 28 29 #include <string> 30 #include <utility> 31 #include <vector> 32 33 #include "elfcpp.h" 34 #include "parameters.h" 35 #include "stringpool.h" 36 #include "object.h" 37 38 namespace gold 39 { 40 41 class Mapfile; 42 class Object; 43 class Relobj; 44 template<int size, bool big_endian> 45 class Sized_relobj_file; 46 template<int size, bool big_endian> 47 class Sized_pluginobj; 48 class Dynobj; 49 template<int size, bool big_endian> 50 class Sized_dynobj; 51 template<int size, bool big_endian> 52 class Sized_incrobj; 53 class Versions; 54 class Version_script_info; 55 class Input_objects; 56 class Output_data; 57 class Output_section; 58 class Output_segment; 59 class Output_file; 60 class Output_symtab_xindex; 61 class Garbage_collection; 62 class Icf; 63 64 // The base class of an entry in the symbol table. The symbol table 65 // can have a lot of entries, so we don't want this class too big. 66 // Size dependent fields can be found in the template class 67 // Sized_symbol. Targets may support their own derived classes. 68 69 class Symbol 70 { 71 public: 72 // Because we want the class to be small, we don't use any virtual 73 // functions. But because symbols can be defined in different 74 // places, we need to classify them. This enum is the different 75 // sources of symbols we support. 76 enum Source 77 { 78 // Symbol defined in a relocatable or dynamic input file--this is 79 // the most common case. 80 FROM_OBJECT, 81 // Symbol defined in an Output_data, a special section created by 82 // the target. 83 IN_OUTPUT_DATA, 84 // Symbol defined in an Output_segment, with no associated 85 // section. 86 IN_OUTPUT_SEGMENT, 87 // Symbol value is constant. 88 IS_CONSTANT, 89 // Symbol is undefined. 90 IS_UNDEFINED 91 }; 92 93 // When the source is IN_OUTPUT_SEGMENT, we need to describe what 94 // the offset means. 95 enum Segment_offset_base 96 { 97 // From the start of the segment. 98 SEGMENT_START, 99 // From the end of the segment. 100 SEGMENT_END, 101 // From the filesz of the segment--i.e., after the loaded bytes 102 // but before the bytes which are allocated but zeroed. 103 SEGMENT_BSS 104 }; 105 106 // Return the symbol name. 107 const char* 108 name() const 109 { return this->name_; } 110 111 // Return the (ANSI) demangled version of the name, if 112 // parameters.demangle() is true. Otherwise, return the name. This 113 // is intended to be used only for logging errors, so it's not 114 // super-efficient. 115 std::string 116 demangled_name() const; 117 118 // Return the symbol version. This will return NULL for an 119 // unversioned symbol. 120 const char* 121 version() const 122 { return this->version_; } 123 124 void 125 clear_version() 126 { this->version_ = NULL; } 127 128 // Return whether this version is the default for this symbol name 129 // (eg, "foo@@V2" is a default version; "foo@V1" is not). Only 130 // meaningful for versioned symbols. 131 bool 132 is_default() const 133 { 134 gold_assert(this->version_ != NULL); 135 return this->is_def_; 136 } 137 138 // Set that this version is the default for this symbol name. 139 void 140 set_is_default() 141 { this->is_def_ = true; } 142 143 // Set that this version is not the default for this symbol name. 144 void 145 set_is_not_default() 146 { this->is_def_ = false; } 147 148 // Return the symbol's name as name@version (or name@@version). 149 std::string 150 versioned_name() const; 151 152 // Return the symbol source. 153 Source 154 source() const 155 { return this->source_; } 156 157 // Return the object with which this symbol is associated. 158 Object* 159 object() const 160 { 161 gold_assert(this->source_ == FROM_OBJECT); 162 return this->u_.from_object.object; 163 } 164 165 // Return the index of the section in the input relocatable or 166 // dynamic object file. 167 unsigned int 168 shndx(bool* is_ordinary) const 169 { 170 gold_assert(this->source_ == FROM_OBJECT); 171 *is_ordinary = this->is_ordinary_shndx_; 172 return this->u_.from_object.shndx; 173 } 174 175 // Return the output data section with which this symbol is 176 // associated, if the symbol was specially defined with respect to 177 // an output data section. 178 Output_data* 179 output_data() const 180 { 181 gold_assert(this->source_ == IN_OUTPUT_DATA); 182 return this->u_.in_output_data.output_data; 183 } 184 185 // If this symbol was defined with respect to an output data 186 // section, return whether the value is an offset from end. 187 bool 188 offset_is_from_end() const 189 { 190 gold_assert(this->source_ == IN_OUTPUT_DATA); 191 return this->u_.in_output_data.offset_is_from_end; 192 } 193 194 // Return the output segment with which this symbol is associated, 195 // if the symbol was specially defined with respect to an output 196 // segment. 197 Output_segment* 198 output_segment() const 199 { 200 gold_assert(this->source_ == IN_OUTPUT_SEGMENT); 201 return this->u_.in_output_segment.output_segment; 202 } 203 204 // If this symbol was defined with respect to an output segment, 205 // return the offset base. 206 Segment_offset_base 207 offset_base() const 208 { 209 gold_assert(this->source_ == IN_OUTPUT_SEGMENT); 210 return this->u_.in_output_segment.offset_base; 211 } 212 213 // Return the symbol binding. 214 elfcpp::STB 215 binding() const 216 { return this->binding_; } 217 218 // Return the symbol type. 219 elfcpp::STT 220 type() const 221 { return this->type_; } 222 223 // Set the symbol type. 224 void 225 set_type(elfcpp::STT type) 226 { this->type_ = type; } 227 228 // Return true for function symbol. 229 bool 230 is_func() const 231 { 232 return (this->type_ == elfcpp::STT_FUNC 233 || this->type_ == elfcpp::STT_GNU_IFUNC); 234 } 235 236 // Return the symbol visibility. 237 elfcpp::STV 238 visibility() const 239 { return this->visibility_; } 240 241 // Set the visibility. 242 void 243 set_visibility(elfcpp::STV visibility) 244 { this->visibility_ = visibility; } 245 246 // Override symbol visibility. 247 void 248 override_visibility(elfcpp::STV); 249 250 // Set whether the symbol was originally a weak undef or a regular undef 251 // when resolved by a dynamic def or by a special symbol. 252 inline void 253 set_undef_binding(elfcpp::STB bind) 254 { 255 if (!this->undef_binding_set_ || this->undef_binding_weak_) 256 { 257 this->undef_binding_weak_ = bind == elfcpp::STB_WEAK; 258 this->undef_binding_set_ = true; 259 } 260 } 261 262 // Return TRUE if a weak undef was resolved by a dynamic def or 263 // by a special symbol. 264 inline bool 265 is_undef_binding_weak() const 266 { return this->undef_binding_weak_; } 267 268 // Return the non-visibility part of the st_other field. 269 unsigned char 270 nonvis() const 271 { return this->nonvis_; } 272 273 // Set the non-visibility part of the st_other field. 274 void 275 set_nonvis(unsigned int nonvis) 276 { this->nonvis_ = nonvis; } 277 278 // Return whether this symbol is a forwarder. This will never be 279 // true of a symbol found in the hash table, but may be true of 280 // symbol pointers attached to object files. 281 bool 282 is_forwarder() const 283 { return this->is_forwarder_; } 284 285 // Mark this symbol as a forwarder. 286 void 287 set_forwarder() 288 { this->is_forwarder_ = true; } 289 290 // Return whether this symbol has an alias in the weak aliases table 291 // in Symbol_table. 292 bool 293 has_alias() const 294 { return this->has_alias_; } 295 296 // Mark this symbol as having an alias. 297 void 298 set_has_alias() 299 { this->has_alias_ = true; } 300 301 // Return whether this symbol needs an entry in the dynamic symbol 302 // table. 303 bool 304 needs_dynsym_entry() const 305 { 306 return (this->needs_dynsym_entry_ 307 || (this->in_reg() 308 && this->in_dyn() 309 && this->is_externally_visible())); 310 } 311 312 // Mark this symbol as needing an entry in the dynamic symbol table. 313 void 314 set_needs_dynsym_entry() 315 { this->needs_dynsym_entry_ = true; } 316 317 // Return whether this symbol should be added to the dynamic symbol 318 // table. 319 bool 320 should_add_dynsym_entry(Symbol_table*) const; 321 322 // Return whether this symbol has been seen in a regular object. 323 bool 324 in_reg() const 325 { return this->in_reg_; } 326 327 // Mark this symbol as having been seen in a regular object. 328 void 329 set_in_reg() 330 { this->in_reg_ = true; } 331 332 // Return whether this symbol has been seen in a dynamic object. 333 bool 334 in_dyn() const 335 { return this->in_dyn_; } 336 337 // Mark this symbol as having been seen in a dynamic object. 338 void 339 set_in_dyn() 340 { this->in_dyn_ = true; } 341 342 // Return whether this symbol has been seen in a real ELF object. 343 // (IN_REG will return TRUE if the symbol has been seen in either 344 // a real ELF object or an object claimed by a plugin.) 345 bool 346 in_real_elf() const 347 { return this->in_real_elf_; } 348 349 // Mark this symbol as having been seen in a real ELF object. 350 void 351 set_in_real_elf() 352 { this->in_real_elf_ = true; } 353 354 // Return whether this symbol was defined in a section that was 355 // discarded from the link. This is used to control some error 356 // reporting. 357 bool 358 is_defined_in_discarded_section() const 359 { return this->is_defined_in_discarded_section_; } 360 361 // Mark this symbol as having been defined in a discarded section. 362 void 363 set_is_defined_in_discarded_section() 364 { this->is_defined_in_discarded_section_ = true; } 365 366 // Return the index of this symbol in the output file symbol table. 367 // A value of -1U means that this symbol is not going into the 368 // output file. This starts out as zero, and is set to a non-zero 369 // value by Symbol_table::finalize. It is an error to ask for the 370 // symbol table index before it has been set. 371 unsigned int 372 symtab_index() const 373 { 374 gold_assert(this->symtab_index_ != 0); 375 return this->symtab_index_; 376 } 377 378 // Set the index of the symbol in the output file symbol table. 379 void 380 set_symtab_index(unsigned int index) 381 { 382 gold_assert(index != 0); 383 this->symtab_index_ = index; 384 } 385 386 // Return whether this symbol already has an index in the output 387 // file symbol table. 388 bool 389 has_symtab_index() const 390 { return this->symtab_index_ != 0; } 391 392 // Return the index of this symbol in the dynamic symbol table. A 393 // value of -1U means that this symbol is not going into the dynamic 394 // symbol table. This starts out as zero, and is set to a non-zero 395 // during Layout::finalize. It is an error to ask for the dynamic 396 // symbol table index before it has been set. 397 unsigned int 398 dynsym_index() const 399 { 400 gold_assert(this->dynsym_index_ != 0); 401 return this->dynsym_index_; 402 } 403 404 // Set the index of the symbol in the dynamic symbol table. 405 void 406 set_dynsym_index(unsigned int index) 407 { 408 gold_assert(index != 0); 409 this->dynsym_index_ = index; 410 } 411 412 // Return whether this symbol already has an index in the dynamic 413 // symbol table. 414 bool 415 has_dynsym_index() const 416 { return this->dynsym_index_ != 0; } 417 418 // Return whether this symbol has an entry in the GOT section. 419 // For a TLS symbol, this GOT entry will hold its tp-relative offset. 420 bool 421 has_got_offset(unsigned int got_type) const 422 { return this->got_offsets_.get_offset(got_type) != -1U; } 423 424 // Return the offset into the GOT section of this symbol. 425 unsigned int 426 got_offset(unsigned int got_type) const 427 { 428 unsigned int got_offset = this->got_offsets_.get_offset(got_type); 429 gold_assert(got_offset != -1U); 430 return got_offset; 431 } 432 433 // Set the GOT offset of this symbol. 434 void 435 set_got_offset(unsigned int got_type, unsigned int got_offset) 436 { this->got_offsets_.set_offset(got_type, got_offset); } 437 438 // Return the GOT offset list. 439 const Got_offset_list* 440 got_offset_list() const 441 { return this->got_offsets_.get_list(); } 442 443 // Return whether this symbol has an entry in the PLT section. 444 bool 445 has_plt_offset() const 446 { return this->plt_offset_ != -1U; } 447 448 // Return the offset into the PLT section of this symbol. 449 unsigned int 450 plt_offset() const 451 { 452 gold_assert(this->has_plt_offset()); 453 return this->plt_offset_; 454 } 455 456 // Set the PLT offset of this symbol. 457 void 458 set_plt_offset(unsigned int plt_offset) 459 { 460 gold_assert(plt_offset != -1U); 461 this->plt_offset_ = plt_offset; 462 } 463 464 // Return whether this dynamic symbol needs a special value in the 465 // dynamic symbol table. 466 bool 467 needs_dynsym_value() const 468 { return this->needs_dynsym_value_; } 469 470 // Set that this dynamic symbol needs a special value in the dynamic 471 // symbol table. 472 void 473 set_needs_dynsym_value() 474 { 475 gold_assert(this->object()->is_dynamic()); 476 this->needs_dynsym_value_ = true; 477 } 478 479 // Return true if the final value of this symbol is known at link 480 // time. 481 bool 482 final_value_is_known() const; 483 484 // Return true if SHNDX represents a common symbol. This depends on 485 // the target. 486 static bool 487 is_common_shndx(unsigned int shndx); 488 489 // Return whether this is a defined symbol (not undefined or 490 // common). 491 bool 492 is_defined() const 493 { 494 bool is_ordinary; 495 if (this->source_ != FROM_OBJECT) 496 return this->source_ != IS_UNDEFINED; 497 unsigned int shndx = this->shndx(&is_ordinary); 498 return (is_ordinary 499 ? shndx != elfcpp::SHN_UNDEF 500 : !Symbol::is_common_shndx(shndx)); 501 } 502 503 // Return true if this symbol is from a dynamic object. 504 bool 505 is_from_dynobj() const 506 { 507 return this->source_ == FROM_OBJECT && this->object()->is_dynamic(); 508 } 509 510 // Return whether this is a placeholder symbol from a plugin object. 511 bool 512 is_placeholder() const 513 { 514 return this->source_ == FROM_OBJECT && this->object()->pluginobj() != NULL; 515 } 516 517 // Return whether this is an undefined symbol. 518 bool 519 is_undefined() const 520 { 521 bool is_ordinary; 522 return ((this->source_ == FROM_OBJECT 523 && this->shndx(&is_ordinary) == elfcpp::SHN_UNDEF 524 && is_ordinary) 525 || this->source_ == IS_UNDEFINED); 526 } 527 528 // Return whether this is a weak undefined symbol. 529 bool 530 is_weak_undefined() const 531 { 532 return (this->is_undefined() 533 && (this->binding() == elfcpp::STB_WEAK 534 || this->is_undef_binding_weak() 535 || parameters->options().weak_unresolved_symbols())); 536 } 537 538 // Return whether this is a strong undefined symbol. 539 bool 540 is_strong_undefined() const 541 { 542 return (this->is_undefined() 543 && this->binding() != elfcpp::STB_WEAK 544 && !this->is_undef_binding_weak() 545 && !parameters->options().weak_unresolved_symbols()); 546 } 547 548 // Return whether this is an absolute symbol. 549 bool 550 is_absolute() const 551 { 552 bool is_ordinary; 553 return ((this->source_ == FROM_OBJECT 554 && this->shndx(&is_ordinary) == elfcpp::SHN_ABS 555 && !is_ordinary) 556 || this->source_ == IS_CONSTANT); 557 } 558 559 // Return whether this is a common symbol. 560 bool 561 is_common() const 562 { 563 if (this->source_ != FROM_OBJECT) 564 return false; 565 bool is_ordinary; 566 unsigned int shndx = this->shndx(&is_ordinary); 567 return !is_ordinary && Symbol::is_common_shndx(shndx); 568 } 569 570 // Return whether this symbol can be seen outside this object. 571 bool 572 is_externally_visible() const 573 { 574 return ((this->visibility_ == elfcpp::STV_DEFAULT 575 || this->visibility_ == elfcpp::STV_PROTECTED) 576 && !this->is_forced_local_); 577 } 578 579 // Return true if this symbol can be preempted by a definition in 580 // another link unit. 581 bool 582 is_preemptible() const 583 { 584 // It doesn't make sense to ask whether a symbol defined in 585 // another object is preemptible. 586 gold_assert(!this->is_from_dynobj()); 587 588 // It doesn't make sense to ask whether an undefined symbol 589 // is preemptible. 590 gold_assert(!this->is_undefined()); 591 592 // If a symbol does not have default visibility, it can not be 593 // seen outside this link unit and therefore is not preemptible. 594 if (this->visibility_ != elfcpp::STV_DEFAULT) 595 return false; 596 597 // If this symbol has been forced to be a local symbol by a 598 // version script, then it is not visible outside this link unit 599 // and is not preemptible. 600 if (this->is_forced_local_) 601 return false; 602 603 // If we are not producing a shared library, then nothing is 604 // preemptible. 605 if (!parameters->options().shared()) 606 return false; 607 608 // If the symbol was named in a --dynamic-list script, it is preemptible. 609 if (parameters->options().in_dynamic_list(this->name())) 610 return true; 611 612 // If the user used -Bsymbolic, then nothing (else) is preemptible. 613 if (parameters->options().Bsymbolic()) 614 return false; 615 616 // If the user used -Bsymbolic-functions, then functions are not 617 // preemptible. We explicitly check for not being STT_OBJECT, 618 // rather than for being STT_FUNC, because that is what the GNU 619 // linker does. 620 if (this->type() != elfcpp::STT_OBJECT 621 && parameters->options().Bsymbolic_functions()) 622 return false; 623 624 // Otherwise the symbol is preemptible. 625 return true; 626 } 627 628 // Return true if this symbol is a function that needs a PLT entry. 629 bool 630 needs_plt_entry() const 631 { 632 // An undefined symbol from an executable does not need a PLT entry. 633 if (this->is_undefined() && !parameters->options().shared()) 634 return false; 635 636 // An STT_GNU_IFUNC symbol always needs a PLT entry, even when 637 // doing a static link. 638 if (this->type() == elfcpp::STT_GNU_IFUNC) 639 return true; 640 641 // We only need a PLT entry for a function. 642 if (!this->is_func()) 643 return false; 644 645 // If we're doing a static link or a -pie link, we don't create 646 // PLT entries. 647 if (parameters->doing_static_link() 648 || parameters->options().pie()) 649 return false; 650 651 // We need a PLT entry if the function is defined in a dynamic 652 // object, or is undefined when building a shared object, or if it 653 // is subject to pre-emption. 654 return (this->is_from_dynobj() 655 || this->is_undefined() 656 || this->is_preemptible()); 657 } 658 659 // When determining whether a reference to a symbol needs a dynamic 660 // relocation, we need to know several things about the reference. 661 // These flags may be or'ed together. 0 means that the symbol 662 // isn't referenced at all. 663 enum Reference_flags 664 { 665 // A reference to the symbol's absolute address. This includes 666 // references that cause an absolute address to be stored in the GOT. 667 ABSOLUTE_REF = 1, 668 // A reference that calculates the offset of the symbol from some 669 // anchor point, such as the PC or GOT. 670 RELATIVE_REF = 2, 671 // A TLS-related reference. 672 TLS_REF = 4, 673 // A reference that can always be treated as a function call. 674 FUNCTION_CALL = 8, 675 // When set, says that dynamic relocations are needed even if a 676 // symbol has a plt entry. 677 FUNC_DESC_ABI = 16, 678 }; 679 680 // Given a direct absolute or pc-relative static relocation against 681 // the global symbol, this function returns whether a dynamic relocation 682 // is needed. 683 684 bool 685 needs_dynamic_reloc(int flags) const 686 { 687 // No dynamic relocations in a static link! 688 if (parameters->doing_static_link()) 689 return false; 690 691 // A reference to an undefined symbol from an executable should be 692 // statically resolved to 0, and does not need a dynamic relocation. 693 // This matches gnu ld behavior. 694 if (this->is_undefined() && !parameters->options().shared()) 695 return false; 696 697 // A reference to an absolute symbol does not need a dynamic relocation. 698 if (this->is_absolute()) 699 return false; 700 701 // An absolute reference within a position-independent output file 702 // will need a dynamic relocation. 703 if ((flags & ABSOLUTE_REF) 704 && parameters->options().output_is_position_independent()) 705 return true; 706 707 // A function call that can branch to a local PLT entry does not need 708 // a dynamic relocation. 709 if ((flags & FUNCTION_CALL) && this->has_plt_offset()) 710 return false; 711 712 // A reference to any PLT entry in a non-position-independent executable 713 // does not need a dynamic relocation. 714 if (!(flags & FUNC_DESC_ABI) 715 && !parameters->options().output_is_position_independent() 716 && this->has_plt_offset()) 717 return false; 718 719 // A reference to a symbol defined in a dynamic object or to a 720 // symbol that is preemptible will need a dynamic relocation. 721 if (this->is_from_dynobj() 722 || this->is_undefined() 723 || this->is_preemptible()) 724 return true; 725 726 // For all other cases, return FALSE. 727 return false; 728 } 729 730 // Whether we should use the PLT offset associated with a symbol for 731 // a relocation. FLAGS is a set of Reference_flags. 732 733 bool 734 use_plt_offset(int flags) const 735 { 736 // If the symbol doesn't have a PLT offset, then naturally we 737 // don't want to use it. 738 if (!this->has_plt_offset()) 739 return false; 740 741 // For a STT_GNU_IFUNC symbol we always have to use the PLT entry. 742 if (this->type() == elfcpp::STT_GNU_IFUNC) 743 return true; 744 745 // If we are going to generate a dynamic relocation, then we will 746 // wind up using that, so no need to use the PLT entry. 747 if (this->needs_dynamic_reloc(flags)) 748 return false; 749 750 // If the symbol is from a dynamic object, we need to use the PLT 751 // entry. 752 if (this->is_from_dynobj()) 753 return true; 754 755 // If we are generating a shared object, and this symbol is 756 // undefined or preemptible, we need to use the PLT entry. 757 if (parameters->options().shared() 758 && (this->is_undefined() || this->is_preemptible())) 759 return true; 760 761 // If this is a call to a weak undefined symbol, we need to use 762 // the PLT entry; the symbol may be defined by a library loaded 763 // at runtime. 764 if ((flags & FUNCTION_CALL) && this->is_weak_undefined()) 765 return true; 766 767 // Otherwise we can use the regular definition. 768 return false; 769 } 770 771 // Given a direct absolute static relocation against 772 // the global symbol, where a dynamic relocation is needed, this 773 // function returns whether a relative dynamic relocation can be used. 774 // The caller must determine separately whether the static relocation 775 // is compatible with a relative relocation. 776 777 bool 778 can_use_relative_reloc(bool is_function_call) const 779 { 780 // A function call that can branch to a local PLT entry can 781 // use a RELATIVE relocation. 782 if (is_function_call && this->has_plt_offset()) 783 return true; 784 785 // A reference to a symbol defined in a dynamic object or to a 786 // symbol that is preemptible can not use a RELATIVE relocation. 787 if (this->is_from_dynobj() 788 || this->is_undefined() 789 || this->is_preemptible()) 790 return false; 791 792 // For all other cases, return TRUE. 793 return true; 794 } 795 796 // Return the output section where this symbol is defined. Return 797 // NULL if the symbol has an absolute value. 798 Output_section* 799 output_section() const; 800 801 // Set the symbol's output section. This is used for symbols 802 // defined in scripts. This should only be called after the symbol 803 // table has been finalized. 804 void 805 set_output_section(Output_section*); 806 807 // Set the symbol's output segment. This is used for pre-defined 808 // symbols whose segments aren't known until after layout is done 809 // (e.g., __ehdr_start). 810 void 811 set_output_segment(Output_segment*, Segment_offset_base); 812 813 // Set the symbol to undefined. This is used for pre-defined 814 // symbols whose segments aren't known until after layout is done 815 // (e.g., __ehdr_start). 816 void 817 set_undefined(); 818 819 // Return whether there should be a warning for references to this 820 // symbol. 821 bool 822 has_warning() const 823 { return this->has_warning_; } 824 825 // Mark this symbol as having a warning. 826 void 827 set_has_warning() 828 { this->has_warning_ = true; } 829 830 // Return whether this symbol is defined by a COPY reloc from a 831 // dynamic object. 832 bool 833 is_copied_from_dynobj() const 834 { return this->is_copied_from_dynobj_; } 835 836 // Mark this symbol as defined by a COPY reloc. 837 void 838 set_is_copied_from_dynobj() 839 { this->is_copied_from_dynobj_ = true; } 840 841 // Return whether this symbol is forced to visibility STB_LOCAL 842 // by a "local:" entry in a version script. 843 bool 844 is_forced_local() const 845 { return this->is_forced_local_; } 846 847 // Mark this symbol as forced to STB_LOCAL visibility. 848 void 849 set_is_forced_local() 850 { this->is_forced_local_ = true; } 851 852 // Return true if this may need a COPY relocation. 853 // References from an executable object to non-function symbols 854 // defined in a dynamic object may need a COPY relocation. 855 bool 856 may_need_copy_reloc() const 857 { 858 return (parameters->options().copyreloc() 859 && this->is_from_dynobj() 860 && !this->is_func()); 861 } 862 863 // Return true if this symbol was predefined by the linker. 864 bool 865 is_predefined() const 866 { return this->is_predefined_; } 867 868 // Return true if this is a C++ vtable symbol. 869 bool 870 is_cxx_vtable() const 871 { return is_prefix_of("_ZTV", this->name_); } 872 873 // Return true if this symbol is protected in a shared object. 874 // This is not the same as checking if visibility() == elfcpp::STV_PROTECTED, 875 // because the visibility_ field reflects the symbol's visibility from 876 // outside the shared object. 877 bool 878 is_protected() const 879 { return this->is_protected_; } 880 881 // Mark this symbol as protected in a shared object. 882 void 883 set_is_protected() 884 { this->is_protected_ = true; } 885 886 protected: 887 // Instances of this class should always be created at a specific 888 // size. 889 Symbol() 890 { memset(this, 0, sizeof *this); } 891 892 // Initialize the general fields. 893 void 894 init_fields(const char* name, const char* version, 895 elfcpp::STT type, elfcpp::STB binding, 896 elfcpp::STV visibility, unsigned char nonvis); 897 898 // Initialize fields from an ELF symbol in OBJECT. ST_SHNDX is the 899 // section index, IS_ORDINARY is whether it is a normal section 900 // index rather than a special code. 901 template<int size, bool big_endian> 902 void 903 init_base_object(const char* name, const char* version, Object* object, 904 const elfcpp::Sym<size, big_endian>&, unsigned int st_shndx, 905 bool is_ordinary); 906 907 // Initialize fields for an Output_data. 908 void 909 init_base_output_data(const char* name, const char* version, Output_data*, 910 elfcpp::STT, elfcpp::STB, elfcpp::STV, 911 unsigned char nonvis, bool offset_is_from_end, 912 bool is_predefined); 913 914 // Initialize fields for an Output_segment. 915 void 916 init_base_output_segment(const char* name, const char* version, 917 Output_segment* os, elfcpp::STT type, 918 elfcpp::STB binding, elfcpp::STV visibility, 919 unsigned char nonvis, 920 Segment_offset_base offset_base, 921 bool is_predefined); 922 923 // Initialize fields for a constant. 924 void 925 init_base_constant(const char* name, const char* version, elfcpp::STT type, 926 elfcpp::STB binding, elfcpp::STV visibility, 927 unsigned char nonvis, bool is_predefined); 928 929 // Initialize fields for an undefined symbol. 930 void 931 init_base_undefined(const char* name, const char* version, elfcpp::STT type, 932 elfcpp::STB binding, elfcpp::STV visibility, 933 unsigned char nonvis); 934 935 // Override existing symbol. 936 template<int size, bool big_endian> 937 void 938 override_base(const elfcpp::Sym<size, big_endian>&, unsigned int st_shndx, 939 bool is_ordinary, Object* object, const char* version); 940 941 // Override existing symbol with a special symbol. 942 void 943 override_base_with_special(const Symbol* from); 944 945 // Override symbol version. 946 void 947 override_version(const char* version); 948 949 // Allocate a common symbol by giving it a location in the output 950 // file. 951 void 952 allocate_base_common(Output_data*); 953 954 private: 955 Symbol(const Symbol&); 956 Symbol& operator=(const Symbol&); 957 958 // Symbol name (expected to point into a Stringpool). 959 const char* name_; 960 // Symbol version (expected to point into a Stringpool). This may 961 // be NULL. 962 const char* version_; 963 964 union 965 { 966 // This struct is used if SOURCE_ == FROM_OBJECT. 967 struct 968 { 969 // Object in which symbol is defined, or in which it was first 970 // seen. 971 Object* object; 972 // Section number in object_ in which symbol is defined. 973 unsigned int shndx; 974 } from_object; 975 976 // This struct is used if SOURCE_ == IN_OUTPUT_DATA. 977 struct 978 { 979 // Output_data in which symbol is defined. Before 980 // Layout::finalize the symbol's value is an offset within the 981 // Output_data. 982 Output_data* output_data; 983 // True if the offset is from the end, false if the offset is 984 // from the beginning. 985 bool offset_is_from_end; 986 } in_output_data; 987 988 // This struct is used if SOURCE_ == IN_OUTPUT_SEGMENT. 989 struct 990 { 991 // Output_segment in which the symbol is defined. Before 992 // Layout::finalize the symbol's value is an offset. 993 Output_segment* output_segment; 994 // The base to use for the offset before Layout::finalize. 995 Segment_offset_base offset_base; 996 } in_output_segment; 997 } u_; 998 999 // The index of this symbol in the output file. If the symbol is 1000 // not going into the output file, this value is -1U. This field 1001 // starts as always holding zero. It is set to a non-zero value by 1002 // Symbol_table::finalize. 1003 unsigned int symtab_index_; 1004 1005 // The index of this symbol in the dynamic symbol table. If the 1006 // symbol is not going into the dynamic symbol table, this value is 1007 // -1U. This field starts as always holding zero. It is set to a 1008 // non-zero value during Layout::finalize. 1009 unsigned int dynsym_index_; 1010 1011 // The GOT section entries for this symbol. A symbol may have more 1012 // than one GOT offset (e.g., when mixing modules compiled with two 1013 // different TLS models), but will usually have at most one. 1014 Got_offset_list got_offsets_; 1015 1016 // If this symbol has an entry in the PLT section, then this is the 1017 // offset from the start of the PLT section. This is -1U if there 1018 // is no PLT entry. 1019 unsigned int plt_offset_; 1020 1021 // Symbol type (bits 0 to 3). 1022 elfcpp::STT type_ : 4; 1023 // Symbol binding (bits 4 to 7). 1024 elfcpp::STB binding_ : 4; 1025 // Symbol visibility (bits 8 to 9). 1026 elfcpp::STV visibility_ : 2; 1027 // Rest of symbol st_other field (bits 10 to 15). 1028 unsigned int nonvis_ : 6; 1029 // The type of symbol (bits 16 to 18). 1030 Source source_ : 3; 1031 // True if this is the default version of the symbol (bit 19). 1032 bool is_def_ : 1; 1033 // True if this symbol really forwards to another symbol. This is 1034 // used when we discover after the fact that two different entries 1035 // in the hash table really refer to the same symbol. This will 1036 // never be set for a symbol found in the hash table, but may be set 1037 // for a symbol found in the list of symbols attached to an Object. 1038 // It forwards to the symbol found in the forwarders_ map of 1039 // Symbol_table (bit 20). 1040 bool is_forwarder_ : 1; 1041 // True if the symbol has an alias in the weak_aliases table in 1042 // Symbol_table (bit 21). 1043 bool has_alias_ : 1; 1044 // True if this symbol needs to be in the dynamic symbol table (bit 1045 // 22). 1046 bool needs_dynsym_entry_ : 1; 1047 // True if we've seen this symbol in a regular object (bit 23). 1048 bool in_reg_ : 1; 1049 // True if we've seen this symbol in a dynamic object (bit 24). 1050 bool in_dyn_ : 1; 1051 // True if this is a dynamic symbol which needs a special value in 1052 // the dynamic symbol table (bit 25). 1053 bool needs_dynsym_value_ : 1; 1054 // True if there is a warning for this symbol (bit 26). 1055 bool has_warning_ : 1; 1056 // True if we are using a COPY reloc for this symbol, so that the 1057 // real definition lives in a dynamic object (bit 27). 1058 bool is_copied_from_dynobj_ : 1; 1059 // True if this symbol was forced to local visibility by a version 1060 // script (bit 28). 1061 bool is_forced_local_ : 1; 1062 // True if the field u_.from_object.shndx is an ordinary section 1063 // index, not one of the special codes from SHN_LORESERVE to 1064 // SHN_HIRESERVE (bit 29). 1065 bool is_ordinary_shndx_ : 1; 1066 // True if we've seen this symbol in a "real" ELF object (bit 30). 1067 // If the symbol has been seen in a relocatable, non-IR, object file, 1068 // it's known to be referenced from outside the IR. A reference from 1069 // a dynamic object doesn't count as a "real" ELF, and we'll simply 1070 // mark the symbol as "visible" from outside the IR. The compiler 1071 // can use this distinction to guide its handling of COMDAT symbols. 1072 bool in_real_elf_ : 1; 1073 // True if this symbol is defined in a section which was discarded 1074 // (bit 31). 1075 bool is_defined_in_discarded_section_ : 1; 1076 // True if UNDEF_BINDING_WEAK_ has been set (bit 32). 1077 bool undef_binding_set_ : 1; 1078 // True if this symbol was a weak undef resolved by a dynamic def 1079 // or by a special symbol (bit 33). 1080 bool undef_binding_weak_ : 1; 1081 // True if this symbol is a predefined linker symbol (bit 34). 1082 bool is_predefined_ : 1; 1083 // True if this symbol has protected visibility in a shared object (bit 35). 1084 // The visibility_ field will be STV_DEFAULT in this case because we 1085 // must treat it as such from outside the shared object. 1086 bool is_protected_ : 1; 1087 }; 1088 1089 // The parts of a symbol which are size specific. Using a template 1090 // derived class like this helps us use less space on a 32-bit system. 1091 1092 template<int size> 1093 class Sized_symbol : public Symbol 1094 { 1095 public: 1096 typedef typename elfcpp::Elf_types<size>::Elf_Addr Value_type; 1097 typedef typename elfcpp::Elf_types<size>::Elf_WXword Size_type; 1098 1099 Sized_symbol() 1100 { } 1101 1102 // Initialize fields from an ELF symbol in OBJECT. ST_SHNDX is the 1103 // section index, IS_ORDINARY is whether it is a normal section 1104 // index rather than a special code. 1105 template<bool big_endian> 1106 void 1107 init_object(const char* name, const char* version, Object* object, 1108 const elfcpp::Sym<size, big_endian>&, unsigned int st_shndx, 1109 bool is_ordinary); 1110 1111 // Initialize fields for an Output_data. 1112 void 1113 init_output_data(const char* name, const char* version, Output_data*, 1114 Value_type value, Size_type symsize, elfcpp::STT, 1115 elfcpp::STB, elfcpp::STV, unsigned char nonvis, 1116 bool offset_is_from_end, bool is_predefined); 1117 1118 // Initialize fields for an Output_segment. 1119 void 1120 init_output_segment(const char* name, const char* version, Output_segment*, 1121 Value_type value, Size_type symsize, elfcpp::STT, 1122 elfcpp::STB, elfcpp::STV, unsigned char nonvis, 1123 Segment_offset_base offset_base, bool is_predefined); 1124 1125 // Initialize fields for a constant. 1126 void 1127 init_constant(const char* name, const char* version, Value_type value, 1128 Size_type symsize, elfcpp::STT, elfcpp::STB, elfcpp::STV, 1129 unsigned char nonvis, bool is_predefined); 1130 1131 // Initialize fields for an undefined symbol. 1132 void 1133 init_undefined(const char* name, const char* version, Value_type value, 1134 elfcpp::STT, elfcpp::STB, elfcpp::STV, unsigned char nonvis); 1135 1136 // Override existing symbol. 1137 template<bool big_endian> 1138 void 1139 override(const elfcpp::Sym<size, big_endian>&, unsigned int st_shndx, 1140 bool is_ordinary, Object* object, const char* version); 1141 1142 // Override existing symbol with a special symbol. 1143 void 1144 override_with_special(const Sized_symbol<size>*); 1145 1146 // Return the symbol's value. 1147 Value_type 1148 value() const 1149 { return this->value_; } 1150 1151 // Return the symbol's size (we can't call this 'size' because that 1152 // is a template parameter). 1153 Size_type 1154 symsize() const 1155 { return this->symsize_; } 1156 1157 // Set the symbol size. This is used when resolving common symbols. 1158 void 1159 set_symsize(Size_type symsize) 1160 { this->symsize_ = symsize; } 1161 1162 // Set the symbol value. This is called when we store the final 1163 // values of the symbols into the symbol table. 1164 void 1165 set_value(Value_type value) 1166 { this->value_ = value; } 1167 1168 // Allocate a common symbol by giving it a location in the output 1169 // file. 1170 void 1171 allocate_common(Output_data*, Value_type value); 1172 1173 private: 1174 Sized_symbol(const Sized_symbol&); 1175 Sized_symbol& operator=(const Sized_symbol&); 1176 1177 // Symbol value. Before Layout::finalize this is the offset in the 1178 // input section. This is set to the final value during 1179 // Layout::finalize. 1180 Value_type value_; 1181 // Symbol size. 1182 Size_type symsize_; 1183 }; 1184 1185 // A struct describing a symbol defined by the linker, where the value 1186 // of the symbol is defined based on an output section. This is used 1187 // for symbols defined by the linker, like "_init_array_start". 1188 1189 struct Define_symbol_in_section 1190 { 1191 // The symbol name. 1192 const char* name; 1193 // The name of the output section with which this symbol should be 1194 // associated. If there is no output section with that name, the 1195 // symbol will be defined as zero. 1196 const char* output_section; 1197 // The offset of the symbol within the output section. This is an 1198 // offset from the start of the output section, unless start_at_end 1199 // is true, in which case this is an offset from the end of the 1200 // output section. 1201 uint64_t value; 1202 // The size of the symbol. 1203 uint64_t size; 1204 // The symbol type. 1205 elfcpp::STT type; 1206 // The symbol binding. 1207 elfcpp::STB binding; 1208 // The symbol visibility. 1209 elfcpp::STV visibility; 1210 // The rest of the st_other field. 1211 unsigned char nonvis; 1212 // If true, the value field is an offset from the end of the output 1213 // section. 1214 bool offset_is_from_end; 1215 // If true, this symbol is defined only if we see a reference to it. 1216 bool only_if_ref; 1217 }; 1218 1219 // A struct describing a symbol defined by the linker, where the value 1220 // of the symbol is defined based on a segment. This is used for 1221 // symbols defined by the linker, like "_end". We describe the 1222 // segment with which the symbol should be associated by its 1223 // characteristics. If no segment meets these characteristics, the 1224 // symbol will be defined as zero. If there is more than one segment 1225 // which meets these characteristics, we will use the first one. 1226 1227 struct Define_symbol_in_segment 1228 { 1229 // The symbol name. 1230 const char* name; 1231 // The segment type where the symbol should be defined, typically 1232 // PT_LOAD. 1233 elfcpp::PT segment_type; 1234 // Bitmask of segment flags which must be set. 1235 elfcpp::PF segment_flags_set; 1236 // Bitmask of segment flags which must be clear. 1237 elfcpp::PF segment_flags_clear; 1238 // The offset of the symbol within the segment. The offset is 1239 // calculated from the position set by offset_base. 1240 uint64_t value; 1241 // The size of the symbol. 1242 uint64_t size; 1243 // The symbol type. 1244 elfcpp::STT type; 1245 // The symbol binding. 1246 elfcpp::STB binding; 1247 // The symbol visibility. 1248 elfcpp::STV visibility; 1249 // The rest of the st_other field. 1250 unsigned char nonvis; 1251 // The base from which we compute the offset. 1252 Symbol::Segment_offset_base offset_base; 1253 // If true, this symbol is defined only if we see a reference to it. 1254 bool only_if_ref; 1255 }; 1256 1257 // Specify an object/section/offset location. Used by ODR code. 1258 1259 struct Symbol_location 1260 { 1261 // Object where the symbol is defined. 1262 Object* object; 1263 // Section-in-object where the symbol is defined. 1264 unsigned int shndx; 1265 // For relocatable objects, offset-in-section where the symbol is defined. 1266 // For dynamic objects, address where the symbol is defined. 1267 off_t offset; 1268 bool operator==(const Symbol_location& that) const 1269 { 1270 return (this->object == that.object 1271 && this->shndx == that.shndx 1272 && this->offset == that.offset); 1273 } 1274 }; 1275 1276 // This class manages warnings. Warnings are a GNU extension. When 1277 // we see a section named .gnu.warning.SYM in an object file, and if 1278 // we wind using the definition of SYM from that object file, then we 1279 // will issue a warning for any relocation against SYM from a 1280 // different object file. The text of the warning is the contents of 1281 // the section. This is not precisely the definition used by the old 1282 // GNU linker; the old GNU linker treated an occurrence of 1283 // .gnu.warning.SYM as defining a warning symbol. A warning symbol 1284 // would trigger a warning on any reference. However, it was 1285 // inconsistent in that a warning in a dynamic object only triggered 1286 // if there was no definition in a regular object. This linker is 1287 // different in that we only issue a warning if we use the symbol 1288 // definition from the same object file as the warning section. 1289 1290 class Warnings 1291 { 1292 public: 1293 Warnings() 1294 : warnings_() 1295 { } 1296 1297 // Add a warning for symbol NAME in object OBJ. WARNING is the text 1298 // of the warning. 1299 void 1300 add_warning(Symbol_table* symtab, const char* name, Object* obj, 1301 const std::string& warning); 1302 1303 // For each symbol for which we should give a warning, make a note 1304 // on the symbol. 1305 void 1306 note_warnings(Symbol_table* symtab); 1307 1308 // Issue a warning for a reference to SYM at RELINFO's location. 1309 template<int size, bool big_endian> 1310 void 1311 issue_warning(const Symbol* sym, const Relocate_info<size, big_endian>*, 1312 size_t relnum, off_t reloffset) const; 1313 1314 private: 1315 Warnings(const Warnings&); 1316 Warnings& operator=(const Warnings&); 1317 1318 // What we need to know to get the warning text. 1319 struct Warning_location 1320 { 1321 // The object the warning is in. 1322 Object* object; 1323 // The warning text. 1324 std::string text; 1325 1326 Warning_location() 1327 : object(NULL), text() 1328 { } 1329 1330 void 1331 set(Object* o, const std::string& t) 1332 { 1333 this->object = o; 1334 this->text = t; 1335 } 1336 }; 1337 1338 // A mapping from warning symbol names (canonicalized in 1339 // Symbol_table's namepool_ field) to warning information. 1340 typedef Unordered_map<const char*, Warning_location> Warning_table; 1341 1342 Warning_table warnings_; 1343 }; 1344 1345 // The main linker symbol table. 1346 1347 class Symbol_table 1348 { 1349 public: 1350 // The different places where a symbol definition can come from. 1351 enum Defined 1352 { 1353 // Defined in an object file--the normal case. 1354 OBJECT, 1355 // Defined for a COPY reloc. 1356 COPY, 1357 // Defined on the command line using --defsym. 1358 DEFSYM, 1359 // Defined (so to speak) on the command line using -u. 1360 UNDEFINED, 1361 // Defined in a linker script. 1362 SCRIPT, 1363 // Predefined by the linker. 1364 PREDEFINED, 1365 // Defined by the linker during an incremental base link, but not 1366 // a predefined symbol (e.g., common, defined in script). 1367 INCREMENTAL_BASE, 1368 }; 1369 1370 // The order in which we sort common symbols. 1371 enum Sort_commons_order 1372 { 1373 SORT_COMMONS_BY_SIZE_DESCENDING, 1374 SORT_COMMONS_BY_ALIGNMENT_DESCENDING, 1375 SORT_COMMONS_BY_ALIGNMENT_ASCENDING 1376 }; 1377 1378 // COUNT is an estimate of how many symbols will be inserted in the 1379 // symbol table. It's ok to put 0 if you don't know; a correct 1380 // guess will just save some CPU by reducing hashtable resizes. 1381 Symbol_table(unsigned int count, const Version_script_info& version_script); 1382 1383 ~Symbol_table(); 1384 1385 void 1386 set_icf(Icf* icf) 1387 { this->icf_ = icf;} 1388 1389 Icf* 1390 icf() const 1391 { return this->icf_; } 1392 1393 // Returns true if ICF determined that this is a duplicate section. 1394 bool 1395 is_section_folded(Relobj* obj, unsigned int shndx) const; 1396 1397 void 1398 set_gc(Garbage_collection* gc) 1399 { this->gc_ = gc; } 1400 1401 Garbage_collection* 1402 gc() const 1403 { return this->gc_; } 1404 1405 // During garbage collection, this keeps undefined symbols. 1406 void 1407 gc_mark_undef_symbols(Layout*); 1408 1409 // This tells garbage collection that this symbol is referenced. 1410 void 1411 gc_mark_symbol(Symbol* sym); 1412 1413 // During garbage collection, this keeps sections that correspond to 1414 // symbols seen in dynamic objects. 1415 inline void 1416 gc_mark_dyn_syms(Symbol* sym); 1417 1418 // Add COUNT external symbols from the relocatable object RELOBJ to 1419 // the symbol table. SYMS is the symbols, SYMNDX_OFFSET is the 1420 // offset in the symbol table of the first symbol, SYM_NAMES is 1421 // their names, SYM_NAME_SIZE is the size of SYM_NAMES. This sets 1422 // SYMPOINTERS to point to the symbols in the symbol table. It sets 1423 // *DEFINED to the number of defined symbols. 1424 template<int size, bool big_endian> 1425 void 1426 add_from_relobj(Sized_relobj_file<size, big_endian>* relobj, 1427 const unsigned char* syms, size_t count, 1428 size_t symndx_offset, const char* sym_names, 1429 size_t sym_name_size, 1430 typename Sized_relobj_file<size, big_endian>::Symbols*, 1431 size_t* defined); 1432 1433 // Add one external symbol from the plugin object OBJ to the symbol table. 1434 // Returns a pointer to the resolved symbol in the symbol table. 1435 template<int size, bool big_endian> 1436 Symbol* 1437 add_from_pluginobj(Sized_pluginobj<size, big_endian>* obj, 1438 const char* name, const char* ver, 1439 elfcpp::Sym<size, big_endian>* sym); 1440 1441 // Add COUNT dynamic symbols from the dynamic object DYNOBJ to the 1442 // symbol table. SYMS is the symbols. SYM_NAMES is their names. 1443 // SYM_NAME_SIZE is the size of SYM_NAMES. The other parameters are 1444 // symbol version data. 1445 template<int size, bool big_endian> 1446 void 1447 add_from_dynobj(Sized_dynobj<size, big_endian>* dynobj, 1448 const unsigned char* syms, size_t count, 1449 const char* sym_names, size_t sym_name_size, 1450 const unsigned char* versym, size_t versym_size, 1451 const std::vector<const char*>*, 1452 typename Sized_relobj_file<size, big_endian>::Symbols*, 1453 size_t* defined); 1454 1455 // Add one external symbol from the incremental object OBJ to the symbol 1456 // table. Returns a pointer to the resolved symbol in the symbol table. 1457 template<int size, bool big_endian> 1458 Sized_symbol<size>* 1459 add_from_incrobj(Object* obj, const char* name, 1460 const char* ver, elfcpp::Sym<size, big_endian>* sym); 1461 1462 // Define a special symbol based on an Output_data. It is a 1463 // multiple definition error if this symbol is already defined. 1464 Symbol* 1465 define_in_output_data(const char* name, const char* version, Defined, 1466 Output_data*, uint64_t value, uint64_t symsize, 1467 elfcpp::STT type, elfcpp::STB binding, 1468 elfcpp::STV visibility, unsigned char nonvis, 1469 bool offset_is_from_end, bool only_if_ref); 1470 1471 // Define a special symbol based on an Output_segment. It is a 1472 // multiple definition error if this symbol is already defined. 1473 Symbol* 1474 define_in_output_segment(const char* name, const char* version, Defined, 1475 Output_segment*, uint64_t value, uint64_t symsize, 1476 elfcpp::STT type, elfcpp::STB binding, 1477 elfcpp::STV visibility, unsigned char nonvis, 1478 Symbol::Segment_offset_base, bool only_if_ref); 1479 1480 // Define a special symbol with a constant value. It is a multiple 1481 // definition error if this symbol is already defined. 1482 Symbol* 1483 define_as_constant(const char* name, const char* version, Defined, 1484 uint64_t value, uint64_t symsize, elfcpp::STT type, 1485 elfcpp::STB binding, elfcpp::STV visibility, 1486 unsigned char nonvis, bool only_if_ref, 1487 bool force_override); 1488 1489 // Define a set of symbols in output sections. If ONLY_IF_REF is 1490 // true, only define them if they are referenced. 1491 void 1492 define_symbols(const Layout*, int count, const Define_symbol_in_section*, 1493 bool only_if_ref); 1494 1495 // Define a set of symbols in output segments. If ONLY_IF_REF is 1496 // true, only defined them if they are referenced. 1497 void 1498 define_symbols(const Layout*, int count, const Define_symbol_in_segment*, 1499 bool only_if_ref); 1500 1501 // Add a target-specific global symbol. 1502 // (Used by SPARC backend to add STT_SPARC_REGISTER symbols.) 1503 void 1504 add_target_global_symbol(Symbol* sym) 1505 { this->target_symbols_.push_back(sym); } 1506 1507 // Define SYM using a COPY reloc. POSD is the Output_data where the 1508 // symbol should be defined--typically a .dyn.bss section. VALUE is 1509 // the offset within POSD. 1510 template<int size> 1511 void 1512 define_with_copy_reloc(Sized_symbol<size>* sym, Output_data* posd, 1513 typename elfcpp::Elf_types<size>::Elf_Addr); 1514 1515 // Look up a symbol. 1516 Symbol* 1517 lookup(const char*, const char* version = NULL) const; 1518 1519 // Return the real symbol associated with the forwarder symbol FROM. 1520 Symbol* 1521 resolve_forwards(const Symbol* from) const; 1522 1523 // Return the sized version of a symbol in this table. 1524 template<int size> 1525 Sized_symbol<size>* 1526 get_sized_symbol(Symbol*) const; 1527 1528 template<int size> 1529 const Sized_symbol<size>* 1530 get_sized_symbol(const Symbol*) const; 1531 1532 // Return the count of undefined symbols seen. 1533 size_t 1534 saw_undefined() const 1535 { return this->saw_undefined_; } 1536 1537 // Allocate the common symbols 1538 void 1539 allocate_commons(Layout*, Mapfile*); 1540 1541 // Add a warning for symbol NAME in object OBJ. WARNING is the text 1542 // of the warning. 1543 void 1544 add_warning(const char* name, Object* obj, const std::string& warning) 1545 { this->warnings_.add_warning(this, name, obj, warning); } 1546 1547 // Canonicalize a symbol name for use in the hash table. 1548 const char* 1549 canonicalize_name(const char* name) 1550 { return this->namepool_.add(name, true, NULL); } 1551 1552 // Possibly issue a warning for a reference to SYM at LOCATION which 1553 // is in OBJ. 1554 template<int size, bool big_endian> 1555 void 1556 issue_warning(const Symbol* sym, 1557 const Relocate_info<size, big_endian>* relinfo, 1558 size_t relnum, off_t reloffset) const 1559 { this->warnings_.issue_warning(sym, relinfo, relnum, reloffset); } 1560 1561 // Check candidate_odr_violations_ to find symbols with the same name 1562 // but apparently different definitions (different source-file/line-no). 1563 void 1564 detect_odr_violations(const Task*, const char* output_file_name) const; 1565 1566 // Add any undefined symbols named on the command line to the symbol 1567 // table. 1568 void 1569 add_undefined_symbols_from_command_line(Layout*); 1570 1571 // SYM is defined using a COPY reloc. Return the dynamic object 1572 // where the original definition was found. 1573 Dynobj* 1574 get_copy_source(const Symbol* sym) const; 1575 1576 // Set the dynamic symbol indexes. INDEX is the index of the first 1577 // global dynamic symbol. Pointers to the symbols are stored into 1578 // the vector. The names are stored into the Stringpool. This 1579 // returns an updated dynamic symbol index. 1580 unsigned int 1581 set_dynsym_indexes(unsigned int index, std::vector<Symbol*>*, 1582 Stringpool*, Versions*); 1583 1584 // Finalize the symbol table after we have set the final addresses 1585 // of all the input sections. This sets the final symbol indexes, 1586 // values and adds the names to *POOL. *PLOCAL_SYMCOUNT is the 1587 // index of the first global symbol. OFF is the file offset of the 1588 // global symbol table, DYNOFF is the offset of the globals in the 1589 // dynamic symbol table, DYN_GLOBAL_INDEX is the index of the first 1590 // global dynamic symbol, and DYNCOUNT is the number of global 1591 // dynamic symbols. This records the parameters, and returns the 1592 // new file offset. It updates *PLOCAL_SYMCOUNT if it created any 1593 // local symbols. 1594 off_t 1595 finalize(off_t off, off_t dynoff, size_t dyn_global_index, size_t dyncount, 1596 Stringpool* pool, unsigned int* plocal_symcount); 1597 1598 // Set the final file offset of the symbol table. 1599 void 1600 set_file_offset(off_t off) 1601 { this->offset_ = off; } 1602 1603 // Status code of Symbol_table::compute_final_value. 1604 enum Compute_final_value_status 1605 { 1606 // No error. 1607 CFVS_OK, 1608 // Unsupported symbol section. 1609 CFVS_UNSUPPORTED_SYMBOL_SECTION, 1610 // No output section. 1611 CFVS_NO_OUTPUT_SECTION 1612 }; 1613 1614 // Compute the final value of SYM and store status in location PSTATUS. 1615 // During relaxation, this may be called multiple times for a symbol to 1616 // compute its would-be final value in each relaxation pass. 1617 1618 template<int size> 1619 typename Sized_symbol<size>::Value_type 1620 compute_final_value(const Sized_symbol<size>* sym, 1621 Compute_final_value_status* pstatus) const; 1622 1623 // Return the index of the first global symbol. 1624 unsigned int 1625 first_global_index() const 1626 { return this->first_global_index_; } 1627 1628 // Return the total number of symbols in the symbol table. 1629 unsigned int 1630 output_count() const 1631 { return this->output_count_; } 1632 1633 // Write out the global symbols. 1634 void 1635 write_globals(const Stringpool*, const Stringpool*, 1636 Output_symtab_xindex*, Output_symtab_xindex*, 1637 Output_file*) const; 1638 1639 // Write out a section symbol. Return the updated offset. 1640 void 1641 write_section_symbol(const Output_section*, Output_symtab_xindex*, 1642 Output_file*, off_t) const; 1643 1644 // Loop over all symbols, applying the function F to each. 1645 template<int size, typename F> 1646 void 1647 for_all_symbols(F f) const 1648 { 1649 for (Symbol_table_type::const_iterator p = this->table_.begin(); 1650 p != this->table_.end(); 1651 ++p) 1652 { 1653 Sized_symbol<size>* sym = static_cast<Sized_symbol<size>*>(p->second); 1654 f(sym); 1655 } 1656 } 1657 1658 // Dump statistical information to stderr. 1659 void 1660 print_stats() const; 1661 1662 // Return the version script information. 1663 const Version_script_info& 1664 version_script() const 1665 { return version_script_; } 1666 1667 private: 1668 Symbol_table(const Symbol_table&); 1669 Symbol_table& operator=(const Symbol_table&); 1670 1671 // The type of the list of common symbols. 1672 typedef std::vector<Symbol*> Commons_type; 1673 1674 // The type of the symbol hash table. 1675 1676 typedef std::pair<Stringpool::Key, Stringpool::Key> Symbol_table_key; 1677 1678 // The hash function. The key values are Stringpool keys. 1679 struct Symbol_table_hash 1680 { 1681 inline size_t 1682 operator()(const Symbol_table_key& key) const 1683 { 1684 return key.first ^ key.second; 1685 } 1686 }; 1687 1688 struct Symbol_table_eq 1689 { 1690 bool 1691 operator()(const Symbol_table_key&, const Symbol_table_key&) const; 1692 }; 1693 1694 typedef Unordered_map<Symbol_table_key, Symbol*, Symbol_table_hash, 1695 Symbol_table_eq> Symbol_table_type; 1696 1697 // A map from symbol name (as a pointer into the namepool) to all 1698 // the locations the symbols is (weakly) defined (and certain other 1699 // conditions are met). This map will be used later to detect 1700 // possible One Definition Rule (ODR) violations. 1701 struct Symbol_location_hash 1702 { 1703 size_t operator()(const Symbol_location& loc) const 1704 { return reinterpret_cast<uintptr_t>(loc.object) ^ loc.offset ^ loc.shndx; } 1705 }; 1706 1707 typedef Unordered_map<const char*, 1708 Unordered_set<Symbol_location, Symbol_location_hash> > 1709 Odr_map; 1710 1711 // Make FROM a forwarder symbol to TO. 1712 void 1713 make_forwarder(Symbol* from, Symbol* to); 1714 1715 // Add a symbol. 1716 template<int size, bool big_endian> 1717 Sized_symbol<size>* 1718 add_from_object(Object*, const char* name, Stringpool::Key name_key, 1719 const char* version, Stringpool::Key version_key, 1720 bool def, const elfcpp::Sym<size, big_endian>& sym, 1721 unsigned int st_shndx, bool is_ordinary, 1722 unsigned int orig_st_shndx); 1723 1724 // Define a default symbol. 1725 template<int size, bool big_endian> 1726 void 1727 define_default_version(Sized_symbol<size>*, bool, 1728 Symbol_table_type::iterator); 1729 1730 // Resolve symbols. 1731 template<int size, bool big_endian> 1732 void 1733 resolve(Sized_symbol<size>* to, 1734 const elfcpp::Sym<size, big_endian>& sym, 1735 unsigned int st_shndx, bool is_ordinary, 1736 unsigned int orig_st_shndx, 1737 Object*, const char* version, 1738 bool is_default_version); 1739 1740 template<int size, bool big_endian> 1741 void 1742 resolve(Sized_symbol<size>* to, const Sized_symbol<size>* from); 1743 1744 // Record that a symbol is forced to be local by a version script or 1745 // by visibility. 1746 void 1747 force_local(Symbol*); 1748 1749 // Adjust NAME and *NAME_KEY for wrapping. 1750 const char* 1751 wrap_symbol(const char* name, Stringpool::Key* name_key); 1752 1753 // Whether we should override a symbol, based on flags in 1754 // resolve.cc. 1755 static bool 1756 should_override(const Symbol*, unsigned int, elfcpp::STT, Defined, 1757 Object*, bool*, bool*, bool); 1758 1759 // Report a problem in symbol resolution. 1760 static void 1761 report_resolve_problem(bool is_error, const char* msg, const Symbol* to, 1762 Defined, Object* object); 1763 1764 // Override a symbol. 1765 template<int size, bool big_endian> 1766 void 1767 override(Sized_symbol<size>* tosym, 1768 const elfcpp::Sym<size, big_endian>& fromsym, 1769 unsigned int st_shndx, bool is_ordinary, 1770 Object* object, const char* version); 1771 1772 // Whether we should override a symbol with a special symbol which 1773 // is automatically defined by the linker. 1774 static bool 1775 should_override_with_special(const Symbol*, elfcpp::STT, Defined); 1776 1777 // Override a symbol with a special symbol. 1778 template<int size> 1779 void 1780 override_with_special(Sized_symbol<size>* tosym, 1781 const Sized_symbol<size>* fromsym); 1782 1783 // Record all weak alias sets for a dynamic object. 1784 template<int size> 1785 void 1786 record_weak_aliases(std::vector<Sized_symbol<size>*>*); 1787 1788 // Define a special symbol. 1789 template<int size, bool big_endian> 1790 Sized_symbol<size>* 1791 define_special_symbol(const char** pname, const char** pversion, 1792 bool only_if_ref, Sized_symbol<size>** poldsym, 1793 bool* resolve_oldsym); 1794 1795 // Define a symbol in an Output_data, sized version. 1796 template<int size> 1797 Sized_symbol<size>* 1798 do_define_in_output_data(const char* name, const char* version, Defined, 1799 Output_data*, 1800 typename elfcpp::Elf_types<size>::Elf_Addr value, 1801 typename elfcpp::Elf_types<size>::Elf_WXword ssize, 1802 elfcpp::STT type, elfcpp::STB binding, 1803 elfcpp::STV visibility, unsigned char nonvis, 1804 bool offset_is_from_end, bool only_if_ref); 1805 1806 // Define a symbol in an Output_segment, sized version. 1807 template<int size> 1808 Sized_symbol<size>* 1809 do_define_in_output_segment( 1810 const char* name, const char* version, Defined, Output_segment* os, 1811 typename elfcpp::Elf_types<size>::Elf_Addr value, 1812 typename elfcpp::Elf_types<size>::Elf_WXword ssize, 1813 elfcpp::STT type, elfcpp::STB binding, 1814 elfcpp::STV visibility, unsigned char nonvis, 1815 Symbol::Segment_offset_base offset_base, bool only_if_ref); 1816 1817 // Define a symbol as a constant, sized version. 1818 template<int size> 1819 Sized_symbol<size>* 1820 do_define_as_constant( 1821 const char* name, const char* version, Defined, 1822 typename elfcpp::Elf_types<size>::Elf_Addr value, 1823 typename elfcpp::Elf_types<size>::Elf_WXword ssize, 1824 elfcpp::STT type, elfcpp::STB binding, 1825 elfcpp::STV visibility, unsigned char nonvis, 1826 bool only_if_ref, bool force_override); 1827 1828 // Add any undefined symbols named on the command line to the symbol 1829 // table, sized version. 1830 template<int size> 1831 void 1832 do_add_undefined_symbols_from_command_line(Layout*); 1833 1834 // Add one undefined symbol. 1835 template<int size> 1836 void 1837 add_undefined_symbol_from_command_line(const char* name); 1838 1839 // Types of common symbols. 1840 1841 enum Commons_section_type 1842 { 1843 COMMONS_NORMAL, 1844 COMMONS_TLS, 1845 COMMONS_SMALL, 1846 COMMONS_LARGE 1847 }; 1848 1849 // Allocate the common symbols, sized version. 1850 template<int size> 1851 void 1852 do_allocate_commons(Layout*, Mapfile*, Sort_commons_order); 1853 1854 // Allocate the common symbols from one list. 1855 template<int size> 1856 void 1857 do_allocate_commons_list(Layout*, Commons_section_type, Commons_type*, 1858 Mapfile*, Sort_commons_order); 1859 1860 // Returns all of the lines attached to LOC, not just the one the 1861 // instruction actually came from. This helps the ODR checker avoid 1862 // false positives. 1863 static std::vector<std::string> 1864 linenos_from_loc(const Task* task, const Symbol_location& loc); 1865 1866 // Implement detect_odr_violations. 1867 template<int size, bool big_endian> 1868 void 1869 sized_detect_odr_violations() const; 1870 1871 // Finalize symbols specialized for size. 1872 template<int size> 1873 off_t 1874 sized_finalize(off_t, Stringpool*, unsigned int*); 1875 1876 // Finalize a symbol. Return whether it should be added to the 1877 // symbol table. 1878 template<int size> 1879 bool 1880 sized_finalize_symbol(Symbol*); 1881 1882 // Add a symbol the final symtab by setting its index. 1883 template<int size> 1884 void 1885 add_to_final_symtab(Symbol*, Stringpool*, unsigned int* pindex, off_t* poff); 1886 1887 // Write globals specialized for size and endianness. 1888 template<int size, bool big_endian> 1889 void 1890 sized_write_globals(const Stringpool*, const Stringpool*, 1891 Output_symtab_xindex*, Output_symtab_xindex*, 1892 Output_file*) const; 1893 1894 // Write out a symbol to P. 1895 template<int size, bool big_endian> 1896 void 1897 sized_write_symbol(Sized_symbol<size>*, 1898 typename elfcpp::Elf_types<size>::Elf_Addr value, 1899 unsigned int shndx, elfcpp::STB, 1900 const Stringpool*, unsigned char* p) const; 1901 1902 // Possibly warn about an undefined symbol from a dynamic object. 1903 void 1904 warn_about_undefined_dynobj_symbol(Symbol*) const; 1905 1906 // Write out a section symbol, specialized for size and endianness. 1907 template<int size, bool big_endian> 1908 void 1909 sized_write_section_symbol(const Output_section*, Output_symtab_xindex*, 1910 Output_file*, off_t) const; 1911 1912 // The type of the list of symbols which have been forced local. 1913 typedef std::vector<Symbol*> Forced_locals; 1914 1915 // A map from symbols with COPY relocs to the dynamic objects where 1916 // they are defined. 1917 typedef Unordered_map<const Symbol*, Dynobj*> Copied_symbol_dynobjs; 1918 1919 // We increment this every time we see a new undefined symbol, for 1920 // use in archive groups. 1921 size_t saw_undefined_; 1922 // The index of the first global symbol in the output file. 1923 unsigned int first_global_index_; 1924 // The file offset within the output symtab section where we should 1925 // write the table. 1926 off_t offset_; 1927 // The number of global symbols we want to write out. 1928 unsigned int output_count_; 1929 // The file offset of the global dynamic symbols, or 0 if none. 1930 off_t dynamic_offset_; 1931 // The index of the first global dynamic symbol. 1932 unsigned int first_dynamic_global_index_; 1933 // The number of global dynamic symbols, or 0 if none. 1934 unsigned int dynamic_count_; 1935 // The symbol hash table. 1936 Symbol_table_type table_; 1937 // A pool of symbol names. This is used for all global symbols. 1938 // Entries in the hash table point into this pool. 1939 Stringpool namepool_; 1940 // Forwarding symbols. 1941 Unordered_map<const Symbol*, Symbol*> forwarders_; 1942 // Weak aliases. A symbol in this list points to the next alias. 1943 // The aliases point to each other in a circular list. 1944 Unordered_map<Symbol*, Symbol*> weak_aliases_; 1945 // We don't expect there to be very many common symbols, so we keep 1946 // a list of them. When we find a common symbol we add it to this 1947 // list. It is possible that by the time we process the list the 1948 // symbol is no longer a common symbol. It may also have become a 1949 // forwarder. 1950 Commons_type commons_; 1951 // This is like the commons_ field, except that it holds TLS common 1952 // symbols. 1953 Commons_type tls_commons_; 1954 // This is for small common symbols. 1955 Commons_type small_commons_; 1956 // This is for large common symbols. 1957 Commons_type large_commons_; 1958 // A list of symbols which have been forced to be local. We don't 1959 // expect there to be very many of them, so we keep a list of them 1960 // rather than walking the whole table to find them. 1961 Forced_locals forced_locals_; 1962 // Manage symbol warnings. 1963 Warnings warnings_; 1964 // Manage potential One Definition Rule (ODR) violations. 1965 Odr_map candidate_odr_violations_; 1966 1967 // When we emit a COPY reloc for a symbol, we define it in an 1968 // Output_data. When it's time to emit version information for it, 1969 // we need to know the dynamic object in which we found the original 1970 // definition. This maps symbols with COPY relocs to the dynamic 1971 // object where they were defined. 1972 Copied_symbol_dynobjs copied_symbol_dynobjs_; 1973 // Information parsed from the version script, if any. 1974 const Version_script_info& version_script_; 1975 Garbage_collection* gc_; 1976 Icf* icf_; 1977 // Target-specific symbols, if any. 1978 std::vector<Symbol*> target_symbols_; 1979 }; 1980 1981 // We inline get_sized_symbol for efficiency. 1982 1983 template<int size> 1984 Sized_symbol<size>* 1985 Symbol_table::get_sized_symbol(Symbol* sym) const 1986 { 1987 gold_assert(size == parameters->target().get_size()); 1988 return static_cast<Sized_symbol<size>*>(sym); 1989 } 1990 1991 template<int size> 1992 const Sized_symbol<size>* 1993 Symbol_table::get_sized_symbol(const Symbol* sym) const 1994 { 1995 gold_assert(size == parameters->target().get_size()); 1996 return static_cast<const Sized_symbol<size>*>(sym); 1997 } 1998 1999 } // End namespace gold. 2000 2001 #endif // !defined(GOLD_SYMTAB_H) 2002