[PATCH] D36426: [PDB] Fix linking of function symbols and local variables
Reid Kleckner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 7 14:09:30 PDT 2017
rnk added inline comments.
================
Comment at: lld/COFF/PDB.cpp:334
+/// MSVC translates S_PROC_ID_END to S_END, and S_[LG]PROC32_ID to S_[LG]PROC32
+static SymbolKind canonicalizeSymbolKind(MutableArrayRef<uint8_t> &RecordData,
+ const TypeTableBuilder &IDTable) {
----------------
This thing isn't really canonicalizing the symbol kind anymore, it's rewriting the symbol record. Maybe name it something like `rewriteSymbolForPDB`?
================
Comment at: lld/COFF/PDB.cpp:361
+ if (!TI->isSimple() && !TI->isNoneType()) {
+ ArrayRef<uint8_t> FuncIdData = IDTable.records()[TI->toArrayIndex()];
+ FuncIdRecord FID;
----------------
We need an error check for OOB IPI index
================
Comment at: lld/COFF/PDB.cpp:362-365
+ FuncIdRecord FID;
+ CVType FuncId(TypeLeafKind::LF_FUNC_ID, FuncIdData);
+ cantFail(TypeDeserializer::deserializeAs<FuncIdRecord>(FuncId, FID));
+ *TI = FID.FunctionType;
----------------
In theory, we could do the same `discoverTypeIndices` trick that we do above to find the type index reference. Alternatively, if we know it's an `LF_FUNC_ID`, we should load the appropriate offset. Are these ever LF_MFUNC_IDs, though?
================
Comment at: lld/COFF/PDB.cpp:488
+ remapTypesInSymbolRecord(File, Contents, IndexMap, IDTable, TypeRefs);
+ SymbolKind NewKind = canonicalizeSymbolKind(NewData, IDTable);
+ assert(NewKind == symbolKind(NewData));
----------------
Let's keep this as part of the copySymbolForPdb.
================
Comment at: llvm/lib/DebugInfo/CodeView/TypeIndexDiscovery.cpp:401
break;
case SymbolKind::S_REGREL32:
Refs.push_back({TiRefKind::TypeRef, 4, 1}); // Type
----------------
Maybe add S_BPREL32 before this? They're related, BPRELSYM32 vs REGREL32.
================
Comment at: llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp:740
Proc.CodeSize);
// FIXME: It seems FunctionType is sometimes an id and sometimes a type.
+ bool IsType = true;
----------------
Remove the FIXME, it's done now. :)
https://reviews.llvm.org/D36426
More information about the llvm-commits
mailing list