// target.h -- target support for gold -*- C++ -*-
-// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
// Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
class Output_section;
class Input_objects;
class Task;
+struct Symbol_location;
// The abstract class for target specific handling.
// Adjust the output file header before it is written out. VIEW
// points to the header in external form. LEN is the length.
void
- adjust_elf_header(unsigned char* view, int len) const
+ adjust_elf_header(unsigned char* view, int len)
{ return this->do_adjust_elf_header(view, len); }
// Return address and size to plug into eh_frame FDEs associated with a PLT.
tls_offset_for_global(Symbol* gsym, unsigned int got_indx) const
{ return do_tls_offset_for_global(gsym, got_indx); }
+ // For targets that use function descriptors, if LOC is the location
+ // of a function, modify it to point at the function entry location.
+ void
+ function_location(Symbol_location* loc) const
+ { return do_function_location(loc); }
+
// Return whether this target can use relocation types to determine
// if a function's address is taken.
bool
gc_mark_symbol(Symbol_table* symtab, Symbol* sym) const
{ this->do_gc_mark_symbol(symtab, sym); }
+ // Return the name of the entry point symbol.
+ const char*
+ entry_symbol_name() const
+ { return this->pti_->entry_symbol_name; }
+
protected:
// This struct holds the constant information for a child class. We
// use a struct to avoid the overhead of virtual function calls for
const char* attributes_section;
// Vendor name of vendor attributes.
const char* attributes_vendor;
+ // Name of the main entry point to the program.
+ const char* entry_symbol_name;
};
Target(const Target_info* pti)
// By default, we set the EI_OSABI field if requested (in
// Sized_target).
virtual void
- do_adjust_elf_header(unsigned char*, int) const = 0;
+ do_adjust_elf_header(unsigned char*, int) = 0;
// Return address and size to plug into eh_frame FDEs associated with a PLT.
virtual void
do_tls_offset_for_global(Symbol*, unsigned int) const
{ gold_unreachable(); }
+ virtual void
+ do_function_location(Symbol_location*) const = 0;
+
// Virtual function which may be overriden by the child class.
virtual bool
do_can_check_for_function_pointers() const
// Set the EI_OSABI field if requested.
virtual void
- do_adjust_elf_header(unsigned char*, int) const;
+ do_adjust_elf_header(unsigned char*, int);
// Handle target specific gc actions when adding a gc reference.
virtual void
Object*, unsigned int,
typename elfcpp::Elf_types<size>::Elf_Addr) const
{ }
+
+ virtual void
+ do_function_location(Symbol_location*) const
+ { }
};
} // End namespace gold.