{"push_id":761180012,"size":1,"distinct_size":1,"ref":"refs/heads/debugLocals","head":"346391061de660a2a4d816207342e3213182bc77","before":"4eee025c0cb89f9b4ce072f070500366cdfc2cee","commits":[{"sha":"346391061de660a2a4d816207342e3213182bc77","author":{"email":"8c79a9d57b4468b044fbe8d96a63e3b5cf469a9a@microsoft.com","name":"Michelle McDaniel"},"message":"Add debug support for locals\n\nThis change add support to LLILC to send local variable information to\nLLVM and then on to the CLR EE to be used in debugging. This change\nadds:\n\n* Support to the Reader to capture local variables as they are created.\n  We copy the logic from clang to specify if a local is a formal\n  parameter or a regular local variable, though the CLR does not seem to\n  care about this distinction. We assume that the local is in scope for\n  the full function.\n* Update convertType to deal with struct types. Since we don't use the\n  type information for debugging, we can create a debug struct type with\n  no real information about the struct. This change is really just there\n  to prevent LLVM from attempting to reference a nullptr.\n* Support to the ObjectLoadListener to extract DWARF information from\n  the ObjectFile for local variables. Unlike line numbers, there is no\n  built in support for extracting local variable information, so we have\n  to add support to LLILC for this purpose. The extraction works much\n  the same way as the DWARF info dumper: we extract the Unit\n  DebugInfoEntry (DIE), find the Subprogram DIE -- DWARF's name for a\n  function -- and then extract the locals that are in the subprogram.\n  The DWARF format stores the frame_base register in the Subprogram\n  DIE, so we must extract that and convert the DWARF register name to\n  the value the CLR EE understands. Each of the locals can be found at\n  an offset from the value in the frame_base register, and that offset\n  is the last entry in the DW_AT_location attribute. For each local, we\n  must then communicate back the EE the local number (assumed to be in\n  order by creation in the DWARF info), the frame_base register and the\n  offset. For now, we assume that all locals are found on the stack,\n  though this may change, and will need future updates. If there were no\n  locals in a function, we do not report anything back to the EE for\n  that function.","distinct":true,"url":"https://api.github.com/repos/adiaaida/llilc/commits/346391061de660a2a4d816207342e3213182bc77"}]}