[binutils-gdb] Add additional information to relocation overflow errors.

Cary Coutant ccoutant@sourceware.org
Sun Feb 7 18:17:00 GMT 2016


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

commit 17ecd016113c77c7fead1725d2d315fe7b42aced
Author: Cary Coutant <ccoutant@gmail.com>
Date:   Sun Feb 7 10:17:01 2016 -0800

    Add additional information to relocation overflow errors.
    
    gold/
    	PR gold/18695
    	* x86_64.cc (Target_x86_64::Relocate::relocate): Add additional
    	information to relocation overflow errors.

Diff:
---
 gold/ChangeLog |  7 +++++++
 gold/x86_64.cc | 26 ++++++++++++++++++++++++--
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index d824511..b796a24 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,12 @@
+2016-02-07  Cary Coutant  <ccoutant@gmail.com>
+
+	PR gold/18695
+	* x86_64.cc (Target_x86_64::Relocate::relocate): Add additional
+	information to relocation overflow errors.
+
 2016-02-06  Cary Coutant  <ccoutant@gmail.com>
 
+	PR gold/18695
 	* x86_64.cc (X86_64_relocate_functions::pcrela32_check): Fix x32
 	overflow checking when symbol value + addend < 0.
 
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index b0780af..81126ef 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -3701,8 +3701,30 @@ Target_x86_64<size>::Relocate::relocate(
     }
 
   if (rstatus == Reloc_funcs::RELOC_OVERFLOW)
-    gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
-			   _("relocation overflow"));
+    {
+      if (gsym == NULL)
+        {
+	  unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
+	  gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
+				 _("relocation overflow: "
+				   "reference to local symbol %u in %s"),
+				 r_sym, object->name().c_str());
+        }
+      else if (gsym->is_defined() && gsym->source() == Symbol::FROM_OBJECT)
+        {
+	  gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
+				 _("relocation overflow: "
+				   "reference to '%s' defined in %s"),
+				 gsym->name(),
+				 gsym->object()->name().c_str());
+        }
+      else
+        {
+	  gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
+				 _("relocation overflow: reference to '%s'"),
+				 gsym->name());
+        }
+    }
 
   return true;
 }



More information about the Binutils-cvs mailing list