aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2016-12-01 12:50:21 -0800
committerCary Coutant <ccoutant@gmail.com>2016-12-01 12:53:54 -0800
commit0f1254327820d7b3f67f873aa40e76679f067288 (patch)
treef821409dfede3350d4f8deefcb1b3ca0b6f2720b /gold
parent84c93cd5f1ff869eb8c04314738eaa2cddb3c29e (diff)
downloadfsf-binutils-gdb-0f1254327820d7b3f67f873aa40e76679f067288.zip
fsf-binutils-gdb-0f1254327820d7b3f67f873aa40e76679f067288.tar.gz
fsf-binutils-gdb-0f1254327820d7b3f67f873aa40e76679f067288.tar.bz2
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.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog8
-rw-r--r--gold/aarch64.cc2
-rw-r--r--gold/arm.cc2
-rw-r--r--gold/powerpc.cc2
4 files changed, 14 insertions, 0 deletions
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,