diff options
author | Han Shen <shenhan@google.com> | 2015-07-23 15:52:22 -0700 |
---|---|---|
committer | Han Shen <shenhan@google.com> | 2015-07-23 15:56:33 -0700 |
commit | cdb061674c044636465e52a8c989b9011f2ec8ac (patch) | |
tree | b3c48ef5c025b391e27e9ca3e0a5bb8987945ef9 /gold | |
parent | d5cff5df74b18e1e5ed94de8f4c9adee3ffd95c6 (diff) | |
download | gdb-cdb061674c044636465e52a8c989b9011f2ec8ac.zip gdb-cdb061674c044636465e52a8c989b9011f2ec8ac.tar.gz gdb-cdb061674c044636465e52a8c989b9011f2ec8ac.tar.bz2 |
2015-07-23 Ian Coolidge <icoolidge@google.com>
Plumb --pic-veneer option for gold.
gold/ChangeLog:
* arm.cc (Reloc_stub::stub_type_for_reloc): Plumb to stub generation.
* options.h (General_options): Add --pic-veneer option.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/arm.cc | 7 | ||||
-rw-r--r-- | gold/options.h | 4 |
3 files changed, 15 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 2977734..987a33a 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2015-07-23 Ian Coolidge <icoolidge@google.com> + Plumb --pic-veneer option for gold. + + * arm.cc (Reloc_stub::stub_type_for_reloc): Plumb to stub + generation. + * options.h (General_options): Add --pic-veneer option. + 2015-07-22 H.J. Lu <hongjiu.lu@intel.com> PR gold/18663 diff --git a/gold/arm.cc b/gold/arm.cc index 621b28e..fa9fdb2 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -4542,7 +4542,7 @@ Reloc_stub::stub_type_for_reloc( // This is a bit ugly but we want to avoid using a templated class for // big and little endianities. bool may_use_blx; - bool should_force_pic_veneer; + bool should_force_pic_veneer = parameters->options().pic_veneer(); bool thumb2; bool thumb_only; if (parameters->target().is_big_endian()) @@ -4550,7 +4550,7 @@ Reloc_stub::stub_type_for_reloc( const Target_arm<true>* big_endian_target = Target_arm<true>::default_target(); may_use_blx = big_endian_target->may_use_v5t_interworking(); - should_force_pic_veneer = big_endian_target->should_force_pic_veneer(); + should_force_pic_veneer |= big_endian_target->should_force_pic_veneer(); thumb2 = big_endian_target->using_thumb2(); thumb_only = big_endian_target->using_thumb_only(); } @@ -4559,7 +4559,8 @@ Reloc_stub::stub_type_for_reloc( const Target_arm<false>* little_endian_target = Target_arm<false>::default_target(); may_use_blx = little_endian_target->may_use_v5t_interworking(); - should_force_pic_veneer = little_endian_target->should_force_pic_veneer(); + should_force_pic_veneer |= + little_endian_target->should_force_pic_veneer(); thumb2 = little_endian_target->using_thumb2(); thumb_only = little_endian_target->using_thumb_only(); } diff --git a/gold/options.h b/gold/options.h index f4da128..641efee 100644 --- a/gold/options.h +++ b/gold/options.h @@ -982,6 +982,10 @@ class General_options N_("Do not create a position independent executable"), false); + DEFINE_bool(pic_veneer, options::TWO_DASHES, '\0', false, + N_("Force PIC sequences for ARM/Thumb interworking veneers"), + NULL); + DEFINE_bool(pipeline_knowledge, options::ONE_DASH, '\0', false, NULL, N_("(ARM only) Ignore for backward compatibility")); |