1 // target.h -- target support for gold -*- C++ -*- 2 3 // Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012 4 // Free Software Foundation, Inc. 5 // Written by Ian Lance Taylor <iant@google.com>. 6 7 // This file is part of gold. 8 9 // This program is free software; you can redistribute it and/or modify 10 // it under the terms of the GNU General Public License as published by 11 // the Free Software Foundation; either version 3 of the License, or 12 // (at your option) any later version. 13 14 // This program is distributed in the hope that it will be useful, 15 // but WITHOUT ANY WARRANTY; without even the implied warranty of 16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 // GNU General Public License for more details. 18 19 // You should have received a copy of the GNU General Public License 20 // along with this program; if not, write to the Free Software 21 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 22 // MA 02110-1301, USA. 23 24 // The abstract class Target is the interface for target specific 25 // support. It defines abstract methods which each target must 26 // implement. Typically there will be one target per processor, but 27 // in some cases it may be necessary to have subclasses. 28 29 // For speed and consistency we want to use inline functions to handle 30 // relocation processing. So besides implementations of the abstract 31 // methods, each target is expected to define a template 32 // specialization of the relocation functions. 33 34 #ifndef GOLD_TARGET_H 35 #define GOLD_TARGET_H 36 37 #include "elfcpp.h" 38 #include "options.h" 39 #include "parameters.h" 40 #include "debug.h" 41 42 namespace gold 43 { 44 45 class Object; 46 class Relobj; 47 template<int size, bool big_endian> 48 class Sized_relobj; 49 template<int size, bool big_endian> 50 class Sized_relobj_file; 51 class Relocatable_relocs; 52 template<int size, bool big_endian> 53 struct Relocate_info; 54 class Reloc_symbol_changes; 55 class Symbol; 56 template<int size> 57 class Sized_symbol; 58 class Symbol_table; 59 class Output_data; 60 class Output_data_got_base; 61 class Output_section; 62 class Input_objects; 63 class Task; 64 65 // The abstract class for target specific handling. 66 67 class Target 68 { 69 public: 70 virtual ~Target() 71 { } 72 73 // Return the bit size that this target implements. This should 74 // return 32 or 64. 75 int 76 get_size() const 77 { return this->pti_->size; } 78 79 // Return whether this target is big-endian. 80 bool 81 is_big_endian() const 82 { return this->pti_->is_big_endian; } 83 84 // Machine code to store in e_machine field of ELF header. 85 elfcpp::EM 86 machine_code() const 87 { return this->pti_->machine_code; } 88 89 // Processor specific flags to store in e_flags field of ELF header. 90 elfcpp::Elf_Word 91 processor_specific_flags() const 92 { return this->processor_specific_flags_; } 93 94 // Whether processor specific flags are set at least once. 95 bool 96 are_processor_specific_flags_set() const 97 { return this->are_processor_specific_flags_set_; } 98 99 // Whether this target has a specific make_symbol function. 100 bool 101 has_make_symbol() const 102 { return this->pti_->has_make_symbol; } 103 104 // Whether this target has a specific resolve function. 105 bool 106 has_resolve() const 107 { return this->pti_->has_resolve; } 108 109 // Whether this target has a specific code fill function. 110 bool 111 has_code_fill() const 112 { return this->pti_->has_code_fill; } 113 114 // Return the default name of the dynamic linker. 115 const char* 116 dynamic_linker() const 117 { return this->pti_->dynamic_linker; } 118 119 // Return the default address to use for the text segment. 120 uint64_t 121 default_text_segment_address() const 122 { return this->pti_->default_text_segment_address; } 123 124 // Return the ABI specified page size. 125 uint64_t 126 abi_pagesize() const 127 { 128 if (parameters->options().max_page_size() > 0) 129 return parameters->options().max_page_size(); 130 else 131 return this->pti_->abi_pagesize; 132 } 133 134 // Return the common page size used on actual systems. 135 uint64_t 136 common_pagesize() const 137 { 138 if (parameters->options().common_page_size() > 0) 139 return std::min(parameters->options().common_page_size(), 140 this->abi_pagesize()); 141 else 142 return std::min(this->pti_->common_pagesize, 143 this->abi_pagesize()); 144 } 145 146 // Return whether PF_X segments must contain nothing but the contents of 147 // SHF_EXECINSTR sections (no non-executable data, no headers). 148 bool 149 isolate_execinstr() const 150 { return this->pti_->isolate_execinstr; } 151 152 uint64_t 153 rosegment_gap() const 154 { return this->pti_->rosegment_gap; } 155 156 // If we see some object files with .note.GNU-stack sections, and 157 // some objects files without them, this returns whether we should 158 // consider the object files without them to imply that the stack 159 // should be executable. 160 bool 161 is_default_stack_executable() const 162 { return this->pti_->is_default_stack_executable; } 163 164 // Return a character which may appear as a prefix for a wrap 165 // symbol. If this character appears, we strip it when checking for 166 // wrapping and add it back when forming the final symbol name. 167 // This should be '\0' if not special prefix is required, which is 168 // the normal case. 169 char 170 wrap_char() const 171 { return this->pti_->wrap_char; } 172 173 // Return the special section index which indicates a small common 174 // symbol. This will return SHN_UNDEF if there are no small common 175 // symbols. 176 elfcpp::Elf_Half 177 small_common_shndx() const 178 { return this->pti_->small_common_shndx; } 179 180 // Return values to add to the section flags for the section holding 181 // small common symbols. 182 elfcpp::Elf_Xword 183 small_common_section_flags() const 184 { 185 gold_assert(this->pti_->small_common_shndx != elfcpp::SHN_UNDEF); 186 return this->pti_->small_common_section_flags; 187 } 188 189 // Return the special section index which indicates a large common 190 // symbol. This will return SHN_UNDEF if there are no large common 191 // symbols. 192 elfcpp::Elf_Half 193 large_common_shndx() const 194 { return this->pti_->large_common_shndx; } 195 196 // Return values to add to the section flags for the section holding 197 // large common symbols. 198 elfcpp::Elf_Xword 199 large_common_section_flags() const 200 { 201 gold_assert(this->pti_->large_common_shndx != elfcpp::SHN_UNDEF); 202 return this->pti_->large_common_section_flags; 203 } 204 205 // This hook is called when an output section is created. 206 void 207 new_output_section(Output_section* os) const 208 { this->do_new_output_section(os); } 209 210 // This is called to tell the target to complete any sections it is 211 // handling. After this all sections must have their final size. 212 void 213 finalize_sections(Layout* layout, const Input_objects* input_objects, 214 Symbol_table* symtab) 215 { return this->do_finalize_sections(layout, input_objects, symtab); } 216 217 // Return the value to use for a global symbol which needs a special 218 // value in the dynamic symbol table. This will only be called if 219 // the backend first calls symbol->set_needs_dynsym_value(). 220 uint64_t 221 dynsym_value(const Symbol* sym) const 222 { return this->do_dynsym_value(sym); } 223 224 // Return a string to use to fill out a code section. This is 225 // basically one or more NOPS which must fill out the specified 226 // length in bytes. 227 std::string 228 code_fill(section_size_type length) const 229 { return this->do_code_fill(length); } 230 231 // Return whether SYM is known to be defined by the ABI. This is 232 // used to avoid inappropriate warnings about undefined symbols. 233 bool 234 is_defined_by_abi(const Symbol* sym) const 235 { return this->do_is_defined_by_abi(sym); } 236 237 // Adjust the output file header before it is written out. VIEW 238 // points to the header in external form. LEN is the length. 239 void 240 adjust_elf_header(unsigned char* view, int len) const 241 { return this->do_adjust_elf_header(view, len); } 242 243 // Return whether NAME is a local label name. This is used to implement the 244 // --discard-locals options. 245 bool 246 is_local_label_name(const char* name) const 247 { return this->do_is_local_label_name(name); } 248 249 // Get the symbol index to use for a target specific reloc. 250 unsigned int 251 reloc_symbol_index(void* arg, unsigned int type) const 252 { return this->do_reloc_symbol_index(arg, type); } 253 254 // Get the addend to use for a target specific reloc. 255 uint64_t 256 reloc_addend(void* arg, unsigned int type, uint64_t addend) const 257 { return this->do_reloc_addend(arg, type, addend); } 258 259 // Return the PLT address to use for a global symbol. This is used 260 // for STT_GNU_IFUNC symbols. The symbol's plt_offset is relative 261 // to this PLT address. 262 uint64_t 263 plt_address_for_global(const Symbol* sym) const 264 { return this->do_plt_address_for_global(sym); } 265 266 // Return the PLT address to use for a local symbol. This is used 267 // for STT_GNU_IFUNC symbols. The symbol's plt_offset is relative 268 // to this PLT address. 269 uint64_t 270 plt_address_for_local(const Relobj* object, unsigned int symndx) const 271 { return this->do_plt_address_for_local(object, symndx); } 272 273 // Return whether this target can use relocation types to determine 274 // if a function's address is taken. 275 bool 276 can_check_for_function_pointers() const 277 { return this->do_can_check_for_function_pointers(); } 278 279 // Return whether a relocation to a merged section can be processed 280 // to retrieve the contents. 281 bool 282 can_icf_inline_merge_sections () const 283 { return this->pti_->can_icf_inline_merge_sections; } 284 285 // Whether a section called SECTION_NAME may have function pointers to 286 // sections not eligible for safe ICF folding. 287 virtual bool 288 section_may_have_icf_unsafe_pointers(const char* section_name) const 289 { return this->do_section_may_have_icf_unsafe_pointers(section_name); } 290 291 // Return the base to use for the PC value in an FDE when it is 292 // encoded using DW_EH_PE_datarel. This does not appear to be 293 // documented anywhere, but it is target specific. Any use of 294 // DW_EH_PE_datarel in gcc requires defining a special macro 295 // (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX) to output the value. 296 uint64_t 297 ehframe_datarel_base() const 298 { return this->do_ehframe_datarel_base(); } 299 300 // Return true if a reference to SYM from a reloc of type R_TYPE 301 // means that the current function may call an object compiled 302 // without -fsplit-stack. SYM is known to be defined in an object 303 // compiled without -fsplit-stack. 304 bool 305 is_call_to_non_split(const Symbol* sym, unsigned int r_type) const 306 { return this->do_is_call_to_non_split(sym, r_type); } 307 308 // A function starts at OFFSET in section SHNDX in OBJECT. That 309 // function was compiled with -fsplit-stack, but it refers to a 310 // function which was compiled without -fsplit-stack. VIEW is a 311 // modifiable view of the section; VIEW_SIZE is the size of the 312 // view. The target has to adjust the function so that it allocates 313 // enough stack. 314 void 315 calls_non_split(Relobj* object, unsigned int shndx, 316 section_offset_type fnoffset, section_size_type fnsize, 317 unsigned char* view, section_size_type view_size, 318 std::string* from, std::string* to) const 319 { 320 this->do_calls_non_split(object, shndx, fnoffset, fnsize, view, view_size, 321 from, to); 322 } 323 324 // Make an ELF object. 325 template<int size, bool big_endian> 326 Object* 327 make_elf_object(const std::string& name, Input_file* input_file, 328 off_t offset, const elfcpp::Ehdr<size, big_endian>& ehdr) 329 { return this->do_make_elf_object(name, input_file, offset, ehdr); } 330 331 // Make an output section. 332 Output_section* 333 make_output_section(const char* name, elfcpp::Elf_Word type, 334 elfcpp::Elf_Xword flags) 335 { return this->do_make_output_section(name, type, flags); } 336 337 // Return true if target wants to perform relaxation. 338 bool 339 may_relax() const 340 { 341 // Run the dummy relaxation pass twice if relaxation debugging is enabled. 342 if (is_debugging_enabled(DEBUG_RELAXATION)) 343 return true; 344 345 return this->do_may_relax(); 346 } 347 348 // Perform a relaxation pass. Return true if layout may be changed. 349 bool 350 relax(int pass, const Input_objects* input_objects, Symbol_table* symtab, 351 Layout* layout, const Task* task) 352 { 353 // Run the dummy relaxation pass twice if relaxation debugging is enabled. 354 if (is_debugging_enabled(DEBUG_RELAXATION)) 355 return pass < 2; 356 357 return this->do_relax(pass, input_objects, symtab, layout, task); 358 } 359 360 // Return the target-specific name of attributes section. This is 361 // NULL if a target does not use attributes section or if it uses 362 // the default section name ".gnu.attributes". 363 const char* 364 attributes_section() const 365 { return this->pti_->attributes_section; } 366 367 // Return the vendor name of vendor attributes. 368 const char* 369 attributes_vendor() const 370 { return this->pti_->attributes_vendor; } 371 372 // Whether a section called NAME is an attribute section. 373 bool 374 is_attributes_section(const char* name) const 375 { 376 return ((this->pti_->attributes_section != NULL 377 && strcmp(name, this->pti_->attributes_section) == 0) 378 || strcmp(name, ".gnu.attributes") == 0); 379 } 380 381 // Return a bit mask of argument types for attribute with TAG. 382 int 383 attribute_arg_type(int tag) const 384 { return this->do_attribute_arg_type(tag); } 385 386 // Return the attribute tag of the position NUM in the list of fixed 387 // attributes. Normally there is no reordering and 388 // attributes_order(NUM) == NUM. 389 int 390 attributes_order(int num) const 391 { return this->do_attributes_order(num); } 392 393 // When a target is selected as the default target, we call this method, 394 // which may be used for expensive, target-specific initialization. 395 void 396 select_as_default_target() 397 { this->do_select_as_default_target(); } 398 399 // Return the value to store in the EI_OSABI field in the ELF 400 // header. 401 elfcpp::ELFOSABI 402 osabi() const 403 { return this->osabi_; } 404 405 // Set the value to store in the EI_OSABI field in the ELF header. 406 void 407 set_osabi(elfcpp::ELFOSABI osabi) 408 { this->osabi_ = osabi; } 409 410 // Define target-specific standard symbols. 411 void 412 define_standard_symbols(Symbol_table* symtab, Layout* layout) 413 { this->do_define_standard_symbols(symtab, layout); } 414 415 protected: 416 // This struct holds the constant information for a child class. We 417 // use a struct to avoid the overhead of virtual function calls for 418 // simple information. 419 struct Target_info 420 { 421 // Address size (32 or 64). 422 int size; 423 // Whether the target is big endian. 424 bool is_big_endian; 425 // The code to store in the e_machine field of the ELF header. 426 elfcpp::EM machine_code; 427 // Whether this target has a specific make_symbol function. 428 bool has_make_symbol; 429 // Whether this target has a specific resolve function. 430 bool has_resolve; 431 // Whether this target has a specific code fill function. 432 bool has_code_fill; 433 // Whether an object file with no .note.GNU-stack sections implies 434 // that the stack should be executable. 435 bool is_default_stack_executable; 436 // Whether a relocation to a merged section can be processed to 437 // retrieve the contents. 438 bool can_icf_inline_merge_sections; 439 // Prefix character to strip when checking for wrapping. 440 char wrap_char; 441 // The default dynamic linker name. 442 const char* dynamic_linker; 443 // The default text segment address. 444 uint64_t default_text_segment_address; 445 // The ABI specified page size. 446 uint64_t abi_pagesize; 447 // The common page size used by actual implementations. 448 uint64_t common_pagesize; 449 // Whether PF_X segments must contain nothing but the contents of 450 // SHF_EXECINSTR sections (no non-executable data, no headers). 451 bool isolate_execinstr; 452 // If nonzero, distance from the text segment to the read-only segment. 453 uint64_t rosegment_gap; 454 // The special section index for small common symbols; SHN_UNDEF 455 // if none. 456 elfcpp::Elf_Half small_common_shndx; 457 // The special section index for large common symbols; SHN_UNDEF 458 // if none. 459 elfcpp::Elf_Half large_common_shndx; 460 // Section flags for small common section. 461 elfcpp::Elf_Xword small_common_section_flags; 462 // Section flags for large common section. 463 elfcpp::Elf_Xword large_common_section_flags; 464 // Name of attributes section if it is not ".gnu.attributes". 465 const char* attributes_section; 466 // Vendor name of vendor attributes. 467 const char* attributes_vendor; 468 }; 469 470 Target(const Target_info* pti) 471 : pti_(pti), processor_specific_flags_(0), 472 are_processor_specific_flags_set_(false), osabi_(elfcpp::ELFOSABI_NONE) 473 { } 474 475 // Virtual function which may be implemented by the child class. 476 virtual void 477 do_new_output_section(Output_section*) const 478 { } 479 480 // Virtual function which may be implemented by the child class. 481 virtual void 482 do_finalize_sections(Layout*, const Input_objects*, Symbol_table*) 483 { } 484 485 // Virtual function which may be implemented by the child class. 486 virtual uint64_t 487 do_dynsym_value(const Symbol*) const 488 { gold_unreachable(); } 489 490 // Virtual function which must be implemented by the child class if 491 // needed. 492 virtual std::string 493 do_code_fill(section_size_type) const 494 { gold_unreachable(); } 495 496 // Virtual function which may be implemented by the child class. 497 virtual bool 498 do_is_defined_by_abi(const Symbol*) const 499 { return false; } 500 501 // Adjust the output file header before it is written out. VIEW 502 // points to the header in external form. LEN is the length, and 503 // will be one of the values of elfcpp::Elf_sizes<size>::ehdr_size. 504 // By default, we set the EI_OSABI field if requested (in 505 // Sized_target). 506 virtual void 507 do_adjust_elf_header(unsigned char*, int) const = 0; 508 509 // Virtual function which may be overridden by the child class. 510 virtual bool 511 do_is_local_label_name(const char*) const; 512 513 // Virtual function that must be overridden by a target which uses 514 // target specific relocations. 515 virtual unsigned int 516 do_reloc_symbol_index(void*, unsigned int) const 517 { gold_unreachable(); } 518 519 // Virtual function that must be overridden by a target which uses 520 // target specific relocations. 521 virtual uint64_t 522 do_reloc_addend(void*, unsigned int, uint64_t) const 523 { gold_unreachable(); } 524 525 // Virtual functions that must be overridden by a target that uses 526 // STT_GNU_IFUNC symbols. 527 virtual uint64_t 528 do_plt_address_for_global(const Symbol*) const 529 { gold_unreachable(); } 530 531 virtual uint64_t 532 do_plt_address_for_local(const Relobj*, unsigned int) const 533 { gold_unreachable(); } 534 535 // Virtual function which may be overriden by the child class. 536 virtual bool 537 do_can_check_for_function_pointers() const 538 { return false; } 539 540 // Virtual function which may be overridden by the child class. We 541 // recognize some default sections for which we don't care whether 542 // they have function pointers. 543 virtual bool 544 do_section_may_have_icf_unsafe_pointers(const char* section_name) const 545 { 546 // We recognize sections for normal vtables, construction vtables and 547 // EH frames. 548 return (!is_prefix_of(".rodata._ZTV", section_name) 549 && !is_prefix_of(".data.rel.ro._ZTV", section_name) 550 && !is_prefix_of(".rodata._ZTC", section_name) 551 && !is_prefix_of(".data.rel.ro._ZTC", section_name) 552 && !is_prefix_of(".eh_frame", section_name)); 553 } 554 555 virtual uint64_t 556 do_ehframe_datarel_base() const 557 { gold_unreachable(); } 558 559 // Virtual function which may be overridden by the child class. The 560 // default implementation is that any function not defined by the 561 // ABI is a call to a non-split function. 562 virtual bool 563 do_is_call_to_non_split(const Symbol* sym, unsigned int) const; 564 565 // Virtual function which may be overridden by the child class. 566 virtual void 567 do_calls_non_split(Relobj* object, unsigned int, section_offset_type, 568 section_size_type, unsigned char*, section_size_type, 569 std::string*, std::string*) const; 570 571 // make_elf_object hooks. There are four versions of these for 572 // different address sizes and endianness. 573 574 // Set processor specific flags. 575 void 576 set_processor_specific_flags(elfcpp::Elf_Word flags) 577 { 578 this->processor_specific_flags_ = flags; 579 this->are_processor_specific_flags_set_ = true; 580 } 581 582 #ifdef HAVE_TARGET_32_LITTLE 583 // Virtual functions which may be overridden by the child class. 584 virtual Object* 585 do_make_elf_object(const std::string&, Input_file*, off_t, 586 const elfcpp::Ehdr<32, false>&); 587 #endif 588 589 #ifdef HAVE_TARGET_32_BIG 590 // Virtual functions which may be overridden by the child class. 591 virtual Object* 592 do_make_elf_object(const std::string&, Input_file*, off_t, 593 const elfcpp::Ehdr<32, true>&); 594 #endif 595 596 #ifdef HAVE_TARGET_64_LITTLE 597 // Virtual functions which may be overridden by the child class. 598 virtual Object* 599 do_make_elf_object(const std::string&, Input_file*, off_t, 600 const elfcpp::Ehdr<64, false>& ehdr); 601 #endif 602 603 #ifdef HAVE_TARGET_64_BIG 604 // Virtual functions which may be overridden by the child class. 605 virtual Object* 606 do_make_elf_object(const std::string& name, Input_file* input_file, 607 off_t offset, const elfcpp::Ehdr<64, true>& ehdr); 608 #endif 609 610 // Virtual functions which may be overridden by the child class. 611 virtual Output_section* 612 do_make_output_section(const char* name, elfcpp::Elf_Word type, 613 elfcpp::Elf_Xword flags); 614 615 // Virtual function which may be overridden by the child class. 616 virtual bool 617 do_may_relax() const 618 { return parameters->options().relax(); } 619 620 // Virtual function which may be overridden by the child class. 621 virtual bool 622 do_relax(int, const Input_objects*, Symbol_table*, Layout*, const Task*) 623 { return false; } 624 625 // A function for targets to call. Return whether BYTES/LEN matches 626 // VIEW/VIEW_SIZE at OFFSET. 627 bool 628 match_view(const unsigned char* view, section_size_type view_size, 629 section_offset_type offset, const char* bytes, size_t len) const; 630 631 // Set the contents of a VIEW/VIEW_SIZE to nops starting at OFFSET 632 // for LEN bytes. 633 void 634 set_view_to_nop(unsigned char* view, section_size_type view_size, 635 section_offset_type offset, size_t len) const; 636 637 // This must be overridden by the child class if it has target-specific 638 // attributes subsection in the attribute section. 639 virtual int 640 do_attribute_arg_type(int) const 641 { gold_unreachable(); } 642 643 // This may be overridden by the child class. 644 virtual int 645 do_attributes_order(int num) const 646 { return num; } 647 648 // This may be overridden by the child class. 649 virtual void 650 do_select_as_default_target() 651 { } 652 653 // This may be overridden by the child class. 654 virtual void 655 do_define_standard_symbols(Symbol_table*, Layout*) 656 { } 657 658 private: 659 // The implementations of the four do_make_elf_object virtual functions are 660 // almost identical except for their sizes and endianness. We use a template. 661 // for their implementations. 662 template<int size, bool big_endian> 663 inline Object* 664 do_make_elf_object_implementation(const std::string&, Input_file*, off_t, 665 const elfcpp::Ehdr<size, big_endian>&); 666 667 Target(const Target&); 668 Target& operator=(const Target&); 669 670 // The target information. 671 const Target_info* pti_; 672 // Processor-specific flags. 673 elfcpp::Elf_Word processor_specific_flags_; 674 // Whether the processor-specific flags are set at least once. 675 bool are_processor_specific_flags_set_; 676 // If not ELFOSABI_NONE, the value to put in the EI_OSABI field of 677 // the ELF header. This is handled at this level because it is 678 // OS-specific rather than processor-specific. 679 elfcpp::ELFOSABI osabi_; 680 }; 681 682 // The abstract class for a specific size and endianness of target. 683 // Each actual target implementation class should derive from an 684 // instantiation of Sized_target. 685 686 template<int size, bool big_endian> 687 class Sized_target : public Target 688 { 689 public: 690 // Make a new symbol table entry for the target. This should be 691 // overridden by a target which needs additional information in the 692 // symbol table. This will only be called if has_make_symbol() 693 // returns true. 694 virtual Sized_symbol<size>* 695 make_symbol() const 696 { gold_unreachable(); } 697 698 // Resolve a symbol for the target. This should be overridden by a 699 // target which needs to take special action. TO is the 700 // pre-existing symbol. SYM is the new symbol, seen in OBJECT. 701 // VERSION is the version of SYM. This will only be called if 702 // has_resolve() returns true. 703 virtual void 704 resolve(Symbol*, const elfcpp::Sym<size, big_endian>&, Object*, 705 const char*) 706 { gold_unreachable(); } 707 708 // Process the relocs for a section, and record information of the 709 // mapping from source to destination sections. This mapping is later 710 // used to determine unreferenced garbage sections. This procedure is 711 // only called during garbage collection. 712 virtual void 713 gc_process_relocs(Symbol_table* symtab, 714 Layout* layout, 715 Sized_relobj_file<size, big_endian>* object, 716 unsigned int data_shndx, 717 unsigned int sh_type, 718 const unsigned char* prelocs, 719 size_t reloc_count, 720 Output_section* output_section, 721 bool needs_special_offset_handling, 722 size_t local_symbol_count, 723 const unsigned char* plocal_symbols) = 0; 724 725 // Scan the relocs for a section, and record any information 726 // required for the symbol. SYMTAB is the symbol table. OBJECT is 727 // the object in which the section appears. DATA_SHNDX is the 728 // section index that these relocs apply to. SH_TYPE is the type of 729 // the relocation section, SHT_REL or SHT_RELA. PRELOCS points to 730 // the relocation data. RELOC_COUNT is the number of relocs. 731 // LOCAL_SYMBOL_COUNT is the number of local symbols. 732 // OUTPUT_SECTION is the output section. 733 // NEEDS_SPECIAL_OFFSET_HANDLING is true if offsets to the output 734 // sections are not mapped as usual. PLOCAL_SYMBOLS points to the 735 // local symbol data from OBJECT. GLOBAL_SYMBOLS is the array of 736 // pointers to the global symbol table from OBJECT. 737 virtual void 738 scan_relocs(Symbol_table* symtab, 739 Layout* layout, 740 Sized_relobj_file<size, big_endian>* object, 741 unsigned int data_shndx, 742 unsigned int sh_type, 743 const unsigned char* prelocs, 744 size_t reloc_count, 745 Output_section* output_section, 746 bool needs_special_offset_handling, 747 size_t local_symbol_count, 748 const unsigned char* plocal_symbols) = 0; 749 750 // Relocate section data. SH_TYPE is the type of the relocation 751 // section, SHT_REL or SHT_RELA. PRELOCS points to the relocation 752 // information. RELOC_COUNT is the number of relocs. 753 // OUTPUT_SECTION is the output section. 754 // NEEDS_SPECIAL_OFFSET_HANDLING is true if offsets must be mapped 755 // to correspond to the output section. VIEW is a view into the 756 // output file holding the section contents, VIEW_ADDRESS is the 757 // virtual address of the view, and VIEW_SIZE is the size of the 758 // view. If NEEDS_SPECIAL_OFFSET_HANDLING is true, the VIEW_xx 759 // parameters refer to the complete output section data, not just 760 // the input section data. 761 virtual void 762 relocate_section(const Relocate_info<size, big_endian>*, 763 unsigned int sh_type, 764 const unsigned char* prelocs, 765 size_t reloc_count, 766 Output_section* output_section, 767 bool needs_special_offset_handling, 768 unsigned char* view, 769 typename elfcpp::Elf_types<size>::Elf_Addr view_address, 770 section_size_type view_size, 771 const Reloc_symbol_changes*) = 0; 772 773 // Scan the relocs during a relocatable link. The parameters are 774 // like scan_relocs, with an additional Relocatable_relocs 775 // parameter, used to record the disposition of the relocs. 776 virtual void 777 scan_relocatable_relocs(Symbol_table* symtab, 778 Layout* layout, 779 Sized_relobj_file<size, big_endian>* object, 780 unsigned int data_shndx, 781 unsigned int sh_type, 782 const unsigned char* prelocs, 783 size_t reloc_count, 784 Output_section* output_section, 785 bool needs_special_offset_handling, 786 size_t local_symbol_count, 787 const unsigned char* plocal_symbols, 788 Relocatable_relocs*) = 0; 789 790 // Relocate a section during a relocatable link. The parameters are 791 // like relocate_section, with additional parameters for the view of 792 // the output reloc section. 793 virtual void 794 relocate_for_relocatable(const Relocate_info<size, big_endian>*, 795 unsigned int sh_type, 796 const unsigned char* prelocs, 797 size_t reloc_count, 798 Output_section* output_section, 799 typename elfcpp::Elf_types<size>::Elf_Off 800 offset_in_output_section, 801 const Relocatable_relocs*, 802 unsigned char* view, 803 typename elfcpp::Elf_types<size>::Elf_Addr 804 view_address, 805 section_size_type view_size, 806 unsigned char* reloc_view, 807 section_size_type reloc_view_size) = 0; 808 809 // Perform target-specific processing in a relocatable link. This is 810 // only used if we use the relocation strategy RELOC_SPECIAL. 811 // RELINFO points to a Relocation_info structure. SH_TYPE is the relocation 812 // section type. PRELOC_IN points to the original relocation. RELNUM is 813 // the index number of the relocation in the relocation section. 814 // OUTPUT_SECTION is the output section to which the relocation is applied. 815 // OFFSET_IN_OUTPUT_SECTION is the offset of the relocation input section 816 // within the output section. VIEW points to the output view of the 817 // output section. VIEW_ADDRESS is output address of the view. VIEW_SIZE 818 // is the size of the output view and PRELOC_OUT points to the new 819 // relocation in the output object. 820 // 821 // A target only needs to override this if the generic code in 822 // target-reloc.h cannot handle some relocation types. 823 824 virtual void 825 relocate_special_relocatable(const Relocate_info<size, big_endian>* 826 /*relinfo */, 827 unsigned int /* sh_type */, 828 const unsigned char* /* preloc_in */, 829 size_t /* relnum */, 830 Output_section* /* output_section */, 831 typename elfcpp::Elf_types<size>::Elf_Off 832 /* offset_in_output_section */, 833 unsigned char* /* view */, 834 typename elfcpp::Elf_types<size>::Elf_Addr 835 /* view_address */, 836 section_size_type /* view_size */, 837 unsigned char* /* preloc_out*/) 838 { gold_unreachable(); } 839 840 // Return the number of entries in the GOT. This is only used for 841 // laying out the incremental link info sections. A target needs 842 // to implement this to support incremental linking. 843 844 virtual unsigned int 845 got_entry_count() const 846 { gold_unreachable(); } 847 848 // Return the number of entries in the PLT. This is only used for 849 // laying out the incremental link info sections. A target needs 850 // to implement this to support incremental linking. 851 852 virtual unsigned int 853 plt_entry_count() const 854 { gold_unreachable(); } 855 856 // Return the offset of the first non-reserved PLT entry. This is 857 // only used for laying out the incremental link info sections. 858 // A target needs to implement this to support incremental linking. 859 860 virtual unsigned int 861 first_plt_entry_offset() const 862 { gold_unreachable(); } 863 864 // Return the size of each PLT entry. This is only used for 865 // laying out the incremental link info sections. A target needs 866 // to implement this to support incremental linking. 867 868 virtual unsigned int 869 plt_entry_size() const 870 { gold_unreachable(); } 871 872 // Create the GOT and PLT sections for an incremental update. 873 // A target needs to implement this to support incremental linking. 874 875 virtual Output_data_got_base* 876 init_got_plt_for_update(Symbol_table*, 877 Layout*, 878 unsigned int /* got_count */, 879 unsigned int /* plt_count */) 880 { gold_unreachable(); } 881 882 // Reserve a GOT entry for a local symbol, and regenerate any 883 // necessary dynamic relocations. 884 virtual void 885 reserve_local_got_entry(unsigned int /* got_index */, 886 Sized_relobj<size, big_endian>* /* obj */, 887 unsigned int /* r_sym */, 888 unsigned int /* got_type */) 889 { gold_unreachable(); } 890 891 // Reserve a GOT entry for a global symbol, and regenerate any 892 // necessary dynamic relocations. 893 virtual void 894 reserve_global_got_entry(unsigned int /* got_index */, Symbol* /* gsym */, 895 unsigned int /* got_type */) 896 { gold_unreachable(); } 897 898 // Register an existing PLT entry for a global symbol. 899 // A target needs to implement this to support incremental linking. 900 901 virtual void 902 register_global_plt_entry(Symbol_table*, Layout*, 903 unsigned int /* plt_index */, 904 Symbol*) 905 { gold_unreachable(); } 906 907 // Force a COPY relocation for a given symbol. 908 // A target needs to implement this to support incremental linking. 909 910 virtual void 911 emit_copy_reloc(Symbol_table*, Symbol*, Output_section*, off_t) 912 { gold_unreachable(); } 913 914 // Apply an incremental relocation. 915 916 virtual void 917 apply_relocation(const Relocate_info<size, big_endian>* /* relinfo */, 918 typename elfcpp::Elf_types<size>::Elf_Addr /* r_offset */, 919 unsigned int /* r_type */, 920 typename elfcpp::Elf_types<size>::Elf_Swxword /* r_addend */, 921 const Symbol* /* gsym */, 922 unsigned char* /* view */, 923 typename elfcpp::Elf_types<size>::Elf_Addr /* address */, 924 section_size_type /* view_size */) 925 { gold_unreachable(); } 926 927 protected: 928 Sized_target(const Target::Target_info* pti) 929 : Target(pti) 930 { 931 gold_assert(pti->size == size); 932 gold_assert(pti->is_big_endian ? big_endian : !big_endian); 933 } 934 935 // Set the EI_OSABI field if requested. 936 virtual void 937 do_adjust_elf_header(unsigned char*, int) const; 938 }; 939 940 } // End namespace gold. 941 942 #endif // !defined(GOLD_TARGET_H) 943