diff options
-rw-r--r-- | lld/COFF/InputFiles.cpp | 3 | ||||
-rw-r--r-- | lld/COFF/InputFiles.h | 5 | ||||
-rw-r--r-- | lld/COFF/PDB.cpp | 6 |
3 files changed, 8 insertions, 6 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index 2d8292fc141..ff59f4cee3e 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -767,7 +767,8 @@ void ObjFile::initializeDependencies() { if (firstType == types.end()) return; - debugTypes.emplace(types); + // Remember the .debug$T or .debug$P section. + debugTypes = data; if (isPCH) { debugTypesObj = makePrecompSource(this); diff --git a/lld/COFF/InputFiles.h b/lld/COFF/InputFiles.h index 1df383ec7c1..805d9121d8b 100644 --- a/lld/COFF/InputFiles.h +++ b/lld/COFF/InputFiles.h @@ -15,7 +15,6 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" #include "llvm/BinaryFormat/Magic.h" -#include "llvm/DebugInfo/CodeView/TypeRecord.h" #include "llvm/Object/Archive.h" #include "llvm/Object/COFF.h" #include "llvm/Support/StringSaver.h" @@ -204,8 +203,8 @@ public: // If the OBJ has a .debug$T stream, this tells how it will be handled. TpiSource *debugTypesObj = nullptr; - // The .debug$T stream if there's one. - llvm::Optional<llvm::codeview::CVTypeArray> debugTypes; + // The .debug$P or .debug$T section data if present. Empty otherwise. + ArrayRef<uint8_t> debugTypes; llvm::Optional<std::pair<StringRef, uint32_t>> getVariableLocation(StringRef var); diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index ea99583b1d8..6ba4d394094 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -369,8 +369,10 @@ PDBLinker::mergeDebugT(ObjFile *file, CVIndexMap *objectIndexMap) { // don't merge any type information. return maybeMergeTypeServerPDB(file); } - - CVTypeArray &types = *file->debugTypes; + + CVTypeArray types; + BinaryStreamReader reader(file->debugTypes, support::little); + cantFail(reader.readArray(types, reader.getLength())); if (file->debugTypesObj->kind == TpiSource::UsingPCH) { // This object was compiled with /Yu, so process the corresponding |