[PDB] Refactor the PDB symbol classes to fix a reuse bug.
authorZachary Turner <zturner@google.com>
Wed, 5 Sep 2018 23:30:38 +0000 (23:30 +0000)
committerZachary Turner <zturner@google.com>
Wed, 5 Sep 2018 23:30:38 +0000 (23:30 +0000)
commit7999b4fa48b31f67efa3662443a5c78343eb6f19
treed29f403f65f7959cb4fbc5b70c603a6f16f91c40
parente9f1df84af2f50a2cde01f7f2333f12ae326f3c1
[PDB] Refactor the PDB symbol classes to fix a reuse bug.

The way DIA SDK works is that when you request a symbol, it
gets assigned an internal identifier that is unique for the
life of the session.  You can then use this identifier to
get back the same symbol, with all of the same internal state
that it had before, even if you "destroyed" the original
copy of the object you had.

This didn't work properly in our native implementation, and
if you destroyed an object for a particular symbol, then
requested the same symbol again, it would get assigned a new
ID and you'd get a fresh copy of the object.  In order to fix
this some refactoring had to happen to properly reuse cached
objects.  Some unittests are added to verify that symbol
reuse is taking place, making use of the new unittest input
feature.

llvm-svn: 341503
81 files changed:
llvm/include/llvm/DebugInfo/PDB/Native/NativeEnumModules.h
llvm/include/llvm/DebugInfo/PDB/Native/NativeExeSymbol.h
llvm/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h
llvm/include/llvm/DebugInfo/PDB/Native/NativeSession.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbol.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolData.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
llvm/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp
llvm/lib/DebugInfo/PDB/DIA/DIASectionContrib.cpp
llvm/lib/DebugInfo/PDB/Native/NativeBuiltinSymbol.cpp
llvm/lib/DebugInfo/PDB/Native/NativeCompilandSymbol.cpp
llvm/lib/DebugInfo/PDB/Native/NativeEnumModules.cpp
llvm/lib/DebugInfo/PDB/Native/NativeEnumSymbol.cpp
llvm/lib/DebugInfo/PDB/Native/NativeExeSymbol.cpp
llvm/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp
llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp
llvm/lib/DebugInfo/PDB/PDBSymbol.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolAnnotation.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolBlock.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolCompiland.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolCompilandDetails.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolCustom.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolData.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolExe.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolFunc.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolFuncDebugEnd.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolFuncDebugStart.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolLabel.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolPublicSymbol.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolThunk.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeArray.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeBaseClass.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeBuiltin.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeCustom.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeDimension.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeFriend.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeFunctionArg.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeFunctionSig.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeManaged.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypePointer.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeTypedef.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeUDT.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeVTable.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolTypeVTableShape.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolUnknown.cpp
llvm/lib/DebugInfo/PDB/PDBSymbolUsingNamespace.cpp
llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
llvm/unittests/DebugInfo/PDB/CMakeLists.txt
llvm/unittests/DebugInfo/PDB/Inputs/empty.pdb [new file with mode: 0644]
llvm/unittests/DebugInfo/PDB/NativeSymbolReuseTest.cpp [new file with mode: 0644]