OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [gold/] [x86_64.cc] - Diff between revs 27 and 148

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 27 Rev 148
Line 403... Line 403...
  void
  void
  reserve_global_got_entry(unsigned int got_index, Symbol* gsym,
  reserve_global_got_entry(unsigned int got_index, Symbol* gsym,
                           unsigned int got_type);
                           unsigned int got_type);
 
 
  // Register an existing PLT entry for a global symbol.
  // Register an existing PLT entry for a global symbol.
  // A target needs to implement this to support incremental linking.
 
  void
  void
  register_global_plt_entry(unsigned int plt_index, Symbol* gsym);
  register_global_plt_entry(unsigned int plt_index, Symbol* gsym);
 
 
 
  // Force a COPY relocation for a given symbol.
 
  void
 
  emit_copy_reloc(Symbol_table*, Symbol*, Output_section*, off_t);
 
 
  // Apply an incremental relocation.
  // Apply an incremental relocation.
  void
  void
  apply_relocation(const Relocate_info<64, false>* relinfo,
  apply_relocation(const Relocate_info<64, false>* relinfo,
                   elfcpp::Elf_types<64>::Elf_Addr r_offset,
                   elfcpp::Elf_types<64>::Elf_Addr r_offset,
                   unsigned int r_type,
                   unsigned int r_type,
Line 910... Line 913...
  else
  else
    {
    {
      // For incremental updates, find an available slot.
      // For incremental updates, find an available slot.
      plt_offset = this->free_list_.allocate(plt_entry_size, plt_entry_size, 0);
      plt_offset = this->free_list_.allocate(plt_entry_size, plt_entry_size, 0);
      if (plt_offset == -1)
      if (plt_offset == -1)
        gold_fatal(_("out of patch space (PLT);"
        gold_fallback(_("out of patch space (PLT);"
                     " relink with --incremental-full"));
                     " relink with --incremental-full"));
 
 
      // The GOT and PLT entries have a 1-1 correspondance, so the GOT offset
      // The GOT and PLT entries have a 1-1 correspondance, so the GOT offset
      // can be calculated from the PLT index, adjusting for the three
      // can be calculated from the PLT index, adjusting for the three
      // reserved entries at the beginning of the GOT.
      // reserved entries at the beginning of the GOT.
Line 1387... Line 1390...
 
 
  unsigned int got_offset = (plt_index + 3) * 8;
  unsigned int got_offset = (plt_index + 3) * 8;
  this->plt_->add_relocation(gsym, got_offset);
  this->plt_->add_relocation(gsym, got_offset);
}
}
 
 
 
// Force a COPY relocation for a given symbol.
 
 
 
void
 
Target_x86_64::emit_copy_reloc(
 
    Symbol_table* symtab, Symbol* sym, Output_section* os, off_t offset)
 
{
 
  this->copy_relocs_.emit_copy_reloc(symtab,
 
                                     symtab->get_sized_symbol<64>(sym),
 
                                     os,
 
                                     offset,
 
                                     this->rela_dyn_section(NULL));
 
}
 
 
// Define the _TLS_MODULE_BASE_ symbol in the TLS segment.
// Define the _TLS_MODULE_BASE_ symbol in the TLS segment.
 
 
void
void
Target_x86_64::define_tls_base_symbol(Symbol_table* symtab, Layout* layout)
Target_x86_64::define_tls_base_symbol(Symbol_table* symtab, Layout* layout)
{
{

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.