> On Mar 9, 2016, at 8:36 AM, Michael Eager <ea...@eagercon.com> wrote:
> 
> On 03/04/2016 01:12 PM, Adrian Prantl wrote:
>> I have a best-practice kind of question:
>> 
>> The x86_64 System V ABI passes floating point values in the xmm0, xmm1, ... 
>> 128-bit SSE vector registers. I’m wondering what the correct DWARF v4 
>> (lacking the DWARF 5 type conversions) expression for a 32-bit float in xmm0 
>> is.
>> 
>> Given the following program:
>> 
>> float return_float() __attribute__((noinline)) { return 3.14f; }
>> 
>> int main(int argc, char** argv) {
>>   float f = return_float();
>>   return (int)f;
>> }
>> 
>> Clang (-O1) currently produces the following DWARF for the variable f:
>> 
>>  DW_TAG_variable
>>    DW_AT_location( reg17 )   // xmm0 = 17
>>    DW_AT_name( "f" )
>>    DW_AT_decl_file( "test.c" )
>>    DW_AT_decl_line( 8 )
>>    DW_AT_type( {0x0000004a} ( float ) )
>> 
>> Which causes LLDB to complain that the size of register xmm0 (128 Bits) is 
>> different from the size of f (32 Bits). I wonder who is wrong? Is LLDB being 
>> too strict, or should clang actually emit something like DW_OP_reg 17 (xmm0) 
>> DW_OP_piece 4 to make it abundantly clear that only the lower 32 bits of the 
>> vector register are interesting?
> 
> 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:

Shouldn’t the container be orthogonal to the base type? How would this work 
with location lists (the same variable might be once in a 128-bit container, 
then spilled onto the stack, or a constant)?

-- adrian

> 
>  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".
> 
> 
> -- 
> 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

Reply via email to