Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/DebugInfo/CodeView/RecordName.cpp
Show First 20 Lines • Show All 316 Lines • ▼ Show 20 Lines | |||||
StringRef llvm::codeview::getSymbolName(CVSymbol Sym) { | StringRef llvm::codeview::getSymbolName(CVSymbol Sym) { | ||||
if (Sym.kind() == SymbolKind::S_CONSTANT) { | if (Sym.kind() == SymbolKind::S_CONSTANT) { | ||||
// S_CONSTANT is preceded by an APSInt, which has a variable length. So we | // S_CONSTANT is preceded by an APSInt, which has a variable length. So we | ||||
// have to do a full deserialization. | // have to do a full deserialization. | ||||
BinaryStreamReader Reader(Sym.content(), llvm::support::little); | BinaryStreamReader Reader(Sym.content(), llvm::support::little); | ||||
// The container doesn't matter for single records. | // The container doesn't matter for single records. | ||||
SymbolRecordMapping Mapping(Reader, CodeViewContainer::ObjectFile); | SymbolRecordMapping Mapping(Reader, CodeViewContainer::ObjectFile); | ||||
ConstantSym Const(SymbolKind::S_CONSTANT); | ConstantSym Const(SymbolKind::S_CONSTANT); | ||||
cantFail(Mapping.visitSymbolBegin(Sym)); | llvm_cantFail(Mapping.visitSymbolBegin(Sym)); | ||||
cantFail(Mapping.visitKnownRecord(Sym, Const)); | llvm_cantFail(Mapping.visitKnownRecord(Sym, Const)); | ||||
cantFail(Mapping.visitSymbolEnd(Sym)); | llvm_cantFail(Mapping.visitSymbolEnd(Sym)); | ||||
return Const.Name; | return Const.Name; | ||||
} | } | ||||
int Offset = getSymbolNameOffset(Sym); | int Offset = getSymbolNameOffset(Sym); | ||||
if (Offset == -1) | if (Offset == -1) | ||||
return StringRef(); | return StringRef(); | ||||
StringRef StringData = toStringRef(Sym.content()).drop_front(Offset); | StringRef StringData = toStringRef(Sym.content()).drop_front(Offset); | ||||
return StringData.split('\0').first; | return StringData.split('\0').first; | ||||
} | } |