[binutils-gdb] Fix internal error when relaxing branches to STT_SECTION symbols.

Cary Coutant ccoutant@sourceware.org
Thu Dec 1 20:54:00 GMT 2016


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0f1254327820d7b3f67f873aa40e76679f067288

commit 0f1254327820d7b3f67f873aa40e76679f067288
Author: Cary Coutant <ccoutant@gmail.com>
Date:   Thu Dec 1 12:50:21 2016 -0800

    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.

Diff:
---
 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  <ccoutant@gmail.com>
+
+	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  <ambrogino.modigliani@gmail.com>
 
 	* 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<size, big_endian>::scan_reloc_section_for_stubs(
 	  if (!is_defined_in_discarded_section)
 	    {
 	      typedef Sized_relobj_file<size, big_endian> 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<big_endian>::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<size, big_endian>::Branch_info::make_stub(
 	  const Symbol_value<size>* psymval
 	    = this->object_->local_symbol(this->r_sym_);
 	  Symbol_value<size> symval;
+	  if (psymval->is_section_symbol())
+	    symval.set_is_section_symbol();
 	  typedef Sized_relobj_file<size, big_endian> ObjType;
 	  typename ObjType::Compute_final_local_value_status status
 	    = this->object_->compute_final_local_value(this->r_sym_, psymval,



More information about the Binutils-cvs mailing list