Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.