(no commit message)
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 17 Jan 2021 15:29:25 +0000 (16:29 +0100)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 17 Jan 2021 15:29:25 +0000 (16:29 +0100)
16 files changed:
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFTypeUnit.h
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
lldb/source/Plugins/SymbolFile/DWARF/UniqueDWARFASTType.cpp
lldb/source/Plugins/SymbolFile/DWARF/UniqueDWARFASTType.h

index 94c2d63..485b37f 100644 (file)
@@ -947,7 +947,7 @@ TypeSP DWARFASTParserClang::ParseSubroutine(const SymbolContext &sc,
 
   if (die.HasChildren()) {
     bool skip_artificial = true;
-    ParseChildParameters(sc.comp_unit, containing_decl_ctx, die,
+    ParseChildParameters(sc.comp_unit, containing_decl_ctx, main_unit, die,
                          skip_artificial, is_static, is_variadic,
                          has_template_params, function_param_types,
                          function_param_decls, type_quals);
@@ -1465,7 +1465,7 @@ DWARFASTParserClang::ParseStructureLikeDIE(const SymbolContext &sc,
     }
 
     if (dwarf->GetUniqueDWARFASTTypeMap().Find(
-            unique_typename, die, unique_decl, attrs.byte_size.getValueOr(-1),
+            unique_typename, main_unit, die, unique_decl, attrs.byte_size.getValueOr(-1),
             *unique_ast_entry_up)) {
       type_sp = unique_ast_entry_up->m_type_sp;
       if (type_sp) {
@@ -1603,8 +1603,10 @@ DWARFASTParserClang::ParseStructureLikeDIE(const SymbolContext &sc,
       // We found a real definition for this type elsewhere so lets use
       // it and cache the fact that we found a complete type for this die
       dwarf->GetDIEToType()[die.MainCUtoDIEPair(main_unit)] = type_sp.get();
+      DWARFUnit *type_main_unit;
+      DWARFDIE type_die = dwarf->GetDIEUnlocked(type_sp->GetID(), &type_main_unit);
       clang::DeclContext *defn_decl_ctx =
-          GetCachedClangDeclContextForDIE(main_unit, dwarf->GetDIEUnlocked(type_sp->GetID(), &main_unit));
+          GetCachedClangDeclContextForDIE(type_main_unit, type_die);
       if (defn_decl_ctx)
         LinkDeclContextToDIE(defn_decl_ctx, main_unit, die);
       return type_sp;
@@ -1690,6 +1692,7 @@ DWARFASTParserClang::ParseStructureLikeDIE(const SymbolContext &sc,
   // copies of the same type over and over in the ASTContext for our
   // module
   unique_ast_entry_up->m_type_sp = type_sp;
+  unique_ast_entry_up->m_main_unit = main_unit;
   unique_ast_entry_up->m_die = die;
   unique_ast_entry_up->m_declaration = unique_decl;
   unique_ast_entry_up->m_byte_size = attrs.byte_size.getValueOr(0);
@@ -2021,7 +2024,7 @@ bool DWARFASTParserClang::CompleteRecordType(DWARFUnit *main_unit, const DWARFDI
     std::vector<DWARFDIE> member_function_dies;
 
     DelayedPropertyList delayed_properties;
-    ParseChildMembers(comp_unit, die, clang_type, bases, member_accessibilities,
+    ParseChildMembers(comp_unit, main_unit, die, clang_type, bases, member_accessibilities,
                       member_function_dies, delayed_properties,
                       default_accessibility, is_a_class, layout_info);
 
@@ -2335,7 +2338,7 @@ Function *DWARFASTParserClang::ParseFunctionFromDWARF(CompileUnit &comp_unit,
 
         clang::DeclContext *containing_decl_ctx =
             GetClangDeclContextContainingDIE(main_unit, die, nullptr);
-        ParseChildParameters(&comp_unit, containing_decl_ctx, die, true,
+        ParseChildParameters(&comp_unit, containing_decl_ctx, main_unit, die, true,
                              is_static, is_variadic, has_template_params,
                              param_types, param_decls, type_quals);
         sstr << "(";
@@ -2386,7 +2389,7 @@ Function *DWARFASTParserClang::ParseFunctionFromDWARF(CompileUnit &comp_unit,
   return nullptr;
 }
 
-void DWARFASTParserClang::ParseSingleMember(lldb_private::CompileUnit *comp_unit, const DWARFDIE &die, const DWARFDIE &parent_die,
+void DWARFASTParserClang::ParseSingleMember(lldb_private::CompileUnit *comp_unit, DWARFUnit *main_unit, const DWARFDIE &die, const DWARFDIE &parent_die,
     const lldb_private::CompilerType &class_clang_type,
     std::vector<int> &member_accessibilities,
     lldb::AccessType default_accessibility,
@@ -2570,8 +2573,6 @@ void DWARFASTParserClang::ParseSingleMember(lldb_private::CompileUnit *comp_unit
   if (class_is_objc_object_or_interface)
     accessibility = eAccessNone;
 
-  DWARFUnit *main_unit = !comp_unit ? nullptr : comp_unit->GetDWARFCompileUnit();
-
   // Handle static members
   if (is_external && member_byte_offset == UINT32_MAX) {
     Type *var_type = die.ResolveTypeUID(main_unit, encoding_form.Reference());
@@ -2806,7 +2807,7 @@ void DWARFASTParserClang::ParseSingleMember(lldb_private::CompileUnit *comp_unit
 }
 
 bool DWARFASTParserClang::ParseChildMembers(
-    CompileUnit *comp_unit,
+    CompileUnit *comp_unit, DWARFUnit *main_unit,
     const DWARFDIE &parent_die, CompilerType &class_clang_type,
     std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
     std::vector<int> &member_accessibilities,
@@ -2824,8 +2825,6 @@ bool DWARFASTParserClang::ParseChildMembers(
   if (ast == nullptr)
     return false;
 
-  DWARFUnit *main_unit = !comp_unit ? nullptr : comp_unit->GetDWARFCompileUnit();
-
   for (DWARFDIE die = parent_die.GetFirstChild(); die.IsValid();
        die = die.GetSibling()) {
     dw_tag_t tag = die.Tag();
@@ -2833,7 +2832,7 @@ bool DWARFASTParserClang::ParseChildMembers(
     switch (tag) {
     case DW_TAG_member:
     case DW_TAG_APPLE_property:
-      ParseSingleMember(comp_unit, die, parent_die, class_clang_type,
+      ParseSingleMember(comp_unit, main_unit, die, parent_die, class_clang_type,
                         member_accessibilities, default_accessibility,
                         delayed_properties, layout_info, last_field_info);
       break;
@@ -2969,6 +2968,7 @@ bool DWARFASTParserClang::ParseChildMembers(
 
 size_t DWARFASTParserClang::ParseChildParameters(
     CompileUnit *comp_unit, clang::DeclContext *containing_decl_ctx,
+    DWARFUnit *main_unit,
     const DWARFDIE &parent_die, bool skip_artificial, bool &is_static,
     bool &is_variadic, bool &has_template_params,
     std::vector<CompilerType> &function_param_types,
@@ -2977,8 +2977,6 @@ size_t DWARFASTParserClang::ParseChildParameters(
   if (!parent_die)
     return 0;
 
-  DWARFUnit *main_unit = !comp_unit ? nullptr : comp_unit->GetDWARFCompileUnit();
-
   size_t arg_idx = 0;
   for (DWARFDIE die = parent_die.GetFirstChild(); die.IsValid();
        die = die.GetSibling()) {
index 31cbd7e..96ebc3a 100644 (file)
@@ -77,21 +77,21 @@ protected:
   typedef std::vector<DelayedAddObjCClassProperty> DelayedPropertyList;
 
   typedef llvm::SmallSet<
-      std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>, 4>
+      std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>, 4>
       DIEPointerSet;
   typedef llvm::DenseMap<
-      std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>,
+      std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>,
       clang::DeclContext *>
       DIEToDeclContextMap;
   typedef std::multimap<const clang::DeclContext *,
-                        std::pair<DWARFCompileUnit *, const DWARFDIE>>
+                        std::pair<DWARFUnit *, const DWARFDIE>>
       DeclContextToDIEMap;
   typedef llvm::DenseMap<
-      std::pair<const DWARFCompileUnit *, const DWARFDebugInfoEntry *>,
+      std::pair<const DWARFUnit *, const DWARFDebugInfoEntry *>,
       lldb_private::OptionalClangModuleID>
       DIEToModuleMap;
   typedef llvm::DenseMap<
-      std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>, clang::Decl *>
+      std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>, clang::Decl *>
       DIEToDeclMap;
   typedef llvm::DenseMap<const clang::Decl *, DIEPointerSet> DeclToDIEMap;
 
@@ -123,6 +123,7 @@ protected:
 
   bool ParseChildMembers(
       lldb_private::CompileUnit *comp_unit,
+      DWARFUnit *main_unit,
       const DWARFDIE &die, lldb_private::CompilerType &class_compiler_type,
       std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
       std::vector<int> &member_accessibilities,
@@ -133,7 +134,7 @@ protected:
 
   size_t
   ParseChildParameters(lldb_private::CompileUnit *comp_unit,
-                       clang::DeclContext *containing_decl_ctx,
+                       clang::DeclContext *containing_decl_ctx, DWARFUnit *main_unit,
                        const DWARFDIE &parent_die, bool skip_artificial,
                        bool &is_static, bool &is_variadic,
                        bool &has_template_params,
@@ -216,7 +217,7 @@ private:
   };
 
   void
-  ParseSingleMember(lldb_private::CompileUnit *comp_unit, const DWARFDIE &die,
+  ParseSingleMember(lldb_private::CompileUnit *comp_unit, DWARFUnit *main_unit, const DWARFDIE &die,
                     const DWARFDIE &parent_die,
                     const lldb_private::CompilerType &class_clang_type,
                     std::vector<int> &member_accessibilities,
index 4726881..9fa1317 100644 (file)
@@ -116,13 +116,9 @@ DWARFDIE DWARFCompileUnit::LookupAddress(const dw_addr_t address) {
   return DWARFDIE();
 }
 
-DWARFCompileUnit *
-DWARFCompileUnit::GetDWARFCompileUnit(DWARFUnit *main_unit) {
-  // if (GetUnitDIEOnly().Tag() != DW_TAG_partial_unit)
-  DWARFCompileUnit *cu = reinterpret_cast<DWARFCompileUnit *>(this);
-  cu = &cu->GetNonSkeletonUnit();
-  return cu;
-//  return DWARFUnit::GetDWARFCompileUnit(main_unit);
+DWARFUnit *DWARFCompileUnit::GetMainDWARFUnit(DWARFUnit *main_unit) {
+  main_unit = &main_unit->GetNonSkeletonUnit();
+  return main_unit;
 }
 
 CompileUnit *DWARFCompileUnit::GetCompUnit() {
index a310ec5..b863eeb 100644 (file)
@@ -24,7 +24,7 @@ public:
 
   DWARFDIE LookupAddress(const dw_addr_t address);
 
-  DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit) override;
+  virtual DWARFUnit *GetMainDWARFUnit(DWARFUnit *main_unit) override;
 
   DWARFDIE DIE() { return {this, DIEPtr()}; }
 
index 2cc015e..5b49ec9 100644 (file)
@@ -458,24 +458,17 @@ bool DWARFDIE::GetDIENamesAndRanges(
     return false;
 }
 
-DWARFCompileUnit *
-DWARFDIE::GetDWARFCompileUnit(DWARFUnit *main_unit) const {
-  if (!IsValid())
-    return nullptr;
-  return GetCU()->GetDWARFCompileUnit(main_unit);
-}
-
 DWARFUnit *DWARFDIE::GetMainDWARFUnit(DWARFUnit *main_unit) const {
   lldbassert(IsValid());
   return GetCU()->GetMainDWARFUnit(main_unit);
 }
 
-std::pair<DWARFCompileUnit *, DWARFDIE>
+std::pair<DWARFUnit *, DWARFDIE>
 DWARFDIE::MainCUtoDWARFDIEPair(DWARFUnit *main_unit) const {
-  return std::make_pair(GetDWARFCompileUnit(main_unit), *this);
+  return std::make_pair(GetMainDWARFUnit(main_unit), *this);
 }
 
-std::pair<DWARFCompileUnit *, DWARFDebugInfoEntry *>
+std::pair<DWARFUnit *, DWARFDebugInfoEntry *>
 DWARFDIE::MainCUtoDIEPair(DWARFUnit *main_unit) const {
-  return std::make_pair(GetDWARFCompileUnit(main_unit), GetDIE());
+  return std::make_pair(GetMainDWARFUnit(main_unit), GetDIE());
 }
index 0d28188..4344281 100644 (file)
@@ -96,11 +96,10 @@ public:
                             int &call_line, int &call_column,
                             lldb_private::DWARFExpression *frame_base) const;
 
-  DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit) const;
   DWARFUnit *GetMainDWARFUnit(DWARFUnit *main_unit) const;
-  std::pair<DWARFCompileUnit *, DWARFDIE>
+  std::pair<DWARFUnit *, DWARFDIE>
   MainCUtoDWARFDIEPair(DWARFUnit *main_unit) const;
-  std::pair<DWARFCompileUnit *, DWARFDebugInfoEntry *>
+  std::pair<DWARFUnit *, DWARFDebugInfoEntry *>
   MainCUtoDIEPair(DWARFUnit *main_unit) const;
 };
 
index 816caf0..98a65d9 100644 (file)
@@ -30,7 +30,7 @@ bool DWARFIndex::ProcessFunctionDIE(
     ReportInvalidDIERef(ref, name);
     return true;
   }
-  main_unit = die.GetDWARFCompileUnit(main_unit);
+  main_unit = die.GetMainDWARFUnit(main_unit);
 
   // Exit early if we're searching exclusively for methods or selectors and
   // we have a context specified (no methods in namespaces).
index 25a2dae..356dbac 100644 (file)
@@ -22,6 +22,8 @@ void DWARFTypeUnit::Dump(Stream *s) const {
             GetAddressByteSize(), GetNextUnitOffset());
 }
 
-DWARFCompileUnit *DWARFTypeUnit::GetDWARFCompileUnit(DWARFUnit *main_unit) {
-  return nullptr;
+DWARFUnit *DWARFTypeUnit::GetMainDWARFUnit(DWARFUnit *main_unit) {
+  main_unit = this;
+  main_unit = &main_unit->GetNonSkeletonUnit();
+  return main_unit;
 }
index c886eba..64e6f91 100644 (file)
@@ -24,7 +24,7 @@ public:
 
   static bool classof(const DWARFUnit *unit) { return unit->IsTypeUnit(); }
 
-  DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit) override;
+  virtual DWARFUnit *GetMainDWARFUnit(DWARFUnit *main_unit) override;
 
 private:
   DWARFTypeUnit(SymbolFileDWARF &dwarf, lldb::user_id_t uid,
index f057e48..0217140 100644 (file)
@@ -972,19 +972,3 @@ DWARFUnit::FindRnglistFromIndex(uint32_t index) {
   return llvm::createStringError(errc::invalid_argument,
                                  "missing or invalid range list table");
 }
-
-#if 0
-DWARFCompileUnit *
-DWARFUnit::GetDWARFCompileUnit(DWARFUnit *main_unit) {
-  lldbassert(main_unit);
-  main_unit = &main_unit->GetNonSkeletonUnit();
-  return main_unit;
-}
-#endif
-
-DWARFUnit *DWARFUnit::GetMainDWARFUnit(DWARFUnit *main_unit) {
-  main_unit = GetDWARFCompileUnit(main_unit);
-  if (main_unit)
-    return main_unit;
-  return this;
-}
index 8ef61d5..64154e1 100644 (file)
@@ -263,9 +263,7 @@ public:
 
   lldb_private::DWARFDataExtractor GetLocationData() const;
 
-//  virtual DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit);
-  virtual DWARFCompileUnit *GetDWARFCompileUnit(DWARFUnit *main_unit)=0;
-  DWARFUnit *GetMainDWARFUnit(DWARFUnit *main_unit);
+  virtual DWARFUnit *GetMainDWARFUnit(DWARFUnit *main_unit)=0;
 
 protected:
   DWARFUnit(SymbolFileDWARF &dwarf, lldb::user_id_t uid,
index 1732b40..d857133 100644 (file)
@@ -73,7 +73,7 @@ bool DebugNamesDWARFIndex::ProcessEntry(
   if (!die)
     return true;
   // FIXME: DWZ
-  DWARFUnit *main_unit = die.GetDWARFCompileUnit(nullptr);
+  DWARFUnit *main_unit = die.GetMainDWARFUnit(nullptr);
   return callback(main_unit, die);
 }
 
index e66ae24..cab7597 100644 (file)
@@ -122,20 +122,19 @@ void ManualDWARFIndex::IndexUnit(DWARFUnit &unit, SymbolFileDWARFDwo *dwp,
   }
 
   const LanguageType cu_language = SymbolFileDWARF::GetLanguage(unit);
-  DWARFUnit *main_unit = llvm::dyn_cast<DWARFCompileUnit>(&unit);
 
-  IndexUnitImpl(unit, main_unit, cu_language, set);
+  IndexUnitImpl(unit, &unit, cu_language, set);
 
   if (SymbolFileDWARFDwo *dwo_symbol_file = unit.GetDwoSymbolFile()) {
     // Type units in a dwp file are indexed separately, so we just need to
     // process the split unit here. However, if the split unit is in a dwo file,
     // then we need to process type units here.
     if (dwo_symbol_file == dwp) {
-      IndexUnitImpl(unit.GetNonSkeletonUnit(), main_unit, cu_language, set);
+      IndexUnitImpl(unit.GetNonSkeletonUnit(), &unit, cu_language, set);
     } else {
       DWARFDebugInfo &dwo_info = dwo_symbol_file->DebugInfo();
       for (size_t i = 0; i < dwo_info.GetNumUnits(); ++i)
-        IndexUnitImpl(*dwo_info.GetUnitAtIndex(i), main_unit, cu_language, set);
+        IndexUnitImpl(*dwo_info.GetUnitAtIndex(i), &unit, cu_language, set);
     }
   }
 }
index 6545ab6..2680977 100644 (file)
@@ -336,15 +336,15 @@ public:
 
 protected:
   typedef llvm::DenseMap<
-      std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>,
+      std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>,
       lldb_private::Type *>
       DIEToTypePtr;
   typedef llvm::DenseMap<
-      std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>,
+      std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>,
       lldb::VariableSP>
       DIEToVariableSP;
   typedef llvm::DenseMap<
-      std::pair<DWARFCompileUnit *, const DWARFDebugInfoEntry *>,
+      std::pair<DWARFUnit *, const DWARFDebugInfoEntry *>,
       lldb::opaque_compiler_type_t>
       DIEToClangType;
   typedef llvm::DenseMap<lldb::opaque_compiler_type_t, lldb::user_id_t>
index 2181989..d97f9e1 100644 (file)
 
 #include "lldb/Symbol/Declaration.h"
 
-bool UniqueDWARFASTTypeList::Find(const DWARFDIE &die,
+bool UniqueDWARFASTTypeList::Find(DWARFUnit *main_unit, const DWARFDIE &die,
                                   const lldb_private::Declaration &decl,
                                   const int32_t byte_size,
                                   UniqueDWARFASTType &entry) const {
   for (const UniqueDWARFASTType &udt : m_collection) {
     // Make sure the tags match
-    if (udt.m_die.Tag() == die.Tag()) {
+    if (udt.m_die.Tag() == die.Tag() && udt.m_main_unit == main_unit) {
       // Validate byte sizes of both types only if both are valid.
       if (udt.m_byte_size < 0 || byte_size < 0 ||
           udt.m_byte_size == byte_size) {
index a1b1a30..cecbbcd 100644 (file)
@@ -20,18 +20,18 @@ class UniqueDWARFASTType {
 public:
   // Constructors and Destructors
   UniqueDWARFASTType()
-      : m_type_sp(), m_die(), m_declaration(),
+      : m_type_sp(), m_main_unit(nullptr), m_die(), m_declaration(),
         m_byte_size(
             -1) // Set to negative value to make sure we have a valid value
   {}
 
-  UniqueDWARFASTType(lldb::TypeSP &type_sp, const DWARFDIE &die,
+  UniqueDWARFASTType(lldb::TypeSP &type_sp, DWARFUnit *main_unit, const DWARFDIE &die,
                      const lldb_private::Declaration &decl, int32_t byte_size)
-      : m_type_sp(type_sp), m_die(die), m_declaration(decl),
+      : m_type_sp(type_sp), m_main_unit(main_unit), m_die(die), m_declaration(decl),
         m_byte_size(byte_size) {}
 
   UniqueDWARFASTType(const UniqueDWARFASTType &rhs)
-      : m_type_sp(rhs.m_type_sp), m_die(rhs.m_die),
+      : m_type_sp(rhs.m_type_sp), m_main_unit(rhs.m_main_unit), m_die(rhs.m_die),
         m_declaration(rhs.m_declaration), m_byte_size(rhs.m_byte_size) {}
 
   ~UniqueDWARFASTType() {}
@@ -39,6 +39,7 @@ public:
   UniqueDWARFASTType &operator=(const UniqueDWARFASTType &rhs) {
     if (this != &rhs) {
       m_type_sp = rhs.m_type_sp;
+      m_main_unit = rhs.m_main_unit;
       m_die = rhs.m_die;
       m_declaration = rhs.m_declaration;
       m_byte_size = rhs.m_byte_size;
@@ -47,6 +48,7 @@ public:
   }
 
   lldb::TypeSP m_type_sp;
+  DWARFUnit *m_main_unit;
   DWARFDIE m_die;
   lldb_private::Declaration m_declaration;
   int32_t m_byte_size;
@@ -64,7 +66,7 @@ public:
     m_collection.push_back(entry);
   }
 
-  bool Find(const DWARFDIE &die, const lldb_private::Declaration &decl,
+  bool Find(DWARFUnit *main_unit, const DWARFDIE &die, const lldb_private::Declaration &decl,
             const int32_t byte_size, UniqueDWARFASTType &entry) const;
 
 protected:
@@ -83,13 +85,13 @@ public:
     m_collection[name.GetCString()].Append(entry);
   }
 
-  bool Find(lldb_private::ConstString name, const DWARFDIE &die,
+  bool Find(lldb_private::ConstString name, DWARFUnit *main_unit, const DWARFDIE &die,
             const lldb_private::Declaration &decl, const int32_t byte_size,
             UniqueDWARFASTType &entry) const {
     const char *unique_name_cstr = name.GetCString();
     collection::const_iterator pos = m_collection.find(unique_name_cstr);
     if (pos != m_collection.end()) {
-      return pos->second.Find(die, decl, byte_size, entry);
+      return pos->second.Find(main_unit, die, decl, byte_size, entry);
     }
     return false;
   }