summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo/CodeView
diff options
context:
space:
mode:
authorNilanjana Basu <nilanjana.basu87@gmail.com>2019-07-03 00:51:49 +0000
committerNilanjana Basu <nilanjana.basu87@gmail.com>2019-07-03 00:51:49 +0000
commitc0b557744a7d8d87a7e5dd0364b168648d408ea9 (patch)
treefd6daf6e8a6a3a58187ed2b40601fc3b3e7e8054 /llvm/lib/DebugInfo/CodeView
parentefe21088d76c091a29bc7990ef9cf502e1f1bf62 (diff)
downloadbcm5719-llvm-c0b557744a7d8d87a7e5dd0364b168648d408ea9.tar.gz
bcm5719-llvm-c0b557744a7d8d87a7e5dd0364b168648d408ea9.zip
Revert Changing CodeView debug info type record representation in assembly files to make it more human-readable & editable
This reverts r364982 (git commit 2082bf28ebea76cc187b508f801122866420d9ff) llvm-svn: 364987
Diffstat (limited to 'llvm/lib/DebugInfo/CodeView')
-rw-r--r--llvm/lib/DebugInfo/CodeView/CVTypeVisitor.cpp15
-rw-r--r--llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp126
-rw-r--r--llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp19
3 files changed, 24 insertions, 136 deletions
diff --git a/llvm/lib/DebugInfo/CodeView/CVTypeVisitor.cpp b/llvm/lib/DebugInfo/CodeView/CVTypeVisitor.cpp
index ec4773d571c..dd6f75f97a4 100644
--- a/llvm/lib/DebugInfo/CodeView/CVTypeVisitor.cpp
+++ b/llvm/lib/DebugInfo/CodeView/CVTypeVisitor.cpp
@@ -209,14 +209,6 @@ struct VisitHelper {
}
}
- VisitHelper(TypeVisitorCallbackPipeline &Callbacks, VisitorDataSource Source)
- : Visitor((Source == VDS_BytesPresent) ? Pipeline : Callbacks) {
- if (Source == VDS_BytesPresent) {
- Pipeline = Callbacks;
- Pipeline.addCallbackToPipelineFront(Deserializer);
- }
- }
-
TypeDeserializer Deserializer;
TypeVisitorCallbackPipeline Pipeline;
CVTypeVisitor Visitor;
@@ -230,13 +222,6 @@ Error llvm::codeview::visitTypeRecord(CVType &Record, TypeIndex Index,
return V.Visitor.visitTypeRecord(Record, Index);
}
-Error llvm::codeview::visitTypeRecord(CVType &Record, TypeIndex Index,
- TypeVisitorCallbackPipeline &Callbacks,
- VisitorDataSource Source) {
- VisitHelper V(Callbacks, Source);
- return V.Visitor.visitTypeRecord(Record, Index);
-}
-
Error llvm::codeview::visitTypeRecord(CVType &Record,
TypeVisitorCallbacks &Callbacks,
VisitorDataSource Source) {
diff --git a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp
index 2b69a1e0768..92c795ab8fa 100644
--- a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp
+++ b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp
@@ -20,7 +20,6 @@ Error CodeViewRecordIO::beginRecord(Optional<uint32_t> MaxLength) {
Limit.MaxLength = MaxLength;
Limit.BeginOffset = getCurrentOffset();
Limits.push_back(Limit);
- resetStreamedLen();
return Error::success();
}
@@ -35,29 +34,10 @@ Error CodeViewRecordIO::endRecord() {
// we don't know how big the record is until we're finished writing it, so
// even though we don't commit the extraneous data, we still can't guarantee
// we're at the end of the allocated data.
-
- if (isStreaming()) {
- // For streaming mode, add padding to align with 4 byte boundaries for each
- // record
- uint32_t Align = getStreamedLen() % 4;
- if (Align == 0)
- return Error::success();
-
- int PaddingBytes = 4 - Align;
- while (PaddingBytes > 0) {
- char Pad = static_cast<uint8_t>(LF_PAD0 + PaddingBytes);
- StringRef BytesSR = StringRef(&Pad, sizeof(Pad));
- Streamer->EmitBytes(BytesSR);
- --PaddingBytes;
- }
- }
return Error::success();
}
uint32_t CodeViewRecordIO::maxFieldLength() const {
- if (isStreaming())
- return 0;
-
assert(!Limits.empty() && "Not in a record!");
// The max length of the next field is the minimum of all lengths that would
@@ -98,10 +78,7 @@ Error CodeViewRecordIO::skipPadding() {
}
Error CodeViewRecordIO::mapByteVectorTail(ArrayRef<uint8_t> &Bytes) {
- if (isStreaming()) {
- Streamer->EmitBinaryData(toStringRef(Bytes));
- incrStreamedLen(Bytes.size());
- } else if (isWriting()) {
+ if (isWriting()) {
if (auto EC = Writer->writeBytes(Bytes))
return EC;
} else {
@@ -122,28 +99,21 @@ Error CodeViewRecordIO::mapByteVectorTail(std::vector<uint8_t> &Bytes) {
}
Error CodeViewRecordIO::mapInteger(TypeIndex &TypeInd) {
- if (isStreaming()) {
- Streamer->EmitIntValue(TypeInd.getIndex(), sizeof(TypeInd.getIndex()));
- incrStreamedLen(sizeof(TypeInd.getIndex()));
- } else if (isWriting()) {
+ if (isWriting()) {
if (auto EC = Writer->writeInteger(TypeInd.getIndex()))
return EC;
- } else {
- uint32_t I;
- if (auto EC = Reader->readInteger(I))
- return EC;
- TypeInd.setIndex(I);
+ return Error::success();
}
+
+ uint32_t I;
+ if (auto EC = Reader->readInteger(I))
+ return EC;
+ TypeInd.setIndex(I);
return Error::success();
}
Error CodeViewRecordIO::mapEncodedInteger(int64_t &Value) {
- if (isStreaming()) {
- if (Value >= 0)
- emitEncodedUnsignedInteger(static_cast<uint64_t>(Value));
- else
- emitEncodedSignedInteger(Value);
- } else if (isWriting()) {
+ if (isWriting()) {
if (Value >= 0) {
if (auto EC = writeEncodedUnsignedInteger(static_cast<uint64_t>(Value)))
return EC;
@@ -162,9 +132,7 @@ Error CodeViewRecordIO::mapEncodedInteger(int64_t &Value) {
}
Error CodeViewRecordIO::mapEncodedInteger(uint64_t &Value) {
- if (isStreaming())
- emitEncodedUnsignedInteger(Value);
- else if (isWriting()) {
+ if (isWriting()) {
if (auto EC = writeEncodedUnsignedInteger(Value))
return EC;
} else {
@@ -177,26 +145,17 @@ Error CodeViewRecordIO::mapEncodedInteger(uint64_t &Value) {
}
Error CodeViewRecordIO::mapEncodedInteger(APSInt &Value) {
- if (isStreaming()) {
- if (Value.isSigned())
- emitEncodedSignedInteger(Value.getSExtValue());
- else
- emitEncodedUnsignedInteger(Value.getZExtValue());
- } else if (isWriting()) {
+ if (isWriting()) {
if (Value.isSigned())
return writeEncodedSignedInteger(Value.getSExtValue());
return writeEncodedUnsignedInteger(Value.getZExtValue());
- } else
- return consume(*Reader, Value);
- return Error::success();
+ }
+
+ return consume(*Reader, Value);
}
Error CodeViewRecordIO::mapStringZ(StringRef &Value) {
- if (isStreaming()) {
- auto NullTerminatedString = StringRef(Value.data(), Value.size() + 1);
- Streamer->EmitBytes(NullTerminatedString);
- incrStreamedLen(NullTerminatedString.size());
- } else if (isWriting()) {
+ if (isWriting()) {
// Truncate if we attempt to write too much.
StringRef S = Value.take_front(maxFieldLength() - 1);
if (auto EC = Writer->writeCString(S))
@@ -210,15 +169,6 @@ Error CodeViewRecordIO::mapStringZ(StringRef &Value) {
Error CodeViewRecordIO::mapGuid(GUID &Guid) {
constexpr uint32_t GuidSize = 16;
-
- if (isStreaming()) {
- StringRef GuidSR =
- StringRef((reinterpret_cast<const char *>(&Guid)), GuidSize);
- Streamer->EmitBytes(GuidSR);
- incrStreamedLen(GuidSize);
- return Error::success();
- }
-
if (maxFieldLength() < GuidSize)
return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
@@ -235,14 +185,12 @@ Error CodeViewRecordIO::mapGuid(GUID &Guid) {
}
Error CodeViewRecordIO::mapStringZVectorZ(std::vector<StringRef> &Value) {
-
- if (!isReading()) {
+ if (isWriting()) {
for (auto V : Value) {
if (auto EC = mapStringZ(V))
return EC;
}
- uint8_t FinalZero = 0;
- if (auto EC = mapInteger(FinalZero))
+ if (auto EC = Writer->writeInteger<uint8_t>(0))
return EC;
} else {
StringRef S;
@@ -257,46 +205,6 @@ Error CodeViewRecordIO::mapStringZVectorZ(std::vector<StringRef> &Value) {
return Error::success();
}
-void CodeViewRecordIO::emitEncodedSignedInteger(const int64_t &Value) {
- assert(Value < 0 && "Encoded integer is not signed!");
- if (Value >= std::numeric_limits<int8_t>::min()) {
- Streamer->EmitIntValue(LF_CHAR, 2);
- Streamer->EmitIntValue(Value, 1);
- incrStreamedLen(3);
- } else if (Value >= std::numeric_limits<int16_t>::min()) {
- Streamer->EmitIntValue(LF_SHORT, 2);
- Streamer->EmitIntValue(Value, 2);
- incrStreamedLen(4);
- } else if (Value >= std::numeric_limits<int32_t>::min()) {
- Streamer->EmitIntValue(LF_LONG, 2);
- Streamer->EmitIntValue(Value, 4);
- incrStreamedLen(6);
- } else {
- Streamer->EmitIntValue(LF_QUADWORD, 2);
- Streamer->EmitIntValue(Value, 4);
- incrStreamedLen(6);
- }
-}
-
-void CodeViewRecordIO::emitEncodedUnsignedInteger(const uint64_t &Value) {
- if (Value < LF_NUMERIC) {
- Streamer->EmitIntValue(Value, 2);
- incrStreamedLen(2);
- } else if (Value <= std::numeric_limits<uint16_t>::max()) {
- Streamer->EmitIntValue(LF_USHORT, 2);
- Streamer->EmitIntValue(Value, 2);
- incrStreamedLen(4);
- } else if (Value <= std::numeric_limits<uint32_t>::max()) {
- Streamer->EmitIntValue(LF_ULONG, 2);
- Streamer->EmitIntValue(Value, 4);
- incrStreamedLen(6);
- } else {
- Streamer->EmitIntValue(LF_UQUADWORD, 2);
- Streamer->EmitIntValue(Value, 8);
- incrStreamedLen(6);
- }
-}
-
Error CodeViewRecordIO::writeEncodedSignedInteger(const int64_t &Value) {
assert(Value < 0 && "Encoded integer is not signed!");
if (Value >= std::numeric_limits<int8_t>::min()) {
diff --git a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp
index 104e310d41b..12fb50d6ddc 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp
@@ -29,7 +29,7 @@ struct MapOneMethodRecord {
error(IO.mapInteger(Method.Type));
if (Method.isIntroducingVirtual()) {
error(IO.mapInteger(Method.VFTableOffset));
- } else if (IO.isReading())
+ } else if (!IO.isWriting())
Method.VFTableOffset = -1;
if (!IsFromOverloadList)
@@ -72,9 +72,6 @@ static Error mapNameAndUniqueName(CodeViewRecordIO &IO, StringRef &Name,
error(IO.mapStringZ(N));
}
} else {
- // Reading & Streaming mode come after writing mode is executed for each
- // record. Truncating large names are done during writing, so its not
- // necessary to do it while reading or streaming.
error(IO.mapStringZ(Name));
if (HasUniqueName)
error(IO.mapStringZ(UniqueName));
@@ -99,10 +96,6 @@ Error TypeRecordMapping::visitTypeBegin(CVType &CVR) {
return Error::success();
}
-Error TypeRecordMapping::visitTypeBegin(CVType &CVR, TypeIndex Index) {
- return visitTypeBegin(CVR);
-}
-
Error TypeRecordMapping::visitTypeEnd(CVType &Record) {
assert(TypeKind.hasValue() && "Not in a type mapping!");
assert(!MemberKind.hasValue() && "Still in a member mapping!");
@@ -133,7 +126,7 @@ Error TypeRecordMapping::visitMemberEnd(CVMemberRecord &Record) {
assert(TypeKind.hasValue() && "Not in a type mapping!");
assert(MemberKind.hasValue() && "Not in a member mapping!");
- if (IO.isReading()) {
+ if (!IO.isWriting()) {
if (auto EC = IO.skipPadding())
return EC;
}
@@ -146,6 +139,7 @@ Error TypeRecordMapping::visitMemberEnd(CVMemberRecord &Record) {
Error TypeRecordMapping::visitKnownRecord(CVType &CVR, ModifierRecord &Record) {
error(IO.mapInteger(Record.ModifiedType));
error(IO.mapEnum(Record.Modifiers));
+
return Error::success();
}
@@ -178,6 +172,7 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, ArgListRecord &Record) {
error(IO.mapVectorN<uint32_t>(
Record.ArgIndices,
[](CodeViewRecordIO &IO, TypeIndex &N) { return IO.mapInteger(N); }));
+
return Error::success();
}
@@ -195,7 +190,7 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, PointerRecord &Record) {
error(IO.mapInteger(Record.Attrs));
if (Record.isPointerToMember()) {
- if (IO.isReading())
+ if (!IO.isWriting())
Record.MemberInfo.emplace();
MemberPointerInfo &M = *Record.MemberInfo;
@@ -265,7 +260,7 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, BitFieldRecord &Record) {
Error TypeRecordMapping::visitKnownRecord(CVType &CVR,
VFTableShapeRecord &Record) {
uint16_t Size;
- if (!IO.isReading()) {
+ if (IO.isWriting()) {
ArrayRef<VFTableSlotKind> Slots = Record.getSlots();
Size = Slots.size();
error(IO.mapInteger(Size));
@@ -296,7 +291,7 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, VFTableRecord &Record) {
error(IO.mapInteger(Record.OverriddenVFTable));
error(IO.mapInteger(Record.VFPtrOffset));
uint32_t NamesLen = 0;
- if (!IO.isReading()) {
+ if (IO.isWriting()) {
for (auto Name : Record.MethodNames)
NamesLen += Name.size() + 1;
}
OpenPOWER on IntegriCloud