mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-17 13:10:12 +08:00
gold/
* parameters.cc (Parameters::entry): Return target-specific entry symbol name. * target.h (Target::entry_symbol_name): New function. (Target_info::entry_symbol_name): New data member. * arm.cc (Target_arm::arm_info): Add entry_symbol_name. (Target_arm_nacl::arm_nacl_info): Likewise. * i386.cc (Target_i386::i386_info): Likewise. (Target_i386_nacl::i386_nacl_info): Likewise. * powerpc.cc (Target_powerpc::powerpc_info): Likewise. * sparc.cc (Target_sparc::sparc_info): Likewise. * tilegx.cc (Target_tilegx::tilegx_info): Likewise. * x86_64.cc: (Target_x86_64::x86_64_info) Likewise. (Target_x86_64_nacl::x86_64_nacl_info) Likewise. * testsuite/testfile.cc (Target_test::test_target_info): Likewise.
This commit is contained in:
parent
11b4b7cc1f
commit
a67858e046
@ -1,3 +1,19 @@
|
||||
2013-07-23 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* parameters.cc (Parameters::entry): Return target-specific entry
|
||||
symbol name.
|
||||
* target.h (Target::entry_symbol_name): New function.
|
||||
(Target_info::entry_symbol_name): New data member.
|
||||
|
||||
* arm.cc (Target_arm::arm_info): Add entry_symbol_name.
|
||||
* i386.cc (Target_i386::i386_info): Likewise.
|
||||
(Target_i386_nacl::i386_nacl_info): Likewise.
|
||||
* sparc.cc (Target_sparc::sparc_info): Likewise.
|
||||
* tilegx.cc (Target_tilegx::tilegx_info): Likewise.
|
||||
* x86_64.cc: (Target_x86_64::x86_64_info) Likewise.
|
||||
(Target_x86_64_nacl::x86_64_nacl_info) Likewise.
|
||||
* testsuite/testfile.cc (Target_test::test_target_info): Likewise.
|
||||
|
||||
2013-07-22 Sterling Augustine <saugustine@google.com>
|
||||
|
||||
* dwarf_reader.cc (Dwarf_pubnames_table::read_section):
|
||||
|
@ -2952,7 +2952,8 @@ const Target::Target_info Target_arm<big_endian>::arm_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
".ARM.attributes", // attributes_section
|
||||
"aeabi" // attributes_vendor
|
||||
"aeabi", // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
// Arm relocate functions class
|
||||
@ -12216,7 +12217,8 @@ const Target::Target_info Target_arm_nacl<big_endian>::arm_nacl_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
".ARM.attributes", // attributes_section
|
||||
"aeabi" // attributes_vendor
|
||||
"aeabi", // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<bool big_endian>
|
||||
|
@ -857,7 +857,8 @@ const Target::Target_info Target_i386::i386_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
// Get the GOT section, creating it if necessary.
|
||||
@ -3964,7 +3965,8 @@ const Target::Target_info Target_i386_nacl::i386_nacl_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
#define NACLMASK 0xe0 // 32-byte alignment mask
|
||||
|
@ -238,10 +238,7 @@ Parameters::entry() const
|
||||
{
|
||||
const char* ret = this->options().entry();
|
||||
if (ret == NULL)
|
||||
{
|
||||
// FIXME: Need to support target specific entry symbol.
|
||||
ret = "_start";
|
||||
}
|
||||
ret = parameters->target().entry_symbol_name();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1219,7 +1219,8 @@ Target::Target_info Target_powerpc<32, true>::powerpc_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -1245,7 +1246,8 @@ Target::Target_info Target_powerpc<32, false>::powerpc_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -1271,7 +1273,8 @@ Target::Target_info Target_powerpc<64, true>::powerpc_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -1297,7 +1300,8 @@ Target::Target_info Target_powerpc<64, false>::powerpc_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
inline bool
|
||||
|
@ -483,7 +483,8 @@ Target::Target_info Target_sparc<32, true>::sparc_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -509,7 +510,8 @@ Target::Target_info Target_sparc<64, true>::sparc_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
// We have to take care here, even when operating in little-endian
|
||||
|
@ -449,6 +449,11 @@ class Target
|
||||
gc_mark_symbol(Symbol_table* symtab, Symbol* sym) const
|
||||
{ this->do_gc_mark_symbol(symtab, sym); }
|
||||
|
||||
// Return the name of the entry point symbol.
|
||||
const char*
|
||||
entry_symbol_name() const
|
||||
{ return this->pti_->entry_symbol_name; }
|
||||
|
||||
protected:
|
||||
// This struct holds the constant information for a child class. We
|
||||
// use a struct to avoid the overhead of virtual function calls for
|
||||
@ -502,6 +507,8 @@ class Target
|
||||
const char* attributes_section;
|
||||
// Vendor name of vendor attributes.
|
||||
const char* attributes_vendor;
|
||||
// Name of the main entry point to the program.
|
||||
const char* entry_symbol_name;
|
||||
};
|
||||
|
||||
Target(const Target_info* pti)
|
||||
|
@ -107,7 +107,8 @@ const Target::Target_info Target_test<size, big_endian>::test_target_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
// The test targets.
|
||||
|
@ -681,7 +681,8 @@ const Target::Target_info Target_tilegx<64, false>::tilegx_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -707,7 +708,8 @@ const Target::Target_info Target_tilegx<32, false>::tilegx_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -733,7 +735,8 @@ const Target::Target_info Target_tilegx<64, true>::tilegx_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -759,7 +762,8 @@ const Target::Target_info Target_tilegx<32, true>::tilegx_info =
|
||||
0, // small_common_section_flags
|
||||
0, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
// tilegx relocation handlers
|
||||
|
@ -1007,7 +1007,8 @@ const Target::Target_info Target_x86_64<64>::x86_64_info =
|
||||
0, // small_common_section_flags
|
||||
elfcpp::SHF_X86_64_LARGE, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -1033,7 +1034,8 @@ const Target::Target_info Target_x86_64<32>::x86_64_info =
|
||||
0, // small_common_section_flags
|
||||
elfcpp::SHF_X86_64_LARGE, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
// This is called when a new output section is created. This is where
|
||||
@ -4597,7 +4599,8 @@ const Target::Target_info Target_x86_64_nacl<64>::x86_64_nacl_info =
|
||||
0, // small_common_section_flags
|
||||
elfcpp::SHF_X86_64_LARGE, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -4623,7 +4626,8 @@ const Target::Target_info Target_x86_64_nacl<32>::x86_64_nacl_info =
|
||||
0, // small_common_section_flags
|
||||
elfcpp::SHF_X86_64_LARGE, // large_common_section_flags
|
||||
NULL, // attributes_section
|
||||
NULL // attributes_vendor
|
||||
NULL, // attributes_vendor
|
||||
"_start" // entry_symbol_name
|
||||
};
|
||||
|
||||
#define NACLMASK 0xe0 // 32-byte alignment mask.
|
||||
|
Loading…
Reference in New Issue
Block a user