jankratochvil added a comment.

In D73206#1928869 <https://reviews.llvm.org/D73206#1928869>, @labath wrote:

> But I'm not sure that removing `GetBaseSymbolFile` is the right way to start 
> that, as without it you cannot implement the redirection.


Current code is:

  SymbolFileDWARF::DIEToTypePtr &SymbolFileDWARFDwo::GetDIEToType() { return 
GetBaseSymbolFile().GetDIEToType(); }
  typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb_private::Type *> 
DIEToTypePtr;

There will need to be the following change for DWZ anyway - as the same 
`DWARFDebugInfoEntry *` can lead to different `Types` depending on its Main CU:

  typedef llvm::DenseMap<std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>, 
lldb_private::Type *> DIEToTypePtr;

Where the `pair.first` would be `DWARFUnit *main_cu` for DWZ. And so then the 
`SymbolFileDWARFDwo` redirection can be done from that `main_cu` pointer (with 
some interface refactorization).

> Where are you going with that question? If it's stopping you from doing 
> anything, I can try to look into that a bit closer...

As I have currently some difficulties unifying the DWZ MainCU tracking with DWO 
MainCU tracking. DWZ deals only with `DW_TAG_compile_unit` and not with 
`DW_TAG_type_unit` as DWZ can unify+reference types more effectively using 
`DW_FORM_ref*`. While DWO deals also with `DWARFTypeUnit`. Each DWZ 
`DWARFCompileUnit` has corresponding `CompileUnit` but `DWARFTypeUnit` does not 
have any. So in `SymbolFileDWARF::GetTypeForDIE` for DWO it will use the second 
code path:

  SymbolContextScope *scope;
  if (auto *dwarf_cu = llvm::dyn_cast<DWARFCompileUnit>(die.GetCU()))
    scope = GetCompUnitForDWARFCompUnit(*dwarf_cu);
  else
    scope = GetObjectFile()->GetModule().get();

Therefore this code of mine no longer works as `comp_unit==nullptr` for 
`DWARFTypeUnit`s:

  DWARFUnit *main_unit = dwarf->GetDWARFCompileUnit(sc.comp_unit);

So either I would need to add new tracking `DWARFUnit *main_unit` even to 
functions which already have `SymbolContext &sc` parameter. Or more probably I 
need to somehow track the skeleton file some other way (looking it up from 
`sc.module_sp` by its hash?).
Without DWO support it is easier as I no longer have to work on the DWO MainCU 
tracking which is a task of its own. Also I could use the type 
`DWARFCompileUnit *main_unit` which saves some downcastings.

So I am asking if the DWO support together with DWZ brings some real 
improvements as it complicates the situation for the DWZ support.

Just for illustration: 
https://people.redhat.com/jkratoch/lldb-main_unit-DWARFUnit.patch  or the 
non-DWO start of simplification: 
https://people.redhat.com/jkratoch/lldb-main_unit-DWARFCompileUnit.patch


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D73206



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

Reply via email to