[llvm] r228428 - Create lib/DebugInfo/PDB.
Juergen Ributzka
juergen at apple.com
Fri Feb 6 12:00:01 PST 2015
Hi Zachary,
this broke the Darwin build bot:
http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/5179/consoleFull#-1951551925e9a0fee5-ebcc-4238-a641-c5aa112c323e <http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/5179/consoleFull#-1951551925e9a0fee5-ebcc-4238-a641-c5aa112c323e>
Could you please take a look?
Thanks
—Juergen
> On Feb 6, 2015, at 11:44 AM, Zachary Turner <zturner at google.com> wrote:
>
> Author: zturner
> Date: Fri Feb 6 13:44:09 2015
> New Revision: 228428
>
> URL: http://llvm.org/viewvc/llvm-project?rev=228428&view=rev
> Log:
> Create lib/DebugInfo/PDB.
>
> This patch creates a platform-independent interface to a PDB reader.
> There is currently no implementation of this interface, which will
> be provided in future patches. This defines the basic object model
> which any implementation must conform to.
>
> Reviewed by: David Blaikie
> Differential Revision: http://reviews.llvm.org/D7356
>
> Added:
> llvm/trunk/include/llvm/DebugInfo/PDB/
> llvm/trunk/include/llvm/DebugInfo/PDB/IPDBDataStream.h
> llvm/trunk/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h
> llvm/trunk/include/llvm/DebugInfo/PDB/IPDBLineNumber.h
> llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
> llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h
> llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDB.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
> llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h
> llvm/trunk/lib/DebugInfo/PDB/
> llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt
> llvm/trunk/lib/DebugInfo/PDB/LLVMBuild.txt
> - copied, changed from r228421, llvm/trunk/lib/DebugInfo/LLVMBuild.txt
> llvm/trunk/lib/DebugInfo/PDB/PDB.cpp
> llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp
> llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp
> llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp
> llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp
> llvm/trunk/unittests/DebugInfo/PDB/
> llvm/trunk/unittests/DebugInfo/PDB/CMakeLists.txt
> llvm/trunk/unittests/DebugInfo/PDB/Makefile
> llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp
> Modified:
> llvm/trunk/lib/DebugInfo/CMakeLists.txt
> llvm/trunk/lib/DebugInfo/LLVMBuild.txt
> llvm/trunk/unittests/DebugInfo/CMakeLists.txt
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBDataStream.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBDataStream.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBDataStream.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBDataStream.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,38 @@
> +//===- IPDBDataStream.h - base interface for child enumerator -*- C++ ---*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBDATASTREAM_H
> +#define LLVM_DEBUGINFO_PDB_IPDBDATASTREAM_H
> +
> +#include "llvm/ADT/SmallVector.h"
> +#include "llvm/ADT/Optional.h"
> +
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +/// IPDBDataStream defines an interface used to represent a stream consisting
> +/// of a name and a series of records whose formats depend on the particular
> +/// stream type.
> +class IPDBDataStream {
> +public:
> + typedef llvm::SmallVector<uint8_t, 32> RecordType;
> +
> + virtual ~IPDBDataStream();
> +
> + virtual uint32_t getRecordCount() const = 0;
> + virtual std::string getName() const = 0;
> + virtual llvm::Optional<RecordType> getItemAtIndex(uint32_t Index) const = 0;
> + virtual bool getNext(RecordType &Record) = 0;
> + virtual void reset() = 0;
> + virtual std::unique_ptr<IPDBDataStream> clone() const = 0;
> +};
> +}
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,33 @@
> +//===- IPDBEnumChildren.h - base interface for child enumerator -*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBENUMCHILDREN_H
> +#define LLVM_DEBUGINFO_PDB_IPDBENUMCHILDREN_H
> +
> +#include <memory>
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +template <typename ChildType> class IPDBEnumChildren {
> +public:
> + typedef std::unique_ptr<ChildType> ChildTypePtr;
> + typedef std::unique_ptr<IPDBEnumChildren<ChildType>> MyTypePtr;
> +
> + virtual ~IPDBEnumChildren() {}
> +
> + virtual uint32_t getChildCount() const = 0;
> + virtual ChildTypePtr getChildAtIndex(uint32_t Index) const = 0;
> + virtual ChildTypePtr getNext() = 0;
> + virtual void reset() = 0;
> + virtual MyTypePtr clone() const = 0;
> +};
> +}
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBLineNumber.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBLineNumber.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBLineNumber.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBLineNumber.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,36 @@
> +//===- IPDBLineNumber.h - base interface for PDB line no. info ---*- C++-*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBLINENUMBER_H
> +#define LLVM_DEBUGINFO_PDB_IPDBLINENUMBER_H
> +
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class IPDBLineNumber {
> +public:
> + virtual ~IPDBLineNumber();
> +
> + virtual uint32_t getLineNumber() const = 0;
> + virtual uint32_t getLineNumberEnd() const = 0;
> + virtual uint32_t getColumnNumber() const = 0;
> + virtual uint32_t getColumnNumberEnd() const = 0;
> + virtual uint32_t getAddressSection() const = 0;
> + virtual uint32_t getAddressOffset() const = 0;
> + virtual uint32_t getRelativeVirtualAddress() const = 0;
> + virtual uint64_t getVirtualAddress() const = 0;
> + virtual uint32_t getLength() const = 0;
> + virtual uint32_t getSourceFileId() const = 0;
> + virtual uint32_t getCompilandId() const = 0;
> + virtual bool isStatement() const = 0;
> +};
> +}
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,209 @@
> +//===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
> +#define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
> +
> +#include <memory>
> +
> +#include "llvm/ADT/SmallVector.h"
> +#include "llvm/ADT/StringRef.h"
> +#include "llvm/Support/COFF.h"
> +#include "llvm/Support/raw_ostream.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +/// IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
> +/// It exposes a monolithic interface consisting of accessors for the union of
> +/// all properties that are valid for any symbol type. This interface is then
> +/// wrapped by a concrete class which exposes only those set of methods valid
> +/// for this particular symbol type. See PDBSymbol.h for more details.
> +class IPDBRawSymbol {
> +public:
> + virtual ~IPDBRawSymbol();
> +
> + virtual void dump(llvm::raw_ostream &OS) const = 0;
> +
> + virtual std::unique_ptr<IPDBEnumSymbols>
> + findChildren(PDB_SymType Type, StringRef Name,
> + PDB_NameSearchFlags Flags) const = 0;
> + virtual std::unique_ptr<IPDBEnumSymbols>
> + findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
> + uint32_t RVA) const = 0;
> + virtual std::unique_ptr<IPDBEnumSymbols>
> + findInlineFramesByRVA(uint32_t RVA) const = 0;
> +
> + virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const = 0;
> + virtual PDB_MemberAccess getAccess() const = 0;
> + virtual uint32_t getAddressOffset() const = 0;
> + virtual uint32_t getAddressSection() const = 0;
> + virtual uint32_t getAge() const = 0;
> + virtual uint32_t getArrayIndexTypeId() const = 0;
> + virtual uint32_t getBackEndBuild() const = 0;
> + virtual uint32_t getBackEndMajor() const = 0;
> + virtual uint32_t getBackEndMinor() const = 0;
> + virtual uint32_t getBaseDataOffset() const = 0;
> + virtual uint32_t getBaseDataSlot() const = 0;
> + virtual uint32_t getBaseSymbolId() const = 0;
> + virtual PDB_BuiltinType getBuiltinType() const = 0;
> + virtual uint32_t getBitPosition() const = 0;
> + virtual PDB_CallingConv getCallingConvention() const = 0;
> + virtual uint32_t getClassParentId() const = 0;
> + virtual std::string getCompilerName() const = 0;
> + virtual uint32_t getCount() const = 0;
> + virtual uint32_t getCountLiveRanges() const = 0;
> + virtual uint32_t getFrontEndBuild() const = 0;
> + virtual uint32_t getFrontEndMajor() const = 0;
> + virtual uint32_t getFrontEndMinor() const = 0;
> + virtual PDB_Lang getLanguage() const = 0;
> + virtual uint32_t getLexicalParentId() const = 0;
> + virtual std::string getLibraryName() const = 0;
> + virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
> + virtual uint32_t getLiveRangeStartAddressSection() const = 0;
> + virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
> + virtual uint32_t getLocalBasePointerRegisterId() const = 0;
> + virtual uint32_t getLowerBoundId() const = 0;
> + virtual uint32_t getMemorySpaceKind() const = 0;
> + virtual std::string getName() const = 0;
> + virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0;
> + virtual uint32_t getNumberOfColumns() const = 0;
> + virtual uint32_t getNumberOfModifiers() const = 0;
> + virtual uint32_t getNumberOfRegisterIndices() const = 0;
> + virtual uint32_t getNumberOfRows() const = 0;
> + virtual std::string getObjectFileName() const = 0;
> + virtual uint32_t getOemId() const = 0;
> + virtual uint32_t getOemSymbolId() const = 0;
> + virtual uint32_t getOffsetInUdt() const = 0;
> + virtual PDB_Cpu getPlatform() const = 0;
> + virtual uint32_t getRank() const = 0;
> + virtual uint32_t getRegisterId() const = 0;
> + virtual uint32_t getRegisterType() const = 0;
> + virtual uint32_t getRelativeVirtualAddress() const = 0;
> + virtual uint32_t getSamplerSlot() const = 0;
> + virtual uint32_t getSignature() const = 0;
> + virtual uint32_t getSizeInUdt() const = 0;
> + virtual uint32_t getSlot() const = 0;
> + virtual std::string getSourceFileName() const = 0;
> + virtual uint32_t getStride() const = 0;
> + virtual uint32_t getSubTypeId() const = 0;
> + virtual std::string getSymbolsFileName() const = 0;
> + virtual uint32_t getSymIndexId() const = 0;
> + virtual uint32_t getTargetOffset() const = 0;
> + virtual uint32_t getTargetRelativeVirtualAddress() const = 0;
> + virtual uint64_t getTargetVirtualAddress() const = 0;
> + virtual uint32_t getTargetSection() const = 0;
> + virtual uint32_t getTextureSlot() const = 0;
> + virtual uint32_t getTimeStamp() const = 0;
> + virtual uint32_t getToken() const = 0;
> + virtual uint32_t getTypeId() const = 0;
> + virtual uint32_t getUavSlot() const = 0;
> + virtual std::string getUndecoratedName() const = 0;
> + virtual uint32_t getUnmodifiedTypeId() const = 0;
> + virtual uint32_t getUpperBoundId() const = 0;
> + virtual uint32_t getVirtualBaseDispIndex() const = 0;
> + virtual uint32_t getVirtualBaseOffset() const = 0;
> + virtual uint32_t getVirtualTableShapeId() const = 0;
> + virtual PDB_DataKind getDataKind() const = 0;
> + virtual PDB_SymType getSymTag() const = 0;
> + virtual PDB_UniqueId getGuid() const = 0;
> + virtual int32_t getOffset() const = 0;
> + virtual int32_t getThisAdjust() const = 0;
> + virtual int32_t getVirtualBasePointerOffset() const = 0;
> + virtual PDB_LocType getLocationType() const = 0;
> + virtual COFF::MachineTypes getMachineType() const = 0;
> + virtual PDB_ThunkOrdinal getThunkOrdinal() const = 0;
> + virtual uint64_t getLength() const = 0;
> + virtual uint64_t getLiveRangeLength() const = 0;
> + virtual uint64_t getVirtualAddress() const = 0;
> + virtual PDB_UdtType getUdtKind() const = 0;
> + virtual bool hasConstructor() const = 0;
> + virtual bool hasCustomCallingConvention() const = 0;
> + virtual bool hasFarReturn() const = 0;
> + virtual bool isCode() const = 0;
> + virtual bool isCompilerGenerated() const = 0;
> + virtual bool isConstType() const = 0;
> + virtual bool isEditAndContinueEnabled() const = 0;
> + virtual bool isFunction() const = 0;
> + virtual bool getAddressTaken() const = 0;
> + virtual bool getNoStackOrdering() const = 0;
> + virtual bool hasAlloca() const = 0;
> + virtual bool hasAssignmentOperator() const = 0;
> + virtual bool hasCTypes() const = 0;
> + virtual bool hasCastOperator() const = 0;
> + virtual bool hasDebugInfo() const = 0;
> + virtual bool hasEH() const = 0;
> + virtual bool hasEHa() const = 0;
> + virtual bool hasInlAsm() const = 0;
> + virtual bool hasInlineAttribute() const = 0;
> + virtual bool hasInterruptReturn() const = 0;
> + virtual bool hasLongJump() const = 0;
> + virtual bool hasManagedCode() const = 0;
> + virtual bool hasNestedTypes() const = 0;
> + virtual bool hasNoInlineAttribute() const = 0;
> + virtual bool hasNoReturnAttribute() const = 0;
> + virtual bool hasOptimizedCodeDebugInfo() const = 0;
> + virtual bool hasOverloadedOperator() const = 0;
> + virtual bool hasSEH() const = 0;
> + virtual bool hasSecurityChecks() const = 0;
> + virtual bool hasSetJump() const = 0;
> + virtual bool hasStrictGSCheck() const = 0;
> + virtual bool isAcceleratorGroupSharedLocal() const = 0;
> + virtual bool isAcceleratorPointerTagLiveRange() const = 0;
> + virtual bool isAcceleratorStubFunction() const = 0;
> + virtual bool isAggregated() const = 0;
> + virtual bool isIntroVirtualFunction() const = 0;
> + virtual bool isCVTCIL() const = 0;
> + virtual bool isConstructorVirtualBase() const = 0;
> + virtual bool isCxxReturnUdt() const = 0;
> + virtual bool isDataAligned() const = 0;
> + virtual bool isHLSLData() const = 0;
> + virtual bool isHotpatchable() const = 0;
> + virtual bool isIndirectVirtualBaseClass() const = 0;
> + virtual bool isInterfaceUdt() const = 0;
> + virtual bool isIntrinsic() const = 0;
> + virtual bool isLTCG() const = 0;
> + virtual bool isLocationControlFlowDependent() const = 0;
> + virtual bool isMSILNetmodule() const = 0;
> + virtual bool isMatrixRowMajor() const = 0;
> + virtual bool isManagedCode() const = 0;
> + virtual bool isMSILCode() const = 0;
> + virtual bool isMultipleInheritance() const = 0;
> + virtual bool isNaked() const = 0;
> + virtual bool isNested() const = 0;
> + virtual bool isOptimizedAway() const = 0;
> + virtual bool isPacked() const = 0;
> + virtual bool isPointerBasedOnSymbolValue() const = 0;
> + virtual bool isPointerToDataMember() const = 0;
> + virtual bool isPointerToMemberFunction() const = 0;
> + virtual bool isPureVirtual() const = 0;
> + virtual bool isRValueReference() const = 0;
> + virtual bool isRefUdt() const = 0;
> + virtual bool isReference() const = 0;
> + virtual bool isRestrictedType() const = 0;
> + virtual bool isReturnValue() const = 0;
> + virtual bool isSafeBuffers() const = 0;
> + virtual bool isScoped() const = 0;
> + virtual bool isSdl() const = 0;
> + virtual bool isSingleInheritance() const = 0;
> + virtual bool isSplitted() const = 0;
> + virtual bool isStatic() const = 0;
> + virtual bool hasPrivateSymbols() const = 0;
> + virtual bool isUnalignedType() const = 0;
> + virtual bool isUnreached() const = 0;
> + virtual bool isValueUdt() const = 0;
> + virtual bool isVirtual() const = 0;
> + virtual bool isVirtualBaseClass() const = 0;
> + virtual bool isVirtualInheritance() const = 0;
> + virtual bool isVolatileType() const = 0;
> +};
> +
> +} // namespace llvm
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,37 @@
> +//===- IPDBSession.h - base interface for a PDB symbol context --*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBSESSION_H
> +#define LLVM_DEBUGINFO_PDB_IPDBSESSION_H
> +
> +#include <memory>
> +
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolExe;
> +
> +/// IPDBSession defines an interface used to provide a context for querying
> +/// debug information from a debug data source (for example, a PDB).
> +class IPDBSession {
> +public:
> + virtual ~IPDBSession();
> +
> + virtual uint64_t getLoadAddress() const = 0;
> + virtual void setLoadAddress(uint64_t Address) = 0;
> + virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() const = 0;
> + virtual std::unique_ptr<PDBSymbol> getSymbolById() const = 0;
> + virtual std::unique_ptr<IPDBSourceFile> getSourceFileById() const = 0;
> +
> + virtual std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const = 0;
> +};
> +}
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,33 @@
> +//===- IPDBSourceFile.h - base interface for a PDB source file --*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBSOURCEFILE_H
> +#define LLVM_DEBUGINFO_PDB_IPDBSOURCEFILE_H
> +
> +#include <memory>
> +
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +/// IPDBSourceFile defines an interface used to represent source files whose
> +/// information are stored in the PDB.
> +class IPDBSourceFile {
> +public:
> + virtual ~IPDBSourceFile();
> +
> + virtual std::string getFileName() const = 0;
> + virtual uint32_t getUniqueId() const = 0;
> + virtual std::string getChecksum() const = 0;
> + virtual PDB_Checksum getChecksumType() const = 0;
> + virtual std::unique_ptr<IPDBEnumCompilands> getCompilands() const = 0;
> +};
> +}
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDB.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDB.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDB.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDB.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,24 @@
> +//===- PDB.h - base header file for creating a PDB reader -------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDB_H
> +#define LLVM_DEBUGINFO_PDB_PDB_H
> +
> +#include <memory>
> +
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +class StringRef;
> +
> +std::unique_ptr<IPDBSession> createPDBReader(PDB_ReaderType Type,
> + StringRef Path);
> +}
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,70 @@
> +//===- PDBSymbol.h - base class for user-facing symbol types -----*- C++-*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_IPDBSYMBOL_H
> +#define LLVM_DEBUGINFO_PDB_IPDBSYMBOL_H
> +
> +#include <memory>
> +
> +#include "llvm/ADT/StringRef.h"
> +#include "llvm/Support/raw_ostream.h"
> +#include "llvm/Support/Casting.h"
> +
> +#include "IPDBRawSymbol.h"
> +#include "PDBTypes.h"
> +
> +#define FORWARD_SYMBOL_METHOD(MethodName) \
> + auto MethodName() const->decltype(RawSymbol->MethodName()) { \
> + return RawSymbol->MethodName(); \
> + }
> +
> +namespace llvm {
> +
> +class IPDBRawSymbol;
> +
> +/// PDBSymbol defines the base of the inheritance hierarchy for concrete symbol
> +/// types (e.g. functions, executables, vtables, etc). All concrete symbol
> +/// types inherit from PDBSymbol and expose the exact set of methods that are
> +/// valid for that particular symbol type, as described in the Microsoft
> +/// reference "Lexical and Class Hierarchy of Symbol Types":
> +/// https://msdn.microsoft.com/en-us/library/370hs6k4.aspx
> +class PDBSymbol {
> +protected:
> + PDBSymbol(std::unique_ptr<IPDBRawSymbol> Symbol);
> +
> +public:
> + static std::unique_ptr<PDBSymbol>
> + create(std::unique_ptr<IPDBRawSymbol> Symbol);
> +
> + virtual ~PDBSymbol();
> +
> + /// Dumps the contents of a symbol a raw_ostream. By default this will just
> + /// call dump() on the underlying RawSymbol, which allows us to discover
> + /// unknown properties, but individual implementations of PDBSymbol may
> + /// override the behavior to only dump known fields.
> + virtual void dump(llvm::raw_ostream &OS) const;
> +
> + PDB_SymType getSymTag() const;
> +
> + std::unique_ptr<IPDBEnumSymbols>
> + findChildren(PDB_SymType Type, StringRef Name,
> + PDB_NameSearchFlags Flags) const;
> + std::unique_ptr<IPDBEnumSymbols> findChildrenByRVA(PDB_SymType Type,
> + StringRef Name,
> + PDB_NameSearchFlags Flags,
> + uint32_t RVA) const;
> + std::unique_ptr<IPDBEnumSymbols> findInlineFramesByRVA(uint32_t RVA) const;
> +
> +protected:
> + const std::unique_ptr<IPDBRawSymbol> RawSymbol;
> +};
> +
> +} // namespace llvm
> +
> +#endif
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,37 @@
> +//===- PDBSymbolAnnotation.h - Accessors for querying PDB annotations ---*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLANNOTATION_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLANNOTATION_H
> +
> +#include <string>
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolAnnotation : public PDBSymbol {
> +public:
> + PDBSymbolAnnotation(std::unique_ptr<IPDBRawSymbol> AnnotationSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(getDataKind)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + // FORWARD_SYMBOL_METHOD(getValue)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Annotation;
> + }
> +};
> +}
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLANNOTATION_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,39 @@
> +//===- PDBSymbolBlock.h - Accessors for querying PDB blocks -------------*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLBLOCK_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLBLOCK_H
> +
> +#include <string>
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolBlock : public PDBSymbol {
> +public:
> + PDBSymbolBlock(std::unique_ptr<IPDBRawSymbol> BlockSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Block;
> + }
> +};
> +}
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLBLOCK_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,36 @@
> +//===- PDBSymbolCompiland.h - Accessors for querying PDB compilands -----*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILAND_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILAND_H
> +
> +#include <string>
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolCompiland : public PDBSymbol {
> +public:
> + PDBSymbolCompiland(std::unique_ptr<IPDBRawSymbol> CompilandSymbol);
> +
> + FORWARD_SYMBOL_METHOD(isEditAndContinueEnabled)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLibraryName)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSourceFileName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Compiland;
> + }
> +};
> +}
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILAND_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,50 @@
> +//===- PDBSymbolCompilandDetails.h - PDB compiland details ------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILANDDETAILS_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILANDDETAILS_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolCompilandDetails : public PDBSymbol {
> +public:
> + PDBSymbolCompilandDetails(std::unique_ptr<IPDBRawSymbol> DetailsSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getBackEndBuild)
> + FORWARD_SYMBOL_METHOD(getBackEndMajor)
> + FORWARD_SYMBOL_METHOD(getBackEndMinor)
> + FORWARD_SYMBOL_METHOD(getCompilerName)
> + FORWARD_SYMBOL_METHOD(isEditAndContinueEnabled)
> + FORWARD_SYMBOL_METHOD(getFrontEndBuild)
> + FORWARD_SYMBOL_METHOD(getFrontEndMajor)
> + FORWARD_SYMBOL_METHOD(getFrontEndMinor)
> + FORWARD_SYMBOL_METHOD(hasDebugInfo)
> + FORWARD_SYMBOL_METHOD(hasManagedCode)
> + FORWARD_SYMBOL_METHOD(hasSecurityChecks)
> + FORWARD_SYMBOL_METHOD(isCVTCIL)
> + FORWARD_SYMBOL_METHOD(isDataAligned)
> + FORWARD_SYMBOL_METHOD(isHotpatchable)
> + FORWARD_SYMBOL_METHOD(isLTCG)
> + FORWARD_SYMBOL_METHOD(isMSILNetmodule)
> + FORWARD_SYMBOL_METHOD(getLanguage)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getPlatform)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::CompilandDetails;
> + }
> +};
> +
> +}; // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBFUNCTION_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,34 @@
> +//===- PDBSymbolCompilandEnv.h - compiland environment variables *- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILANDENV_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILANDENV_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolCompilandEnv : public PDBSymbol {
> +public:
> + PDBSymbolCompilandEnv(std::unique_ptr<IPDBRawSymbol> CompilandEnvSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + std::string getValue() const;
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::CompilandEnv;
> + }
> +};
> +
> +}; // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLCOMPILANDENV_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,38 @@
> +//===- PDBSymbolCustom.h - compiler-specific types --------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLCUSTOM_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLCUSTOM_H
> +
> +#include "llvm/ADT/SmallVector.h"
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +/// PDBSymbolCustom represents symbols that are compiler-specific and do not
> +/// fit anywhere else in the lexical hierarchy.
> +/// https://msdn.microsoft.com/en-us/library/d88sf09h.aspx
> +class PDBSymbolCustom : public PDBSymbol {
> +public:
> + PDBSymbolCustom(std::unique_ptr<IPDBRawSymbol> CustomSymbol);
> +
> + void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes);
> +
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Custom;
> + }
> +};
> +
> +}; // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLCUSTOM_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,56 @@
> +//===- PDBSymbolData.h - PDB data (e.g. variable) accessors -----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLDATA_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLDATA_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolData : public PDBSymbol {
> +public:
> + PDBSymbolData(std::unique_ptr<IPDBRawSymbol> DataSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAccess)
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(getAddressTaken)
> + FORWARD_SYMBOL_METHOD(getBitPosition)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(isCompilerGenerated)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getDataKind)
> + FORWARD_SYMBOL_METHOD(isAggregated)
> + FORWARD_SYMBOL_METHOD(isSplitted)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getOffset)
> + FORWARD_SYMBOL_METHOD(getRegisterId)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSlot)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getToken)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + // FORWARD_SYMBOL_METHOD(getValue)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Data;
> + }
> +};
> +
> +}; // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLDATA_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,41 @@
> +//===- PDBSymbolExe.h - Accessors for querying executables in a PDB ----*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLEXE_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLEXE_H
> +
> +#include <string>
> +
> +#include "llvm/Support/COFF.h"
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolExe : public PDBSymbol {
> +public:
> + PDBSymbolExe(std::unique_ptr<IPDBRawSymbol> ExeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAge)
> + FORWARD_SYMBOL_METHOD(getGuid)
> + FORWARD_SYMBOL_METHOD(hasCTypes)
> + FORWARD_SYMBOL_METHOD(hasPrivateSymbols)
> + FORWARD_SYMBOL_METHOD(getMachineType)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSignature)
> + FORWARD_SYMBOL_METHOD(getSymbolsFileName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Exe;
> + }
> +};
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLEXE_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,70 @@
> +//===- PDBSymbolFunc.h - class representing a function instance -*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolFunc : public PDBSymbol {
> +public:
> + PDBSymbolFunc(std::unique_ptr<IPDBRawSymbol> FuncSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAccess)
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(hasCustomCallingConvention)
> + FORWARD_SYMBOL_METHOD(hasFarReturn)
> + FORWARD_SYMBOL_METHOD(hasAlloca)
> + FORWARD_SYMBOL_METHOD(hasEH)
> + FORWARD_SYMBOL_METHOD(hasEHa)
> + FORWARD_SYMBOL_METHOD(hasInlAsm)
> + FORWARD_SYMBOL_METHOD(hasLongJump)
> + FORWARD_SYMBOL_METHOD(hasSEH)
> + FORWARD_SYMBOL_METHOD(hasSecurityChecks)
> + FORWARD_SYMBOL_METHOD(hasSetJump)
> + FORWARD_SYMBOL_METHOD(hasInterruptReturn)
> + FORWARD_SYMBOL_METHOD(isIntroVirtualFunction)
> + FORWARD_SYMBOL_METHOD(hasInlineAttribute)
> + FORWARD_SYMBOL_METHOD(isNaked)
> + FORWARD_SYMBOL_METHOD(isStatic)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(hasNoInlineAttribute)
> + FORWARD_SYMBOL_METHOD(hasNoReturnAttribute)
> + FORWARD_SYMBOL_METHOD(isUnreached)
> + FORWARD_SYMBOL_METHOD(getNoStackOrdering)
> + FORWARD_SYMBOL_METHOD(hasOptimizedCodeDebugInfo)
> + FORWARD_SYMBOL_METHOD(isPureVirtual)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getToken)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(getUndecoratedName)
> + FORWARD_SYMBOL_METHOD(isVirtual)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getVirtualBaseOffset)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Function;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNC_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,46 @@
> +//===- PDBSymbolFuncDebugEnd.h - function end bounds info -------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNCDEBUGEND_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNCDEBUGEND_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolFuncDebugEnd : public PDBSymbol {
> +public:
> + PDBSymbolFuncDebugEnd(std::unique_ptr<IPDBRawSymbol> FuncDebugEndSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(hasCustomCallingConvention)
> + FORWARD_SYMBOL_METHOD(hasFarReturn)
> + FORWARD_SYMBOL_METHOD(hasInterruptReturn)
> + FORWARD_SYMBOL_METHOD(isStatic)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(hasNoInlineAttribute)
> + FORWARD_SYMBOL_METHOD(hasNoReturnAttribute)
> + FORWARD_SYMBOL_METHOD(isUnreached)
> + FORWARD_SYMBOL_METHOD(getOffset)
> + FORWARD_SYMBOL_METHOD(hasOptimizedCodeDebugInfo)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::FuncDebugEnd;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNCDEBUGEND_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,46 @@
> +//===- PDBSymbolFuncDebugStart.h - function start bounds info ---*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNCDEBUGSTART_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNCDEBUGSTART_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolFuncDebugStart : public PDBSymbol {
> +public:
> + PDBSymbolFuncDebugStart(std::unique_ptr<IPDBRawSymbol> FuncDebugStartSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(hasCustomCallingConvention)
> + FORWARD_SYMBOL_METHOD(hasFarReturn)
> + FORWARD_SYMBOL_METHOD(hasInterruptReturn)
> + FORWARD_SYMBOL_METHOD(isStatic)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(hasNoInlineAttribute)
> + FORWARD_SYMBOL_METHOD(hasNoReturnAttribute)
> + FORWARD_SYMBOL_METHOD(isUnreached)
> + FORWARD_SYMBOL_METHOD(getOffset)
> + FORWARD_SYMBOL_METHOD(hasOptimizedCodeDebugInfo)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::FuncDebugStart;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLFUNCDEBUGSTART_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,46 @@
> +//===- PDBSymbolLabel.h - label info ----------------------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLLABEL_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLLABEL_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolLabel : public PDBSymbol {
> +public:
> + PDBSymbolLabel(std::unique_ptr<IPDBRawSymbol> LabelSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(hasCustomCallingConvention)
> + FORWARD_SYMBOL_METHOD(hasFarReturn)
> + FORWARD_SYMBOL_METHOD(hasInterruptReturn)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(hasNoInlineAttribute)
> + FORWARD_SYMBOL_METHOD(hasNoReturnAttribute)
> + FORWARD_SYMBOL_METHOD(isUnreached)
> + FORWARD_SYMBOL_METHOD(getOffset)
> + FORWARD_SYMBOL_METHOD(hasOptimizedCodeDebugInfo)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Label;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLLABEL_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,44 @@
> +//===- PDBSymbolPublicSymbol.h - public symbol info -------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLPUBLICSYMBOL_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLPUBLICSYMBOL_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolPublicSymbol : public PDBSymbol {
> +public:
> + PDBSymbolPublicSymbol(std::unique_ptr<IPDBRawSymbol> PublicSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(isCode)
> + FORWARD_SYMBOL_METHOD(isFunction)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getLocationType)
> + FORWARD_SYMBOL_METHOD(isManagedCode)
> + FORWARD_SYMBOL_METHOD(isMSILCode)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getUndecoratedName)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::PublicSymbol;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLPUBLICSYMBOL_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,54 @@
> +//===- PDBSymbolThunk.h - Support for querying PDB thunks ---------------*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTHUNK_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTHUNK_H
> +
> +#include <string>
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolThunk : public PDBSymbol {
> +public:
> + PDBSymbolThunk(std::unique_ptr<IPDBRawSymbol> ThunkSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAccess)
> + FORWARD_SYMBOL_METHOD(getAddressOffset)
> + FORWARD_SYMBOL_METHOD(getAddressSection)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(isIntroVirtualFunction)
> + FORWARD_SYMBOL_METHOD(isStatic)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(isPureVirtual)
> + FORWARD_SYMBOL_METHOD(getRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTargetOffset)
> + FORWARD_SYMBOL_METHOD(getTargetRelativeVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getTargetVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getTargetSection)
> + FORWARD_SYMBOL_METHOD(getThunkOrdinal)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVirtual)
> + FORWARD_SYMBOL_METHOD(getVirtualAddress)
> + FORWARD_SYMBOL_METHOD(getVirtualBaseOffset)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Thunk;
> + }
> +};
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTHUNK_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,40 @@
> +//===- PDBSymbolTypeArray.h - array type information ------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEARRAY_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEARRAY_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeArray : public PDBSymbol {
> +public:
> + PDBSymbolTypeArray(std::unique_ptr<IPDBRawSymbol> ArrayTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getArrayIndexTypeId)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getCount)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getRank)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::ArrayType;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEARRAY_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,57 @@
> +//===- PDBSymbolTypeBaseClass.h - base class type information ---*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEBASECLASS_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEBASECLASS_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeBaseClass : public PDBSymbol {
> +public:
> + PDBSymbolTypeBaseClass(std::unique_ptr<IPDBRawSymbol> BaseClassTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getAccess)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(hasConstructor)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(hasAssignmentOperator)
> + FORWARD_SYMBOL_METHOD(hasCastOperator)
> + FORWARD_SYMBOL_METHOD(hasNestedTypes)
> + FORWARD_SYMBOL_METHOD(isIndirectVirtualBaseClass)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(isNested)
> + FORWARD_SYMBOL_METHOD(getOffset)
> + FORWARD_SYMBOL_METHOD(hasOverloadedOperator)
> + FORWARD_SYMBOL_METHOD(isPacked)
> + FORWARD_SYMBOL_METHOD(isScoped)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(getUdtKind)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> +
> + FORWARD_SYMBOL_METHOD(isVirtualBaseClass)
> + FORWARD_SYMBOL_METHOD(getVirtualBaseDispIndex)
> + FORWARD_SYMBOL_METHOD(getVirtualBasePointerOffset)
> + // FORWARD_SYMBOL_METHOD(getVirtualBaseTableType)
> + FORWARD_SYMBOL_METHOD(getVirtualTableShapeId)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::BaseClass;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEBASECLASS_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,37 @@
> +//===- PDBSymbolTypeBuiltin.h - builtin type information --------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEBUILTIN_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEBUILTIN_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeBuiltin : public PDBSymbol {
> +public:
> + PDBSymbolTypeBuiltin(std::unique_ptr<IPDBRawSymbol> BuiltinTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getBuiltinType)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::BuiltinType;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEBUILTIN_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,33 @@
> +//===- PDBSymbolTypeCustom.h - custom compiler type information -*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPECUSTOM_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPECUSTOM_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeCustom : public PDBSymbol {
> +public:
> + PDBSymbolTypeCustom(std::unique_ptr<IPDBRawSymbol> CustomTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getOemId)
> + FORWARD_SYMBOL_METHOD(getOemSymbolId)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::CustomType;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPECUSTOM_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,33 @@
> +//===- PDBSymbolTypeDimension.h - array dimension type info -----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEDIMENSION_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEDIMENSION_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeDimension : public PDBSymbol {
> +public:
> + PDBSymbolTypeDimension(std::unique_ptr<IPDBRawSymbol> DimensionTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getLowerBoundId)
> + FORWARD_SYMBOL_METHOD(getUpperBoundId)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Dimension;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEDIMENSION_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,48 @@
> +//===- PDBSymbolTypeEnum.h - enum type info ---------------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeEnum : public PDBSymbol {
> +public:
> + PDBSymbolTypeEnum(std::unique_ptr<IPDBRawSymbol> EnumTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getBuiltinType)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(hasConstructor)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(hasAssignmentOperator)
> + FORWARD_SYMBOL_METHOD(hasCastOperator)
> + FORWARD_SYMBOL_METHOD(hasNestedTypes)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(isNested)
> + FORWARD_SYMBOL_METHOD(hasOverloadedOperator)
> + FORWARD_SYMBOL_METHOD(isPacked)
> + FORWARD_SYMBOL_METHOD(isScoped)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Enum;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEENUM_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,34 @@
> +//===- PDBSymbolTypeFriend.h - friend type info -----------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFRIEND_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFRIEND_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeFriend : public PDBSymbol {
> +public:
> + PDBSymbolTypeFriend(std::unique_ptr<IPDBRawSymbol> FriendTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Friend;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFRIEND_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,34 @@
> +//===- PDBSymbolTypeFunctionArg.h - function arg type info ------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFUNCTIONARG_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFUNCTIONARG_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeFunctionArg : public PDBSymbol {
> +public:
> + PDBSymbolTypeFunctionArg(std::unique_ptr<IPDBRawSymbol> FuncArgTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::FunctionArg;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFUNCTIONARG_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,41 @@
> +//===- PDBSymbolTypeFunctionSig.h - function signature type info *- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFUNCTIONSIG_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFUNCTIONSIG_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeFunctionSig : public PDBSymbol {
> +public:
> + PDBSymbolTypeFunctionSig(std::unique_ptr<IPDBRawSymbol> FuncSigTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getCallingConvention)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getCount)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + // FORWARD_SYMBOL_METHOD(getObjectPointerType)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getThisAdjust)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::FunctionSig;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEFUNCTIONSIG_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,32 @@
> +//===- PDBSymbolTypeManaged.h - managed type info ---------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEMANAGED_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEMANAGED_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeManaged : public PDBSymbol {
> +public:
> + PDBSymbolTypeManaged(std::unique_ptr<IPDBRawSymbol> ManagedTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::ManagedType;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEMANAGED_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,38 @@
> +//===- PDBSymbolTypePointer.h - pointer type info ---------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEPOINTER_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEPOINTER_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypePointer : public PDBSymbol {
> +public:
> + PDBSymbolTypePointer(std::unique_ptr<IPDBRawSymbol> PointerTypeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(isReference)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::PointerType;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEPOINTER_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,51 @@
> +//===- PDBSymbolTypeTypedef.h - typedef type info ---------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPETYPEDEF_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPETYPEDEF_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeTypedef : public PDBSymbol {
> +public:
> + PDBSymbolTypeTypedef(std::unique_ptr<IPDBRawSymbol> TypedefSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getBuiltinType)
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(hasConstructor)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(hasAssignmentOperator)
> + FORWARD_SYMBOL_METHOD(hasCastOperator)
> + FORWARD_SYMBOL_METHOD(hasNestedTypes)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(isNested)
> + FORWARD_SYMBOL_METHOD(hasOverloadedOperator)
> + FORWARD_SYMBOL_METHOD(isPacked)
> + FORWARD_SYMBOL_METHOD(isReference)
> + FORWARD_SYMBOL_METHOD(isScoped)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(getUdtKind)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(getVirtualTableShapeId)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::Typedef;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPETYPEDEF_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,48 @@
> +//===- PDBSymbolTypeUDT.h - UDT type info -----------------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeUDT : public PDBSymbol {
> +public:
> + PDBSymbolTypeUDT(std::unique_ptr<IPDBRawSymbol> UDTSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(hasConstructor)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(hasAssignmentOperator)
> + FORWARD_SYMBOL_METHOD(hasCastOperator)
> + FORWARD_SYMBOL_METHOD(hasNestedTypes)
> + FORWARD_SYMBOL_METHOD(getLength)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(isNested)
> + FORWARD_SYMBOL_METHOD(hasOverloadedOperator)
> + FORWARD_SYMBOL_METHOD(isPacked)
> + FORWARD_SYMBOL_METHOD(isScoped)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getUdtKind)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(getVirtualTableShapeId)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::UDT;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEUDT_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,37 @@
> +//===- PDBSymbolTypeVTable.h - VTable type info -----------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEVTABLE_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEVTABLE_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeVTable : public PDBSymbol {
> +public:
> + PDBSymbolTypeVTable(std::unique_ptr<IPDBRawSymbol> VtblSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getClassParentId)
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(getTypeId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::VTable;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEVTABLE_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,36 @@
> +//===- PDBSymbolTypeVTableShape.h - VTable shape info -----------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEVTABLESHAPE_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEVTABLESHAPE_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolTypeVTableShape : public PDBSymbol {
> +public:
> + PDBSymbolTypeVTableShape(std::unique_ptr<IPDBRawSymbol> VtblShapeSymbol);
> +
> + FORWARD_SYMBOL_METHOD(isConstType)
> + FORWARD_SYMBOL_METHOD(getCount)
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> + FORWARD_SYMBOL_METHOD(isUnalignedType)
> + FORWARD_SYMBOL_METHOD(isVolatileType)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::VTableShape;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLTYPEVTABLESHAPE_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,30 @@
> +//===- PDBSymbolUnknown.h - unknown symbol type -----------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLUNKNOWN_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLUNKNOWN_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolUnknown : public PDBSymbol {
> +public:
> + PDBSymbolUnknown(std::unique_ptr<IPDBRawSymbol> UnknownSymbol);
> +
> + static bool classof(const PDBSymbol *S) {
> + return (S->getSymTag() == PDB_SymType::None ||
> + S->getSymTag() >= PDB_SymType::Max);
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLUNKNOWN_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,33 @@
> +//===- PDBSymbolUsingNamespace.h - using namespace info ---------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBSYMBOLUSINGNAMESPACE_H
> +#define LLVM_DEBUGINFO_PDB_PDBSYMBOLUSINGNAMESPACE_H
> +
> +#include "PDBSymbol.h"
> +#include "PDBTypes.h"
> +
> +namespace llvm {
> +
> +class PDBSymbolUsingNamespace : public PDBSymbol {
> +public:
> + PDBSymbolUsingNamespace(std::unique_ptr<IPDBRawSymbol> UsingSymbol);
> +
> + FORWARD_SYMBOL_METHOD(getLexicalParentId)
> + FORWARD_SYMBOL_METHOD(getName)
> + FORWARD_SYMBOL_METHOD(getSymIndexId)
> +
> + static bool classof(const PDBSymbol *S) {
> + return S->getSymTag() == PDB_SymType::UsingNamespace;
> + }
> +};
> +
> +} // namespace llvm
> +
> +#endif // LLVM_DEBUGINFO_PDB_PDBSYMBOLUSINGNAMESPACE_H
>
> Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h (added)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,350 @@
> +//===- PDBTypes.h - Defines enums for various fields contained in PDB ---*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_DEBUGINFO_PDB_PDBTYPES_H
> +#define LLVM_DEBUGINFO_PDB_PDBTYPES_H
> +
> +#include <stdint.h>
> +
> +namespace llvm {
> +
> +class PDBSymbol;
> +class PDBSymbolCompiland;
> +class PDBSymbolFunc;
> +class PDBSymbolExe;
> +
> +class IPDBDataStream;
> +template <class T> class IPDBEnumChildren;
> +class IPDBRawSymbol;
> +class IPDBSession;
> +class IPDBSourceFile;
> +
> +typedef IPDBEnumChildren<IPDBRawSymbol> IPDBEnumSymbols;
> +typedef IPDBEnumChildren<IPDBSourceFile> IPDBEnumSourceFiles;
> +typedef IPDBEnumChildren<IPDBDataStream> IPDBEnumDataStreams;
> +typedef IPDBEnumChildren<PDBSymbolCompiland> IPDBEnumCompilands;
> +
> +class PDBSymbolExe;
> +class PDBSymbolCompiland;
> +class PDBSymbolCompilandDetails;
> +class PDBSymbolCompilandEnv;
> +class PDBSymbolFunc;
> +class PDBSymbolBlock;
> +class PDBSymbolData;
> +class PDBSymbolAnnotation;
> +class PDBSymbolLabel;
> +class PDBSymbolPublicSymbol;
> +class PDBSymbolTypeUDT;
> +class PDBSymbolTypeEnum;
> +class PDBSymbolTypeFunctionSig;
> +class PDBSymbolTypePointer;
> +class PDBSymbolTypeArray;
> +class PDBSymbolTypeBuiltin;
> +class PDBSymbolTypeTypedef;
> +class PDBSymbolTypeBaseClass;
> +class PDBSymbolTypeFriend;
> +class PDBSymbolTypeFunctionArg;
> +class PDBSymbolFuncDebugStart;
> +class PDBSymbolFuncDebugEnd;
> +class PDBSymbolUsingNamespace;
> +class PDBSymbolTypeVTableShape;
> +class PDBSymbolTypeVTable;
> +class PDBSymbolCustom;
> +class PDBSymbolThunk;
> +class PDBSymbolTypeCustom;
> +class PDBSymbolTypeManaged;
> +class PDBSymbolTypeDimension;
> +class PDBSymbolUnknown;
> +
> +/// Specifies which PDB reader implementation is to be used. Only a value
> +/// of PDB_ReaderType::DIA is supported.
> +enum class PDB_ReaderType {
> + SystemDefault = 0,
> +#if defined(_MSC_VER)
> + DIA = 1,
> +#endif
> +};
> +
> +/// Defines a 128-bit unique identifier. This maps to a GUID on Windows, but
> +/// is abstracted here for the purposes of non-Windows platforms that don't have
> +/// the GUID structure defined.
> +struct PDB_UniqueId {
> + uint64_t HighPart;
> + uint64_t LowPart;
> +};
> +
> +/// An enumeration indicating the type of data contained in this table.
> +enum class PDB_TableType {
> + Symbols,
> + SourceFiles,
> + LineNumbers,
> + SectionContribs,
> + Segments,
> + InjectedSources,
> + FrameData
> +};
> +
> +/// Defines flags used for enumerating child symbols. This corresponds to the
> +/// NameSearchOptions enumeration which is documented here:
> +/// https://msdn.microsoft.com/en-us/library/yat28ads.aspx
> +enum PDB_NameSearchFlags {
> + NS_Default = 0x0,
> + NS_CaseSensitive = 0x1,
> + NS_CaseInsensitive = 0x2,
> + NS_FileNameExtMatch = 0x4,
> + NS_Regex = 0x8,
> + NS_UndecoratedName = 0x10
> +};
> +
> +/// Specifies the hash algorithm that a source file from a PDB was hashed with.
> +/// This corresponds to the CV_SourceChksum_t enumeration and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/e96az21x.aspx
> +enum class PDB_Checksum { None = 0, MD5 = 1, SHA1 = 2 };
> +
> +/// These values correspond to the CV_CPU_TYPE_e enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/b2fc64ek.aspx
> +enum class PDB_Cpu {
> + Intel8080 = 0x0,
> + Intel8086 = 0x1,
> + Intel80286 = 0x2,
> + Intel80386 = 0x3,
> + Intel80486 = 0x4,
> + Pentium = 0x5,
> + PentiumPro = 0x6,
> + Pentium3 = 0x7,
> + MIPS = 0x10,
> + MIPS16 = 0x11,
> + MIPS32 = 0x12,
> + MIPS64 = 0x13,
> + MIPSI = 0x14,
> + MIPSII = 0x15,
> + MIPSIII = 0x16,
> + MIPSIV = 0x17,
> + MIPSV = 0x18,
> + M68000 = 0x20,
> + M68010 = 0x21,
> + M68020 = 0x22,
> + M68030 = 0x23,
> + M68040 = 0x24,
> + Alpha = 0x30,
> + Alpha21164 = 0x31,
> + Alpha21164A = 0x32,
> + Alpha21264 = 0x33,
> + Alpha21364 = 0x34,
> + PPC601 = 0x40,
> + PPC603 = 0x41,
> + PPC604 = 0x42,
> + PPC620 = 0x43,
> + PPCFP = 0x44,
> + PPCBE = 0x45,
> + SH3 = 0x50,
> + SH3E = 0x51,
> + SH3DSP = 0x52,
> + SH4 = 0x53,
> + SHMedia = 0x54,
> + ARM3 = 0x60,
> + ARM4 = 0x61,
> + ARM4T = 0x62,
> + ARM5 = 0x63,
> + ARM5T = 0x64,
> + ARM6 = 0x65,
> + ARM_XMAC = 0x66,
> + ARM_WMMX = 0x67,
> + ARM7 = 0x68,
> + Omni = 0x70,
> + Ia64 = 0x80,
> + Ia64_2 = 0x81,
> + CEE = 0x90,
> + AM33 = 0xa0,
> + M32R = 0xb0,
> + TriCore = 0xc0,
> + X64 = 0xd0,
> + EBC = 0xe0,
> + Thumb = 0xf0,
> + ARMNT = 0xf4,
> + D3D11_Shader = 0x100,
> +};
> +
> +/// These values correspond to the CV_call_e enumeration, and are documented
> +/// at the following locations:
> +/// https://msdn.microsoft.com/en-us/library/b2fc64ek.aspx
> +/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms680207(v=vs.85).aspx
> +///
> +enum class PDB_CallingConv {
> + NearCdecl = 0x00,
> + FarCdecl = 0x01,
> + NearPascal = 0x02,
> + FarPascal = 0x03,
> + NearFastcall = 0x04,
> + FarFastcall = 0x05,
> + Skipped = 0x06,
> + NearStdcall = 0x07,
> + FarStdcall = 0x08,
> + NearSyscall = 0x09,
> + FarSyscall = 0x0a,
> + Thiscall = 0x0b,
> + MipsCall = 0x0c,
> + Generic = 0x0d,
> + Alphacall = 0x0e,
> + Ppccall = 0x0f,
> + SuperHCall = 0x10,
> + Armcall = 0x11,
> + AM33call = 0x12,
> + Tricall = 0x13,
> + Sh5call = 0x14,
> + M32R = 0x15,
> + Clrcall = 0x16,
> + Inline = 0x17,
> + NearVectorcall = 0x18,
> + Reserved = 0x19,
> +};
> +
> +/// These values correspond to the CV_CFL_LANG enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/bw3aekw6.aspx
> +enum class PDB_Lang {
> + C = 0x00,
> + Cpp = 0x01,
> + Fortran = 0x02,
> + Masm = 0x03,
> + Pascal = 0x04,
> + Basic = 0x05,
> + Cobol = 0x06,
> + Link = 0x07,
> + Cvtres = 0x08,
> + Cvtpgd = 0x09,
> + CSharp = 0x0a,
> + VB = 0x0b,
> + ILAsm = 0x0c,
> + Java = 0x0d,
> + JScript = 0x0e,
> + MSIL = 0x0f,
> + HLSL = 0x10
> +};
> +
> +/// These values correspond to the DataKind enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/b2x2t313.aspx
> +enum class PDB_DataKind {
> + Unknown,
> + Local,
> + StaticLocal,
> + Param,
> + ObjectPtr,
> + FileStatic,
> + Global,
> + Member,
> + StaticMember,
> + Constant
> +};
> +
> +/// These values correspond to the SymTagEnum enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/bkedss5f.aspx
> +enum class PDB_SymType {
> + None,
> + Exe,
> + Compiland,
> + CompilandDetails,
> + CompilandEnv,
> + Function,
> + Block,
> + Data,
> + Annotation,
> + Label,
> + PublicSymbol,
> + UDT,
> + Enum,
> + FunctionSig,
> + PointerType,
> + ArrayType,
> + BuiltinType,
> + Typedef,
> + BaseClass,
> + Friend,
> + FunctionArg,
> + FuncDebugStart,
> + FuncDebugEnd,
> + UsingNamespace,
> + VTableShape,
> + VTable,
> + Custom,
> + Thunk,
> + CustomType,
> + ManagedType,
> + Dimension,
> + Max
> +};
> +
> +/// These values correspond to the LocationType enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/f57kaez3.aspx
> +enum class PDB_LocType {
> + Null,
> + Static,
> + TLS,
> + RegRel,
> + ThisRel,
> + Enregistered,
> + BitField,
> + Slot,
> + IlRel,
> + MetaData,
> + Constant,
> + Max
> +};
> +
> +/// These values correspond to the THUNK_ORDINAL enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/dh0k8hft.aspx
> +enum class PDB_ThunkOrdinal {
> + Standard,
> + ThisAdjustor,
> + Vcall,
> + Pcode,
> + UnknownLoad,
> + TrampIncremental,
> + BranchIsland
> +};
> +
> +/// These values correspond to the UdtKind enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/wcstk66t.aspx
> +enum class PDB_UdtType { Struct, Class, Union, Interface };
> +
> +/// These values correspond to the StackFrameTypeEnum enumeration, and are
> +/// documented here: https://msdn.microsoft.com/en-us/library/bc5207xw.aspx.
> +enum class PDB_StackFrameType { FPO, KernelTrap, KernelTSS, EBP, FrameData };
> +
> +/// These values correspond to the StackFrameTypeEnum enumeration, and are
> +/// documented here: https://msdn.microsoft.com/en-us/library/bc5207xw.aspx.
> +enum class PDB_MemoryType { Code, Data, Stack, HeapCode };
> +
> +/// These values correspond to the Basictype enumeration, and are documented
> +/// here: https://msdn.microsoft.com/en-us/library/4szdtzc3.aspx
> +enum class PDB_BuiltinType {
> + None = 0,
> + Void = 1,
> + Char = 2,
> + WCharT = 3,
> + Int = 6,
> + UInt = 7,
> + Float = 8,
> + BCD = 9,
> + Bool = 10,
> + Long = 13,
> + ULong = 14,
> + Currency = 25,
> + Date = 26,
> + Variant = 27,
> + Complex = 28,
> + Bitfield = 29,
> + BSTR = 30,
> + HResult = 31
> +};
> +
> +enum class PDB_MemberAccess { Private = 1, Protected = 2, Public = 3 };
> +
> +} // namespace llvm
> +
> +#endif
>
> Modified: llvm/trunk/lib/DebugInfo/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CMakeLists.txt?rev=228428&r1=228427&r2=228428&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/CMakeLists.txt (original)
> +++ llvm/trunk/lib/DebugInfo/CMakeLists.txt Fri Feb 6 13:44:09 2015
> @@ -1,2 +1,5 @@
>
> -add_subdirectory(DWARF)
> \ No newline at end of file
> +add_subdirectory(DWARF)
> +if (MSVC)
> + add_subdirectory(PDB)
> +endif()
> \ No newline at end of file
>
> Modified: llvm/trunk/lib/DebugInfo/LLVMBuild.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/LLVMBuild.txt?rev=228428&r1=228427&r2=228428&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/LLVMBuild.txt (original)
> +++ llvm/trunk/lib/DebugInfo/LLVMBuild.txt Fri Feb 6 13:44:09 2015
> @@ -16,7 +16,7 @@
> ;===------------------------------------------------------------------------===;
>
> [common]
> -subdirectories = DWARF
> +subdirectories = DWARF PDB
>
> [component_0]
> type = Group
>
> Added: llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt (added)
> +++ llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,7 @@
> +add_llvm_library(LLVMDebugInfoPDB
> + PDB.cpp
> + PDBInterfaceAnchors.cpp
> + PDBSymbol.cpp
> + PDBSymbolCompilandEnv.cpp
> + PDBSymbolCustom.cpp
> + )
>
> Copied: llvm/trunk/lib/DebugInfo/PDB/LLVMBuild.txt (from r228421, llvm/trunk/lib/DebugInfo/LLVMBuild.txt)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/LLVMBuild.txt?p2=llvm/trunk/lib/DebugInfo/PDB/LLVMBuild.txt&p1=llvm/trunk/lib/DebugInfo/LLVMBuild.txt&r1=228421&r2=228428&rev=228428&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/LLVMBuild.txt (original)
> +++ llvm/trunk/lib/DebugInfo/PDB/LLVMBuild.txt Fri Feb 6 13:44:09 2015
> @@ -1,4 +1,4 @@
> -;===- ./lib/DebugInfo/LLVMBuild.txt ----------------------------*- Conf -*--===;
> +;===- ./lib/DebugInfo/PDB/LLVMBuild.txt ------------------------*- Conf -*--===;
> ;
> ; The LLVM Compiler Infrastructure
> ;
> @@ -15,10 +15,9 @@
> ;
> ;===------------------------------------------------------------------------===;
>
> -[common]
> -subdirectories = DWARF
> -
> [component_0]
> -type = Group
> -name = DebugInfo
> -parent = $ROOT
> +type = Library
> +name = DebugInfoPDB
> +parent = DebugInfo
> +required_libraries = Support
> +
>
> Added: llvm/trunk/lib/DebugInfo/PDB/PDB.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDB.cpp?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/PDB.cpp (added)
> +++ llvm/trunk/lib/DebugInfo/PDB/PDB.cpp Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,21 @@
> +//===- PDB.cpp - base header file for creating a PDB reader -----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/ADT/StringRef.h"
> +
> +#include "llvm/DebugInfo/PDB/PDB.h"
> +#include "llvm/DebugInfo/PDB/IPDBSession.h"
> +
> +using namespace llvm;
> +
> +std::unique_ptr<IPDBSession> llvm::createPDBReader(PDB_ReaderType Type,
> + StringRef Path) {
> + // Create the correct concrete instance type based on the value of Type.
> + return nullptr;
> +}
>
> Added: llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp (added)
> +++ llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,101 @@
> +//===- PDBInterfaceAnchors.h - defines class anchor funcions ----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +// Class anchors are necessary per the LLVM Coding style guide, to ensure that
> +// the vtable is only generated in this object file, and not in every object
> +// file that incldues the corresponding header.
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/DebugInfo/PDB/IPDBDataStream.h"
> +#include "llvm/DebugInfo/PDB/IPDBLineNumber.h"
> +#include "llvm/DebugInfo/PDB/IPDBSession.h"
> +#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
> +#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
> +
> +#include "llvm/DebugInfo/PDB/PDBSymbolAnnotation.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolBlock.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCustom.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFunc.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolLabel.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolThunk.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeArray.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolUnknown.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h"
> +
> +using namespace llvm;
> +
> +IPDBSession::~IPDBSession() {}
> +
> +IPDBDataStream::~IPDBDataStream() {}
> +
> +IPDBRawSymbol::~IPDBRawSymbol() {}
> +
> +IPDBSourceFile::~IPDBSourceFile() {}
> +
> +IPDBLineNumber::~IPDBLineNumber() {}
> +
> +// All of the concrete symbol types have their methods declared inline through
> +// the use of a forwarding macro, so the constructor should be declared out of
> +// line to get the vtable in this file.
> +#define FORWARD_SYMBOL_CONSTRUCTOR(ClassName) \
> + ClassName::ClassName(std::unique_ptr<IPDBRawSymbol> Symbol) \
> + : PDBSymbol(std::move(Symbol)) {}
> +
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolAnnotation)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolBlock)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolCompiland)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolCompilandDetails)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolCompilandEnv)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolCustom)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolData)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolExe)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolFunc)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolFuncDebugEnd)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolFuncDebugStart)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolLabel)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolPublicSymbol)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolThunk)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeArray)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeBaseClass)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeBuiltin)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeCustom)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeDimension)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeEnum)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeFriend)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeFunctionArg)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeFunctionSig)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeManaged)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypePointer)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeTypedef)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeUDT)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeVTable)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolTypeVTableShape)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolUnknown)
> +FORWARD_SYMBOL_CONSTRUCTOR(PDBSymbolUsingNamespace)
>
> Added: llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp (added)
> +++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,117 @@
> +//===- PDBSymbol.cpp - base class for user-facing symbol types --*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include <memory>
> +#include <utility>
> +
> +#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
> +#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbol.h"
> +
> +#include "llvm/DebugInfo/PDB/PDBSymbolAnnotation.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolBlock.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCustom.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFunc.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolLabel.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolThunk.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeArray.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolUnknown.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h"
> +
> +using namespace llvm;
> +
> +PDBSymbol::PDBSymbol(std::unique_ptr<IPDBRawSymbol> Symbol)
> + : RawSymbol(std::move(Symbol)) {}
> +
> +PDBSymbol::~PDBSymbol() {}
> +
> +#define FACTORY_SYMTAG_CASE(Tag, Type) \
> + case PDB_SymType::Tag: \
> + return std::unique_ptr<PDBSymbol>(new Type(std::move(Symbol)));
> +
> +std::unique_ptr<PDBSymbol>
> +PDBSymbol::create(std::unique_ptr<IPDBRawSymbol> Symbol) {
> + switch (Symbol->getSymTag()) {
> + FACTORY_SYMTAG_CASE(Exe, PDBSymbolExe)
> + FACTORY_SYMTAG_CASE(Compiland, PDBSymbolCompiland)
> + FACTORY_SYMTAG_CASE(CompilandDetails, PDBSymbolCompilandDetails)
> + FACTORY_SYMTAG_CASE(CompilandEnv, PDBSymbolCompilandEnv)
> + FACTORY_SYMTAG_CASE(Function, PDBSymbolFunc)
> + FACTORY_SYMTAG_CASE(Block, PDBSymbolBlock)
> + FACTORY_SYMTAG_CASE(Data, PDBSymbolData)
> + FACTORY_SYMTAG_CASE(Annotation, PDBSymbolAnnotation)
> + FACTORY_SYMTAG_CASE(Label, PDBSymbolLabel)
> + FACTORY_SYMTAG_CASE(PublicSymbol, PDBSymbolPublicSymbol)
> + FACTORY_SYMTAG_CASE(UDT, PDBSymbolTypeUDT)
> + FACTORY_SYMTAG_CASE(Enum, PDBSymbolTypeEnum)
> + FACTORY_SYMTAG_CASE(FunctionSig, PDBSymbolTypeFunctionSig)
> + FACTORY_SYMTAG_CASE(PointerType, PDBSymbolTypePointer)
> + FACTORY_SYMTAG_CASE(ArrayType, PDBSymbolTypeArray)
> + FACTORY_SYMTAG_CASE(BuiltinType, PDBSymbolTypeBuiltin)
> + FACTORY_SYMTAG_CASE(Typedef, PDBSymbolTypeTypedef)
> + FACTORY_SYMTAG_CASE(BaseClass, PDBSymbolTypeBaseClass)
> + FACTORY_SYMTAG_CASE(Friend, PDBSymbolTypeFriend)
> + FACTORY_SYMTAG_CASE(FunctionArg, PDBSymbolTypeFunctionArg)
> + FACTORY_SYMTAG_CASE(FuncDebugStart, PDBSymbolFuncDebugStart)
> + FACTORY_SYMTAG_CASE(FuncDebugEnd, PDBSymbolFuncDebugEnd)
> + FACTORY_SYMTAG_CASE(UsingNamespace, PDBSymbolUsingNamespace)
> + FACTORY_SYMTAG_CASE(VTableShape, PDBSymbolTypeVTableShape)
> + FACTORY_SYMTAG_CASE(VTable, PDBSymbolTypeVTable)
> + FACTORY_SYMTAG_CASE(Custom, PDBSymbolCustom)
> + FACTORY_SYMTAG_CASE(Thunk, PDBSymbolThunk)
> + FACTORY_SYMTAG_CASE(CustomType, PDBSymbolTypeCustom)
> + FACTORY_SYMTAG_CASE(ManagedType, PDBSymbolTypeManaged)
> + FACTORY_SYMTAG_CASE(Dimension, PDBSymbolTypeDimension)
> + default:
> + return std::unique_ptr<PDBSymbol>(new PDBSymbolUnknown(std::move(Symbol)));
> + }
> +}
> +
> +void PDBSymbol::dump(llvm::raw_ostream &OS) const { RawSymbol->dump(OS); }
> +
> +PDB_SymType PDBSymbol::getSymTag() const { return RawSymbol->getSymTag(); }
> +
> +std::unique_ptr<IPDBEnumSymbols>
> +PDBSymbol::findChildren(PDB_SymType Type, StringRef Name,
> + PDB_NameSearchFlags Flags) const {
> + return RawSymbol->findChildren(Type, Name, Flags);
> +}
> +
> +std::unique_ptr<IPDBEnumSymbols>
> +PDBSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name,
> + PDB_NameSearchFlags Flags, uint32_t RVA) const {
> + return RawSymbol->findChildrenByRVA(Type, Name, Flags, RVA);
> +}
> +
> +std::unique_ptr<IPDBEnumSymbols>
> +PDBSymbol::findInlineFramesByRVA(uint32_t RVA) const {
> + return RawSymbol->findInlineFramesByRVA(RVA);
> +}
>
> Added: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp (added)
> +++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,21 @@
> +//===- PDBSymbolCompilandEnv.cpp - compiland env variables ------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include <utility>
> +
> +#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h"
> +
> +using namespace llvm;
> +
> +std::string PDBSymbolCompilandEnv::getValue() const {
> + // call RawSymbol->getValue() and convert the result to an std::string.
> + return std::string();
> +}
>
> Added: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp (added)
> +++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,20 @@
> +//===- PDBSymbolCustom.cpp - compiler-specific types ------------*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include <utility>
> +
> +#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCustom.h"
> +
> +using namespace llvm;
> +
> +void PDBSymbolCustom::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) {
> + RawSymbol->getDataBytes(bytes);
> +}
>
> Modified: llvm/trunk/unittests/DebugInfo/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/CMakeLists.txt?rev=228428&r1=228427&r2=228428&view=diff
> ==============================================================================
> --- llvm/trunk/unittests/DebugInfo/CMakeLists.txt (original)
> +++ llvm/trunk/unittests/DebugInfo/CMakeLists.txt Fri Feb 6 13:44:09 2015
> @@ -9,3 +9,5 @@ set(DebugInfoSources
> add_llvm_unittest(DebugInfoTests
> ${DebugInfoSources}
> )
> +
> +add_subdirectory(PDB)
> \ No newline at end of file
>
> Added: llvm/trunk/unittests/DebugInfo/PDB/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/PDB/CMakeLists.txt?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/unittests/DebugInfo/PDB/CMakeLists.txt (added)
> +++ llvm/trunk/unittests/DebugInfo/PDB/CMakeLists.txt Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,11 @@
> +set(LLVM_LINK_COMPONENTS
> + DebugInfoPDB
> + )
> +
> +set(DebugInfoPDBSources
> + PDBApiTest.cpp
> + )
> +
> +add_llvm_unittest(DebugInfoPDBTests
> + ${DebugInfoPDBSources}
> + )
>
> Added: llvm/trunk/unittests/DebugInfo/PDB/Makefile
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/PDB/Makefile?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/unittests/DebugInfo/PDB/Makefile (added)
> +++ llvm/trunk/unittests/DebugInfo/PDB/Makefile Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,16 @@
> +##===- unittests/DebugInfo/PDB/Makefile -------------------*- Makefile -*-===##
> +#
> +# The LLVM Compiler Infrastructure
> +#
> +# This file is distributed under the University of Illinois Open Source
> +# License. See LICENSE.TXT for details.
> +#
> +##===----------------------------------------------------------------------===##
> +
> +LEVEL = ../..
> +TESTNAME = DebugInfoPDB
> +LINK_COMPONENTS := DebugInfoPDB object support
> +
> +include $(LEVEL)/Makefile.config
> +
> +include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
>
> Added: llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp?rev=228428&view=auto
> ==============================================================================
> --- llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp (added)
> +++ llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp Fri Feb 6 13:44:09 2015
> @@ -0,0 +1,349 @@
> +//===- llvm/unittest/DebugInfo/PDB/PDBApiTest.cpp -------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include <hash_map>
> +
> +#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
> +#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolAnnotation.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolBlock.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolCustom.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFunc.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolLabel.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolThunk.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeArray.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolUnknown.h"
> +#include "llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h"
> +#include "llvm/DebugInfo/PDB/PDBTypes.h"
> +#include "gtest/gtest.h"
> +using namespace llvm;
> +
> +namespace {
> +
> +#define MOCK_SYMBOL_ACCESSOR(Func) \
> + auto Func() const->decltype(((IPDBRawSymbol *)nullptr)->Func()) override { \
> + typedef decltype(IPDBRawSymbol::Func()) ReturnType; \
> + return ReturnType(); \
> + }
> +
> +class MockRawSymbol : public IPDBRawSymbol {
> +public:
> + MockRawSymbol(PDB_SymType SymType) : Type(SymType) {}
> +
> + virtual void dump(llvm::raw_ostream &OS) const {}
> +
> + virtual std::unique_ptr<IPDBEnumSymbols>
> + findChildren(PDB_SymType Type, StringRef Name,
> + PDB_NameSearchFlags Flags) const {
> + return nullptr;
> + }
> + virtual std::unique_ptr<IPDBEnumSymbols>
> + findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
> + uint32_t RVA) const {
> + return nullptr;
> + }
> + virtual std::unique_ptr<IPDBEnumSymbols>
> + findInlineFramesByRVA(uint32_t RVA) const {
> + return nullptr;
> + }
> +
> + virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const {}
> +
> + PDB_SymType getSymTag() const override { return Type; }
> +
> + MOCK_SYMBOL_ACCESSOR(getAccess)
> + MOCK_SYMBOL_ACCESSOR(getAddressOffset)
> + MOCK_SYMBOL_ACCESSOR(getAddressSection)
> + MOCK_SYMBOL_ACCESSOR(getAge)
> + MOCK_SYMBOL_ACCESSOR(getArrayIndexTypeId)
> + MOCK_SYMBOL_ACCESSOR(getBackEndBuild)
> + MOCK_SYMBOL_ACCESSOR(getBackEndMajor)
> + MOCK_SYMBOL_ACCESSOR(getBackEndMinor)
> + MOCK_SYMBOL_ACCESSOR(getBaseDataOffset)
> + MOCK_SYMBOL_ACCESSOR(getBaseDataSlot)
> + MOCK_SYMBOL_ACCESSOR(getBaseSymbolId)
> + MOCK_SYMBOL_ACCESSOR(getBuiltinType)
> + MOCK_SYMBOL_ACCESSOR(getBitPosition)
> + MOCK_SYMBOL_ACCESSOR(getCallingConvention)
> + MOCK_SYMBOL_ACCESSOR(getClassParentId)
> + MOCK_SYMBOL_ACCESSOR(getCompilerName)
> + MOCK_SYMBOL_ACCESSOR(getCount)
> + MOCK_SYMBOL_ACCESSOR(getCountLiveRanges)
> + MOCK_SYMBOL_ACCESSOR(getFrontEndBuild)
> + MOCK_SYMBOL_ACCESSOR(getFrontEndMajor)
> + MOCK_SYMBOL_ACCESSOR(getFrontEndMinor)
> + MOCK_SYMBOL_ACCESSOR(getLanguage)
> + MOCK_SYMBOL_ACCESSOR(getLexicalParentId)
> + MOCK_SYMBOL_ACCESSOR(getLibraryName)
> + MOCK_SYMBOL_ACCESSOR(getLiveRangeStartAddressOffset)
> + MOCK_SYMBOL_ACCESSOR(getLiveRangeStartAddressSection)
> + MOCK_SYMBOL_ACCESSOR(getLiveRangeStartRelativeVirtualAddress)
> + MOCK_SYMBOL_ACCESSOR(getLocalBasePointerRegisterId)
> + MOCK_SYMBOL_ACCESSOR(getLowerBoundId)
> + MOCK_SYMBOL_ACCESSOR(getMemorySpaceKind)
> + MOCK_SYMBOL_ACCESSOR(getName)
> + MOCK_SYMBOL_ACCESSOR(getNumberOfAcceleratorPointerTags)
> + MOCK_SYMBOL_ACCESSOR(getNumberOfColumns)
> + MOCK_SYMBOL_ACCESSOR(getNumberOfModifiers)
> + MOCK_SYMBOL_ACCESSOR(getNumberOfRegisterIndices)
> + MOCK_SYMBOL_ACCESSOR(getNumberOfRows)
> + MOCK_SYMBOL_ACCESSOR(getObjectFileName)
> + MOCK_SYMBOL_ACCESSOR(getOemId)
> + MOCK_SYMBOL_ACCESSOR(getOemSymbolId)
> + MOCK_SYMBOL_ACCESSOR(getOffsetInUdt)
> + MOCK_SYMBOL_ACCESSOR(getPlatform)
> + MOCK_SYMBOL_ACCESSOR(getRank)
> + MOCK_SYMBOL_ACCESSOR(getRegisterId)
> + MOCK_SYMBOL_ACCESSOR(getRegisterType)
> + MOCK_SYMBOL_ACCESSOR(getRelativeVirtualAddress)
> + MOCK_SYMBOL_ACCESSOR(getSamplerSlot)
> + MOCK_SYMBOL_ACCESSOR(getSignature)
> + MOCK_SYMBOL_ACCESSOR(getSizeInUdt)
> + MOCK_SYMBOL_ACCESSOR(getSlot)
> + MOCK_SYMBOL_ACCESSOR(getSourceFileName)
> + MOCK_SYMBOL_ACCESSOR(getStride)
> + MOCK_SYMBOL_ACCESSOR(getSubTypeId)
> + MOCK_SYMBOL_ACCESSOR(getSymbolsFileName)
> + MOCK_SYMBOL_ACCESSOR(getSymIndexId)
> + MOCK_SYMBOL_ACCESSOR(getTargetOffset)
> + MOCK_SYMBOL_ACCESSOR(getTargetRelativeVirtualAddress)
> + MOCK_SYMBOL_ACCESSOR(getTargetVirtualAddress)
> + MOCK_SYMBOL_ACCESSOR(getTargetSection)
> + MOCK_SYMBOL_ACCESSOR(getTextureSlot)
> + MOCK_SYMBOL_ACCESSOR(getTimeStamp)
> + MOCK_SYMBOL_ACCESSOR(getToken)
> + MOCK_SYMBOL_ACCESSOR(getTypeId)
> + MOCK_SYMBOL_ACCESSOR(getUavSlot)
> + MOCK_SYMBOL_ACCESSOR(getUndecoratedName)
> + MOCK_SYMBOL_ACCESSOR(getUnmodifiedTypeId)
> + MOCK_SYMBOL_ACCESSOR(getUpperBoundId)
> + MOCK_SYMBOL_ACCESSOR(getVirtualBaseDispIndex)
> + MOCK_SYMBOL_ACCESSOR(getVirtualBaseOffset)
> + MOCK_SYMBOL_ACCESSOR(getVirtualTableShapeId)
> + MOCK_SYMBOL_ACCESSOR(getDataKind)
> + MOCK_SYMBOL_ACCESSOR(getGuid)
> + MOCK_SYMBOL_ACCESSOR(getOffset)
> + MOCK_SYMBOL_ACCESSOR(getThisAdjust)
> + MOCK_SYMBOL_ACCESSOR(getVirtualBasePointerOffset)
> + MOCK_SYMBOL_ACCESSOR(getLocationType)
> + MOCK_SYMBOL_ACCESSOR(getMachineType)
> + MOCK_SYMBOL_ACCESSOR(getThunkOrdinal)
> + MOCK_SYMBOL_ACCESSOR(getLength)
> + MOCK_SYMBOL_ACCESSOR(getLiveRangeLength)
> + MOCK_SYMBOL_ACCESSOR(getVirtualAddress)
> + MOCK_SYMBOL_ACCESSOR(getUdtKind)
> + MOCK_SYMBOL_ACCESSOR(hasConstructor)
> + MOCK_SYMBOL_ACCESSOR(hasCustomCallingConvention)
> + MOCK_SYMBOL_ACCESSOR(hasFarReturn)
> + MOCK_SYMBOL_ACCESSOR(isCode)
> + MOCK_SYMBOL_ACCESSOR(isCompilerGenerated)
> + MOCK_SYMBOL_ACCESSOR(isConstType)
> + MOCK_SYMBOL_ACCESSOR(isEditAndContinueEnabled)
> + MOCK_SYMBOL_ACCESSOR(isFunction)
> + MOCK_SYMBOL_ACCESSOR(getAddressTaken)
> + MOCK_SYMBOL_ACCESSOR(getNoStackOrdering)
> + MOCK_SYMBOL_ACCESSOR(hasAlloca)
> + MOCK_SYMBOL_ACCESSOR(hasAssignmentOperator)
> + MOCK_SYMBOL_ACCESSOR(hasCTypes)
> + MOCK_SYMBOL_ACCESSOR(hasCastOperator)
> + MOCK_SYMBOL_ACCESSOR(hasDebugInfo)
> + MOCK_SYMBOL_ACCESSOR(hasEH)
> + MOCK_SYMBOL_ACCESSOR(hasEHa)
> + MOCK_SYMBOL_ACCESSOR(hasInlAsm)
> + MOCK_SYMBOL_ACCESSOR(hasInlineAttribute)
> + MOCK_SYMBOL_ACCESSOR(hasInterruptReturn)
> + MOCK_SYMBOL_ACCESSOR(hasLongJump)
> + MOCK_SYMBOL_ACCESSOR(hasManagedCode)
> + MOCK_SYMBOL_ACCESSOR(hasNestedTypes)
> + MOCK_SYMBOL_ACCESSOR(hasNoInlineAttribute)
> + MOCK_SYMBOL_ACCESSOR(hasNoReturnAttribute)
> + MOCK_SYMBOL_ACCESSOR(hasOptimizedCodeDebugInfo)
> + MOCK_SYMBOL_ACCESSOR(hasOverloadedOperator)
> + MOCK_SYMBOL_ACCESSOR(hasSEH)
> + MOCK_SYMBOL_ACCESSOR(hasSecurityChecks)
> + MOCK_SYMBOL_ACCESSOR(hasSetJump)
> + MOCK_SYMBOL_ACCESSOR(hasStrictGSCheck)
> + MOCK_SYMBOL_ACCESSOR(isAcceleratorGroupSharedLocal)
> + MOCK_SYMBOL_ACCESSOR(isAcceleratorPointerTagLiveRange)
> + MOCK_SYMBOL_ACCESSOR(isAcceleratorStubFunction)
> + MOCK_SYMBOL_ACCESSOR(isAggregated)
> + MOCK_SYMBOL_ACCESSOR(isIntroVirtualFunction)
> + MOCK_SYMBOL_ACCESSOR(isCVTCIL)
> + MOCK_SYMBOL_ACCESSOR(isConstructorVirtualBase)
> + MOCK_SYMBOL_ACCESSOR(isCxxReturnUdt)
> + MOCK_SYMBOL_ACCESSOR(isDataAligned)
> + MOCK_SYMBOL_ACCESSOR(isHLSLData)
> + MOCK_SYMBOL_ACCESSOR(isHotpatchable)
> + MOCK_SYMBOL_ACCESSOR(isIndirectVirtualBaseClass)
> + MOCK_SYMBOL_ACCESSOR(isInterfaceUdt)
> + MOCK_SYMBOL_ACCESSOR(isIntrinsic)
> + MOCK_SYMBOL_ACCESSOR(isLTCG)
> + MOCK_SYMBOL_ACCESSOR(isLocationControlFlowDependent)
> + MOCK_SYMBOL_ACCESSOR(isMSILNetmodule)
> + MOCK_SYMBOL_ACCESSOR(isMatrixRowMajor)
> + MOCK_SYMBOL_ACCESSOR(isManagedCode)
> + MOCK_SYMBOL_ACCESSOR(isMSILCode)
> + MOCK_SYMBOL_ACCESSOR(isMultipleInheritance)
> + MOCK_SYMBOL_ACCESSOR(isNaked)
> + MOCK_SYMBOL_ACCESSOR(isNested)
> + MOCK_SYMBOL_ACCESSOR(isOptimizedAway)
> + MOCK_SYMBOL_ACCESSOR(isPacked)
> + MOCK_SYMBOL_ACCESSOR(isPointerBasedOnSymbolValue)
> + MOCK_SYMBOL_ACCESSOR(isPointerToDataMember)
> + MOCK_SYMBOL_ACCESSOR(isPointerToMemberFunction)
> + MOCK_SYMBOL_ACCESSOR(isPureVirtual)
> + MOCK_SYMBOL_ACCESSOR(isRValueReference)
> + MOCK_SYMBOL_ACCESSOR(isRefUdt)
> + MOCK_SYMBOL_ACCESSOR(isReference)
> + MOCK_SYMBOL_ACCESSOR(isRestrictedType)
> + MOCK_SYMBOL_ACCESSOR(isReturnValue)
> + MOCK_SYMBOL_ACCESSOR(isSafeBuffers)
> + MOCK_SYMBOL_ACCESSOR(isScoped)
> + MOCK_SYMBOL_ACCESSOR(isSdl)
> + MOCK_SYMBOL_ACCESSOR(isSingleInheritance)
> + MOCK_SYMBOL_ACCESSOR(isSplitted)
> + MOCK_SYMBOL_ACCESSOR(isStatic)
> + MOCK_SYMBOL_ACCESSOR(hasPrivateSymbols)
> + MOCK_SYMBOL_ACCESSOR(isUnalignedType)
> + MOCK_SYMBOL_ACCESSOR(isUnreached)
> + MOCK_SYMBOL_ACCESSOR(isValueUdt)
> + MOCK_SYMBOL_ACCESSOR(isVirtual)
> + MOCK_SYMBOL_ACCESSOR(isVirtualBaseClass)
> + MOCK_SYMBOL_ACCESSOR(isVirtualInheritance)
> + MOCK_SYMBOL_ACCESSOR(isVolatileType)
> +
> +private:
> + PDB_SymType Type;
> +};
> +
> +class PDBApiTest : public testing::Test {
> +public:
> + std::hash_map<PDB_SymType, std::unique_ptr<PDBSymbol>> SymbolMap;
> +
> + void SetUp() override {
> + InsertItemWithTag(PDB_SymType::None);
> + InsertItemWithTag(PDB_SymType::Exe);
> + InsertItemWithTag(PDB_SymType::Compiland);
> + InsertItemWithTag(PDB_SymType::CompilandDetails);
> + InsertItemWithTag(PDB_SymType::CompilandEnv);
> + InsertItemWithTag(PDB_SymType::Function);
> + InsertItemWithTag(PDB_SymType::Block);
> + InsertItemWithTag(PDB_SymType::Data);
> + InsertItemWithTag(PDB_SymType::Annotation);
> + InsertItemWithTag(PDB_SymType::Label);
> + InsertItemWithTag(PDB_SymType::PublicSymbol);
> + InsertItemWithTag(PDB_SymType::UDT);
> + InsertItemWithTag(PDB_SymType::Enum);
> + InsertItemWithTag(PDB_SymType::FunctionSig);
> + InsertItemWithTag(PDB_SymType::PointerType);
> + InsertItemWithTag(PDB_SymType::ArrayType);
> + InsertItemWithTag(PDB_SymType::BuiltinType);
> + InsertItemWithTag(PDB_SymType::Typedef);
> + InsertItemWithTag(PDB_SymType::BaseClass);
> + InsertItemWithTag(PDB_SymType::Friend);
> + InsertItemWithTag(PDB_SymType::FunctionArg);
> + InsertItemWithTag(PDB_SymType::FuncDebugStart);
> + InsertItemWithTag(PDB_SymType::FuncDebugEnd);
> + InsertItemWithTag(PDB_SymType::UsingNamespace);
> + InsertItemWithTag(PDB_SymType::VTableShape);
> + InsertItemWithTag(PDB_SymType::VTable);
> + InsertItemWithTag(PDB_SymType::Custom);
> + InsertItemWithTag(PDB_SymType::Thunk);
> + InsertItemWithTag(PDB_SymType::CustomType);
> + InsertItemWithTag(PDB_SymType::ManagedType);
> + InsertItemWithTag(PDB_SymType::Dimension);
> + InsertItemWithTag(PDB_SymType::Max);
> + }
> +
> +private:
> + void InsertItemWithTag(PDB_SymType Tag) {
> + auto RawSymbol = std::unique_ptr<IPDBRawSymbol>(new MockRawSymbol(Tag));
> + auto Symbol = PDBSymbol::create(std::move(RawSymbol));
> + SymbolMap.insert(std::make_pair(Tag, std::move(Symbol)));
> + }
> +
> +public:
> + template <class ExpectedType> void VerifyDyncast(PDB_SymType Tag) {
> + for (auto item = SymbolMap.begin(); item != SymbolMap.end(); ++item) {
> + EXPECT_EQ(item->first == Tag, llvm::isa<ExpectedType>(*item->second));
> + }
> + }
> +
> + void VerifyUnknownDyncasts() {
> + for (auto item = SymbolMap.begin(); item != SymbolMap.end(); ++item) {
> + bool should_match = false;
> + if (item->first == PDB_SymType::None || item->first >= PDB_SymType::Max)
> + should_match = true;
> +
> + EXPECT_EQ(should_match, llvm::isa<PDBSymbolUnknown>(*item->second));
> + }
> + }
> +};
> +
> +TEST_F(PDBApiTest, Dyncast) {
> +
> + // Most of the types have a one-to-one mapping between Tag and concrete type.
> + VerifyDyncast<PDBSymbolExe>(PDB_SymType::Exe);
> + VerifyDyncast<PDBSymbolCompiland>(PDB_SymType::Compiland);
> + VerifyDyncast<PDBSymbolCompilandDetails>(PDB_SymType::CompilandDetails);
> + VerifyDyncast<PDBSymbolCompilandEnv>(PDB_SymType::CompilandEnv);
> + VerifyDyncast<PDBSymbolFunc>(PDB_SymType::Function);
> + VerifyDyncast<PDBSymbolBlock>(PDB_SymType::Block);
> + VerifyDyncast<PDBSymbolData>(PDB_SymType::Data);
> + VerifyDyncast<PDBSymbolAnnotation>(PDB_SymType::Annotation);
> + VerifyDyncast<PDBSymbolLabel>(PDB_SymType::Label);
> + VerifyDyncast<PDBSymbolPublicSymbol>(PDB_SymType::PublicSymbol);
> + VerifyDyncast<PDBSymbolTypeUDT>(PDB_SymType::UDT);
> + VerifyDyncast<PDBSymbolTypeEnum>(PDB_SymType::Enum);
> + VerifyDyncast<PDBSymbolTypeFunctionSig>(PDB_SymType::FunctionSig);
> + VerifyDyncast<PDBSymbolTypePointer>(PDB_SymType::PointerType);
> + VerifyDyncast<PDBSymbolTypeArray>(PDB_SymType::ArrayType);
> + VerifyDyncast<PDBSymbolTypeBuiltin>(PDB_SymType::BuiltinType);
> + VerifyDyncast<PDBSymbolTypeTypedef>(PDB_SymType::Typedef);
> + VerifyDyncast<PDBSymbolTypeBaseClass>(PDB_SymType::BaseClass);
> + VerifyDyncast<PDBSymbolTypeFriend>(PDB_SymType::Friend);
> + VerifyDyncast<PDBSymbolTypeFunctionArg>(PDB_SymType::FunctionArg);
> + VerifyDyncast<PDBSymbolFuncDebugStart>(PDB_SymType::FuncDebugStart);
> + VerifyDyncast<PDBSymbolFuncDebugEnd>(PDB_SymType::FuncDebugEnd);
> + VerifyDyncast<PDBSymbolUsingNamespace>(PDB_SymType::UsingNamespace);
> + VerifyDyncast<PDBSymbolTypeVTableShape>(PDB_SymType::VTableShape);
> + VerifyDyncast<PDBSymbolTypeVTable>(PDB_SymType::VTable);
> + VerifyDyncast<PDBSymbolCustom>(PDB_SymType::Custom);
> + VerifyDyncast<PDBSymbolThunk>(PDB_SymType::Thunk);
> + VerifyDyncast<PDBSymbolTypeCustom>(PDB_SymType::CustomType);
> + VerifyDyncast<PDBSymbolTypeManaged>(PDB_SymType::ManagedType);
> + VerifyDyncast<PDBSymbolTypeDimension>(PDB_SymType::Dimension);
> +
> + VerifyUnknownDyncasts();
> +}
> +
> +} // end anonymous namespace
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150206/23a94c4c/attachment.html>
More information about the llvm-commits
mailing list