aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2013-07-30 21:26:53 +0000
committerCary Coutant <ccoutant@google.com>2013-07-30 21:26:53 +0000
commita67858e0463977eb1e9aa65ccc55deab011335d5 (patch)
tree1c45473982f82097c04a2728b7a53414d19b96f2 /gold
parent11b4b7cc1fdcc85aeeb79d7bb1cac64542404cd5 (diff)
downloadbinutils-a67858e0463977eb1e9aa65ccc55deab011335d5.zip
binutils-a67858e0463977eb1e9aa65ccc55deab011335d5.tar.gz
binutils-a67858e0463977eb1e9aa65ccc55deab011335d5.tar.bz2
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.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog16
-rw-r--r--gold/arm.cc6
-rw-r--r--gold/i386.cc6
-rw-r--r--gold/parameters.cc5
-rw-r--r--gold/powerpc.cc12
-rw-r--r--gold/sparc.cc6
-rw-r--r--gold/target.h7
-rw-r--r--gold/testsuite/testfile.cc3
-rw-r--r--gold/tilegx.cc12
-rw-r--r--gold/x86_64.cc12
10 files changed, 62 insertions, 23 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index e6e75d3..432b66d 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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):
diff --git a/gold/arm.cc b/gold/arm.cc
index c980c6b..ddf928b 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -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>
diff --git a/gold/i386.cc b/gold/i386.cc
index 59ec885..b2279e7 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 2781990..7410e7f 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 7d383f7..676aad6 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 acb39cd..2af09ae 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 6523c04..4c58d10 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 da3dc61..f360e3d 100644
--- a/gold/testsuite/testfile.cc
+++ b/gold/testsuite/testfile.cc
@@ -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.
diff --git a/gold/tilegx.cc b/gold/tilegx.cc
index ab97640..c3918b9 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 8f773bd..4f4d612 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.