On Mar 9, 2016 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: > > 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".
After you suggesting that this float type would be used only for floats in register and a different float type would be used for floats in memory? I'm not sure how that would be used to describe a single variable that at some points in its lifetime resides in memory and at others in register. > > > -- > 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