zequanwu added a comment.

In D115308#3184564 <https://reviews.llvm.org/D115308#3184564>, @shafik wrote:

> I would also like to know where this duplicate insertion is happening. Can 
> you walk us through the steps that lead to the duplicate entries? thank you!

Firstly, I found that `SymbolFileDWARF::ParseType` -> 
`DWARFASTParserClang::ParseTypeFromDWARF` -> 
`DWARFASTParserClang::UpdateSymbolContextScopeForType`. It's inserting the same 
type at both places (SymbolFileDWARF::ParseType 
<https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp#L2982>
 and DWARFASTParserClang::UpdateSymbolContextScopeForType 
<https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L1555>
 ). In my first revision, I just attempted to remove the insertion in 
UpdateSymbolContextScopeForType. Then I found that when running `lldb-test 
symbols [binary]`, it's inserting same types at `ParseTypes`. For following 
dwarf info, when `ParseType` was called for `DW_TAG_subroutine_type`, it will 
also call `ParseType` for the type `DW_TAG_base_type` inside it. When the 
top-level `ParseTypes` iterates to `0x0000010f`, the type will be inserted 
twice:

  0x0000010a:   DW_TAG_subroutine_type
                  DW_AT_type      (0x0000010f "int")
  
  0x0000010f:   DW_TAG_base_type
                  DW_AT_name      ("int")
                  DW_AT_encoding  (DW_ATE_signed)
                  DW_AT_byte_size (0x04)

So, I figured it might be better to deduplicate the types inside TypeList when 
insertion happens, though `ParseTypes` is only used at `lldb-test`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115308

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

Reply via email to