From a67858e0463977eb1e9aa65ccc55deab011335d5 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Tue, 30 Jul 2013 21:26:53 +0000 Subject: [PATCH] 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. --- gold/ChangeLog | 16 ++++++++++++++++ gold/arm.cc | 6 ++++-- gold/i386.cc | 6 ++++-- gold/parameters.cc | 5 +---- gold/powerpc.cc | 12 ++++++++---- gold/sparc.cc | 6 ++++-- gold/target.h | 7 +++++++ gold/testsuite/testfile.cc | 3 ++- gold/tilegx.cc | 12 ++++++++---- gold/x86_64.cc | 12 ++++++++---- 10 files changed, 62 insertions(+), 23 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index e6e75d39b92..432b66deec4 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,19 @@ +2013-07-23 Cary Coutant + + * 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 * dwarf_reader.cc (Dwarf_pubnames_table::read_section): diff --git a/gold/arm.cc b/gold/arm.cc index c980c6b7df5..ddf928bf4cf 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -2952,7 +2952,8 @@ const Target::Target_info Target_arm::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::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 diff --git a/gold/i386.cc b/gold/i386.cc index 59ec88527aa..b2279e70160 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -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 diff --git a/gold/parameters.cc b/gold/parameters.cc index 27819908fe1..7410e7f8a7b 100644 --- a/gold/parameters.cc +++ b/gold/parameters.cc @@ -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; } diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 7d383f74f41..676aad6f181 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -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 diff --git a/gold/sparc.cc b/gold/sparc.cc index acb39cd5e36..2af09aee5b0 100644 --- a/gold/sparc.cc +++ b/gold/sparc.cc @@ -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 diff --git a/gold/target.h b/gold/target.h index 6523c0456ed..4c58d10ff24 100644 --- a/gold/target.h +++ b/gold/target.h @@ -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) diff --git a/gold/testsuite/testfile.cc b/gold/testsuite/testfile.cc index da3dc61790e..f360e3d00b3 100644 --- a/gold/testsuite/testfile.cc +++ b/gold/testsuite/testfile.cc @@ -107,7 +107,8 @@ const Target::Target_info Target_test::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. diff --git a/gold/tilegx.cc b/gold/tilegx.cc index ab976405ca0..c3918b92a42 100644 --- a/gold/tilegx.cc +++ b/gold/tilegx.cc @@ -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 diff --git a/gold/x86_64.cc b/gold/x86_64.cc index 8f773bdfddc..4f4d612939b 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -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. -- 2.30.2