+2012-11-30 Alan Modra <amodra@gmail.com>
+
+ * powerpc.c (Target_powerpc::Scan::global): Don't emit relative
+ relocs against protected symbols when building 32-bit shared libs.
+
2012-11-30 Alan Modra <amodra@gmail.com>
* powerpc.cc (Target_powerpc::make_plt_section): Add symtab
target->copy_reloc(symtab, layout, object,
data_shndx, output_section, gsym, reloc);
}
- else if (((size == 32 && r_type == elfcpp::R_POWERPC_ADDR32)
- || (size == 64 && r_type == elfcpp::R_PPC64_ADDR64))
- && (gsym->can_use_relative_reloc(false)
- || (size == 64
- && data_shndx == ppc_object->opd_shndx())))
+ else if ((size == 32
+ && r_type == elfcpp::R_POWERPC_ADDR32
+ && gsym->can_use_relative_reloc(false)
+ && !(gsym->visibility() == elfcpp::STV_PROTECTED
+ && parameters->options().shared()))
+ || (size == 64
+ && r_type == elfcpp::R_PPC64_ADDR64
+ && (gsym->can_use_relative_reloc(false)
+ || data_shndx == ppc_object->opd_shndx())))
{
Reloc_section* rela_dyn = target->rela_dyn_section(layout);
unsigned int dynrel = elfcpp::R_POWERPC_RELATIVE;