LLVM: lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp Source File (original) (raw)
25 Offset = *OffsetPtr;
26 this->ParentIdx = ParentIdx;
27 if (Offset >= UEndOffset) {
28 U.getContext().getWarningHandler()(
30 "DWARF unit from offset 0x%8.8" PRIx64 " incl. "
31 "to offset 0x%8.8" PRIx64 " excl. "
32 "tries to read DIEs at offset 0x%8.8" PRIx64,
33 U.getOffset(), U.getNextUnitOffset(), *OffsetPtr));
34 return false;
35 }
38 if (0 == AbbrCode) {
39
40 AbbrevDecl = nullptr;
41 return true;
42 }
43 const auto *AbbrevSet = U.getAbbreviations();
44 if (!AbbrevSet) {
45 U.getContext().getWarningHandler()(
47 "DWARF unit at offset 0x%8.8" PRIx64 " "
48 "contains invalid abbreviation set offset 0x%" PRIx64,
49 U.getOffset(), U.getAbbreviationsOffset()));
50
51 *OffsetPtr = Offset;
52 return false;
53 }
54 AbbrevDecl = AbbrevSet->getAbbreviationDeclaration(AbbrCode);
55 if (!AbbrevDecl) {
56 U.getContext().getWarningHandler()(
58 "DWARF unit at offset 0x%8.8" PRIx64 " "
59 "contains invalid abbreviation %" PRIu64 " at "
60 "offset 0x%8.8" PRIx64 ", valid abbreviations are %s",
61 U.getOffset(), AbbrCode, *OffsetPtr,
62 AbbrevSet->getCodeRange().c_str()));
63
64 *OffsetPtr = Offset;
65 return false;
66 }
67
68
69 if (std::optional<size_t> FixedSize =
70 AbbrevDecl->getFixedAttributesByteSize(U)) {
71 *OffsetPtr += *FixedSize;
72 return true;
73 }
74
75
76 for (const auto &AttrSpec : AbbrevDecl->attributes()) {
77
78 if (auto FixedSize = AttrSpec.getByteSize(U)) {
79
80 *OffsetPtr += *FixedSize;
82 OffsetPtr, U.getFormParams())) {
83
84
87 "DWARF unit at offset 0x%8.8" PRIx64 " "
88 "contains invalid FORM_* 0x%" PRIx16 " at offset 0x%8.8" PRIx64,
89 U.getOffset(), AttrSpec.Form, *OffsetPtr));
90 *OffsetPtr = Offset;
91 return false;
92 }
93 }
94 return true;
95}
LLVM_ABI bool extractFast(const DWARFUnit &U, uint64_t *OffsetPtr, const DWARFDataExtractor &DebugInfoData, uint64_t UEndOffset, uint32_t ParentIdx)
Extracts a debug info entry, which is a child of a given unit, starting at a given offset.
Definition DWARFDebugInfoEntry.cpp:22