diff options
author | Ian Lance Taylor <ian@airs.com> | 2009-10-14 05:25:02 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2009-10-14 05:25:02 +0000 |
commit | 374ad2854b4a69a0efdb29f8f1122b4472e8055b (patch) | |
tree | bdef35b60f15322094f5a6c77b05bfa2416dc074 /gold/options.h | |
parent | fc1ed737279ecd7ab047b583a411e626a678207d (diff) | |
download | binutils-374ad2854b4a69a0efdb29f8f1122b4472e8055b.zip binutils-374ad2854b4a69a0efdb29f8f1122b4472e8055b.tar.gz binutils-374ad2854b4a69a0efdb29f8f1122b4472e8055b.tar.bz2 |
Add support for -pie.
* options.h (class General_options): Add -pie and
--pic-executable.
(General_options::output_is_position_independent): Test -pie.
(General_options::output_is_executable): Return true if not shared
and not relocatable.
(General_options::output_is_pie): Remove.
* options.cc (General_options::finalize): Reject incompatible uses
of -pie.
* gold.cc (queue_middle_tasks): A -pie link is not static.
* symtab.h (Symbol::needs_plt_entry): Return false if -pie.
* symtab.cc (Symbol::final_value_is_known): Return false if
output_is_position_independent.
* layout.cc (Layout::set_segment_offsets): Start at address 0 if
output_is_position_independent.
* output.cc (Output_file_header::do_sized_write): Use ET_DYN if
output_is_position_independent.
* i386.cc (Output_data_plt_i386::do_write): Use the PIC PLT if
output_is_position_independent.
* testsuite/Makefile.am (check_PROGRAMS): Add basic_pie_test and
two_file_pie_test.
(basic_pie_test.o, basic_pie_test): New targets.
(two_file_test_1_pie.o, two_file_test_1b_pie.o): New targets.
(two_file_test_2_pie.o, two_file_test_main_pie.o): New targets.
(two_file_pie_test): New target.
* testsuite/Makefile.in: Rebuild.
* README: Remove note saying that -pie is not supported.
Diffstat (limited to 'gold/options.h')
-rw-r--r-- | gold/options.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/gold/options.h b/gold/options.h index 1a03442..cbb45b5 100644 --- a/gold/options.h +++ b/gold/options.h @@ -763,6 +763,12 @@ class General_options DEFINE_string(oformat, options::EXACTLY_TWO_DASHES, '\0', "elf", N_("Set output format"), N_("[binary]")); + DEFINE_bool(pie, options::ONE_DASH, '\0', false, + N_("Create a position independent executable"), NULL); + DEFINE_bool_alias(pic_executable, pie, options::TWO_DASHES, '\0', + N_("Create a position independent executable"), NULL, + false); + #ifdef ENABLE_PLUGINS DEFINE_special(plugin, options::TWO_DASHES, '\0', N_("Load a plugin library"), N_("PLUGIN")); @@ -1009,7 +1015,7 @@ class General_options // the output is position-independent or not. bool output_is_position_independent() const - { return this->shared(); } + { return this->shared() || this->pie(); } // Return true if the output is something that can be exec()ed, such // as a static executable, or a position-dependent or @@ -1017,13 +1023,7 @@ class General_options // object file. bool output_is_executable() const - { return !this->shared() || this->output_is_pie(); } - - // Return true if the output is a position-independent executable. - // This is currently not supported. - bool - output_is_pie() const - { return false; } + { return !this->shared() && !this->relocatable(); } // This would normally be static(), and defined automatically, but // since static is a keyword, we need to come up with our own name. |