aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Kwan <dougkwan@google.com>2010-01-30 00:01:12 +0000
committerDoug Kwan <dougkwan@google.com>2010-01-30 00:01:12 +0000
commitc9a2c125541dc97124aaaea15b8b596d36b355f3 (patch)
tree7d2c5e2268bb217a08b1ba09a2852566ef076496
parent04258814fcf318d5b20deee2b769541e4e6a2ebf (diff)
downloadgdb-c9a2c125541dc97124aaaea15b8b596d36b355f3.zip
gdb-c9a2c125541dc97124aaaea15b8b596d36b355f3.tar.gz
gdb-c9a2c125541dc97124aaaea15b8b596d36b355f3.tar.bz2
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.
-rw-r--r--gold/ChangeLog5
-rw-r--r--gold/arm.cc24
2 files changed, 7 insertions, 22 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 98b7dec..eff9305 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,10 @@
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
to public.
(Arm_relocate_functions::thumb_branch_common): Ditto.
diff --git a/gold/arm.cc b/gold/arm.cc
index 65bebaa..7736fa6 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -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())