summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Kwan <dougkwan@google.com>2012-03-14 23:07:07 +0000
committerDoug Kwan <dougkwan@google.com>2012-03-14 23:07:07 +0000
commit1f6584f6153a67563800fcd307530b2fb3e65bc1 (patch)
tree3b230a9ae55e48db3b947eab2d370238dc3a3a76
parenta497ef87c4b443c66360d148a7bf20d026d6877f (diff)
downloadbinutils-redhat-1f6584f6153a67563800fcd307530b2fb3e65bc1.tar.gz
2012-03-14 Doug Kwan <dougkwan@google.com>
* gold/arm.cc (Target_arm::Scan::global): Generate R_ARM_GLOB_DAT dynamic relocations for protected symbols in shared objects.
-rw-r--r--gold/ChangeLog5
-rw-r--r--gold/arm.cc4
2 files changed, 8 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 47d15a93ed..5bdda03230 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,8 @@
+2012-03-14 Doug Kwan <dougkwan@google.com>
+
+ * gold/arm.cc (Target_arm::Scan::global): Generate R_ARM_GLOB_DAT
+ dynamic relocations for protected symbols in shared objects.
+
2012-03-13 Ian Lance Taylor <iant@google.com>
* resolve.cc (Symbol_table::resolve): When merging common symbols,
diff --git a/gold/arm.cc b/gold/arm.cc
index bc704ccbcb..04004a68c1 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -8314,7 +8314,9 @@ Target_arm<big_endian>::Scan::global(Symbol_table* symtab,
Reloc_section* rel_dyn = target->rel_dyn_section(layout);
if (gsym->is_from_dynobj()
|| gsym->is_undefined()
- || gsym->is_preemptible())
+ || gsym->is_preemptible()
+ || (gsym->visibility() == elfcpp::STV_PROTECTED
+ && parameters->options().shared()))
got->add_global_with_rel(gsym, GOT_TYPE_STANDARD,
rel_dyn, elfcpp::R_ARM_GLOB_DAT);
else