From 0f1254327820d7b3f67f873aa40e76679f067288 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Thu, 1 Dec 2016 12:50:21 -0800 Subject: [PATCH] Fix internal error when relaxing branches to STT_SECTION symbols. gold/ PR gold/20807 * aarch64.cc (Target_aarch64::scan_reloc_section_for_stubs): Handle section symbols correctly. * arm.cc (Target_arm): Likewise. * powerpc.cc (Target_powerpc): Likewise. --- gold/ChangeLog | 8 ++++++++ gold/aarch64.cc | 2 ++ gold/arm.cc | 2 ++ gold/powerpc.cc | 2 ++ 4 files changed, 14 insertions(+) diff --git a/gold/ChangeLog b/gold/ChangeLog index add9e1d..15593b6 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,11 @@ +2016-12-01 Cary Coutant + + PR gold/20807 + * aarch64.cc (Target_aarch64::scan_reloc_section_for_stubs): Handle + section symbols correctly. + * arm.cc (Target_arm): Likewise. + * powerpc.cc (Target_powerpc): Likewise. + 2016-11-27 Ambrogino Modigliani * aarch64-reloc.def: Fix spelling in comments. diff --git a/gold/aarch64.cc b/gold/aarch64.cc index f38cd9a..96a4ba7 100644 --- a/gold/aarch64.cc +++ b/gold/aarch64.cc @@ -3865,6 +3865,8 @@ Target_aarch64::scan_reloc_section_for_stubs( if (!is_defined_in_discarded_section) { typedef Sized_relobj_file ObjType; + if (psymval->is_section_symbol()) + symval.set_is_section_symbol(); typename ObjType::Compute_final_local_value_status status = object->compute_final_local_value(r_sym, psymval, &symval, relinfo->symtab); diff --git a/gold/arm.cc b/gold/arm.cc index e351ad9..ea20c37 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -12144,6 +12144,8 @@ Target_arm::scan_reloc_section_for_stubs( if (!is_defined_in_discarded_section) { typedef Sized_relobj_file<32, big_endian> ObjType; + if (psymval->is_section_symbol()) + symval.set_is_section_symbol(); typename ObjType::Compute_final_local_value_status status = arm_object->compute_final_local_value(r_sym, psymval, &symval, relinfo->symtab); diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 1e95d5b..67e171c 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -2799,6 +2799,8 @@ Target_powerpc::Branch_info::make_stub( const Symbol_value* psymval = this->object_->local_symbol(this->r_sym_); Symbol_value symval; + if (psymval->is_section_symbol()) + symval.set_is_section_symbol(); typedef Sized_relobj_file ObjType; typename ObjType::Compute_final_local_value_status status = this->object_->compute_final_local_value(this->r_sym_, psymval, -- 2.7.4