Home | History | Annotate | Download | only in gold
      1 // target.h -- target support for gold   -*- C++ -*-
      2 
      3 // Copyright (C) 2006-2016 Free Software Foundation, Inc.
      4 // Written by Ian Lance Taylor <iant (at) 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 // The abstract class Target is the interface for target specific
     24 // support.  It defines abstract methods which each target must
     25 // implement.  Typically there will be one target per processor, but
     26 // in some cases it may be necessary to have subclasses.
     27 
     28 // For speed and consistency we want to use inline functions to handle
     29 // relocation processing.  So besides implementations of the abstract
     30 // methods, each target is expected to define a template
     31 // specialization of the relocation functions.
     32 
     33 #ifndef GOLD_TARGET_H
     34 #define GOLD_TARGET_H
     35 
     36 #include "elfcpp.h"
     37 #include "options.h"
     38 #include "parameters.h"
     39 #include "stringpool.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 struct Symbol_location;
     65 class Versions;
     66 
     67 // The abstract class for target specific handling.
     68 
     69 class Target
     70 {
     71  public:
     72   virtual ~Target()
     73   { }
     74 
     75   // Returns the safe value for data segment size for PIE links.
     76   // A value of 0 means that the size is unlimited.
     77   virtual uint64_t
     78   max_pie_data_segment_size() const
     79   { return 0; }
     80 
     81   // Return the bit size that this target implements.  This should
     82   // return 32 or 64.
     83   int
     84   get_size() const
     85   { return this->pti_->size; }
     86 
     87   // Return whether this target is big-endian.
     88   bool
     89   is_big_endian() const
     90   { return this->pti_->is_big_endian; }
     91 
     92   // Machine code to store in e_machine field of ELF header.
     93   elfcpp::EM
     94   machine_code() const
     95   { return this->pti_->machine_code; }
     96 
     97   // Processor specific flags to store in e_flags field of ELF header.
     98   elfcpp::Elf_Word
     99   processor_specific_flags() const
    100   { return this->processor_specific_flags_; }
    101 
    102   // Whether processor specific flags are set at least once.
    103   bool
    104   are_processor_specific_flags_set() const
    105   { return this->are_processor_specific_flags_set_; }
    106 
    107   // Whether this target has a specific make_symbol function.
    108   bool
    109   has_make_symbol() const
    110   { return this->pti_->has_make_symbol; }
    111 
    112   // Whether this target has a specific resolve function.
    113   bool
    114   has_resolve() const
    115   { return this->pti_->has_resolve; }
    116 
    117   // Whether this target has a specific code fill function.
    118   bool
    119   has_code_fill() const
    120   { return this->pti_->has_code_fill; }
    121 
    122   // Return the default name of the dynamic linker.
    123   const char*
    124   dynamic_linker() const
    125   { return this->pti_->dynamic_linker; }
    126 
    127   // Return the default address to use for the text segment.
    128   uint64_t
    129   default_text_segment_address() const
    130   { return this->pti_->default_text_segment_address; }
    131 
    132   // Return the ABI specified page size.
    133   uint64_t
    134   abi_pagesize() const
    135   {
    136     if (parameters->options().max_page_size() > 0)
    137       return parameters->options().max_page_size();
    138     else
    139       return this->pti_->abi_pagesize;
    140   }
    141 
    142   // Return the common page size used on actual systems.
    143   uint64_t
    144   common_pagesize() const
    145   {
    146     if (parameters->options().common_page_size() > 0)
    147       return std::min(parameters->options().common_page_size(),
    148 		      this->abi_pagesize());
    149     else
    150       return std::min(this->pti_->common_pagesize,
    151 		      this->abi_pagesize());
    152   }
    153 
    154   // Return whether PF_X segments must contain nothing but the contents of
    155   // SHF_EXECINSTR sections (no non-executable data, no headers).
    156   bool
    157   isolate_execinstr() const
    158   { return this->pti_->isolate_execinstr; }
    159 
    160   uint64_t
    161   rosegment_gap() const
    162   { return this->pti_->rosegment_gap; }
    163 
    164   // If we see some object files with .note.GNU-stack sections, and
    165   // some objects files without them, this returns whether we should
    166   // consider the object files without them to imply that the stack
    167   // should be executable.
    168   bool
    169   is_default_stack_executable() const
    170   { return this->pti_->is_default_stack_executable; }
    171 
    172   // Return a character which may appear as a prefix for a wrap
    173   // symbol.  If this character appears, we strip it when checking for
    174   // wrapping and add it back when forming the final symbol name.
    175   // This should be '\0' if not special prefix is required, which is
    176   // the normal case.
    177   char
    178   wrap_char() const
    179   { return this->pti_->wrap_char; }
    180 
    181   // Return the special section index which indicates a small common
    182   // symbol.  This will return SHN_UNDEF if there are no small common
    183   // symbols.
    184   elfcpp::Elf_Half
    185   small_common_shndx() const
    186   { return this->pti_->small_common_shndx; }
    187 
    188   // Return values to add to the section flags for the section holding
    189   // small common symbols.
    190   elfcpp::Elf_Xword
    191   small_common_section_flags() const
    192   {
    193     gold_assert(this->pti_->small_common_shndx != elfcpp::SHN_UNDEF);
    194     return this->pti_->small_common_section_flags;
    195   }
    196 
    197   // Return the special section index which indicates a large common
    198   // symbol.  This will return SHN_UNDEF if there are no large common
    199   // symbols.
    200   elfcpp::Elf_Half
    201   large_common_shndx() const
    202   { return this->pti_->large_common_shndx; }
    203 
    204   // Return values to add to the section flags for the section holding
    205   // large common symbols.
    206   elfcpp::Elf_Xword
    207   large_common_section_flags() const
    208   {
    209     gold_assert(this->pti_->large_common_shndx != elfcpp::SHN_UNDEF);
    210     return this->pti_->large_common_section_flags;
    211   }
    212 
    213   // This hook is called when an output section is created.
    214   void
    215   new_output_section(Output_section* os) const
    216   { this->do_new_output_section(os); }
    217 
    218   // This is called to tell the target to complete any sections it is
    219   // handling.  After this all sections must have their final size.
    220   void
    221   finalize_sections(Layout* layout, const Input_objects* input_objects,
    222 		    Symbol_table* symtab)
    223   { return this->do_finalize_sections(layout, input_objects, symtab); }
    224 
    225   // Return the value to use for a global symbol which needs a special
    226   // value in the dynamic symbol table.  This will only be called if
    227   // the backend first calls symbol->set_needs_dynsym_value().
    228   uint64_t
    229   dynsym_value(const Symbol* sym) const
    230   { return this->do_dynsym_value(sym); }
    231 
    232   // Return a string to use to fill out a code section.  This is
    233   // basically one or more NOPS which must fill out the specified
    234   // length in bytes.
    235   std::string
    236   code_fill(section_size_type length) const
    237   { return this->do_code_fill(length); }
    238 
    239   // Return whether SYM is known to be defined by the ABI.  This is
    240   // used to avoid inappropriate warnings about undefined symbols.
    241   bool
    242   is_defined_by_abi(const Symbol* sym) const
    243   { return this->do_is_defined_by_abi(sym); }
    244 
    245   // Adjust the output file header before it is written out.  VIEW
    246   // points to the header in external form.  LEN is the length.
    247   void
    248   adjust_elf_header(unsigned char* view, int len)
    249   { return this->do_adjust_elf_header(view, len); }
    250 
    251   // Return address and size to plug into eh_frame FDEs associated with a PLT.
    252   void
    253   plt_fde_location(const Output_data* plt, unsigned char* oview,
    254 		   uint64_t* address, off_t* len) const
    255   { return this->do_plt_fde_location(plt, oview, address, len); }
    256 
    257   // Return whether NAME is a local label name.  This is used to implement the
    258   // --discard-locals options.
    259   bool
    260   is_local_label_name(const char* name) const
    261   { return this->do_is_local_label_name(name); }
    262 
    263   // Get the symbol index to use for a target specific reloc.
    264   unsigned int
    265   reloc_symbol_index(void* arg, unsigned int type) const
    266   { return this->do_reloc_symbol_index(arg, type); }
    267 
    268   // Get the addend to use for a target specific reloc.
    269   uint64_t
    270   reloc_addend(void* arg, unsigned int type, uint64_t addend) const
    271   { return this->do_reloc_addend(arg, type, addend); }
    272 
    273   // Return the PLT address to use for a global symbol.
    274   uint64_t
    275   plt_address_for_global(const Symbol* sym) const
    276   { return this->do_plt_address_for_global(sym); }
    277 
    278   // Return the PLT address to use for a local symbol.
    279   uint64_t
    280   plt_address_for_local(const Relobj* object, unsigned int symndx) const
    281   { return this->do_plt_address_for_local(object, symndx); }
    282 
    283   // Return the offset to use for the GOT_INDX'th got entry which is
    284   // for a local tls symbol specified by OBJECT, SYMNDX.
    285   int64_t
    286   tls_offset_for_local(const Relobj* object,
    287 		       unsigned int symndx,
    288 		       unsigned int got_indx) const
    289   { return do_tls_offset_for_local(object, symndx, got_indx); }
    290 
    291   // Return the offset to use for the GOT_INDX'th got entry which is
    292   // for global tls symbol GSYM.
    293   int64_t
    294   tls_offset_for_global(Symbol* gsym, unsigned int got_indx) const
    295   { return do_tls_offset_for_global(gsym, got_indx); }
    296 
    297   // For targets that use function descriptors, if LOC is the location
    298   // of a function, modify it to point at the function entry location.
    299   void
    300   function_location(Symbol_location* loc) const
    301   { return do_function_location(loc); }
    302 
    303   // Return whether this target can use relocation types to determine
    304   // if a function's address is taken.
    305   bool
    306   can_check_for_function_pointers() const
    307   { return this->do_can_check_for_function_pointers(); }
    308 
    309   // Return whether a relocation to a merged section can be processed
    310   // to retrieve the contents.
    311   bool
    312   can_icf_inline_merge_sections () const
    313   { return this->pti_->can_icf_inline_merge_sections; }
    314 
    315   // Whether a section called SECTION_NAME may have function pointers to
    316   // sections not eligible for safe ICF folding.
    317   virtual bool
    318   section_may_have_icf_unsafe_pointers(const char* section_name) const
    319   { return this->do_section_may_have_icf_unsafe_pointers(section_name); }
    320 
    321   // Return the base to use for the PC value in an FDE when it is
    322   // encoded using DW_EH_PE_datarel.  This does not appear to be
    323   // documented anywhere, but it is target specific.  Any use of
    324   // DW_EH_PE_datarel in gcc requires defining a special macro
    325   // (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX) to output the value.
    326   uint64_t
    327   ehframe_datarel_base() const
    328   { return this->do_ehframe_datarel_base(); }
    329 
    330   // Return true if a reference to SYM from a reloc at *PRELOC
    331   // means that the current function may call an object compiled
    332   // without -fsplit-stack.  SYM is known to be defined in an object
    333   // compiled without -fsplit-stack.
    334   bool
    335   is_call_to_non_split(const Symbol* sym, const unsigned char* preloc,
    336 		       const unsigned char* view,
    337 		       section_size_type view_size) const
    338   { return this->do_is_call_to_non_split(sym, preloc, view, view_size); }
    339 
    340   // A function starts at OFFSET in section SHNDX in OBJECT.  That
    341   // function was compiled with -fsplit-stack, but it refers to a
    342   // function which was compiled without -fsplit-stack.  VIEW is a
    343   // modifiable view of the section; VIEW_SIZE is the size of the
    344   // view.  The target has to adjust the function so that it allocates
    345   // enough stack.
    346   void
    347   calls_non_split(Relobj* object, unsigned int shndx,
    348 		  section_offset_type fnoffset, section_size_type fnsize,
    349 		  const unsigned char* prelocs, size_t reloc_count,
    350 		  unsigned char* view, section_size_type view_size,
    351 		  std::string* from, std::string* to) const
    352   {
    353     this->do_calls_non_split(object, shndx, fnoffset, fnsize,
    354 			     prelocs, reloc_count, view, view_size,
    355 			     from, to);
    356   }
    357 
    358   // Make an ELF object.
    359   template<int size, bool big_endian>
    360   Object*
    361   make_elf_object(const std::string& name, Input_file* input_file,
    362 		  off_t offset, const elfcpp::Ehdr<size, big_endian>& ehdr)
    363   { return this->do_make_elf_object(name, input_file, offset, ehdr); }
    364 
    365   // Make an output section.
    366   Output_section*
    367   make_output_section(const char* name, elfcpp::Elf_Word type,
    368 		      elfcpp::Elf_Xword flags)
    369   { return this->do_make_output_section(name, type, flags); }
    370 
    371   // Return true if target wants to perform relaxation.
    372   bool
    373   may_relax() const
    374   {
    375     // Run the dummy relaxation pass twice if relaxation debugging is enabled.
    376     if (is_debugging_enabled(DEBUG_RELAXATION))
    377       return true;
    378 
    379      return this->do_may_relax();
    380   }
    381 
    382   // Perform a relaxation pass.  Return true if layout may be changed.
    383   bool
    384   relax(int pass, const Input_objects* input_objects, Symbol_table* symtab,
    385 	Layout* layout, const Task* task)
    386   {
    387     // Run the dummy relaxation pass twice if relaxation debugging is enabled.
    388     if (is_debugging_enabled(DEBUG_RELAXATION))
    389       return pass < 2;
    390 
    391     return this->do_relax(pass, input_objects, symtab, layout, task);
    392   }
    393 
    394   // Return the target-specific name of attributes section.  This is
    395   // NULL if a target does not use attributes section or if it uses
    396   // the default section name ".gnu.attributes".
    397   const char*
    398   attributes_section() const
    399   { return this->pti_->attributes_section; }
    400 
    401   // Return the vendor name of vendor attributes.
    402   const char*
    403   attributes_vendor() const
    404   { return this->pti_->attributes_vendor; }
    405 
    406   // Whether a section called NAME is an attribute section.
    407   bool
    408   is_attributes_section(const char* name) const
    409   {
    410     return ((this->pti_->attributes_section != NULL
    411 	     && strcmp(name, this->pti_->attributes_section) == 0)
    412 	    || strcmp(name, ".gnu.attributes") == 0);
    413   }
    414 
    415   // Return a bit mask of argument types for attribute with TAG.
    416   int
    417   attribute_arg_type(int tag) const
    418   { return this->do_attribute_arg_type(tag); }
    419 
    420   // Return the attribute tag of the position NUM in the list of fixed
    421   // attributes.  Normally there is no reordering and
    422   // attributes_order(NUM) == NUM.
    423   int
    424   attributes_order(int num) const
    425   { return this->do_attributes_order(num); }
    426 
    427   // When a target is selected as the default target, we call this method,
    428   // which may be used for expensive, target-specific initialization.
    429   void
    430   select_as_default_target()
    431   { this->do_select_as_default_target(); }
    432 
    433   // Return the value to store in the EI_OSABI field in the ELF
    434   // header.
    435   elfcpp::ELFOSABI
    436   osabi() const
    437   { return this->osabi_; }
    438 
    439   // Set the value to store in the EI_OSABI field in the ELF header.
    440   void
    441   set_osabi(elfcpp::ELFOSABI osabi)
    442   { this->osabi_ = osabi; }
    443 
    444   // Define target-specific standard symbols.
    445   void
    446   define_standard_symbols(Symbol_table* symtab, Layout* layout)
    447   { this->do_define_standard_symbols(symtab, layout); }
    448 
    449   // Return the output section name to use given an input section
    450   // name, or NULL if no target specific name mapping is required.
    451   // Set *PLEN to the length of the name if returning non-NULL.
    452   const char*
    453   output_section_name(const Relobj* relobj,
    454 		      const char* name,
    455 		      size_t* plen) const
    456   { return this->do_output_section_name(relobj, name, plen); }
    457 
    458   // Add any special sections for this symbol to the gc work list.
    459   void
    460   gc_mark_symbol(Symbol_table* symtab, Symbol* sym) const
    461   { this->do_gc_mark_symbol(symtab, sym); }
    462 
    463   // Return the name of the entry point symbol.
    464   const char*
    465   entry_symbol_name() const
    466   { return this->pti_->entry_symbol_name; }
    467 
    468   // Return the size in bits of SHT_HASH entry.
    469   int
    470   hash_entry_size() const
    471   { return this->pti_->hash_entry_size; }
    472 
    473   // Whether the target has a custom set_dynsym_indexes method.
    474   bool
    475   has_custom_set_dynsym_indexes() const
    476   { return this->do_has_custom_set_dynsym_indexes(); }
    477 
    478   // Custom set_dynsym_indexes method for a target.
    479   unsigned int
    480   set_dynsym_indexes(std::vector<Symbol*>* dyn_symbols, unsigned int index,
    481                      std::vector<Symbol*>* syms, Stringpool* dynpool,
    482                      Versions* versions, Symbol_table* symtab) const
    483   {
    484     return this->do_set_dynsym_indexes(dyn_symbols, index, syms, dynpool,
    485                                        versions, symtab);
    486   }
    487 
    488   // Get the custom dynamic tag value.
    489   unsigned int
    490   dynamic_tag_custom_value(elfcpp::DT tag) const
    491   { return this->do_dynamic_tag_custom_value(tag); }
    492 
    493   // Adjust the value written to the dynamic symbol table.
    494   void
    495   adjust_dyn_symbol(const Symbol* sym, unsigned char* view) const
    496   { this->do_adjust_dyn_symbol(sym, view); }
    497 
    498   // Return whether to include the section in the link.
    499   bool
    500   should_include_section(elfcpp::Elf_Word sh_type) const
    501   { return this->do_should_include_section(sh_type); }
    502 
    503  protected:
    504   // This struct holds the constant information for a child class.  We
    505   // use a struct to avoid the overhead of virtual function calls for
    506   // simple information.
    507   struct Target_info
    508   {
    509     // Address size (32 or 64).
    510     int size;
    511     // Whether the target is big endian.
    512     bool is_big_endian;
    513     // The code to store in the e_machine field of the ELF header.
    514     elfcpp::EM machine_code;
    515     // Whether this target has a specific make_symbol function.
    516     bool has_make_symbol;
    517     // Whether this target has a specific resolve function.
    518     bool has_resolve;
    519     // Whether this target has a specific code fill function.
    520     bool has_code_fill;
    521     // Whether an object file with no .note.GNU-stack sections implies
    522     // that the stack should be executable.
    523     bool is_default_stack_executable;
    524     // Whether a relocation to a merged section can be processed to
    525     // retrieve the contents.
    526     bool can_icf_inline_merge_sections;
    527     // Prefix character to strip when checking for wrapping.
    528     char wrap_char;
    529     // The default dynamic linker name.
    530     const char* dynamic_linker;
    531     // The default text segment address.
    532     uint64_t default_text_segment_address;
    533     // The ABI specified page size.
    534     uint64_t abi_pagesize;
    535     // The common page size used by actual implementations.
    536     uint64_t common_pagesize;
    537     // Whether PF_X segments must contain nothing but the contents of
    538     // SHF_EXECINSTR sections (no non-executable data, no headers).
    539     bool isolate_execinstr;
    540     // If nonzero, distance from the text segment to the read-only segment.
    541     uint64_t rosegment_gap;
    542     // The special section index for small common symbols; SHN_UNDEF
    543     // if none.
    544     elfcpp::Elf_Half small_common_shndx;
    545     // The special section index for large common symbols; SHN_UNDEF
    546     // if none.
    547     elfcpp::Elf_Half large_common_shndx;
    548     // Section flags for small common section.
    549     elfcpp::Elf_Xword small_common_section_flags;
    550     // Section flags for large common section.
    551     elfcpp::Elf_Xword large_common_section_flags;
    552     // Name of attributes section if it is not ".gnu.attributes".
    553     const char* attributes_section;
    554     // Vendor name of vendor attributes.
    555     const char* attributes_vendor;
    556     // Name of the main entry point to the program.
    557     const char* entry_symbol_name;
    558     // Size (in bits) of SHT_HASH entry. Always equal to 32, except for
    559     // 64-bit S/390.
    560     const int hash_entry_size;
    561   };
    562 
    563   Target(const Target_info* pti)
    564     : pti_(pti), processor_specific_flags_(0),
    565       are_processor_specific_flags_set_(false), osabi_(elfcpp::ELFOSABI_NONE)
    566   { }
    567 
    568   // Virtual function which may be implemented by the child class.
    569   virtual void
    570   do_new_output_section(Output_section*) const
    571   { }
    572 
    573   // Virtual function which may be implemented by the child class.
    574   virtual void
    575   do_finalize_sections(Layout*, const Input_objects*, Symbol_table*)
    576   { }
    577 
    578   // Virtual function which may be implemented by the child class.
    579   virtual uint64_t
    580   do_dynsym_value(const Symbol*) const
    581   { gold_unreachable(); }
    582 
    583   // Virtual function which must be implemented by the child class if
    584   // needed.
    585   virtual std::string
    586   do_code_fill(section_size_type) const
    587   { gold_unreachable(); }
    588 
    589   // Virtual function which may be implemented by the child class.
    590   virtual bool
    591   do_is_defined_by_abi(const Symbol*) const
    592   { return false; }
    593 
    594   // Adjust the output file header before it is written out.  VIEW
    595   // points to the header in external form.  LEN is the length, and
    596   // will be one of the values of elfcpp::Elf_sizes<size>::ehdr_size.
    597   // By default, we set the EI_OSABI field if requested (in
    598   // Sized_target).
    599   virtual void
    600   do_adjust_elf_header(unsigned char*, int) = 0;
    601 
    602   // Return address and size to plug into eh_frame FDEs associated with a PLT.
    603   virtual void
    604   do_plt_fde_location(const Output_data* plt, unsigned char* oview,
    605 		      uint64_t* address, off_t* len) const;
    606 
    607   // Virtual function which may be overridden by the child class.
    608   virtual bool
    609   do_is_local_label_name(const char*) const;
    610 
    611   // Virtual function that must be overridden by a target which uses
    612   // target specific relocations.
    613   virtual unsigned int
    614   do_reloc_symbol_index(void*, unsigned int) const
    615   { gold_unreachable(); }
    616 
    617   // Virtual function that must be overridden by a target which uses
    618   // target specific relocations.
    619   virtual uint64_t
    620   do_reloc_addend(void*, unsigned int, uint64_t) const
    621   { gold_unreachable(); }
    622 
    623   // Virtual functions that must be overridden by a target that uses
    624   // STT_GNU_IFUNC symbols.
    625   virtual uint64_t
    626   do_plt_address_for_global(const Symbol*) const
    627   { gold_unreachable(); }
    628 
    629   virtual uint64_t
    630   do_plt_address_for_local(const Relobj*, unsigned int) const
    631   { gold_unreachable(); }
    632 
    633   virtual int64_t
    634   do_tls_offset_for_local(const Relobj*, unsigned int, unsigned int) const
    635   { gold_unreachable(); }
    636 
    637   virtual int64_t
    638   do_tls_offset_for_global(Symbol*, unsigned int) const
    639   { gold_unreachable(); }
    640 
    641   virtual void
    642   do_function_location(Symbol_location*) const = 0;
    643 
    644   // Virtual function which may be overriden by the child class.
    645   virtual bool
    646   do_can_check_for_function_pointers() const
    647   { return false; }
    648 
    649   // Virtual function which may be overridden by the child class.  We
    650   // recognize some default sections for which we don't care whether
    651   // they have function pointers.
    652   virtual bool
    653   do_section_may_have_icf_unsafe_pointers(const char* section_name) const
    654   {
    655     // We recognize sections for normal vtables, construction vtables and
    656     // EH frames.
    657     return (!is_prefix_of(".rodata._ZTV", section_name)
    658 	    && !is_prefix_of(".data.rel.ro._ZTV", section_name)
    659 	    && !is_prefix_of(".rodata._ZTC", section_name)
    660 	    && !is_prefix_of(".data.rel.ro._ZTC", section_name)
    661 	    && !is_prefix_of(".eh_frame", section_name));
    662   }
    663 
    664   virtual uint64_t
    665   do_ehframe_datarel_base() const
    666   { gold_unreachable(); }
    667 
    668   // Virtual function which may be overridden by the child class.  The
    669   // default implementation is that any function not defined by the
    670   // ABI is a call to a non-split function.
    671   virtual bool
    672   do_is_call_to_non_split(const Symbol* sym, const unsigned char*,
    673 			  const unsigned char*, section_size_type) const;
    674 
    675   // Virtual function which may be overridden by the child class.
    676   virtual void
    677   do_calls_non_split(Relobj* object, unsigned int, section_offset_type,
    678 		     section_size_type, const unsigned char*, size_t,
    679 		     unsigned char*, section_size_type,
    680 		     std::string*, std::string*) const;
    681 
    682   // make_elf_object hooks.  There are four versions of these for
    683   // different address sizes and endianness.
    684 
    685   // Set processor specific flags.
    686   void
    687   set_processor_specific_flags(elfcpp::Elf_Word flags)
    688   {
    689     this->processor_specific_flags_ = flags;
    690     this->are_processor_specific_flags_set_ = true;
    691   }
    692 
    693 #ifdef HAVE_TARGET_32_LITTLE
    694   // Virtual functions which may be overridden by the child class.
    695   virtual Object*
    696   do_make_elf_object(const std::string&, Input_file*, off_t,
    697 		     const elfcpp::Ehdr<32, false>&);
    698 #endif
    699 
    700 #ifdef HAVE_TARGET_32_BIG
    701   // Virtual functions which may be overridden by the child class.
    702   virtual Object*
    703   do_make_elf_object(const std::string&, Input_file*, off_t,
    704 		     const elfcpp::Ehdr<32, true>&);
    705 #endif
    706 
    707 #ifdef HAVE_TARGET_64_LITTLE
    708   // Virtual functions which may be overridden by the child class.
    709   virtual Object*
    710   do_make_elf_object(const std::string&, Input_file*, off_t,
    711 		     const elfcpp::Ehdr<64, false>& ehdr);
    712 #endif
    713 
    714 #ifdef HAVE_TARGET_64_BIG
    715   // Virtual functions which may be overridden by the child class.
    716   virtual Object*
    717   do_make_elf_object(const std::string& name, Input_file* input_file,
    718 		     off_t offset, const elfcpp::Ehdr<64, true>& ehdr);
    719 #endif
    720 
    721   // Virtual functions which may be overridden by the child class.
    722   virtual Output_section*
    723   do_make_output_section(const char* name, elfcpp::Elf_Word type,
    724 			 elfcpp::Elf_Xword flags);
    725 
    726   // Virtual function which may be overridden by the child class.
    727   virtual bool
    728   do_may_relax() const
    729   { return parameters->options().relax(); }
    730 
    731   // Virtual function which may be overridden by the child class.
    732   virtual bool
    733   do_relax(int, const Input_objects*, Symbol_table*, Layout*, const Task*)
    734   { return false; }
    735 
    736   // A function for targets to call.  Return whether BYTES/LEN matches
    737   // VIEW/VIEW_SIZE at OFFSET.
    738   bool
    739   match_view(const unsigned char* view, section_size_type view_size,
    740 	     section_offset_type offset, const char* bytes, size_t len) const;
    741 
    742   // Set the contents of a VIEW/VIEW_SIZE to nops starting at OFFSET
    743   // for LEN bytes.
    744   void
    745   set_view_to_nop(unsigned char* view, section_size_type view_size,
    746 		  section_offset_type offset, size_t len) const;
    747 
    748   // This must be overridden by the child class if it has target-specific
    749   // attributes subsection in the attribute section.
    750   virtual int
    751   do_attribute_arg_type(int) const
    752   { gold_unreachable(); }
    753 
    754   // This may be overridden by the child class.
    755   virtual int
    756   do_attributes_order(int num) const
    757   { return num; }
    758 
    759   // This may be overridden by the child class.
    760   virtual void
    761   do_select_as_default_target()
    762   { }
    763 
    764   // This may be overridden by the child class.
    765   virtual void
    766   do_define_standard_symbols(Symbol_table*, Layout*)
    767   { }
    768 
    769   // This may be overridden by the child class.
    770   virtual const char*
    771   do_output_section_name(const Relobj*, const char*, size_t*) const
    772   { return NULL; }
    773 
    774   // This may be overridden by the child class.
    775   virtual void
    776   do_gc_mark_symbol(Symbol_table*, Symbol*) const
    777   { }
    778 
    779   // This may be overridden by the child class.
    780   virtual bool
    781   do_has_custom_set_dynsym_indexes() const
    782   { return false; }
    783 
    784   // This may be overridden by the child class.
    785   virtual unsigned int
    786   do_set_dynsym_indexes(std::vector<Symbol*>*, unsigned int,
    787                         std::vector<Symbol*>*, Stringpool*, Versions*,
    788                         Symbol_table*) const
    789   { gold_unreachable(); }
    790 
    791   // This may be overridden by the child class.
    792   virtual unsigned int
    793   do_dynamic_tag_custom_value(elfcpp::DT) const
    794   { gold_unreachable(); }
    795 
    796   // This may be overridden by the child class.
    797   virtual void
    798   do_adjust_dyn_symbol(const Symbol*, unsigned char*) const
    799   { }
    800 
    801   // This may be overridden by the child class.
    802   virtual bool
    803   do_should_include_section(elfcpp::Elf_Word) const
    804   { return true; }
    805 
    806  private:
    807   // The implementations of the four do_make_elf_object virtual functions are
    808   // almost identical except for their sizes and endianness.  We use a template.
    809   // for their implementations.
    810   template<int size, bool big_endian>
    811   inline Object*
    812   do_make_elf_object_implementation(const std::string&, Input_file*, off_t,
    813 				    const elfcpp::Ehdr<size, big_endian>&);
    814 
    815   Target(const Target&);
    816   Target& operator=(const Target&);
    817 
    818   // The target information.
    819   const Target_info* pti_;
    820   // Processor-specific flags.
    821   elfcpp::Elf_Word processor_specific_flags_;
    822   // Whether the processor-specific flags are set at least once.
    823   bool are_processor_specific_flags_set_;
    824   // If not ELFOSABI_NONE, the value to put in the EI_OSABI field of
    825   // the ELF header.  This is handled at this level because it is
    826   // OS-specific rather than processor-specific.
    827   elfcpp::ELFOSABI osabi_;
    828 };
    829 
    830 // The abstract class for a specific size and endianness of target.
    831 // Each actual target implementation class should derive from an
    832 // instantiation of Sized_target.
    833 
    834 template<int size, bool big_endian>
    835 class Sized_target : public Target
    836 {
    837  public:
    838   // Make a new symbol table entry for the target.  This should be
    839   // overridden by a target which needs additional information in the
    840   // symbol table.  This will only be called if has_make_symbol()
    841   // returns true.
    842   virtual Sized_symbol<size>*
    843   make_symbol(const char*, elfcpp::STT, Object*, unsigned int, uint64_t)
    844   { gold_unreachable(); }
    845 
    846   // Resolve a symbol for the target.  This should be overridden by a
    847   // target which needs to take special action.  TO is the
    848   // pre-existing symbol.  SYM is the new symbol, seen in OBJECT.
    849   // VERSION is the version of SYM.  This will only be called if
    850   // has_resolve() returns true.
    851   virtual void
    852   resolve(Symbol*, const elfcpp::Sym<size, big_endian>&, Object*,
    853 	  const char*)
    854   { gold_unreachable(); }
    855 
    856   // Process the relocs for a section, and record information of the
    857   // mapping from source to destination sections. This mapping is later
    858   // used to determine unreferenced garbage sections. This procedure is
    859   // only called during garbage collection.
    860   virtual void
    861   gc_process_relocs(Symbol_table* symtab,
    862 		    Layout* layout,
    863 		    Sized_relobj_file<size, big_endian>* object,
    864 		    unsigned int data_shndx,
    865 		    unsigned int sh_type,
    866 		    const unsigned char* prelocs,
    867 		    size_t reloc_count,
    868 		    Output_section* output_section,
    869 		    bool needs_special_offset_handling,
    870 		    size_t local_symbol_count,
    871 		    const unsigned char* plocal_symbols) = 0;
    872 
    873   // Scan the relocs for a section, and record any information
    874   // required for the symbol.  SYMTAB is the symbol table.  OBJECT is
    875   // the object in which the section appears.  DATA_SHNDX is the
    876   // section index that these relocs apply to.  SH_TYPE is the type of
    877   // the relocation section, SHT_REL or SHT_RELA.  PRELOCS points to
    878   // the relocation data.  RELOC_COUNT is the number of relocs.
    879   // LOCAL_SYMBOL_COUNT is the number of local symbols.
    880   // OUTPUT_SECTION is the output section.
    881   // NEEDS_SPECIAL_OFFSET_HANDLING is true if offsets to the output
    882   // sections are not mapped as usual.  PLOCAL_SYMBOLS points to the
    883   // local symbol data from OBJECT.  GLOBAL_SYMBOLS is the array of
    884   // pointers to the global symbol table from OBJECT.
    885   virtual void
    886   scan_relocs(Symbol_table* symtab,
    887 	      Layout* layout,
    888 	      Sized_relobj_file<size, big_endian>* object,
    889 	      unsigned int data_shndx,
    890 	      unsigned int sh_type,
    891 	      const unsigned char* prelocs,
    892 	      size_t reloc_count,
    893 	      Output_section* output_section,
    894 	      bool needs_special_offset_handling,
    895 	      size_t local_symbol_count,
    896 	      const unsigned char* plocal_symbols) = 0;
    897 
    898   // Relocate section data.  SH_TYPE is the type of the relocation
    899   // section, SHT_REL or SHT_RELA.  PRELOCS points to the relocation
    900   // information.  RELOC_COUNT is the number of relocs.
    901   // OUTPUT_SECTION is the output section.
    902   // NEEDS_SPECIAL_OFFSET_HANDLING is true if offsets must be mapped
    903   // to correspond to the output section.  VIEW is a view into the
    904   // output file holding the section contents, VIEW_ADDRESS is the
    905   // virtual address of the view, and VIEW_SIZE is the size of the
    906   // view.  If NEEDS_SPECIAL_OFFSET_HANDLING is true, the VIEW_xx
    907   // parameters refer to the complete output section data, not just
    908   // the input section data.
    909   virtual void
    910   relocate_section(const Relocate_info<size, big_endian>*,
    911 		   unsigned int sh_type,
    912 		   const unsigned char* prelocs,
    913 		   size_t reloc_count,
    914 		   Output_section* output_section,
    915 		   bool needs_special_offset_handling,
    916 		   unsigned char* view,
    917 		   typename elfcpp::Elf_types<size>::Elf_Addr view_address,
    918 		   section_size_type view_size,
    919 		   const Reloc_symbol_changes*) = 0;
    920 
    921   // Scan the relocs during a relocatable link.  The parameters are
    922   // like scan_relocs, with an additional Relocatable_relocs
    923   // parameter, used to record the disposition of the relocs.
    924   virtual void
    925   scan_relocatable_relocs(Symbol_table* symtab,
    926 			  Layout* layout,
    927 			  Sized_relobj_file<size, big_endian>* object,
    928 			  unsigned int data_shndx,
    929 			  unsigned int sh_type,
    930 			  const unsigned char* prelocs,
    931 			  size_t reloc_count,
    932 			  Output_section* output_section,
    933 			  bool needs_special_offset_handling,
    934 			  size_t local_symbol_count,
    935 			  const unsigned char* plocal_symbols,
    936 			  Relocatable_relocs*) = 0;
    937 
    938   // Scan the relocs for --emit-relocs.  The parameters are
    939   // like scan_relocatable_relocs.
    940   virtual void
    941   emit_relocs_scan(Symbol_table* symtab,
    942 		   Layout* layout,
    943 		   Sized_relobj_file<size, big_endian>* object,
    944 		   unsigned int data_shndx,
    945 		   unsigned int sh_type,
    946 		   const unsigned char* prelocs,
    947 		   size_t reloc_count,
    948 		   Output_section* output_section,
    949 		   bool needs_special_offset_handling,
    950 		   size_t local_symbol_count,
    951 		   const unsigned char* plocal_syms,
    952 		   Relocatable_relocs* rr) = 0;
    953 
    954   // Emit relocations for a section during a relocatable link, and for
    955   // --emit-relocs.  The parameters are like relocate_section, with
    956   // additional parameters for the view of the output reloc section.
    957   virtual void
    958   relocate_relocs(const Relocate_info<size, big_endian>*,
    959 		  unsigned int sh_type,
    960 		  const unsigned char* prelocs,
    961 		  size_t reloc_count,
    962 		  Output_section* output_section,
    963 		  typename elfcpp::Elf_types<size>::Elf_Off
    964                     offset_in_output_section,
    965 		  unsigned char* view,
    966 		  typename elfcpp::Elf_types<size>::Elf_Addr view_address,
    967 		  section_size_type view_size,
    968 		  unsigned char* reloc_view,
    969 		  section_size_type reloc_view_size) = 0;
    970 
    971   // Perform target-specific processing in a relocatable link.  This is
    972   // only used if we use the relocation strategy RELOC_SPECIAL.
    973   // RELINFO points to a Relocation_info structure. SH_TYPE is the relocation
    974   // section type. PRELOC_IN points to the original relocation.  RELNUM is
    975   // the index number of the relocation in the relocation section.
    976   // OUTPUT_SECTION is the output section to which the relocation is applied.
    977   // OFFSET_IN_OUTPUT_SECTION is the offset of the relocation input section
    978   // within the output section.  VIEW points to the output view of the
    979   // output section.  VIEW_ADDRESS is output address of the view.  VIEW_SIZE
    980   // is the size of the output view and PRELOC_OUT points to the new
    981   // relocation in the output object.
    982   //
    983   // A target only needs to override this if the generic code in
    984   // target-reloc.h cannot handle some relocation types.
    985 
    986   virtual void
    987   relocate_special_relocatable(const Relocate_info<size, big_endian>*
    988 				/*relinfo */,
    989 			       unsigned int /* sh_type */,
    990 			       const unsigned char* /* preloc_in */,
    991 			       size_t /* relnum */,
    992 			       Output_section* /* output_section */,
    993 			       typename elfcpp::Elf_types<size>::Elf_Off
    994                                  /* offset_in_output_section */,
    995 			       unsigned char* /* view */,
    996 			       typename elfcpp::Elf_types<size>::Elf_Addr
    997 				 /* view_address */,
    998 			       section_size_type /* view_size */,
    999 			       unsigned char* /* preloc_out*/)
   1000   { gold_unreachable(); }
   1001 
   1002   // Return the number of entries in the GOT.  This is only used for
   1003   // laying out the incremental link info sections.  A target needs
   1004   // to implement this to support incremental linking.
   1005 
   1006   virtual unsigned int
   1007   got_entry_count() const
   1008   { gold_unreachable(); }
   1009 
   1010   // Return the number of entries in the PLT.  This is only used for
   1011   // laying out the incremental link info sections.  A target needs
   1012   // to implement this to support incremental linking.
   1013 
   1014   virtual unsigned int
   1015   plt_entry_count() const
   1016   { gold_unreachable(); }
   1017 
   1018   // Return the offset of the first non-reserved PLT entry.  This is
   1019   // only used for laying out the incremental link info sections.
   1020   // A target needs to implement this to support incremental linking.
   1021 
   1022   virtual unsigned int
   1023   first_plt_entry_offset() const
   1024   { gold_unreachable(); }
   1025 
   1026   // Return the size of each PLT entry.  This is only used for
   1027   // laying out the incremental link info sections.  A target needs
   1028   // to implement this to support incremental linking.
   1029 
   1030   virtual unsigned int
   1031   plt_entry_size() const
   1032   { gold_unreachable(); }
   1033 
   1034   // Return the size of each GOT entry.  This is only used for
   1035   // laying out the incremental link info sections.  A target needs
   1036   // to implement this if its GOT size is different.
   1037 
   1038   virtual unsigned int
   1039   got_entry_size() const
   1040   { return size / 8; }
   1041 
   1042   // Create the GOT and PLT sections for an incremental update.
   1043   // A target needs to implement this to support incremental linking.
   1044 
   1045   virtual Output_data_got_base*
   1046   init_got_plt_for_update(Symbol_table*,
   1047 			  Layout*,
   1048 			  unsigned int /* got_count */,
   1049 			  unsigned int /* plt_count */)
   1050   { gold_unreachable(); }
   1051 
   1052   // Reserve a GOT entry for a local symbol, and regenerate any
   1053   // necessary dynamic relocations.
   1054   virtual void
   1055   reserve_local_got_entry(unsigned int /* got_index */,
   1056 			  Sized_relobj<size, big_endian>* /* obj */,
   1057 			  unsigned int /* r_sym */,
   1058 			  unsigned int /* got_type */)
   1059   { gold_unreachable(); }
   1060 
   1061   // Reserve a GOT entry for a global symbol, and regenerate any
   1062   // necessary dynamic relocations.
   1063   virtual void
   1064   reserve_global_got_entry(unsigned int /* got_index */, Symbol* /* gsym */,
   1065 			   unsigned int /* got_type */)
   1066   { gold_unreachable(); }
   1067 
   1068   // Register an existing PLT entry for a global symbol.
   1069   // A target needs to implement this to support incremental linking.
   1070 
   1071   virtual void
   1072   register_global_plt_entry(Symbol_table*, Layout*,
   1073 			    unsigned int /* plt_index */,
   1074 			    Symbol*)
   1075   { gold_unreachable(); }
   1076 
   1077   // Force a COPY relocation for a given symbol.
   1078   // A target needs to implement this to support incremental linking.
   1079 
   1080   virtual void
   1081   emit_copy_reloc(Symbol_table*, Symbol*, Output_section*, off_t)
   1082   { gold_unreachable(); }
   1083 
   1084   // Apply an incremental relocation.
   1085 
   1086   virtual void
   1087   apply_relocation(const Relocate_info<size, big_endian>* /* relinfo */,
   1088 		   typename elfcpp::Elf_types<size>::Elf_Addr /* r_offset */,
   1089 		   unsigned int /* r_type */,
   1090 		   typename elfcpp::Elf_types<size>::Elf_Swxword /* r_addend */,
   1091 		   const Symbol* /* gsym */,
   1092 		   unsigned char* /* view */,
   1093 		   typename elfcpp::Elf_types<size>::Elf_Addr /* address */,
   1094 		   section_size_type /* view_size */)
   1095   { gold_unreachable(); }
   1096 
   1097   // Handle target specific gc actions when adding a gc reference from
   1098   // SRC_OBJ, SRC_SHNDX to a location specified by DST_OBJ, DST_SHNDX
   1099   // and DST_OFF.
   1100   void
   1101   gc_add_reference(Symbol_table* symtab,
   1102 		   Relobj* src_obj,
   1103 		   unsigned int src_shndx,
   1104 		   Relobj* dst_obj,
   1105 		   unsigned int dst_shndx,
   1106 		   typename elfcpp::Elf_types<size>::Elf_Addr dst_off) const
   1107   {
   1108     this->do_gc_add_reference(symtab, src_obj, src_shndx,
   1109 			      dst_obj, dst_shndx, dst_off);
   1110   }
   1111 
   1112   // Return the r_sym field from a relocation.
   1113   // Most targets can use the default version of this routine,
   1114   // but some targets have a non-standard r_info field, and will
   1115   // need to provide a target-specific version.
   1116   virtual unsigned int
   1117   get_r_sym(const unsigned char* preloc) const
   1118   {
   1119     // Since REL and RELA relocs share the same structure through
   1120     // the r_info field, we can just use REL here.
   1121     elfcpp::Rel<size, big_endian> rel(preloc);
   1122     return elfcpp::elf_r_sym<size>(rel.get_r_info());
   1123   }
   1124 
   1125  protected:
   1126   Sized_target(const Target::Target_info* pti)
   1127     : Target(pti)
   1128   {
   1129     gold_assert(pti->size == size);
   1130     gold_assert(pti->is_big_endian ? big_endian : !big_endian);
   1131   }
   1132 
   1133   // Set the EI_OSABI field if requested.
   1134   virtual void
   1135   do_adjust_elf_header(unsigned char*, int);
   1136 
   1137   // Handle target specific gc actions when adding a gc reference.
   1138   virtual void
   1139   do_gc_add_reference(Symbol_table*, Relobj*, unsigned int,
   1140 		      Relobj*, unsigned int,
   1141 		      typename elfcpp::Elf_types<size>::Elf_Addr) const
   1142   { }
   1143 
   1144   virtual void
   1145   do_function_location(Symbol_location*) const
   1146   { }
   1147 };
   1148 
   1149 } // End namespace gold.
   1150 
   1151 #endif // !defined(GOLD_TARGET_H)
   1152