https://sourceware.org/bugzilla/show_bug.cgi?id=31692
Bug ID: 31692
Summary: objdump fails .debug_info size check for compressed
debug information
Product: binutils
Version: 2.43 (HEAD)
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: binutils
Assignee: unassigned at sourceware dot org
Reporter: laanwj at gmail dot com
Target Milestone: ---
Versions: HEAD as of 75d933919d8e99c85054bdbf3a0bee0235f2bd3b and 2.42
objdump fails a .debug_info size check for large binaries produced by gcc/ld,
that have a compressed debug section.
To reproduce:
-
$ wget
https://bitcoincore.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu-debug.tar.gz
$ tar -zxvf bitcoin-27.0-x86_64-linux-gnu-debug.tar.gz
$ objdump -Wi bitcoin-27.0/bin/bitcoind.dbg
Section '.debug_info' has an invalid size: 0.
-
This issue is very similar to
https://sourceware.org/bugzilla/show_bug.cgi?id=24319 , which was closed as
FIXED RESOLVED, but there may be a similar issue left.
The error arises in the following code in binutils/objdump.c, a check for
32-bit systems (note that this happens on a 64-bit system):
-
/* PR 24360: On 32-bit hosts sizeof (size_t) < sizeof (bfd_size_type). */
alloced = amt = section->size + 1;
if (alloced != amt
|| alloced == 0
|| (bfd_get_size (abfd) != 0 && alloced >= bfd_get_size (abfd)))
{
section->start = NULL;
free_debug_section (debug);
printf (_("\nSection '%s' has an invalid size: %#" PRIx64 ".\n"),
sanitize_string (section->name),
section->size);
return false;
}
-
Two problems with this:
- The reason it prints size 0 (and not the real value, 0x976cf8b) is that
`free_debug_section` sets section->size to 0.
- It compares the size of the section against `bfd_get_size` (0x5ed10b0) which
is (afaik) the size of the binary. But as this is a compressed section it can
legitly be larger than the binary.
Removing the check makes it work.
--
You are receiving this mail because:
You are on the CC list for the bug.