template<int size, bool big_endian>
unsigned char*
-Verdef::write(const Stringpool* dynpool, bool is_last, unsigned char* pb) const
+Verdef::write(const Stringpool* dynpool, bool is_last, unsigned char* pb
+ ACCEPT_SIZE_ENDIAN) const
{
const int verdef_size = elfcpp::Elf_sizes<size>::verdef_size;
const int verdaux_size = elfcpp::Elf_sizes<size>::verdaux_size;
template<int size, bool big_endian>
unsigned char*
Verneed::write(const Stringpool* dynpool, bool is_last,
- unsigned char* pb) const
+ unsigned char* pb ACCEPT_SIZE_ENDIAN) const
{
const int verneed_size = elfcpp::Elf_sizes<size>::verneed_size;
const int vernaux_size = elfcpp::Elf_sizes<size>::vernaux_size;
const char* version = dynpool->find(sym->version(), &version_key);
gold_assert(version != NULL);
- Version_table::const_iterator p;
+ Key k;
if (!sym->is_from_dynobj())
- {
- Key k(version_key, 0);
- p = this->version_table_.find(k);
- }
+ k = Key(version_key, 0);
else
{
Object* object = sym->object();
const char* filename = dynpool->find(dynobj->soname(), &filename_key);
gold_assert(filename != NULL);
- Key k(version_key, filename_key);
- p = this->version_table_.find(k);
+ k = Key(version_key, filename_key);
}
+ Version_table::const_iterator p = this->version_table_.find(k);
gold_assert(p != this->version_table_.end());
return p->second->index();
unsigned int local_symcount,
const std::vector<Symbol*>& syms,
unsigned char** pp,
- unsigned int* psize) const
+ unsigned int* psize
+ ACCEPT_SIZE_ENDIAN) const
{
gold_assert(this->is_finalized_);
void
Versions::def_section_contents(const Stringpool* dynpool,
unsigned char** pp, unsigned int* psize,
- unsigned int* pentries) const
+ unsigned int* pentries
+ ACCEPT_SIZE_ENDIAN) const
{
gold_assert(this->is_finalized_);
gold_assert(!this->defs_.empty());
for (p = this->defs_.begin(), i = 0;
p != this->defs_.end();
++p, ++i)
- pb = (*p)->write<size, big_endian>(dynpool,
- i + 1 >= this->defs_.size(),
- pb);
+ pb = (*p)->write SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ dynpool, i + 1 >= this->defs_.size(), pb
+ SELECT_SIZE_ENDIAN(size, big_endian));
gold_assert(static_cast<unsigned int>(pb - pbuf) == sz);
void
Versions::need_section_contents(const Stringpool* dynpool,
unsigned char** pp, unsigned int *psize,
- unsigned int *pentries) const
+ unsigned int *pentries
+ ACCEPT_SIZE_ENDIAN) const
{
gold_assert(this->is_finalized_);
gold_assert(!this->needs_.empty());
for (p = this->needs_.begin(), i = 0;
p != this->needs_.end();
++p, ++i)
- pb = (*p)->write<size, big_endian>(dynpool,
- i + 1 >= this->needs_.size(),
- pb);
+ pb = (*p)->write SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ dynpool, i + 1 >= this->needs_.size(), pb
+ SELECT_SIZE_ENDIAN(size, big_endian));
gold_assert(static_cast<unsigned int>(pb - pbuf) == sz);
template
void
-Versions::symbol_section_contents<32, false>(const Stringpool*,
- unsigned int,
- const std::vector<Symbol*>&,
- unsigned char**,
- unsigned int*) const;
+Versions::symbol_section_contents<32, false>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, false)) const;
template
void
-Versions::symbol_section_contents<32, true>(const Stringpool*,
- unsigned int,
- const std::vector<Symbol*>&,
- unsigned char**,
- unsigned int*) const;
+Versions::symbol_section_contents<32, true>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, true)) const;
template
void
-Versions::symbol_section_contents<64, false>(const Stringpool*,
- unsigned int,
- const std::vector<Symbol*>&,
- unsigned char**,
- unsigned int*) const;
+Versions::symbol_section_contents<64, false>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, false)) const;
template
void
-Versions::symbol_section_contents<64, true>(const Stringpool*,
- unsigned int,
- const std::vector<Symbol*>&,
- unsigned char**,
- unsigned int*) const;
+Versions::symbol_section_contents<64, true>(
+ const Stringpool*,
+ unsigned int,
+ const std::vector<Symbol*>&,
+ unsigned char**,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, true)) const;
template
void
-Versions::def_section_contents<32, false>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::def_section_contents<32, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, false)) const;
template
void
-Versions::def_section_contents<32, true>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::def_section_contents<32, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, true)) const;
template
void
-Versions::def_section_contents<64, false>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::def_section_contents<64, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, false)) const;
template
void
-Versions::def_section_contents<64, true>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::def_section_contents<64, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, true)) const;
template
void
-Versions::need_section_contents<32, false>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::need_section_contents<32, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, false)) const;
template
void
-Versions::need_section_contents<32, true>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::need_section_contents<32, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(32, true)) const;
template
void
-Versions::need_section_contents<64, false>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::need_section_contents<64, false>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, false)) const;
template
void
-Versions::need_section_contents<64, true>(const Stringpool*,
- unsigned char**,
- unsigned int*,
- unsigned int*) const;
+Versions::need_section_contents<64, true>(
+ const Stringpool*,
+ unsigned char**,
+ unsigned int*,
+ unsigned int*
+ ACCEPT_SIZE_ENDIAN_EXPLICIT(64, true)) const;
} // End namespace gold.
// Write contents to buffer.
template<int size, bool big_endian>
unsigned char*
- write(const Stringpool*, bool is_last, unsigned char*) const;
+ write(const Stringpool*, bool is_last, unsigned char*
+ ACCEPT_SIZE_ENDIAN) const;
private:
Verdef(const Verdef&);
// Write contents to buffer.
template<int size, bool big_endian>
unsigned char*
- write(const Stringpool*, bool is_last, unsigned char*) const;
+ write(const Stringpool*, bool is_last, unsigned char*
+ ACCEPT_SIZE_ENDIAN) const;
private:
Verneed(const Verneed&);
void
symbol_section_contents(const Stringpool*, unsigned int local_symcount,
const std::vector<Symbol*>& syms,
- unsigned char**, unsigned int*) const;
+ unsigned char**, unsigned int*
+ ACCEPT_SIZE_ENDIAN) const;
// Build an allocated buffer holding the contents of the version
// definition section (.gnu.version_d).
template<int size, bool big_endian>
void
def_section_contents(const Stringpool*, unsigned char**,
- unsigned int* psize, unsigned int* pentries) const;
+ unsigned int* psize, unsigned int* pentries
+ ACCEPT_SIZE_ENDIAN) const;
// Build an allocated buffer holding the contents of the version
// reference section (.gnu.version_r).
template<int size, bool big_endian>
void
need_section_contents(const Stringpool*, unsigned char**,
- unsigned int* psize, unsigned int* pentries) const;
+ unsigned int* psize, unsigned int* pentries
+ ACCEPT_SIZE_ENDIAN) const;
private:
// The type of the list of version definitions.
#define SELECT_SIZE_ONLY(size)
#define ACCEPT_SIZE
#define ACCEPT_SIZE_ONLY
+#define ACCEPT_SIZE_EXPLICIT(size)
#define SELECT_SIZE_ENDIAN_NAME(size, big_endian) <size, big_endian>
#define SELECT_SIZE_ENDIAN(size, big_endian)
#define SELECT_SIZE_ENDIAN_ONLY(size, big_endian)
#define ACCEPT_SIZE_ENDIAN
#define ACCEPT_SIZE_ENDIAN_ONLY
+#define ACCEPT_SIZE_ENDIAN_EXPLICIT(size, big_endian)
#else // !defined(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS)
#define SELECT_SIZE_ONLY(size) Select_size<size>()
#define ACCEPT_SIZE , Select_size<size>
#define ACCEPT_SIZE_ONLY Select_size<size>
+#define ACCEPT_SIZE_EXPLICIT(size) , Select_size<size>
#define SELECT_SIZE_ENDIAN_NAME(size, big_endian)
#define SELECT_SIZE_ENDIAN(size, big_endian) \
Select_size_endian<size, big_endian>()
#define ACCEPT_SIZE_ENDIAN , Select_size_endian<size, big_endian>
#define ACCEPT_SIZE_ENDIAN_ONLY Select_size_endian<size, big_endian>
+#define ACCEPT_SIZE_ENDIAN_EXPLICIT(size, big_endian) \
+ , Select_size_endian<size, big_endian>
#endif // !defined(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS)
if (target->get_size() == 32)
{
if (target->is_big_endian())
- this->sized_create_version_sections<32, true>(versions,
- local_symcount,
- dynamic_symbols,
- dynstr);
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(32, true)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(32, true));
else
- this->sized_create_version_sections<32, false>(versions,
- local_symcount,
- dynamic_symbols,
- dynstr);
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(32, false)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(32, false));
}
else if (target->get_size() == 64)
{
if (target->is_big_endian())
- this->sized_create_version_sections<64, true>(versions,
- local_symcount,
- dynamic_symbols,
- dynstr);
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(64, true)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(64, true));
else
- this->sized_create_version_sections<64, false>(versions,
- local_symcount,
- dynamic_symbols,
- dynstr);
+ this->sized_create_version_sections SELECT_SIZE_ENDIAN_NAME(64, false)(
+ versions, local_symcount, dynamic_symbols, dynstr
+ SELECT_SIZE_ENDIAN(64, false));
}
else
gold_unreachable();
const Versions* versions,
unsigned int local_symcount,
const std::vector<Symbol*>& dynamic_symbols,
- const Output_section* dynstr)
+ const Output_section* dynstr
+ ACCEPT_SIZE_ENDIAN)
{
const char* vname = this->namepool_.add(".gnu.version", NULL);
Output_section* vsec = this->make_output_section(vname,
unsigned char* vbuf;
unsigned int vsize;
- versions->symbol_section_contents<size, big_endian>(&this->dynpool_,
- local_symcount,
- dynamic_symbols,
- &vbuf, &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));
Output_section_data* vdata = new Output_data_const_buffer(vbuf, vsize, 2);
unsigned char* vdbuf;
unsigned int vdsize;
unsigned int vdentries;
- versions->def_section_contents<size, big_endian>(&this->dynpool_,
- &vdbuf, &vdsize,
- &vdentries);
+ versions->def_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)(
+ &this->dynpool_, &vdbuf, &vdsize, &vdentries
+ SELECT_SIZE_ENDIAN(size, big_endian));
Output_section_data* vddata = new Output_data_const_buffer(vdbuf,
vdsize,
unsigned char* vnbuf;
unsigned int vnsize;
unsigned int vnentries;
- versions->need_section_contents<size, big_endian>(&this->dynpool_,
- &vnbuf, &vnsize,
- &vnentries);
+ versions->need_section_contents SELECT_SIZE_ENDIAN_NAME(size, big_endian)
+ (&this->dynpool_, &vnbuf, &vnsize, &vnentries
+ SELECT_SIZE_ENDIAN(size, big_endian));
Output_section_data* vndata = new Output_data_const_buffer(vnbuf,
vnsize,
sized_create_version_sections(const Versions* versions,
unsigned int local_symcount,
const std::vector<Symbol*>& dynamic_symbols,
- const Output_section* dynstr);
+ const Output_section* dynstr
+ ACCEPT_SIZE_ENDIAN);
// Return whether to include this section in the link.
template<int size, bool big_endian>