2012-02-02 Doug Kwan <dougkwan@google.com>
authorDoug Kwan <dougkwan@google.com>
Thu, 2 Feb 2012 20:21:17 +0000 (20:21 +0000)
committerDoug Kwan <dougkwan@google.com>
Thu, 2 Feb 2012 20:21:17 +0000 (20:21 +0000)
* arm.cc (Reloc_stub::stub_type_for_reloc): Use PIC stubs in all
position independent outputs, not just shared objects.

gold/ChangeLog
gold/arm.cc

index 28ff513eb525d6bb7428bb0e92d83b90da8ff634..249346ec18e6773ac175c6e68a55e8a122e6f862 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-02  Doug Kwan  <dougkwan@google.com>
+
+       * arm.cc (Reloc_stub::stub_type_for_reloc): Use PIC stubs in all
+       position independent outputs, not just shared objects.
+
 2012-01-30  H.J. Lu  <hongjiu.lu@intel.com>
 
        * configure.ac: Check if -fpic -mtls-dialect=gnu2 works.
index d187a919b089eda78d6ebee361ae102cd659510e..ec80d674e5556f3f8407da40a916c23f6a1c744e 100644 (file)
@@ -4442,6 +4442,8 @@ Reloc_stub::stub_type_for_reloc(
     }
 
   int64_t branch_offset;
+  bool output_is_position_independent =
+      parameters->options().output_is_position_independent();
   if (r_type == elfcpp::R_ARM_THM_CALL || r_type == elfcpp::R_ARM_THM_JUMP24)
     {
       // For THUMB BLX instruction, bit 1 of target comes from bit 1 of the
@@ -4470,7 +4472,7 @@ Reloc_stub::stub_type_for_reloc(
              // Thumb to thumb.
              if (!thumb_only)
                {
-                 stub_type = (parameters->options().shared()
+                 stub_type = (output_is_position_independent
                               || should_force_pic_veneer)
                    // PIC stubs.
                    ? ((may_use_blx
@@ -4491,7 +4493,7 @@ Reloc_stub::stub_type_for_reloc(
                }
              else
                {
-                 stub_type = (parameters->options().shared()
+                 stub_type = (output_is_position_independent
                               || should_force_pic_veneer)
                    ? arm_stub_long_branch_thumb_only_pic       // PIC stub.
                    : arm_stub_long_branch_thumb_only;  // non-PIC stub.
@@ -4504,7 +4506,7 @@ Reloc_stub::stub_type_for_reloc(
              // FIXME: We should check that the input section is from an
              // object that has interwork enabled.
 
-             stub_type = (parameters->options().shared()
+             stub_type = (output_is_position_independent
                           || should_force_pic_veneer)
                // PIC stubs.
                ? ((may_use_blx
@@ -4546,7 +4548,7 @@ Reloc_stub::stub_type_for_reloc(
              || (r_type == elfcpp::R_ARM_JUMP24)
              || (r_type == elfcpp::R_ARM_PLT32))
            {
-             stub_type = (parameters->options().shared()
+             stub_type = (output_is_position_independent
                           || should_force_pic_veneer)
                // PIC stubs.
                ? (may_use_blx
@@ -4565,7 +4567,7 @@ Reloc_stub::stub_type_for_reloc(
          if (branch_offset > ARM_MAX_FWD_BRANCH_OFFSET
              || (branch_offset < ARM_MAX_BWD_BRANCH_OFFSET))
            {
-             stub_type = (parameters->options().shared()
+             stub_type = (output_is_position_independent
                           || should_force_pic_veneer)
                ? arm_stub_long_branch_any_arm_pic      // PIC stubs.
                : arm_stub_long_branch_any_any;         /// non-PIC.