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