This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Plumb --pic-veneer option for gold.


This fixes ARM Linux gold link after
02e541d: ARM: 8323/1: force linker to use PIC veneers

gold/
    * arm.cc (function): Plumb pic-veneer option to stub generation.
    * options.h (function): Add --pic-veneer option.
---
 gold/arm.cc    | 7 ++++---
 gold/options.h | 3 +++
 2 files changed, 7 insertions(+), 3 deletions(-)

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..d1a2e1e 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -981,6 +981,9 @@ class General_options
 		    N_("Create a position independent executable"),
 		    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"));
-- 
2.4.3.573.g4eafbef


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]