On Mon, Oct 31, 2011 at 12:01:00PM -0000, Dan Towner wrote:
> Could someone tell me whether the following sequence of DWARF information
> is correct please, and if it is, how it should be interpreted? GCC emits
> something like the following [1]:
>
> .byte 0x75 # DW_OP_breg5
> .sleb128 0
> .byte 0x93 # DW_OP_piece
> .uleb128 0x4
> .byte 0x93 # DW_OP_piece
> .uleb128 0x4
>
> Is it valid to emit two DW_OP_pieces with no separating location? My copy
Yes.
> of the spec for DWARF (v4 taken from www.dwarfstd.org) seems to suggest
> that all pieces must have a location preceeding them. There is also a
> comment in dwarf2out.c which says:
>
> "DW_OP_piece is only added if the location description expression already
> doesn't end with DW_OP_piece"
>
> so it would seem like two contiguous pieces is wrong, but it seems to
> occur so frequently I wonder if it is a correct output after all.
DW_OP_piece is preceeded by simple location description (DWARF4, 2.6.1.1).
And one of the valid simple location descriptions is empty location
description:
2.6.1.1.4 Empty Location Descriptions
An empty location description consists of a DWARF expression containing no
operations. It represents a piece or all of an object that is present in the
source but not in the object code (perhaps due to optimization).
So the above means that the first 4 bytes of the variable live in
memory pointed by register 5 and the second 4 bytes of the variable are
optimized out.
Jakub