2010-01-29 Doug Kwan <dougkwan@google.com>
authorDoug Kwan <dougkwan@google.com>
Sat, 30 Jan 2010 00:01:12 +0000 (00:01 +0000)
committerDoug Kwan <dougkwan@google.com>
Sat, 30 Jan 2010 00:01:12 +0000 (00:01 +0000)
* arm.cc (Target_arm::Scan::global): General PLTs for the same set
of relocation types as ld.

gold/ChangeLog
gold/arm.cc

index 98b7dece8f5fad8238cd443a7364969d632a57b1..eff93053a1085ee32b2194889c3ddb0cadef2eec 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-29  Doug Kwan  <dougkwan@google.com>
+
+       * arm.cc (Target_arm::Scan::global): General PLTs for the same set
+       of relocation types as ld.
+
 2010-01-29  Doug Kwan  <dougkwan@google.com>
 
        * arm.cc (Arm_relocate_functions::arm_branch_common) Change visibility
index 65bebaa1e53f3e711fd195909e7e74bc1d136eca..7736fa6b15f691a771676fdae138853e622395a1 100644 (file)
@@ -6792,9 +6792,6 @@ Target_arm<big_endian>::Scan::global(Symbol_table* symtab,
       break;
 
     case elfcpp::R_ARM_REL32:
-      break;
-
-    case elfcpp::R_ARM_PREL31:
       {
        // Make a dynamic relocation if necessary.
        int flags = Symbol::NON_PIC_REF;
@@ -6821,26 +6818,9 @@ Target_arm<big_endian>::Scan::global(Symbol_table* symtab,
     case elfcpp::R_ARM_THM_JUMP19:
     case elfcpp::R_ARM_CALL:
     case elfcpp::R_ARM_THM_CALL:
-
-      if (Target_arm<big_endian>::Scan::symbol_needs_plt_entry(gsym))
-       target->make_plt_entry(symtab, layout, gsym);
-      else
-       {
-          // Check to see if this is a function that would need a PLT
-          // but does not get one because the function symbol is untyped.
-          // This happens in assembly code missing a proper .type directive.
-         if ((!gsym->is_undefined() || parameters->options().shared())
-             && !parameters->doing_static_link()
-             && gsym->type() == elfcpp::STT_NOTYPE
-             && (gsym->is_from_dynobj()
-                 || gsym->is_undefined()
-                 || gsym->is_preemptible()))
-           gold_error(_("%s is not a function."),
-                      gsym->demangled_name().c_str());
-       }
-      break;
-
     case elfcpp::R_ARM_PLT32:
+    case elfcpp::R_ARM_PREL31:
+    case elfcpp::R_ARM_PC24:
       // If the symbol is fully resolved, this is just a relative
       // local reloc.  Otherwise we need a PLT entry.
       if (gsym->final_value_is_known())