// target.h -- target support for gold -*- C++ -*-
-// Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
is_default_stack_executable() const
{ return this->pti_->is_default_stack_executable; }
+ // Return a character which may appear as a prefix for a wrap
+ // symbol. If this character appears, we strip it when checking for
+ // wrapping and add it back when forming the final symbol name.
+ // This should be '\0' if not special prefix is required, which is
+ // the normal case.
+ char
+ wrap_char() const
+ { return this->pti_->wrap_char; }
+
// This is called to tell the target to complete any sections it is
// handling. After this all sections must have their final size.
void
// Return whether SYM is known to be defined by the ABI. This is
// used to avoid inappropriate warnings about undefined symbols.
bool
- is_defined_by_abi(Symbol* sym) const
+ is_defined_by_abi(const Symbol* sym) const
{ return this->do_is_defined_by_abi(sym); }
+ // 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
+ { return this->do_adjust_elf_header(view, len); }
+
protected:
// This struct holds the constant information for a child class. We
// use a struct to avoid the overhead of virtual function calls for
// Whether an object file with no .note.GNU-stack sections implies
// that the stack should be executable.
bool is_default_stack_executable;
+ // Prefix character to strip when checking for wrapping.
+ char wrap_char;
// The default dynamic linker name.
const char* dynamic_linker;
// The default text segment address.
// Virtual function which may be implemented by the child class.
virtual bool
- do_is_defined_by_abi(Symbol*) const
+ do_is_defined_by_abi(const Symbol*) const
{ return false; }
+ // Adjust the output file header before it is written out. VIEW
+ // points to the header in external form. LEN is the length, and
+ // will be one of the values of elfcpp::Elf_sizes<size>::ehdr_size.
+ // By default, we do nothing.
+ virtual void
+ do_adjust_elf_header(unsigned char*, int) const
+ { }
+
private:
Target(const Target&);
Target& operator=(const Target&);
const char*)
{ gold_unreachable(); }
+ // Process the relocs for a section, and record information of the
+ // mapping from source to destination sections. This mapping is later
+ // used to determine unreferenced garbage sections. This procedure is
+ // only called during garbage collection.
+ virtual void
+ gc_process_relocs(const General_options& options,
+ Symbol_table* symtab,
+ Layout* layout,
+ Sized_relobj<size, big_endian>* object,
+ unsigned int data_shndx,
+ unsigned int sh_type,
+ const unsigned char* prelocs,
+ size_t reloc_count,
+ Output_section* output_section,
+ bool needs_special_offset_handling,
+ size_t local_symbol_count,
+ const unsigned char* plocal_symbols) = 0;
+
// Scan the relocs for a section, and record any information
// required for the symbol. OPTIONS is the command line options.
// SYMTAB is the symbol table. OBJECT is the object in which the