aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorHan Shen <shenhan@google.com>2015-07-23 15:52:22 -0700
committerHan Shen <shenhan@google.com>2015-07-23 15:56:33 -0700
commitcdb061674c044636465e52a8c989b9011f2ec8ac (patch)
treeb3c48ef5c025b391e27e9ca3e0a5bb8987945ef9 /gold
parentd5cff5df74b18e1e5ed94de8f4c9adee3ffd95c6 (diff)
downloadfsf-binutils-gdb-cdb061674c044636465e52a8c989b9011f2ec8ac.zip
fsf-binutils-gdb-cdb061674c044636465e52a8c989b9011f2ec8ac.tar.gz
fsf-binutils-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/ChangeLog7
-rw-r--r--gold/arm.cc7
-rw-r--r--gold/options.h4
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"));