This patch implements the Two-Level Line Tables (TLLT) proposal currently aiming for Dwarf 6. This proposal allows the line table, which is DWARF's data structure used to map instructions to source locations and vice versa, to be emitted as a pair of tables instead of one, one of which maps source locations to instructions (the Logicals table) and the other of which maps instructions to source locations (the Actuals table). The proposal then extends the Logicals table by adding a context column, allowing entries in that table that represent inlined instructions to refer to another Logicals entry as being the inlined call location for that instruction, creating records for an inlined call stack in the line table and allowing the inlined callsites to be mapped to an instruction in the debugger.
This solves one of the current weaknesses in DWARF debugging, which is the inability to set breakpoints or step onto inlined callsites. However, there are other proposals (such as Location View Numbering) that could achieve the same thing, and the costs of TLLT in storage size and design complexity may make it a non-ideal solution to this problem. We currently have no plans to develop this implementation further, but this small demo may be useful to other developers who have an interest in pursuing this, and it is still possible that a good case may be made for TLLT as the best solution to the problem of representing inlined callsites.
As mentioned in the header, this patch was the result of aiming to get a basic functioning implementation in a very short time; it is not intended to be merged and is not of suitable quality, particularly in LLDB (with which we have no familiarity).