aboutsummaryrefslogtreecommitdiff
path: root/gold/x86_64.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2011-06-28 21:15:42 +0000
committerIan Lance Taylor <ian@airs.com>2011-06-28 21:15:42 +0000
commitb3ce541e970466431bf6abfa8ad58424a1d1a7ec (patch)
tree5f0d7db6b9f153a8ac032e7f20e96ecbc5e22a62 /gold/x86_64.cc
parentaf24f60c6d8ca5ab59f069dd8ce2489d8a7f9e57 (diff)
downloadgdb-b3ce541e970466431bf6abfa8ad58424a1d1a7ec.zip
gdb-b3ce541e970466431bf6abfa8ad58424a1d1a7ec.tar.gz
gdb-b3ce541e970466431bf6abfa8ad58424a1d1a7ec.tar.bz2
* target.h (Target::can_check_for_function_pointers): Rewrite.
Make non-virtual. (Target::can_icf_inline_merge_sections): Likewise. (Target::section_may_have_icf_unsafe_poineters): Likewise. (Target::Target_info): Add can_icf_inline_merge_sections field. (Target::do_can_check_for_function_pointers): New virtual function. (Target::do_section_may_have_icf_unsafe_pointers): Likewise. * arm.cc (Target_arm::do_can_check_for_function_pointers): Rename from can_check_for_function_pointers, move in file. (Target_arm::do_section_may_have_icf_unsafe_pointers): Rename from section_may_have_icf_unsafe_poineters, move in file. (Target_arm::arm_info): Initialize can_icf_inline_merge_sections. * i386.cc (Target_i386::do_can_check_for_function_pointers): Rename from can_check_for_function_pointers, move in file. (Target_i386::can_icf_inline_merge_sections): Remove. (Target_i386::i386_info): Initialize can_icf_inline_merge_sections. * powerpc.cc (Target_powerpc::powerpc_info) [all versions]: Initialize can_icf_inline_merge_sections. * sparc.cc (Target_sparc::sparc_info) [both version]: Likewise. * x86_64.cc (Target_x86_64::do_can_check_for_function_pointers): Rename from can_check_for_function_pointers, move in file. (Target_x86_64::can_icf_inline_merge_sections): Remove. (Target_x86_64::x86_64_info): Initialize can_icf_inline_merge_sections. * testsuite/testfile.cc (Target_test::test_target_info): Likewise. * icf.cc (get_section_contents): Correct formatting.
Diffstat (limited to 'gold/x86_64.cc')
-rw-r--r--gold/x86_64.cc27
1 files changed, 12 insertions, 15 deletions
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index cdfec9e..a6e9ddd 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -1,6 +1,6 @@
// x86_64.cc -- x86_64 target support for gold.
-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
@@ -217,20 +217,6 @@ class Target_x86_64 : public Target_freebsd<64, false>
tls_base_symbol_defined_(false)
{ }
- // This function should be defined in targets that can use relocation
- // types to determine (implemented in local_reloc_may_be_function_pointer
- // and global_reloc_may_be_function_pointer)
- // if a function's pointer is taken. ICF uses this in safe mode to only
- // fold those functions whose pointer is defintely not taken. For x86_64
- // pie binaries, safe ICF cannot be done by looking at relocation types.
- inline bool
- can_check_for_function_pointers() const
- { return !parameters->options().pie(); }
-
- virtual bool
- can_icf_inline_merge_sections () const
- { return true; }
-
// Hook for a new output section.
void
do_new_output_section(Output_section*) const;
@@ -347,6 +333,16 @@ class Target_x86_64 : public Target_freebsd<64, false>
do_plt_section_for_local(const Relobj*, unsigned int) const
{ return this->plt_section(); }
+ // This function should be defined in targets that can use relocation
+ // types to determine (implemented in local_reloc_may_be_function_pointer
+ // and global_reloc_may_be_function_pointer)
+ // if a function's pointer is taken. ICF uses this in safe mode to only
+ // fold those functions whose pointer is defintely not taken. For x86_64
+ // pie binaries, safe ICF cannot be done by looking at relocation types.
+ bool
+ do_can_check_for_function_pointers() const
+ { return !parameters->options().pie(); }
+
// Adjust -fsplit-stack code which calls non-split-stack code.
void
do_calls_non_split(Relobj* object, unsigned int shndx,
@@ -755,6 +751,7 @@ const Target::Target_info Target_x86_64::x86_64_info =
false, // has_resolve
true, // has_code_fill
true, // is_default_stack_executable
+ true, // can_icf_inline_merge_sections
'\0', // wrap_char
"/lib/ld64.so.1", // program interpreter
0x400000, // default_text_segment_address