aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2023-07-19 10:26:04 +0930
committerAlan Modra <amodra@gmail.com>2023-07-19 11:43:35 +0930
commitc07f0e8a6c0a2a18e62b2a2b806828ad9a419561 (patch)
tree7c6a3d0b842dd35a31e99a0260c6f34ac7b95934
parent1f4a532943b80e45c79367804aff2f73550d9c72 (diff)
downloadgdb-c07f0e8a6c0a2a18e62b2a2b806828ad9a419561.zip
gdb-c07f0e8a6c0a2a18e62b2a2b806828ad9a419561.tar.gz
gdb-c07f0e8a6c0a2a18e62b2a2b806828ad9a419561.tar.bz2
[GOLD, PowerPC64] Debug info relocation overflow
It is possible to build huge binaries on powerpc64, where 32-bit addresses in debug info are insufficient to descibe locations in the binary. Help out the user, and only warn about debug overflows. * powerpc.cc (Target_powerpc::Relocate::relocate): Warn on relocation overflows in debug info. (cherry picked from commit 03c02b696e90714a0ae2c0200d3c65cfffcaa1ee)
-rw-r--r--gold/powerpc.cc17
1 files changed, 13 insertions, 4 deletions
diff --git a/gold/powerpc.cc b/gold/powerpc.cc
index 96fef7b..d62bdea 100644
--- a/gold/powerpc.cc
+++ b/gold/powerpc.cc
@@ -12420,10 +12420,19 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
&& gsym->is_undefined()
&& is_branch_reloc<size>(r_type))))
{
- gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
- _("relocation overflow"));
- if (has_stub_value)
- gold_info(_("try relinking with a smaller --stub-group-size"));
+ if (os->flags() & elfcpp::SHF_ALLOC)
+ {
+ gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
+ _("relocation overflow"));
+ if (has_stub_value)
+ gold_info(_("try relinking with a smaller --stub-group-size"));
+ }
+ else
+ {
+ gold_warning_at_location(relinfo, relnum, rela.get_r_offset(),
+ _("relocation overflow"));
+ gold_info(_("debug info may be unreliable, compile with -gdwarf64"));
+ }
}
return true;