diff options
author | Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com> | 2017-03-15 15:43:25 -0700 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2017-03-15 16:51:35 -0700 |
commit | c3847462f86778e97222a72378a84182f92c644a (patch) | |
tree | 6a0f5f934277c6176f9b67cdc351a23eb8399e2f /gold/mips.cc | |
parent | 453018bf4490421a995cd76b3d2a3f322359c6a5 (diff) | |
download | gdb-c3847462f86778e97222a72378a84182f92c644a.zip gdb-c3847462f86778e97222a72378a84182f92c644a.tar.gz gdb-c3847462f86778e97222a72378a84182f92c644a.tar.bz2 |
Improve relocation overflow errors on MIPS.
gold/
* mips.cc (Mips_relocate_functions::rel26): Don't print relocation
overflow error message.
(Target_mips::relocate_special_relocatable): Improve relocation
overflow error message.
(Target_mips::Relocate::relocate): Likewise.
Diffstat (limited to 'gold/mips.cc')
-rw-r--r-- | gold/mips.cc | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/gold/mips.cc b/gold/mips.cc index 93b432a..c62ced3 100644 --- a/gold/mips.cc +++ b/gold/mips.cc @@ -4591,15 +4591,9 @@ class Mips_relocate_functions : public Relocate_functions<size, big_endian> } x = psymval->value(object, x) >> shift; - if (!calculate_only && !local && !gsym->is_weak_undefined()) - { - if ((x >> 26) != ((address + 4) >> (26 + shift))) - { - gold_error(_("relocation truncated to fit: %u against '%s'"), - r_type, gsym->name()); - return This::STATUS_OVERFLOW; - } - } + if (!calculate_only && !local && !gsym->is_weak_undefined() + && ((x >> 26) != ((address + 4) >> (26 + shift)))) + return This::STATUS_OVERFLOW; val = Bits<32>::bit_select32(val, x, 0x03ffffff); @@ -10307,7 +10301,9 @@ Target_mips<size, big_endian>::relocate_special_relocatable( break; case Reloc_funcs::STATUS_OVERFLOW: gold_error_at_location(relinfo, relnum, reloc.get_r_offset(), - _("relocation overflow")); + _("relocation overflow: " + "%u against local symbol %u in %s"), + r_type, r_sym, object->name().c_str()); break; case Reloc_funcs::STATUS_BAD_RELOC: gold_error_at_location(relinfo, relnum, reloc.get_r_offset(), @@ -12188,8 +12184,21 @@ Target_mips<size, big_endian>::Relocate::relocate( case Reloc_funcs::STATUS_OKAY: break; case Reloc_funcs::STATUS_OVERFLOW: - gold_error_at_location(relinfo, relnum, r_offset, - _("relocation overflow")); + if (gsym == NULL) + gold_error_at_location(relinfo, relnum, r_offset, + _("relocation overflow: " + "%u against local symbol %u in %s"), + r_type, r_sym, object->name().c_str()); + else if (gsym->is_defined() && gsym->source() == Symbol::FROM_OBJECT) + gold_error_at_location(relinfo, relnum, r_offset, + _("relocation overflow: " + "%u against '%s' defined in %s"), + r_type, gsym->demangled_name().c_str(), + gsym->object()->name().c_str()); + else + gold_error_at_location(relinfo, relnum, r_offset, + _("relocation overflow: %u against '%s'"), + r_type, gsym->demangled_name().c_str()); break; case Reloc_funcs::STATUS_BAD_RELOC: gold_error_at_location(relinfo, relnum, r_offset, |