1283625Sdim//===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- C++ -*-===// 2283625Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6283625Sdim// 7283625Sdim//===----------------------------------------------------------------------===// 8283625Sdim 9283625Sdim#ifndef LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H 10283625Sdim#define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H 11283625Sdim 12283625Sdim#include "PDBTypes.h" 13344779Sdim#include "llvm/ADT/BitmaskEnum.h" 14283625Sdim#include "llvm/ADT/SmallVector.h" 15283625Sdim#include "llvm/ADT/StringRef.h" 16309124Sdim#include "llvm/DebugInfo/CodeView/CodeView.h" 17283625Sdim#include <memory> 18283625Sdim 19283625Sdimnamespace llvm { 20283625Sdimclass raw_ostream; 21283625Sdim 22309124Sdimnamespace pdb { 23309124Sdim 24344779Sdimclass IPDBSession; 25321369Sdimclass PDBSymbolTypeVTable; 26321369Sdimclass PDBSymbolTypeVTableShape; 27321369Sdim 28344779Sdimenum class PdbSymbolIdField : uint32_t { 29344779Sdim None = 0, 30344779Sdim SymIndexId = 1 << 0, 31344779Sdim LexicalParent = 1 << 1, 32344779Sdim ClassParent = 1 << 2, 33344779Sdim Type = 1 << 3, 34344779Sdim UnmodifiedType = 1 << 4, 35344779Sdim All = 0xFFFFFFFF, 36344779Sdim LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All) 37344779Sdim}; 38344779Sdim 39344779Sdimvoid dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, 40344779Sdim int Indent, const IPDBSession &Session, 41344779Sdim PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, 42344779Sdim PdbSymbolIdField RecurseFlags); 43344779Sdim 44283625Sdim/// IPDBRawSymbol defines an interface used to represent an arbitrary symbol. 45283625Sdim/// It exposes a monolithic interface consisting of accessors for the union of 46283625Sdim/// all properties that are valid for any symbol type. This interface is then 47283625Sdim/// wrapped by a concrete class which exposes only those set of methods valid 48283625Sdim/// for this particular symbol type. See PDBSymbol.h for more details. 49283625Sdimclass IPDBRawSymbol { 50283625Sdimpublic: 51283625Sdim virtual ~IPDBRawSymbol(); 52283625Sdim 53344779Sdim virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, 54344779Sdim PdbSymbolIdField RecurseIdFields) const = 0; 55283625Sdim 56283625Sdim virtual std::unique_ptr<IPDBEnumSymbols> 57283625Sdim findChildren(PDB_SymType Type) const = 0; 58283625Sdim 59283625Sdim virtual std::unique_ptr<IPDBEnumSymbols> 60283625Sdim findChildren(PDB_SymType Type, StringRef Name, 61283625Sdim PDB_NameSearchFlags Flags) const = 0; 62283625Sdim virtual std::unique_ptr<IPDBEnumSymbols> 63341825Sdim findChildrenByAddr(PDB_SymType Type, StringRef Name, 64341825Sdim PDB_NameSearchFlags Flags, 65341825Sdim uint32_t Section, uint32_t Offset) const = 0; 66341825Sdim virtual std::unique_ptr<IPDBEnumSymbols> 67341825Sdim findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, 68341825Sdim uint64_t VA) const = 0; 69341825Sdim virtual std::unique_ptr<IPDBEnumSymbols> 70283625Sdim findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, 71283625Sdim uint32_t RVA) const = 0; 72341825Sdim 73283625Sdim virtual std::unique_ptr<IPDBEnumSymbols> 74341825Sdim findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const = 0; 75341825Sdim virtual std::unique_ptr<IPDBEnumSymbols> 76283625Sdim findInlineFramesByRVA(uint32_t RVA) const = 0; 77341825Sdim virtual std::unique_ptr<IPDBEnumSymbols> 78341825Sdim findInlineFramesByVA(uint64_t VA) const = 0; 79283625Sdim 80341825Sdim virtual std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const = 0; 81341825Sdim virtual std::unique_ptr<IPDBEnumLineNumbers> 82341825Sdim findInlineeLinesByAddr(uint32_t Section, uint32_t Offset, 83341825Sdim uint32_t Length) const = 0; 84341825Sdim virtual std::unique_ptr<IPDBEnumLineNumbers> 85341825Sdim findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const = 0; 86341825Sdim virtual std::unique_ptr<IPDBEnumLineNumbers> 87341825Sdim findInlineeLinesByVA(uint64_t VA, uint32_t Length) const = 0; 88341825Sdim 89283625Sdim virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const = 0; 90283625Sdim virtual void getBackEndVersion(VersionInfo &Version) const = 0; 91283625Sdim virtual PDB_MemberAccess getAccess() const = 0; 92283625Sdim virtual uint32_t getAddressOffset() const = 0; 93283625Sdim virtual uint32_t getAddressSection() const = 0; 94283625Sdim virtual uint32_t getAge() const = 0; 95344779Sdim virtual SymIndexId getArrayIndexTypeId() const = 0; 96283625Sdim virtual uint32_t getBaseDataOffset() const = 0; 97283625Sdim virtual uint32_t getBaseDataSlot() const = 0; 98344779Sdim virtual SymIndexId getBaseSymbolId() const = 0; 99283625Sdim virtual PDB_BuiltinType getBuiltinType() const = 0; 100283625Sdim virtual uint32_t getBitPosition() const = 0; 101283625Sdim virtual PDB_CallingConv getCallingConvention() const = 0; 102344779Sdim virtual SymIndexId getClassParentId() const = 0; 103283625Sdim virtual std::string getCompilerName() const = 0; 104283625Sdim virtual uint32_t getCount() const = 0; 105283625Sdim virtual uint32_t getCountLiveRanges() const = 0; 106283625Sdim virtual void getFrontEndVersion(VersionInfo &Version) const = 0; 107283625Sdim virtual PDB_Lang getLanguage() const = 0; 108344779Sdim virtual SymIndexId getLexicalParentId() const = 0; 109283625Sdim virtual std::string getLibraryName() const = 0; 110283625Sdim virtual uint32_t getLiveRangeStartAddressOffset() const = 0; 111283625Sdim virtual uint32_t getLiveRangeStartAddressSection() const = 0; 112283625Sdim virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0; 113309124Sdim virtual codeview::RegisterId getLocalBasePointerRegisterId() const = 0; 114344779Sdim virtual SymIndexId getLowerBoundId() const = 0; 115283625Sdim virtual uint32_t getMemorySpaceKind() const = 0; 116283625Sdim virtual std::string getName() const = 0; 117283625Sdim virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0; 118283625Sdim virtual uint32_t getNumberOfColumns() const = 0; 119283625Sdim virtual uint32_t getNumberOfModifiers() const = 0; 120283625Sdim virtual uint32_t getNumberOfRegisterIndices() const = 0; 121283625Sdim virtual uint32_t getNumberOfRows() const = 0; 122283625Sdim virtual std::string getObjectFileName() const = 0; 123283625Sdim virtual uint32_t getOemId() const = 0; 124344779Sdim virtual SymIndexId getOemSymbolId() const = 0; 125283625Sdim virtual uint32_t getOffsetInUdt() const = 0; 126283625Sdim virtual PDB_Cpu getPlatform() const = 0; 127283625Sdim virtual uint32_t getRank() const = 0; 128309124Sdim virtual codeview::RegisterId getRegisterId() const = 0; 129283625Sdim virtual uint32_t getRegisterType() const = 0; 130283625Sdim virtual uint32_t getRelativeVirtualAddress() const = 0; 131283625Sdim virtual uint32_t getSamplerSlot() const = 0; 132283625Sdim virtual uint32_t getSignature() const = 0; 133283625Sdim virtual uint32_t getSizeInUdt() const = 0; 134283625Sdim virtual uint32_t getSlot() const = 0; 135283625Sdim virtual std::string getSourceFileName() const = 0; 136341825Sdim virtual std::unique_ptr<IPDBLineNumber> 137341825Sdim getSrcLineOnTypeDefn() const = 0; 138283625Sdim virtual uint32_t getStride() const = 0; 139344779Sdim virtual SymIndexId getSubTypeId() const = 0; 140283625Sdim virtual std::string getSymbolsFileName() const = 0; 141344779Sdim virtual SymIndexId getSymIndexId() const = 0; 142283625Sdim virtual uint32_t getTargetOffset() const = 0; 143283625Sdim virtual uint32_t getTargetRelativeVirtualAddress() const = 0; 144283625Sdim virtual uint64_t getTargetVirtualAddress() const = 0; 145283625Sdim virtual uint32_t getTargetSection() const = 0; 146283625Sdim virtual uint32_t getTextureSlot() const = 0; 147283625Sdim virtual uint32_t getTimeStamp() const = 0; 148283625Sdim virtual uint32_t getToken() const = 0; 149344779Sdim virtual SymIndexId getTypeId() const = 0; 150283625Sdim virtual uint32_t getUavSlot() const = 0; 151283625Sdim virtual std::string getUndecoratedName() const = 0; 152327952Sdim virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const = 0; 153344779Sdim virtual SymIndexId getUnmodifiedTypeId() const = 0; 154344779Sdim virtual SymIndexId getUpperBoundId() const = 0; 155283625Sdim virtual Variant getValue() const = 0; 156283625Sdim virtual uint32_t getVirtualBaseDispIndex() const = 0; 157283625Sdim virtual uint32_t getVirtualBaseOffset() const = 0; 158321369Sdim virtual std::unique_ptr<PDBSymbolTypeBuiltin> 159321369Sdim getVirtualBaseTableType() const = 0; 160344779Sdim virtual SymIndexId getVirtualTableShapeId() const = 0; 161283625Sdim virtual PDB_DataKind getDataKind() const = 0; 162283625Sdim virtual PDB_SymType getSymTag() const = 0; 163321369Sdim virtual codeview::GUID getGuid() const = 0; 164283625Sdim virtual int32_t getOffset() const = 0; 165283625Sdim virtual int32_t getThisAdjust() const = 0; 166283625Sdim virtual int32_t getVirtualBasePointerOffset() const = 0; 167283625Sdim virtual PDB_LocType getLocationType() const = 0; 168283625Sdim virtual PDB_Machine getMachineType() const = 0; 169309124Sdim virtual codeview::ThunkOrdinal getThunkOrdinal() const = 0; 170283625Sdim virtual uint64_t getLength() const = 0; 171283625Sdim virtual uint64_t getLiveRangeLength() const = 0; 172283625Sdim virtual uint64_t getVirtualAddress() const = 0; 173283625Sdim virtual PDB_UdtType getUdtKind() const = 0; 174283625Sdim virtual bool hasConstructor() const = 0; 175283625Sdim virtual bool hasCustomCallingConvention() const = 0; 176283625Sdim virtual bool hasFarReturn() const = 0; 177283625Sdim virtual bool isCode() const = 0; 178283625Sdim virtual bool isCompilerGenerated() const = 0; 179283625Sdim virtual bool isConstType() const = 0; 180283625Sdim virtual bool isEditAndContinueEnabled() const = 0; 181283625Sdim virtual bool isFunction() const = 0; 182283625Sdim virtual bool getAddressTaken() const = 0; 183283625Sdim virtual bool getNoStackOrdering() const = 0; 184283625Sdim virtual bool hasAlloca() const = 0; 185283625Sdim virtual bool hasAssignmentOperator() const = 0; 186283625Sdim virtual bool hasCTypes() const = 0; 187283625Sdim virtual bool hasCastOperator() const = 0; 188283625Sdim virtual bool hasDebugInfo() const = 0; 189283625Sdim virtual bool hasEH() const = 0; 190283625Sdim virtual bool hasEHa() const = 0; 191283625Sdim virtual bool hasFramePointer() const = 0; 192283625Sdim virtual bool hasInlAsm() const = 0; 193283625Sdim virtual bool hasInlineAttribute() const = 0; 194283625Sdim virtual bool hasInterruptReturn() const = 0; 195283625Sdim virtual bool hasLongJump() const = 0; 196283625Sdim virtual bool hasManagedCode() const = 0; 197283625Sdim virtual bool hasNestedTypes() const = 0; 198283625Sdim virtual bool hasNoInlineAttribute() const = 0; 199283625Sdim virtual bool hasNoReturnAttribute() const = 0; 200283625Sdim virtual bool hasOptimizedCodeDebugInfo() const = 0; 201283625Sdim virtual bool hasOverloadedOperator() const = 0; 202283625Sdim virtual bool hasSEH() const = 0; 203283625Sdim virtual bool hasSecurityChecks() const = 0; 204283625Sdim virtual bool hasSetJump() const = 0; 205283625Sdim virtual bool hasStrictGSCheck() const = 0; 206283625Sdim virtual bool isAcceleratorGroupSharedLocal() const = 0; 207283625Sdim virtual bool isAcceleratorPointerTagLiveRange() const = 0; 208283625Sdim virtual bool isAcceleratorStubFunction() const = 0; 209283625Sdim virtual bool isAggregated() const = 0; 210283625Sdim virtual bool isIntroVirtualFunction() const = 0; 211283625Sdim virtual bool isCVTCIL() const = 0; 212283625Sdim virtual bool isConstructorVirtualBase() const = 0; 213283625Sdim virtual bool isCxxReturnUdt() const = 0; 214283625Sdim virtual bool isDataAligned() const = 0; 215283625Sdim virtual bool isHLSLData() const = 0; 216283625Sdim virtual bool isHotpatchable() const = 0; 217283625Sdim virtual bool isIndirectVirtualBaseClass() const = 0; 218283625Sdim virtual bool isInterfaceUdt() const = 0; 219283625Sdim virtual bool isIntrinsic() const = 0; 220283625Sdim virtual bool isLTCG() const = 0; 221283625Sdim virtual bool isLocationControlFlowDependent() const = 0; 222283625Sdim virtual bool isMSILNetmodule() const = 0; 223283625Sdim virtual bool isMatrixRowMajor() const = 0; 224283625Sdim virtual bool isManagedCode() const = 0; 225283625Sdim virtual bool isMSILCode() const = 0; 226283625Sdim virtual bool isMultipleInheritance() const = 0; 227283625Sdim virtual bool isNaked() const = 0; 228283625Sdim virtual bool isNested() const = 0; 229283625Sdim virtual bool isOptimizedAway() const = 0; 230283625Sdim virtual bool isPacked() const = 0; 231283625Sdim virtual bool isPointerBasedOnSymbolValue() const = 0; 232283625Sdim virtual bool isPointerToDataMember() const = 0; 233283625Sdim virtual bool isPointerToMemberFunction() const = 0; 234283625Sdim virtual bool isPureVirtual() const = 0; 235283625Sdim virtual bool isRValueReference() const = 0; 236283625Sdim virtual bool isRefUdt() const = 0; 237283625Sdim virtual bool isReference() const = 0; 238283625Sdim virtual bool isRestrictedType() const = 0; 239283625Sdim virtual bool isReturnValue() const = 0; 240283625Sdim virtual bool isSafeBuffers() const = 0; 241283625Sdim virtual bool isScoped() const = 0; 242283625Sdim virtual bool isSdl() const = 0; 243283625Sdim virtual bool isSingleInheritance() const = 0; 244283625Sdim virtual bool isSplitted() const = 0; 245283625Sdim virtual bool isStatic() const = 0; 246283625Sdim virtual bool hasPrivateSymbols() const = 0; 247283625Sdim virtual bool isUnalignedType() const = 0; 248283625Sdim virtual bool isUnreached() const = 0; 249283625Sdim virtual bool isValueUdt() const = 0; 250283625Sdim virtual bool isVirtual() const = 0; 251283625Sdim virtual bool isVirtualBaseClass() const = 0; 252283625Sdim virtual bool isVirtualInheritance() const = 0; 253283625Sdim virtual bool isVolatileType() const = 0; 254283625Sdim virtual bool wasInlined() const = 0; 255283625Sdim virtual std::string getUnused() const = 0; 256283625Sdim}; 257283625Sdim 258344779SdimLLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); 259344779Sdim 260309124Sdim} // namespace pdb 261283625Sdim} // namespace llvm 262283625Sdim 263283625Sdim#endif 264