clayborg added a comment.

In D62649#1523074 <https://reviews.llvm.org/D62649#1523074>, @labath wrote:

> Actually, I've run into a bit of a snag while trying to implement the full 
> line table sharing. The thing is, before DWARF5, the line tables are not 
> fully independent, and require the DW_AT_comp_dir of the compile unit in 
> order to resolve the relative paths correctly. Type units do not have the 
> DW_AT_comp_dir attribute, and so in order to correctly parse their line 
> tables, I'd have to check their DW_AT_stmt_list attribute, find the matching 
> compile unit, and fetch the compilation directory from there. This is 
> relatively easy do to in regular DWARF, though it still requires some fairly 
> elaborate dances if one wants to do it lazily and efficiently, etc.
>
> However, things get a lot more complicated when split-dwarf comes into play. 
> There the compiler will emit a separate line table into the dwo file for use 
> by the type unit, and the compile unit will use the line table from the main 
> file (located through DW_AT_stmt_list on the skeleton unit in the .o file). 
> Here it is pretty much impossible to reliably connect the type unit to the 
> relevant comp_dir. If the DWO file contains a single compilation unit, I 
> might guess that I should look at this one, but in case of multiple compile 
> units in a single dwo file we're out of luck.
>
> So, this got me thinking that maybe this DW_AT_comp_dir business is not worth 
> all the trouble it brings, and I'm now thinking of a simpler solution:
>
> - for each type unit, parse the line tables without the DW_AT_comp_dir 
> attribute. Cache them, and share them between type units.
> - for each compile unit, parse the line tables *with* the DW_AT_comp_dir. 
> Don't cache and don't share them (i.e., do exactly what we do now)
>
>   This means each line table will be parsed at most twice (once for its 
> compile unit, and once for any type units that refer to it). It's not 
> possible to share them between CUs and TUs without going through the complex 
> matching process I described above, or without risking that the CU will get 
> incomplete line tables if they have already been parsed via a type unit. It 
> also means that for types in a TU we might not have complete declaration file 
> names (in DWARF<=4), but I am not sure how many users will actually care 
> about that (not even llvm-dwarfdump tries to do this matching). And this will 
> still prevent the line table being parsed hundreds of times for each type 
> unit that happens to refer to it...
>
>   I think that potentially parsing a line table (only it's file list, really) 
> twice is worth the reduction in complexity that a full sharing would require. 
> WDYT?
>
>   If you agree, then this patch is also not really necessary (though the 
> llvm::Expected part is a nice refactor regardless IMO).


That is my current solution in our internal LLDB fork, so yes, this works and 
is probably the best solution.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62649/new/

https://reviews.llvm.org/D62649



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to