// dynobj.h -- dynamic object support for gold -*- C++ -*-
-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2006-2018 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
this->unknown_needed_ = set ? UNKNOWN_NEEDED_TRUE : UNKNOWN_NEEDED_FALSE;
}
+ // Return the word size of the object file.
+ int
+ elfsize() const
+ { gold_unreachable(); }
+
+ // Return TRUE if this is a big-endian object file.
+ bool
+ is_big_endian() const
+ { gold_unreachable(); }
+
// Compute the ELF hash code for a string.
static uint32_t
elf_hash(const char*);
unsigned char** pphash, unsigned int* phashlen);
protected:
+ // Return a pointer to this object.
+ virtual Dynobj*
+ do_dynobj()
+ { return this; }
+
// Set the DT_SONAME string.
void
set_soname_string(const char* s)
bool for_gnu_hash_table);
// Sized version of create_elf_hash_table.
- template<bool big_endian>
+ template<int size, bool big_endian>
static void
sized_create_elf_hash_table(const std::vector<uint32_t>& bucket,
const std::vector<uint32_t>& chain,
class Sized_dynobj : public Dynobj
{
public:
- typedef typename Sized_relobj<size, big_endian>::Symbols Symbols;
+ typedef typename Sized_relobj_file<size, big_endian>::Symbols Symbols;
Sized_dynobj(const std::string& name, Input_file* input_file, off_t offset,
const typename elfcpp::Ehdr<size, big_endian>&);
void
do_add_symbols(Symbol_table*, Read_symbols_data*, Layout*);
+ Archive::Should_include
+ do_should_include_member(Symbol_table* symtab, Layout*, Read_symbols_data*,
+ std::string* why);
+
+ // Iterate over global symbols, calling a visitor class V for each.
+ void
+ do_for_all_global_symbols(Read_symbols_data* sd,
+ Library_base::Symbol_visitor_base* v);
+
+ // Iterate over local symbols, calling a visitor class V for each GOT offset
+ // associated with a local symbol.
+ void
+ do_for_all_local_got_entries(Got_offset_list::Visitor* v) const;
+
// Get the size of a section.
uint64_t
do_section_size(unsigned int shndx)
// Get the name of a section.
std::string
- do_section_name(unsigned int shndx)
+ do_section_name(unsigned int shndx) const
{ return this->elf_file_.section_name(shndx); }
// Return a view of the contents of a section. Set *PLEN to the
// size.
- Object::Location
- do_section_contents(unsigned int shndx)
- { return this->elf_file_.section_contents(shndx); }
+ const unsigned char*
+ do_section_contents(unsigned int shndx, section_size_type* plen,
+ bool cache)
+ {
+ Location loc(this->elf_file_.section_contents(shndx));
+ *plen = convert_to_section_size_type(loc.data_size);
+ if (*plen == 0)
+ {
+ static const unsigned char empty[1] = { '\0' };
+ return empty;
+ }
+ return this->get_view(loc.file_offset, *plen, true, cache);
+ }
// Return section flags.
uint64_t
do_get_global_symbols() const
{ return this->symbols_; }
+ protected:
+ // Read the symbols. This is common code for all target-specific
+ // overrides of do_read_symbols().
+ void
+ base_read_symbols(Read_symbols_data*);
+
private:
// For convenience.
typedef Sized_dynobj<size, big_endian> This;
// Handle a symbol SYM defined with version VERSION.
void
- add_def(const Symbol* sym, const char* version, Stringpool::Key);
+ add_def(Stringpool*, const Symbol* sym, const char* version,
+ Stringpool::Key);
// Add a reference to version NAME in file FILENAME.
void
// Contents of --version-script, if passed, or NULL.
const Version_script_info& version_script_;
// Whether we need to insert a base version. This is only used for
- // shared libaries and is cleared when the base version is defined.
+ // shared libraries and is cleared when the base version is defined.
bool needs_base_version_;
};