Home | History | Annotate | Line # | Download | only in PDB
      1 //===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 
      9 #ifndef LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
     10 #define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
     11 
     12 #include "PDBTypes.h"
     13 #include "llvm/ADT/BitmaskEnum.h"
     14 #include "llvm/ADT/SmallVector.h"
     15 #include "llvm/DebugInfo/CodeView/CodeView.h"
     16 #include <memory>
     17 
     18 namespace llvm {
     19 class raw_ostream;
     20 class StringRef;
     21 
     22 namespace pdb {
     23 
     24 enum class PdbSymbolIdField : uint32_t {
     25   None = 0,
     26   SymIndexId = 1 << 0,
     27   LexicalParent = 1 << 1,
     28   ClassParent = 1 << 2,
     29   Type = 1 << 3,
     30   UnmodifiedType = 1 << 4,
     31   All = 0xFFFFFFFF,
     32   LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All)
     33 };
     34 
     35 void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value,
     36                        int Indent, const IPDBSession &Session,
     37                        PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags,
     38                        PdbSymbolIdField RecurseFlags);
     39 
     40 /// IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
     41 /// It exposes a monolithic interface consisting of accessors for the union of
     42 /// all properties that are valid for any symbol type.  This interface is then
     43 /// wrapped by a concrete class which exposes only those set of methods valid
     44 /// for this particular symbol type.  See PDBSymbol.h for more details.
     45 class IPDBRawSymbol {
     46 public:
     47   virtual ~IPDBRawSymbol();
     48 
     49   virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
     50                     PdbSymbolIdField RecurseIdFields) const = 0;
     51 
     52   virtual std::unique_ptr<IPDBEnumSymbols>
     53   findChildren(PDB_SymType Type) const = 0;
     54 
     55   virtual std::unique_ptr<IPDBEnumSymbols>
     56   findChildren(PDB_SymType Type, StringRef Name,
     57                PDB_NameSearchFlags Flags) const = 0;
     58   virtual std::unique_ptr<IPDBEnumSymbols>
     59   findChildrenByAddr(PDB_SymType Type, StringRef Name,
     60                      PDB_NameSearchFlags Flags,
     61                      uint32_t Section, uint32_t Offset) const = 0;
     62   virtual std::unique_ptr<IPDBEnumSymbols>
     63   findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
     64                    uint64_t VA) const = 0;
     65   virtual std::unique_ptr<IPDBEnumSymbols>
     66   findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
     67                     uint32_t RVA) const = 0;
     68 
     69   virtual std::unique_ptr<IPDBEnumSymbols>
     70   findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const = 0;
     71   virtual std::unique_ptr<IPDBEnumSymbols>
     72   findInlineFramesByRVA(uint32_t RVA) const = 0;
     73   virtual std::unique_ptr<IPDBEnumSymbols>
     74   findInlineFramesByVA(uint64_t VA) const = 0;
     75 
     76   virtual std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const = 0;
     77   virtual std::unique_ptr<IPDBEnumLineNumbers>
     78   findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,
     79                          uint32_t Length) const = 0;
     80   virtual std::unique_ptr<IPDBEnumLineNumbers>
     81   findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const = 0;
     82   virtual std::unique_ptr<IPDBEnumLineNumbers>
     83   findInlineeLinesByVA(uint64_t VA, uint32_t Length) const = 0;
     84 
     85   virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const = 0;
     86   virtual void getBackEndVersion(VersionInfo &Version) const = 0;
     87   virtual PDB_MemberAccess getAccess() const = 0;
     88   virtual uint32_t getAddressOffset() const = 0;
     89   virtual uint32_t getAddressSection() const = 0;
     90   virtual uint32_t getAge() const = 0;
     91   virtual SymIndexId getArrayIndexTypeId() const = 0;
     92   virtual uint32_t getBaseDataOffset() const = 0;
     93   virtual uint32_t getBaseDataSlot() const = 0;
     94   virtual SymIndexId getBaseSymbolId() const = 0;
     95   virtual PDB_BuiltinType getBuiltinType() const = 0;
     96   virtual uint32_t getBitPosition() const = 0;
     97   virtual PDB_CallingConv getCallingConvention() const = 0;
     98   virtual SymIndexId getClassParentId() const = 0;
     99   virtual std::string getCompilerName() const = 0;
    100   virtual uint32_t getCount() const = 0;
    101   virtual uint32_t getCountLiveRanges() const = 0;
    102   virtual void getFrontEndVersion(VersionInfo &Version) const = 0;
    103   virtual PDB_Lang getLanguage() const = 0;
    104   virtual SymIndexId getLexicalParentId() const = 0;
    105   virtual std::string getLibraryName() const = 0;
    106   virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
    107   virtual uint32_t getLiveRangeStartAddressSection() const = 0;
    108   virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
    109   virtual codeview::RegisterId getLocalBasePointerRegisterId() const = 0;
    110   virtual SymIndexId getLowerBoundId() const = 0;
    111   virtual uint32_t getMemorySpaceKind() const = 0;
    112   virtual std::string getName() const = 0;
    113   virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0;
    114   virtual uint32_t getNumberOfColumns() const = 0;
    115   virtual uint32_t getNumberOfModifiers() const = 0;
    116   virtual uint32_t getNumberOfRegisterIndices() const = 0;
    117   virtual uint32_t getNumberOfRows() const = 0;
    118   virtual std::string getObjectFileName() const = 0;
    119   virtual uint32_t getOemId() const = 0;
    120   virtual SymIndexId getOemSymbolId() const = 0;
    121   virtual uint32_t getOffsetInUdt() const = 0;
    122   virtual PDB_Cpu getPlatform() const = 0;
    123   virtual uint32_t getRank() const = 0;
    124   virtual codeview::RegisterId getRegisterId() const = 0;
    125   virtual uint32_t getRegisterType() const = 0;
    126   virtual uint32_t getRelativeVirtualAddress() const = 0;
    127   virtual uint32_t getSamplerSlot() const = 0;
    128   virtual uint32_t getSignature() const = 0;
    129   virtual uint32_t getSizeInUdt() const = 0;
    130   virtual uint32_t getSlot() const = 0;
    131   virtual std::string getSourceFileName() const = 0;
    132   virtual std::unique_ptr<IPDBLineNumber>
    133   getSrcLineOnTypeDefn() const = 0;
    134   virtual uint32_t getStride() const = 0;
    135   virtual SymIndexId getSubTypeId() const = 0;
    136   virtual std::string getSymbolsFileName() const = 0;
    137   virtual SymIndexId getSymIndexId() const = 0;
    138   virtual uint32_t getTargetOffset() const = 0;
    139   virtual uint32_t getTargetRelativeVirtualAddress() const = 0;
    140   virtual uint64_t getTargetVirtualAddress() const = 0;
    141   virtual uint32_t getTargetSection() const = 0;
    142   virtual uint32_t getTextureSlot() const = 0;
    143   virtual uint32_t getTimeStamp() const = 0;
    144   virtual uint32_t getToken() const = 0;
    145   virtual SymIndexId getTypeId() const = 0;
    146   virtual uint32_t getUavSlot() const = 0;
    147   virtual std::string getUndecoratedName() const = 0;
    148   virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const = 0;
    149   virtual SymIndexId getUnmodifiedTypeId() const = 0;
    150   virtual SymIndexId getUpperBoundId() const = 0;
    151   virtual Variant getValue() const = 0;
    152   virtual uint32_t getVirtualBaseDispIndex() const = 0;
    153   virtual uint32_t getVirtualBaseOffset() const = 0;
    154   virtual std::unique_ptr<PDBSymbolTypeBuiltin>
    155   getVirtualBaseTableType() const = 0;
    156   virtual SymIndexId getVirtualTableShapeId() const = 0;
    157   virtual PDB_DataKind getDataKind() const = 0;
    158   virtual PDB_SymType getSymTag() const = 0;
    159   virtual codeview::GUID getGuid() const = 0;
    160   virtual int32_t getOffset() const = 0;
    161   virtual int32_t getThisAdjust() const = 0;
    162   virtual int32_t getVirtualBasePointerOffset() const = 0;
    163   virtual PDB_LocType getLocationType() const = 0;
    164   virtual PDB_Machine getMachineType() const = 0;
    165   virtual codeview::ThunkOrdinal getThunkOrdinal() const = 0;
    166   virtual uint64_t getLength() const = 0;
    167   virtual uint64_t getLiveRangeLength() const = 0;
    168   virtual uint64_t getVirtualAddress() const = 0;
    169   virtual PDB_UdtType getUdtKind() const = 0;
    170   virtual bool hasConstructor() const = 0;
    171   virtual bool hasCustomCallingConvention() const = 0;
    172   virtual bool hasFarReturn() const = 0;
    173   virtual bool isCode() const = 0;
    174   virtual bool isCompilerGenerated() const = 0;
    175   virtual bool isConstType() const = 0;
    176   virtual bool isEditAndContinueEnabled() const = 0;
    177   virtual bool isFunction() const = 0;
    178   virtual bool getAddressTaken() const = 0;
    179   virtual bool getNoStackOrdering() const = 0;
    180   virtual bool hasAlloca() const = 0;
    181   virtual bool hasAssignmentOperator() const = 0;
    182   virtual bool hasCTypes() const = 0;
    183   virtual bool hasCastOperator() const = 0;
    184   virtual bool hasDebugInfo() const = 0;
    185   virtual bool hasEH() const = 0;
    186   virtual bool hasEHa() const = 0;
    187   virtual bool hasFramePointer() const = 0;
    188   virtual bool hasInlAsm() const = 0;
    189   virtual bool hasInlineAttribute() const = 0;
    190   virtual bool hasInterruptReturn() const = 0;
    191   virtual bool hasLongJump() const = 0;
    192   virtual bool hasManagedCode() const = 0;
    193   virtual bool hasNestedTypes() const = 0;
    194   virtual bool hasNoInlineAttribute() const = 0;
    195   virtual bool hasNoReturnAttribute() const = 0;
    196   virtual bool hasOptimizedCodeDebugInfo() const = 0;
    197   virtual bool hasOverloadedOperator() const = 0;
    198   virtual bool hasSEH() const = 0;
    199   virtual bool hasSecurityChecks() const = 0;
    200   virtual bool hasSetJump() const = 0;
    201   virtual bool hasStrictGSCheck() const = 0;
    202   virtual bool isAcceleratorGroupSharedLocal() const = 0;
    203   virtual bool isAcceleratorPointerTagLiveRange() const = 0;
    204   virtual bool isAcceleratorStubFunction() const = 0;
    205   virtual bool isAggregated() const = 0;
    206   virtual bool isIntroVirtualFunction() const = 0;
    207   virtual bool isCVTCIL() const = 0;
    208   virtual bool isConstructorVirtualBase() const = 0;
    209   virtual bool isCxxReturnUdt() const = 0;
    210   virtual bool isDataAligned() const = 0;
    211   virtual bool isHLSLData() const = 0;
    212   virtual bool isHotpatchable() const = 0;
    213   virtual bool isIndirectVirtualBaseClass() const = 0;
    214   virtual bool isInterfaceUdt() const = 0;
    215   virtual bool isIntrinsic() const = 0;
    216   virtual bool isLTCG() const = 0;
    217   virtual bool isLocationControlFlowDependent() const = 0;
    218   virtual bool isMSILNetmodule() const = 0;
    219   virtual bool isMatrixRowMajor() const = 0;
    220   virtual bool isManagedCode() const = 0;
    221   virtual bool isMSILCode() const = 0;
    222   virtual bool isMultipleInheritance() const = 0;
    223   virtual bool isNaked() const = 0;
    224   virtual bool isNested() const = 0;
    225   virtual bool isOptimizedAway() const = 0;
    226   virtual bool isPacked() const = 0;
    227   virtual bool isPointerBasedOnSymbolValue() const = 0;
    228   virtual bool isPointerToDataMember() const = 0;
    229   virtual bool isPointerToMemberFunction() const = 0;
    230   virtual bool isPureVirtual() const = 0;
    231   virtual bool isRValueReference() const = 0;
    232   virtual bool isRefUdt() const = 0;
    233   virtual bool isReference() const = 0;
    234   virtual bool isRestrictedType() const = 0;
    235   virtual bool isReturnValue() const = 0;
    236   virtual bool isSafeBuffers() const = 0;
    237   virtual bool isScoped() const = 0;
    238   virtual bool isSdl() const = 0;
    239   virtual bool isSingleInheritance() const = 0;
    240   virtual bool isSplitted() const = 0;
    241   virtual bool isStatic() const = 0;
    242   virtual bool hasPrivateSymbols() const = 0;
    243   virtual bool isUnalignedType() const = 0;
    244   virtual bool isUnreached() const = 0;
    245   virtual bool isValueUdt() const = 0;
    246   virtual bool isVirtual() const = 0;
    247   virtual bool isVirtualBaseClass() const = 0;
    248   virtual bool isVirtualInheritance() const = 0;
    249   virtual bool isVolatileType() const = 0;
    250   virtual bool wasInlined() const = 0;
    251   virtual std::string getUnused() const = 0;
    252 };
    253 
    254 LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
    255 
    256 } // namespace pdb
    257 } // namespace llvm
    258 
    259 #endif
    260