mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
gcc 3.2.2 portability hacks.
This commit is contained in:
parent
ead1e4244a
commit
593f47df45
@ -84,11 +84,11 @@ Sort_commons<size>::operator()(const Symbol* pa, const Symbol* pb) const
|
||||
|
||||
const Symbol_table* symtab = this->symtab_;
|
||||
const Sized_symbol<size>* psa;
|
||||
psa = symtab->get_sized_symbol SELECT_SIZE_NAME (pa
|
||||
SELECT_SIZE(size));
|
||||
psa = symtab->get_sized_symbol SELECT_SIZE_NAME(size) (pa
|
||||
SELECT_SIZE(size));
|
||||
const Sized_symbol<size>* psb;
|
||||
psb = symtab->get_sized_symbol SELECT_SIZE_NAME (pb
|
||||
SELECT_SIZE(size));
|
||||
psb = symtab->get_sized_symbol SELECT_SIZE_NAME(size) (pb
|
||||
SELECT_SIZE(size));
|
||||
|
||||
typename Sized_symbol<size>::Size_type sa = psa->symsize();
|
||||
typename Sized_symbol<size>::Size_type sb = psb->symsize();
|
||||
@ -153,8 +153,9 @@ Symbol_table::do_allocate_commons(const General_options&,
|
||||
{
|
||||
any = true;
|
||||
Sized_symbol<size>* ssym;
|
||||
ssym = this->get_sized_symbol SELECT_SIZE_NAME (sym
|
||||
SELECT_SIZE(size));
|
||||
ssym = this->get_sized_symbol SELECT_SIZE_NAME(size) (
|
||||
sym
|
||||
SELECT_SIZE(size));
|
||||
if (ssym->value() > addralign)
|
||||
addralign = ssym->value();
|
||||
}
|
||||
@ -187,8 +188,8 @@ Symbol_table::do_allocate_commons(const General_options&,
|
||||
break;
|
||||
|
||||
Sized_symbol<size>* ssym;
|
||||
ssym = this->get_sized_symbol SELECT_SIZE_NAME (sym
|
||||
SELECT_SIZE(size));
|
||||
ssym = this->get_sized_symbol SELECT_SIZE_NAME(size) (sym
|
||||
SELECT_SIZE(size));
|
||||
|
||||
off = align_address(off, ssym->value());
|
||||
|
||||
|
@ -96,13 +96,13 @@ namespace gold
|
||||
|
||||
#ifdef HAVE_MEMBER_TEMPLATE_SPECIFICATIONS
|
||||
|
||||
#define SELECT_SIZE_NAME <size>
|
||||
#define SELECT_SIZE_NAME(size) <size>
|
||||
#define SELECT_SIZE(size)
|
||||
#define SELECT_SIZE_ONLY(size)
|
||||
#define ACCEPT_SIZE
|
||||
#define ACCEPT_SIZE_ONLY
|
||||
|
||||
#define SELECT_SIZE_ENDIAN_NAME <size, big_endian>
|
||||
#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
|
||||
@ -115,13 +115,13 @@ class Select_size { };
|
||||
template<int size, bool big_endian>
|
||||
class Select_size_endian { };
|
||||
|
||||
#define SELECT_SIZE_NAME
|
||||
#define SELECT_SIZE_NAME(size)
|
||||
#define SELECT_SIZE(size) , Select_size<size>()
|
||||
#define SELECT_SIZE_ONLY(size) Select_size<size>()
|
||||
#define ACCEPT_SIZE , Select_size<size>
|
||||
#define ACCEPT_SIZE_ONLY Select_size<size>
|
||||
|
||||
#define SELECT_SIZE_ENDIAN_NAME
|
||||
#define SELECT_SIZE_ENDIAN_NAME(size, big_endian)
|
||||
#define SELECT_SIZE_ENDIAN(size, big_endian) \
|
||||
, Select_size_endian<size, big_endian>()
|
||||
#define SELECT_SIZE_ENDIAN_ONLY(size, big_endian) \
|
||||
|
@ -392,8 +392,9 @@ class Sized_object : public Object
|
||||
Sized_target<size, big_endian>*
|
||||
sized_target()
|
||||
{
|
||||
return this->Object::sized_target SELECT_SIZE_ENDIAN_NAME (
|
||||
SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
|
||||
return this->Object::sized_target
|
||||
SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
|
||||
SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -144,7 +144,7 @@ Output_section_headers::do_sized_write(Output_file* of)
|
||||
for (Layout::Segment_list::const_iterator p = this->segment_list_.begin();
|
||||
p != this->segment_list_.end();
|
||||
++p)
|
||||
v = (*p)->write_section_headers SELECT_SIZE_ENDIAN_NAME (
|
||||
v = (*p)->write_section_headers SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
|
||||
this->secnamepool_, v, &shndx
|
||||
SELECT_SIZE_ENDIAN(size, big_endian));
|
||||
for (Layout::Section_list::const_iterator p = this->section_list_.begin();
|
||||
@ -333,7 +333,7 @@ Output_file_header::do_sized_write(Output_file* of)
|
||||
else
|
||||
{
|
||||
Sized_symbol<size>* ssym;
|
||||
ssym = this->symtab_->get_sized_symbol SELECT_SIZE_NAME (
|
||||
ssym = this->symtab_->get_sized_symbol SELECT_SIZE_NAME(size) (
|
||||
sym SELECT_SIZE(size));
|
||||
v = ssym->value();
|
||||
}
|
||||
@ -971,12 +971,14 @@ Output_segment::write_section_headers(const Stringpool* secnamepool,
|
||||
if (this->type_ != elfcpp::PT_LOAD)
|
||||
return v;
|
||||
|
||||
v = this->write_section_headers_list SELECT_SIZE_ENDIAN_NAME (
|
||||
secnamepool, &this->output_data_, v, pshndx
|
||||
SELECT_SIZE_ENDIAN(size, big_endian));
|
||||
v = this->write_section_headers_list SELECT_SIZE_ENDIAN_NAME (
|
||||
secnamepool, &this->output_bss_, v, pshndx
|
||||
SELECT_SIZE_ENDIAN(size, big_endian));
|
||||
v = this->write_section_headers_list
|
||||
SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
|
||||
secnamepool, &this->output_data_, v, pshndx
|
||||
SELECT_SIZE_ENDIAN(size, big_endian));
|
||||
v = this->write_section_headers_list
|
||||
SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
|
||||
secnamepool, &this->output_bss_, v, pshndx
|
||||
SELECT_SIZE_ENDIAN(size, big_endian));
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -55,8 +55,9 @@ Symbol_table::resolve(Sized_symbol<size>* to,
|
||||
if (object->target()->has_resolve())
|
||||
{
|
||||
Sized_target<size, big_endian>* sized_target;
|
||||
sized_target = object->sized_target SELECT_SIZE_ENDIAN_NAME (
|
||||
SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
|
||||
sized_target = object->sized_target
|
||||
SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
|
||||
SELECT_SIZE_ENDIAN_ONLY(size, big_endian));
|
||||
sized_target->resolve(to, sym, object);
|
||||
return;
|
||||
}
|
||||
|
@ -308,8 +308,8 @@ Symbol_table::add_from_object(Sized_object<size, big_endian>* object,
|
||||
if (!ins.second)
|
||||
{
|
||||
// We already have an entry for NAME/VERSION.
|
||||
ret = this->get_sized_symbol SELECT_SIZE_NAME (ins.first->second
|
||||
SELECT_SIZE(size));
|
||||
ret = this->get_sized_symbol SELECT_SIZE_NAME(size) (ins.first->second
|
||||
SELECT_SIZE(size));
|
||||
assert(ret != NULL);
|
||||
|
||||
was_undefined = ret->is_undefined();
|
||||
@ -330,10 +330,10 @@ Symbol_table::add_from_object(Sized_object<size, big_endian>* object,
|
||||
// This is the unfortunate case where we already have
|
||||
// entries for both NAME/VERSION and NAME/NULL.
|
||||
const Sized_symbol<size>* sym2;
|
||||
sym2 = this->get_sized_symbol SELECT_SIZE_NAME (
|
||||
sym2 = this->get_sized_symbol SELECT_SIZE_NAME(size) (
|
||||
insdef.first->second
|
||||
SELECT_SIZE(size));
|
||||
Symbol_table::resolve SELECT_SIZE_ENDIAN_NAME (
|
||||
Symbol_table::resolve SELECT_SIZE_ENDIAN_NAME(size, big_endian) (
|
||||
ret, sym2 SELECT_SIZE_ENDIAN(size, big_endian));
|
||||
this->make_forwarder(insdef.first->second, ret);
|
||||
insdef.first->second = ret;
|
||||
@ -352,8 +352,9 @@ Symbol_table::add_from_object(Sized_object<size, big_endian>* object,
|
||||
{
|
||||
// We already have an entry for NAME/NULL. Make
|
||||
// NAME/VERSION point to it.
|
||||
ret = this->get_sized_symbol SELECT_SIZE_NAME (insdef.first->second
|
||||
SELECT_SIZE(size));
|
||||
ret = this->get_sized_symbol SELECT_SIZE_NAME(size) (
|
||||
insdef.first->second
|
||||
SELECT_SIZE(size));
|
||||
Symbol_table::resolve(ret, sym, object);
|
||||
ins.first->second = ret;
|
||||
}
|
||||
@ -500,7 +501,8 @@ Symbol_table::add_from_object(
|
||||
template<int size, bool big_endian>
|
||||
Sized_symbol<size>*
|
||||
Symbol_table::define_special_symbol(Target* target, const char* name,
|
||||
bool only_if_ref)
|
||||
bool only_if_ref
|
||||
ACCEPT_SIZE_ENDIAN)
|
||||
{
|
||||
assert(this->size_ == size);
|
||||
|
||||
@ -562,8 +564,8 @@ Symbol_table::define_special_symbol(Target* target, const char* name,
|
||||
{
|
||||
assert(sym == NULL);
|
||||
|
||||
sym = this->get_sized_symbol SELECT_SIZE_NAME (oldsym
|
||||
SELECT_SIZE(size));
|
||||
sym = this->get_sized_symbol SELECT_SIZE_NAME(size) (oldsym
|
||||
SELECT_SIZE(size));
|
||||
assert(sym->source() == Symbol::FROM_OBJECT);
|
||||
const int old_shnum = sym->shnum();
|
||||
if (old_shnum != elfcpp::SHN_UNDEF
|
||||
@ -628,9 +630,13 @@ Symbol_table::do_define_in_output_data(
|
||||
Sized_symbol<size>* sym;
|
||||
|
||||
if (target->is_big_endian())
|
||||
sym = this->define_special_symbol<size, true>(target, name, only_if_ref);
|
||||
sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, true) (
|
||||
target, name, only_if_ref
|
||||
SELECT_SIZE_ENDIAN(size, true));
|
||||
else
|
||||
sym = this->define_special_symbol<size, false>(target, name, only_if_ref);
|
||||
sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, false) (
|
||||
target, name, only_if_ref
|
||||
SELECT_SIZE_ENDIAN(size, false));
|
||||
|
||||
if (sym == NULL)
|
||||
return;
|
||||
@ -684,9 +690,13 @@ Symbol_table::do_define_in_output_segment(
|
||||
Sized_symbol<size>* sym;
|
||||
|
||||
if (target->is_big_endian())
|
||||
sym = this->define_special_symbol<size, true>(target, name, only_if_ref);
|
||||
sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, true) (
|
||||
target, name, only_if_ref
|
||||
SELECT_SIZE_ENDIAN(size, true));
|
||||
else
|
||||
sym = this->define_special_symbol<size, false>(target, name, only_if_ref);
|
||||
sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, false) (
|
||||
target, name, only_if_ref
|
||||
SELECT_SIZE_ENDIAN(size, false));
|
||||
|
||||
if (sym == NULL)
|
||||
return;
|
||||
@ -736,9 +746,13 @@ Symbol_table::do_define_as_constant(
|
||||
Sized_symbol<size>* sym;
|
||||
|
||||
if (target->is_big_endian())
|
||||
sym = this->define_special_symbol<size, true>(target, name, only_if_ref);
|
||||
sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, true) (
|
||||
target, name, only_if_ref
|
||||
SELECT_SIZE_ENDIAN(size, true));
|
||||
else
|
||||
sym = this->define_special_symbol<size, false>(target, name, only_if_ref);
|
||||
sym = this->define_special_symbol SELECT_SIZE_ENDIAN_NAME(size, false) (
|
||||
target, name, only_if_ref
|
||||
SELECT_SIZE_ENDIAN(size, false));
|
||||
|
||||
if (sym == NULL)
|
||||
return;
|
||||
|
@ -507,7 +507,8 @@ class Symbol_table
|
||||
// Define a special symbol.
|
||||
template<int size, bool big_endian>
|
||||
Sized_symbol<size>*
|
||||
define_special_symbol(Target* target, const char* name, bool only_if_ref);
|
||||
define_special_symbol(Target* target, const char* name, bool only_if_ref
|
||||
ACCEPT_SIZE_ENDIAN);
|
||||
|
||||
// Define a special symbol based on an Output_data. It is a
|
||||
// multiple definition error if this symbol is already defined.
|
||||
|
Loading…
Reference in New Issue
Block a user