From bfdfa4cd8da8b878613e3ee98c8268f8aa72983c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 12 Sep 2012 22:43:54 +0000 Subject: * target-reloc.h (scan_relocs): Call scan.local for relocs against symbols in discarded sections. Pass is_discarded param. * arm.cc, * i386.cc, * sparc.cc, * x86_64.cc (Target_*::Scan::local): Add is_discarded param. * powerpc (Target_powerpc::Scan::local): Likewise. Use is_discarded to flag opd entry as discarded. Don't emit dyn relocs on such entries. (Target_powerpc::Scan::global): Similarly detect and handle such opd entries. (Powerpc_relobj): Replace opd_ent_shndx_ and opd_ent_off_ with opd_ent_. Update all uses. (Powerpc_relobj::get_opd_discard, set_opd_discard): New functions. (Target_powerpc::relocate_section): Zero out discarded opd entry relocs. --- gold/x86_64.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'gold/x86_64.cc') diff --git a/gold/x86_64.cc b/gold/x86_64.cc index 1712beb..5914160 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -676,7 +676,8 @@ class Target_x86_64 : public Sized_target unsigned int data_shndx, Output_section* output_section, const elfcpp::Rela& reloc, unsigned int r_type, - const elfcpp::Sym& lsym); + const elfcpp::Sym& lsym, + bool is_discarded); inline void global(Symbol_table* symtab, Layout* layout, Target_x86_64* target, @@ -2270,8 +2271,12 @@ Target_x86_64::Scan::local(Symbol_table* symtab, Output_section* output_section, const elfcpp::Rela& reloc, unsigned int r_type, - const elfcpp::Sym& lsym) + const elfcpp::Sym& lsym, + bool is_discarded) { + if (is_discarded) + return; + // A local STT_GNU_IFUNC symbol may require a PLT entry. bool is_ifunc = lsym.get_st_type() == elfcpp::STT_GNU_IFUNC; if (is_ifunc && this->reloc_needs_plt_for_ifunc(object, r_type)) -- cgit v1.1