1 // output.h -- manage the output file for gold -*- C++ -*- 2 3 // Copyright 2006, 2007, 2008, 2009, 2010, 2011 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 #ifndef GOLD_OUTPUT_H 24 #define GOLD_OUTPUT_H 25 26 #include <list> 27 #include <vector> 28 29 #include "elfcpp.h" 30 #include "mapfile.h" 31 #include "layout.h" 32 #include "reloc-types.h" 33 34 namespace gold 35 { 36 37 class General_options; 38 class Object; 39 class Symbol; 40 class Output_file; 41 class Output_merge_base; 42 class Output_section; 43 class Relocatable_relocs; 44 class Target; 45 template<int size, bool big_endian> 46 class Sized_target; 47 template<int size, bool big_endian> 48 class Sized_relobj; 49 template<int size, bool big_endian> 50 class Sized_relobj_file; 51 52 // An abtract class for data which has to go into the output file. 53 54 class Output_data 55 { 56 public: 57 explicit Output_data() 58 : address_(0), data_size_(0), offset_(-1), 59 is_address_valid_(false), is_data_size_valid_(false), 60 is_offset_valid_(false), is_data_size_fixed_(false), 61 has_dynamic_reloc_(false) 62 { } 63 64 virtual 65 ~Output_data(); 66 67 // Return the address. For allocated sections, this is only valid 68 // after Layout::finalize is finished. 69 uint64_t 70 address() const 71 { 72 gold_assert(this->is_address_valid_); 73 return this->address_; 74 } 75 76 // Return the size of the data. For allocated sections, this must 77 // be valid after Layout::finalize calls set_address, but need not 78 // be valid before then. 79 off_t 80 data_size() const 81 { 82 gold_assert(this->is_data_size_valid_); 83 return this->data_size_; 84 } 85 86 // Get the current data size. 87 off_t 88 current_data_size() const 89 { return this->current_data_size_for_child(); } 90 91 // Return true if data size is fixed. 92 bool 93 is_data_size_fixed() const 94 { return this->is_data_size_fixed_; } 95 96 // Return the file offset. This is only valid after 97 // Layout::finalize is finished. For some non-allocated sections, 98 // it may not be valid until near the end of the link. 99 off_t 100 offset() const 101 { 102 gold_assert(this->is_offset_valid_); 103 return this->offset_; 104 } 105 106 // Reset the address and file offset. This essentially disables the 107 // sanity testing about duplicate and unknown settings. 108 void 109 reset_address_and_file_offset() 110 { 111 this->is_address_valid_ = false; 112 this->is_offset_valid_ = false; 113 if (!this->is_data_size_fixed_) 114 this->is_data_size_valid_ = false; 115 this->do_reset_address_and_file_offset(); 116 } 117 118 // Return true if address and file offset already have reset values. In 119 // other words, calling reset_address_and_file_offset will not change them. 120 bool 121 address_and_file_offset_have_reset_values() const 122 { return this->do_address_and_file_offset_have_reset_values(); } 123 124 // Return the required alignment. 125 uint64_t 126 addralign() const 127 { return this->do_addralign(); } 128 129 // Return whether this has a load address. 130 bool 131 has_load_address() const 132 { return this->do_has_load_address(); } 133 134 // Return the load address. 135 uint64_t 136 load_address() const 137 { return this->do_load_address(); } 138 139 // Return whether this is an Output_section. 140 bool 141 is_section() const 142 { return this->do_is_section(); } 143 144 // Return whether this is an Output_section of the specified type. 145 bool 146 is_section_type(elfcpp::Elf_Word stt) const 147 { return this->do_is_section_type(stt); } 148 149 // Return whether this is an Output_section with the specified flag 150 // set. 151 bool 152 is_section_flag_set(elfcpp::Elf_Xword shf) const 153 { return this->do_is_section_flag_set(shf); } 154 155 // Return the output section that this goes in, if there is one. 156 Output_section* 157 output_section() 158 { return this->do_output_section(); } 159 160 const Output_section* 161 output_section() const 162 { return this->do_output_section(); } 163 164 // Return the output section index, if there is an output section. 165 unsigned int 166 out_shndx() const 167 { return this->do_out_shndx(); } 168 169 // Set the output section index, if this is an output section. 170 void 171 set_out_shndx(unsigned int shndx) 172 { this->do_set_out_shndx(shndx); } 173 174 // Set the address and file offset of this data, and finalize the 175 // size of the data. This is called during Layout::finalize for 176 // allocated sections. 177 void 178 set_address_and_file_offset(uint64_t addr, off_t off) 179 { 180 this->set_address(addr); 181 this->set_file_offset(off); 182 this->finalize_data_size(); 183 } 184 185 // Set the address. 186 void 187 set_address(uint64_t addr) 188 { 189 gold_assert(!this->is_address_valid_); 190 this->address_ = addr; 191 this->is_address_valid_ = true; 192 } 193 194 // Set the file offset. 195 void 196 set_file_offset(off_t off) 197 { 198 gold_assert(!this->is_offset_valid_); 199 this->offset_ = off; 200 this->is_offset_valid_ = true; 201 } 202 203 // Update the data size without finalizing it. 204 void 205 pre_finalize_data_size() 206 { 207 if (!this->is_data_size_valid_) 208 { 209 // Tell the child class to update the data size. 210 this->update_data_size(); 211 } 212 } 213 214 // Finalize the data size. 215 void 216 finalize_data_size() 217 { 218 if (!this->is_data_size_valid_) 219 { 220 // Tell the child class to set the data size. 221 this->set_final_data_size(); 222 gold_assert(this->is_data_size_valid_); 223 } 224 } 225 226 // Set the TLS offset. Called only for SHT_TLS sections. 227 void 228 set_tls_offset(uint64_t tls_base) 229 { this->do_set_tls_offset(tls_base); } 230 231 // Return the TLS offset, relative to the base of the TLS segment. 232 // Valid only for SHT_TLS sections. 233 uint64_t 234 tls_offset() const 235 { return this->do_tls_offset(); } 236 237 // Write the data to the output file. This is called after 238 // Layout::finalize is complete. 239 void 240 write(Output_file* file) 241 { this->do_write(file); } 242 243 // This is called by Layout::finalize to note that the sizes of 244 // allocated sections must now be fixed. 245 static void 246 layout_complete() 247 { Output_data::allocated_sizes_are_fixed = true; } 248 249 // Used to check that layout has been done. 250 static bool 251 is_layout_complete() 252 { return Output_data::allocated_sizes_are_fixed; } 253 254 // Note that a dynamic reloc has been applied to this data. 255 void 256 add_dynamic_reloc() 257 { this->has_dynamic_reloc_ = true; } 258 259 // Return whether a dynamic reloc has been applied. 260 bool 261 has_dynamic_reloc() const 262 { return this->has_dynamic_reloc_; } 263 264 // Whether the address is valid. 265 bool 266 is_address_valid() const 267 { return this->is_address_valid_; } 268 269 // Whether the file offset is valid. 270 bool 271 is_offset_valid() const 272 { return this->is_offset_valid_; } 273 274 // Whether the data size is valid. 275 bool 276 is_data_size_valid() const 277 { return this->is_data_size_valid_; } 278 279 // Print information to the map file. 280 void 281 print_to_mapfile(Mapfile* mapfile) const 282 { return this->do_print_to_mapfile(mapfile); } 283 284 protected: 285 // Functions that child classes may or in some cases must implement. 286 287 // Write the data to the output file. 288 virtual void 289 do_write(Output_file*) = 0; 290 291 // Return the required alignment. 292 virtual uint64_t 293 do_addralign() const = 0; 294 295 // Return whether this has a load address. 296 virtual bool 297 do_has_load_address() const 298 { return false; } 299 300 // Return the load address. 301 virtual uint64_t 302 do_load_address() const 303 { gold_unreachable(); } 304 305 // Return whether this is an Output_section. 306 virtual bool 307 do_is_section() const 308 { return false; } 309 310 // Return whether this is an Output_section of the specified type. 311 // This only needs to be implement by Output_section. 312 virtual bool 313 do_is_section_type(elfcpp::Elf_Word) const 314 { return false; } 315 316 // Return whether this is an Output_section with the specific flag 317 // set. This only needs to be implemented by Output_section. 318 virtual bool 319 do_is_section_flag_set(elfcpp::Elf_Xword) const 320 { return false; } 321 322 // Return the output section, if there is one. 323 virtual Output_section* 324 do_output_section() 325 { return NULL; } 326 327 virtual const Output_section* 328 do_output_section() const 329 { return NULL; } 330 331 // Return the output section index, if there is an output section. 332 virtual unsigned int 333 do_out_shndx() const 334 { gold_unreachable(); } 335 336 // Set the output section index, if this is an output section. 337 virtual void 338 do_set_out_shndx(unsigned int) 339 { gold_unreachable(); } 340 341 // This is a hook for derived classes to set the preliminary data size. 342 // This is called by pre_finalize_data_size, normally called during 343 // Layout::finalize, before the section address is set, and is used 344 // during an incremental update, when we need to know the size of a 345 // section before allocating space in the output file. For classes 346 // where the current data size is up to date, this default version of 347 // the method can be inherited. 348 virtual void 349 update_data_size() 350 { } 351 352 // This is a hook for derived classes to set the data size. This is 353 // called by finalize_data_size, normally called during 354 // Layout::finalize, when the section address is set. 355 virtual void 356 set_final_data_size() 357 { gold_unreachable(); } 358 359 // A hook for resetting the address and file offset. 360 virtual void 361 do_reset_address_and_file_offset() 362 { } 363 364 // Return true if address and file offset already have reset values. In 365 // other words, calling reset_address_and_file_offset will not change them. 366 // A child class overriding do_reset_address_and_file_offset may need to 367 // also override this. 368 virtual bool 369 do_address_and_file_offset_have_reset_values() const 370 { return !this->is_address_valid_ && !this->is_offset_valid_; } 371 372 // Set the TLS offset. Called only for SHT_TLS sections. 373 virtual void 374 do_set_tls_offset(uint64_t) 375 { gold_unreachable(); } 376 377 // Return the TLS offset, relative to the base of the TLS segment. 378 // Valid only for SHT_TLS sections. 379 virtual uint64_t 380 do_tls_offset() const 381 { gold_unreachable(); } 382 383 // Print to the map file. This only needs to be implemented by 384 // classes which may appear in a PT_LOAD segment. 385 virtual void 386 do_print_to_mapfile(Mapfile*) const 387 { gold_unreachable(); } 388 389 // Functions that child classes may call. 390 391 // Reset the address. The Output_section class needs this when an 392 // SHF_ALLOC input section is added to an output section which was 393 // formerly not SHF_ALLOC. 394 void 395 mark_address_invalid() 396 { this->is_address_valid_ = false; } 397 398 // Set the size of the data. 399 void 400 set_data_size(off_t data_size) 401 { 402 gold_assert(!this->is_data_size_valid_ 403 && !this->is_data_size_fixed_); 404 this->data_size_ = data_size; 405 this->is_data_size_valid_ = true; 406 } 407 408 // Fix the data size. Once it is fixed, it cannot be changed 409 // and the data size remains always valid. 410 void 411 fix_data_size() 412 { 413 gold_assert(this->is_data_size_valid_); 414 this->is_data_size_fixed_ = true; 415 } 416 417 // Get the current data size--this is for the convenience of 418 // sections which build up their size over time. 419 off_t 420 current_data_size_for_child() const 421 { return this->data_size_; } 422 423 // Set the current data size--this is for the convenience of 424 // sections which build up their size over time. 425 void 426 set_current_data_size_for_child(off_t data_size) 427 { 428 gold_assert(!this->is_data_size_valid_); 429 this->data_size_ = data_size; 430 } 431 432 // Return default alignment for the target size. 433 static uint64_t 434 default_alignment(); 435 436 // Return default alignment for a specified size--32 or 64. 437 static uint64_t 438 default_alignment_for_size(int size); 439 440 private: 441 Output_data(const Output_data&); 442 Output_data& operator=(const Output_data&); 443 444 // This is used for verification, to make sure that we don't try to 445 // change any sizes of allocated sections after we set the section 446 // addresses. 447 static bool allocated_sizes_are_fixed; 448 449 // Memory address in output file. 450 uint64_t address_; 451 // Size of data in output file. 452 off_t data_size_; 453 // File offset of contents in output file. 454 off_t offset_; 455 // Whether address_ is valid. 456 bool is_address_valid_ : 1; 457 // Whether data_size_ is valid. 458 bool is_data_size_valid_ : 1; 459 // Whether offset_ is valid. 460 bool is_offset_valid_ : 1; 461 // Whether data size is fixed. 462 bool is_data_size_fixed_ : 1; 463 // Whether any dynamic relocs have been applied to this section. 464 bool has_dynamic_reloc_ : 1; 465 }; 466 467 // Output the section headers. 468 469 class Output_section_headers : public Output_data 470 { 471 public: 472 Output_section_headers(const Layout*, 473 const Layout::Segment_list*, 474 const Layout::Section_list*, 475 const Layout::Section_list*, 476 const Stringpool*, 477 const Output_section*); 478 479 protected: 480 // Write the data to the file. 481 void 482 do_write(Output_file*); 483 484 // Return the required alignment. 485 uint64_t 486 do_addralign() const 487 { return Output_data::default_alignment(); } 488 489 // Write to a map file. 490 void 491 do_print_to_mapfile(Mapfile* mapfile) const 492 { mapfile->print_output_data(this, _("** section headers")); } 493 494 // Update the data size. 495 void 496 update_data_size() 497 { this->set_data_size(this->do_size()); } 498 499 // Set final data size. 500 void 501 set_final_data_size() 502 { this->set_data_size(this->do_size()); } 503 504 private: 505 // Write the data to the file with the right size and endianness. 506 template<int size, bool big_endian> 507 void 508 do_sized_write(Output_file*); 509 510 // Compute data size. 511 off_t 512 do_size() const; 513 514 const Layout* layout_; 515 const Layout::Segment_list* segment_list_; 516 const Layout::Section_list* section_list_; 517 const Layout::Section_list* unattached_section_list_; 518 const Stringpool* secnamepool_; 519 const Output_section* shstrtab_section_; 520 }; 521 522 // Output the segment headers. 523 524 class Output_segment_headers : public Output_data 525 { 526 public: 527 Output_segment_headers(const Layout::Segment_list& segment_list); 528 529 protected: 530 // Write the data to the file. 531 void 532 do_write(Output_file*); 533 534 // Return the required alignment. 535 uint64_t 536 do_addralign() const 537 { return Output_data::default_alignment(); } 538 539 // Write to a map file. 540 void 541 do_print_to_mapfile(Mapfile* mapfile) const 542 { mapfile->print_output_data(this, _("** segment headers")); } 543 544 // Set final data size. 545 void 546 set_final_data_size() 547 { this->set_data_size(this->do_size()); } 548 549 private: 550 // Write the data to the file with the right size and endianness. 551 template<int size, bool big_endian> 552 void 553 do_sized_write(Output_file*); 554 555 // Compute the current size. 556 off_t 557 do_size() const; 558 559 const Layout::Segment_list& segment_list_; 560 }; 561 562 // Output the ELF file header. 563 564 class Output_file_header : public Output_data 565 { 566 public: 567 Output_file_header(const Target*, 568 const Symbol_table*, 569 const Output_segment_headers*); 570 571 // Add information about the section headers. We lay out the ELF 572 // file header before we create the section headers. 573 void set_section_info(const Output_section_headers*, 574 const Output_section* shstrtab); 575 576 protected: 577 // Write the data to the file. 578 void 579 do_write(Output_file*); 580 581 // Return the required alignment. 582 uint64_t 583 do_addralign() const 584 { return Output_data::default_alignment(); } 585 586 // Write to a map file. 587 void 588 do_print_to_mapfile(Mapfile* mapfile) const 589 { mapfile->print_output_data(this, _("** file header")); } 590 591 // Set final data size. 592 void 593 set_final_data_size(void) 594 { this->set_data_size(this->do_size()); } 595 596 private: 597 // Write the data to the file with the right size and endianness. 598 template<int size, bool big_endian> 599 void 600 do_sized_write(Output_file*); 601 602 // Return the value to use for the entry address. 603 template<int size> 604 typename elfcpp::Elf_types<size>::Elf_Addr 605 entry(); 606 607 // Compute the current data size. 608 off_t 609 do_size() const; 610 611 const Target* target_; 612 const Symbol_table* symtab_; 613 const Output_segment_headers* segment_header_; 614 const Output_section_headers* section_header_; 615 const Output_section* shstrtab_; 616 }; 617 618 // Output sections are mainly comprised of input sections. However, 619 // there are cases where we have data to write out which is not in an 620 // input section. Output_section_data is used in such cases. This is 621 // an abstract base class. 622 623 class Output_section_data : public Output_data 624 { 625 public: 626 Output_section_data(off_t data_size, uint64_t addralign, 627 bool is_data_size_fixed) 628 : Output_data(), output_section_(NULL), addralign_(addralign) 629 { 630 this->set_data_size(data_size); 631 if (is_data_size_fixed) 632 this->fix_data_size(); 633 } 634 635 Output_section_data(uint64_t addralign) 636 : Output_data(), output_section_(NULL), addralign_(addralign) 637 { } 638 639 // Return the output section. 640 Output_section* 641 output_section() 642 { return this->output_section_; } 643 644 const Output_section* 645 output_section() const 646 { return this->output_section_; } 647 648 // Record the output section. 649 void 650 set_output_section(Output_section* os); 651 652 // Add an input section, for SHF_MERGE sections. This returns true 653 // if the section was handled. 654 bool 655 add_input_section(Relobj* object, unsigned int shndx) 656 { return this->do_add_input_section(object, shndx); } 657 658 // Given an input OBJECT, an input section index SHNDX within that 659 // object, and an OFFSET relative to the start of that input 660 // section, return whether or not the corresponding offset within 661 // the output section is known. If this function returns true, it 662 // sets *POUTPUT to the output offset. The value -1 indicates that 663 // this input offset is being discarded. 664 bool 665 output_offset(const Relobj* object, unsigned int shndx, 666 section_offset_type offset, 667 section_offset_type* poutput) const 668 { return this->do_output_offset(object, shndx, offset, poutput); } 669 670 // Return whether this is the merge section for the input section 671 // SHNDX in OBJECT. This should return true when output_offset 672 // would return true for some values of OFFSET. 673 bool 674 is_merge_section_for(const Relobj* object, unsigned int shndx) const 675 { return this->do_is_merge_section_for(object, shndx); } 676 677 // Write the contents to a buffer. This is used for sections which 678 // require postprocessing, such as compression. 679 void 680 write_to_buffer(unsigned char* buffer) 681 { this->do_write_to_buffer(buffer); } 682 683 // Print merge stats to stderr. This should only be called for 684 // SHF_MERGE sections. 685 void 686 print_merge_stats(const char* section_name) 687 { this->do_print_merge_stats(section_name); } 688 689 protected: 690 // The child class must implement do_write. 691 692 // The child class may implement specific adjustments to the output 693 // section. 694 virtual void 695 do_adjust_output_section(Output_section*) 696 { } 697 698 // May be implemented by child class. Return true if the section 699 // was handled. 700 virtual bool 701 do_add_input_section(Relobj*, unsigned int) 702 { gold_unreachable(); } 703 704 // The child class may implement output_offset. 705 virtual bool 706 do_output_offset(const Relobj*, unsigned int, section_offset_type, 707 section_offset_type*) const 708 { return false; } 709 710 // The child class may implement is_merge_section_for. 711 virtual bool 712 do_is_merge_section_for(const Relobj*, unsigned int) const 713 { return false; } 714 715 // The child class may implement write_to_buffer. Most child 716 // classes can not appear in a compressed section, and they do not 717 // implement this. 718 virtual void 719 do_write_to_buffer(unsigned char*) 720 { gold_unreachable(); } 721 722 // Print merge statistics. 723 virtual void 724 do_print_merge_stats(const char*) 725 { gold_unreachable(); } 726 727 // Return the required alignment. 728 uint64_t 729 do_addralign() const 730 { return this->addralign_; } 731 732 // Return the output section. 733 Output_section* 734 do_output_section() 735 { return this->output_section_; } 736 737 const Output_section* 738 do_output_section() const 739 { return this->output_section_; } 740 741 // Return the section index of the output section. 742 unsigned int 743 do_out_shndx() const; 744 745 // Set the alignment. 746 void 747 set_addralign(uint64_t addralign); 748 749 private: 750 // The output section for this section. 751 Output_section* output_section_; 752 // The required alignment. 753 uint64_t addralign_; 754 }; 755 756 // Some Output_section_data classes build up their data step by step, 757 // rather than all at once. This class provides an interface for 758 // them. 759 760 class Output_section_data_build : public Output_section_data 761 { 762 public: 763 Output_section_data_build(uint64_t addralign) 764 : Output_section_data(addralign) 765 { } 766 767 Output_section_data_build(off_t data_size, uint64_t addralign) 768 : Output_section_data(data_size, addralign, false) 769 { } 770 771 // Set the current data size. 772 void 773 set_current_data_size(off_t data_size) 774 { this->set_current_data_size_for_child(data_size); } 775 776 protected: 777 // Set the final data size. 778 virtual void 779 set_final_data_size() 780 { this->set_data_size(this->current_data_size_for_child()); } 781 }; 782 783 // A simple case of Output_data in which we have constant data to 784 // output. 785 786 class Output_data_const : public Output_section_data 787 { 788 public: 789 Output_data_const(const std::string& data, uint64_t addralign) 790 : Output_section_data(data.size(), addralign, true), data_(data) 791 { } 792 793 Output_data_const(const char* p, off_t len, uint64_t addralign) 794 : Output_section_data(len, addralign, true), data_(p, len) 795 { } 796 797 Output_data_const(const unsigned char* p, off_t len, uint64_t addralign) 798 : Output_section_data(len, addralign, true), 799 data_(reinterpret_cast<const char*>(p), len) 800 { } 801 802 protected: 803 // Write the data to the output file. 804 void 805 do_write(Output_file*); 806 807 // Write the data to a buffer. 808 void 809 do_write_to_buffer(unsigned char* buffer) 810 { memcpy(buffer, this->data_.data(), this->data_.size()); } 811 812 // Write to a map file. 813 void 814 do_print_to_mapfile(Mapfile* mapfile) const 815 { mapfile->print_output_data(this, _("** fill")); } 816 817 private: 818 std::string data_; 819 }; 820 821 // Another version of Output_data with constant data, in which the 822 // buffer is allocated by the caller. 823 824 class Output_data_const_buffer : public Output_section_data 825 { 826 public: 827 Output_data_const_buffer(const unsigned char* p, off_t len, 828 uint64_t addralign, const char* map_name) 829 : Output_section_data(len, addralign, true), 830 p_(p), map_name_(map_name) 831 { } 832 833 protected: 834 // Write the data the output file. 835 void 836 do_write(Output_file*); 837 838 // Write the data to a buffer. 839 void 840 do_write_to_buffer(unsigned char* buffer) 841 { memcpy(buffer, this->p_, this->data_size()); } 842 843 // Write to a map file. 844 void 845 do_print_to_mapfile(Mapfile* mapfile) const 846 { mapfile->print_output_data(this, _(this->map_name_)); } 847 848 private: 849 // The data to output. 850 const unsigned char* p_; 851 // Name to use in a map file. Maps are a rarely used feature, but 852 // the space usage is minor as aren't very many of these objects. 853 const char* map_name_; 854 }; 855 856 // A place holder for a fixed amount of data written out via some 857 // other mechanism. 858 859 class Output_data_fixed_space : public Output_section_data 860 { 861 public: 862 Output_data_fixed_space(off_t data_size, uint64_t addralign, 863 const char* map_name) 864 : Output_section_data(data_size, addralign, true), 865 map_name_(map_name) 866 { } 867 868 protected: 869 // Write out the data--the actual data must be written out 870 // elsewhere. 871 void 872 do_write(Output_file*) 873 { } 874 875 // Write to a map file. 876 void 877 do_print_to_mapfile(Mapfile* mapfile) const 878 { mapfile->print_output_data(this, _(this->map_name_)); } 879 880 private: 881 // Name to use in a map file. Maps are a rarely used feature, but 882 // the space usage is minor as aren't very many of these objects. 883 const char* map_name_; 884 }; 885 886 // A place holder for variable sized data written out via some other 887 // mechanism. 888 889 class Output_data_space : public Output_section_data_build 890 { 891 public: 892 explicit Output_data_space(uint64_t addralign, const char* map_name) 893 : Output_section_data_build(addralign), 894 map_name_(map_name) 895 { } 896 897 explicit Output_data_space(off_t data_size, uint64_t addralign, 898 const char* map_name) 899 : Output_section_data_build(data_size, addralign), 900 map_name_(map_name) 901 { } 902 903 // Set the alignment. 904 void 905 set_space_alignment(uint64_t align) 906 { this->set_addralign(align); } 907 908 protected: 909 // Write out the data--the actual data must be written out 910 // elsewhere. 911 void 912 do_write(Output_file*) 913 { } 914 915 // Write to a map file. 916 void 917 do_print_to_mapfile(Mapfile* mapfile) const 918 { mapfile->print_output_data(this, _(this->map_name_)); } 919 920 private: 921 // Name to use in a map file. Maps are a rarely used feature, but 922 // the space usage is minor as aren't very many of these objects. 923 const char* map_name_; 924 }; 925 926 // Fill fixed space with zeroes. This is just like 927 // Output_data_fixed_space, except that the map name is known. 928 929 class Output_data_zero_fill : public Output_section_data 930 { 931 public: 932 Output_data_zero_fill(off_t data_size, uint64_t addralign) 933 : Output_section_data(data_size, addralign, true) 934 { } 935 936 protected: 937 // There is no data to write out. 938 void 939 do_write(Output_file*) 940 { } 941 942 // Write to a map file. 943 void 944 do_print_to_mapfile(Mapfile* mapfile) const 945 { mapfile->print_output_data(this, "** zero fill"); } 946 }; 947 948 // A string table which goes into an output section. 949 950 class Output_data_strtab : public Output_section_data 951 { 952 public: 953 Output_data_strtab(Stringpool* strtab) 954 : Output_section_data(1), strtab_(strtab) 955 { } 956 957 protected: 958 // This is called to update the section size prior to assigning 959 // the address and file offset. 960 void 961 update_data_size() 962 { this->set_final_data_size(); } 963 964 // This is called to set the address and file offset. Here we make 965 // sure that the Stringpool is finalized. 966 void 967 set_final_data_size(); 968 969 // Write out the data. 970 void 971 do_write(Output_file*); 972 973 // Write the data to a buffer. 974 void 975 do_write_to_buffer(unsigned char* buffer) 976 { this->strtab_->write_to_buffer(buffer, this->data_size()); } 977 978 // Write to a map file. 979 void 980 do_print_to_mapfile(Mapfile* mapfile) const 981 { mapfile->print_output_data(this, _("** string table")); } 982 983 private: 984 Stringpool* strtab_; 985 }; 986 987 // This POD class is used to represent a single reloc in the output 988 // file. This could be a private class within Output_data_reloc, but 989 // the templatization is complex enough that I broke it out into a 990 // separate class. The class is templatized on either elfcpp::SHT_REL 991 // or elfcpp::SHT_RELA, and also on whether this is a dynamic 992 // relocation or an ordinary relocation. 993 994 // A relocation can be against a global symbol, a local symbol, a 995 // local section symbol, an output section, or the undefined symbol at 996 // index 0. We represent the latter by using a NULL global symbol. 997 998 template<int sh_type, bool dynamic, int size, bool big_endian> 999 class Output_reloc; 1000 1001 template<bool dynamic, int size, bool big_endian> 1002 class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian> 1003 { 1004 public: 1005 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address; 1006 typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend; 1007 1008 static const Address invalid_address = static_cast<Address>(0) - 1; 1009 1010 // An uninitialized entry. We need this because we want to put 1011 // instances of this class into an STL container. 1012 Output_reloc() 1013 : local_sym_index_(INVALID_CODE) 1014 { } 1015 1016 // We have a bunch of different constructors. They come in pairs 1017 // depending on how the address of the relocation is specified. It 1018 // can either be an offset in an Output_data or an offset in an 1019 // input section. 1020 1021 // A reloc against a global symbol. 1022 1023 Output_reloc(Symbol* gsym, unsigned int type, Output_data* od, 1024 Address address, bool is_relative, bool is_symbolless, 1025 bool use_plt_offset); 1026 1027 Output_reloc(Symbol* gsym, unsigned int type, 1028 Sized_relobj<size, big_endian>* relobj, 1029 unsigned int shndx, Address address, bool is_relative, 1030 bool is_symbolless, bool use_plt_offset); 1031 1032 // A reloc against a local symbol or local section symbol. 1033 1034 Output_reloc(Sized_relobj<size, big_endian>* relobj, 1035 unsigned int local_sym_index, unsigned int type, 1036 Output_data* od, Address address, bool is_relative, 1037 bool is_symbolless, bool is_section_symbol, 1038 bool use_plt_offset); 1039 1040 Output_reloc(Sized_relobj<size, big_endian>* relobj, 1041 unsigned int local_sym_index, unsigned int type, 1042 unsigned int shndx, Address address, bool is_relative, 1043 bool is_symbolless, bool is_section_symbol, 1044 bool use_plt_offset); 1045 1046 // A reloc against the STT_SECTION symbol of an output section. 1047 1048 Output_reloc(Output_section* os, unsigned int type, Output_data* od, 1049 Address address); 1050 1051 Output_reloc(Output_section* os, unsigned int type, 1052 Sized_relobj<size, big_endian>* relobj, 1053 unsigned int shndx, Address address); 1054 1055 // An absolute relocation with no symbol. 1056 1057 Output_reloc(unsigned int type, Output_data* od, Address address); 1058 1059 Output_reloc(unsigned int type, Sized_relobj<size, big_endian>* relobj, 1060 unsigned int shndx, Address address); 1061 1062 // A target specific relocation. The target will be called to get 1063 // the symbol index, passing ARG. The type and offset will be set 1064 // as for other relocation types. 1065 1066 Output_reloc(unsigned int type, void* arg, Output_data* od, 1067 Address address); 1068 1069 Output_reloc(unsigned int type, void* arg, 1070 Sized_relobj<size, big_endian>* relobj, 1071 unsigned int shndx, Address address); 1072 1073 // Return the reloc type. 1074 unsigned int 1075 type() const 1076 { return this->type_; } 1077 1078 // Return whether this is a RELATIVE relocation. 1079 bool 1080 is_relative() const 1081 { return this->is_relative_; } 1082 1083 // Return whether this is a relocation which should not use 1084 // a symbol, but which obtains its addend from a symbol. 1085 bool 1086 is_symbolless() const 1087 { return this->is_symbolless_; } 1088 1089 // Return whether this is against a local section symbol. 1090 bool 1091 is_local_section_symbol() const 1092 { 1093 return (this->local_sym_index_ != GSYM_CODE 1094 && this->local_sym_index_ != SECTION_CODE 1095 && this->local_sym_index_ != INVALID_CODE 1096 && this->local_sym_index_ != TARGET_CODE 1097 && this->is_section_symbol_); 1098 } 1099 1100 // Return whether this is a target specific relocation. 1101 bool 1102 is_target_specific() const 1103 { return this->local_sym_index_ == TARGET_CODE; } 1104 1105 // Return the argument to pass to the target for a target specific 1106 // relocation. 1107 void* 1108 target_arg() const 1109 { 1110 gold_assert(this->local_sym_index_ == TARGET_CODE); 1111 return this->u1_.arg; 1112 } 1113 1114 // For a local section symbol, return the offset of the input 1115 // section within the output section. ADDEND is the addend being 1116 // applied to the input section. 1117 Address 1118 local_section_offset(Addend addend) const; 1119 1120 // Get the value of the symbol referred to by a Rel relocation when 1121 // we are adding the given ADDEND. 1122 Address 1123 symbol_value(Addend addend) const; 1124 1125 // If this relocation is against an input section, return the 1126 // relocatable object containing the input section. 1127 Sized_relobj<size, big_endian>* 1128 get_relobj() const 1129 { 1130 if (this->shndx_ == INVALID_CODE) 1131 return NULL; 1132 return this->u2_.relobj; 1133 } 1134 1135 // Write the reloc entry to an output view. 1136 void 1137 write(unsigned char* pov) const; 1138 1139 // Write the offset and info fields to Write_rel. 1140 template<typename Write_rel> 1141 void write_rel(Write_rel*) const; 1142 1143 // This is used when sorting dynamic relocs. Return -1 to sort this 1144 // reloc before R2, 0 to sort the same as R2, 1 to sort after R2. 1145 int 1146 compare(const Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>& r2) 1147 const; 1148 1149 // Return whether this reloc should be sorted before the argument 1150 // when sorting dynamic relocs. 1151 bool 1152 sort_before(const Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>& 1153 r2) const 1154 { return this->compare(r2) < 0; } 1155 1156 private: 1157 // Record that we need a dynamic symbol index. 1158 void 1159 set_needs_dynsym_index(); 1160 1161 // Return the symbol index. 1162 unsigned int 1163 get_symbol_index() const; 1164 1165 // Return the output address. 1166 Address 1167 get_address() const; 1168 1169 // Codes for local_sym_index_. 1170 enum 1171 { 1172 // Global symbol. 1173 GSYM_CODE = -1U, 1174 // Output section. 1175 SECTION_CODE = -2U, 1176 // Target specific. 1177 TARGET_CODE = -3U, 1178 // Invalid uninitialized entry. 1179 INVALID_CODE = -4U 1180 }; 1181 1182 union 1183 { 1184 // For a local symbol or local section symbol 1185 // (this->local_sym_index_ >= 0), the object. We will never 1186 // generate a relocation against a local symbol in a dynamic 1187 // object; that doesn't make sense. And our callers will always 1188 // be templatized, so we use Sized_relobj here. 1189 Sized_relobj<size, big_endian>* relobj; 1190 // For a global symbol (this->local_sym_index_ == GSYM_CODE, the 1191 // symbol. If this is NULL, it indicates a relocation against the 1192 // undefined 0 symbol. 1193 Symbol* gsym; 1194 // For a relocation against an output section 1195 // (this->local_sym_index_ == SECTION_CODE), the output section. 1196 Output_section* os; 1197 // For a target specific relocation, an argument to pass to the 1198 // target. 1199 void* arg; 1200 } u1_; 1201 union 1202 { 1203 // If this->shndx_ is not INVALID CODE, the object which holds the 1204 // input section being used to specify the reloc address. 1205 Sized_relobj<size, big_endian>* relobj; 1206 // If this->shndx_ is INVALID_CODE, the output data being used to 1207 // specify the reloc address. This may be NULL if the reloc 1208 // address is absolute. 1209 Output_data* od; 1210 } u2_; 1211 // The address offset within the input section or the Output_data. 1212 Address address_; 1213 // This is GSYM_CODE for a global symbol, or SECTION_CODE for a 1214 // relocation against an output section, or TARGET_CODE for a target 1215 // specific relocation, or INVALID_CODE for an uninitialized value. 1216 // Otherwise, for a local symbol (this->is_section_symbol_ is 1217 // false), the local symbol index. For a local section symbol 1218 // (this->is_section_symbol_ is true), the section index in the 1219 // input file. 1220 unsigned int local_sym_index_; 1221 // The reloc type--a processor specific code. 1222 unsigned int type_ : 28; 1223 // True if the relocation is a RELATIVE relocation. 1224 bool is_relative_ : 1; 1225 // True if the relocation is one which should not use 1226 // a symbol, but which obtains its addend from a symbol. 1227 bool is_symbolless_ : 1; 1228 // True if the relocation is against a section symbol. 1229 bool is_section_symbol_ : 1; 1230 // True if the addend should be the PLT offset. 1231 // (Used only for RELA, but stored here for space.) 1232 bool use_plt_offset_ : 1; 1233 // If the reloc address is an input section in an object, the 1234 // section index. This is INVALID_CODE if the reloc address is 1235 // specified in some other way. 1236 unsigned int shndx_; 1237 }; 1238 1239 // The SHT_RELA version of Output_reloc<>. This is just derived from 1240 // the SHT_REL version of Output_reloc, but it adds an addend. 1241 1242 template<bool dynamic, int size, bool big_endian> 1243 class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian> 1244 { 1245 public: 1246 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address; 1247 typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend; 1248 1249 // An uninitialized entry. 1250 Output_reloc() 1251 : rel_() 1252 { } 1253 1254 // A reloc against a global symbol. 1255 1256 Output_reloc(Symbol* gsym, unsigned int type, Output_data* od, 1257 Address address, Addend addend, bool is_relative, 1258 bool is_symbolless, bool use_plt_offset) 1259 : rel_(gsym, type, od, address, is_relative, is_symbolless, 1260 use_plt_offset), 1261 addend_(addend) 1262 { } 1263 1264 Output_reloc(Symbol* gsym, unsigned int type, 1265 Sized_relobj<size, big_endian>* relobj, 1266 unsigned int shndx, Address address, Addend addend, 1267 bool is_relative, bool is_symbolless, bool use_plt_offset) 1268 : rel_(gsym, type, relobj, shndx, address, is_relative, 1269 is_symbolless, use_plt_offset), addend_(addend) 1270 { } 1271 1272 // A reloc against a local symbol. 1273 1274 Output_reloc(Sized_relobj<size, big_endian>* relobj, 1275 unsigned int local_sym_index, unsigned int type, 1276 Output_data* od, Address address, 1277 Addend addend, bool is_relative, 1278 bool is_symbolless, bool is_section_symbol, 1279 bool use_plt_offset) 1280 : rel_(relobj, local_sym_index, type, od, address, is_relative, 1281 is_symbolless, is_section_symbol, use_plt_offset), 1282 addend_(addend) 1283 { } 1284 1285 Output_reloc(Sized_relobj<size, big_endian>* relobj, 1286 unsigned int local_sym_index, unsigned int type, 1287 unsigned int shndx, Address address, 1288 Addend addend, bool is_relative, 1289 bool is_symbolless, bool is_section_symbol, 1290 bool use_plt_offset) 1291 : rel_(relobj, local_sym_index, type, shndx, address, is_relative, 1292 is_symbolless, is_section_symbol, use_plt_offset), 1293 addend_(addend) 1294 { } 1295 1296 // A reloc against the STT_SECTION symbol of an output section. 1297 1298 Output_reloc(Output_section* os, unsigned int type, Output_data* od, 1299 Address address, Addend addend) 1300 : rel_(os, type, od, address), addend_(addend) 1301 { } 1302 1303 Output_reloc(Output_section* os, unsigned int type, 1304 Sized_relobj<size, big_endian>* relobj, 1305 unsigned int shndx, Address address, Addend addend) 1306 : rel_(os, type, relobj, shndx, address), addend_(addend) 1307 { } 1308 1309 // An absolute relocation with no symbol. 1310 1311 Output_reloc(unsigned int type, Output_data* od, Address address, 1312 Addend addend) 1313 : rel_(type, od, address), addend_(addend) 1314 { } 1315 1316 Output_reloc(unsigned int type, Sized_relobj<size, big_endian>* relobj, 1317 unsigned int shndx, Address address, Addend addend) 1318 : rel_(type, relobj, shndx, address), addend_(addend) 1319 { } 1320 1321 // A target specific relocation. The target will be called to get 1322 // the symbol index and the addend, passing ARG. The type and 1323 // offset will be set as for other relocation types. 1324 1325 Output_reloc(unsigned int type, void* arg, Output_data* od, 1326 Address address, Addend addend) 1327 : rel_(type, arg, od, address), addend_(addend) 1328 { } 1329 1330 Output_reloc(unsigned int type, void* arg, 1331 Sized_relobj<size, big_endian>* relobj, 1332 unsigned int shndx, Address address, Addend addend) 1333 : rel_(type, arg, relobj, shndx, address), addend_(addend) 1334 { } 1335 1336 // Return whether this is a RELATIVE relocation. 1337 bool 1338 is_relative() const 1339 { return this->rel_.is_relative(); } 1340 1341 // Return whether this is a relocation which should not use 1342 // a symbol, but which obtains its addend from a symbol. 1343 bool 1344 is_symbolless() const 1345 { return this->rel_.is_symbolless(); } 1346 1347 // If this relocation is against an input section, return the 1348 // relocatable object containing the input section. 1349 Sized_relobj<size, big_endian>* 1350 get_relobj() const 1351 { return this->rel_.get_relobj(); } 1352 1353 // Write the reloc entry to an output view. 1354 void 1355 write(unsigned char* pov) const; 1356 1357 // Return whether this reloc should be sorted before the argument 1358 // when sorting dynamic relocs. 1359 bool 1360 sort_before(const Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>& 1361 r2) const 1362 { 1363 int i = this->rel_.compare(r2.rel_); 1364 if (i < 0) 1365 return true; 1366 else if (i > 0) 1367 return false; 1368 else 1369 return this->addend_ < r2.addend_; 1370 } 1371 1372 private: 1373 // The basic reloc. 1374 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian> rel_; 1375 // The addend. 1376 Addend addend_; 1377 }; 1378 1379 // Output_data_reloc_generic is a non-template base class for 1380 // Output_data_reloc_base. This gives the generic code a way to hold 1381 // a pointer to a reloc section. 1382 1383 class Output_data_reloc_generic : public Output_section_data_build 1384 { 1385 public: 1386 Output_data_reloc_generic(int size, bool sort_relocs) 1387 : Output_section_data_build(Output_data::default_alignment_for_size(size)), 1388 relative_reloc_count_(0), sort_relocs_(sort_relocs) 1389 { } 1390 1391 // Return the number of relative relocs in this section. 1392 size_t 1393 relative_reloc_count() const 1394 { return this->relative_reloc_count_; } 1395 1396 // Whether we should sort the relocs. 1397 bool 1398 sort_relocs() const 1399 { return this->sort_relocs_; } 1400 1401 // Add a reloc of type TYPE against the global symbol GSYM. The 1402 // relocation applies to the data at offset ADDRESS within OD. 1403 virtual void 1404 add_global_generic(Symbol* gsym, unsigned int type, Output_data* od, 1405 uint64_t address, uint64_t addend) = 0; 1406 1407 // Add a reloc of type TYPE against the global symbol GSYM. The 1408 // relocation applies to data at offset ADDRESS within section SHNDX 1409 // of object file RELOBJ. OD is the associated output section. 1410 virtual void 1411 add_global_generic(Symbol* gsym, unsigned int type, Output_data* od, 1412 Relobj* relobj, unsigned int shndx, uint64_t address, 1413 uint64_t addend) = 0; 1414 1415 // Add a reloc of type TYPE against the local symbol LOCAL_SYM_INDEX 1416 // in RELOBJ. The relocation applies to the data at offset ADDRESS 1417 // within OD. 1418 virtual void 1419 add_local_generic(Relobj* relobj, unsigned int local_sym_index, 1420 unsigned int type, Output_data* od, uint64_t address, 1421 uint64_t addend) = 0; 1422 1423 // Add a reloc of type TYPE against the local symbol LOCAL_SYM_INDEX 1424 // in RELOBJ. The relocation applies to the data at offset ADDRESS 1425 // within section SHNDX of RELOBJ. OD is the associated output 1426 // section. 1427 virtual void 1428 add_local_generic(Relobj* relobj, unsigned int local_sym_index, 1429 unsigned int type, Output_data* od, unsigned int shndx, 1430 uint64_t address, uint64_t addend) = 0; 1431 1432 // Add a reloc of type TYPE against the STT_SECTION symbol of the 1433 // output section OS. The relocation applies to the data at offset 1434 // ADDRESS within OD. 1435 virtual void 1436 add_output_section_generic(Output_section *os, unsigned int type, 1437 Output_data* od, uint64_t address, 1438 uint64_t addend) = 0; 1439 1440 // Add a reloc of type TYPE against the STT_SECTION symbol of the 1441 // output section OS. The relocation applies to the data at offset 1442 // ADDRESS within section SHNDX of RELOBJ. OD is the associated 1443 // output section. 1444 virtual void 1445 add_output_section_generic(Output_section* os, unsigned int type, 1446 Output_data* od, Relobj* relobj, 1447 unsigned int shndx, uint64_t address, 1448 uint64_t addend) = 0; 1449 1450 protected: 1451 // Note that we've added another relative reloc. 1452 void 1453 bump_relative_reloc_count() 1454 { ++this->relative_reloc_count_; } 1455 1456 private: 1457 // The number of relative relocs added to this section. This is to 1458 // support DT_RELCOUNT. 1459 size_t relative_reloc_count_; 1460 // Whether to sort the relocations when writing them out, to make 1461 // the dynamic linker more efficient. 1462 bool sort_relocs_; 1463 }; 1464 1465 // Output_data_reloc is used to manage a section containing relocs. 1466 // SH_TYPE is either elfcpp::SHT_REL or elfcpp::SHT_RELA. DYNAMIC 1467 // indicates whether this is a dynamic relocation or a normal 1468 // relocation. Output_data_reloc_base is a base class. 1469 // Output_data_reloc is the real class, which we specialize based on 1470 // the reloc type. 1471 1472 template<int sh_type, bool dynamic, int size, bool big_endian> 1473 class Output_data_reloc_base : public Output_data_reloc_generic 1474 { 1475 public: 1476 typedef Output_reloc<sh_type, dynamic, size, big_endian> Output_reloc_type; 1477 typedef typename Output_reloc_type::Address Address; 1478 static const int reloc_size = 1479 Reloc_types<sh_type, size, big_endian>::reloc_size; 1480 1481 // Construct the section. 1482 Output_data_reloc_base(bool sort_relocs) 1483 : Output_data_reloc_generic(size, sort_relocs) 1484 { } 1485 1486 protected: 1487 // Write out the data. 1488 void 1489 do_write(Output_file*); 1490 1491 // Set the entry size and the link. 1492 void 1493 do_adjust_output_section(Output_section* os); 1494 1495 // Write to a map file. 1496 void 1497 do_print_to_mapfile(Mapfile* mapfile) const 1498 { 1499 mapfile->print_output_data(this, 1500 (dynamic 1501 ? _("** dynamic relocs") 1502 : _("** relocs"))); 1503 } 1504 1505 // Add a relocation entry. 1506 void 1507 add(Output_data* od, const Output_reloc_type& reloc) 1508 { 1509 this->relocs_.push_back(reloc); 1510 this->set_current_data_size(this->relocs_.size() * reloc_size); 1511 if (dynamic) 1512 od->add_dynamic_reloc(); 1513 if (reloc.is_relative()) 1514 this->bump_relative_reloc_count(); 1515 Sized_relobj<size, big_endian>* relobj = reloc.get_relobj(); 1516 if (relobj != NULL) 1517 relobj->add_dyn_reloc(this->relocs_.size() - 1); 1518 } 1519 1520 private: 1521 typedef std::vector<Output_reloc_type> Relocs; 1522 1523 // The class used to sort the relocations. 1524 struct Sort_relocs_comparison 1525 { 1526 bool 1527 operator()(const Output_reloc_type& r1, const Output_reloc_type& r2) const 1528 { return r1.sort_before(r2); } 1529 }; 1530 1531 // The relocations in this section. 1532 Relocs relocs_; 1533 }; 1534 1535 // The class which callers actually create. 1536 1537 template<int sh_type, bool dynamic, int size, bool big_endian> 1538 class Output_data_reloc; 1539 1540 // The SHT_REL version of Output_data_reloc. 1541 1542 template<bool dynamic, int size, bool big_endian> 1543 class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian> 1544 : public Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian> 1545 { 1546 private: 1547 typedef Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, 1548 big_endian> Base; 1549 1550 public: 1551 typedef typename Base::Output_reloc_type Output_reloc_type; 1552 typedef typename Output_reloc_type::Address Address; 1553 1554 Output_data_reloc(bool sr) 1555 : Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>(sr) 1556 { } 1557 1558 // Add a reloc against a global symbol. 1559 1560 void 1561 add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address) 1562 { this->add(od, Output_reloc_type(gsym, type, od, address, false, false, false)); } 1563 1564 void 1565 add_global(Symbol* gsym, unsigned int type, Output_data* od, 1566 Sized_relobj<size, big_endian>* relobj, 1567 unsigned int shndx, Address address) 1568 { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address, 1569 false, false, false)); } 1570 1571 void 1572 add_global_generic(Symbol* gsym, unsigned int type, Output_data* od, 1573 uint64_t address, uint64_t addend) 1574 { 1575 gold_assert(addend == 0); 1576 this->add(od, Output_reloc_type(gsym, type, od, 1577 convert_types<Address, uint64_t>(address), 1578 false, false, false)); 1579 } 1580 1581 void 1582 add_global_generic(Symbol* gsym, unsigned int type, Output_data* od, 1583 Relobj* relobj, unsigned int shndx, uint64_t address, 1584 uint64_t addend) 1585 { 1586 gold_assert(addend == 0); 1587 Sized_relobj<size, big_endian>* sized_relobj = 1588 static_cast<Sized_relobj<size, big_endian>*>(relobj); 1589 this->add(od, Output_reloc_type(gsym, type, sized_relobj, shndx, 1590 convert_types<Address, uint64_t>(address), 1591 false, false, false)); 1592 } 1593 1594 // Add a RELATIVE reloc against a global symbol. The final relocation 1595 // will not reference the symbol. 1596 1597 void 1598 add_global_relative(Symbol* gsym, unsigned int type, Output_data* od, 1599 Address address) 1600 { this->add(od, Output_reloc_type(gsym, type, od, address, true, true, 1601 false)); } 1602 1603 void 1604 add_global_relative(Symbol* gsym, unsigned int type, Output_data* od, 1605 Sized_relobj<size, big_endian>* relobj, 1606 unsigned int shndx, Address address) 1607 { 1608 this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address, 1609 true, true, false)); 1610 } 1611 1612 // Add a global relocation which does not use a symbol for the relocation, 1613 // but which gets its addend from a symbol. 1614 1615 void 1616 add_symbolless_global_addend(Symbol* gsym, unsigned int type, 1617 Output_data* od, Address address) 1618 { this->add(od, Output_reloc_type(gsym, type, od, address, false, true, 1619 false)); } 1620 1621 void 1622 add_symbolless_global_addend(Symbol* gsym, unsigned int type, 1623 Output_data* od, 1624 Sized_relobj<size, big_endian>* relobj, 1625 unsigned int shndx, Address address) 1626 { 1627 this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address, 1628 false, true, false)); 1629 } 1630 1631 // Add a reloc against a local symbol. 1632 1633 void 1634 add_local(Sized_relobj<size, big_endian>* relobj, 1635 unsigned int local_sym_index, unsigned int type, 1636 Output_data* od, Address address) 1637 { 1638 this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, 1639 address, false, false, false, false)); 1640 } 1641 1642 void 1643 add_local(Sized_relobj<size, big_endian>* relobj, 1644 unsigned int local_sym_index, unsigned int type, 1645 Output_data* od, unsigned int shndx, Address address) 1646 { 1647 this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx, 1648 address, false, false, false, false)); 1649 } 1650 1651 void 1652 add_local_generic(Relobj* relobj, unsigned int local_sym_index, 1653 unsigned int type, Output_data* od, uint64_t address, 1654 uint64_t addend) 1655 { 1656 gold_assert(addend == 0); 1657 Sized_relobj<size, big_endian>* sized_relobj = 1658 static_cast<Sized_relobj<size, big_endian> *>(relobj); 1659 this->add(od, Output_reloc_type(sized_relobj, local_sym_index, type, od, 1660 convert_types<Address, uint64_t>(address), 1661 false, false, false, false)); 1662 } 1663 1664 void 1665 add_local_generic(Relobj* relobj, unsigned int local_sym_index, 1666 unsigned int type, Output_data* od, unsigned int shndx, 1667 uint64_t address, uint64_t addend) 1668 { 1669 gold_assert(addend == 0); 1670 Sized_relobj<size, big_endian>* sized_relobj = 1671 static_cast<Sized_relobj<size, big_endian>*>(relobj); 1672 this->add(od, Output_reloc_type(sized_relobj, local_sym_index, type, shndx, 1673 convert_types<Address, uint64_t>(address), 1674 false, false, false, false)); 1675 } 1676 1677 // Add a RELATIVE reloc against a local symbol. 1678 1679 void 1680 add_local_relative(Sized_relobj<size, big_endian>* relobj, 1681 unsigned int local_sym_index, unsigned int type, 1682 Output_data* od, Address address) 1683 { 1684 this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, 1685 address, true, true, false, false)); 1686 } 1687 1688 void 1689 add_local_relative(Sized_relobj<size, big_endian>* relobj, 1690 unsigned int local_sym_index, unsigned int type, 1691 Output_data* od, unsigned int shndx, Address address) 1692 { 1693 this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx, 1694 address, true, true, false, false)); 1695 } 1696 1697 // Add a local relocation which does not use a symbol for the relocation, 1698 // but which gets its addend from a symbol. 1699 1700 void 1701 add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj, 1702 unsigned int local_sym_index, unsigned int type, 1703 Output_data* od, Address address) 1704 { 1705 this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, 1706 address, false, true, false, false)); 1707 } 1708 1709 void 1710 add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj, 1711 unsigned int local_sym_index, unsigned int type, 1712 Output_data* od, unsigned int shndx, 1713 Address address) 1714 { 1715 this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx, 1716 address, false, true, false, false)); 1717 } 1718 1719 // Add a reloc against a local section symbol. This will be 1720 // converted into a reloc against the STT_SECTION symbol of the 1721 // output section. 1722 1723 void 1724 add_local_section(Sized_relobj<size, big_endian>* relobj, 1725 unsigned int input_shndx, unsigned int type, 1726 Output_data* od, Address address) 1727 { 1728 this->add(od, Output_reloc_type(relobj, input_shndx, type, od, 1729 address, false, false, true, false)); 1730 } 1731 1732 void 1733 add_local_section(Sized_relobj<size, big_endian>* relobj, 1734 unsigned int input_shndx, unsigned int type, 1735 Output_data* od, unsigned int shndx, Address address) 1736 { 1737 this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx, 1738 address, false, false, true, false)); 1739 } 1740 1741 // A reloc against the STT_SECTION symbol of an output section. 1742 // OS is the Output_section that the relocation refers to; OD is 1743 // the Output_data object being relocated. 1744 1745 void 1746 add_output_section(Output_section* os, unsigned int type, 1747 Output_data* od, Address address) 1748 { this->add(od, Output_reloc_type(os, type, od, address)); } 1749 1750 void 1751 add_output_section(Output_section* os, unsigned int type, Output_data* od, 1752 Sized_relobj<size, big_endian>* relobj, 1753 unsigned int shndx, Address address) 1754 { this->add(od, Output_reloc_type(os, type, relobj, shndx, address)); } 1755 1756 void 1757 add_output_section_generic(Output_section* os, unsigned int type, 1758 Output_data* od, uint64_t address, 1759 uint64_t addend) 1760 { 1761 gold_assert(addend == 0); 1762 this->add(od, Output_reloc_type(os, type, od, 1763 convert_types<Address, uint64_t>(address))); 1764 } 1765 1766 void 1767 add_output_section_generic(Output_section* os, unsigned int type, 1768 Output_data* od, Relobj* relobj, 1769 unsigned int shndx, uint64_t address, 1770 uint64_t addend) 1771 { 1772 gold_assert(addend == 0); 1773 Sized_relobj<size, big_endian>* sized_relobj = 1774 static_cast<Sized_relobj<size, big_endian>*>(relobj); 1775 this->add(od, Output_reloc_type(os, type, sized_relobj, shndx, 1776 convert_types<Address, uint64_t>(address))); 1777 } 1778 1779 // Add an absolute relocation. 1780 1781 void 1782 add_absolute(unsigned int type, Output_data* od, Address address) 1783 { this->add(od, Output_reloc_type(type, od, address)); } 1784 1785 void 1786 add_absolute(unsigned int type, Output_data* od, 1787 Sized_relobj<size, big_endian>* relobj, 1788 unsigned int shndx, Address address) 1789 { this->add(od, Output_reloc_type(type, relobj, shndx, address)); } 1790 1791 // Add a target specific relocation. A target which calls this must 1792 // define the reloc_symbol_index and reloc_addend virtual functions. 1793 1794 void 1795 add_target_specific(unsigned int type, void* arg, Output_data* od, 1796 Address address) 1797 { this->add(od, Output_reloc_type(type, arg, od, address)); } 1798 1799 void 1800 add_target_specific(unsigned int type, void* arg, Output_data* od, 1801 Sized_relobj<size, big_endian>* relobj, 1802 unsigned int shndx, Address address) 1803 { this->add(od, Output_reloc_type(type, arg, relobj, shndx, address)); } 1804 }; 1805 1806 // The SHT_RELA version of Output_data_reloc. 1807 1808 template<bool dynamic, int size, bool big_endian> 1809 class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian> 1810 : public Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian> 1811 { 1812 private: 1813 typedef Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, 1814 big_endian> Base; 1815 1816 public: 1817 typedef typename Base::Output_reloc_type Output_reloc_type; 1818 typedef typename Output_reloc_type::Address Address; 1819 typedef typename Output_reloc_type::Addend Addend; 1820 1821 Output_data_reloc(bool sr) 1822 : Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>(sr) 1823 { } 1824 1825 // Add a reloc against a global symbol. 1826 1827 void 1828 add_global(Symbol* gsym, unsigned int type, Output_data* od, 1829 Address address, Addend addend) 1830 { this->add(od, Output_reloc_type(gsym, type, od, address, addend, 1831 false, false, false)); } 1832 1833 void 1834 add_global(Symbol* gsym, unsigned int type, Output_data* od, 1835 Sized_relobj<size, big_endian>* relobj, 1836 unsigned int shndx, Address address, 1837 Addend addend) 1838 { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address, 1839 addend, false, false, false)); } 1840 1841 void 1842 add_global_generic(Symbol* gsym, unsigned int type, Output_data* od, 1843 uint64_t address, uint64_t addend) 1844 { 1845 this->add(od, Output_reloc_type(gsym, type, od, 1846 convert_types<Address, uint64_t>(address), 1847 convert_types<Addend, uint64_t>(addend), 1848 false, false, false)); 1849 } 1850 1851 void 1852 add_global_generic(Symbol* gsym, unsigned int type, Output_data* od, 1853 Relobj* relobj, unsigned int shndx, uint64_t address, 1854 uint64_t addend) 1855 { 1856 Sized_relobj<size, big_endian>* sized_relobj = 1857 static_cast<Sized_relobj<size, big_endian>*>(relobj); 1858 this->add(od, Output_reloc_type(gsym, type, sized_relobj, shndx, 1859 convert_types<Address, uint64_t>(address), 1860 convert_types<Addend, uint64_t>(addend), 1861 false, false, false)); 1862 } 1863 1864 // Add a RELATIVE reloc against a global symbol. The final output 1865 // relocation will not reference the symbol, but we must keep the symbol 1866 // information long enough to set the addend of the relocation correctly 1867 // when it is written. 1868 1869 void 1870 add_global_relative(Symbol* gsym, unsigned int type, Output_data* od, 1871 Address address, Addend addend, bool use_plt_offset) 1872 { this->add(od, Output_reloc_type(gsym, type, od, address, addend, true, 1873 true, use_plt_offset)); } 1874 1875 void 1876 add_global_relative(Symbol* gsym, unsigned int type, Output_data* od, 1877 Sized_relobj<size, big_endian>* relobj, 1878 unsigned int shndx, Address address, Addend addend, 1879 bool use_plt_offset) 1880 { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address, 1881 addend, true, true, use_plt_offset)); } 1882 1883 // Add a global relocation which does not use a symbol for the relocation, 1884 // but which gets its addend from a symbol. 1885 1886 void 1887 add_symbolless_global_addend(Symbol* gsym, unsigned int type, Output_data* od, 1888 Address address, Addend addend) 1889 { this->add(od, Output_reloc_type(gsym, type, od, address, addend, 1890 false, true, false)); } 1891 1892 void 1893 add_symbolless_global_addend(Symbol* gsym, unsigned int type, 1894 Output_data* od, 1895 Sized_relobj<size, big_endian>* relobj, 1896 unsigned int shndx, Address address, Addend addend) 1897 { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address, 1898 addend, false, true, false)); } 1899 1900 // Add a reloc against a local symbol. 1901 1902 void 1903 add_local(Sized_relobj<size, big_endian>* relobj, 1904 unsigned int local_sym_index, unsigned int type, 1905 Output_data* od, Address address, Addend addend) 1906 { 1907 this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address, 1908 addend, false, false, false, false)); 1909 } 1910 1911 void 1912 add_local(Sized_relobj<size, big_endian>* relobj, 1913 unsigned int local_sym_index, unsigned int type, 1914 Output_data* od, unsigned int shndx, Address address, 1915 Addend addend) 1916 { 1917 this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx, 1918 address, addend, false, false, false, 1919 false)); 1920 } 1921 1922 void 1923 add_local_generic(Relobj* relobj, unsigned int local_sym_index, 1924 unsigned int type, Output_data* od, uint64_t address, 1925 uint64_t addend) 1926 { 1927 Sized_relobj<size, big_endian>* sized_relobj = 1928 static_cast<Sized_relobj<size, big_endian> *>(relobj); 1929 this->add(od, Output_reloc_type(sized_relobj, local_sym_index, type, od, 1930 convert_types<Address, uint64_t>(address), 1931 convert_types<Addend, uint64_t>(addend), 1932 false, false, false, false)); 1933 } 1934 1935 void 1936 add_local_generic(Relobj* relobj, unsigned int local_sym_index, 1937 unsigned int type, Output_data* od, unsigned int shndx, 1938 uint64_t address, uint64_t addend) 1939 { 1940 Sized_relobj<size, big_endian>* sized_relobj = 1941 static_cast<Sized_relobj<size, big_endian>*>(relobj); 1942 this->add(od, Output_reloc_type(sized_relobj, local_sym_index, type, shndx, 1943 convert_types<Address, uint64_t>(address), 1944 convert_types<Addend, uint64_t>(addend), 1945 false, false, false, false)); 1946 } 1947 1948 // Add a RELATIVE reloc against a local symbol. 1949 1950 void 1951 add_local_relative(Sized_relobj<size, big_endian>* relobj, 1952 unsigned int local_sym_index, unsigned int type, 1953 Output_data* od, Address address, Addend addend, 1954 bool use_plt_offset) 1955 { 1956 this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address, 1957 addend, true, true, false, 1958 use_plt_offset)); 1959 } 1960 1961 void 1962 add_local_relative(Sized_relobj<size, big_endian>* relobj, 1963 unsigned int local_sym_index, unsigned int type, 1964 Output_data* od, unsigned int shndx, Address address, 1965 Addend addend, bool use_plt_offset) 1966 { 1967 this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx, 1968 address, addend, true, true, false, 1969 use_plt_offset)); 1970 } 1971 1972 // Add a local relocation which does not use a symbol for the relocation, 1973 // but which gets it's addend from a symbol. 1974 1975 void 1976 add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj, 1977 unsigned int local_sym_index, unsigned int type, 1978 Output_data* od, Address address, Addend addend) 1979 { 1980 this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address, 1981 addend, false, true, false, false)); 1982 } 1983 1984 void 1985 add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj, 1986 unsigned int local_sym_index, unsigned int type, 1987 Output_data* od, unsigned int shndx, 1988 Address address, Addend addend) 1989 { 1990 this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx, 1991 address, addend, false, true, false, 1992 false)); 1993 } 1994 1995 // Add a reloc against a local section symbol. This will be 1996 // converted into a reloc against the STT_SECTION symbol of the 1997 // output section. 1998 1999 void 2000 add_local_section(Sized_relobj<size, big_endian>* relobj, 2001 unsigned int input_shndx, unsigned int type, 2002 Output_data* od, Address address, Addend addend) 2003 { 2004 this->add(od, Output_reloc_type(relobj, input_shndx, type, od, address, 2005 addend, false, false, true, false)); 2006 } 2007 2008 void 2009 add_local_section(Sized_relobj<size, big_endian>* relobj, 2010 unsigned int input_shndx, unsigned int type, 2011 Output_data* od, unsigned int shndx, Address address, 2012 Addend addend) 2013 { 2014 this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx, 2015 address, addend, false, false, true, 2016 false)); 2017 } 2018 2019 // A reloc against the STT_SECTION symbol of an output section. 2020 2021 void 2022 add_output_section(Output_section* os, unsigned int type, Output_data* od, 2023 Address address, Addend addend) 2024 { this->add(od, Output_reloc_type(os, type, od, address, addend)); } 2025 2026 void 2027 add_output_section(Output_section* os, unsigned int type, Output_data* od, 2028 Sized_relobj<size, big_endian>* relobj, 2029 unsigned int shndx, Address address, Addend addend) 2030 { this->add(od, Output_reloc_type(os, type, relobj, shndx, address, 2031 addend)); } 2032 2033 void 2034 add_output_section_generic(Output_section* os, unsigned int type, 2035 Output_data* od, uint64_t address, 2036 uint64_t addend) 2037 { 2038 this->add(od, Output_reloc_type(os, type, od, 2039 convert_types<Address, uint64_t>(address), 2040 convert_types<Addend, uint64_t>(addend))); 2041 } 2042 2043 void 2044 add_output_section_generic(Output_section* os, unsigned int type, 2045 Output_data* od, Relobj* relobj, 2046 unsigned int shndx, uint64_t address, 2047 uint64_t addend) 2048 { 2049 Sized_relobj<size, big_endian>* sized_relobj = 2050 static_cast<Sized_relobj<size, big_endian>*>(relobj); 2051 this->add(od, Output_reloc_type(os, type, sized_relobj, shndx, 2052 convert_types<Address, uint64_t>(address), 2053 convert_types<Addend, uint64_t>(addend))); 2054 } 2055 2056 // Add an absolute relocation. 2057 2058 void 2059 add_absolute(unsigned int type, Output_data* od, Address address, 2060 Addend addend) 2061 { this->add(od, Output_reloc_type(type, od, address, addend)); } 2062 2063 void 2064 add_absolute(unsigned int type, Output_data* od, 2065 Sized_relobj<size, big_endian>* relobj, 2066 unsigned int shndx, Address address, Addend addend) 2067 { this->add(od, Output_reloc_type(type, relobj, shndx, address, addend)); } 2068 2069 // Add a target specific relocation. A target which calls this must 2070 // define the reloc_symbol_index and reloc_addend virtual functions. 2071 2072 void 2073 add_target_specific(unsigned int type, void* arg, Output_data* od, 2074 Address address, Addend addend) 2075 { this->add(od, Output_reloc_type(type, arg, od, address, addend)); } 2076 2077 void 2078 add_target_specific(unsigned int type, void* arg, Output_data* od, 2079 Sized_relobj<size, big_endian>* relobj, 2080 unsigned int shndx, Address address, Addend addend) 2081 { 2082 this->add(od, Output_reloc_type(type, arg, relobj, shndx, address, 2083 addend)); 2084 } 2085 }; 2086 2087 // Output_relocatable_relocs represents a relocation section in a 2088 // relocatable link. The actual data is written out in the target 2089 // hook relocate_for_relocatable. This just saves space for it. 2090 2091 template<int sh_type, int size, bool big_endian> 2092 class Output_relocatable_relocs : public Output_section_data 2093 { 2094 public: 2095 Output_relocatable_relocs(Relocatable_relocs* rr) 2096 : Output_section_data(Output_data::default_alignment_for_size(size)), 2097 rr_(rr) 2098 { } 2099 2100 void 2101 set_final_data_size(); 2102 2103 // Write out the data. There is nothing to do here. 2104 void 2105 do_write(Output_file*) 2106 { } 2107 2108 // Write to a map file. 2109 void 2110 do_print_to_mapfile(Mapfile* mapfile) const 2111 { mapfile->print_output_data(this, _("** relocs")); } 2112 2113 private: 2114 // The relocs associated with this input section. 2115 Relocatable_relocs* rr_; 2116 }; 2117 2118 // Handle a GROUP section. 2119 2120 template<int size, bool big_endian> 2121 class Output_data_group : public Output_section_data 2122 { 2123 public: 2124 // The constructor clears *INPUT_SHNDXES. 2125 Output_data_group(Sized_relobj_file<size, big_endian>* relobj, 2126 section_size_type entry_count, 2127 elfcpp::Elf_Word flags, 2128 std::vector<unsigned int>* input_shndxes); 2129 2130 void 2131 do_write(Output_file*); 2132 2133 // Write to a map file. 2134 void 2135 do_print_to_mapfile(Mapfile* mapfile) const 2136 { mapfile->print_output_data(this, _("** group")); } 2137 2138 // Set final data size. 2139 void 2140 set_final_data_size() 2141 { this->set_data_size((this->input_shndxes_.size() + 1) * 4); } 2142 2143 private: 2144 // The input object. 2145 Sized_relobj_file<size, big_endian>* relobj_; 2146 // The group flag word. 2147 elfcpp::Elf_Word flags_; 2148 // The section indexes of the input sections in this group. 2149 std::vector<unsigned int> input_shndxes_; 2150 }; 2151 2152 // Output_data_got is used to manage a GOT. Each entry in the GOT is 2153 // for one symbol--either a global symbol or a local symbol in an 2154 // object. The target specific code adds entries to the GOT as 2155 // needed. The GOT_SIZE template parameter is the size in bits of a 2156 // GOT entry, typically 32 or 64. 2157 2158 class Output_data_got_base : public Output_section_data_build 2159 { 2160 public: 2161 Output_data_got_base(uint64_t align) 2162 : Output_section_data_build(align) 2163 { } 2164 2165 Output_data_got_base(off_t data_size, uint64_t align) 2166 : Output_section_data_build(data_size, align) 2167 { } 2168 2169 // Reserve the slot at index I in the GOT. 2170 void 2171 reserve_slot(unsigned int i) 2172 { this->do_reserve_slot(i); } 2173 2174 protected: 2175 // Reserve the slot at index I in the GOT. 2176 virtual void 2177 do_reserve_slot(unsigned int i) = 0; 2178 }; 2179 2180 template<int got_size, bool big_endian> 2181 class Output_data_got : public Output_data_got_base 2182 { 2183 public: 2184 typedef typename elfcpp::Elf_types<got_size>::Elf_Addr Valtype; 2185 2186 Output_data_got() 2187 : Output_data_got_base(Output_data::default_alignment_for_size(got_size)), 2188 entries_(), free_list_() 2189 { } 2190 2191 Output_data_got(off_t data_size) 2192 : Output_data_got_base(data_size, 2193 Output_data::default_alignment_for_size(got_size)), 2194 entries_(), free_list_() 2195 { 2196 // For an incremental update, we have an existing GOT section. 2197 // Initialize the list of entries and the free list. 2198 this->entries_.resize(data_size / (got_size / 8)); 2199 this->free_list_.init(data_size, false); 2200 } 2201 2202 // Add an entry for a global symbol to the GOT. Return true if this 2203 // is a new GOT entry, false if the symbol was already in the GOT. 2204 bool 2205 add_global(Symbol* gsym, unsigned int got_type); 2206 2207 // Like add_global, but use the PLT offset of the global symbol if 2208 // it has one. 2209 bool 2210 add_global_plt(Symbol* gsym, unsigned int got_type); 2211 2212 // Add an entry for a global symbol to the GOT, and add a dynamic 2213 // relocation of type R_TYPE for the GOT entry. 2214 void 2215 add_global_with_rel(Symbol* gsym, unsigned int got_type, 2216 Output_data_reloc_generic* rel_dyn, unsigned int r_type); 2217 2218 // Add a pair of entries for a global symbol to the GOT, and add 2219 // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively. 2220 void 2221 add_global_pair_with_rel(Symbol* gsym, unsigned int got_type, 2222 Output_data_reloc_generic* rel_dyn, 2223 unsigned int r_type_1, unsigned int r_type_2); 2224 2225 // Add an entry for a local symbol to the GOT. This returns true if 2226 // this is a new GOT entry, false if the symbol already has a GOT 2227 // entry. 2228 bool 2229 add_local(Relobj* object, unsigned int sym_index, unsigned int got_type); 2230 2231 // Like add_local, but use the PLT offset of the local symbol if it 2232 // has one. 2233 bool 2234 add_local_plt(Relobj* object, unsigned int sym_index, unsigned int got_type); 2235 2236 // Add an entry for a local symbol to the GOT, and add a dynamic 2237 // relocation of type R_TYPE for the GOT entry. 2238 void 2239 add_local_with_rel(Relobj* object, unsigned int sym_index, 2240 unsigned int got_type, Output_data_reloc_generic* rel_dyn, 2241 unsigned int r_type); 2242 2243 // Add a pair of entries for a local symbol to the GOT, and add 2244 // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively. 2245 void 2246 add_local_pair_with_rel(Relobj* object, unsigned int sym_index, 2247 unsigned int shndx, unsigned int got_type, 2248 Output_data_reloc_generic* rel_dyn, 2249 unsigned int r_type_1, unsigned int r_type_2); 2250 2251 // Add a constant to the GOT. This returns the offset of the new 2252 // entry from the start of the GOT. 2253 unsigned int 2254 add_constant(Valtype constant) 2255 { 2256 unsigned int got_offset = this->add_got_entry(Got_entry(constant)); 2257 return got_offset; 2258 } 2259 2260 // Reserve a slot in the GOT for a local symbol. 2261 void 2262 reserve_local(unsigned int i, Relobj* object, unsigned int sym_index, 2263 unsigned int got_type); 2264 2265 // Reserve a slot in the GOT for a global symbol. 2266 void 2267 reserve_global(unsigned int i, Symbol* gsym, unsigned int got_type); 2268 2269 protected: 2270 // Write out the GOT table. 2271 void 2272 do_write(Output_file*); 2273 2274 // Write to a map file. 2275 void 2276 do_print_to_mapfile(Mapfile* mapfile) const 2277 { mapfile->print_output_data(this, _("** GOT")); } 2278 2279 // Reserve the slot at index I in the GOT. 2280 virtual void 2281 do_reserve_slot(unsigned int i) 2282 { this->free_list_.remove(i * got_size / 8, (i + 1) * got_size / 8); } 2283 2284 private: 2285 // This POD class holds a single GOT entry. 2286 class Got_entry 2287 { 2288 public: 2289 // Create a zero entry. 2290 Got_entry() 2291 : local_sym_index_(RESERVED_CODE), use_plt_offset_(false) 2292 { this->u_.constant = 0; } 2293 2294 // Create a global symbol entry. 2295 Got_entry(Symbol* gsym, bool use_plt_offset) 2296 : local_sym_index_(GSYM_CODE), use_plt_offset_(use_plt_offset) 2297 { this->u_.gsym = gsym; } 2298 2299 // Create a local symbol entry. 2300 Got_entry(Relobj* object, unsigned int local_sym_index, 2301 bool use_plt_offset) 2302 : local_sym_index_(local_sym_index), use_plt_offset_(use_plt_offset) 2303 { 2304 gold_assert(local_sym_index != GSYM_CODE 2305 && local_sym_index != CONSTANT_CODE 2306 && local_sym_index != RESERVED_CODE 2307 && local_sym_index == this->local_sym_index_); 2308 this->u_.object = object; 2309 } 2310 2311 // Create a constant entry. The constant is a host value--it will 2312 // be swapped, if necessary, when it is written out. 2313 explicit Got_entry(Valtype constant) 2314 : local_sym_index_(CONSTANT_CODE), use_plt_offset_(false) 2315 { this->u_.constant = constant; } 2316 2317 // Write the GOT entry to an output view. 2318 void 2319 write(unsigned char* pov) const; 2320 2321 private: 2322 enum 2323 { 2324 GSYM_CODE = 0x7fffffff, 2325 CONSTANT_CODE = 0x7ffffffe, 2326 RESERVED_CODE = 0x7ffffffd 2327 }; 2328 2329 union 2330 { 2331 // For a local symbol, the object. 2332 Relobj* object; 2333 // For a global symbol, the symbol. 2334 Symbol* gsym; 2335 // For a constant, the constant. 2336 Valtype constant; 2337 } u_; 2338 // For a local symbol, the local symbol index. This is GSYM_CODE 2339 // for a global symbol, or CONSTANT_CODE for a constant. 2340 unsigned int local_sym_index_ : 31; 2341 // Whether to use the PLT offset of the symbol if it has one. 2342 bool use_plt_offset_ : 1; 2343 }; 2344 2345 typedef std::vector<Got_entry> Got_entries; 2346 2347 // Create a new GOT entry and return its offset. 2348 unsigned int 2349 add_got_entry(Got_entry got_entry); 2350 2351 // Create a pair of new GOT entries and return the offset of the first. 2352 unsigned int 2353 add_got_entry_pair(Got_entry got_entry_1, Got_entry got_entry_2); 2354 2355 // Return the offset into the GOT of GOT entry I. 2356 unsigned int 2357 got_offset(unsigned int i) const 2358 { return i * (got_size / 8); } 2359 2360 // Return the offset into the GOT of the last entry added. 2361 unsigned int 2362 last_got_offset() const 2363 { return this->got_offset(this->entries_.size() - 1); } 2364 2365 // Set the size of the section. 2366 void 2367 set_got_size() 2368 { this->set_current_data_size(this->got_offset(this->entries_.size())); } 2369 2370 // The list of GOT entries. 2371 Got_entries entries_; 2372 2373 // List of available regions within the section, for incremental 2374 // update links. 2375 Free_list free_list_; 2376 }; 2377 2378 // Output_data_dynamic is used to hold the data in SHT_DYNAMIC 2379 // section. 2380 2381 class Output_data_dynamic : public Output_section_data 2382 { 2383 public: 2384 Output_data_dynamic(Stringpool* pool) 2385 : Output_section_data(Output_data::default_alignment()), 2386 entries_(), pool_(pool) 2387 { } 2388 2389 // Add a new dynamic entry with a fixed numeric value. 2390 void 2391 add_constant(elfcpp::DT tag, unsigned int val) 2392 { this->add_entry(Dynamic_entry(tag, val)); } 2393 2394 // Add a new dynamic entry with the address of output data. 2395 void 2396 add_section_address(elfcpp::DT tag, const Output_data* od) 2397 { this->add_entry(Dynamic_entry(tag, od, false)); } 2398 2399 // Add a new dynamic entry with the address of output data 2400 // plus a constant offset. 2401 void 2402 add_section_plus_offset(elfcpp::DT tag, const Output_data* od, 2403 unsigned int offset) 2404 { this->add_entry(Dynamic_entry(tag, od, offset)); } 2405 2406 // Add a new dynamic entry with the size of output data. 2407 void 2408 add_section_size(elfcpp::DT tag, const Output_data* od) 2409 { this->add_entry(Dynamic_entry(tag, od, true)); } 2410 2411 // Add a new dynamic entry with the total size of two output datas. 2412 void 2413 add_section_size(elfcpp::DT tag, const Output_data* od, 2414 const Output_data* od2) 2415 { this->add_entry(Dynamic_entry(tag, od, od2)); } 2416 2417 // Add a new dynamic entry with the address of a symbol. 2418 void 2419 add_symbol(elfcpp::DT tag, const Symbol* sym) 2420 { this->add_entry(Dynamic_entry(tag, sym)); } 2421 2422 // Add a new dynamic entry with a string. 2423 void 2424 add_string(elfcpp::DT tag, const char* str) 2425 { this->add_entry(Dynamic_entry(tag, this->pool_->add(str, true, NULL))); } 2426 2427 void 2428 add_string(elfcpp::DT tag, const std::string& str) 2429 { this->add_string(tag, str.c_str()); } 2430 2431 protected: 2432 // Adjust the output section to set the entry size. 2433 void 2434 do_adjust_output_section(Output_section*); 2435 2436 // Set the final data size. 2437 void 2438 set_final_data_size(); 2439 2440 // Write out the dynamic entries. 2441 void 2442 do_write(Output_file*); 2443 2444 // Write to a map file. 2445 void 2446 do_print_to_mapfile(Mapfile* mapfile) const 2447 { mapfile->print_output_data(this, _("** dynamic")); } 2448 2449 private: 2450 // This POD class holds a single dynamic entry. 2451 class Dynamic_entry 2452 { 2453 public: 2454 // Create an entry with a fixed numeric value. 2455 Dynamic_entry(elfcpp::DT tag, unsigned int val) 2456 : tag_(tag), offset_(DYNAMIC_NUMBER) 2457 { this->u_.val = val; } 2458 2459 // Create an entry with the size or address of a section. 2460 Dynamic_entry(elfcpp::DT tag, const Output_data* od, bool section_size) 2461 : tag_(tag), 2462 offset_(section_size 2463 ? DYNAMIC_SECTION_SIZE 2464 : DYNAMIC_SECTION_ADDRESS) 2465 { 2466 this->u_.od = od; 2467 this->od2 = NULL; 2468 } 2469 2470 // Create an entry with the size of two sections. 2471 Dynamic_entry(elfcpp::DT tag, const Output_data* od, const Output_data* od2) 2472 : tag_(tag), 2473 offset_(DYNAMIC_SECTION_SIZE) 2474 { 2475 this->u_.od = od; 2476 this->od2 = od2; 2477 } 2478 2479 // Create an entry with the address of a section plus a constant offset. 2480 Dynamic_entry(elfcpp::DT tag, const Output_data* od, unsigned int offset) 2481 : tag_(tag), 2482 offset_(offset) 2483 { this->u_.od = od; } 2484 2485 // Create an entry with the address of a symbol. 2486 Dynamic_entry(elfcpp::DT tag, const Symbol* sym) 2487 : tag_(tag), offset_(DYNAMIC_SYMBOL) 2488 { this->u_.sym = sym; } 2489 2490 // Create an entry with a string. 2491 Dynamic_entry(elfcpp::DT tag, const char* str) 2492 : tag_(tag), offset_(DYNAMIC_STRING) 2493 { this->u_.str = str; } 2494 2495 // Return the tag of this entry. 2496 elfcpp::DT 2497 tag() const 2498 { return this->tag_; } 2499 2500 // Write the dynamic entry to an output view. 2501 template<int size, bool big_endian> 2502 void 2503 write(unsigned char* pov, const Stringpool*) const; 2504 2505 private: 2506 // Classification is encoded in the OFFSET field. 2507 enum Classification 2508 { 2509 // Section address. 2510 DYNAMIC_SECTION_ADDRESS = 0, 2511 // Number. 2512 DYNAMIC_NUMBER = -1U, 2513 // Section size. 2514 DYNAMIC_SECTION_SIZE = -2U, 2515 // Symbol adress. 2516 DYNAMIC_SYMBOL = -3U, 2517 // String. 2518 DYNAMIC_STRING = -4U 2519 // Any other value indicates a section address plus OFFSET. 2520 }; 2521 2522 union 2523 { 2524 // For DYNAMIC_NUMBER. 2525 unsigned int val; 2526 // For DYNAMIC_SECTION_SIZE and section address plus OFFSET. 2527 const Output_data* od; 2528 // For DYNAMIC_SYMBOL. 2529 const Symbol* sym; 2530 // For DYNAMIC_STRING. 2531 const char* str; 2532 } u_; 2533 // For DYNAMIC_SYMBOL with two sections. 2534 const Output_data* od2; 2535 // The dynamic tag. 2536 elfcpp::DT tag_; 2537 // The type of entry (Classification) or offset within a section. 2538 unsigned int offset_; 2539 }; 2540 2541 // Add an entry to the list. 2542 void 2543 add_entry(const Dynamic_entry& entry) 2544 { this->entries_.push_back(entry); } 2545 2546 // Sized version of write function. 2547 template<int size, bool big_endian> 2548 void 2549 sized_write(Output_file* of); 2550 2551 // The type of the list of entries. 2552 typedef std::vector<Dynamic_entry> Dynamic_entries; 2553 2554 // The entries. 2555 Dynamic_entries entries_; 2556 // The pool used for strings. 2557 Stringpool* pool_; 2558 }; 2559 2560 // Output_symtab_xindex is used to handle SHT_SYMTAB_SHNDX sections, 2561 // which may be required if the object file has more than 2562 // SHN_LORESERVE sections. 2563 2564 class Output_symtab_xindex : public Output_section_data 2565 { 2566 public: 2567 Output_symtab_xindex(size_t symcount) 2568 : Output_section_data(symcount * 4, 4, true), 2569 entries_() 2570 { } 2571 2572 // Add an entry: symbol number SYMNDX has section SHNDX. 2573 void 2574 add(unsigned int symndx, unsigned int shndx) 2575 { this->entries_.push_back(std::make_pair(symndx, shndx)); } 2576 2577 protected: 2578 void 2579 do_write(Output_file*); 2580 2581 // Write to a map file. 2582 void 2583 do_print_to_mapfile(Mapfile* mapfile) const 2584 { mapfile->print_output_data(this, _("** symtab xindex")); } 2585 2586 private: 2587 template<bool big_endian> 2588 void 2589 endian_do_write(unsigned char*); 2590 2591 // It is likely that most symbols will not require entries. Rather 2592 // than keep a vector for all symbols, we keep pairs of symbol index 2593 // and section index. 2594 typedef std::vector<std::pair<unsigned int, unsigned int> > Xindex_entries; 2595 2596 // The entries we need. 2597 Xindex_entries entries_; 2598 }; 2599 2600 // A relaxed input section. 2601 class Output_relaxed_input_section : public Output_section_data_build 2602 { 2603 public: 2604 // We would like to call relobj->section_addralign(shndx) to get the 2605 // alignment but we do not want the constructor to fail. So callers 2606 // are repsonsible for ensuring that. 2607 Output_relaxed_input_section(Relobj* relobj, unsigned int shndx, 2608 uint64_t addralign) 2609 : Output_section_data_build(addralign), relobj_(relobj), shndx_(shndx) 2610 { } 2611 2612 // Return the Relobj of this relaxed input section. 2613 Relobj* 2614 relobj() const 2615 { return this->relobj_; } 2616 2617 // Return the section index of this relaxed input section. 2618 unsigned int 2619 shndx() const 2620 { return this->shndx_; } 2621 2622 private: 2623 Relobj* relobj_; 2624 unsigned int shndx_; 2625 }; 2626 2627 // This class describes properties of merge data sections. It is used 2628 // as a key type for maps. 2629 class Merge_section_properties 2630 { 2631 public: 2632 Merge_section_properties(bool is_string, uint64_t entsize, 2633 uint64_t addralign) 2634 : is_string_(is_string), entsize_(entsize), addralign_(addralign) 2635 { } 2636 2637 // Whether this equals to another Merge_section_properties MSP. 2638 bool 2639 eq(const Merge_section_properties& msp) const 2640 { 2641 return ((this->is_string_ == msp.is_string_) 2642 && (this->entsize_ == msp.entsize_) 2643 && (this->addralign_ == msp.addralign_)); 2644 } 2645 2646 // Compute a hash value for this using 64-bit FNV-1a hash. 2647 size_t 2648 hash_value() const 2649 { 2650 uint64_t h = 14695981039346656037ULL; // FNV offset basis. 2651 uint64_t prime = 1099511628211ULL; 2652 h = (h ^ static_cast<uint64_t>(this->is_string_)) * prime; 2653 h = (h ^ static_cast<uint64_t>(this->entsize_)) * prime; 2654 h = (h ^ static_cast<uint64_t>(this->addralign_)) * prime; 2655 return h; 2656 } 2657 2658 // Functors for associative containers. 2659 struct equal_to 2660 { 2661 bool 2662 operator()(const Merge_section_properties& msp1, 2663 const Merge_section_properties& msp2) const 2664 { return msp1.eq(msp2); } 2665 }; 2666 2667 struct hash 2668 { 2669 size_t 2670 operator()(const Merge_section_properties& msp) const 2671 { return msp.hash_value(); } 2672 }; 2673 2674 private: 2675 // Whether this merge data section is for strings. 2676 bool is_string_; 2677 // Entsize of this merge data section. 2678 uint64_t entsize_; 2679 // Address alignment. 2680 uint64_t addralign_; 2681 }; 2682 2683 // This class is used to speed up look up of special input sections in an 2684 // Output_section. 2685 2686 class Output_section_lookup_maps 2687 { 2688 public: 2689 Output_section_lookup_maps() 2690 : is_valid_(true), merge_sections_by_properties_(), 2691 merge_sections_by_id_(), relaxed_input_sections_by_id_() 2692 { } 2693 2694 // Whether the maps are valid. 2695 bool 2696 is_valid() const 2697 { return this->is_valid_; } 2698 2699 // Invalidate the maps. 2700 void 2701 invalidate() 2702 { this->is_valid_ = false; } 2703 2704 // Clear the maps. 2705 void 2706 clear() 2707 { 2708 this->merge_sections_by_properties_.clear(); 2709 this->merge_sections_by_id_.clear(); 2710 this->relaxed_input_sections_by_id_.clear(); 2711 // A cleared map is valid. 2712 this->is_valid_ = true; 2713 } 2714 2715 // Find a merge section by merge section properties. Return NULL if none 2716 // is found. 2717 Output_merge_base* 2718 find_merge_section(const Merge_section_properties& msp) const 2719 { 2720 gold_assert(this->is_valid_); 2721 Merge_sections_by_properties::const_iterator p = 2722 this->merge_sections_by_properties_.find(msp); 2723 return p != this->merge_sections_by_properties_.end() ? p->second : NULL; 2724 } 2725 2726 // Find a merge section by section ID of a merge input section. Return NULL 2727 // if none is found. 2728 Output_merge_base* 2729 find_merge_section(const Object* object, unsigned int shndx) const 2730 { 2731 gold_assert(this->is_valid_); 2732 Merge_sections_by_id::const_iterator p = 2733 this->merge_sections_by_id_.find(Const_section_id(object, shndx)); 2734 return p != this->merge_sections_by_id_.end() ? p->second : NULL; 2735 } 2736 2737 // Add a merge section pointed by POMB with properties MSP. 2738 void 2739 add_merge_section(const Merge_section_properties& msp, 2740 Output_merge_base* pomb) 2741 { 2742 std::pair<Merge_section_properties, Output_merge_base*> value(msp, pomb); 2743 std::pair<Merge_sections_by_properties::iterator, bool> result = 2744 this->merge_sections_by_properties_.insert(value); 2745 gold_assert(result.second); 2746 } 2747 2748 // Add a mapping from a merged input section in OBJECT with index SHNDX 2749 // to a merge output section pointed by POMB. 2750 void 2751 add_merge_input_section(const Object* object, unsigned int shndx, 2752 Output_merge_base* pomb) 2753 { 2754 Const_section_id csid(object, shndx); 2755 std::pair<Const_section_id, Output_merge_base*> value(csid, pomb); 2756 std::pair<Merge_sections_by_id::iterator, bool> result = 2757 this->merge_sections_by_id_.insert(value); 2758 gold_assert(result.second); 2759 } 2760 2761 // Find a relaxed input section of OBJECT with index SHNDX. 2762 Output_relaxed_input_section* 2763 find_relaxed_input_section(const Object* object, unsigned int shndx) const 2764 { 2765 gold_assert(this->is_valid_); 2766 Relaxed_input_sections_by_id::const_iterator p = 2767 this->relaxed_input_sections_by_id_.find(Const_section_id(object, shndx)); 2768 return p != this->relaxed_input_sections_by_id_.end() ? p->second : NULL; 2769 } 2770 2771 // Add a relaxed input section pointed by POMB and whose original input 2772 // section is in OBJECT with index SHNDX. 2773 void 2774 add_relaxed_input_section(const Relobj* relobj, unsigned int shndx, 2775 Output_relaxed_input_section* poris) 2776 { 2777 Const_section_id csid(relobj, shndx); 2778 std::pair<Const_section_id, Output_relaxed_input_section*> 2779 value(csid, poris); 2780 std::pair<Relaxed_input_sections_by_id::iterator, bool> result = 2781 this->relaxed_input_sections_by_id_.insert(value); 2782 gold_assert(result.second); 2783 } 2784 2785 private: 2786 typedef Unordered_map<Const_section_id, Output_merge_base*, 2787 Const_section_id_hash> 2788 Merge_sections_by_id; 2789 2790 typedef Unordered_map<Merge_section_properties, Output_merge_base*, 2791 Merge_section_properties::hash, 2792 Merge_section_properties::equal_to> 2793 Merge_sections_by_properties; 2794 2795 typedef Unordered_map<Const_section_id, Output_relaxed_input_section*, 2796 Const_section_id_hash> 2797 Relaxed_input_sections_by_id; 2798 2799 // Whether this is valid 2800 bool is_valid_; 2801 // Merge sections by merge section properties. 2802 Merge_sections_by_properties merge_sections_by_properties_; 2803 // Merge sections by section IDs. 2804 Merge_sections_by_id merge_sections_by_id_; 2805 // Relaxed sections by section IDs. 2806 Relaxed_input_sections_by_id relaxed_input_sections_by_id_; 2807 }; 2808 2809 // This abstract base class defines the interface for the 2810 // types of methods used to fill free space left in an output 2811 // section during an incremental link. These methods are used 2812 // to insert dummy compilation units into debug info so that 2813 // debug info consumers can scan the debug info serially. 2814 2815 class Output_fill 2816 { 2817 public: 2818 Output_fill() 2819 : is_big_endian_(parameters->target().is_big_endian()) 2820 { } 2821 2822 virtual 2823 ~Output_fill() 2824 { } 2825 2826 // Return the smallest size chunk of free space that can be 2827 // filled with a dummy compilation unit. 2828 size_t 2829 minimum_hole_size() const 2830 { return this->do_minimum_hole_size(); } 2831 2832 // Write a fill pattern of length LEN at offset OFF in the file. 2833 void 2834 write(Output_file* of, off_t off, size_t len) const 2835 { this->do_write(of, off, len); } 2836 2837 protected: 2838 virtual size_t 2839 do_minimum_hole_size() const = 0; 2840 2841 virtual void 2842 do_write(Output_file* of, off_t off, size_t len) const = 0; 2843 2844 bool 2845 is_big_endian() const 2846 { return this->is_big_endian_; } 2847 2848 private: 2849 bool is_big_endian_; 2850 }; 2851 2852 // Fill method that introduces a dummy compilation unit in 2853 // a .debug_info or .debug_types section. 2854 2855 class Output_fill_debug_info : public Output_fill 2856 { 2857 public: 2858 Output_fill_debug_info(bool is_debug_types) 2859 : is_debug_types_(is_debug_types) 2860 { } 2861 2862 protected: 2863 virtual size_t 2864 do_minimum_hole_size() const; 2865 2866 virtual void 2867 do_write(Output_file* of, off_t off, size_t len) const; 2868 2869 private: 2870 // Version of the header. 2871 static const int version = 4; 2872 // True if this is a .debug_types section. 2873 bool is_debug_types_; 2874 }; 2875 2876 // Fill method that introduces a dummy compilation unit in 2877 // a .debug_line section. 2878 2879 class Output_fill_debug_line : public Output_fill 2880 { 2881 public: 2882 Output_fill_debug_line() 2883 { } 2884 2885 protected: 2886 virtual size_t 2887 do_minimum_hole_size() const; 2888 2889 virtual void 2890 do_write(Output_file* of, off_t off, size_t len) const; 2891 2892 private: 2893 // Version of the header. We write a DWARF-3 header because it's smaller 2894 // and many tools have not yet been updated to understand the DWARF-4 header. 2895 static const int version = 3; 2896 // Length of the portion of the header that follows the header_length 2897 // field. This includes the following fields: 2898 // minimum_instruction_length, default_is_stmt, line_base, line_range, 2899 // opcode_base, standard_opcode_lengths[], include_directories, filenames. 2900 // The standard_opcode_lengths array is 12 bytes long, and the 2901 // include_directories and filenames fields each contain only a single 2902 // null byte. 2903 static const size_t header_length = 19; 2904 }; 2905 2906 // An output section. We don't expect to have too many output 2907 // sections, so we don't bother to do a template on the size. 2908 2909 class Output_section : public Output_data 2910 { 2911 public: 2912 // Create an output section, giving the name, type, and flags. 2913 Output_section(const char* name, elfcpp::Elf_Word, elfcpp::Elf_Xword); 2914 virtual ~Output_section(); 2915 2916 // Add a new input section SHNDX, named NAME, with header SHDR, from 2917 // object OBJECT. RELOC_SHNDX is the index of a relocation section 2918 // which applies to this section, or 0 if none, or -1 if more than 2919 // one. HAVE_SECTIONS_SCRIPT is true if we have a SECTIONS clause 2920 // in a linker script; in that case we need to keep track of input 2921 // sections associated with an output section. Return the offset 2922 // within the output section. 2923 template<int size, bool big_endian> 2924 off_t 2925 add_input_section(Layout* layout, Sized_relobj_file<size, big_endian>* object, 2926 unsigned int shndx, const char* name, 2927 const elfcpp::Shdr<size, big_endian>& shdr, 2928 unsigned int reloc_shndx, bool have_sections_script); 2929 2930 // Add generated data POSD to this output section. 2931 void 2932 add_output_section_data(Output_section_data* posd); 2933 2934 // Add a relaxed input section PORIS called NAME to this output section 2935 // with LAYOUT. 2936 void 2937 add_relaxed_input_section(Layout* layout, 2938 Output_relaxed_input_section* poris, 2939 const std::string& name); 2940 2941 // Return the section name. 2942 const char* 2943 name() const 2944 { return this->name_; } 2945 2946 // Return the section type. 2947 elfcpp::Elf_Word 2948 type() const 2949 { return this->type_; } 2950 2951 // Return the section flags. 2952 elfcpp::Elf_Xword 2953 flags() const 2954 { return this->flags_; } 2955 2956 typedef std::map<Section_id, unsigned int> Section_layout_order; 2957 2958 void 2959 update_section_layout(const Section_layout_order* order_map); 2960 2961 // Update the output section flags based on input section flags. 2962 void 2963 update_flags_for_input_section(elfcpp::Elf_Xword flags); 2964 2965 // Return the entsize field. 2966 uint64_t 2967 entsize() const 2968 { return this->entsize_; } 2969 2970 // Set the entsize field. 2971 void 2972 set_entsize(uint64_t v); 2973 2974 // Set the load address. 2975 void 2976 set_load_address(uint64_t load_address) 2977 { 2978 this->load_address_ = load_address; 2979 this->has_load_address_ = true; 2980 } 2981 2982 // Set the link field to the output section index of a section. 2983 void 2984 set_link_section(const Output_data* od) 2985 { 2986 gold_assert(this->link_ == 0 2987 && !this->should_link_to_symtab_ 2988 && !this->should_link_to_dynsym_); 2989 this->link_section_ = od; 2990 } 2991 2992 // Set the link field to a constant. 2993 void 2994 set_link(unsigned int v) 2995 { 2996 gold_assert(this->link_section_ == NULL 2997 && !this->should_link_to_symtab_ 2998 && !this->should_link_to_dynsym_); 2999 this->link_ = v; 3000 } 3001 3002 // Record that this section should link to the normal symbol table. 3003 void 3004 set_should_link_to_symtab() 3005 { 3006 gold_assert(this->link_section_ == NULL 3007 && this->link_ == 0 3008 && !this->should_link_to_dynsym_); 3009 this->should_link_to_symtab_ = true; 3010 } 3011 3012 // Record that this section should link to the dynamic symbol table. 3013 void 3014 set_should_link_to_dynsym() 3015 { 3016 gold_assert(this->link_section_ == NULL 3017 && this->link_ == 0 3018 && !this->should_link_to_symtab_); 3019 this->should_link_to_dynsym_ = true; 3020 } 3021 3022 // Return the info field. 3023 unsigned int 3024 info() const 3025 { 3026 gold_assert(this->info_section_ == NULL 3027 && this->info_symndx_ == NULL); 3028 return this->info_; 3029 } 3030 3031 // Set the info field to the output section index of a section. 3032 void 3033 set_info_section(const Output_section* os) 3034 { 3035 gold_assert((this->info_section_ == NULL 3036 || (this->info_section_ == os 3037 && this->info_uses_section_index_)) 3038 && this->info_symndx_ == NULL 3039 && this->info_ == 0); 3040 this->info_section_ = os; 3041 this->info_uses_section_index_= true; 3042 } 3043 3044 // Set the info field to the symbol table index of a symbol. 3045 void 3046 set_info_symndx(const Symbol* sym) 3047 { 3048 gold_assert(this->info_section_ == NULL 3049 && (this->info_symndx_ == NULL 3050 || this->info_symndx_ == sym) 3051 && this->info_ == 0); 3052 this->info_symndx_ = sym; 3053 } 3054 3055 // Set the info field to the symbol table index of a section symbol. 3056 void 3057 set_info_section_symndx(const Output_section* os) 3058 { 3059 gold_assert((this->info_section_ == NULL 3060 || (this->info_section_ == os 3061 && !this->info_uses_section_index_)) 3062 && this->info_symndx_ == NULL 3063 && this->info_ == 0); 3064 this->info_section_ = os; 3065 this->info_uses_section_index_ = false; 3066 } 3067 3068 // Set the info field to a constant. 3069 void 3070 set_info(unsigned int v) 3071 { 3072 gold_assert(this->info_section_ == NULL 3073 && this->info_symndx_ == NULL 3074 && (this->info_ == 0 3075 || this->info_ == v)); 3076 this->info_ = v; 3077 } 3078 3079 // Set the addralign field. 3080 void 3081 set_addralign(uint64_t v) 3082 { this->addralign_ = v; } 3083 3084 // Whether the output section index has been set. 3085 bool 3086 has_out_shndx() const 3087 { return this->out_shndx_ != -1U; } 3088 3089 // Indicate that we need a symtab index. 3090 void 3091 set_needs_symtab_index() 3092 { this->needs_symtab_index_ = true; } 3093 3094 // Return whether we need a symtab index. 3095 bool 3096 needs_symtab_index() const 3097 { return this->needs_symtab_index_; } 3098 3099 // Get the symtab index. 3100 unsigned int 3101 symtab_index() const 3102 { 3103 gold_assert(this->symtab_index_ != 0); 3104 return this->symtab_index_; 3105 } 3106 3107 // Set the symtab index. 3108 void 3109 set_symtab_index(unsigned int index) 3110 { 3111 gold_assert(index != 0); 3112 this->symtab_index_ = index; 3113 } 3114 3115 // Indicate that we need a dynsym index. 3116 void 3117 set_needs_dynsym_index() 3118 { this->needs_dynsym_index_ = true; } 3119 3120 // Return whether we need a dynsym index. 3121 bool 3122 needs_dynsym_index() const 3123 { return this->needs_dynsym_index_; } 3124 3125 // Get the dynsym index. 3126 unsigned int 3127 dynsym_index() const 3128 { 3129 gold_assert(this->dynsym_index_ != 0); 3130 return this->dynsym_index_; 3131 } 3132 3133 // Set the dynsym index. 3134 void 3135 set_dynsym_index(unsigned int index) 3136 { 3137 gold_assert(index != 0); 3138 this->dynsym_index_ = index; 3139 } 3140 3141 // Return whether the input sections sections attachd to this output 3142 // section may require sorting. This is used to handle constructor 3143 // priorities compatibly with GNU ld. 3144 bool 3145 may_sort_attached_input_sections() const 3146 { return this->may_sort_attached_input_sections_; } 3147 3148 // Record that the input sections attached to this output section 3149 // may require sorting. 3150 void 3151 set_may_sort_attached_input_sections() 3152 { this->may_sort_attached_input_sections_ = true; } 3153 3154 // Returns true if input sections must be sorted according to the 3155 // order in which their name appear in the --section-ordering-file. 3156 bool 3157 input_section_order_specified() 3158 { return this->input_section_order_specified_; } 3159 3160 // Record that input sections must be sorted as some of their names 3161 // match the patterns specified through --section-ordering-file. 3162 void 3163 set_input_section_order_specified() 3164 { this->input_section_order_specified_ = true; } 3165 3166 // Return whether the input sections attached to this output section 3167 // require sorting. This is used to handle constructor priorities 3168 // compatibly with GNU ld. 3169 bool 3170 must_sort_attached_input_sections() const 3171 { return this->must_sort_attached_input_sections_; } 3172 3173 // Record that the input sections attached to this output section 3174 // require sorting. 3175 void 3176 set_must_sort_attached_input_sections() 3177 { this->must_sort_attached_input_sections_ = true; } 3178 3179 // Get the order in which this section appears in the PT_LOAD output 3180 // segment. 3181 Output_section_order 3182 order() const 3183 { return this->order_; } 3184 3185 // Set the order for this section. 3186 void 3187 set_order(Output_section_order order) 3188 { this->order_ = order; } 3189 3190 // Return whether this section holds relro data--data which has 3191 // dynamic relocations but which may be marked read-only after the 3192 // dynamic relocations have been completed. 3193 bool 3194 is_relro() const 3195 { return this->is_relro_; } 3196 3197 // Record that this section holds relro data. 3198 void 3199 set_is_relro() 3200 { this->is_relro_ = true; } 3201 3202 // Record that this section does not hold relro data. 3203 void 3204 clear_is_relro() 3205 { this->is_relro_ = false; } 3206 3207 // True if this is a small section: a section which holds small 3208 // variables. 3209 bool 3210 is_small_section() const 3211 { return this->is_small_section_; } 3212 3213 // Record that this is a small section. 3214 void 3215 set_is_small_section() 3216 { this->is_small_section_ = true; } 3217 3218 // True if this is a large section: a section which holds large 3219 // variables. 3220 bool 3221 is_large_section() const 3222 { return this->is_large_section_; } 3223 3224 // Record that this is a large section. 3225 void 3226 set_is_large_section() 3227 { this->is_large_section_ = true; } 3228 3229 // True if this is a large data (not BSS) section. 3230 bool 3231 is_large_data_section() 3232 { return this->is_large_section_ && this->type_ != elfcpp::SHT_NOBITS; } 3233 3234 // Return whether this section should be written after all the input 3235 // sections are complete. 3236 bool 3237 after_input_sections() const 3238 { return this->after_input_sections_; } 3239 3240 // Record that this section should be written after all the input 3241 // sections are complete. 3242 void 3243 set_after_input_sections() 3244 { this->after_input_sections_ = true; } 3245 3246 // Return whether this section requires postprocessing after all 3247 // relocations have been applied. 3248 bool 3249 requires_postprocessing() const 3250 { return this->requires_postprocessing_; } 3251 3252 // If a section requires postprocessing, return the buffer to use. 3253 unsigned char* 3254 postprocessing_buffer() const 3255 { 3256 gold_assert(this->postprocessing_buffer_ != NULL); 3257 return this->postprocessing_buffer_; 3258 } 3259 3260 // If a section requires postprocessing, create the buffer to use. 3261 void 3262 create_postprocessing_buffer(); 3263 3264 // If a section requires postprocessing, this is the size of the 3265 // buffer to which relocations should be applied. 3266 off_t 3267 postprocessing_buffer_size() const 3268 { return this->current_data_size_for_child(); } 3269 3270 // Modify the section name. This is only permitted for an 3271 // unallocated section, and only before the size has been finalized. 3272 // Otherwise the name will not get into Layout::namepool_. 3273 void 3274 set_name(const char* newname) 3275 { 3276 gold_assert((this->flags_ & elfcpp::SHF_ALLOC) == 0); 3277 gold_assert(!this->is_data_size_valid()); 3278 this->name_ = newname; 3279 } 3280 3281 // Return whether the offset OFFSET in the input section SHNDX in 3282 // object OBJECT is being included in the link. 3283 bool 3284 is_input_address_mapped(const Relobj* object, unsigned int shndx, 3285 off_t offset) const; 3286 3287 // Return the offset within the output section of OFFSET relative to 3288 // the start of input section SHNDX in object OBJECT. 3289 section_offset_type 3290 output_offset(const Relobj* object, unsigned int shndx, 3291 section_offset_type offset) const; 3292 3293 // Return the output virtual address of OFFSET relative to the start 3294 // of input section SHNDX in object OBJECT. 3295 uint64_t 3296 output_address(const Relobj* object, unsigned int shndx, 3297 off_t offset) const; 3298 3299 // Look for the merged section for input section SHNDX in object 3300 // OBJECT. If found, return true, and set *ADDR to the address of 3301 // the start of the merged section. This is not necessary the 3302 // output offset corresponding to input offset 0 in the section, 3303 // since the section may be mapped arbitrarily. 3304 bool 3305 find_starting_output_address(const Relobj* object, unsigned int shndx, 3306 uint64_t* addr) const; 3307 3308 // Record that this output section was found in the SECTIONS clause 3309 // of a linker script. 3310 void 3311 set_found_in_sections_clause() 3312 { this->found_in_sections_clause_ = true; } 3313 3314 // Return whether this output section was found in the SECTIONS 3315 // clause of a linker script. 3316 bool 3317 found_in_sections_clause() const 3318 { return this->found_in_sections_clause_; } 3319 3320 // Write the section header into *OPHDR. 3321 template<int size, bool big_endian> 3322 void 3323 write_header(const Layout*, const Stringpool*, 3324 elfcpp::Shdr_write<size, big_endian>*) const; 3325 3326 // The next few calls are for linker script support. 3327 3328 // In some cases we need to keep a list of the input sections 3329 // associated with this output section. We only need the list if we 3330 // might have to change the offsets of the input section within the 3331 // output section after we add the input section. The ordinary 3332 // input sections will be written out when we process the object 3333 // file, and as such we don't need to track them here. We do need 3334 // to track Output_section_data objects here. We store instances of 3335 // this structure in a std::vector, so it must be a POD. There can 3336 // be many instances of this structure, so we use a union to save 3337 // some space. 3338 class Input_section 3339 { 3340 public: 3341 Input_section() 3342 : shndx_(0), p2align_(0) 3343 { 3344 this->u1_.data_size = 0; 3345 this->u2_.object = NULL; 3346 } 3347 3348 // For an ordinary input section. 3349 Input_section(Relobj* object, unsigned int shndx, off_t data_size, 3350 uint64_t addralign) 3351 : shndx_(shndx), 3352 p2align_(ffsll(static_cast<long long>(addralign))), 3353 section_order_index_(0) 3354 { 3355 gold_assert(shndx != OUTPUT_SECTION_CODE 3356 && shndx != MERGE_DATA_SECTION_CODE 3357 && shndx != MERGE_STRING_SECTION_CODE 3358 && shndx != RELAXED_INPUT_SECTION_CODE); 3359 this->u1_.data_size = data_size; 3360 this->u2_.object = object; 3361 } 3362 3363 // For a non-merge output section. 3364 Input_section(Output_section_data* posd) 3365 : shndx_(OUTPUT_SECTION_CODE), p2align_(0), 3366 section_order_index_(0) 3367 { 3368 this->u1_.data_size = 0; 3369 this->u2_.posd = posd; 3370 } 3371 3372 // For a merge section. 3373 Input_section(Output_section_data* posd, bool is_string, uint64_t entsize) 3374 : shndx_(is_string 3375 ? MERGE_STRING_SECTION_CODE 3376 : MERGE_DATA_SECTION_CODE), 3377 p2align_(0), 3378 section_order_index_(0) 3379 { 3380 this->u1_.entsize = entsize; 3381 this->u2_.posd = posd; 3382 } 3383 3384 // For a relaxed input section. 3385 Input_section(Output_relaxed_input_section* psection) 3386 : shndx_(RELAXED_INPUT_SECTION_CODE), p2align_(0), 3387 section_order_index_(0) 3388 { 3389 this->u1_.data_size = 0; 3390 this->u2_.poris = psection; 3391 } 3392 3393 unsigned int 3394 section_order_index() const 3395 { 3396 return this->section_order_index_; 3397 } 3398 3399 void 3400 set_section_order_index(unsigned int number) 3401 { 3402 this->section_order_index_ = number; 3403 } 3404 3405 // The required alignment. 3406 uint64_t 3407 addralign() const 3408 { 3409 if (this->p2align_ != 0) 3410 return static_cast<uint64_t>(1) << (this->p2align_ - 1); 3411 else if (!this->is_input_section()) 3412 return this->u2_.posd->addralign(); 3413 else 3414 return 0; 3415 } 3416 3417 // Set the required alignment, which must be either 0 or a power of 2. 3418 // For input sections that are sub-classes of Output_section_data, a 3419 // alignment of zero means asking the underlying object for alignment. 3420 void 3421 set_addralign(uint64_t addralign) 3422 { 3423 if (addralign == 0) 3424 this->p2align_ = 0; 3425 else 3426 { 3427 gold_assert((addralign & (addralign - 1)) == 0); 3428 this->p2align_ = ffsll(static_cast<long long>(addralign)); 3429 } 3430 } 3431 3432 // Return the current required size, without finalization. 3433 off_t 3434 current_data_size() const; 3435 3436 // Return the required size. 3437 off_t 3438 data_size() const; 3439 3440 // Whether this is an input section. 3441 bool 3442 is_input_section() const 3443 { 3444 return (this->shndx_ != OUTPUT_SECTION_CODE 3445 && this->shndx_ != MERGE_DATA_SECTION_CODE 3446 && this->shndx_ != MERGE_STRING_SECTION_CODE 3447 && this->shndx_ != RELAXED_INPUT_SECTION_CODE); 3448 } 3449 3450 // Return whether this is a merge section which matches the 3451 // parameters. 3452 bool 3453 is_merge_section(bool is_string, uint64_t entsize, 3454 uint64_t addralign) const 3455 { 3456 return (this->shndx_ == (is_string 3457 ? MERGE_STRING_SECTION_CODE 3458 : MERGE_DATA_SECTION_CODE) 3459 && this->u1_.entsize == entsize 3460 && this->addralign() == addralign); 3461 } 3462 3463 // Return whether this is a merge section for some input section. 3464 bool 3465 is_merge_section() const 3466 { 3467 return (this->shndx_ == MERGE_DATA_SECTION_CODE 3468 || this->shndx_ == MERGE_STRING_SECTION_CODE); 3469 } 3470 3471 // Return whether this is a relaxed input section. 3472 bool 3473 is_relaxed_input_section() const 3474 { return this->shndx_ == RELAXED_INPUT_SECTION_CODE; } 3475 3476 // Return whether this is a generic Output_section_data. 3477 bool 3478 is_output_section_data() const 3479 { 3480 return this->shndx_ == OUTPUT_SECTION_CODE; 3481 } 3482 3483 // Return the object for an input section. 3484 Relobj* 3485 relobj() const; 3486 3487 // Return the input section index for an input section. 3488 unsigned int 3489 shndx() const; 3490 3491 // For non-input-sections, return the associated Output_section_data 3492 // object. 3493 Output_section_data* 3494 output_section_data() const 3495 { 3496 gold_assert(!this->is_input_section()); 3497 return this->u2_.posd; 3498 } 3499 3500 // For a merge section, return the Output_merge_base pointer. 3501 Output_merge_base* 3502 output_merge_base() const 3503 { 3504 gold_assert(this->is_merge_section()); 3505 return this->u2_.pomb; 3506 } 3507 3508 // Return the Output_relaxed_input_section object. 3509 Output_relaxed_input_section* 3510 relaxed_input_section() const 3511 { 3512 gold_assert(this->is_relaxed_input_section()); 3513 return this->u2_.poris; 3514 } 3515 3516 // Set the output section. 3517 void 3518 set_output_section(Output_section* os) 3519 { 3520 gold_assert(!this->is_input_section()); 3521 Output_section_data* posd = 3522 this->is_relaxed_input_section() ? this->u2_.poris : this->u2_.posd; 3523 posd->set_output_section(os); 3524 } 3525 3526 // Set the address and file offset. This is called during 3527 // Layout::finalize. SECTION_FILE_OFFSET is the file offset of 3528 // the enclosing section. 3529 void 3530 set_address_and_file_offset(uint64_t address, off_t file_offset, 3531 off_t section_file_offset); 3532 3533 // Reset the address and file offset. 3534 void 3535 reset_address_and_file_offset(); 3536 3537 // Finalize the data size. 3538 void 3539 finalize_data_size(); 3540 3541 // Add an input section, for SHF_MERGE sections. 3542 bool 3543 add_input_section(Relobj* object, unsigned int shndx) 3544 { 3545 gold_assert(this->shndx_ == MERGE_DATA_SECTION_CODE 3546 || this->shndx_ == MERGE_STRING_SECTION_CODE); 3547 return this->u2_.posd->add_input_section(object, shndx); 3548 } 3549 3550 // Given an input OBJECT, an input section index SHNDX within that 3551 // object, and an OFFSET relative to the start of that input 3552 // section, return whether or not the output offset is known. If 3553 // this function returns true, it sets *POUTPUT to the offset in 3554 // the output section, relative to the start of the input section 3555 // in the output section. *POUTPUT may be different from OFFSET 3556 // for a merged section. 3557 bool 3558 output_offset(const Relobj* object, unsigned int shndx, 3559 section_offset_type offset, 3560 section_offset_type* poutput) const; 3561 3562 // Return whether this is the merge section for the input section 3563 // SHNDX in OBJECT. 3564 bool 3565 is_merge_section_for(const Relobj* object, unsigned int shndx) const; 3566 3567 // Write out the data. This does nothing for an input section. 3568 void 3569 write(Output_file*); 3570 3571 // Write the data to a buffer. This does nothing for an input 3572 // section. 3573 void 3574 write_to_buffer(unsigned char*); 3575 3576 // Print to a map file. 3577 void 3578 print_to_mapfile(Mapfile*) const; 3579 3580 // Print statistics about merge sections to stderr. 3581 void 3582 print_merge_stats(const char* section_name) 3583 { 3584 if (this->shndx_ == MERGE_DATA_SECTION_CODE 3585 || this->shndx_ == MERGE_STRING_SECTION_CODE) 3586 this->u2_.posd->print_merge_stats(section_name); 3587 } 3588 3589 private: 3590 // Code values which appear in shndx_. If the value is not one of 3591 // these codes, it is the input section index in the object file. 3592 enum 3593 { 3594 // An Output_section_data. 3595 OUTPUT_SECTION_CODE = -1U, 3596 // An Output_section_data for an SHF_MERGE section with 3597 // SHF_STRINGS not set. 3598 MERGE_DATA_SECTION_CODE = -2U, 3599 // An Output_section_data for an SHF_MERGE section with 3600 // SHF_STRINGS set. 3601 MERGE_STRING_SECTION_CODE = -3U, 3602 // An Output_section_data for a relaxed input section. 3603 RELAXED_INPUT_SECTION_CODE = -4U 3604 }; 3605 3606 // For an ordinary input section, this is the section index in the 3607 // input file. For an Output_section_data, this is 3608 // OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or 3609 // MERGE_STRING_SECTION_CODE. 3610 unsigned int shndx_; 3611 // The required alignment, stored as a power of 2. 3612 unsigned int p2align_; 3613 union 3614 { 3615 // For an ordinary input section, the section size. 3616 off_t data_size; 3617 // For OUTPUT_SECTION_CODE or RELAXED_INPUT_SECTION_CODE, this is not 3618 // used. For MERGE_DATA_SECTION_CODE or MERGE_STRING_SECTION_CODE, the 3619 // entity size. 3620 uint64_t entsize; 3621 } u1_; 3622 union 3623 { 3624 // For an ordinary input section, the object which holds the 3625 // input section. 3626 Relobj* object; 3627 // For OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or 3628 // MERGE_STRING_SECTION_CODE, the data. 3629 Output_section_data* posd; 3630 Output_merge_base* pomb; 3631 // For RELAXED_INPUT_SECTION_CODE, the data. 3632 Output_relaxed_input_section* poris; 3633 } u2_; 3634 // The line number of the pattern it matches in the --section-ordering-file 3635 // file. It is 0 if does not match any pattern. 3636 unsigned int section_order_index_; 3637 }; 3638 3639 // Store the list of input sections for this Output_section into the 3640 // list passed in. This removes the input sections, leaving only 3641 // any Output_section_data elements. This returns the size of those 3642 // Output_section_data elements. ADDRESS is the address of this 3643 // output section. FILL is the fill value to use, in case there are 3644 // any spaces between the remaining Output_section_data elements. 3645 uint64_t 3646 get_input_sections(uint64_t address, const std::string& fill, 3647 std::list<Input_section>*); 3648 3649 // Add a script input section. A script input section can either be 3650 // a plain input section or a sub-class of Output_section_data. 3651 void 3652 add_script_input_section(const Input_section& input_section); 3653 3654 // Set the current size of the output section. 3655 void 3656 set_current_data_size(off_t size) 3657 { this->set_current_data_size_for_child(size); } 3658 3659 // End of linker script support. 3660 3661 // Save states before doing section layout. 3662 // This is used for relaxation. 3663 void 3664 save_states(); 3665 3666 // Restore states prior to section layout. 3667 void 3668 restore_states(); 3669 3670 // Discard states. 3671 void 3672 discard_states(); 3673 3674 // Convert existing input sections to relaxed input sections. 3675 void 3676 convert_input_sections_to_relaxed_sections( 3677 const std::vector<Output_relaxed_input_section*>& sections); 3678 3679 // Find a relaxed input section to an input section in OBJECT 3680 // with index SHNDX. Return NULL if none is found. 3681 const Output_relaxed_input_section* 3682 find_relaxed_input_section(const Relobj* object, unsigned int shndx) const; 3683 3684 // Whether section offsets need adjustment due to relaxation. 3685 bool 3686 section_offsets_need_adjustment() const 3687 { return this->section_offsets_need_adjustment_; } 3688 3689 // Set section_offsets_need_adjustment to be true. 3690 void 3691 set_section_offsets_need_adjustment() 3692 { this->section_offsets_need_adjustment_ = true; } 3693 3694 // Adjust section offsets of input sections in this. This is 3695 // requires if relaxation caused some input sections to change sizes. 3696 void 3697 adjust_section_offsets(); 3698 3699 // Whether this is a NOLOAD section. 3700 bool 3701 is_noload() const 3702 { return this->is_noload_; } 3703 3704 // Set NOLOAD flag. 3705 void 3706 set_is_noload() 3707 { this->is_noload_ = true; } 3708 3709 // Print merge statistics to stderr. 3710 void 3711 print_merge_stats(); 3712 3713 // Set a fixed layout for the section. Used for incremental update links. 3714 void 3715 set_fixed_layout(uint64_t sh_addr, off_t sh_offset, off_t sh_size, 3716 uint64_t sh_addralign); 3717 3718 // Return TRUE if the section has a fixed layout. 3719 bool 3720 has_fixed_layout() const 3721 { return this->has_fixed_layout_; } 3722 3723 // Set flag to allow patch space for this section. Used for full 3724 // incremental links. 3725 void 3726 set_is_patch_space_allowed() 3727 { this->is_patch_space_allowed_ = true; } 3728 3729 // Set a fill method to use for free space left in the output section 3730 // during incremental links. 3731 void 3732 set_free_space_fill(Output_fill* free_space_fill) 3733 { 3734 this->free_space_fill_ = free_space_fill; 3735 this->free_list_.set_min_hole_size(free_space_fill->minimum_hole_size()); 3736 } 3737 3738 // Reserve space within the fixed layout for the section. Used for 3739 // incremental update links. 3740 void 3741 reserve(uint64_t sh_offset, uint64_t sh_size); 3742 3743 // Allocate space from the free list for the section. Used for 3744 // incremental update links. 3745 off_t 3746 allocate(off_t len, uint64_t addralign); 3747 3748 protected: 3749 // Return the output section--i.e., the object itself. 3750 Output_section* 3751 do_output_section() 3752 { return this; } 3753 3754 const Output_section* 3755 do_output_section() const 3756 { return this; } 3757 3758 // Return the section index in the output file. 3759 unsigned int 3760 do_out_shndx() const 3761 { 3762 gold_assert(this->out_shndx_ != -1U); 3763 return this->out_shndx_; 3764 } 3765 3766 // Set the output section index. 3767 void 3768 do_set_out_shndx(unsigned int shndx) 3769 { 3770 gold_assert(this->out_shndx_ == -1U || this->out_shndx_ == shndx); 3771 this->out_shndx_ = shndx; 3772 } 3773 3774 // Update the data size of the Output_section. For a typical 3775 // Output_section, there is nothing to do, but if there are any 3776 // Output_section_data objects we need to do a trial layout 3777 // here. 3778 virtual void 3779 update_data_size(); 3780 3781 // Set the final data size of the Output_section. For a typical 3782 // Output_section, there is nothing to do, but if there are any 3783 // Output_section_data objects we need to set their final addresses 3784 // here. 3785 virtual void 3786 set_final_data_size(); 3787 3788 // Reset the address and file offset. 3789 void 3790 do_reset_address_and_file_offset(); 3791 3792 // Return true if address and file offset already have reset values. In 3793 // other words, calling reset_address_and_file_offset will not change them. 3794 bool 3795 do_address_and_file_offset_have_reset_values() const; 3796 3797 // Write the data to the file. For a typical Output_section, this 3798 // does nothing: the data is written out by calling Object::Relocate 3799 // on each input object. But if there are any Output_section_data 3800 // objects we do need to write them out here. 3801 virtual void 3802 do_write(Output_file*); 3803 3804 // Return the address alignment--function required by parent class. 3805 uint64_t 3806 do_addralign() const 3807 { return this->addralign_; } 3808 3809 // Return whether there is a load address. 3810 bool 3811 do_has_load_address() const 3812 { return this->has_load_address_; } 3813 3814 // Return the load address. 3815 uint64_t 3816 do_load_address() const 3817 { 3818 gold_assert(this->has_load_address_); 3819 return this->load_address_; 3820 } 3821 3822 // Return whether this is an Output_section. 3823 bool 3824 do_is_section() const 3825 { return true; } 3826 3827 // Return whether this is a section of the specified type. 3828 bool 3829 do_is_section_type(elfcpp::Elf_Word type) const 3830 { return this->type_ == type; } 3831 3832 // Return whether the specified section flag is set. 3833 bool 3834 do_is_section_flag_set(elfcpp::Elf_Xword flag) const 3835 { return (this->flags_ & flag) != 0; } 3836 3837 // Set the TLS offset. Called only for SHT_TLS sections. 3838 void 3839 do_set_tls_offset(uint64_t tls_base); 3840 3841 // Return the TLS offset, relative to the base of the TLS segment. 3842 // Valid only for SHT_TLS sections. 3843 uint64_t 3844 do_tls_offset() const 3845 { return this->tls_offset_; } 3846 3847 // This may be implemented by a child class. 3848 virtual void 3849 do_finalize_name(Layout*) 3850 { } 3851 3852 // Print to the map file. 3853 virtual void 3854 do_print_to_mapfile(Mapfile*) const; 3855 3856 // Record that this section requires postprocessing after all 3857 // relocations have been applied. This is called by a child class. 3858 void 3859 set_requires_postprocessing() 3860 { 3861 this->requires_postprocessing_ = true; 3862 this->after_input_sections_ = true; 3863 } 3864 3865 // Write all the data of an Output_section into the postprocessing 3866 // buffer. 3867 void 3868 write_to_postprocessing_buffer(); 3869 3870 typedef std::vector<Input_section> Input_section_list; 3871 3872 // Allow a child class to access the input sections. 3873 const Input_section_list& 3874 input_sections() const 3875 { return this->input_sections_; } 3876 3877 // Whether this always keeps an input section list 3878 bool 3879 always_keeps_input_sections() const 3880 { return this->always_keeps_input_sections_; } 3881 3882 // Always keep an input section list. 3883 void 3884 set_always_keeps_input_sections() 3885 { 3886 gold_assert(this->current_data_size_for_child() == 0); 3887 this->always_keeps_input_sections_ = true; 3888 } 3889 3890 private: 3891 // We only save enough information to undo the effects of section layout. 3892 class Checkpoint_output_section 3893 { 3894 public: 3895 Checkpoint_output_section(uint64_t addralign, elfcpp::Elf_Xword flags, 3896 const Input_section_list& input_sections, 3897 off_t first_input_offset, 3898 bool attached_input_sections_are_sorted) 3899 : addralign_(addralign), flags_(flags), 3900 input_sections_(input_sections), 3901 input_sections_size_(input_sections_.size()), 3902 input_sections_copy_(), first_input_offset_(first_input_offset), 3903 attached_input_sections_are_sorted_(attached_input_sections_are_sorted) 3904 { } 3905 3906 virtual 3907 ~Checkpoint_output_section() 3908 { } 3909 3910 // Return the address alignment. 3911 uint64_t 3912 addralign() const 3913 { return this->addralign_; } 3914 3915 // Return the section flags. 3916 elfcpp::Elf_Xword 3917 flags() const 3918 { return this->flags_; } 3919 3920 // Return a reference to the input section list copy. 3921 Input_section_list* 3922 input_sections() 3923 { return &this->input_sections_copy_; } 3924 3925 // Return the size of input_sections at the time when checkpoint is 3926 // taken. 3927 size_t 3928 input_sections_size() const 3929 { return this->input_sections_size_; } 3930 3931 // Whether input sections are copied. 3932 bool 3933 input_sections_saved() const 3934 { return this->input_sections_copy_.size() == this->input_sections_size_; } 3935 3936 off_t 3937 first_input_offset() const 3938 { return this->first_input_offset_; } 3939 3940 bool 3941 attached_input_sections_are_sorted() const 3942 { return this->attached_input_sections_are_sorted_; } 3943 3944 // Save input sections. 3945 void 3946 save_input_sections() 3947 { 3948 this->input_sections_copy_.reserve(this->input_sections_size_); 3949 this->input_sections_copy_.clear(); 3950 Input_section_list::const_iterator p = this->input_sections_.begin(); 3951 gold_assert(this->input_sections_size_ >= this->input_sections_.size()); 3952 for(size_t i = 0; i < this->input_sections_size_ ; i++, ++p) 3953 this->input_sections_copy_.push_back(*p); 3954 } 3955 3956 private: 3957 // The section alignment. 3958 uint64_t addralign_; 3959 // The section flags. 3960 elfcpp::Elf_Xword flags_; 3961 // Reference to the input sections to be checkpointed. 3962 const Input_section_list& input_sections_; 3963 // Size of the checkpointed portion of input_sections_; 3964 size_t input_sections_size_; 3965 // Copy of input sections. 3966 Input_section_list input_sections_copy_; 3967 // The offset of the first entry in input_sections_. 3968 off_t first_input_offset_; 3969 // True if the input sections attached to this output section have 3970 // already been sorted. 3971 bool attached_input_sections_are_sorted_; 3972 }; 3973 3974 // This class is used to sort the input sections. 3975 class Input_section_sort_entry; 3976 3977 // This is the sort comparison function for ctors and dtors. 3978 struct Input_section_sort_compare 3979 { 3980 bool 3981 operator()(const Input_section_sort_entry&, 3982 const Input_section_sort_entry&) const; 3983 }; 3984 3985 // This is the sort comparison function for .init_array and .fini_array. 3986 struct Input_section_sort_init_fini_compare 3987 { 3988 bool 3989 operator()(const Input_section_sort_entry&, 3990 const Input_section_sort_entry&) const; 3991 }; 3992 3993 // This is the sort comparison function when a section order is specified 3994 // from an input file. 3995 struct Input_section_sort_section_order_index_compare 3996 { 3997 bool 3998 operator()(const Input_section_sort_entry&, 3999 const Input_section_sort_entry&) const; 4000 }; 4001 4002 // Fill data. This is used to fill in data between input sections. 4003 // It is also used for data statements (BYTE, WORD, etc.) in linker 4004 // scripts. When we have to keep track of the input sections, we 4005 // can use an Output_data_const, but we don't want to have to keep 4006 // track of input sections just to implement fills. 4007 class Fill 4008 { 4009 public: 4010 Fill(off_t section_offset, off_t length) 4011 : section_offset_(section_offset), 4012 length_(convert_to_section_size_type(length)) 4013 { } 4014 4015 // Return section offset. 4016 off_t 4017 section_offset() const 4018 { return this->section_offset_; } 4019 4020 // Return fill length. 4021 section_size_type 4022 length() const 4023 { return this->length_; } 4024 4025 private: 4026 // The offset within the output section. 4027 off_t section_offset_; 4028 // The length of the space to fill. 4029 section_size_type length_; 4030 }; 4031 4032 typedef std::vector<Fill> Fill_list; 4033 4034 // Map used during relaxation of existing sections. This map 4035 // a section id an input section list index. We assume that 4036 // Input_section_list is a vector. 4037 typedef Unordered_map<Section_id, size_t, Section_id_hash> Relaxation_map; 4038 4039 // Add a new output section by Input_section. 4040 void 4041 add_output_section_data(Input_section*); 4042 4043 // Add an SHF_MERGE input section. Returns true if the section was 4044 // handled. If KEEPS_INPUT_SECTIONS is true, the output merge section 4045 // stores information about the merged input sections. 4046 bool 4047 add_merge_input_section(Relobj* object, unsigned int shndx, uint64_t flags, 4048 uint64_t entsize, uint64_t addralign, 4049 bool keeps_input_sections); 4050 4051 // Add an output SHF_MERGE section POSD to this output section. 4052 // IS_STRING indicates whether it is a SHF_STRINGS section, and 4053 // ENTSIZE is the entity size. This returns the entry added to 4054 // input_sections_. 4055 void 4056 add_output_merge_section(Output_section_data* posd, bool is_string, 4057 uint64_t entsize); 4058 4059 // Sort the attached input sections. 4060 void 4061 sort_attached_input_sections(); 4062 4063 // Find the merge section into which an input section with index SHNDX in 4064 // OBJECT has been added. Return NULL if none found. 4065 Output_section_data* 4066 find_merge_section(const Relobj* object, unsigned int shndx) const; 4067 4068 // Build a relaxation map. 4069 void 4070 build_relaxation_map( 4071 const Input_section_list& input_sections, 4072 size_t limit, 4073 Relaxation_map* map) const; 4074 4075 // Convert input sections in an input section list into relaxed sections. 4076 void 4077 convert_input_sections_in_list_to_relaxed_sections( 4078 const std::vector<Output_relaxed_input_section*>& relaxed_sections, 4079 const Relaxation_map& map, 4080 Input_section_list* input_sections); 4081 4082 // Build the lookup maps for merge and relaxed input sections. 4083 void 4084 build_lookup_maps() const; 4085 4086 // Most of these fields are only valid after layout. 4087 4088 // The name of the section. This will point into a Stringpool. 4089 const char* name_; 4090 // The section address is in the parent class. 4091 // The section alignment. 4092 uint64_t addralign_; 4093 // The section entry size. 4094 uint64_t entsize_; 4095 // The load address. This is only used when using a linker script 4096 // with a SECTIONS clause. The has_load_address_ field indicates 4097 // whether this field is valid. 4098 uint64_t load_address_; 4099 // The file offset is in the parent class. 4100 // Set the section link field to the index of this section. 4101 const Output_data* link_section_; 4102 // If link_section_ is NULL, this is the link field. 4103 unsigned int link_; 4104 // Set the section info field to the index of this section. 4105 const Output_section* info_section_; 4106 // If info_section_ is NULL, set the info field to the symbol table 4107 // index of this symbol. 4108 const Symbol* info_symndx_; 4109 // If info_section_ and info_symndx_ are NULL, this is the section 4110 // info field. 4111 unsigned int info_; 4112 // The section type. 4113 const elfcpp::Elf_Word type_; 4114 // The section flags. 4115 elfcpp::Elf_Xword flags_; 4116 // The order of this section in the output segment. 4117 Output_section_order order_; 4118 // The section index. 4119 unsigned int out_shndx_; 4120 // If there is a STT_SECTION for this output section in the normal 4121 // symbol table, this is the symbol index. This starts out as zero. 4122 // It is initialized in Layout::finalize() to be the index, or -1U 4123 // if there isn't one. 4124 unsigned int symtab_index_; 4125 // If there is a STT_SECTION for this output section in the dynamic 4126 // symbol table, this is the symbol index. This starts out as zero. 4127 // It is initialized in Layout::finalize() to be the index, or -1U 4128 // if there isn't one. 4129 unsigned int dynsym_index_; 4130 // The input sections. This will be empty in cases where we don't 4131 // need to keep track of them. 4132 Input_section_list input_sections_; 4133 // The offset of the first entry in input_sections_. 4134 off_t first_input_offset_; 4135 // The fill data. This is separate from input_sections_ because we 4136 // often will need fill sections without needing to keep track of 4137 // input sections. 4138 Fill_list fills_; 4139 // If the section requires postprocessing, this buffer holds the 4140 // section contents during relocation. 4141 unsigned char* postprocessing_buffer_; 4142 // Whether this output section needs a STT_SECTION symbol in the 4143 // normal symbol table. This will be true if there is a relocation 4144 // which needs it. 4145 bool needs_symtab_index_ : 1; 4146 // Whether this output section needs a STT_SECTION symbol in the 4147 // dynamic symbol table. This will be true if there is a dynamic 4148 // relocation which needs it. 4149 bool needs_dynsym_index_ : 1; 4150 // Whether the link field of this output section should point to the 4151 // normal symbol table. 4152 bool should_link_to_symtab_ : 1; 4153 // Whether the link field of this output section should point to the 4154 // dynamic symbol table. 4155 bool should_link_to_dynsym_ : 1; 4156 // Whether this section should be written after all the input 4157 // sections are complete. 4158 bool after_input_sections_ : 1; 4159 // Whether this section requires post processing after all 4160 // relocations have been applied. 4161 bool requires_postprocessing_ : 1; 4162 // Whether an input section was mapped to this output section 4163 // because of a SECTIONS clause in a linker script. 4164 bool found_in_sections_clause_ : 1; 4165 // Whether this section has an explicitly specified load address. 4166 bool has_load_address_ : 1; 4167 // True if the info_section_ field means the section index of the 4168 // section, false if it means the symbol index of the corresponding 4169 // section symbol. 4170 bool info_uses_section_index_ : 1; 4171 // True if input sections attached to this output section have to be 4172 // sorted according to a specified order. 4173 bool input_section_order_specified_ : 1; 4174 // True if the input sections attached to this output section may 4175 // need sorting. 4176 bool may_sort_attached_input_sections_ : 1; 4177 // True if the input sections attached to this output section must 4178 // be sorted. 4179 bool must_sort_attached_input_sections_ : 1; 4180 // True if the input sections attached to this output section have 4181 // already been sorted. 4182 bool attached_input_sections_are_sorted_ : 1; 4183 // True if this section holds relro data. 4184 bool is_relro_ : 1; 4185 // True if this is a small section. 4186 bool is_small_section_ : 1; 4187 // True if this is a large section. 4188 bool is_large_section_ : 1; 4189 // Whether code-fills are generated at write. 4190 bool generate_code_fills_at_write_ : 1; 4191 // Whether the entry size field should be zero. 4192 bool is_entsize_zero_ : 1; 4193 // Whether section offsets need adjustment due to relaxation. 4194 bool section_offsets_need_adjustment_ : 1; 4195 // Whether this is a NOLOAD section. 4196 bool is_noload_ : 1; 4197 // Whether this always keeps input section. 4198 bool always_keeps_input_sections_ : 1; 4199 // Whether this section has a fixed layout, for incremental update links. 4200 bool has_fixed_layout_ : 1; 4201 // True if we can add patch space to this section. 4202 bool is_patch_space_allowed_ : 1; 4203 // For SHT_TLS sections, the offset of this section relative to the base 4204 // of the TLS segment. 4205 uint64_t tls_offset_; 4206 // Saved checkpoint. 4207 Checkpoint_output_section* checkpoint_; 4208 // Fast lookup maps for merged and relaxed input sections. 4209 Output_section_lookup_maps* lookup_maps_; 4210 // List of available regions within the section, for incremental 4211 // update links. 4212 Free_list free_list_; 4213 // Method for filling chunks of free space. 4214 Output_fill* free_space_fill_; 4215 // Amount added as patch space for incremental linking. 4216 off_t patch_space_; 4217 }; 4218 4219 // An output segment. PT_LOAD segments are built from collections of 4220 // output sections. Other segments typically point within PT_LOAD 4221 // segments, and are built directly as needed. 4222 // 4223 // NOTE: We want to use the copy constructor for this class. During 4224 // relaxation, we may try built the segments multiple times. We do 4225 // that by copying the original segment list before lay-out, doing 4226 // a trial lay-out and roll-back to the saved copied if we need to 4227 // to the lay-out again. 4228 4229 class Output_segment 4230 { 4231 public: 4232 // Create an output segment, specifying the type and flags. 4233 Output_segment(elfcpp::Elf_Word, elfcpp::Elf_Word); 4234 4235 // Return the virtual address. 4236 uint64_t 4237 vaddr() const 4238 { return this->vaddr_; } 4239 4240 // Return the physical address. 4241 uint64_t 4242 paddr() const 4243 { return this->paddr_; } 4244 4245 // Return the segment type. 4246 elfcpp::Elf_Word 4247 type() const 4248 { return this->type_; } 4249 4250 // Return the segment flags. 4251 elfcpp::Elf_Word 4252 flags() const 4253 { return this->flags_; } 4254 4255 // Return the memory size. 4256 uint64_t 4257 memsz() const 4258 { return this->memsz_; } 4259 4260 // Return the file size. 4261 off_t 4262 filesz() const 4263 { return this->filesz_; } 4264 4265 // Return the file offset. 4266 off_t 4267 offset() const 4268 { return this->offset_; } 4269 4270 // Whether this is a segment created to hold large data sections. 4271 bool 4272 is_large_data_segment() const 4273 { return this->is_large_data_segment_; } 4274 4275 // Record that this is a segment created to hold large data 4276 // sections. 4277 void 4278 set_is_large_data_segment() 4279 { this->is_large_data_segment_ = true; } 4280 4281 // Return the maximum alignment of the Output_data. 4282 uint64_t 4283 maximum_alignment(); 4284 4285 // Add the Output_section OS to this PT_LOAD segment. SEG_FLAGS is 4286 // the segment flags to use. 4287 void 4288 add_output_section_to_load(Layout* layout, Output_section* os, 4289 elfcpp::Elf_Word seg_flags); 4290 4291 // Add the Output_section OS to this non-PT_LOAD segment. SEG_FLAGS 4292 // is the segment flags to use. 4293 void 4294 add_output_section_to_nonload(Output_section* os, 4295 elfcpp::Elf_Word seg_flags); 4296 4297 // Remove an Output_section from this segment. It is an error if it 4298 // is not present. 4299 void 4300 remove_output_section(Output_section* os); 4301 4302 // Add an Output_data (which need not be an Output_section) to the 4303 // start of this segment. 4304 void 4305 add_initial_output_data(Output_data*); 4306 4307 // Return true if this segment has any sections which hold actual 4308 // data, rather than being a BSS section. 4309 bool 4310 has_any_data_sections() const; 4311 4312 // Whether this segment has a dynamic relocs. 4313 bool 4314 has_dynamic_reloc() const; 4315 4316 // Return the address of the first section. 4317 uint64_t 4318 first_section_load_address() const; 4319 4320 // Return whether the addresses have been set already. 4321 bool 4322 are_addresses_set() const 4323 { return this->are_addresses_set_; } 4324 4325 // Set the addresses. 4326 void 4327 set_addresses(uint64_t vaddr, uint64_t paddr) 4328 { 4329 this->vaddr_ = vaddr; 4330 this->paddr_ = paddr; 4331 this->are_addresses_set_ = true; 4332 } 4333 4334 // Update the flags for the flags of an output section added to this 4335 // segment. 4336 void 4337 update_flags_for_output_section(elfcpp::Elf_Xword flags) 4338 { 4339 // The ELF ABI specifies that a PT_TLS segment should always have 4340 // PF_R as the flags. 4341 if (this->type() != elfcpp::PT_TLS) 4342 this->flags_ |= flags; 4343 } 4344 4345 // Set the segment flags. This is only used if we have a PHDRS 4346 // clause which explicitly specifies the flags. 4347 void 4348 set_flags(elfcpp::Elf_Word flags) 4349 { this->flags_ = flags; } 4350 4351 // Set the address of the segment to ADDR and the offset to *POFF 4352 // and set the addresses and offsets of all contained output 4353 // sections accordingly. Set the section indexes of all contained 4354 // output sections starting with *PSHNDX. If RESET is true, first 4355 // reset the addresses of the contained sections. Return the 4356 // address of the immediately following segment. Update *POFF and 4357 // *PSHNDX. This should only be called for a PT_LOAD segment. 4358 uint64_t 4359 set_section_addresses(Layout*, bool reset, uint64_t addr, 4360 unsigned int* increase_relro, bool* has_relro, 4361 off_t* poff, unsigned int* pshndx); 4362 4363 // Set the minimum alignment of this segment. This may be adjusted 4364 // upward based on the section alignments. 4365 void 4366 set_minimum_p_align(uint64_t align) 4367 { 4368 if (align > this->min_p_align_) 4369 this->min_p_align_ = align; 4370 } 4371 4372 // Set the offset of this segment based on the section. This should 4373 // only be called for a non-PT_LOAD segment. 4374 void 4375 set_offset(unsigned int increase); 4376 4377 // Set the TLS offsets of the sections contained in the PT_TLS segment. 4378 void 4379 set_tls_offsets(); 4380 4381 // Return the number of output sections. 4382 unsigned int 4383 output_section_count() const; 4384 4385 // Return the section attached to the list segment with the lowest 4386 // load address. This is used when handling a PHDRS clause in a 4387 // linker script. 4388 Output_section* 4389 section_with_lowest_load_address() const; 4390 4391 // Write the segment header into *OPHDR. 4392 template<int size, bool big_endian> 4393 void 4394 write_header(elfcpp::Phdr_write<size, big_endian>*); 4395 4396 // Write the section headers of associated sections into V. 4397 template<int size, bool big_endian> 4398 unsigned char* 4399 write_section_headers(const Layout*, const Stringpool*, unsigned char* v, 4400 unsigned int* pshndx) const; 4401 4402 // Print the output sections in the map file. 4403 void 4404 print_sections_to_mapfile(Mapfile*) const; 4405 4406 private: 4407 typedef std::vector<Output_data*> Output_data_list; 4408 4409 // Find the maximum alignment in an Output_data_list. 4410 static uint64_t 4411 maximum_alignment_list(const Output_data_list*); 4412 4413 // Return whether the first data section is a relro section. 4414 bool 4415 is_first_section_relro() const; 4416 4417 // Set the section addresses in an Output_data_list. 4418 uint64_t 4419 set_section_list_addresses(Layout*, bool reset, Output_data_list*, 4420 uint64_t addr, off_t* poff, unsigned int* pshndx, 4421 bool* in_tls); 4422 4423 // Return the number of Output_sections in an Output_data_list. 4424 unsigned int 4425 output_section_count_list(const Output_data_list*) const; 4426 4427 // Return whether an Output_data_list has a dynamic reloc. 4428 bool 4429 has_dynamic_reloc_list(const Output_data_list*) const; 4430 4431 // Find the section with the lowest load address in an 4432 // Output_data_list. 4433 void 4434 lowest_load_address_in_list(const Output_data_list* pdl, 4435 Output_section** found, 4436 uint64_t* found_lma) const; 4437 4438 // Find the first and last entries by address. 4439 void 4440 find_first_and_last_list(const Output_data_list* pdl, 4441 const Output_data** pfirst, 4442 const Output_data** plast) const; 4443 4444 // Write the section headers in the list into V. 4445 template<int size, bool big_endian> 4446 unsigned char* 4447 write_section_headers_list(const Layout*, const Stringpool*, 4448 const Output_data_list*, unsigned char* v, 4449 unsigned int* pshdx) const; 4450 4451 // Print a section list to the mapfile. 4452 void 4453 print_section_list_to_mapfile(Mapfile*, const Output_data_list*) const; 4454 4455 // NOTE: We want to use the copy constructor. Currently, shallow copy 4456 // works for us so we do not need to write our own copy constructor. 4457 4458 // The list of output data attached to this segment. 4459 Output_data_list output_lists_[ORDER_MAX]; 4460 // The segment virtual address. 4461 uint64_t vaddr_; 4462 // The segment physical address. 4463 uint64_t paddr_; 4464 // The size of the segment in memory. 4465 uint64_t memsz_; 4466 // The maximum section alignment. The is_max_align_known_ field 4467 // indicates whether this has been finalized. 4468 uint64_t max_align_; 4469 // The required minimum value for the p_align field. This is used 4470 // for PT_LOAD segments. Note that this does not mean that 4471 // addresses should be aligned to this value; it means the p_paddr 4472 // and p_vaddr fields must be congruent modulo this value. For 4473 // non-PT_LOAD segments, the dynamic linker works more efficiently 4474 // if the p_align field has the more conventional value, although it 4475 // can align as needed. 4476 uint64_t min_p_align_; 4477 // The offset of the segment data within the file. 4478 off_t offset_; 4479 // The size of the segment data in the file. 4480 off_t filesz_; 4481 // The segment type; 4482 elfcpp::Elf_Word type_; 4483 // The segment flags. 4484 elfcpp::Elf_Word flags_; 4485 // Whether we have finalized max_align_. 4486 bool is_max_align_known_ : 1; 4487 // Whether vaddr and paddr were set by a linker script. 4488 bool are_addresses_set_ : 1; 4489 // Whether this segment holds large data sections. 4490 bool is_large_data_segment_ : 1; 4491 }; 4492 4493 // This class represents the output file. 4494 4495 class Output_file 4496 { 4497 public: 4498 Output_file(const char* name); 4499 4500 // Indicate that this is a temporary file which should not be 4501 // output. 4502 void 4503 set_is_temporary() 4504 { this->is_temporary_ = true; } 4505 4506 // Try to open an existing file. Returns false if the file doesn't 4507 // exist, has a size of 0 or can't be mmaped. This method is 4508 // thread-unsafe. If BASE_NAME is not NULL, use the contents of 4509 // that file as the base for incremental linking. 4510 bool 4511 open_base_file(const char* base_name, bool writable); 4512 4513 // Open the output file. FILE_SIZE is the final size of the file. 4514 // If the file already exists, it is deleted/truncated. This method 4515 // is thread-unsafe. 4516 void 4517 open(off_t file_size); 4518 4519 // Resize the output file. This method is thread-unsafe. 4520 void 4521 resize(off_t file_size); 4522 4523 // Close the output file (flushing all buffered data) and make sure 4524 // there are no errors. This method is thread-unsafe. 4525 void 4526 close(); 4527 4528 // Return the size of this file. 4529 off_t 4530 filesize() 4531 { return this->file_size_; } 4532 4533 // Return the name of this file. 4534 const char* 4535 filename() 4536 { return this->name_; } 4537 4538 // We currently always use mmap which makes the view handling quite 4539 // simple. In the future we may support other approaches. 4540 4541 // Write data to the output file. 4542 void 4543 write(off_t offset, const void* data, size_t len) 4544 { memcpy(this->base_ + offset, data, len); } 4545 4546 // Get a buffer to use to write to the file, given the offset into 4547 // the file and the size. 4548 unsigned char* 4549 get_output_view(off_t start, size_t size) 4550 { 4551 gold_assert(start >= 0 4552 && start + static_cast<off_t>(size) <= this->file_size_); 4553 return this->base_ + start; 4554 } 4555 4556 // VIEW must have been returned by get_output_view. Write the 4557 // buffer to the file, passing in the offset and the size. 4558 void 4559 write_output_view(off_t, size_t, unsigned char*) 4560 { } 4561 4562 // Get a read/write buffer. This is used when we want to write part 4563 // of the file, read it in, and write it again. 4564 unsigned char* 4565 get_input_output_view(off_t start, size_t size) 4566 { return this->get_output_view(start, size); } 4567 4568 // Write a read/write buffer back to the file. 4569 void 4570 write_input_output_view(off_t, size_t, unsigned char*) 4571 { } 4572 4573 // Get a read buffer. This is used when we just want to read part 4574 // of the file back it in. 4575 const unsigned char* 4576 get_input_view(off_t start, size_t size) 4577 { return this->get_output_view(start, size); } 4578 4579 // Release a read bfufer. 4580 void 4581 free_input_view(off_t, size_t, const unsigned char*) 4582 { } 4583 4584 private: 4585 // Map the file into memory or, if that fails, allocate anonymous 4586 // memory. 4587 void 4588 map(); 4589 4590 // Allocate anonymous memory for the file. 4591 bool 4592 map_anonymous(); 4593 4594 // Map the file into memory. 4595 bool 4596 map_no_anonymous(bool); 4597 4598 // Unmap the file from memory (and flush to disk buffers). 4599 void 4600 unmap(); 4601 4602 // File name. 4603 const char* name_; 4604 // File descriptor. 4605 int o_; 4606 // File size. 4607 off_t file_size_; 4608 // Base of file mapped into memory. 4609 unsigned char* base_; 4610 // True iff base_ points to a memory buffer rather than an output file. 4611 bool map_is_anonymous_; 4612 // True if base_ was allocated using new rather than mmap. 4613 bool map_is_allocated_; 4614 // True if this is a temporary file which should not be output. 4615 bool is_temporary_; 4616 }; 4617 4618 } // End namespace gold. 4619 4620 #endif // !defined(GOLD_OUTPUT_H) 4621