@@ -3098,11 +3098,26 @@ mccasformats::v1::loadDIETopLevel(DIETopLevelRef TopLevelRef) {
3098
3098
}
3099
3099
3100
3100
struct DIEVisitor {
3101
+
3102
+ struct AbbrevContent {
3103
+ dwarf::Attribute Attr;
3104
+ dwarf::Form Form;
3105
+ bool FormInDistinctData;
3106
+ std::optional<uint8_t > FormSize;
3107
+ };
3108
+
3109
+ struct AbbrevEntry {
3110
+ dwarf::Tag Tag;
3111
+ bool HasChildren;
3112
+ SmallVector<AbbrevContent> AbbrevContents;
3113
+ };
3114
+
3101
3115
Error visitDIERef (DIEDedupeTopLevelRef Ref);
3102
3116
Error visitDIERef (ArrayRef<DIEDataRef> &DIEChildrenStack);
3103
3117
Error visitDIEAttrs (AbbrevEntryReader &AbbrevReader,
3104
3118
BinaryStreamReader &Reader, StringRef DIEData);
3105
3119
3120
+ SmallVector<AbbrevEntry> AbbrevEntryCache;
3106
3121
ArrayRef<StringRef> AbbrevEntries;
3107
3122
BinaryStreamReader DistinctReader;
3108
3123
StringRef DistinctData;
@@ -3307,8 +3322,8 @@ Error mccasformats::v1::visitDebugInfo(
3307
3322
HeaderCallback (toStringRef (HeaderData));
3308
3323
3309
3324
append_range (TotAbbrevEntries, LoadedTopRef->AbbrevEntries );
3310
- DIEVisitor Visitor{TotAbbrevEntries, DistinctReader, DistinctData ,
3311
- HeaderCallback, StartTagCallback, AttrCallback ,
3312
- EndTagCallback, NewBlockCallback};
3325
+ DIEVisitor Visitor{{}, TotAbbrevEntries, DistinctReader ,
3326
+ DistinctData, HeaderCallback, StartTagCallback,
3327
+ AttrCallback, EndTagCallback, NewBlockCallback};
3313
3328
return Visitor.visitDIERef (LoadedTopRef->RootDIE );
3314
3329
}
0 commit comments