@@ -3086,11 +3086,26 @@ mccasformats::v1::loadDIETopLevel(DIETopLevelRef TopLevelRef) {
3086
3086
}
3087
3087
3088
3088
struct DIEVisitor {
3089
+
3090
+ struct AbbrevContent {
3091
+ dwarf::Attribute Attr;
3092
+ dwarf::Form Form;
3093
+ bool FormInDistinctData;
3094
+ std::optional<uint8_t > FormSize;
3095
+ };
3096
+
3097
+ struct AbbrevEntry {
3098
+ dwarf::Tag Tag;
3099
+ bool HasChildren;
3100
+ SmallVector<AbbrevContent> AbbrevContents;
3101
+ };
3102
+
3089
3103
Error visitDIERef (DIEDedupeTopLevelRef Ref);
3090
3104
Error visitDIERef (ArrayRef<DIEDataRef> &DIEChildrenStack);
3091
3105
Error visitDIEAttrs (AbbrevEntryReader &AbbrevReader,
3092
3106
BinaryStreamReader &Reader, StringRef DIEData);
3093
3107
3108
+ SmallVector<AbbrevEntry> AbbrevEntryCache;
3094
3109
ArrayRef<StringRef> AbbrevEntries;
3095
3110
BinaryStreamReader DistinctReader;
3096
3111
StringRef DistinctData;
@@ -3295,8 +3310,8 @@ Error mccasformats::v1::visitDebugInfo(
3295
3310
HeaderCallback (toStringRef (HeaderData));
3296
3311
3297
3312
append_range (TotAbbrevEntries, LoadedTopRef->AbbrevEntries );
3298
- DIEVisitor Visitor{TotAbbrevEntries, DistinctReader, DistinctData ,
3299
- HeaderCallback, StartTagCallback, AttrCallback ,
3300
- EndTagCallback, NewBlockCallback};
3313
+ DIEVisitor Visitor{{}, TotAbbrevEntries, DistinctReader ,
3314
+ DistinctData, HeaderCallback, StartTagCallback,
3315
+ AttrCallback, EndTagCallback, NewBlockCallback};
3301
3316
return Visitor.visitDIERef (LoadedTopRef->RootDIE );
3302
3317
}
0 commit comments