Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:45

0001 //===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 
0009 #ifndef LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
0010 #define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
0011 
0012 #include "PDBTypes.h"
0013 #include "llvm/ADT/BitmaskEnum.h"
0014 #include "llvm/ADT/SmallVector.h"
0015 #include "llvm/DebugInfo/CodeView/CodeView.h"
0016 #include <memory>
0017 
0018 namespace llvm {
0019 class raw_ostream;
0020 class StringRef;
0021 
0022 namespace pdb {
0023 
0024 enum class PdbSymbolIdField : uint32_t {
0025   None = 0,
0026   SymIndexId = 1 << 0,
0027   LexicalParent = 1 << 1,
0028   ClassParent = 1 << 2,
0029   Type = 1 << 3,
0030   UnmodifiedType = 1 << 4,
0031   All = 0xFFFFFFFF,
0032   LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All)
0033 };
0034 
0035 void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value,
0036                        int Indent, const IPDBSession &Session,
0037                        PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags,
0038                        PdbSymbolIdField RecurseFlags);
0039 
0040 /// IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
0041 /// It exposes a monolithic interface consisting of accessors for the union of
0042 /// all properties that are valid for any symbol type.  This interface is then
0043 /// wrapped by a concrete class which exposes only those set of methods valid
0044 /// for this particular symbol type.  See PDBSymbol.h for more details.
0045 class IPDBRawSymbol {
0046 public:
0047   virtual ~IPDBRawSymbol();
0048 
0049   virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
0050                     PdbSymbolIdField RecurseIdFields) const = 0;
0051 
0052   virtual std::unique_ptr<IPDBEnumSymbols>
0053   findChildren(PDB_SymType Type) const = 0;
0054 
0055   virtual std::unique_ptr<IPDBEnumSymbols>
0056   findChildren(PDB_SymType Type, StringRef Name,
0057                PDB_NameSearchFlags Flags) const = 0;
0058   virtual std::unique_ptr<IPDBEnumSymbols>
0059   findChildrenByAddr(PDB_SymType Type, StringRef Name,
0060                      PDB_NameSearchFlags Flags,
0061                      uint32_t Section, uint32_t Offset) const = 0;
0062   virtual std::unique_ptr<IPDBEnumSymbols>
0063   findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
0064                    uint64_t VA) const = 0;
0065   virtual std::unique_ptr<IPDBEnumSymbols>
0066   findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
0067                     uint32_t RVA) const = 0;
0068 
0069   virtual std::unique_ptr<IPDBEnumSymbols>
0070   findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const = 0;
0071   virtual std::unique_ptr<IPDBEnumSymbols>
0072   findInlineFramesByRVA(uint32_t RVA) const = 0;
0073   virtual std::unique_ptr<IPDBEnumSymbols>
0074   findInlineFramesByVA(uint64_t VA) const = 0;
0075 
0076   virtual std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const = 0;
0077   virtual std::unique_ptr<IPDBEnumLineNumbers>
0078   findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,
0079                          uint32_t Length) const = 0;
0080   virtual std::unique_ptr<IPDBEnumLineNumbers>
0081   findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const = 0;
0082   virtual std::unique_ptr<IPDBEnumLineNumbers>
0083   findInlineeLinesByVA(uint64_t VA, uint32_t Length) const = 0;
0084 
0085   virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const = 0;
0086   virtual void getBackEndVersion(VersionInfo &Version) const = 0;
0087   virtual PDB_MemberAccess getAccess() const = 0;
0088   virtual uint32_t getAddressOffset() const = 0;
0089   virtual uint32_t getAddressSection() const = 0;
0090   virtual uint32_t getAge() const = 0;
0091   virtual SymIndexId getArrayIndexTypeId() const = 0;
0092   virtual uint32_t getBaseDataOffset() const = 0;
0093   virtual uint32_t getBaseDataSlot() const = 0;
0094   virtual SymIndexId getBaseSymbolId() const = 0;
0095   virtual PDB_BuiltinType getBuiltinType() const = 0;
0096   virtual uint32_t getBitPosition() const = 0;
0097   virtual PDB_CallingConv getCallingConvention() const = 0;
0098   virtual SymIndexId getClassParentId() const = 0;
0099   virtual std::string getCompilerName() const = 0;
0100   virtual uint32_t getCount() const = 0;
0101   virtual uint32_t getCountLiveRanges() const = 0;
0102   virtual void getFrontEndVersion(VersionInfo &Version) const = 0;
0103   virtual PDB_Lang getLanguage() const = 0;
0104   virtual SymIndexId getLexicalParentId() const = 0;
0105   virtual std::string getLibraryName() const = 0;
0106   virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
0107   virtual uint32_t getLiveRangeStartAddressSection() const = 0;
0108   virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
0109   virtual codeview::RegisterId getLocalBasePointerRegisterId() const = 0;
0110   virtual SymIndexId getLowerBoundId() const = 0;
0111   virtual uint32_t getMemorySpaceKind() const = 0;
0112   virtual std::string getName() const = 0;
0113   virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0;
0114   virtual uint32_t getNumberOfColumns() const = 0;
0115   virtual uint32_t getNumberOfModifiers() const = 0;
0116   virtual uint32_t getNumberOfRegisterIndices() const = 0;
0117   virtual uint32_t getNumberOfRows() const = 0;
0118   virtual std::string getObjectFileName() const = 0;
0119   virtual uint32_t getOemId() const = 0;
0120   virtual SymIndexId getOemSymbolId() const = 0;
0121   virtual uint32_t getOffsetInUdt() const = 0;
0122   virtual PDB_Cpu getPlatform() const = 0;
0123   virtual uint32_t getRank() const = 0;
0124   virtual codeview::RegisterId getRegisterId() const = 0;
0125   virtual uint32_t getRegisterType() const = 0;
0126   virtual uint32_t getRelativeVirtualAddress() const = 0;
0127   virtual uint32_t getSamplerSlot() const = 0;
0128   virtual uint32_t getSignature() const = 0;
0129   virtual uint32_t getSizeInUdt() const = 0;
0130   virtual uint32_t getSlot() const = 0;
0131   virtual std::string getSourceFileName() const = 0;
0132   virtual std::unique_ptr<IPDBLineNumber>
0133   getSrcLineOnTypeDefn() const = 0;
0134   virtual uint32_t getStride() const = 0;
0135   virtual SymIndexId getSubTypeId() const = 0;
0136   virtual std::string getSymbolsFileName() const = 0;
0137   virtual SymIndexId getSymIndexId() const = 0;
0138   virtual uint32_t getTargetOffset() const = 0;
0139   virtual uint32_t getTargetRelativeVirtualAddress() const = 0;
0140   virtual uint64_t getTargetVirtualAddress() const = 0;
0141   virtual uint32_t getTargetSection() const = 0;
0142   virtual uint32_t getTextureSlot() const = 0;
0143   virtual uint32_t getTimeStamp() const = 0;
0144   virtual uint32_t getToken() const = 0;
0145   virtual SymIndexId getTypeId() const = 0;
0146   virtual uint32_t getUavSlot() const = 0;
0147   virtual std::string getUndecoratedName() const = 0;
0148   virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const = 0;
0149   virtual SymIndexId getUnmodifiedTypeId() const = 0;
0150   virtual SymIndexId getUpperBoundId() const = 0;
0151   virtual Variant getValue() const = 0;
0152   virtual uint32_t getVirtualBaseDispIndex() const = 0;
0153   virtual uint32_t getVirtualBaseOffset() const = 0;
0154   virtual std::unique_ptr<PDBSymbolTypeBuiltin>
0155   getVirtualBaseTableType() const = 0;
0156   virtual SymIndexId getVirtualTableShapeId() const = 0;
0157   virtual PDB_DataKind getDataKind() const = 0;
0158   virtual PDB_SymType getSymTag() const = 0;
0159   virtual codeview::GUID getGuid() const = 0;
0160   virtual int32_t getOffset() const = 0;
0161   virtual int32_t getThisAdjust() const = 0;
0162   virtual int32_t getVirtualBasePointerOffset() const = 0;
0163   virtual PDB_LocType getLocationType() const = 0;
0164   virtual PDB_Machine getMachineType() const = 0;
0165   virtual codeview::ThunkOrdinal getThunkOrdinal() const = 0;
0166   virtual uint64_t getLength() const = 0;
0167   virtual uint64_t getLiveRangeLength() const = 0;
0168   virtual uint64_t getVirtualAddress() const = 0;
0169   virtual PDB_UdtType getUdtKind() const = 0;
0170   virtual bool hasConstructor() const = 0;
0171   virtual bool hasCustomCallingConvention() const = 0;
0172   virtual bool hasFarReturn() const = 0;
0173   virtual bool isCode() const = 0;
0174   virtual bool isCompilerGenerated() const = 0;
0175   virtual bool isConstType() const = 0;
0176   virtual bool isEditAndContinueEnabled() const = 0;
0177   virtual bool isFunction() const = 0;
0178   virtual bool getAddressTaken() const = 0;
0179   virtual bool getNoStackOrdering() const = 0;
0180   virtual bool hasAlloca() const = 0;
0181   virtual bool hasAssignmentOperator() const = 0;
0182   virtual bool hasCTypes() const = 0;
0183   virtual bool hasCastOperator() const = 0;
0184   virtual bool hasDebugInfo() const = 0;
0185   virtual bool hasEH() const = 0;
0186   virtual bool hasEHa() const = 0;
0187   virtual bool hasFramePointer() const = 0;
0188   virtual bool hasInlAsm() const = 0;
0189   virtual bool hasInlineAttribute() const = 0;
0190   virtual bool hasInterruptReturn() const = 0;
0191   virtual bool hasLongJump() const = 0;
0192   virtual bool hasManagedCode() const = 0;
0193   virtual bool hasNestedTypes() const = 0;
0194   virtual bool hasNoInlineAttribute() const = 0;
0195   virtual bool hasNoReturnAttribute() const = 0;
0196   virtual bool hasOptimizedCodeDebugInfo() const = 0;
0197   virtual bool hasOverloadedOperator() const = 0;
0198   virtual bool hasSEH() const = 0;
0199   virtual bool hasSecurityChecks() const = 0;
0200   virtual bool hasSetJump() const = 0;
0201   virtual bool hasStrictGSCheck() const = 0;
0202   virtual bool isAcceleratorGroupSharedLocal() const = 0;
0203   virtual bool isAcceleratorPointerTagLiveRange() const = 0;
0204   virtual bool isAcceleratorStubFunction() const = 0;
0205   virtual bool isAggregated() const = 0;
0206   virtual bool isIntroVirtualFunction() const = 0;
0207   virtual bool isCVTCIL() const = 0;
0208   virtual bool isConstructorVirtualBase() const = 0;
0209   virtual bool isCxxReturnUdt() const = 0;
0210   virtual bool isDataAligned() const = 0;
0211   virtual bool isHLSLData() const = 0;
0212   virtual bool isHotpatchable() const = 0;
0213   virtual bool isIndirectVirtualBaseClass() const = 0;
0214   virtual bool isInterfaceUdt() const = 0;
0215   virtual bool isIntrinsic() const = 0;
0216   virtual bool isLTCG() const = 0;
0217   virtual bool isLocationControlFlowDependent() const = 0;
0218   virtual bool isMSILNetmodule() const = 0;
0219   virtual bool isMatrixRowMajor() const = 0;
0220   virtual bool isManagedCode() const = 0;
0221   virtual bool isMSILCode() const = 0;
0222   virtual bool isMultipleInheritance() const = 0;
0223   virtual bool isNaked() const = 0;
0224   virtual bool isNested() const = 0;
0225   virtual bool isOptimizedAway() const = 0;
0226   virtual bool isPacked() const = 0;
0227   virtual bool isPointerBasedOnSymbolValue() const = 0;
0228   virtual bool isPointerToDataMember() const = 0;
0229   virtual bool isPointerToMemberFunction() const = 0;
0230   virtual bool isPureVirtual() const = 0;
0231   virtual bool isRValueReference() const = 0;
0232   virtual bool isRefUdt() const = 0;
0233   virtual bool isReference() const = 0;
0234   virtual bool isRestrictedType() const = 0;
0235   virtual bool isReturnValue() const = 0;
0236   virtual bool isSafeBuffers() const = 0;
0237   virtual bool isScoped() const = 0;
0238   virtual bool isSdl() const = 0;
0239   virtual bool isSingleInheritance() const = 0;
0240   virtual bool isSplitted() const = 0;
0241   virtual bool isStatic() const = 0;
0242   virtual bool hasPrivateSymbols() const = 0;
0243   virtual bool isUnalignedType() const = 0;
0244   virtual bool isUnreached() const = 0;
0245   virtual bool isValueUdt() const = 0;
0246   virtual bool isVirtual() const = 0;
0247   virtual bool isVirtualBaseClass() const = 0;
0248   virtual bool isVirtualInheritance() const = 0;
0249   virtual bool isVolatileType() const = 0;
0250   virtual bool wasInlined() const = 0;
0251   virtual std::string getUnused() const = 0;
0252 };
0253 
0254 LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
0255 
0256 } // namespace pdb
0257 } // namespace llvm
0258 
0259 #endif