On Wed, Mar 9, 2016 at 9:57 AM, Michael Eager <ea...@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 ea...@eagercon.com > 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077 > _______________________________________________ > Dwarf-Discuss mailing list > Dwarf-Discuss@lists.dwarfstd.org > http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org >
_______________________________________________ Dwarf-Discuss mailing list Dwarf-Discuss@lists.dwarfstd.org http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org