This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Whilst messing with readelf -wR I noticed what looks to me like a
confusion in word sizes between the host and that pertaining to the
ELF file whose .debug_ranges section is to be displayed. Specifically:
I built binutils-2.18 as 64-bit executables (on Core 2)
I did "readelf -wR" using said build, to examine .debug_ranges
sections in both 32-bit and 64-objects.
The problem is to do with the detection of so-called "base address"
specifiers in the range list info. For a 64-bit object I get
Offset Begin End
00000000 ffffffffffffffff 00000000 (base address)
which is correct, but on a 32-bit object
Offset Begin End
00000000 ffffffff 00000000 (start > end)
It should say "(base address)" instead of "(start > end)".
Looking at binutils-2.18/binutils/dwarf.c:2780 it's obvious why:
/* Check base address specifiers. */
if (begin == -1UL && end != -1UL)
{
base_address = end;
printf (" %8.8lx %8.8lx %8.8lx (base address)\n",
offset, begin, end);
continue;
}
Comparison against -1UL is at the host's word size. But the DWARF3 spec
sec 2.17.3 ("Non-Contiguous Address Ranges") gives the impression, although
does not make it absolutely clear, that said values (begin, end) have a word
size appropriate for the object file, not the host.
It would also mean that lines 2769, 2771 are bogus:
begin = byte_get (start, pointer_size);
end = byte_get (start, pointer_size);
begin and end are declared as unsigned long (== host word),
so these can only be correct when pointer_size == sizeof(unsigned long).
I attach two simple executables for testing purposes, 32-bit and 64-bit
versions of the same thing (test errs1.c from the Valgrind sources).
On a 64-bit platform, readelf -wR errs1-32 produces the result
below, with the incorrect "(start > end)" comment.
J
Contents of the .debug_ranges section:
Offset Begin End
00000000 ffffffff 00000000 (start > end)
00000000 08048334 0804835a
00000000 080482b0 080482bb
00000000 080484fc 0804850f
00000000 <End of list>
00000028 ffffffff 00000000 (start > end)
00000028 080482c5 080482c7
00000028 08048514 08048518
00000028 <End of list>
Attachment:
errs1-32.bz2
Description: BZip2 compressed data
Attachment:
errs1-64.bz2
Description: BZip2 compressed data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |