[DebugInfo] Fix register variables not showing up in pdb.

Previously, when linking against libcmt from the MSVC runtime,
lld-link /verbose would show "Ignoring unknown symbol record
with kind 0x1006".  It turns out this was because
TypeIndexDiscovery did not handle S_REGISTER records, so these
records were not getting properly remapped.

Patch by: Alexnadre Ganea
Differential Revision: https://reviews.llvm.org/D40919

llvm-svn: 320108
This commit is contained in:
Zachary Turner 2017-12-07 22:51:16 +00:00
parent 0e9a4ac953
commit 1e778523f5
2 changed files with 15 additions and 3 deletions

View File

@ -392,6 +392,9 @@ static bool discoverTypeIndices(ArrayRef<uint8_t> Content, SymbolKind Kind,
case SymbolKind::S_LOCAL:
Refs.push_back({TiRefKind::TypeRef, 0, 1}); // Type
break;
case SymbolKind::S_REGISTER:
Refs.push_back({TiRefKind::TypeRef, 0, 1}); // Type;
break;
case SymbolKind::S_CONSTANT:
Refs.push_back({TiRefKind::TypeRef, 0, 1}); // Type
break;

View File

@ -537,9 +537,9 @@ TEST_F(TypeIndexIteratorTest, ManyMembers) {
TEST_F(TypeIndexIteratorTest, ProcSym) {
ProcSym GS(SymbolRecordKind::GlobalProcSym);
GS.FunctionType = TypeIndex(0x40);
GS.FunctionType = TypeIndex::Float32();
ProcSym LS(SymbolRecordKind::ProcSym);
LS.FunctionType = TypeIndex(0x41);
LS.FunctionType = TypeIndex::Float64();
writeSymbolRecords(GS, LS);
checkTypeReferences(0, GS.FunctionType);
checkTypeReferences(1, LS.FunctionType);
@ -547,11 +547,20 @@ TEST_F(TypeIndexIteratorTest, ProcSym) {
TEST_F(TypeIndexIteratorTest, DataSym) {
DataSym DS(SymbolRecordKind::GlobalData);
DS.Type = TypeIndex(0x40);
DS.Type = TypeIndex::Float32();
writeSymbolRecords(DS);
checkTypeReferences(0, DS.Type);
}
TEST_F(TypeIndexIteratorTest, RegisterSym) {
RegisterSym Reg(SymbolRecordKind::RegisterSym);
Reg.Index = TypeIndex::UInt32();
Reg.Register = RegisterId::EAX;
Reg.Name = "Target";
writeSymbolRecords(Reg);
checkTypeReferences(0, Reg.Index);
}
TEST_F(TypeIndexIteratorTest, CallerSym) {
CallerSym Callees(SymbolRecordKind::CalleeSym);
Callees.Indices.push_back(TypeIndex(1));