section == DIERef::Section::DebugTypes ? DW_UT_type : DW_UT_compile;
}
+ if (header.IsTypeUnit()) {
+ header.m_type_hash = data.GetU64(offset_ptr);
+ header.m_type_offset = data.GetDWARFOffset(offset_ptr);
+ }
+
if (context.isDwo()) {
+ const llvm::DWARFUnitIndex *Index;
if (header.IsTypeUnit()) {
- header.m_index_entry =
- context.GetAsLLVM().getTUIndex().getFromOffset(header.m_offset);
+ Index = &context.GetAsLLVM().getTUIndex();
+ if (*Index)
+ header.m_index_entry = Index->getFromHash(header.m_type_hash);
} else {
- header.m_index_entry =
- context.GetAsLLVM().getCUIndex().getFromOffset(header.m_offset);
+ Index = &context.GetAsLLVM().getCUIndex();
+ if (*Index && header.m_version >= 5)
+ header.m_index_entry = Index->getFromHash(header.m_dwo_id);
}
+ if (!header.m_index_entry)
+ header.m_index_entry = Index->getFromOffset(header.m_offset);
}
if (header.m_index_entry) {
}
header.m_abbr_offset = abbr_entry->Offset;
}
- if (header.IsTypeUnit()) {
- header.m_type_hash = data.GetU64(offset_ptr);
- header.m_type_offset = data.GetDWARFOffset(offset_ptr);
- }
bool length_OK = data.ValidOffset(header.GetNextUnitOffset() - 1);
bool version_OK = SymbolFileDWARF::SupportedVersion(header.m_version);