X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fdynobj.h;h=1f3243f25d9f1e7b927efbe9560c3194d81c436a;hb=cc643b88f142802bf907b2f28ff47c4d1bf55e8b;hp=71d1b68f60cf7963660fd13a2abc29a271a98575;hpb=dde3f402cfe649f271730fa5de983ee663743ea3;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/dynobj.h b/gold/dynobj.h index 71d1b68f60..1f3243f25d 100644 --- a/gold/dynobj.h +++ b/gold/dynobj.h @@ -1,6 +1,6 @@ // dynobj.h -- dynamic object support for gold -*- C++ -*- -// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -96,6 +96,11 @@ class Dynobj : public Object 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) @@ -156,7 +161,7 @@ template class Sized_dynobj : public Dynobj { public: - typedef typename Sized_relobj::Symbols Symbols; + typedef typename Sized_relobj_file::Symbols Symbols; Sized_dynobj(const std::string& name, Input_file* input_file, off_t offset, const typename elfcpp::Ehdr&); @@ -177,6 +182,20 @@ class Sized_dynobj : public Dynobj 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) @@ -360,9 +379,9 @@ class Verdef : public Version_base { public: Verdef(const char* name, const std::vector& deps, - bool is_base, bool is_weak, bool is_symbol_created) + bool is_base, bool is_weak, bool is_info, bool is_symbol_created) : name_(name), deps_(deps), is_base_(is_base), is_weak_(is_weak), - is_symbol_created_(is_symbol_created) + is_info_(is_info), is_symbol_created_(is_symbol_created) { } // Return the version name. @@ -391,6 +410,11 @@ class Verdef : public Version_base clear_weak() { this->is_weak_ = false; } + // Return whether this definition is informational. + bool + is_info() const + { return this->is_info_; } + // Return whether a version symbol has been created for this // definition. bool @@ -419,6 +443,8 @@ class Verdef : public Version_base bool is_base_; // Whether this version is weak. bool is_weak_; + // Whether this version is informational. + bool is_info_; // Whether a version symbol has been created. bool is_symbol_created_; }; @@ -626,7 +652,7 @@ class Versions // 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_; };