mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
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.
This commit is contained in:
parent
453018bf44
commit
c3847462f8
@ -1,3 +1,11 @@
|
||||
2017-03-15 Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2017-03-15 Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
|
||||
|
||||
* mips.cc (symbol_refs_local): Return false if a symbol
|
||||
|
33
gold/mips.cc
33
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,
|
||||
|
Loading…
Reference in New Issue
Block a user