#ifndef GOLD_TARGET_H
#define GOLD_TARGET_H
-#include <cassert>
-
#include "elfcpp.h"
namespace gold
common_pagesize() const
{ return this->pti_->common_pagesize; }
+ // This is called to tell the target to complete any sections it is
+ // handling. After this all sections must have their final size.
+ void
+ finalize_sections(const General_options* options, Layout* layout)
+ { return this->do_finalize_sections(options, layout); }
+
protected:
// This struct holds the constant information for a child class. We
// use a struct to avoid the overhead of virtual function calls for
: pti_(pti)
{ }
+ // Virtual function which may be implemented by the child class.
+ virtual void
+ do_finalize_sections(const General_options*, Layout*)
+ { }
+
private:
Target(const Target&);
Target& operator=(const Target&);
// symbol table. This will only be called if has_make_symbol()
// returns true.
virtual Sized_symbol<size>*
- make_symbol()
- { abort(); }
+ make_symbol() const
+ { gold_unreachable(); }
// Resolve a symbol for the target. This should be overridden by a
// target which needs to take special action. TO is the
// pre-existing symbol. SYM is the new symbol, seen in OBJECT.
- // This will only be called if has_resolve() returns true.
+ // VERSION is the version of SYM. This will only be called if
+ // has_resolve() returns true.
virtual void
- resolve(Symbol*, const elfcpp::Sym<size, big_endian>&, Object*)
- { abort(); }
+ resolve(Symbol*, const elfcpp::Sym<size, big_endian>&, Object*,
+ const char*)
+ { gold_unreachable(); }
// 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
- // section appears. SH_TYPE is the type of the relocation section,
+ // section appears. DATA_SHNDX is the section index that these
+ // relocs apply to. SH_TYPE is the type of the relocation section,
// SHT_REL or SHT_RELA. PRELOCS points to the relocation data.
// RELOC_COUNT is the number of relocs. LOCAL_SYMBOL_COUNT is the
// number of local symbols. PLOCAL_SYMBOLS points to the local
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,
Sized_target(const Target::Target_info* pti)
: Target(pti)
{
- assert(pti->size == size);
- assert(pti->is_big_endian ? big_endian : !big_endian);
+ gold_assert(pti->size == size);
+ gold_assert(pti->is_big_endian ? big_endian : !big_endian);
}
};