// pointers.
unsigned int
-Versions::version_index(const Stringpool* dynpool, const Symbol* sym) const
+Versions::version_index(const General_options* options,
+ const Stringpool* dynpool, const Symbol* sym) const
{
Stringpool::Key version_key;
const char* version = dynpool->find(sym->version(), &version_key);
Key k;
if (!sym->is_from_dynobj())
- k = Key(version_key, 0);
+ {
+ if (!options->is_shared())
+ return elfcpp::VER_NDX_GLOBAL;
+ k = Key(version_key, 0);
+ }
else
{
Object* object = sym->object();
template<int size, bool big_endian>
void
-Versions::symbol_section_contents(const Stringpool* dynpool,
+Versions::symbol_section_contents(const General_options* options,
+ const Stringpool* dynpool,
unsigned int local_symcount,
const std::vector<Symbol*>& syms,
unsigned char** pp,
if (version == NULL)
version_index = elfcpp::VER_NDX_GLOBAL;
else
- version_index = this->version_index(dynpool, *p);
+ version_index = this->version_index(options, dynpool, *p);
elfcpp::Swap<16, big_endian>::writeval(pbuf + (*p)->dynsym_index() * 2,
version_index);
}
template
void
Versions::symbol_section_contents<32, false>(
+ const General_options*,
const Stringpool*,
unsigned int,
const std::vector<Symbol*>&,
template
void
Versions::symbol_section_contents<32, true>(
+ const General_options*,
const Stringpool*,
unsigned int,
const std::vector<Symbol*>&,
template
void
Versions::symbol_section_contents<64, false>(
+ const General_options*,
const Stringpool*,
unsigned int,
const std::vector<Symbol*>&,
template
void
Versions::symbol_section_contents<64, true>(
+ const General_options*,
const Stringpool*,
unsigned int,
const std::vector<Symbol*>&,
// version section (.gnu.version).
template<int size, bool big_endian>
void
- symbol_section_contents(const Stringpool*, unsigned int local_symcount,
+ symbol_section_contents(const General_options*, const Stringpool*,
+ unsigned int local_symcount,
const std::vector<Symbol*>& syms,
unsigned char**, unsigned int*
ACCEPT_SIZE_ENDIAN) const;
// Return the version index to use for SYM.
unsigned int
- version_index(const Stringpool*, const Symbol* sym) const;
+ version_index(const General_options*, const Stringpool*,
+ const Symbol* sym) const;
// We keep a hash table mapping canonicalized name/version pairs to
// a version base.
unsigned char* vbuf;
unsigned int vsize;
versions->symbol_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
- &this->dynpool_, local_symcount, dynamic_symbols, &vbuf, &vsize
- SELECT_SIZE_ENDIAN(size, big_endian));
+ &this->options_, &this->dynpool_, local_symcount, dynamic_symbols,
+ &vbuf, &vsize SELECT_SIZE_ENDIAN(size, big_endian));
Output_section_data* vdata = new Output_data_const_buffer(vbuf, vsize, 2);