Issue 110120.1: address computation overflow (seen in Location List Entries)
Section 2.6.2 Location Lists, pg 30
This is a suggestion that was made while discussing the following DWARF
data about a variable declared as global inside a C unit (the variable was
not declared static):
<1><143010>: Abbrev Number: 135 (DW_TAG_variable)
<143012> DW_AT_decl_line : 166
<143014> DW_AT_decl_file : 26
<143016> DW_AT_type : <0xe6e1>
<14301a> DW_AT_external : 1
<14301b> DW_AT_location : 0x90068 (location list)
<14301f> DW_AT_name : blablabla
The location list contains only one entry (besides the end-of-list terminator),
and the offsets are: 0x0, and 0xffffffff. The CU address size is 32bits.
After adding the base address, which in this case is the CU base address,
readelf interprets this location as follow (there is an overflow/wrap-around
that happens):
Offset Begin End Expression
00090068 0009f7c4 0009f7c3 (DW_OP_addr: 4000d120)
00090068 <End of list>
As discussed on the dwarf-discuss mailing-list, a location should have been
used in the first place. However, it has also been suggested that it would be
helpful for DWARF to be more explicit on how to treat such an entry.
Suggestion by Roland McGrath:
> I think it would be
> helpful for DWARF to say explicitly that such calculations should not
> overflow/wrap. That is, if the base address plus a list entry address
> exceeds the maximum address representable by the CU's address_size (as in
> this example), the list entry is invalid.
Michael Eager said:
> The end offset should be the highest address where the address
> is valid, perhaps the end of the compilation unit.
>
> To again quote the DWARF 4 standard:
>
> 2.6.2 Location Lists
>
> Location lists are used in place of location expressions
> whenever the object whose location is being described can
> change location during its lifetime.
>
> Since there is no intent that the object's location can change
> during it's lifetime, use of a location list is inappropriate.
> As this paragraph suggests, and as Roland said, a location
> expression should be used when the location of an object
> does not change during it's lifetime.
---
1/15/2013 - Rejected. This is incorrect DWARF, since it uses a Loc List
to attempt to describe an object whose location does not change during
it's lifetime.