[Dwarf-Discuss] Representing the location of smaller values in vector registers
David Blaikie
dblaikie@gmail.com
Wed Mar 9 18:00:48 GMT 2016
On Wed, Mar 9, 2016 at 9:57 AM, Michael Eager <eager at eagercon.com> wrote:
> On 03/09/2016 09:33 AM, Jakub Jelinek wrote:
>
>> On Wed, Mar 09, 2016 at 08:36:44AM -0800, Michael Eager wrote:
>>
>>> How is the "float" type described?
>>>
>>> A value which is contained in a register larger than the size of
>>> the value should be described by a DW_TAG_base_type. (DWARF 4,
>>> Sect. 5.1, bottom of page 75).
>>>
>>> For a 32-bit float in a 128-bit container, use something like the
>>> following:
>>>
>>> DW_TAG_base_type
>>> DW_AT_name "float"
>>> DW_AT_encoding DW_ATE_float
>>> DW_AT_byte_size 16
>>> DW_AT_bit_size 32
>>> DW_AT_data_bit_offset 0
>>>
>>> Note that there is no requirement that the names on base types
>>> be unique. There may be more than one with the name "float".
>>>
>>
>> I don't think this can really work. A particular variable (etc., whatever
>> has type) can have just one type, while whether it lives in a larger
>> container or not really depends on where the value lives.
>> The same variable could live in one .debug_loc range in memory
>> (where it certainly can't pretend it lives in a larger container, because
>> it
>> does not, it is 32-bit there), or when in some other range it lives in
>> a general purpose register (which can be 32-bit or 64-bit and either fits
>> in
>> there exactly, or is passed in the low bits of that), or in %xmm* register
>> (128-bit container, but, actually sometimes 256-bit and other times
>> 512-bit
>> container). I'd say LLDB is just broken to complain about this. The ABI
>> specifies what it means when a float lives in memory, or in GPRs, or in
>> XMM/YMM/ZMM registers.
>>
>
> My comment was based on the DWARF in Adrian's email, which describes
> a 32-bit floating point variable allocated to a 128-bit register. Adrian's
> DWARF doesn't describe a 32-bit variable in memory which is loaded into a
> larger register during the course of expression evaluation, which would
> be described by a location list.
>
> A 32-variable stored in a 32-bit memory location may have a location list
> which specifies that the value may be found in particular registers (either
> larger or smaller) during it's lifetime. That would be a different
> description
> in DWARF.
Why would it be useful to say that an entry in a location list cannot
always be used as a direct location for a variable? (what if the location
list only includes registers - should the type then be changed to the
representation you're suggesting? That seems awkward for producers and
doesn't seem to help consumers)
>
>
>
> --
> Michael Eager eager at eagercon.com
> 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
> _______________________________________________
> Dwarf-Discuss mailing list
> Dwarf-Discuss at lists.dwarfstd.org
> http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dwarfstd.org/private.cgi/dwarf-discuss-dwarfstd.org/attachments/20160309/490cb733/attachment.htm>
More information about the Dwarf-discuss
mailing list