Hi
This patch fixes crash that happens if we build too big linux kernel so
that offsets overflow. There are several bugs in elf64-hppa.c:
1. offset is 64-bit, but 32-bit format "%lx" is used. This causes
parameters mismatch
2. eh may be NULL. If it is NULL, I changed the code to print "unknown".
Someone who understands the code better can change it to print something
more descriptive
3. returning bfd_reloc_notsupported causes abort() in
elf64_hppa_relocate_section. Change it to return bfd_reloc_overflow.
With these changes, ld writese error messages on overflow and doesn't
crash anymore.
Mikulas
---
--- bfd/elf64-hppa.c_ 2011-07-26 23:41:27.000000000 +0200
+++ bfd/elf64-hppa.c 2011-07-26 23:57:41.000000000 +0200
@@ -3296,13 +3296,13 @@ elf_hppa_final_link_relocate (Elf_Intern
&& value + addend + max_branch_offset >= 2*max_branch_offset)
{
(*_bfd_error_handler)
- (_("%B(%A+0x%lx): cannot reach %s"),
+ (_("%B(%A+0x%llx): cannot reach %s"),
input_bfd,
input_section,
- offset,
- eh->root.root.string);
+ (unsigned long long)offset,
+ eh ? eh->root.root.string : "unknown");
bfd_set_error (bfd_error_bad_value);
- return bfd_reloc_notsupported;
+ return bfd_reloc_overflow;
}
/* Adjust for any field selectors. */
_______________________________________________
bug-binutils mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-binutils